Wiktionary viwiktionary https://vi.wiktionary.org/wiki/Wiktionary:Trang_Ch%C3%ADnh MediaWiki 1.46.0-wmf.26 case-sensitive Phương tiện Đặc biệt Thảo luận Thành viên Thảo luận Thành viên Wiktionary Thảo luận Wiktionary Tập tin Thảo luận Tập tin MediaWiki Thảo luận MediaWiki Bản mẫu Thảo luận Bản mẫu Trợ giúp Thảo luận Trợ giúp Thể loại Thảo luận Thể loại Phụ lục Thảo luận Phụ lục TimedText TimedText talk Mô đun Thảo luận Mô đun Event Event talk chó 0 1635 2350095 2322403 2026-05-04T04:48:12Z WhoAlone 40420 2350095 wikitext text/x-wiki {{also|Phụ lục:Biến thể của “cho”}} {{-vie-}} {{-info-}} [[Hình:GermanShep1 wb.jpg|nhỏ|'''Chó''' béc-giê.]] {{-alternative form-}} * {{q|từ lóng Internet}} {{alter|vi|cờ hó}} * {{q|đọc chệch}} {{alter|vi|tó}} {{-etymology-}} Từ {{etym-inh|vi|mkh-vie-pro|*ʔa-cɔːʔ}} < {{etym-inh|vi|mkh-pro|*cɔʔ||chó}}; cùng gốc với {{cognate|sea|co||chó, đầy tớ, nô lệ}}, {{cognate|hal|chô||chó}}, {{cognate|pac|acho||chó}}, {{cognate|kjg|-}} ''sɔʔ'' và {{cognate|zng|θɔː¹}}. So sánh thêm với {{cognate|km|ច||Tuất}}, một từ vay mượn từ ngữ chi Việt. {{-pron-}} {{vie-pron}} * {{audio|vi|LL-Q9199 (vie)-Jessica Nguyen (Pamputt)-chó.wav|Âm thanh (Sài Gòn)}} {{-nôm-}} {{đầu}} * [[㹥]]: '''chó''' * [[犾]]: '''chó''' * [[犬]]: khuyển, '''chó''' {{giữa}} * [[𤝹]]: '''chó''', chù * [[𤠚]]: '''chó''' * [[𦢞]]: '''chó''' {{bottom}} {{-paro-}} {{đầu}} * {{vi-l|cho}} * {{vi-l|chò}} * {{vi-l|chọ}} * {{vi-l|chỏ}} * {{vi-l|chõ}} * {{vi-l|chồ}} * {{vi-l|chộ}} * {{vi-l|chỗ}} * {{vi-l|chơ}} * {{vi-l|chờ}} * {{vi-l|chớ}} * {{vi-l|chợ}} * {{vi-l|chở}} {{cuối}} {{-noun-}} {{vie-noun|cls=con}} # Loài [[động vật]] thuộc nhóm [[ăn thịt]], [[nuôi]] để [[giữ]] [[nhà]] hay đi [[săn]], v.v. Danh pháp khoa học: {{mention|mul|Canis familiaris}} hoặc {{mention|mul|Canis lupus familiaris}}. #: {{synonyms|vi|cẩu|khuyển|cầy|ki|q1=từ Hán-Việt|q2=từ Hán-Việt|q3=về mặt để ăn thịt|q4=thông tục}} #: {{ux|vi|Nuôi '''chó''' giữ nhà.}} #* '''1943''', {{w|Nam Cao}}, ''[[s:Lão Hạc|Lão Hạc]]'': #*: {{quote|vi|- Có lẽ tôi bán con '''chó''' đấy, ông giáo ạ!}} {{vie-noun|cls=[[con]], [[thằng]]}} # {{label|vi|thô tục}} Dùng để ví kẻ đáng [[khinh miệt]], và làm tiếng [[mắng nhiếc]]. #: {{ux|vi|Cái lũ '''chó''' khốn nạn này! Ai cho chúng mày nghịch nước hả?}} {{-derived-}} {{column|vi|n=3|bọ chó|bơi chó|chó ăn đá gà ăn sỏi|chó Bắc Kinh|chó biển|chó bông|chó cảnh|chó cắn áo rách|chó cậy gần nhà, gà cậy gần chuồng|chó chê mèo lắm lông|chó chết|chó chui gầm chạn|chó có váy lĩnh|chó cỏ|chó dé|chó đá vẫy đuôi|chó đẻ|chó đen giữ mực|chó đểu|chó đốm|chó ghẻ|chó già giữ xương|chó khô mèo lạc|chó lài|chó má|chó mái chim mồi|chó mực|chó ngao|chó ngáp phải ruồi|chó nghiệp vụ|chó nhà quê đòi ăn mắm mực|chó nhảy bàn độc|chó ông thánh cắn ra chữ|chó phốc|chó Phú Quốc|chó rừng|chó săn|chó săn chim mồi|chó sói|chó sục|chó ta|chó treo mèo đậy|chó vá|chó vện|chó xù|cờ chân chó|cờ chó|gấu chó|húng chó|khỉ đầu chó|khỉ mặt chó|lên voi xuống chó|lửng chó|máu chó|mèo đến nhà thì khó, chó đến nhà thì sang|mồm chó vó ngựa|óc chó|thịt chó|treo đầu dê, bán thịt chó|ve chó}} {{-trans-}} {{multitrans|data= {{trans-top|Loài động vật}} * {{aas}}: {{t2|aas|wa-t}} * {{aau}}: {{t2|aau|nwoh}} * {{abq}}: {{t2|abq|ла}} * {{ab}}: {{t2|ab|ала}} * {{ace}}: {{t2|ace|asèë}}, {{t2|ace|asei}} * {{ach}}: {{t2|ach|gwok}} * {{ady}}: {{t2|ady|хьэ}} {{q|Abzakh}}, {{t2|ady|хьэжъ}} {{q|Shapsug}} * {{aa}}: {{t2|aa|kuta}} * {{afr}}: {{tt+|af|hond}} * {{ain}}: {{t2|ain|セタ|tr=seta}}, {{t2|ain|レエㇷ゚|tr=reep}} * {{en}}: {{tt+|en|dog}} ** {{ang}}: {{tt+|ang|hund|m}} ** {{enm}}: {{t2|enm|dogge}}, {{t2|enm|hound}} * {{as}}: {{t2|as|কুকুৰ}} * {{tay}}: {{t2|tay|huzil}}, {{t2|tay|hu-il}}, {{t2|tay|hoyel}} * {{aze}}: {{tt+|az|it}}, {{tt+|az|köpək}} * {{pol}}: {{tt+|pl|pies|m}}, {{tt+|pl|suka|f}} {{q|chó cái}} * {{bdq}}: {{t2|bdq|kŏ}} * {{eu}}: {{tt+|eu|txakur}}, {{t2|eu|etxe-txakur}} * {{nod}}: {{t2|nod|ᩉ᩠ᨾᩣ}} * {{pt}}: {{tt+|pt|cão|m}}, {{tt+|pt|cachorro|m}} * {{br}}: {{tt+|br|ki|m}}, {{tt+|br|chas|p}}, {{tt+|br|kiez|f}} {{q|chó cái}}, {{tt+|br|kiezed|p}} ** {{xbm}}: {{t2|xbm|ci|m}} * {{cat}}: {{tt+|ca|gos|m}}, {{tt+|ca|ca|m}}, {{tt+|ca|quisso|m}} {{q|ngôn ngữ trẻ con}}, {{tt+|ca|gossa|f}}, {{t2|ca|cutxu}} {{q|Alghero}} * {{chr}}: {{tt+|chr|ᎩᏟ}}, {{tt+|chr|ᎩᎵ}} * {{kw}}: {{t2|kw|ki}} * {{crk}}: {{t2|crk|atim}} * {{aaq}}: {{t2|aaq|alemos}} * {{dan}}: {{t2+|da|hund|c}} * {{de}}: {{tt+|de|Hund|m}}, {{tt+|de|Hündin|f}} ** {{gsw}}: {{t2|gsw|Hund|m}} ** {{gmh}}: {{t2|gmh|hunt|m}} ** {{goh}}: {{t2|goh|hunt|m}} * {{est}}: {{tt+|et|koer}}, {{tt+|et|peni}} * {{rad}}: {{t2|rad|asâo}} * {{fao}}: {{tt+|fo|hundur|m}} * {{gl}}: {{tt+|gl|can|m}}, {{tt+|gl|cadela|f}}, {{tt+|gl|cuzo|m}}, {{tt+|gl|cuza|f}} * {{jra}}: {{t2|jra|asâo}} * {{ka}}: {{tt+|ka|ძაღლი}} * {{nl}}: {{tt+|nl|hond|m}} * {{haw}}: {{t2|haw|ʻīlio}} * {{hun}}: {{tt+|hu|kutya}}, {{tt+|hu|eb}} * {{ell}}: {{tt+|el|σκύλος|m}}, {{tt+|el|σκυλί|n}} ** {{grc}}: {{t2|grc|κύων|m|f}}, {{t2|grc|σκύλαξ|m}}, {{t2|grc|σκύλλος|m}} * {{is}}: {{tt+|is|hundur|m}} * {{ido}}: {{tt+|io|hundo}}, {{tt+|io|hundino}} {{q|chó cái}} * {{id}}: {{tt+|id|anjing}}, {{tt+|id|asu}} * {{iu}}: {{t2|iu|ᕿᒻᒥᖅ}} * {{ik}}: {{t2|ik|qimmiq}} * {{jav}}: {{tt+|jv|ꦲꦱꦸ}}, {{t2|jv|sagawon}}, {{tt+|jv|baung}}, {{tt+|jv|cemera}}, {{tt+|jv|sona}} * {{csb}}: {{t2|csb|tósz}}, {{t2|csb|pies}} * {{khm}}: {{tt+|km|ឆ្កែ}} * {{kru}}: [[alla]] * {{lao}}: {{tt+|lo|ໝາ}} * {{la}}: {{tt+|la|canis|m}} * {{ii}}: {{t2|ii|ꈌ}} * {{khb}}: {{t2|khb|ᦖᦱ}} * {{zng}}: {{t2|zng|θɔː¹}} * {{mri}}: {{tt+|mi|kurī}} * {{mya}}: {{tt+|my|ခွေး}} * {{mnw}}: {{tt+|mnw|ကၠဵု}} * {{mtq}}: {{t2|mtq|chỏ}} * {{nah}}: ** {{nci}}: {{t2|nci|chichi}}, {{t2|nci|itzcuintli}} ** {{nch}}: {{t2|nch|chichi}} ** {{nhn}}: {{t2|nhn|chichi}}, {{t2|nhn|itzcuintli}} * {{ja}}: {{tt+|ja|犬|tr=いぬ, inu}}, {{tt+|ja|狗|tr=いぬ, inu}} * {{nrf}}: {{t2|nrf|tchian|m}} {{q|Guernsey|Jersey}} * {{or}}: {{tt+|or|କୁକୁର}} * {{orh}}: {{t2|orh|ŋinaɣɪn}} * {{oss}}: {{t2|os|куыдз}} {{q|Iron}}, {{t2|os|куй}} {{q|Digor}} * {{pac}}: {{t2|pac|acho}} * {{pzh}}: {{t2|pzh|wazu}} * {{bxd}}: {{t2|bxd|kʰui³⁵}} * {{fr}}: {{tt+|fr|chien|m}} * {{epo}}: {{tt+|eo|hundo}}, {{tt+|eo|hundino}} {{q|chó cái}} * {{rap}}: {{t2|rap|paihéŋa}} * {{sad}}: {{t2|sad|káákà}} * {{trv}}: {{t2|trv|huling}} * {{ses}}: {{t2|ses|hanchii}}, {{t2|ses|abaykor}}, {{t2|ses|hansi}} * {{shn}}: {{tt+|shn|မႃ}} * {{tam}}: {{tt+|ta|நாய்}} * {{twf}}: {{t2|twf|cùloʼóna}} * {{tat}}: {{tt+|tt|эт}} * {{tyz}}: {{t2|tyz|ma}} * {{abe}}: {{t2|abe|adia}}, {{t2|abe|alemos}} * {{es}}: {{tt+|es|perro|m}}, {{tt+|es|can|m}} {{q|trang trọng}} * {{bo}}: {{t2|bo|ཁྱི}} * {{tha}}: {{tt+|th|หมา}}, {{tt+|th|สุนัข}} * {{blt}}: {{t2|blt|ꪢꪱ|tr=ma}} * {{sv}}: {{tt+|sv|hund|c}}, {{tt+|sv|hynda|c}} {{q|chó cái}} * {{zha}}: {{t2|za|ma}} * {{ko}}: {{tt+|ko|개}}, {{tt+|ko|견(犬)}}, {{tt+|ko|구(狗)}} * {{zho}}: ** {{gan}}: {{t2|gan|狗|tr=gieu3}} ** {{zhx-tai}}: {{t2|zhx-tai|狗}} ** {{dng}}: {{t2|dng|гу}} ** {{hak}}: {{t2|hak|狗仔|tr=kéu-é}} ** {{mnp}}: {{t2|mnp|狗仔|tr=ě-ciě}}, {{t2|mnp|狗|tr=ě}} ** {{cdo}}: {{t2|cdo|犬|tr=kēng}} ** {{nan}}: {{tt+|nan|狗|tr=káu}} ** {{wuu}}: {{t2|wuu|狗}} ** {{cmn}}: {{tt+|cmn|狗}}, {{tt+|cmn|犬}} {{q|văn chương}} ** {{yue}}: {{t2|yue|狗}}, {{tt+|yue|犬}} {{q|văn chương}} ** {{hsn}}: {{t2|hsn|狗|tr=gou3}} * {{ude}}: {{t2|ude|инʼаи}} * {{urd}}: {{tt+|ur|کتا|m|tr=kuttā}} * {{ium}}: {{t2|ium|juv}} * {{vol}}: {{tt+|vo|dog}}, {{tt+|vo|jidog}} {{q|chó cái}}, {{tt+|vo|jodog}} {{q|chó cái bị triệt sản}} * {{it}}: {{tt+|it|cane|m}} * {{yii}}: {{t2|yii|gudaga}} * {{yo}}: {{t2|yo|ajá}} {{trans-bottom}} }} {{-see also-}} * {{vi-l|Tuất}} * {{vi-l|cún}} * [[Thesaurus:chó]] {{-anagram-}} * {{anagrams|vi|hóc}} {{-reference-}} {{R:Tratu|vn|vn}} {{R:WinVNKey:Lê Sơn Thanh}} {{C|vi|Chó}} {{-mtq-}} {{-paro-}} {{đầu}} * {{l|mtq|cho}} * {{l|mtq|chò}} * {{l|mtq|chỏ}} * {{l|mtq|chõ}} * {{l|mtq|chồ}} * {{l|mtq|chố}} * {{l|mtq|chỗ}} * {{l|mtq|chờ}} * {{l|mtq|chớ}} * {{l|mtq|chở}} * {{l|mtq|chỡ}} * {{l|mtq|Chỡ}} {{cuối}} {{-noun-}} {{mtq-noun}} # {{label|mtq|Mường Bi}} Một loại [[bồ]] nhỏ để [[đựng]] [[đồ]] (như [[chăn]], [[quần áo]], v.v.), có [[quai]] và [[nắp]]; cái [[bịch]] đựng đồ. # {{label|mtq|Mường Bi}} Cái [[sọt]]. {{-reference-}} {{R:Nguyễn Văn Khang, Bùi Chỉ, Hoàng Văn Hành 2002|page=88}} {{c|mtq|Dụng cụ}} {{-tyz-}} {{-pron-}} {{tyz-IPA}} {{-paro-}} * {{l|tyz|chò}} * {{l|tyz|chỏ}} {{-adjc-}} {{tyz-adj}} # [[mòn|Mòn]]. {{-reference-}} {{R:Lương Bèn}} =={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # {{l|vi|chó}}. #:{{ux|sed|rup môi to '''chó'''|Bắt một con '''chó'''}} ==={{đm|ref}}=== {{R:VOV}} {{c|sed|Chó}} q6drq1xp0bljg71k9yjqtxrutvwtbpd 0 27021 2349977 2324710 2026-05-03T14:36:11Z WhoAlone 40420 2349977 wikitext text/x-wiki {{also|Phụ lục:Biến thể của "ga"}} =={{langname|vi}}== {{multiple images |direction=vertical |image1=Rhode island red 1915 lithograph.jpg |caption1=Gà |image2=Ain't nobody here but us chickens (8257964331).jpg}} ==={{section|pron}}=== {{vi-IPA}} * {{audio|vi|LL-Q9199 (vie)-Jessica Nguyen (Pamputt)-gà.wav|a=TP.HCM}} ==={{section|noun}}=== {{vi-noun|cls=con|[[鷄]], [[雞]], [[猗]], [[鵸]], [[𤠄]], [[𪂮]], [[𪃴]], [[𪃿]]}} # [[loài|Loài]] [[chim]] [[nuôi]] ([[gia cầm]]) để [[lấy]] [[thịt]] và [[trứng]], [[bay]] [[kém]], [[mỏ]] [[cứng]], [[con]] [[trống]] có [[cựa]] và [[biết]] [[gáy]]. #: {{ux|vi|Bán '''gà''' ngày gió, bán chó ngày mưa.}} #: {{ux|vi|'''Gà''' người gáy, '''gà''' nhà ta sáng.}} ===={{section|drv}}==== {{col3|vi|gà công nghiệp|gà qué|gà tây|ho gà|quáng gà|gà mờ|gà lôi|gà ác|gà so|gà gô|gà rù|gà ta|gà tiền|gà sao|gà vịt|cánh gà|lưỡi gà|gà ri|gà bới|mèo mả gà đồng|nhìn gà hoá cuốc|gà bông|lên bàn thờ ngắm gà khoả thân|bút sa gà chết|gà đẻ trứng vàng|chủ vắng nhà, gà vọc niêu tôm|thịt gà}} ===={{section|trans}}==== {{trans-top|Loài chim nuôi (gia cầm) để lấy thịt và trứng; bay kém; mỏ nhọn}} * {{langname|ar}}: {{t+|ar|دَجَاجَة|f}} *: {{langname|arz}}: {{t+|arz|فرخة|f|tr=farḵa}} *: {{langname|afb}}: {{t+|afb|دياي}} * {{langname|abq}}: {{t+|abq|квтӏу}} * {{langname|ab}}: {{t+|ab|акуты|alt=а-куты}} * {{langname|ace}}: {{t+|ace|manok}} * {{langname|ady}}: {{t+|ady|чэты}}, {{qualifier|Shapsug}} {{t+|ady|кьэт}} * {{langname|af}}: {{t+|af|hoender}}, {{t+|af|haan|m}}, {{t+|af|hen|f}} * {{langname|aho}}: {{t+|aho|𑜀𑜩}}, {{t+|aho|𑜃𑜤𑜀𑜫 𑜀𑜩}} * {{langname|ak}}: {{t+|ak|akokɔ}} * {{langname|akl}}: {{t+|akl|manok}} * {{langname|abz}}: {{t+|akz|akaaka}} * {{langname|sq}}: {{t+|sq|pulë}} * Tiếng Altai: *: {{langname|alt}}: {{t+|alt|таак}}, {{t+|alt|куштыҥ балазы}} * {{langname|en}}: {{t+|en|chicken}} * Tiếng Aram: *: {{langname|syc}}: {{t+|syc|ܬܪܢܓܘܠܬܐ|f|tr=tarnāḡultā}} *: {{langname|aii}}: {{t+|aii|ܟܬܲܝܬܵܐ|tr=ktayta}} * {{langname|hy}}: {{qualifier|đực}} {{t+|hy|հավ}}, {{qualifier|đực}} {{t+|hy|աքլոր}}, {{qualifier|trẻ}} {{t+|hy|ճուտ}} * {{langname|as}}: {{t+|as|কুকুৰা}} * {{langname|ast}}: {{t+|ast|pollu|m}} * {{langname|az}}: {{t+|az|toyuq}} * {{langname|bdq}}: {{t+|bdq|iĕr}} * {{langname|ba}}: {{t+|ba|тауыҡ}} * {{langname|eu}}: {{t+|eu|oilasko}}, {{t+|eu|oilo}} * {{langname|bn}}: {{t+|bn|মুরগি}}, {{t+|bn|মুরগী}}, {{t+|bn|মুর্গি}}, {{t+|bn|মুর্গী}} * {{langname|bua}}: {{t+|bua|тахяа}} * {{langname|ca}}: {{t+|ca|pollastre|m}}, {{t+|ca|pollet|m}}, {{t+|ca|poll|m}} * {{langname|chc}}: {{t+|chc|watka}} * {{langname|ceb}}: {{t+|ceb|manok}} * {{langname|cop}}: {{t+|cop|ⲉⲣϫ}} * {{langname|dta}}: {{t+|dta|kakraa}} * {{langname|dv}}: {{t+|dv|ކުކުޅު}} * {{langname|dz}}: {{t+|dz|བྱམོ}} * {{langname|nl}}: {{t+|nl|kip|f}}, {{t+|nl|hen|f}}, {{t+|nl|hoen|n}} * {{langname|km}}: {{t+|km|មាន់}} * {{langname|my}}: {{t+|my|ကြက်}} * {{langname|ja}}: {{t+|ja|鶏|tr=ニワトリ, にわとり, niwatori}}, {{t+|ja|臼辺鳥|tr=うすべどり, usubedori}} * {{langname|cs}}: {{t+|cs|slepice|f}}, {{t+|cs|kur|m}}, {{t+|cs|kuře|n}} * {{langname|es}}: {{t+|es|pollo|m}} * {{langname|bo}}: {{t+|bo|བྱ་དེ}} * {{langname|th}}: {{t+|th|ไก่}} * {{langname|zh}}: *: {{langname|nan-hbl}}: {{t+|nan-hbl|雞//鷄//鸡|tr=koe, ke, kere}}, {{t+|nan-hbl|雞仔//鷄仔//鸡仔|tr=koe-á, ke-á}} *: {{langname|cmn}}: {{t+|cmn|雞//鷄//鸡|tr=jī}} * {{langname|da}}: {{t+|da|kylling|c}}, {{t+|da|høne|c}} {{trans-bottom}} {{C|vi|Gà}} ==={{section|verb}}=== {{vi-verb}} # {{lb|vi|card games}} [[đánh cuộc|Đánh cuộc]] [[riêng]] trong một [[ván]] [[bài]] [[tổ tôm]] hay [[tài bàn]] [[ngoài]] [[số]] [[tiền]] [[góp]] [[chính]]. #: {{ux|vi|'''Gà''' lần nào cũng thua thì đánh làm gì.}} # Làm [[hộ]] [[bài]]. #: {{ux|vi|Để em nó tự làm toán, anh đừng '''gà''' cho nó.}} # {{lb|vi|board games}} [[mách nước|Mách nước]]. #: {{ux|vi|Cờ đương bí, ông ấy chỉ '''gà''' cho một nước mà thành thắng.}} ==={{section|adj}}=== {{vi-adj}} # Chỉ một [[người]] [[làm]] [[việc]] còn chưa thành thạo (thường để chỉ giai đoạn đầu). #: {{syn|vi|nghiệp dư|cùi bắp}} #: {{ux|vi|Mày chơi '''gà''' lắm.}} #: {{ux|vi|Thằng '''gà'''!}} ===={{section|trans}}==== {{trans-top|Chỉ một người làm việc chưa thành thạo}} * {{langname|en}}: {{t+|en|noob}} {{trans-bottom}} ==={{section|ref}}=== * {{R:FVDP}} * {{R:WinVNKey:Lê Sơn Thanh}} =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[mở]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} =={{langname|cmn}}== ==={{section|alt}}=== * {{alt|cmn|ga||nonstandard}} ==={{section|rom}}=== {{cmn-pinyin}} # {{cmn-pinyin of|尬}} # {{cmn-pinyin of|骱}} gt1h62wg5c8qz6stboy1ao1snnfcgq9 đồ 0 30486 2349877 2272911 2026-05-03T12:15:34Z WhoAlone 40420 2349877 wikitext text/x-wiki {{-vie-}} {{-pron-}} {{vie-pron}} {{-hanviet-}} {{top}} *[[涂]]: [[trà]], [[đồ]] *[[𡈇]]: [[đồ]] *[[𡈖]]: [[đồ]] *[[梌]]: [[đồ]] *[[瘏]]: [[đồ]] *[[徒]]: [[đồ]] *[[圕]]: [[đồ]] *[[途]]: [[đồ]] *[[圗]]: [[đồ]] *[[圖]]: [[đồ]] *[[舘]]: [[quán]], [[đồ]] *[[阇]]: [[xà]], [[đồ]] *[[蒤]]: [[đồ]], [[hậu]] *[[𧖳]]: [[đồ]] *[[酴]]: [[từ]], [[đồ]] *[[陡]]: [[đồ]], [[đẩu]] *[[凃]]: [[đồ]] *[[屠]]: [[phong]], [[đồ]], [[chư]] *[[捈]]: [[đồ]] {{mid}} *[[鷋]]: [[đồ]] *[[闍]]: [[xà]], [[đồ]] *[[稌]]: [[đồ]] *[[塗]]: [[trà]], [[đồ]] *[[㭸]]: [[đồ]] *[[啚]]: [[bỉ]], [[đồ]] *[[菟]]: [[đồ]], [[thố]], [[thỏ]] *[[嵞]]: [[đồ]] *[[筡]]: [[đồ]] *[[𠫠]]: [[đồ]] *[[𡇩]]: [[đồ]] *[[𡇫]]: [[đồ]] *[[図]]: [[đồ]], [[vi]] *[[𡇴]]: [[đồ]] *[[峹]]: [[đồ]] *[[𨢕]]: [[đồ]] *[[荼]]: [[gia]], [[đồ]] *[[跿]]: [[đồ]] *[[图]]: [[đồ]] {{bottom}} {{-hanviet-t-}} {{top}} *[[屠]]: [[đồ]], [[chư]] *[[涂]]: [[đồ]] *[[闍]]: [[xà]], [[đồ]] *[[稌]]: [[đồ]] *[[瘏]]: [[đồ]] *[[徒]]: [[đồ]] *[[途]]: [[đồ]] {{mid}} *[[塗]]: [[trà]], [[đồ]] *[[圖]]: [[đồ]] *[[啚]]: [[bỉ]], [[đồ]] *[[荼]]: [[gia]], [[đồ]] *[[菟]]: [[đồ]], [[thố]], [[thỏ]] *[[酴]]: [[đồ]] {{bottom}} {{-nôm-}} {{top}} *[[涂]]: [[dơ]], [[đồ]] *[[阇]]: [[xà]], [[đồ]] *[[𣘊]]: [[đồ]] *[[稌]]: [[đồ]] *[[瘏]]: [[đồ]] *[[徒]]: [[trò]], [[dò]], [[đò]], [[đồ]] *[[圕]]: [[đồ]] *[[途]]: [[đồ]] *[[圗]]: [[đồ]] *[[圖]]: [[đồ]] *[[蒤]]: [[đồ]] *[[度]]: [[đạc]], [[dạc]], [[đò]], [[đù]], [[đo]], [[đợ]], [[đụ]], [[đủ]], [[đồ]], [[độ]], [[đọ]], [[đác]], [[dác]] *[[妬]]: [[đó]], [[du]], [[đú]], [[đo]], [[đủ]], [[đố]], [[đồ]] *[[󰐇]]: [[đồ]] *[[莵]]: [[tho]], [[đồ]], [[thố]], [[thỏ]] *[[凃]]: [[đồ]] *[[捈]]: [[dùa]], [[đồ]], [[giùa]], [[giơ]] {{mid}} *[[鷋]]: [[đồ]], [[chà]] *[[闍]]: [[xà]], [[đồ]] *[[梌]]: [[dừa]], [[đồ]] *[[塗]]: [[trà]], [[đồ]] *[[𨃝]]: [[dò]], [[đồ]], [[giò]] *[[菟]]: [[tho]], [[đồ]], [[thố]], [[thỏ]] *[[嵞]]: [[đồ]] *[[筡]]: [[đồ]] *[[屠]]: [[đồ]] *[[𦯬]]: [[dưa]], [[đồ]] *[[図]]: [[đồ]] *[[酴]]: [[đồ]] *[[峹]]: [[đồ]] *[[荼]]: [[dưa]], [[đồ]], [[giưa]], [[đưa]] *[[跿]]: [[đồ]] *[[图]]: [[đồ]] {{bottom}} {{-paro-}} {{đầu}} :* [[đọ]] :* [[đỏ]] :* [[đo]] :* [[dở]] :* [[dỗ]] :* [[do]] :* [[đỗ]] :* [[độ]] :* [[đỡ]] {{giữa}} :* [[đó]] :* [[đò]] :* [[dỡ]] :* [[dơ]] :* [[dò]] :* [[đổ]] :* [[đố]] :* [[đờ]] :* [[đợ]] {{cuối}} {{-noun-}} '''đồ''' # [[vật|Vật]] [[do]] [[con người]] [[tạo]] [[ra]] để dùng [[hay làm]] [[thức ăn]] [[nói chung]]. #: '''''Đồ''' ăn thức uống.'' #: '''''Đồ''' chơi.'' #: ''Giặt bộ '''đồ'''.'' # [[người|Người]] [[dạy học]] [[chữ nho]] để [[thi cử]]. #: ''Thầy '''đồ'''.'' #: ''Cụ '''đồ'''.'' # [[loại|Loại]], hay [[người]] [[đáng khinh]] (dùng để nguyền rủa, mắng nhiếc). #: '''''Đồ''' ngu.'' #: '''''Đồ''' hèn.'' #: '''''Đồ''' mặt người dạ thú.'' # [[bức|Bức]] [[vẽ]]. #: ''Tranh biếng ngắm trong '''đồ''' tố nữ (<u>[[w:Cung oán ngâm khúc|Cung oán ngâm khúc]]</u>)'' {{-verb-}} '''đồ''' # [[viết|Viết]] hoặc [[vẽ]] đè [[lên]] [[những]] [[nét]] đã [[có sẵn]]. #: ''Bé '''đồ''' lên bức tranh để tập vẽ.'' # [[nấu|Nấu]] [[chín]] [[bằng]] [[hơi]] [[nước]] trong [[nồi chõ]]. #: '''''Đồ''' xôi.'' #: ''Tôm '''đồ'''.'' # [[bôi|Bôi]] hoặc [[đắp]] [[thuốc]] [[đông y]] [[lên]]. #: '''''Đồ''' một cái nhọt.'' # [[phỏng đoán|Phỏng đoán]] [[điều]] [[xẩy]] [[ra]] [[dựa]] vào [[những]] [[điều]] đã [[biết]]. #: '''''Đồ''' rằng anh ốm nên mới không đến.'' {{-ref-}} {{R:FVDP}} {{R:WinVNKey:Lê Sơn Thanh}} [[Thể loại:Danh từ tiếng Việt]] [[Thể loại:Động từ tiếng Việt]] =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[đòi]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} aattb7ynfytcnc0ybc00seb54jiw4ml măm 0 31983 2350078 1878313 2026-05-04T04:07:00Z WhoAlone 40420 2350078 wikitext text/x-wiki {{-vie-}} {{-pron-}} {{vie-pron|măm}} {{-nôm-}} {{top}} *[[鑁]]: [[măm]] *[[敏]]: [[mắn]], [[mẫn]], [[mẩn]], [[măm]] {{bottom}} {{-paro-}} {{đầu}} :* [[mắm]] :* [[mầm]] {{giữa}} :* [[mâm]] :* [[mẫm]] {{cuối}} {{-verb-}} '''măm''' # [[từ|Từ]] dùng để [[nói]] [[trẻ em]] [[ăn]]. {{-ref-}} {{R:FVDP}} {{R:WinVNKey:Lê Sơn Thanh}} [[Thể loại:Động từ tiếng Việt]] =={{langname|rmx}}== ==={{ĐM|verb}}=== {{head|rmx|Động từ}} # [[bú]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. gwvwzt9jf4faa6en6atbjwd6eodps3z phì 0 32615 2349966 2273306 2026-05-03T14:20:39Z WhoAlone 40420 2349966 wikitext text/x-wiki {{-vie-}} {{-pron-}} {{vie-pron}} {{-hanviet-}} {{top}} *[[昺]]: [[bỉnh]], [[bính]], [[phì]] *[[肥]]: [[phì]] *[[萉]]: [[phỉ]], [[ba]], [[phì]] *[[蜰]]: [[phì]] *[[腓]]: [[phì]], [[phi]] {{mid}} *[[𤷂]]: [[phì]] *[[㫵]]: [[phì]] *[[𦘺]]: [[phì]] *[[淝]]: [[phì]] {{bottom}} {{-hanviet-t-}} {{top}} *[[淝]]: [[phì]] *[[腓]]: [[phì]] {{mid}} *[[肥]]: [[phì]] *[[蜰]]: [[phì]] {{bottom}} {{-nôm-}} {{top}} *[[肥]]: [[phề]], [[phờ]], [[phì]], [[phè]] *[[腓]]: [[phì]] {{mid}} *[[淝]]: [[phì]], [[phè]] *[[蜰]]: [[phì]] {{bottom}} {{-paro-}} {{đầu}} :* [[phi]] :* [[phí]] {{giữa}} :* [[phỉ]] :* [[phị]] {{cuối}} {{-adj-}} '''phì''' # [[béo|Béo]] [[ra]], [[mập]] [[ra]] theo [[hướng]] [[xấu]]. #: ''Mặt '''phì'''.'' {{-verb-}} '''phì''' # [[phun|Phun]] [[ra]], [[bật]] [[ra]], cho [[thoát]] [[ra]]. #: ''Bánh xe '''phì''' hơi.'' {{-ref-}} {{R:FVDP}} {{R:WinVNKey:Lê Sơn Thanh}} [[Thể loại:Tính từ tiếng Việt]] [[Thể loại:Động từ tiếng Việt]] =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[đắng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} c4ndbqy6d4xpkjfvuwohezt3w0a94uh lit 0 39979 2350067 1868604 2026-05-04T03:55:57Z WhoAlone 40420 2350067 wikitext text/x-wiki {{-eng-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/'lɪt/}} {{pron-audio |place=Hoa Kỳ <!-- Feel free to precise the city or the area --> |file=en-us-lit.ogg |pron=ˈɪn.trɪ.kət}} {{-verb-}} '''lit''' # {{past of|light}} {{-noun-}} {{eng-noun|-}} # {{abbreviation of|literature}} {{-drv-}} *[[chick lit]] *[[lit crit]] {{-adj-}} {{eng-adj}} # được [[thắp]] [[sáng]]. #: He walked down the '''lit''' corridor — Anh ta đi xuống cái hành lang sáng đèn. # {{term|lóng}} bị [[say]] [[rượu]] hoặc [[phê]] [[ma túy]]. {{-trans-}} ; được thắp sáng {{đầu}} *{{fin}}: [[valaistu]] {{giữa}} {{cuối}} ; bị say rượu hoặc phê ma túy {{đầu}} *{{fin}}: [[päihtynyt]] {{giữa}} {{cuối}} {{-drv-}} *[[half lit]] {{-fra-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/li/}} {{-noun-}} {{fra-noun| s=lit|p=lits| sp=/li/|pp=/li/}} '''lit''' {{m}} {{IPA|/li/}} # [[giường|Giường]]. #: ''Ne pas quitter le '''lit''''' — ốm liệt giường #: '''''Lit''' nuptial'' — giường cưới # [[nệm|Nệm]], ổ. #: '''''Lit''' de plume'' — nệm lông # [[hôn nhân|Hôn nhân]]. #: ''Enfant du premier '''lit''''' — con chồng trước; con vợ trước # [[lớp|Lớp]]; [[vìa]]. #: '''''Lit''' de cailloux'' — lớp sỏi # [[lòng|Lòng]] (sông). #: '''''lit''' de parade'' — linh sàng #: '''''lit''' de table'' — (sử học) giường nằm ăn #: '''''lit''' du courant'' — (hàng hải) nơi dòng nước chảy xiết #: '''''lit''' du vent'' — (hàng hải) chiều gió {{-ref-}} {{R:FVDP}} [[Thể loại:Danh từ tiếng Pháp]] =={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[lũ]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. n69a1muj3jlcsy4d1z478nw896mwwzu thong 0 59665 2349970 2008073 2026-05-03T14:22:18Z WhoAlone 40420 2349970 wikitext text/x-wiki {{-eng-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/ˈθɔŋ/}} {{-noun-}} '''thong''' {{IPA|/ˈθɔŋ/}} # [[dây|Dây]] [[da]]. # [[roi da|Roi da]]. # Một bộ [[đồ lót]] hoặc [[đồ bơi]] bao gồm các dải rất hẹp được thiết kế để chỉ bao gồm bộ phận sinh dục và không có gì hơn. #: ''No! I won't buy you a '''thong'''. You're too young for that.'' {{-tr-verb-}} '''thong''' ''ngoại động từ'' {{IPA|/ˈθɔŋ/}} # [[buộc|Buộc]] bằng [[dây]] [[da]]. # [[đánh|Đánh]] bằng [[roi da]]. {{-ref-}} {{R:FVDP}} [[Thể loại:Danh từ tiếng Anh]] [[Thể loại:Động từ tiếng Anh]] =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[dao]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} kj5vvj6xddg1up73ldbtkarnj45i8p5 sap 0 60394 2349982 1911084 2026-05-03T14:48:04Z WhoAlone 40420 2349982 wikitext text/x-wiki {{-eng-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/ˈsæp/}} {{pron-audio |place=Hoa Kỳ <!-- Feel free to precise the city or the area --> |file=En-us-sap.ogg |pron=ˈsæp}} {{-noun-}} '''sap''' {{IPA|/ˈsæp/}} # [[nhựa|Nhựa]] [[cây]]. # [[nhựa sống|Nhựa sống]]. #: ''the '''sap''' of youth'' — nhựa sống của thanh niên # {{term|Thực vật học}} [[gỗ dác|Gỗ dác]]. {{-tr-verb-}} '''sap''' ''ngoại động từ'' {{IPA|/ˈsæp/}} # Làm cho [[hết]] [[nhựa]]. # Làm [[mất]] [[hết]] (sinh lực), làm [[cạn]] (sức lực); [[làm nhụt]] (nhuệ khí); làm [[mất]] [[hết]] (lòng tin). {{-forms-}} {{eng-verb|base=sap|sap|p|ed}} {{-noun-}} '''sap''' {{IPA|/ˈsæp/}} # {{term|Quân sự}} [[hầm|Hầm]], [[hào]] (đánh lấn). # {{term|Nghĩa bóng}} Sự [[phá hoại]] (niềm tin, quyết tâm... ). {{-tr-verb-}} '''sap''' ''ngoại động từ'' {{IPA|/ˈsæp/}} # {{term|Quân sự}} [[đào|Đào]] [[hầm]], [[đào]] [[hào]] (để đánh lấn). # [[phá|Phá]], [[phá hoại]], [[phá ngầm]] [[huỷ hoại]]. #: ''science is sapping old beliefs'' — khoa học đang phá những niềm tin cũ kỹ {{-forms-}} {{eng-verb|base=sap|sap|p|ed}} {{-intr-verb-}} '''sap''' ''nội động từ'' {{IPA|/ˈsæp/}} # {{term|Quân sự}} [[đào|Đào]] [[hầm hào]]. # [[đánh|Đánh]] [[lấn]] vào bằng [[hầm hào]], [[tiến]] [[gần]] [[vị trí]] [[địch]] bằng [[đường]] [[hào]]. {{-noun-}} '''sap''' {{IPA|/ˈsæp/}} # Sự [[siêng năng]], [[người]] [[cần cù]]. # [[công việc|Công việc]] [[vất vả]], [[công việc]] [[mệt nhọc]]. # {{term|Từ lóng}} [[người|Người]] [[khờ dại]], [[người]] [[khù khờ]]. {{-intr-verb-}} '''sap''' ''nội động từ'' {{IPA|/ˈsæp/}} # {{term|Từ lóng}} [[học gạo|Học gạo]]. {{-ref-}} {{R:FVDP}} [[Thể loại:Danh từ tiếng Anh]] [[Thể loại:Động từ tiếng Anh]] =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[tiếng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} mrzlxfqoqhfaqisqzii5zs1mgx9jz8p pan 0 62521 2350071 2213491 2026-05-04T04:01:47Z WhoAlone 40420 2350071 wikitext text/x-wiki {{also|Pan|PAN|Pan.|pan-|Pan-|pān|pán|Pán|păn|pàn|päñ|pæn|пан}} {{also|πάν|Πάν|πᾶν|パン|пањ|παν}} {{-afr-}} {{-noun-}} {{af-noun|panne}} # [[hồ|Hồ]]. # [[chảo|Chảo]] [[rán]]. {{-synonym-}} * {{sense|hồ}} {{l|af|meer}} {{-eng-}} [[Tập tin:Pfanne (Edelstahl).jpg|nhỏ|phải|Một cái chảo (1)]] {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/ˈpæn/}} {{pron-audio |place=Bắc California, Hoa Kỳ (nữ giới) |file=En-us-pan.ogg |pron=ˈpæn}} {{-homo-}} * [[Pan]] {{-paro-}} * [[Pan]] {{-etymology-}} ; [[#Danh từ 2|danh từ]], [[#Ngoại động từ|ngoại động từ]], [[#Nội động từ|nội động từ]] : {{etym|lang=eng|from= * [[ang:panne]] ** [[gem-proto:*pannōn]] }} Cùng nguồn gốc với {{nld|style=plain}} ''[[pan#Tiếng Hà Lan|pan]]'', {{deu|style=plain}} ''[[Pfanne]]''. ; lá trầu không, miến trầu : {{etym|lang=eng|from= * [[hin:पान]] (pān) }} ; phần, khoảng cách trong công sự, lá : {{etym|lang=eng|from= * [[ang:]] ** [[fro:]] *** [[lat:pannus]] }} ; cuộn ngang : {{etym|lang=eng|from= * [[panorama]] ** [[pan-]] = tất cả ** [[grc:ὅραμα|ὅρᾱμᾰ]] ‎(hórāma) = xem }} ; liên kết : So sánh với {{fra|style=plain}} ''[[pan#Tiếng Pháp|pan]]'' ‎(“vạt áo”), {{lat|style=plain}} ''[[pannus]]'' ‎(“giẻ”). {{-noun-}} {{eng-noun}} # [[khay|Khay]], [[khuôn]] ([[nướng]] [[bánh]], chứa bánh). # [[chảo|Chảo]] [[rán]]. # [[nồi|Nồi]], [[xoong]], [[soong]]. # Cái [[chảo]], cái [[xanh]]. # {{@|Ireland}} Cái [[chậu]]. # Cái [[giần]] (để [[đãi]] [[vàng]]). # {{@|địa lý}} [[đất|Đất]] [[trũng]] [[lòng chảo]]. # Sự [[chỉ trích]] [[gay gắt]], sự [[phê bình]] [[nghiêm khắc]], sự [[đả kích]]. # [[ổ|Ổ]] [[bánh mì]]. # [[lá|Lá]] [[trầu không]] (để [[ăn trầu]]). # [[miếng|Miếng]] [[trầu]]. # {{@|cũ}} [[chậu|Chậu]] [[đái]] [[đêm]]. # Phần chính của [[bồn cầu]] [[xí bệt]]. # {{@|Mỹ||lóng}} [[đầu|Đầu]]; [[mặt]]. # {{@|xây dựng}} [[dứng|Dứng]] ([[tường]]). # [[chảo|Chảo]] [[chân không]]. # [[ổ|Ổ]] [[nạp]] [[thuốc súng]] (ở một số [[súng]] [[cổ]]). # [[sọ|Sọ]]. # {{@|xây dựng}} Chỗ [[thụt]] vào để [[lắp]] vào [[lá]] [[bản lề]]. # {{@|địa lý}} [[tầng|Tầng]] [[đất]] [[cái]]. # [[phần|Phần]]; phần [[chia]]. # {{@|quân sự}} [[khoảng cách|Khoảng cách]] giữa [[góc]] chính và góc [[sườn]] trong [[công sự]]. # [[lá|Lá]] ([[vàng]], [[bạc]]). # [[đĩa|Đĩa]] [[cân]]. # {{@|kỹ thuật}} [[nồi|Nồi]], [[bể]] ([[luyện kim]]...). {{-syn-}} ; khay * [[cookie sheet]] * [[tin]] ; chảo rán * [[frying pan]] * [[skillet]] ; nồi * [[saucepan]] * [[pot]] ; chảo * [[wok]] ; lá trầu không * [[paan]] ; miếng trầu * [[paan]] ; chậu đái đệm * [[chamber pot]] ; chảo chân không * [[vacuum pan]] ; sọ * [[brain pan]] ; tầng đất cái * [[hard pan]] ; phần * [[part]] * [[portion]] ; lá * [[leaf]] {{-drv-}} * [[baking pan]] * [[bedpan]] * [[deadpan]] * [[flash in the pan]] * [[frying pan]] * [[pan former]] * [[pan man]] * [[panyard]] * [[saucepan]] {{-tr-verb-}} '''pan''' ''ngoại động từ'' {{IPA|/ˈpæn/}} # {{term|+ off, out}} [[đãi|Đãi]] ([[vàng]] ở trong [[cát]], bằng cái [[giần]]). # {{@|thông tục}} [[chỉ trích|Chỉ trích]] [[gay gắt]], [[phê bình]] [[nghiêm khắc]], [[đả kích]]. # {{@|thông tục}} [[thắng lợi|Thắng lợi]] [[thuyết phục]]. # [[cuộn|Cuộn]] [[ngang]] ([[camera]], [[hình]]). {{-forms-}} {{eng-verb|base=pan|pan|n|ed}} {{-related-}} * [[sluice]] * [[lavatory]] {{-intr-verb-}} '''pan''' ''nội động từ (+ out)'' {{IPA|/ˈpæn/}} # [[đãi|Đãi]] được [[vàng]], có vàng ([[cát]]...). # {{@|bóng}} [[kết quả|Kết quả]]. #: ''how did it '''pan''' out?'' — việc ấy kết quả thế nào? #: ''it panned out well'' — cái đó kết quả khá # {{@|nghệ thuật}} [[quay|Quay]], [[lia]] [[máy]] ([[kỹ thuật]] [[cắt]] [[khuôn]] [[hình]]). # {{@|nghệ thuật}} [[quét|Quét]] [[âm thanh]] qua [[khắp]] [[loa]]. # [[liên kết|Liên kết]], [[liên hiệp]], [[đoàn kết]]. {{-forms-}} {{eng-verb|base=pan|pan|n|ed}} {{-drv-}} * [[pan and scan]] * [[panner]] {{-related-}} * [[tilt]] * [[cant]] {{-adj-}} {{eng-adj|-}} # {{@|lóng}} [[toàn tính luyến ái|Toàn tính luyến ái]]. {{-syn-}} * [[pansexual]] {{-ref-}} {{R:FVDP}} {{-arg-}} {{-etymology-}} {{etym|lang=arg|from= * [[lat:panis|pānis]] }} {{-noun-}} '''pan''' {{m}} # [[bánh mì|Bánh mì]]. {{-ast-}} {{-etymology-}} {{etym|lang=ast|from= * [[lat:panis|pānis]] }} {{-noun-}} '''pan''' {{m}} ({{plur}} [[panes]]) # [[bánh mì|Bánh mì]]. {{-pol-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/pan̪/}} {{pron-audio |place=Ba Lan (nam giới) |file=Pl-pan.ogg |pron=pan̪}} {{-etymology-}} Không rõ. Có thể từ tiếng Saxon cổ ''[[fan#Tiếng Saxon cổ|fan]]'' ‎(“quý tộc”). Cùng nguồn gốc với tiếng Séc cổ ''[[hpan]]'', {{ces|style=plain}} và {{slk|style=plain}} ''[[pan#Tiếng Séc|pan]]'' và ''[[pán#Tiếng Séc|pán]]'', {{wen|style=plain}} ''[[pan#Tiếng Sorb|pan]]'', {{ukr|style=plain}} ''[[пан#Tiếng Ukraina|пан]]'' ‎(''pan''), {{bel|style=plain}} ''[[пан#Tiếng Belarus|пан]]'' ‎(''pan''). {{-per-pronoun-}} '''pan''' {{m}} ({{f}} [[pani]]) # [[ông|Ông]]. #: ''Czy mógłby '''pan''' zamknąć drzwi?'' – Xin ông đóng cửa. # [[thầy|Thầy]]. # [[chúa|Chúa]]. {{-related-}} * [[pani]] * [[państwo]] {{-roa-ptg-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/ˈpã/}} {{-etymology-}} {{etym|lang=roa-ptg|from= * [[lat:panem|pānem]] = dạng nghiệp cách số ít: ** [[lat:panis|pānis]] }} {{-noun-}} '''pan''' {{m}} ‎({{plur}} [[pães]]) # [[bánh mì|Bánh mì]]. {{-drv-}} * {{por}}: [[pão#Tiếng Bồ Đào Nha|pão]] ** {{ben}}: [[পাঁউরুটি]] ‎(''paun-ruti'') ** {{hin}}: [[पाव]] ‎(''pāv'') ** {{mya}}: [[ပေါင်မုန့်]] ‎(''paungmun.'') ** {{jpn}}: [[パン]] ‎(''pan'') *** {{kor}}: [[빵]] ‎(''ppang'') *** {{nan}}: [[pháng]] ** {{mar}}: [[पाव]] ‎(''pāv'') ** {{tha}}: [[ปัง]] ‎(''bpang'') * {{glg}}: [[pan#Tiếng Galicia|pan]] {{-glg-}} {{-etymology-}} {{etym|lang=glg|from= * [[roa-ptg:pan]] ** [[lat:panis|pānis]] }} {{-noun-}} '''pan''' {{m}} ‎({{plur}} [[pans]]) # [[bánh mì|Bánh mì]] # [[ẩm thực|Ẩm thực]], [[đồ ăn]]. {{-drv-}} * [[panadeiro]] * [[panadería]] {{-nld-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/pɑn/}} {{pron-audio |place=Hà Lan (nam giới) |file=Nl-pan.ogg |pron=pɑn}} {{-etymology-}} {{etym|lang=nld|from= * [[gem-proto:*pannōn]] }} Cùng nguồn gốc với {{eng|style=plain}} ''[[pan#Tiếng Anh|pan]]'', {{deu|style=plain}} ''[[Pfanne]]''. {{-noun-}} {{nld-biến danh|panen|pannetje}} {{nld-noun|f|panen|pannetje}} ‎({{plur}} [[pannen]], dạng giảm nhẹ [[pannetje]] {{n}}) # [[chảo|Chảo]] [[rán]]. # {{@|Hà Lan}} [[nồi|Nồi]], [[xoong]], [[soong]]. # [[khay|Khay]], [[khuôn]] ([[nướng]] [[bánh]], chứa bánh). {{-syn-}} ; nồi * [[pot#Tiếng Hà Lan|pot]] ; khay * [[koekenpan]] {{-drv-}} * [[braadpan]] * [[grillpan]] * [[kookpan]] * [[sauspan]] * [[soeppan]] * [[hapjespan]] * [[frituurpan]] {{-related-}} * [[dakpan]] * [[steelpan]] {{-jbo-}} {{-rafsi-}} # {{form of|jbo|rafsi|panci}} {{-msa-}} {{-noun-}} '''pan''' # [[bà|Bà]]. {{-oci-}} {{-etymology-}} Từ {{inherited|oc|pro|pan}} < {{inherited|oc|la|panis|pānis, pānem}}. {{-noun-}} {{oc-noun|m}} # [[bánh mì|Bánh mì]]. {{-derived-}} * [[panada]] * [[panairar]] * [[panar]] * [[panatièr]] * [[panatièra]] * [[pancosièr]] * [[panejar]] * [[panet]] * [[panhòta]] * [[panièr]], [[panier]], [[pannier]] * [[panièra]] * [[panieròla]] {{-pap-}} {{-etymology-}} {{etym|lang=pap|from= * [[spa:pan]] ** [[lat:panis|pānis]] }} {{-noun-}} '''pan''' {{m}} # [[bánh mì|Bánh mì]]. {{-fra-}} [[Hình:Pan.gif|thumb|pan]] {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/pɑ̃/}} {{pron-audio |place=Paris, Pháp (nam giới) |file=Fr-pan.ogg |pron=pɑ̃}} {{-homo-}} * [[paon]] {{-etymology-}} ; [[#Danh từ 11|danh từ]] : {{etym|lang=eng|from= * [[lat:pannus]] }} {{-noun-}} {{fra-noun| s=pan|p=pans| sp=/pɑ̃/|pp=/pɑ̃/}} '''pan''' {{m}} {{IPA|/pɑ̃/}} # [[phần|Phần]]. # [[mặt|Mặt]]. #: ''Tour à six '''pans''''' — tháp sáu mặt # [[vạt|Vạt]]. #: '''''Pan''' de la robe'' — vạt áo #: '''''Pan''' de mur'' — vạt tường # {{@|xây dựng}} [[dứng|Dứng]] ([[tường]]). #: '''''Pan''' de bois'' — dứng gỗ #: ''Pan de '''comble''''' — mái nhà. {{-interj-}} '''pan''' {{IPA|/pɑ̃/}} # [[pằng|Pằng]]! #: '''''Pan'''! un coup de feu'' — pằng! một tiếng súng nổ # [[bùm|Bùm]]! {{-ref-}} {{R:FVDP}} =={{langname|rmx}}== ==={{ĐM|num}}=== {{head|rmx|Số từ}} # [[bốn]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. {{-ces-}} {{-per-pronoun-}} '''pan''' # {{see-entry|pán|quý ông}} {{-usage-}} Sử dụng từ này đằng trước tên, danh hiệu, nghề nghiệp, v.v.: :'''''pan''' Novák‎'' — ông Novák :'''''Pane''' předsedo, dámy a pánové...‎'' — Thưa quý ông bà, ông chủ tịch... :''Vítejte, '''pane''' rytíři.‎'' — Chào mừng quý hiệp sĩ. :''Kdy přijde '''pan''' doktor, sestřičko?‎'' — Thưa nữ ý tá, bác sĩ sẽ tới đây mấy giờ? =={{langname|tlq}}== ==={{ĐM|num}}=== {{head|tlq|Số}} # [[năm]]. ==={{ĐM|ref}}=== * [http://sealang.net/monkhmer/database/retrieve.pl?language=Tai%20Loi&sort=gloss&format=html Tiếng Tai Loi] tại Cơ sở Dữ liệu Môn-Khmer. {{-spa-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/pan/}} {{-etymology-}} {{etym|lang=spa|from= * [[osp:]] ** [[lat:panis|pānis]] }} So sánh với {{cat|style=plain}} ''[[pa#Tiếng Catalan|pa]]'', {{fra|style=plain}} ''[[pain#Tiếng Pháp|pain]]'', {{glg|style=plain}} ''[[pan#Tiếng Galicia|pan]]'', {{ita|style=plain}} ''[[pane#Tiếng Ý|pane]]'', {{por|style=plain}} ''[[pão#Tiếng Bồ Đào Nha|pão]]'', {{ron|style=plain}} ''[[pâine]]''. {{-noun-}} {{spa-noun|m}} # [[bánh mì|Bánh mì]]. #: ''Para mi desayuno, tomo '''pan''' y leche.'' — Bữa sáng tôi ăn bánh mì và uống sữa. # [[bột nhào|Bột nhào]]. # [[bánh|Bánh]]. #: '''''pan''' de higos'' — bánh sung #: '''''pan''' de jabón'' — bánh xà bông #: '''''pan''' de sal'' — bánh mặn # {{@|bóng}} [[tiền|Tiền]] [[ăn]] [[sinh sống]]. # {{@|bóng}} [[công việc|Công việc]]. # [[lúa mì|Lúa mì]]. # [[lớp|Lớp]] [[mạ]] ([[vàng]], [[bạc]], ...). # {{@|El Salvador|Nicaragua||lóng}} [[vú|Vú]]. {{-drv-}} * [[pan ácimo]] * [[pan aflorado]] * [[pan agradecido]] * [[pan ázimo]] * [[pan batido]] * [[pan bazo]] * [[pan bendito]] * [[pan bon]] * [[pan candeal]] * [[pan cañón]] * [[pan cenceño]] * [[pan comido]] * [[pan de azúcar]] * [[pan de caja]] * [[pan de flor]] * [[pan de higo]] * [[pan de horma]] * [[pan de la boda]] * [[pan de molde]] * [[pan de munición]] * [[pan de muerto]] * [[pan de oro]] * [[pan de Pascua]] * [[pan de perro]] * [[pan de pistola]] * [[pan de poya]] * [[pan de salvado]] * [[pan de tierra]] * [[pan de Viena]] * [[pan dulce]] * [[pan duro]] * [[pan eucarístico]] * [[pan fermentado]] * [[pan francés]] * [[pan integral]] * [[pan lactal]] * [[pan mal conocido]] * [[pan molido]] * [[pan negro]] * [[pan o vino]] * [[pan perdido]] * [[pan pintado]] * [[pan por mitad]] * [[pan porcino]] * [[pan rallado]] * [[pan regañado]] * [[pan seco]] * [[pan sentado]] * [[pan sobornado]] * [[pan subcinericio]] * [[pan supersubstancial]] * [[pan terciado]] * [[pan tostado]] * [[pan y agua]] * [[pan y callejuela]] * [[pan y circo]] * [[pan y quesillo]] * [[panadería]] * [[panificador]] * [[panificadora]] * [[paz y pan]] {{-related-}} * [[masa]] * [[panera]] * [[panero]] * [[tostada]] * [[baguete]] * [[perruna]] * [[peso de artifara]] * [[sopa]] [[Thể loại:Danh từ tiếng Anh]] [[Thể loại:Danh từ tiếng Aragon]] [[Thể loại:Danh từ tiếng Asturias]] [[Thể loại:Ngoại động từ tiếng Anh]] [[Thể loại:Nội động từ tiếng Anh]] [[Thể loại:Tính từ tiếng Anh]] [[Thể loại:Đại từ tiếng Ba Lan]] [[Thể loại:Danh từ tiếng Bồ Đào Nha cổ]] [[Thể loại:Danh từ tiếng Galicia]] [[Thể loại:Danh từ tiếng Hà Lan]] [[Thể loại:Danh từ tiếng Mã Lai]] [[Thể loại:Danh từ tiếng Papiamento]] [[Thể loại:Danh từ tiếng Pháp]] [[Thể loại:Thán từ tiếng Pháp]] [[Thể loại:Đại từ tiếng Séc]] [[Thể loại:Danh từ tiếng Tây Ban Nha]] mfbz2vqrsos11q3qkgy3ksb4qni3gqi chú 0 92007 2350096 2274149 2026-05-04T04:48:44Z WhoAlone 40420 2350096 wikitext text/x-wiki {{-vie-}} {{-pron-}} {{vie-pron}} {{-hanviet-}} {{đầu}} *[[蛀]]: [[chú]] *[[祝]]: [[chúc]], [[chú]] *[[鑄]]: [[chúc]], [[chú]] *[[䛆]]: [[chú]] *[[注]]: [[chú]] *[[詋]]: [[chú]] *[[呪]]: [[chú]] *[[澍]]: [[chú]], [[thụ]] *[[屬]]: [[chủ]], [[chúc]], [[thuộc]], [[chú]] *[[咮]]: [[phụ]], [[cật]], [[trụ]], [[chu]], [[chú]] *[[疰]]: [[chú]] {{giữa}} *[[鋳]]: [[chú]] *[[咒]]: [[chú]] *[[馵]]: [[chúc]], [[chú]] *[[炷]]: [[chụ]], [[chú]] *[[殶]]: [[chú]] *[[铸]]: [[chú]] *[[註]]: [[chú]] *[[晝]]: [[trú]], [[chú]] *[[詶]]: [[thù]], [[chú]] *[[属]]: [[thục]], [[chúc]], [[thuộc]], [[chú]] {{cuối}} {{-hanviet-t-}} {{đầu}} *[[蛀]]: [[chú]] *[[鑄]]: [[chú]] *[[注]]: [[chú]] *[[呪]]: [[chú]] *[[澍]]: [[chú]] {{giữa}} *[[屬]]: [[chúc]], [[thuộc]], [[chú]] *[[疰]]: [[chú]] *[[炷]]: [[chú]] *[[註]]: [[chú]] *[[祝]]: [[chúc]], [[chú]] {{cuối}} {{-nôm-}} {{đầu}} *[[蛀]]: [[chấu]], [[chú]] *[[祝]]: [[chúc]], [[giốc]], [[dốc]], [[gióc]], [[chuốc]], [[chọc]], [[chóc]], [[chú]], [[chốc]] *[[鑄]]: [[chú]] *[[注]]: [[chua]], [[chõ]], [[chú]], [[giú]] *[[詋]]: [[chú]] *[[呪]]: [[huênh]], [[huếnh]], [[chú]] *[[澍]]: [[thụ]], [[chú]] *[[疰]]: [[chú]] *[[鋳]]: [[cục]], [[chú]] *[[咒]]: [[chú]] {{giữa}} *[[馵]]: [[chú]] *[[炷]]: [[chụ]], [[chú]] *[[殶]]: [[chú]] *[[诅]]: [[trớ]], [[trở]], [[thư]], [[chú]] *[[註]]: [[chua]], [[chú]] *[[铸]]: [[chú]] *[[晝]]: [[trú]], [[chú]] *[[詛]]: [[trớ]], [[trở]], [[trù]], [[thư]], [[chú]] *[[詶]]: [[thù]], [[chú]] {{cuối}} {{-paro-}} {{đầu}} :* [[chứ]] :* [[chữ]] :* [[chủ]] :* [[Chu]] {{giữa}} :* [[chữ]] :* [[chừ]] :* [[Chù]] {{cuối}} {{-noun-}} '''chú''' # [[em trai|Em trai]] của [[cha]] (có thể dùng để [[xưng gọi]]). #: '''''Chú''' ruột.'' #: ''Ông chú họ.'' #: ''Sẩy cha còn '''chú''' ([[tục ngữ]]).'' #: '''''Chú''' bảo gì cháu?'' # Từ [[thiếu nhi]] dùng để chỉ hoặc [[gọi]] [[người]] [[đàn ông]] đáng [[bậc]] [[chú mình]], với ý [[yêu mến]], [[kính trọng]]. #: ''Cháu yêu '''chú''' bộ đội.'' # Từ dùng để chỉ [[thiếu nhi]] với ý [[yêu mến]], [[thân mật]]. #: '''''Chú''' bé.'' # {{term|Dùng hạn chế trong một số tổ hợp}} Từ dùng để chỉ [[người]] [[con trai]] hoặc [[người]] [[đàn ông]] [[trẻ tuổi]]. #: '''''Chú''' tiểu.'' #: '''''Chú''' rể.'' # Từ dùng để chỉ con [[vật]] theo [[lối]] [[nhân cách hoá]], với ý [[hài hước]]. #: '''''Chú''' dế mèn.'' #: ''Con mèo mà trèo cây cau - Hỏi thăm '''chú''' chuột đi đâu vắng nhà - '''Chú''' chuột đi chợ đàng xa. - Mua mắm, mua muối giỗ cha con mèo. ([[ca dao]])'' # Từ dùng trong [[đối thoại]] để [[gọi]] [[người]] [[đàn ông]] [[coi như]] [[bậc]] [[chú]] của mình với ý [[yêu mến]], [[kính trọng]], hoặc để người đàn ông [[tự xưng]] một cách [[thân mật]] với người [[coi như]] [[hàng]] [[cháu]] của mình. # Từ [[người]] [[đàn ông]] dùng trong [[đối thoại]] để [[gọi]] [[em trai]] (hay là người [[phụ nữ]] dùng để gọi em trai [[chồng]]) đã [[lớn tuổi]] với ý [[coi trọng]], hoặc người đàn ông dùng để gọi một cách [[thân mật]] người đàn ông khác [[coi như]] [[vai]] [[em]] của mình (gọi theo cách gọi của con mình). # [[thần chú|Thần chú]] (nói tắt). #: ''Phù thuỷ đọc '''chú'''.'' {{-verb-}} '''chú''' # {{@|kết hợp hạn chế}} [[niệm|Niệm]] [[thần]]. #: ''Tay ấn, miệng '''chú'''.'' # [[ghi|Ghi]] [[phụ]] thêm để làm cho [[rõ]]. #: '''''Chú''' cách đọc một từ nước ngoài.'' #: '''''Chú''' nghĩa ở ngoài lề.'' {{-trans-}} {{đầu}} * {{eng}}: [[uncle]] {{giữa}} * {{spa}}: [[tío]] {{m}} {{cuối}} {{-ref-}} {{R:FVDP}} {{R:WinVNKey:Lê Sơn Thanh}} [[Thể loại:Danh từ tiếng Việt]] [[Thể loại:Động từ tiếng Việt]] {{-mtq-}} {{-noun-}} {{pn}} # [[chủ]]. [[Thể loại:Danh từ tiếng Mường]] {{-tyz-}} {{-pron-}} {{tyz-IPA}} {{-noun-}} {{pn}} # [[ống]]. {{-ref-}} {{R:Lương Bèn}} {{catname|Danh từ|tiếng Tày}} =={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # {{label|sed|dialectal}} [[chó]]. ==={{đm|ref}}=== {{R:VOV}} {{c|sed|Chó}} fr55dv6pxlge8fk9mfomy0qbh18t1ax còn 0 92117 2349874 2333722 2026-05-03T12:10:51Z WhoAlone 40420 2349874 wikitext text/x-wiki {{-vie-}} {{-pron-}} {{vie-pron}} {{-nôm-}} {{top}} *[[哙]]: [[hỏi]], [[gọi]], [[gũi]], [[còn]], [[khoái]] *[[羣]]: [[còn]], [[quần]] {{mid}} *[[噲]]: [[gỏi]], [[hỏi]], [[gọi]], [[gũi]], [[còn]], [[khoái]], [[hội]], [[khoải]] *[[群]]: [[quằn]], [[cơn]], [[còn]], [[quần]] {{bottom}} {{-paro-}} {{đầu}} :* [[con]] :* [[cồn]] {{giữa}} :* [[côn]] :* [[Cồn]] {{cuối}} {{-noun-}} {{vie-noun}} # [[quả|Quả]] [[cầu]] bằng [[vải]] có nhiều [[dải]] [[màu]], dùng để [[tung]], [[ném]] làm trò chơi trong [[ngày hội]] ở một [[số]] [[dân tộc]] [[miền]] [[núi]]. #: ''Ném '''còn'''.'' #: ''Tung '''còn'''.'' {{-verb-}} {{vie-verb}} # [[tiếp tục|Tiếp tục]] [[tồn tại]]. #: ''Kẻ '''còn''', người mất.'' #: '''''Còn''' một tuần lễ nữa là đến Tết.'' #: ''Bệnh mười phần '''còn''' ba.'' # [[tiếp tục|Tiếp tục]] có, không [[phải]] đã [[hết cả]] hoặc đã [[mất]] đi. #: ''Nó '''còn''' tiền.'' #: ''Anh ta '''còn''' mẹ già.'' # [[từ|Từ]] biểu thị sự [[tiếp tục]], [[tiếp diễn]] của [[hành]] động, [[trạng thái]] cho đến [[một lúc]] nào đó. #: ''Anh ta '''còn''' rất trẻ.'' #: ''Đang '''còn''' thiếu một ít.'' # [[từ|Từ]] [[biểu thị]] ý [[khẳng định]] về một [[hành]] động, [[tính chất]] nào đó, cả trong [[trường hợp]] được [[nêu]] thêm [[ra]] để đối [[chiếu]], [[so sánh]]. #: ''Hôm qua '''còn''' nắng to hơn hôm nay nhiều.'' #: ''Thà như thế '''còn''' hơn.'' #: ''Đã không giúp đỡ, lại '''còn''' quấy rầy.'' # k. [[Từ]] [[biểu thị]] điều [[sắp]] [[nêu]] [[ra]] là một [[trường hợp]] khác hoặc [[trái lại]], đối [[chiếu]] với điều [[vừa]] [[nói]] đến. #: ''Nó ở nhà anh. Nắng thì đi, '''còn''' mưa thì nghỉ.'' {{-ref-}} {{R:FVDP}} {{R:WinVNKey:Lê Sơn Thanh}} =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[còn]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} t73hi6s0e26wqtil3i4ujhidcpkfjt3 0 92379 2349876 2346305 2026-05-03T12:15:12Z WhoAlone 40420 2349876 wikitext text/x-wiki {{-vie-}} {{-pron-}} {{vie-pron}} {{-nôm-}} {{top}} *[[𡍢]]: [[gò]] *[[孤]]: [[co]], [[cô]], [[còi]], [[go]], [[gò]], [[côi]] *[[󰈧]]: [[gò]] *[[坵]]: [[gò]], [[khâu]], [[khưu]] {{mid}} *[[㩴]]: [[gò]] *[[塸]]: [[gu]], [[gò]] *[[𦁿]]: [[gô]], [[gò]] {{bottom}} {{-paro-}} {{đầu}} :* [[gô]] :* [[gõ]] :* [[gồ]] :* [[gơ]] :* [[gờ]] :* [[gỡ]] {{giữa}} :* [[gọ]] :* [[go]] :* [[gỗ]] :* [[gơ]] :* [[gở]] {{cuối}} {{-noun-}} '''gò''' # [[khoảng|Khoảng]] [[đất]] [[nổi]] [[cao]] lên giữa nơi [[bằng phẳng]]. #: ''Cánh đồng có nhiều '''gò'''.'' {{-trans-}} * {{eng}}: [[mound]], [[knoll]] {{-verb-}} '''gò''' # Làm [[biến dạng]] [[tấm]] [[kim loại]], thường bằng [[phương pháp]] [[thủ công]], để [[tạo thành]] [[vật]] gì đó. #: '''''Gò''' thùng tôn.'' #: ''Thợ '''gò'''.'' # [[ép|Ép]] vào một [[khuôn khổ]] [[nhất định]]. #: ''Văn viết '''gò''' từng câu, từng chữ, không tự nhiên.'' #: ''Cố '''gò''' mấy con số để đưa vào báo cáo thành tích.'' # [[kéo|Kéo]] [[mạnh]] một đầu [[dây cương]], [[dây]] [[thừng]] và [[giữ]] [[thẳng]] [[dây]] để [[ghìm]] [[ngựa]] hay [[gia súc]] lại hoặc [[bắt]] [[phải]] đi [[thẳng]] theo một [[hướng]] [[nhất định]]. #: '''''Gò''' ngựa dừng lại.'' #: '''''Gò''' thừng cho bò đi thẳng đường.'' # [[tự|Tự]] ép [[mình]] ở một [[tư thế]] [[nhất định]], không được [[tự nhiên]], [[thoải mái]], thường [[cong]] [[lưng]] lại, để [[tiện]] dùng [[sức]] [[tập trung]] vào một [[việc gì]]. #: '''''Gò''' lưng đạp xe lên dốc.'' #: ''Con trâu '''gò''' lưng kéo cày.'' #: ''Người '''gò''' lại vì đau.'' {{-trans-}} {{-ref-}} {{R:FVDP}} {{R:WinVNKey:Lê Sơn Thanh}} [[Thể loại:Danh từ tiếng Việt]] [[Thể loại:Động từ tiếng Việt]] =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[đụng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} {{-hni-}} {{-num-}} {{head|hni|Số}} # [[chín]]. {{-ref-}} * Tạ Văn Thông - Lê Đông (2001). ''Tiếng Hà Nhì''. Nhà Xuất bản Văn hoá dân tộc. =={{langname|tdr}}== ==={{ĐM|noun}}=== {{head|tdr|Danh từ}} # {{label|tdr|Didrá}} [[đầu]]. ==={{ĐM|ref}}=== * Gregerson, Kenneth J. và Smith, Kenneth D. (1973). ''The development of Todrah register''. SIL International. 3z0q2ehkjgabh8jef2wtpjq9xzylder 0 92812 2349935 2338776 2026-05-03T13:58:12Z WhoAlone 40420 2349935 wikitext text/x-wiki {{-vie-}} {{-pron-}} {{vie-pron}} {{-nôm-}} {{top}} *[[𢺀]]: [[mò]] *[[蟆]]: [[mạc]], [[ma]], [[mô]], [[mò]] *[[𤂨]]: [[mò]] *[[䗋]]: [[mò]] *[[𤇦]]: [[mò]], [[mồ]] {{mid}} *[[暮]]: [[mò]], [[mộ]] *[[𢱖]]: [[mói]], [[mõ]], [[múa]], [[mó]], [[mò]], [[mua]] *[[摹]]: [[múa]], [[mô]], [[mò]] *[[摸]]: [[mạc]], [[mô]], [[mó]], [[mò]], [[mua]], [[mọ]] {{bottom}} {{-paro-}} {{đầu}} :* [[mỗ]] :* [[mồ]] :* [[mó]] :* [[mỏ]] :* [[mộ]] :* [[mờ]] :* [[mỡ]] :* [[mợ]] {{giữa}} :* [[mổ]] :* [[mô]] :* [[mõ]] :* [[mo]] :* [[mơ]] :* [[mở]] :* [[mớ]] {{cuối}} {{-noun-}} '''mò''' # [[bọ|Bọ]] nhỏ, thường có ở ổ [[gà]] hoặc [[sống]] [[kí sinh]] trên [[mình]] [[gà]], đốt rất [[ngứa]]. # [[cây bụi|Cây bụi]] nhỏ [[mọc]] [[hoang]], [[lá]] to, [[mùi hôi]], [[hoa]] đỏ hay [[trắng]] tập trung thành [[cụm]] ở [[ngọn]], [[nhị]] [[thò]] [[ra]] [[ngoài]]. {{-verb-}} '''mò''' # [[sờ|Sờ]] tìm khi không thể [[nhìn thấy]] được (thường là trong nước, trong bóng tối). #: '''''Mò''' cá.'' #: '''''Mò''' cua bắt ốc.'' #: ''Tối quá, không biết đằng nào mà '''mò'''.'' #: ''Ruộng ngập sâu, phải gặt '''mò'''.'' # Tìm một cách [[hú hoạ]], [[may rủi]] vì không có [[căn cứ]]. #: ''Không '''mò''' ra đầu mối.'' #: '''''Mò''' mãi cũng tìm ra đáp số.'' #: ''Đoán '''mò'''.'' #: ''Nói '''mò'''.'' # {{term|Kng.}} . [[Tìm]] đến một cách không đàng [[hoàng]]. #: ''Kẻ gian '''mò''' vào nhà.'' #: ''Xó xỉnh nào nó cũng '''mò''' đến.'' {{-trans-}} {{-ref-}} {{R:FVDP}} {{R:WinVNKey:Lê Sơn Thanh}} [[Thể loại:Danh từ tiếng Việt]] [[Thể loại:Động từ tiếng Việt]] =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[bà]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} {{-hni-}} {{-adj-}} {{head|hni|Tính từ}} # [[già]]. {{-ref-}} * Tạ Văn Thông - Lê Đông (2001). ''Tiếng Hà Nhì''. Nhà Xuất bản Văn hoá dân tộc. {{-kpm-}} {{-noun-}} {{head|kpm|Danh từ}} # [[bà]]. {{-ref-}} * Lý Toàn Thắng, Tạ Văn Thông, K'Brêu, K'Bròh (1985) ''Ngữ pháp tiếng Kơ Ho''. Sở Văn hóa và Thông tin Lâm Đồng. {{-tyz-}} {{-pron-}} {{tyz-IPA}} {{-noun-}} {{pn}} # [[con]] [[bò]]. {{-ref-}} {{R:Lương Bèn}} [[Thể loại:Danh từ tiếng Tày]] =={{langname|uuu}}== ==={{ĐM|num}}=== {{head|uuu|Số từ}} # [[một]]. #:{{syn|uuu|m̀}} ==={{ĐM|ref}}=== * [http://www.sealang.net/monkhmer/database/retrieve.pl?language=U&sort=gloss&format=html Tiếng U] tại Cơ sở Dữ liệu Môn-Khmer. 71bdl7yio38p2skibzeeheddgcor8jv ni 0 95691 2349881 2343679 2026-05-03T12:17:28Z WhoAlone 40420 2349881 wikitext text/x-wiki {{-eng-}} {{-abr-}} '''ni''' # [[lợi tức|Lợi tức]] [[quốc dân]], [[thu nhập]] [[quốc dân]] (National Income). {{-ref-}} {{R:FVDP}} {{-vie-}} {{-pron-}} {{vie-pron|ni}} {{-hanviet-}} {{top}} *[[鈮]]: [[ni]] *[[呢]]: [[nê]], [[ni]], [[trừu]], [[nỉ]] *[[柅]]: [[nê]], [[ni]], [[sí]] *[[怩]]: [[nê]], [[ni]] *[[秜]]: [[ni]] *[[坭]]: [[nê]], [[ni]] {{mid}} *[[铌]]: [[ni]] *[[妮]]: [[ni]] *[[旎]]: [[ni]], [[nỉ]], [[nị]] *[[尼]]: [[nặc]], [[nê]], [[ni]], [[nật]], [[nệ]] *[[㞾]]: [[ni]] {{bottom}} {{-hanviet-t-}} {{top}} *[[呢]]: [[ni]], [[nỉ]] *[[尼]]: [[nặc]], [[ni]], [[nật]], [[nệ]] {{bottom}} {{-nôm-}} {{top}} *[[鈮]]: [[ni]], [[nỉa]] *[[呢]]: [[nê]], [[này]], [[nài]], [[nầy]], [[nấy]], [[nì]], [[ni]], [[nỉ]] *[[怩]]: [[náy]], [[ni]] *[[󰔫]]: [[ni]] *[[铌]]: [[ni]] {{mid}} *[[尼]]: [[nay]], [[nê]], [[nật]], [[này]], [[nầy]], [[nơi]], [[nấy]], [[nì]], [[ni]], [[nề]] *[[伲]]: [[nấy]], [[ni]], [[nề]], [[nễ]] *[[妮]]: [[ni]] *[[秜]]: [[ni]] {{bottom}} {{-paro-}} :* [[nỉ]] {{-adj-}} '''ni''' # Này. #: ''Bên '''ni'''.'' #: ''Anh '''ni'''.'' # [[ph|Ph]]. [[Nay]]. #: ''Đến '''ni''' mà vẫn chưa xong.'' {{-trans-}} {{-ref-}} {{R:FVDP}} {{R:WinVNKey:Lê Sơn Thanh}} [[Thể loại:Tính từ tiếng Việt]] [[Thể loại:Viết tắt tiếng Anh]] =={{langname|ocm}}== ==={{ĐM|pronoun}}=== {{head|ocm|Đại từ}} # [[này]], [[đây]]. ==={{ĐM|ref}}=== * Võ Văn Thắng (11 tháng 9 năm 2022). ''[https://baodanang.vn/tam-bia-chu-sanskrit-som-nhat-tai-quang-nam-3026881.html Tấm bia chữ Sanskrit sớm nhất tại Quảng Nam]''. Báo Đà Nẵng. Truy cập ngày 2 tháng 7 năm 2025. =={{langname|cje}}== ==={{ĐM|pronoun}}=== {{head|cje|Đại từ}} # [[này]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} =={{langname|ycr}}== ==={{ĐM|etym}}=== {{der+|ycr|ja|二|tr=ni}}. ==={{ĐM|num}}=== {{head|ycr|Số từ}} # {{label|ycr|Áo Hoa}} [[hai]]. ==={{ĐM|ref}}=== * {{R:ycr:Lin 2022}} =={{langname|sea}}== ==={{ĐM|pron}}=== * {{IPA4|sea|/ni/}} ==={{ĐM|num}}=== {{head|sea|Số}} # [[ba]]. {{-ref-}} * [https://web.archive.org/web/20220922224210/http://sealang.net/monkhmer/database/retrieve.pl?language=Semai&sort=gloss&format=html Tiếng Semai] tại Cơ sở Dữ liệu Môn-Khmer. cvhj5k9xouvjtsvy1qy5i5gfkjtjtce pet 0 102466 2349983 2286902 2026-05-03T14:51:17Z WhoAlone 40420 2349983 wikitext text/x-wiki {{-eng-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/ˈpɛt/}} {{pron-audio |place=Hoa Kỳ <!-- Feel free to precise the city or the area --> |file=En-us-pet.ogg |pron=ˈpɛt}} {{-noun-}} '''pet''' {{IPA|/ˈpɛt/}} # [[cơn|Cơn]] [[giận]], [[cơn]] [[giận dỗi]]. #: ''to take the '''pet'''; to be in a '''pet''''' — giận dỗi # [[con|Con]] [[vật]] [[yêu quý]], [[vật]] [[cưng]]. # Người yêu quý, [[con cưng]]... #: ''to make a '''pet''' of a child'' — cưng một đứa bé # {{term|Định ngữ}} [[cưng|Cưng]], [[yêu quý]], [[thích]] [[nhất]]. #: '''''pet''' name'' — tên gọi cưng, tên gọi thân #: '''''pet''' subject'' — môn thích nhất {{-expr-}} * '''one's pet aversion''': {{see-entry|aversion|Aversion}} {{-tr-verb-}} '''pet''' ''ngoại động từ'' {{IPA|/ˈpɛt/}} # [[cưng|Cưng]], [[nuông]], [[yêu quý]]. {{-expr-}} * '''petting party''': {{term|từ Mỹ, nghĩa Mỹ}} , (thông tục) [[cuộc vui]] [[gỡ gạc]] (ôm, hôn hít... của cặp trai gái). {{-forms-}} {{eng-verb|base=pet|pet|t|ed}} {{-ref-}} {{R:FVDP}} =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[miếng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} =={{langname|cmo}}== ==={{ĐM|verb}}=== {{head|cmo|Động từ}} # [[bóp]]. {{-fra-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/pɛ/}} {{-noun-}} {{fra-noun| s=pet|p=pets| sp=/pɛ/|pp=/pɛ/}} '''pet''' {{m}} {{IPA|/pɛ/}} # {{term|Tục}} [[cái|Cái]] [[rắm]]. #: ''ça ne vaut pas '''pet''' de lapin'' — (thân mật) cái đó chẳng có giá trị gì #: ''il va y avoir du '''pet''''' — (tiếng lóng) sắp có ồn ào rắc rối đây #: '''''pet''' de maçon'' — (thông tục) rắm vãi cứt #: '''''pet''' honteux'' — (thông tục) rắm ngầm {{-interj-}} '''pet''' # [[coi chừng|Coi chừng]]! {{-ref-}} {{R:FVDP}} {{sơ khai}} [[Thể loại:Danh từ tiếng Anh]] [[Thể loại:Danh từ tiếng Pháp]] [[Thể loại:Thán từ tiếng Pháp]] [[Thể loại:Động từ tiếng Anh]] {{-aml-}} {{-verb-}} {{head|aml|Động từ}} # {{label|aml|Lamin}} [[thổi]]. {{-ref-}} * Nagaraja, K. S., Sidwell, Paul, Greenhill, Simon. (2013) ''A Lexicostatistical Study of the Khasian Languages: Khasi, Pnar, Lyngngam, and War''. nydwx3clt1ez8mewgnk2qe8xw9f93wb bacteriophage 0 105646 2350101 1799379 2026-05-04T05:00:04Z Kelly zhrm 58416 2350101 wikitext text/x-wiki {{also|bactériophage}} =={{langname|en}}== ==={{ĐM|etym}}=== Vay mượn từ {{bor|en|fr|bactériophage}}, được đặt ra bởi nhà vi sinh vật học {{w|Félix d'Hérelle}}, từ {{affix|en|bacterio-|-phage|t1=vi khuẩn|t2=người ăn}}. ==={{ĐM|pron}}=== * {{IPA4|en|/bækˈtɪəɹ.ɪəʊˌfeɪd͡ʒ/}} * {{enPR|bâk'tîr'ē'ə'fāj}} * {{audio|en|LL-Q1860 (eng)-Wodencafe-bacteriophage.wav|a=US}} * {{hyphenation|en|bac|ter|i|o|phage}} * {{rhymes|en|eɪdʒ|s=3}} ==={{ĐM|n}}=== {{en-noun}} # {{lb|en|microbiology|virology}} [[thực khuẩn thể|Thực khuẩn thể]]. ===={{ĐM|syn}}==== * {{l|en|phage}} ===={{ĐM|drv}}==== {{col|en|antibacteriophage|mycobacteriophage |corynebacteriophage |cyanobacteriophage |enterobacteriophage |bacteriophagous |bacteriophagy |bacteriophagic}} ===={{ĐM|see}}==== * {{l|en|virophage}} ==={{ĐM|ref}}=== {{R:FVDP|db=ev}} {{C|en|Virus}} n5jrfw9rz28182fxh2n8l72buretqsq paroxytone 0 119552 2349875 2225456 2026-05-03T12:11:49Z Hiyuune 50834 2349875 wikitext text/x-wiki =={{langname|en}}== ==={{ĐM|etym}}=== {{lbor|en|grc|πᾰροξῠ́τονος}}. ==={{ĐM|pron}}=== * {{IPA4|en|/pəˈɹɒk.sɪˌtəʊn/}} ==={{ĐM|adj}}=== {{en-adj|-}} # {{nhãn|en|linguistics}} Có [[trọng]] âm ở âm [[tiết]] áp cuối. #: {{coordinate terms|en|oxytone|proparoxytone|perispomenon|properispomenon|barytone|preproparoxytone}} ==={{ĐM|n}}=== {{en-noun}} # {{nhãn|en|linguistics}} [[từ|Từ]] có [[trọng]] âm ở âm [[tiết]] áp cuối. ==={{ĐM|ref}}=== * {{R:FVDP|db=ev}} etxzuytg23ywke9rh86j4las1l0rpks bo 0 170426 2349991 2339949 2026-05-03T15:00:04Z WhoAlone 40420 2349991 wikitext text/x-wiki {{-info-}} {{-eng-}} {{-interj-}} '''bo''' # [[suỵt|Suỵt]]! {{-expr-}} * '''can't say bo to a goose''': [[nhát|Nhát]] như [[cáy]]. {{-noun-}} '''bo''' # {{term|từ Mỹ, nghĩa Mỹ}} Bạn, bạn [[già]]. {{-ref-}} {{R:FVDP}} {{sơ khai}} [[Thể loại:Danh từ tiếng Anh]] [[Thể loại:Thán từ tiếng Anh]] =={{langname|crw}}== ==={{ĐM|noun}}=== {{head|crw|Danh từ}} # [[bò]]. ==={{ĐM|ref}}=== * Thomas, David. (1970) ''Vietnam word list (revised): Chrau Jro''. SIL International. =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[lép]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} =={{langname|ycr}}== ==={{ĐM|etym}}=== {{der+|ycr|ja|棒|tr=bō}}. ==={{ĐM|noun}}=== {{head|ycr|Danh từ}} # [[que]], [[gậy]]. #:{{uxi|ycr|'''bo''' totike|đi lấy cái '''que'''}} ==={{ĐM|ref}}=== * {{R:ycr:Lin 2022}} {{-aav-qal-}} {{-noun-}} {{pn}} # [[vú]]. [[Thể loại:Danh từ tiếng Quảng Lâm]] {{-tyz-}} {{-pron-}} {{tyz-IPA}} {{-noun-}} {{pn}} # [[mo]]. #:{{ux|tyz|'''bo''' mảy|'''mo''' măng}} {{-ref-}} {{R:Lương Bèn}} [[Thể loại:Danh từ tiếng Tày]] bjc5nexbow1w7clxa95f9t2kgrqzcl9 hah 0 170856 2350080 2218746 2026-05-04T04:08:52Z WhoAlone 40420 2350080 wikitext text/x-wiki {{-eng-}} {{-interj-}} '''hah''' # A!, [[ha ha]]! (tỏ ý ngạc nhiên, nghi ngờ, vui sướng hay đắc thắng). {{-intr-verb-}} '''hah''' ''nội động từ'' # [[kêu|Kêu]] [[ha ha]]. {{-expr-}} * '''to hum and ha''': {{see-entry|hum|Hum}} {{-ref-}} {{R:FVDP}} [[Thể loại:Thán từ tiếng Anh]] [[Thể loại:Động từ tiếng Anh]] =={{langname|mwt}}== ==={{ĐM|adv}}=== {{head|mwt|Phó từ}} # [[không]]. #:{{synonym|mwt|kan}} =={{langname|rmx}}== ==={{ĐM|verb}}=== {{head|rmx|Động từ}} # [[há]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. 8m50ei8f0sdv40fk49pngolx5cinc7u pah 0 171234 2350077 2231918 2026-05-04T04:05:27Z WhoAlone 40420 2350077 wikitext text/x-wiki {{-eng-}} {{-interj-}} '''pah''' # [[hừ|Hừ]]!, [[chà]]! {{-ref-}} {{R:FVDP}} [[Thể loại:Thán từ tiếng Anh]] =={{langname|rmx}}== ==={{ĐM|verb}}=== {{head|rmx|Động từ}} # [[tát]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. =={{langname|ren}}== ==={{ĐM|verb}}=== {{head|ren|Động từ}} # [[chẻ]]. #:{{synonym|ren|blah|chăl}} 6zwk9i99pcv8nbncpkp8wrf57egj4ti ka 0 186807 2350083 2342492 2026-05-04T04:13:04Z WhoAlone 40420 2350083 wikitext text/x-wiki {{-mul-}} {{-symbol-}} {{pn}} # {{ISO 639|1}} {{catname|Ký tự|đa ngữ}} =={{langname|alk}}== ==={{ĐM|noun}}=== {{head|alk|Danh từ}} # [[cá]]. ==={{ĐM|ref}}=== * Theraphan L. Thongkum, [http://sealang.net/sala/archives/pdf8/theraphan1997place.pdf The place of Lawi, Harak and Tariang within Bahnaric] (1997). Mon-Khmer Studies. {{-bdq-}} {{-pron-}} * {{IPA2|/kaː/}} {{-noun-}} {{pn}} # [[cá|Cá]]. {{-ref-}} * [https://web.archive.org/web/20211023194129/http://tudienbahnar.gialai.gov.vn/ Từ điển điện tử phương ngữ Bahnar-Việt]. {{catname|Danh từ|tiếng Ba Na}} {{-eus-}} {{-noun-}} {{pn}} # ''Tên của chữ cái Latinh'' '''[[K]]'''. {{catname|Danh từ|tiếng Basque}} =={{langname|kta}}== ==={{ĐM|noun}}=== {{head|kta|Danh từ}} # [[cá]]. ==={{ĐM|ref}}=== * Smith, Kenneth D. (1970) ''Vietnam word list (revised): Kơtua''. SIL International. =={{langname|ycr}}== ==={{ĐM|etym}}=== {{der+|ycr|ja|蚊|tr=ka}}. ==={{ĐM|noun}}=== {{head|ycr|Danh từ}} # {{label|ycr|Áo Hoa}} [[muỗi]]. ==={{ĐM|ref}}=== * {{R:ycr:Lin 2022}} =={{langname|jeh}}== ==={{ĐM|pron}}=== * {{IPA4|jeh|/kaː/}} ==={{ĐM|noun}}=== {{head|jeh|Danh từ}} # [[cá]]. {{-kpm-}} {{-noun-}} {{head|kpm|Danh từ}} # [[cá]]. {{-ref-}} * Lý Toàn Thắng, Tạ Văn Thông, K'Brêu, K'Bròh (1985) ''Ngữ pháp tiếng Kơ Ho''. Sở Văn hóa và Thông tin Lâm Đồng. {{-cma-}} {{-noun-}} {{head|cma|Danh từ}} # [[cá|Cá]]. {{-zns-}} {{-pron-}} * {{IPA4|zns|[kā]}} {{-pronoun-}} {{head|zns|Đại từ}} # [[bạn]]. {{-ref-}} * Blench, Roger. 2020. ''An introduction to Mantsi, a South Bauchi language of Central Nigeria''. =={{langname|mng}}== ==={{ĐM|noun}}=== {{head|mng|Danh từ}} # {{label|mng|Rơlơm}} [[cá]]. ==={{ĐM|ref}}=== * Blood, Evangeline; Blood, Henry (1972) ''Vietnam word list (revised): Mnong Rolom''. SIL International. =={{langname|mnn}}== ==={{ĐM|noun}}=== {{head|mnn|Danh từ}} # {{label|mnn|Bu Nông}} [[cá]]. ==={{ĐM|ref}}=== * Nguyễn Kiên Trường & Trương Anh. 2009. ''Từ Điển Việt - M'Nông''. Hà Nội: Nhà Xuất Bản Từ Điển Bách Khoa. {{c|mnn|Cá}} {{-cmo-}} {{-noun-}} {{head|cmo|Danh từ}} # [[cá]]. {{-nor-}} {{-pronoun-}} '''ka''' {{-dial-}} * [[hva]] {{-ref-}} {{R:FVDP}} [[Thể loại:đại từ tiếng Na Uy]] =={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[cá]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. {{-ren-}} {{-noun-}} {{head|ren|Danh từ}} # [[cá]]. {{-fos-}} {{-conj-}} {{head|fos|Liên từ}} # [[và]]. {{-ref-}} * Alexander Adelaar, [https://web.archive.org/web/20210106115554/https://www.soas.ac.uk/taiwanstudies/eats/eats2005/file24063.pdf The Austronesian languages of Taiwan, with special reference to Siraya] =={{langname|tdr}}== ==={{ĐM|noun}}=== {{head|tdr|Danh từ}} # {{label|tdr|Didrá}} [[cá]]. ==={{ĐM|ref}}=== * Gregerson, Kenneth J. và Smith, Kenneth D. (1973). ''The development of Todrah register''. SIL International. {{-zyg-}} {{-noun-}} {{head|zyg|Danh từ}} # [[chân]]. rqx1v4bgs1mpqee7axxz7qi3rkp6k0w tre già măng mọc 0 232138 2350007 2109079 2026-05-03T16:49:23Z TheHighFighter2 42988 /* */ 2350007 wikitext text/x-wiki =={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|idiom}}=== {{vi-idiom}} # Ví lớp người trước [[già]] đi thì có lớp người sau [[kế tục]], [[thay thế]] (lớp này [[kế tiếp]] lớp khác, không bao giờ hết). #* '''1941''', {{w|Nam Cao}}, ''[[s:Chí Phèo|Chí Phèo]]'': #*: {{quote|vi|Nhưng thói đời, '''tre già măng mọc''', có bao giờ hết những thằng du côn?}} ==={{ĐM|ref}}=== * {{R:Tratu}} 84fsibl788f4s92j0tz7ry9nwknthjp Thảo luận Thành viên:Hydriz 3 257242 2349999 2010463 2026-05-03T15:19:56Z Hiyuune 50834 change subst template:Welcome 2349999 wikitext text/x-wiki == Chào mừng! == <div style="border:1px solid #FDA; vertical-align:top; padding: 0.5em; background-color: var(--background-color-progressive-subtle, #f1f4fd); border: 1px solid var(--border-color-progressive, #36c); color: var(--color-base, #202122)"> <div style="margin-left:0.5em; margin-right: 0.5em; margin-bottom:1em; margin-top: 0.1em;"> <span style="font-size: 1.3rem;">'''Xin chào Hydriz! Chào mừng bạn đến với Wiktionary tiếng Việt!'''</span> <div class="plainlinks"><p style="margin-top:0.1em; margin-bottom: 1em;"> Wiktionary là từ điển mở mà ai cũng đều có thể chỉnh sửa. Cách sử dụng và quy định có thể gây khó khăn cho bạn, nhưng hãy dần học hỏi và '''[[Wiktionary:Táo bạo|mạnh dạn đóng góp]]'''. Các thông tin dưới đây sẽ có thể giúp bạn sử dụng và chỉnh sửa Wiktionary.</p></div> </div> <!-- Quan trọng --> <div style="clear: both; margin-left: 1.5em; margin-right 1.5em; font-size: 100%;"> {| class="plainlinks" width="100%" style="margin:auto;" | style="text-align:center; padding:4px" | [[File:OOjs UI icon search-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Tìm kiếm|Tìm kiếm Wiktionary]]''' <br />Tìm hiểu cách tìm và tra cứu mục từ trên Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon lightbulb.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Yêu cầu mục từ|Yêu cầu mục từ]]'''<br />Nơi để bạn thêm những từ cần viết nhưng chưa có tại Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon userAvatar.svg|30px|link=|]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Cộng đồng|Cổng Cộng đồng Wiktionary tiếng Việt]]'''<br />Nơi tìm hiểu mọi thông tin về của Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon articleCheck-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Quy định và hướng dẫn|Quy định và hướng dẫn]]''' <br />Chính sách của Wiktionary là gì? Xin vui lòng đọc nó trước khi thực hiện chỉnh sửa! |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon edit-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Viết trang mới|Viết trang mới]]'''<br />Tham khảo cách viết trang hay mục từ mới tại Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon tray.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Chỗ thử|Chỗ thử]]'''<br />Nơi để bạn viết nháp và thử nghiệm. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon wikiText.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Sửa đổi|Thực hiện sửa đổi]]'''<br />Tham khảo hướng dẫn sửa đổi và cùng bắt đầu sửa đổi Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon helpNotice-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Bàn giúp đỡ|Bàn giúp đỡ]]'''<br />Nơi hỏi đáp khi gặp khó khăn trên Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon book-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Mục lục|Mục lục trợ giúp]]''' <br />Mục lục giúp bạn thông tin và hướng dẫn khác khi gặp khó khăn trong những lúc đóng góp! | style="text-align:center; padding:4px" | [[File:OOjs UI icon speechBubbles-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Thảo luận|Thảo luận chung]]'''<br />Nơi trao đổi ý kiến giữa bạn và các thành viên khác! |}</div> <div style="padding: 0.5em; margin-top: 1em; font-size: 1em; background-color: var(--background-color-progressive-subtle, #f1f4fd); border: 1px solid var(--border-color-progressive, #36c); color: var(--color-base, #202122)"> [[File:Vector sig vi.png|250px|right]] '''Hãy luôn nhớ rằng, sau khi viết thảo luận xong thì đừng quên bước quan trọng đó là ký tên ở phía sau thảo luận'''. Phương thức ký tên được sử dụng trong Wiktionary không phải là viết tên trực tiếp, nhưng xin hãy ký tên bằng cách sử dụng 4 dấu ngã (<code><nowiki>--~~~~</nowiki></code>) hoặc bằng cách nhấp vào nút chữ ký ([[File:OOUI JS signature icon LTR.svg|20px|border]]) trong cửa sổ chỉnh sửa của phiên bản trình soạn thảo mã nguồn thông thường.<br/> [[Wiktionary:Guestbook_for_non-Vietnamese_speakers|Welcome! If you are not good at Vietnamese or do not speak it, click here.]] </div> </div>&nbsp;<!-- Template:Welcome--> [[Thành viên:NMP90|NMP90]] ([[Thảo luận Thành viên:NMP90|thảo luận]]) 11:42, ngày 14 tháng 8 năm 2020 (UTC) gagsav56j6sempn0b9flu4izvpv33ok bơbe 0 259546 2349990 2019222 2026-05-03T14:59:41Z WhoAlone 40420 2349990 wikitext text/x-wiki {{-bdq-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: {{IPA|/bəbɛː/}} {{-noun-}} '''bơbe''' # Con [[dê]]. [[Thể loại:Danh từ tiếng Ba Na]] =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[dê]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 6o5rpggqf2e1oa6kk5o6kduzvjbb8kq Bản mẫu:langname 10 260140 2350006 2329451 2026-05-03T16:42:04Z TheHighFighter2 42988 Thử nghiệm để tiến tới xóa bỏ getCanonicalName2 2350006 wikitext text/x-wiki <includeonly><onlyinclude>{{ucfirst:{{safesubst:<noinclude/>#invoke:languages/templates|getByCodeAllowEtym|{{{1}}}|getCanonicalName}}}}</onlyinclude></includeonly><!-- -->{{documentation}} sts1mm4mm233rrkowxlqfp2wbuleknc chih 0 264382 2349986 2082593 2026-05-03T14:54:33Z WhoAlone 40420 2349986 wikitext text/x-wiki {{-bdq-}} {{-pron-}} * {{IPA2|/cih/}} {{-verb-}} {{pn}} # [[viết|Viết]]; [[ghi]]; [[chép]]. {{-ref-}} * [https://web.archive.org/web/20211023194129/http://tudienbahnar.gialai.gov.vn/ Từ điển điện tử phương ngữ Bahnar-Việt]. {{catname|Động từ|tiếng Ba Na}} =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[viết]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} exwbvrujlkk5kq1xu1z2mu3z7d0vity mam 0 264383 2350074 2150748 2026-05-04T04:04:26Z WhoAlone 40420 2350074 wikitext text/x-wiki {{-bdq-}} {{-pron-}} * {{IPA2|/maːm/}} {{-noun-}} {{pn}} # [[sắt|Sắt]]. {{-ref-}} * [https://web.archive.org/web/20211023194129/http://tudienbahnar.gialai.gov.vn/ Từ điển điện tử phương ngữ Bahnar-Việt]. {{catname|Danh từ|tiếng Ba Na}} {{-brb-}} {{-noun-}} {{pn}} # Một [[loại]] [[chiêng]] của [[người]] [[Brâu]]. {{-ref-}} * [http://www.cema.gov.vn/gioi-thieu/cong-dong-54-dan-toc/nguoi-brau.htm Người Brâu] tại Cổng Thông tin điện tử Ủy ban Dân tộc. [[Thể loại:Danh từ tiếng Brâu]] {{-zns-}} {{-pron-}} * {{IPA4|zns|[mâm]}} {{-noun-}} {{head|zns|Danh từ}} # [[củ]] [[từ]], [[khoai mỡ]]. {{-verb-}} {{head|zns|Động từ}} # [[biết]]. {{-ref-}} * Blench, Roger. 2020. ''An introduction to Mantsi, a South Bauchi language of Central Nigeria''. =={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[sắt]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. sg673eqtz6b3tjwuatz9oeb5ei8en93 wa 0 265149 2349886 2213177 2026-05-03T12:24:36Z WhoAlone 40420 2349886 wikitext text/x-wiki {{-ibh-}} {{-noun-}} {{head|ibh|Danh từ}} # [[chú]], [[bác]]. {{-ref-}} * Tam Thi Minh Nguyen, ''A grammar of Bih ''(2013) =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[chú]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} =={{langname|jeh}}== ==={{ĐM|noun}}=== {{head|jeh|Danh từ}} # [[vượn]]. ==={{ĐM|ref}}=== * Cohen, Patrick D., Thŭng (1972). ''ʼDŏk tơtayh Jeh, au pơchŏ hŏk chù Jeh: Hŏk tro pơsèm hŏk, lăm-al 1-3 (Ðọc tiếng Jeh, Em học vần tiếng Jeh: Lớp vỡ-lòng, quyển 1-3)''. SIL International. {{-kpm-}} {{-noun-}} {{head|kpm|Danh từ}} # [[bác]]. {{-ref-}} * Lý Toàn Thắng, Tạ Văn Thông, K'Brêu, K'Bròh (1985) ''Ngữ pháp tiếng Kơ Ho''. Sở Văn hóa và Thông tin Lâm Đồng. {{-zns-}} {{-pron-}} * {{IPA4|zns|[wâ]}} {{-noun-}} {{head|zns|Danh từ}} # [[bia]]. {{-ref-}} * Blench, Roger, Bulkaam, Michael. 2020. ''An introduction to Mantsi, a South Bauchi language of Central Nigeria''. {{-mtq-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: /waː¹/, [waː¹ ~ βaː¹] {{-noun-}} {{pn}} # [[hoa]]. [[Thể loại:Danh từ tiếng Mường]] gp100xx8jjxaxlyav4icbkgaag6pkoh măt 0 267042 2350084 2336420 2026-05-04T04:14:17Z WhoAlone 40420 2350084 wikitext text/x-wiki {{-bdq-}} {{-pron-}} * {{IPA4|bdq|/mat/}} {{-noun-}} {{head|bdq|Danh từ}} # [[mặt]]. =={{langname|kta}}== ==={{ĐM|noun}}=== {{head|kta|Danh từ}} # [[mắt]]. ==={{ĐM|ref}}=== * Smith, Kenneth D. (1970) ''Vietnam word list (revised): Kơtua''. SIL International. =={{langname|crw}}== ==={{ĐM|noun}}=== {{head|crw|Danh từ}} # [[mắt]]. ==={{ĐM|ref}}=== * Thomas, David. (1970) ''Vietnam word list (revised): Chrau Jro''. SIL International. {{-mtq-}} {{-pron-}} * [[Wiktionary:IPA|IPA]]: /mat⁷/ {{-noun-}} {{pn}} # [[mắt]]. # [[mặt]]. [[Thể loại:Danh từ tiếng Mường]] =={{langname|mng}}== ==={{ĐM|pron}}=== * {{IPA4|mng|/măt/}} ==={{ĐM|num}}=== {{head|mng|Số}} # {{label|mng|Rơlơm}} [[mười]]. ==={{ĐM|noun}}=== {{head|mng|Danh từ}} # {{label|mng|Rơlơm}} [[mắt]]. ==={{ĐM|ref}}=== * Blood, Evangeline; Blood, Henry (1972) ''Vietnam word list (revised): Mnong Rolom''. SIL International. =={{langname|mnn}}== ==={{ĐM|noun}}=== {{head|mnn|Danh từ}} # {{label|mnn|Bu Nông}} [[mắt]]. ==={{ĐM|ref}}=== * Nguyễn Kiên Trường & Trương Anh. 2009. ''Từ Điển Việt - M'Nông''. Hà Nội: Nhà Xuất Bản Từ Điển Bách Khoa. {{-cmo-}} {{-noun-}} {{head|cmo|Danh từ}} # [[mắt]]. =={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[mặt]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. {{-ren-}} {{-noun-}} {{head|ren|Danh từ}} # [[mắt]]. {{-aav-tam-}} {{-noun-}} {{head|aav-tam|Danh từ}} # [[mắt]]. {{-ref-}} * Phan Trần Công (2017). Tương ứng từ vựng và mối quan hệ giữa các ngôn ngữ trong nhóm Bahnar Nam. Tạp chí Phát triển Khoa học và Công nghệ: Chuyên san Khoa học xã hội và Nhân văn, tập 1, số 4, 2017. {{c|aav-tam|Bộ phận cơ thể|Giải phẫu học|Thị giác}} 7lsfheuecen6b1uglv0vv7w0p2egnfv Mô đun:languages/data/3/k 828 269871 2350114 2348477 2026-05-04T06:21:45Z Hiyuune 50834 2350114 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} m["kaa"] = { "tiếng Karakalpak", 33541, "trk-kno", "Latn, Cyrl, fa-Arab", "Tiếng Karakalpak", "Karakalpak", dotted_dotless_i = true, entry_name = { from = {"['’]"}, to = {"ʼ"} }, sort_key = { Latn = { from = { -- Sort the old orthography (using the apostrophe) after the new orthography (using the acute accent). "í", "iʼ", "i", -- Ensure "i" comes after "í", "iʼ", "ı". "sh", "ch", "á", "aʼ", "ǵ", "gʼ", "x", p[4], p[5], "ı", "q", "ń", "nʼ", "ó", "oʼ", "ú", "uʼ", "c" }, to = { p[4], p[5], "i" .. p[3], "z" .. p[1], "z" .. p[3], "a" .. p[1], "a" .. p[2], "g" .. p[1], "g" .. p[2], "h" .. p[1], "i", "i" .. p[1], "i" .. p[2], "k" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "u" .. p[1], "u" .. p[2], "z" .. p[2] } }, Cyrl = { from = {"ә", "ғ", "ё", "қ", "ң", "ө", "ү", "ў", "ҳ"}, to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "у" .. p[2], "х" .. p[1]} }, }, } m["kab"] = { "tiếng Kabyle", 35853, "ber", "Latn, Arab, Tfng", "Tiếng Kabyle", "Kabyle", } m["kac"] = { "tiếng Kachin", 33332, "sit-jnp", "Latn, Mymr", "Tiếng Kachin", "Kachin", } m["kad"] = { "Kadara", 3914011, "nic-plc", "Latn", } m["kae"] = { "Ketangalan", 2779411, "map", } m["kaf"] = { "Katso", 246122, "tbq-kzh", } m["kag"] = { "Kajaman", 6348863, "poz", "Latn", } m["kah"] = { "Fer", 5443742, "csu-bgr", "Latn", } m["kai"] = { "tiếng Karekare", 3438770, "cdc-wst", "Latn", "Tiếng Karekare", "Karekare", } m["kaj"] = { "Jju", 35401, "nic-plc", "Latn", } m["kak"] = { "tiếng Kalanguya", 3192220, "phi", "Latn", "Tiếng Kalanguya", "Kalanguya" } m["kam"] = { "Kamba", 2574767, "bnt-kka", "Latn", } m["kao"] = { "Kassonke", 36905, "dmn-wmn", "Latn", } m["kap"] = { "tiếng Bezhta", 33054, "cau-ets", "Cyrl", "Tiếng Bezhta", "Bezhta", translit = "cau-nec-translit", override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = {Cyrl = s["cau-Cyrl-entryname"]}, } m["kaq"] = { "tiếng Capanahua", 2937196, "sai-pan", "Latn", "Tiếng Capanahua", "Capanahua", } m["kaw"] = { "tiếng Java cổ", 49341, "poz", "Latn, Java, Kawi", "Tiếng Java cổ", "Java cổ", translit = "jv-translit", --same as jv } m["kax"] = { "Kao", 3192799, "paa-nha" } m["kay"] = { "Kamayurá", 3192336, "tup-gua", "Latn", } m["kba"] = { "Kalarko", 5517764, "aus-pam", "Latn", } m["kbb"] = { "Kaxuyana", 12953626, "sai-prk", "Latn", } m["kbc"] = { "Kadiwéu", 18168288, "sai-guc", "Latn", } m["kbd"] = { "tiếng Kabardia", 33522, "cau-cir", "Cyrl, Latn, Arab", "Tiếng Kabardia", "Kabardia", translit = { Cyrl = "cau-cir-translit", Arab = "ar-translit", }, override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = { Cyrl = s["cau-Cyrl-entryname"], Latn = s["cau-Latn-entryname"], }, sort_key = { Cyrl = { from = { "кхъу", "къӏу", -- 4 chars "гъу", "джу", "дзу", "жъу", "къу", "кхъ", "къӏ", "кӏу", "кӏь", "лъу", "лӏу", "пӏу", "сӏу", "тӏу", "фӏу", "хъу", "цӏу", "чъу", "чӏу", "шъу", "шӏу", "щӏу", -- 3 chars "гу", "гъ", "гь", "дж", "дз", "ё", "жъ", "жь", "ку", "къ", "кь", "кӏ", "лъ", "ль", "лӏ", "пӏ", "сӏ", "тӏ", "фӏ", "ху", "хъ", "хь", "цу", "цӏ", "чу", "чъ", "чӏ", "шъ", "шӏ", "щӏ", "ӏу", "ӏь", -- 2 chars "э" -- 1 char }, to = { "к" .. p[5], "к" .. p[7], "г" .. p[3], "д" .. p[2], "д" .. p[4], "ж" .. p[2], "к" .. p[3], "к" .. p[4], "к" .. p[6], "к" .. p[10], "к" .. p[11], "л" .. p[2], "л" .. p[5], "п" .. p[2], "с" .. p[2], "т" .. p[2], "ф" .. p[2], "х" .. p[3], "ц" .. p[3], "ч" .. p[3], "ч" .. p[5], "ш" .. p[2], "ш" .. p[4], "щ" .. p[2], "г" .. p[1], "г" .. p[2], "г" .. p[4], "д" .. p[1], "д" .. p[3], "е" .. p[1], "ж" .. p[1], "ж" .. p[3], "к" .. p[1], "к" .. p[2], "к" .. p[8], "к" .. p[9], "л" .. p[1], "л" .. p[3], "л" .. p[4], "п" .. p[1], "с" .. p[1], "т" .. p[1], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[4], "ц" .. p[1], "ц" .. p[2], "ч" .. p[1], "ч" .. p[2], "ч" .. p[4], "ш" .. p[1], "ш" .. p[3], "щ" .. p[1], "ӏ" .. p[1], "ӏ" .. p[2], "а" .. p[1] } }, }, } m["kbe"] = { "Kanju", 10543322, "aus-pam", "Latn", } m["kbg"] = { "tiếng Khamba", 12952626, "sit-tib", "Tibt", "Tiếng Khamba", "Khamba", translit = "Tibt-translit", override_translit = true, display_text = s["Tibt-displaytext"], entry_name = s["Tibt-entryname"], sort_key = "Tibt-sortkey", } m["kbh"] = { "Camsá", 2842667, "qfa-iso", "Latn", } m["kbi"] = { "Kaptiau", 6367294, "poz-oce", "Latn", } m["kbj"] = { "Kari", 6370438, "bnt-boa", "Latn", } m["kbk"] = { "Grass Koiari", 12952642, "ngf", "Latn", } m["kbm"] = { "Iwal", 3156391, "poz-ocw", "Latn", } m["kbn"] = { "Kare (Africa)", 35554, "alv-mbm", "Latn", } m["kbo"] = { "Keliko", 11275553, "csu-mma", } m["kbp"] = { "tiếng Kabiye", 35475, "nic-gne", "Latn", "Tiếng Kabiye", "Kabiye", } m["kbq"] = { "Kamano", 11732272, "paa-kag", "Latn", } m["kbr"] = { "tiếng Kafa", 35481, "omv-gon", "Ethi, Latn", "Tiếng Kafa", "Kafa", } m["kbs"] = { "Kande", 35556, "bnt-tso", "Latn", } m["kbt"] = { "Gabadi", 3291159, "poz-ocw", "Latn", } m["kbu"] = { "Kabutra", 10966761, "inc-wes", ancestors = "raj", } m["kbv"] = { "Kamberataro", 5261289, "paa", "Latn", } m["kbw"] = { "Kaiep", 6347632, "poz-ocw", "Latn", } m["kbx"] = { "Ap Ma", 56298, "paa-ram", } m["kbz"] = { "Duhwa", 56295, "cdc-wst", "Latn", } m["kca"] = { "tiếng Khanty", 33563, "urj-ugr", "Cyrl", "Tiếng Khanty", "Khanty", translit = "kca-translit", override_translit = true, } m["kcb"] = { "Kawacha", 11732302, "ngf", } m["kcc"] = { "Lubila", 3914381, "nic-uce", "Latn", } m["kcd"] = { "Ngkâlmpw Kanum", 12952566, "paa-yam", } m["kce"] = { "Kaivi", 6348685, "nic-kau", } m["kcf"] = { "Ukaan", 36651, "nic-bco", } m["kcg"] = { "tiếng Tyap", 3912765, "nic-plc", "Latn", "Tiếng Tyap", "Tyap", } m["kch"] = { "Vono", 3913920, "nic-kau", } m["kci"] = { "Kamantan", 3914019, "nic-plc", } m["kcj"] = { "Kobiana", 35609, "alv-nyn", } m["kck"] = { "Kalanga", 33672, "bnt-sho", "Latn", } m["kcl"] = { "Kala", 6349982, "poz-ocw", "Latn", } m["kcm"] = { "Tar Gula", 277963, "csu-bba", } m["kcn"] = { "tiếng Nubi", 36388, "crp", "Latn, Arab", "Tiếng Nubi", "Nubi", ancestors = "apd", entry_name = {remove_diacritics = c.acute}, } m["kco"] = { "Kinalakna", 11732320, "ngf", } m["kcp"] = { "Kanga", 6362384, "qfa-kad", "Latn", } m["kcq"] = { "Kamo", 3914879, "alv-wjk", } m["kcr"] = { "Katla", 35688, "nic-ktl", } m["kcs"] = { "Koenoem", 3438755, "cdc-wst", } m["kct"] = { "Kaian", 6347538, "paa-ram", } m["kcu"] = { "Kikami", 3915212, "bnt-ruv", "Latn", } m["kcv"] = { "Kete", 3195598, "bnt-lub", } m["kcw"] = { "Kabwari", 6344539, "bnt-glb", } m["kcx"] = { "tiếng Kachama-Ganjule", 12634070, "omv-eom", "Latn", "Tiếng Kachama-Ganjule", "Kachama-Ganjule", } m["kcy"] = { "Korandje", 33427, "son", } m["kcz"] = { "Konongo", 11732345, "bnt-tkm", "Latn", } m["kda"] = { "Worimi", 3914062, "aus-pam", "Latn", } m["kdc"] = { "Kutu", 6448634, "bnt-ruv", } m["kdd"] = { "Yankunytjatjara", 34207, "aus-pam", "Latn", } m["kde"] = { "Makonde", 35172, "bnt-rvm", "Latn", } m["kdf"] = { "Mamusi", 6746036, "poz-ocw", "Latn", } m["kdg"] = { "Seba", 7442316, "bnt-sbi", "Latn", } m["kdh"] = { "tiếng Tem", 36531, "nic-gne", "Latn, Arab", "Tiếng Tem", "Tem", } m["kdi"] = { "Kumam", 6443410, "sdv-los", } m["kdj"] = { "Karamojong", 56326, "sdv-ttu", "Latn", } m["kdk"] = { "Numee", 3346774, "poz-cln", } m["kdl"] = { "Tsikimba", 3914404, "nic-kam", } m["kdm"] = { "Kagoma", 3914420, "nic-plc", } m["kdn"] = { "Kunda", 4121130, "bnt-sna", } m["kdp"] = { "Kaningdon-Nindem", 3914956, "nic-nin", } m["kdq"] = { "tiếng Koch", 56431, "tbq-bdg", "as-Beng, Latn", "Tiếng Koch", "Koch", } m["kdr"] = { "tiếng Karaim", 33725, "trk-kcu", "Cyrl, Latn, Hebr", "Tiếng Karaim", "Karaim", translit = "kdr-translit", } m["kdt"] = { "tiếng Kuy", 56310, "mkh-kat", "Thai, Khmr, Laoo", "Tiếng Kuy", "Kuy", } m["kdu"] = { "Kadaru", 35441, "nub-hil", "Latn", } m["kdv"] = { "Kado", 7402721, "sit-luu", } m["kdw"] = { "Koneraw", 11732341, "ngf", } m["kdx"] = { "Kam", 36753, "alv-wjk", } m["kdy"] = { "Keder", 6383641, "paa-tkw", } m["kdz"] = { "Kwaja", 11128866, "nic-nka", "Latn", } m["kea"] = { "tiếng Kabuverdianu", 35963, "crp", "Latn", "Tiếng Kabuverdianu", "Kabuverdianu", ancestors = "pt", } m["keb"] = { "Kélé", 35559, "bnt-kel", } m["kec"] = { "Keiga", 3409311, "qfa-kad", "Latn", } m["ked"] = { "Kerewe", 6393846, "bnt-haj", } m["kee"] = { "Eastern Keres", 15649021, "nai-ker", "Latn", } m["kef"] = { "Kpessi", 35748, "alv-gbe", } m["keg"] = { "Tese", 16887296, "sdv", } m["keh"] = { "Keak", 6382110, "paa-spk", } m["kei"] = { "Kei", 2410352, } m["kej"] = { "Kadar", 6345179, "dra-mal", } m["kek"] = { "Q'eqchi", 35536, "myn", "Latn", } m["kel"] = { "Kela-Yela", 6385426, "bnt-mon", "Latn", } m["kem"] = { "Kemak", 35549, "poz-tim", } m["ken"] = { "tiếng Kenyang", 35650, "nic-mam", "Latn", "Tiếng Kenyang", "Kenyang", } m["keo"] = { "Kakwa", 3033547, "sdv-bri", } m["kep"] = { "Kaikadi", 6347757, "dra-tam", } m["keq"] = { "Kamar", 14916877, "inc-eas", } m["ker"] = { "Kera", 56251, "cdc-est", "Latn", } m["kes"] = { "Kugbo", 3813394, "nic-cde", "Latn", } m["ket"] = { "tiếng Ket", 33485, "qfa-yno", "Cyrl", "Tiếng Ket", "Ket", entry_name = { from = {"['’]"}, to = {"ʼ"} }, sort_key = { from = {"ӷ", "ё", "ӄ", "ӈ", "ө", "ә", "ʼ"}, to = {"г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "ъ" .. p[1], "ь" .. p[1]} }, } m["keu"] = { "Akebu", 35026, "alv-ktg", } m["kev"] = { "Kanikkaran", 6363201, "dra-mal", } m["kew"] = { "Kewa", 12952619, "paa-eng", "Latn", } m["kex"] = { "tiếng Kukna", 5031131, "inc-eas", "Gujr", "Tiếng Kukna", "Kukna", ancestors = "bh", } m["key"] = { "tiếng Kupia", 6445354, "inc-eas", "Telu", "Tiếng Kupia", "Kupia", translit = "te-translit", } m["kez"] = { "Kukele", 3915391, "nic-ucn", "Latn", } m["kfa"] = { "tiếng Kodava", 33531, "dra-kod", "Knda, Mlym", "Tiếng Kodava", "Kodava", translit = { Knda = "kn-translit", Mlym = "ml-translit" }, } m["kfb"] = { "tiếng Kolami", 33479, "dra-knk", "Deva, Telu,", "Tiếng Kolami", "Kolami", translit = { Telu = "te-translit", }, } m["kfc"] = { "tiếng Konda-Dora", 35679, "dra-kki", "Orya, Telu", "Tiếng Konda-Dora", "Konda-Dora", translit = { Orya = "gon-Orya-translit", Telu = "te-translit", }, } m["kfd"] = { "tiếng Koraga Korra", 12952655, "dra-kor", "Knda", "Tiếng Koraga Korra", "Koraga Korra", translit = "kn-translit", } m["kfe"] = { "tiếng Kota (Ấn Độ)", 33483, "dra-tkt", "Taml", "Tiếng Kota (Ấn Độ)", "Kota (Ấn Độ)", translit = "ta-translit", } m["kff"] = { "tiếng Koya", 33471, "dra-gon", "Orya, Telu, Deva", "Tiếng Koya", "Koya", } m["kfg"] = { "tiếng Kudiya", 12952667, "dra-tlk", "Knda, Mlym", "Tiếng Kudiya", "Kudiya", translit = { Knda = "kn-translit", Mlym = "ml-translit", } } m["kfh"] = { "tiếng Kurichiya", 12952676, "dra-mal", "Mlym", "Tiếng Kurichiya", "Kurichiya", translit = "ml-translit", } m["kfi"] = { "tiếng Kurumba Kannada", 56589, "dra-sdo", "Taml, Knda", "Tiếng Kurumba Kannada", "Kurumba Kannada", translit = { Knda = "kn-translit", Taml = "ta-translit", } } m["kfj"] = { "Kemiehua", 27144776, "mkh-pal", } m["kfk"] = { "tiếng Kinnaur", 2383208, "sit-kin", "Takr, Deva, Latn", "Tiếng Kinnaur", "Kinnaur", } m["kfl"] = { "Kung", 6444510, "nic-rnc", "Latn", } m["kfn"] = { "Kuk", 6442398, "nic-rnc", "Latn", } m["kfo"] = { "Koro (West Africa)", 11160588, "dmn-mnk", "Latn, Nkoo", } m["kfp"] = { "tiếng Korwa", 6432786, "mun", "Latn", "Tiếng Korwa", "Korwa", } m["kfq"] = { "tiếng Korku", 33715, "mun", "Deva", "Tiếng Korku", "Korku", } m["kfr"] = { "tiếng Kutch", 56487, "inc-snd", "Gujr, sd-Arab, Sind, Khoj", "Tiếng Kutch", "Kutch", translit = { Gujr = "gu-translit", Sind = "Sind-translit", }, entry_name = { remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef, from = {u(0x0671)}, to = {u(0x0627)} }, } m["kfs"] = { "tiếng Bilaspur", 12953397, "him", "Deva, Takr", translit = { Deva = "hi-translit", }, "Tiếng Bilaspur", "Bilaspur", } m["kft"] = { "Kanjari", 12953610, "inc-pan", ancestors = "pa", } m["kfu"] = { "Katkari", 6377671, "inc-sou", } m["kfv"] = { "Kurmukar", 6446193, "inc-eas", } m["kfw"] = { "Kharam Naga", 12952906, "tbq-kuk", } m["kfx"] = { "tiếng Kullu", 6443148, "him", "Deva, Takr", "Tiếng Kullu", "Kullu", translit = {Deva = "hi-translit"}, } m["kfy"] = { "Kumaoni", 33529, "inc-pah", "Deva, Shrd, Takr", } m["kfz"] = { "Koromfé", 35701, "nic-gur", "Latn", } m["kga"] = { "Koyaga", 11155632, "dmn-mnk", } m["kgb"] = { "Kawe", 12952750, "poz-hce", } m["kgd"] = { "Kataang", 12953622, "mkh", } m["kge"] = { "Komering", 49224, "poz-lgx", } m["kgf"] = { "Kube", 11732359, "ngf", } m["kgg"] = { "Kusunda", 33630, "qfa-iso", "Latn", } m["kgi"] = { "Selangor Sign Language", 33731, "sgn", } m["kgj"] = { "tiếng Kham Gamale", 22236996, "sit-kha", "Deva", "Tiếng Kham Gamale", "Kham Gamale" } m["kgk"] = { "Kaiwá", 3111883, "tup-gua", "Latn", } m["kgl"] = { "Kunggari", 10550184, "aus-pam", } m["kgm"] = { "Karipúna", 6371069, } m["kgn"] = { "Karingani", 6371041, "xme-ttc", ancestors = "xme-ttc-nor", } m["kgo"] = { "Krongo", 6438927, "qfa-kad", "Latn", } m["kgp"] = { "tiếng Kaingang", 2665734, "sai-sje", "Latn", "Tiếng Kaingang", "Kaingang", } m["kgq"] = { "Kamoro", 6359001, "ngf", } m["kgr"] = { "Abun", 56657, "paa", } m["kgs"] = { "Kumbainggar", 3915412, "aus-pam", } m["kgt"] = { "Somyev", 3913354, "nic-mmb", "Latn", } m["kgu"] = { "Kobol", 11732325, "ngf-mad", } m["kgv"] = { "Karas", 6368621, "ngf", } m["kgw"] = { "Karon Dori", 56817, } m["kgx"] = { "Kamaru", 12953604, "poz", } m["kgy"] = { "Kyerung", 12952691, "sit-kyk", } m["kha"] = { "tiếng Khasi", 33584, "aav-pkl", "Latn, as-Beng", "Tiếng Khasi", "Khasi", } m["khb"] = { "tiếng Lự", 36948, "tai-swe", "Talu, Lana", "Tiếng Lự", "Lự", translit = {Talu = "Talu-translit"}, entry_name = {remove_diacritics = c.ZWNJ}, sort_key = { Talu = "Talu-sortkey", Lana = "Lana-sortkey", }, } m["khc"] = { "tiếng Tukang Besi Bắc", 18611555, "poz-mun", "Latn", "Tiếng Tukang Besi Bắc", "Tukang Besi Bắc" } m["khd"] = { "Bädi Kanum", 20888004, "paa-yam", } m["khe"] = { "Korowai", 6432598, "ngf", } m["khf"] = { "tiếng Khuen", 27144893, "mkh-khm", "Thai", "Tiếng Khuen", "Khuen", } m["khg"] = { "tiếng Tây Tạng Kham", 56601, "sit-tib", "Tibt", "Tiếng Tây Tạng Kham", "Tây Tạng Kham", translit = "Tibt-translit", override_translit = true, display_text = s["Tibt-displaytext"], entry_name = s["Tibt-entryname"], sort_key = "Tibt-sortkey", } m["khh"] = { "Kehu", 10994953, } m["khj"] = { "Kuturmi", 3914490, "nic-plc", "Latn", } m["khl"] = { "Lusi", 3267788, "poz-ocw", "Latn", } m["khn"] = { "Khandeshi", 33726, "inc-sou", } m["kho"] = { "Khotanese", 6583551, "xsc-sak", "Brah, Khar", translit = "Brah-translit", } m["khp"] = { "Kapauri", 3502575, "paa-tkw", } m["khq"] = { "Koyra Chiini", 33600, "son", } m["khr"] = { "tiếng Kharia", 3915562, "mun", "Deva, Orya, Latn", "Tiếng Kharia", "Kharia", translit = {Deva = "hi-translit"}, } m["khs"] = { "Kasua", 6374863, "ngf", } m["kht"] = { "tiếng Khamti", 3915502, "tai-swe", "Mymr", "Tiếng Khamti", "Khamti", entry_name = {remove_diacritics = c.VS01}, } m["khu"] = { "Nkhumbi", 11019169, "bnt-swb", } m["khv"] = { "tiếng Khvarshi", 56425, "cau-wts", "Cyrl", translit = "khv-translit", display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = {Cyrl = s["cau-Cyrl-entryname"]}, "Tiếng Khvarshi", "Khvarshi", } m["khw"] = { "tiếng Khowar", 938216, "inc-chi", "Arab", "Tiếng Khowar", "Khowar", } m["khx"] = { "Kanu", 12952571, "bnt-lgb", } m["khy"] = { "Ekele", 6385549, "bnt-ske", "Latn", } m["khz"] = { "Keapara", 12952603, "poz-ocw", "Latn", } m["kia"] = { "Kim", 35685, "alv-kim", } m["kib"] = { "tiếng Koalib", 35859, "alv-hei", "Latn", "Tiếng Koalib", "Koalib", } m["kic"] = { "tiếng Kickapoo", 20162127, "alg-sfk", "Latn", "Tiếng Kickapoo", "Kickapoo", } m["kid"] = { "Koshin", 35632, "nic-beb", "Latn", } m["kie"] = { "Kibet", 56893, } m["kif"] = { "tiếng Kham Parbate Đông", 12953022, "sit-kha", "Deva", "Tiếng Kham Parbate Đông", "Kham Parbate Đông", } m["kig"] = { "Kimaama", 11732321, "ngf", } m["kih"] = { "Kilmeri", 6408020, "paa-brd", } m["kii"] = { "Kitsai", 56627, "cdd", "Latn", } m["kij"] = { "Kilivila", 3196601, "poz-ocw", "Latn", } m["kil"] = { "Kariya", 3438708, "cdc-wst", } m["kim"] = { "tiếng Tofa", 36848, "trk-ssb", "Cyrl", "Tiếng Tofa", "Tofa", translit = {Cyrl = "kim-translit"}, } m["kio"] = { "tiếng Kiowa", 56631, "nai-kta", "Latn", "Tiếng Kiowa", "Kiowa", } m["kip"] = { "tiếng Kham Sheshi", 12952622, "sit-kha", "Deva", "Tiếng Kham Sheshi", "Kham Sheshi", } m["kiq"] = { "Kosadle", 6432994, } m["kis"] = { "Kis", 6416362, "poz-ocw", "Latn", } m["kit"] = { "Agob", 3332143, } m["kiv"] = { "Kimbu", 10997740, "bnt-tkm", } m["kiw"] = { "Northeast Kiwai", 11732324, "paa-kiw", } m["kix"] = { "tiếng Khiamniungan", 6401546, "sit-kch", "Latn", "Tiếng Khiamniungan", "Khiamniungan", } m["kiy"] = { "Kirikiri", 6415159, "paa-lkp", } m["kiz"] = { "Kisi", 3912772, "bnt-bki", } m["kja"] = { "Mlap", 6885683, "paa-nim", } m["kjb"] = { "Q'anjob'al", 35551, "myn", "Latn", } m["kjc"] = { "Coastal Konjo", 3198689, "poz", } m["kjd"] = { "Southern Kiwai", 11732322, "paa-kiw", } m["kje"] = { "Kisar", 3197441, "poz", } m["kjg"] = { "tiếng Khơ Mú", 33335, "mkh-khm", "Laoo", "Tiếng Khơ Mú", "Khơ Mú", sort_key = "Laoo-sortkey", } m["kjh"] = { "tiếng Khakas", 33575, "trk-ssb", "Cyrl", "Tiếng Khakas", "Khakas", translit = "kjh-translit", override_translit = true, } m["kji"] = { "Zabana", 379130, "poz-ocw", "Latn", } m["kjj"] = { "tiếng Khinalug", 35278, "cau-nec", "Cyrl, Latn", "Tiếng Khinalug", "Khinalug", translit = "kjj-translit", override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = { Cyrl = s["cau-Cyrl-entryname"], Latn = s["cau-Latn-entryname"], }, } m["kjk"] = { "Highland Konjo", 3198688, "poz", } m["kjl"] = { "tiếng Kham Parbate Tây", 22237017, "sit-kha", "Deva", "Tiếng Kham Parbate Tây", "Kham Parbate Tây", } m["kjm"] = { "tiếng Kháng", 6403501, "mkh-pal", nil, "Tiếng Kháng", "Kháng", } m["kjn"] = { "Kunjen", 3200468, "aus-pmn", "Latn", } m["kjo"] = { "tiếng Kinnaur Harija", 5657463, "him", "Deva, Takr", "Tiếng Kinnaur Harija", "Kinnaur Harija", } m["kjp"] = { "tiếng Pwo Đông", 5330390, "kar", "Mymr, Leke, Thai", "Tiếng Pwo Đông", "Pwo Đông", } m["kjq"] = { "Western Keres", 12645568, "nai-ker", "Latn", } m["kjr"] = { "Kurudu", 12952678, "poz-hce", "Latn", } m["kjs"] = { "East Kewa", 20050949, "paa-eng", } m["kjt"] = { "tiếng Pwo Phrae", 7187991, "kar", "Thai", "Tiếng Pwo Phrae", "Pwo Phrae", } m["kju"] = { "tiếng Kashaya", 3193689, "nai-pom", "Latn", "Tiếng Kashaya", "Kashaya", } m["kjx"] = { "Ramopa", 56830, "paa-nbo", } m["kjy"] = { "Erave", 12952416, "paa-eng", } m["kjz"] = { "Bumthangkha", 2786408, "sit-ebo", "Tibt", translit = "Tibt-translit", override_translit = true, display_text = s["Tibt-displaytext"], entry_name = s["Tibt-entryname"], sort_key = "Tibt-sortkey", } m["kka"] = { "Kakanda", 3915342, "alv-ngb", } m["kkb"] = { "Kwerisa", 56881, "paa-lkp", } m["kkc"] = { "Odoodee", 12952987, } m["kkd"] = { "Kinuku", 6414422, "nic-kau", } m["kke"] = { "Kakabe", 3913966, "dmn-mok", "Latn", } m["kkf"] = { "Kalaktang Monpa", 63257089, "sit-tsk", "Tibt, Latn, Deva", translit = {Tibt = "Tibt-translit"}, override_translit = true, display_text = {Tibt = s["Tibt-displaytext"]}, entry_name = {Tibt = s["Tibt-entryname"]}, sort_key = {Tibt = "Tibt-sortkey"}, } m["kkg"] = { "Mabaka Valley Kalinga", 18753304, "phi", } m["kkh"] = { "tiếng Khün", 3545044, "tai-swe", "Lana, Thai", "Tiếng Khün", "Khün", sort_key = { Lana = "Lana-sortkey", Thai = "Thai-sortkey" }, } m["kki"] = { "Kagulu", 12952537, "bnt-ruv", "Latn", } m["kkj"] = { "Kako", 35755, "bnt-kak", } m["kkk"] = { "Kokota", 3198399, "poz-ocw", "Latn", } m["kkl"] = { "Kosarek Yale", 6432995, "ngf", } m["kkm"] = { "Kiong", 6414512, "nic-ucr", "Latn", } m["kkn"] = { "Kon Keu", 6428686, "mkh-pal", } m["kko"] = { "Karko", 35529, "nub-hil", } m["kkp"] = { "Koko-Bera", 6426699, "aus-pmn", "Latn", } m["kkq"] = { "Kaiku", 6347840, "bnt-kbi", "Latn", } m["kkr"] = { "Kir-Balar", 3440527, "cdc-wst", "Latn", } m["kks"] = { "Kirfi", 56242, "cdc-wst", "Latn", } m["kkt"] = { "Koi", 6426194, "sit-kiw", } m["kku"] = { "Tumi", 3913934, "nic-kau", } m["kkv"] = { "tiếng Kangean", 2071325, "poz-msa", "Latn", "Tiếng Kangean", "Kangean" } m["kkw"] = { "Teke-Kukuya", 36560, "bnt-tek", } m["kkx"] = { "Kohin", 6425997, "poz-brw", } m["kky"] = { "tiếng Guugu Yimidhirr", 56543, "aus-pam", "Latn", "Tiếng Guugu Yimidhirr", "Guugu Yimidhirr", } m["kkz"] = { "Kaska", 20823, "ath-nor", "Latn", } m["kla"] = { "Klamath-Modoc", 2669248, "nai-plp", "Latn", } m["klb"] = { "Kiliwa", 3182593, "nai-yuc", "Latn", } m["klc"] = { "Kolbila", 6427122, "alv-lek", } m["kld"] = { "tiếng Gamilaraay", 3111818, "aus-cww", "Latn", "Tiếng Gamilaraay", "Gamilaraay", } m["kle"] = { "Kulung", 6443304, "sit-kic", } m["klf"] = { "Kendeje", 56895, } m["klg"] = { "Tagakaulu Kalagan", 18756514, "phi", } m["klh"] = { "Weliki", 7981017, "ngf-fin", "Latn", } m["kli"] = { "Kalumpang", 13561407, "poz", } m["klj"] = { "tiếng Khalaj", 33455, "trk", "fa-Arab, Latn", "Tiếng Khalaj", "Khalaj", ancestors = "klj-arg", entry_name = { remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun, } } m["klk"] = { "Kono (Nigeria)", 6429589, "nic-kau", "Latn", } m["kll"] = { "Kagan Kalagan", 18748913, "phi", } m["klm"] = { "Kolom", 6844970, "ngf-mad", "Latn", } m["kln"] = { "Kalenjin", 637228, "sdv-nma", "Latn", } m["klo"] = { "Kapya", 6367410, "nic-ykb", } m["klp"] = { "Kamasa", 6356107, "ngf", } m["klq"] = { "Rumu", 7379420, "ngf", } m["klr"] = { "tiếng Khaling", 56381, "sit-kiw", "Deva", "Tiếng Khaling", "Khaling", } m["kls"] = { "tiếng Kalash", 33416, "inc-chi", "Latn, ks-Arab", "Tiếng Kalash", "Kalash", } m["klt"] = { "Nukna", 7068874, "ngf-fin", "Latn", } m["klu"] = { "Klao", 3914866, "kro-wkr", } m["klv"] = { "tiếng Maskelynes", 3297282, "poz-vnc", "Latn", "Tiếng Maskelynes", "Maskelynes", } m["klw"] = { "tiếng Lindu", 18390055, "poz-kal", "Latn", "Tiếng Lindu", "Lindu" } m["klx"] = { "Koluwawa", 6427954, "poz-ocw", "Latn", } m["kly"] = { "tiếng Kalao", 6350643, "poz", "Latn", "Tiếng Kalao", "Kalao" } m["klz"] = { "Kabola", 11732258, "qfa-tap", } m["kma"] = { "Konni", 35680, "nic-buk", } m["kmb"] = { "tiếng Kimbundu", 35891, "bnt-kmb", "Latn", "Tiếng Kimbundu", "Kimbundu", } m["kmc"] = { "tiếng Nam Động", 35379, "qfa-kms", "Latn", "Tiếng Nam Động", "Nam Động", } m["kmd"] = { "Madukayang Kalinga", 18753305, "phi", } m["kme"] = { "Bakole", 35068, "bnt-kpw", } m["kmf"] = { "Kare (New Guinea)", 11732286, "ngf-mad", "Latn", } m["kmg"] = { "tiếng Kâte", 3201059, "ngf", nil, "Tiếng Kâte", "Kâte", } m["kmh"] = { "Kalam", 12952550, "ngf-mad", } m["kmi"] = { "Kami", 3915372, "alv-ngb", "Latn", } m["kmj"] = { "tiếng Paharia Kumarbhag", 3130374, "dra-mlo", "Beng, Deva", "Tiếng Paharia Kumarbhag", "Paharia Kumarbhag", } m["kmk"] = { "tiếng Kalinga Limos", 18753303, "phi", "Latn", "Tiếng Kalinga Limos", "Kalinga Limos", } m["kml"] = { "Tanudan Kalinga", 18753307, "phi", "Latn", } m["kmm"] = { "Kom (India)", 12952647, "tbq-kuk", } m["kmn"] = { "Awtuw", 3504217, "paa-spk", } m["kmo"] = { "Kwoma", 11732376, "paa-spk", } m["kmp"] = { "Gimme", 11152236, "alv-dur", } m["kmq"] = { "Kwama", 2591184, "ssa-kom", } m["kmr"] = { "tiếng Kurmanji", 36163, "ku", "Latn, Cyrl, Armn, ku-Arab, Yezi", "Tiếng Kurmanji", "Kurmanji", translit = { Cyrl = "kmr-translit", Armn = "Armn-translit", ["ku-Arab"] = "ckb-translit", }, entry_name = { remove_diacritics = "'’", from = {"r̄", "R̄", "ẍ", "Ẍ"}, to = {"rr", "Rr", "x", "X"} }, wikimedia_codes = "ku", } m["kms"] = { "Kamasau", 6356117, "qfa-tor", "Latn", } m["kmt"] = { "Kemtuik", 6387179, "paa-nim", } m["kmu"] = { "Kanite", 12952567, "paa-kag", } m["kmv"] = { "Karipúna Creole French", 2523999, "crp", "Latn", ancestors = "fr", sort_key = s["roa-oil-sortkey"], } m["kmw"] = { "Kumu", 6428450, "bnt-kbi", "Latn", } m["kmx"] = { "Waboda", 7958705, "paa-kiw", } m["kmy"] = { "Koma", 35634, "alv-dur", } m["kmz"] = { "tiếng Turk Khorasan", 35373, "trk-ogz", "Latn, Cyrl, fa-Arab", "Tiếng Turk Khorasan", "Turk Khorasan", ancestors = "trk-oat", } m["kna"] = { "Kanakuru", 56811, "cdc-wst", "Latn", } m["knb"] = { "Lubuagan Kalinga", 12953602, "phi", } m["knd"] = { "Konda", 11732340, "ngf-sbh", "Latn", } m["kne"] = { "tiếng Kankanaey", 18753329, "phi", "Latn", "Tiếng Kankanaey", "Kankanaey", } m["knf"] = { "tiếng Mankanya", 35789, "alv-pap", "Latn", "Tiếng Mankanya", "Mankanya", } m["kni"] = { "Kanufi", 3913297, "nic-nin", "Latn", } m["knj"] = { "Akatek", 34923, "myn", "Latn", } m["knk"] = { "Kuranko", 3198896, "dmn-mok", "Latn", } m["knl"] = { "Keninjal", 6389309, "poz-mly", } m["knm"] = { -- two unrelated lects have this name; this is the Katukinian one "Kanamari", 3438373, "sai-ktk", "Latn", } m["kno"] = { "Kono (Sierra Leone)", 35675, "dmn-vak", } m["knp"] = { "tiếng Kwanja", 35641, "nic-mmb", "Latn", "Tiếng Kwanja", "Kwanja", } m["knq"] = { "tiếng Kintaq", 6414335, "mkh-asl", "Latn", "Tiếng Kintaq", "Kintaq" } m["knr"] = { "Kaningra", 6363253, "paa-spk", } m["kns"] = { "tiếng Kensiu", 6391529, "mkh-asl", "Thai", "Tiếng Kensiu", "Kensiu", } m["knt"] = { "Katukina", 3194265, "sai-pan", "Latn", } m["knu"] = { -- a dialect of 'kpe' "Kono (Guinea)", 3198703, "dmn-msw", "Latn, Kpel", ancestors = "kpe", } m["knv"] = { "Tabo", 7959888, "aav", } m["knx"] = { "Kendayan", 6388963, "poz-mly", "Latn", } m["kny"] = { "Kanyok", 11110766, "bnt-lub", } m["knz"] = { "Kalamsé", 3914000, "nic-gnn", } m["koa"] = { "Konomala", 3198732, "poz-ocw", "Latn", } m["koc"] = { "Kpati", 3913279, "nic-nge", "Latn", } m["kod"] = { "Kodi", 4577633, } m["koe"] = { "Kacipo-Balesi", 5364424, "sdv", } m["kof"] = { "Kubi", 3438718, "cdc-wst", "Latn", } m["kog"] = { "Cogui", 3198286, "cba", } m["koh"] = { "Koyo", 35649, "bnt-mbo", "Latn", } m["koi"] = { "tiếng Komi-Permyak", 56318, "urj-prm", "Cyrl", "Tiếng Komi-Permyak", "Komi-Permyak", translit = "kv-translit", entry_name = {remove_diacritics = c.acute}, override_translit = true, } m["kok"] = { "tiếng Konkan", 34239, "inc-sou", "Deva, Knda, Mlym, fa-Arab, Latn", "Tiếng Konkan", "Konkan", translit = { Deva = "mr-translit", Knda = "kn-translit", Mlym = "ml-translit", }, entry_name = { from = {"च़", "ज़", "झ़", "ಚ಼", "ಜ಼", "ಝ಼"}, to = {"च", "ज", "झ", "ಚ", "ಜ", "ಝ"} } , } m["kol"] = { "Kol (New Guinea)", 4227542, } m["koo"] = { "Konzo", 2361829, "bnt-glb", } m["kop"] = { "Waube", 11732373, "ngf-mad", } m["koq"] = { "Kota (Gabon)", 35607, "bnt-kel", "Latn", } m["kos"] = { "tiếng Kosrae", 33464, "poz-mic", "Latn", "Tiếng Kosrae", "Kosrae", } m["kot"] = { "Lagwan", 3502264, "cdc-cbm", "Latn", } m["kou"] = { "Koke", 797249, "alv-bua", } m["kov"] = { "Kudu-Camo", 3915850, "nic-jer", } m["kow"] = { "Kugama", 3913307, "alv-mye", } m["koy"] = { "Koyukon", 28304, "ath-nor", "Latn", } m["koz"] = { "Korak", 6431365, "ngf-mad", } m["kpa"] = { "Kutto", 3437656, "cdc-wst", } m["kpb"] = { "tiếng Kurumba Mullu", 19573111, "dra-mal", "Mlym", "Tiếng Kurumba Mullu", "Kurumba Mullu", translit = "ml-translit", } m["kpc"] = { "Curripaco", 2882543, "awd-nwk", "Latn", } m["kpd"] = { "Koba", 6424249, "poz", } m["kpe"] = { "Kpelle", 35673, "dmn-msw", "Latn, Kpel", } m["kpf"] = { "Komba", 6428239, "ngf", } m["kpg"] = { "tiếng Kapingamarangi", 35771, "poz-pnp", "Latn", "Tiếng Kapingamarangi", "Kapingamarangi", } m["kph"] = { "Kplang", 35628, "alv-gng", } m["kpi"] = { "Kofei", 6425665, "paa-egb", "Latn", } m["kpj"] = { "tiếng Karajá", 10322066, "sai-mje", "Latn", "Tiếng Karajá", "Karajá", } m["kpk"] = { "Kpan", 3915380, "nic-jkn", "Latn", } m["kpl"] = { "Kpala", 11154769, "nic-nkk", "Latn", } m["kpm"] = { "tiếng K'Ho", 3511919, "mkh-ban", "Latn", "Tiếng K'Ho", "K'Ho", } m["kpn"] = { "Kepkiriwát", 3195366, "tup", "Latn", } m["kpo"] = { "tiếng Ikposo", 35029, "alv-ktg", "Latn", "Tiếng Ikposo", "Ikposo", } m["kpp"] = { "Paku Karen", nil, } m["kpq"] = { "Korupun-Sela", 6432769, "ngf", } m["kpr"] = { "Korafe-Yegha", 11732347, "ngf", } m["kps"] = { "Tehit", 7694851, } m["kpt"] = { "tiếng Karata", 56636, "cau-and", "Cyrl", "Tiếng Karata", "Karata", display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = {Cyrl = s["cau-Cyrl-entryname"]}, } m["kpu"] = { "Kafoa", 6346151, "qfa-tap", } m["kpv"] = { "tiếng Komi-Zyrian", 34114, "urj-prm", "Cyrl", "Tiếng Komi-Zyrian", "Komi-Zyrian", translit = "kv-translit", override_translit = true, wikimedia_codes = "kv", } m["kpw"] = { "tiếng Kobon", 11732326, "ngf-mad", "Latn", "Tiếng Kobon", "Kobon", } m["kpx"] = { "Mountain Koiari", 6925030, "ngf", } m["kpy"] = { "tiếng Koryak", 36199, "qfa-ckn", "Cyrl", "Tiếng Koryak", "Koryak", entry_name = { from = {"['’]"}, to = {"ʼ"} }, sort_key = { from = {"вʼ", "гʼ", "ё", "ӄ", "ӈ"}, to = {"в" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1]} }, translit = "kpy-translit", } m["kpz"] = { "Kupsabiny", 56445, "sdv-kln", } m["kqa"] = { "Mum", 6935252, "ngf-mad", } m["kqb"] = { "Kovai", 6434822, "ngf", } m["kqc"] = { "Doromu-Koki", 5298175, "ngf", } m["kqd"] = { "Koy Sanjaq Surat", 33463, "sem-nna", } m["kqe"] = { "Kalagan", 18748906, "phi", } m["kqf"] = { "tiếng Kakabai", 6349119, "poz-ocw", "Latn", "Tiếng Kakabai", "Kakabai", } m["kqg"] = { "Khe", 3914015, "nic-gur", } m["kqh"] = { "Kisankasa", 6416409, "sdv", } m["kqi"] = { "Koitabu", 6426363, "ngf", } m["kqj"] = { "Koromira", 6432520, "paa-sbo", } m["kqk"] = { "Kotafon Gbe", 12952447, "alv-pph", } m["kql"] = { "Kyenele", 11732453, "paa-yua", } m["kqm"] = { "Khisa", 3913955, "nic-gur", } m["kqn"] = { "Kaonde", 33601, "bnt-lub", "Latn", } m["kqo"] = { "Eastern Krahn", 3915374, "kro-wee", } m["kqp"] = { "Kimré", 3441210, "cdc-est", } m["kqq"] = { "Krenak", 6436747, "sai-cer", } m["kqr"] = { "Kimaragang", 3196845, "poz-san", "Latn", } m["kqs"] = { "Northern Kissi", 19921576, "alv-kis", } m["kqt"] = { "Klias River Kadazan", 12953594, "poz-san", } m["kqu"] = { "Seroa", 33127766, "khi-tuu", } m["kqv"] = { "Okolod", 7082487, "poz-san", } m["kqw"] = { "Kandas", 3192590, "poz-ocw", "Latn", } m["kqx"] = { "Mser", 3502347, "cdc-cbm", } m["kqy"] = { "tiếng Koore", 6430753, "omv-eom", "Ethi, Latn", "Tiếng Koore", "Koore", } m["kqz"] = { "Korana", 2756709, "khi-khk", "Latn", } m["kra"] = { "Kumhali", 13580783, "inc-eas", ancestors = "bh", } m["krb"] = { "Karkin", 3193345, "nai-you", "Latn", } m["krc"] = { "tiếng Karachay-Balkar", 33714, "trk-kcu", "Cyrl", "Tiếng Karachay-Balkar", "Karachay-Balkar", translit = "krc-translit", sort_key = { from = {"гъ", "дж", "ё", "къ", "нг"}, to = {"г" .. p[1], "д" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1]} }, } m["krd"] = { "Kairui-Midiki", 12953277, "poz-tim", } m["kre"] = { "Panará", 3361895, "sai-cer", } m["krf"] = { "Koro (Vanuatu)", 3198995, "poz-oce", "Latn", } m["krh"] = { "Kurama", 35593, "nic-kau", } m["kri"] = { "tiếng Krio", 35744, "crp", "Latn", "Tiếng Krio", "Krio", ancestors = "en", } m["krj"] = { "tiếng Kinaray-a", 33720, "phi", "Latn", "Tiếng Kinaray-a", "Kinaray-a", } m["krk"] = { "tiếng Kerek", 332792, "qfa-ckn", "Cyrl", "Tiếng Kerek", "Kerek", } m["krl"] = { "tiếng Karelia", 33557, "urj-fin", "Latn, Cyrl", "Tiếng Karelia", "Karelia", sort_key = { from = { "č", "š", "ž", "ü", "ä", "ö", -- 2 chars "z", "'" -- 1 char }, to = { "c" .. p[1], "s" .. p[1], "s" .. p[3], "y" .. p[1], "y" .. p[2], "y" .. p[3], "s" .. p[2], "y" .. p[4], } }, } m["krm"] = { "Krim", 35713, "alv", } m["krn"] = { "Sapo", 3915386, "kro-wee", } m["krp"] = { "Korop", 35626, "nic-ucr", "Latn", } m["krr"] = { "tiếng Krung", 12953650, "mkh-ban", "Khmr", "Tiếng Krung", "Krung" } m["krs"] = { "tiếng Kresh", 56674, "csu-bkr", "Latn", "Tiếng Kresh", "Kresh", } m["kru"] = { "tiếng Kurukh", 33492, "dra-kml", "Deva, Tols, Beng", "Tiếng Kurukh", "Kurukh", translit = { Deva = "hi-translit", }, } m["krv"] = { "tiếng Kavet", 12953649, "mkh-ban", "Khmr", "Tiếng Kavet", "Kavet" } m["krw"] = { "Western Krahn", 10975611, "kro-wee", } m["krx"] = { "Karon", 35704, "alv-jol", } m["kry"] = { "tiếng Kryts", 35861, "cau-ssm", "Latn, Cyrl", "Tiếng Kryts", "Kryts", display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = { Latn = s["cau-Latn-entryname"], Cyrl = s["cau-Cyrl-entryname"], }, } m["krz"] = { "Sota Kanum", 12952568, "paa-yam", } m["ksa"] = { "Shuwa-Zamani", 3913929, "nic-kau", } m["ksb"] = { "Shambala", 3788739, "bnt-seu", "Latn", } m["ksc"] = { "Southern Kalinga", 18753301, "phi", } m["ksd"] = { "Tolai", 35870, "poz-ocw", "Latn", } m["kse"] = { "Kuni", 6444619, "poz-ocw", "Latn", } m["ksf"] = { "Bafia", 34930, "bnt-baf", } m["ksg"] = { "Kusaghe", 3200638, "poz-ocw", "Latn", } m["ksi"] = { "Krisa", 841704, "paa-msk", "Latn", } m["ksj"] = { "Uare", 6450052, "ngf", } m["ksk"] = { "Kansa", 3192772, "sio-dhe", } m["ksl"] = { "Kumalu", 17584381, "poz-ocw", "Latn", } m["ksm"] = { "Kumba", 3913972, "alv-mye", } m["ksn"] = { "Kasiguranin", 6374525, "phi", } m["kso"] = { "Kofa", 56278, "cdc-cbm", } m["ksp"] = { "Kaba", 3915316, "csu-sar", } m["ksq"] = { "Kwaami", 3440525, "cdc-wst", } m["ksr"] = { "Borong", 4946263, "ngf", } m["kss"] = { "Southern Kissi", 11028974, "alv-kis", } m["kst"] = { "Winyé", 3913360, "nic-gnw", } m["ksu"] = { "tiếng Khamyang", 6583541, "tai-swe", "Mymr", "Tiếng Khamyang", "Khamyang", } m["ksv"] = { "Kusu", 6448199, "bnt-tet", } m["ksw"] = { "tiếng Karen S'gaw", 56410, "kar", "Mymr", "Tiếng Karen S'gaw", "Karen S'gaw", translit = "ksw-translit", } m["ksx"] = { "Kedang", 6382520, "poz", "Latn", } m["ksy"] = { "Kharia Thar", 6400661, "inc-eas", } m["ksz"] = { "Kodaku", 21179986, "mun", } m["kta"] = { "tiếng Ca Tua", 6378404, "mkh-nbn", "Latn", "Tiếng Ca Tua", "Ca Tua", } m["ktb"] = { "tiếng Kambaata", 35664, "cus-hec", "Ethi, Latn", "Tiếng Kambaata", "Kambaata", } m["ktc"] = { "Kholok", 3440464, "cdc-wst", } m["ktd"] = { "Kokata", 10547021, "aus-pam", } m["ktf"] = { "Kwami", 12952687, "bnt-lgb", } m["ktg"] = { "Kalkatungu", 3914057, "aus-pam", "Latn", } m["kth"] = { "Karanga", 713643, } m["kti"] = { "North Muyu", 20857698, "ngf", "Latn", } m["ktj"] = { "Plapo Krumen", 10975356, "kro-grb", } m["ktk"] = { "Kaniet", 3399050, "poz-aay", "Latn", } m["ktl"] = { "Koroshi", 3775265, "ira-nwi", ancestors = "bal", } m["ktm"] = { "Kurti", 3200615, "poz-aay", "Latn", } m["ktn"] = { "tiếng Karitiâna", 3112184, "tup", "Latn", "Tiếng Karitiâna", "Karitiâna", } m["kto"] = { "Kuot", 56537, } m["ktp"] = { "Kaduo", 769809, "tbq-bka", } m["ktq"] = { "Katabaga", 3193895, } m["ktr"] = { "Kota Marudu Tinagas", 18642280, } m["kts"] = { "South Muyu", 42308820, "ngf", "Latn", } m["ktt"] = { "Ketum", 12952616, "ngf", } m["ktu"] = { "tiếng Kituba", 35746, "crp", "Latn", "Tiếng Kituba", "Kituba", ancestors = "kg", } m["ktv"] = { "tiếng Cơ Tu", 22808951, "mkh-kat", "Latn", "Tiếng Cơ Tu", "Cơ Tu", } m["ktw"] = { "Kato", 20831, "ath-pco", "Latn", } m["ktx"] = { "Kaxararí", 6380124, "sai-pan", "Latn", } m["kty"] = { "Kango", 6362818, "bnt-bta", "Latn", } m["ktz"] = { "tiếng Juǀ'hoan", 1192295, "khi-kxa", "Latn", "Tiếng Juǀ'hoan", "Juǀ'hoan", } m["kub"] = { "tiếng Kutep", 35645, "nic-jkn", "Latn", "Tiếng Kutep", "Kutep", } m["kuc"] = { "Kwinsu", 6450460, "paa-tkw", } m["kud"] = { "tiếng Auhelawa", 5166, "poz-ocw", "Latn", "Tiếng Auhelawa", "Auhelawa", } m["kue"] = { "Kuman", 137525, "ngf", "Latn", } m["kuf"] = { "tiếng Cơ Tu Tây", 6378400, "mkh-kat", "Laoo, Tale", "Tiếng Cơ Tu Tây", "Cơ Tu Tây", } m["kug"] = { "Kupa", 3915336, "alv-ngb", } m["kuh"] = { "tiếng Kushi", 3438747, "cdc-wst", "Latn", "Tiếng Kushi", "Kushi", } m["kui"] = { "Kuikúro", 3915522, "sai-kui", "Latn", } m["kuj"] = { "Kuria", 6445968, "bnt-lok", "Latn", } m["kuk"] = { "Kepo'", 6393217, "poz", } m["kul"] = { "Kulere", 3440506, "cdc-wst", } m["kum"] = { "tiếng Kumyk", 36209, "trk-kcu", "Cyrl", "Tiếng Kumyk", "Kumyk", translit = "kum-translit", sort_key = { from = {"гъ", "гь", "ё", "къ", "нг", "оь", "уь"}, to = {"г" .. p[1], "г" .. p[2], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]} }, } m["kun"] = { "Kunama", 36041, } m["kuo"] = { "Kumukio", 11732362, "ngf", } m["kup"] = { "Kunimaipa", 6444696, } m["kuq"] = { "Karipuna", 6371071, "tup-gua", "Latn", } m["kus"] = { "Kusaal", 35708, "nic-dag", "Latn", } m["kut"] = { "tiếng Ktunaxa", 33434, "qfa-iso", "Latn", "Tiếng Ktunaxa", "Ktunaxa", } m["kuu"] = { "Upper Kuskokwim", 28062, "ath-nor", } m["kuv"] = { "Kur", 12635082, "poz-cma", "Latn", } m["kuw"] = { "Kpagua", 11137573, "bad-cnt", } m["kux"] = { "Kukatja", 10549839, "aus-pam", } m["kuy"] = { "Kuuku-Ya'u", 10550697, "aus-pmn", } m["kuz"] = { "Kunza", 2669181, "qfa-iso", } m["kva"] = { "tiếng Bagvalal", 56638, "cau-and", "Cyrl", "Tiếng Bagvalal", "Bagvalal", translit = "cau-nec-translit", override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = {Cyrl = s["cau-Cyrl-entryname"]}, } m["kvb"] = { "Kubu", 6441341, "poz-mly", } m["kvc"] = { "Kove", 3199402, "poz-ocw", "Latn", } m["kvd"] = { "Kui (Indonesia)", 6442230, "ngf", } m["kve"] = { "Kalabakan", 6350003, "poz-san", } m["kvf"] = { "Kabalai", 3440427, "cdc-est", } m["kvg"] = { "Kuni-Boazi", 2907551, "ngf", } m["kvh"] = { "tiếng Komodo", 3198565, "poz-cet", "Latn", "Tiếng Komodo", "Komodo", } m["kvi"] = { "Kwang", 3440398, "cdc-est", "Latn", } m["kvj"] = { "Psikye", 56304, "cdc-cbm", } m["kvk"] = { "Korean Sign Language", 3073428, "sgn-jsl", } m["kvl"] = { "Brek Karen", 12952577, "kar", } m["kvm"] = { "Kendem", 35751, "nic-mam", "Latn", } m["kvn"] = { "Border Kuna", 31777873, "cba", } m["kvo"] = { "Dobel", 5286559, "poz", } m["kvp"] = { "Kompane", 18343041, "poz", } m["kvq"] = { "tiếng Karen Geba", 12952581, "kar", "Mymr", "Tiếng Karen Geba", "Karen Geba", } m["kvr"] = { "Kerinci", 3195442, "poz-mly", } m["kvt"] = { "tiếng Lahta", 12952582, "kar", "Mymr", "Tiếng Lahta", "Lahta", } m["kvu"] = { "Yinbaw Karen", 14426328, "kar", } m["kvv"] = { "Kola", 6426967, "poz", } m["kvw"] = { "Wersing", 7983599, "qfa-tap", } m["kvx"] = { "tiếng Koli Parkar", 3244176, "inc-wes", "fa-Arab", "Tiếng Koli Parkar", "Koli Parkar", } m["kvy"] = { "Yintale Karen", 14426329, "kar", } m["kvz"] = { "Tsakwambo", 7849438, "ngf", } m["kwa"] = { "Dâw", 3042278, "sai-nad", } m["kwb"] = { "Baa", 34842, "alv-ada", } m["kwc"] = { "Likwala", 35597, "bnt-mbo", } m["kwd"] = { "Kwaio", 3200796, "poz-sls", "Latn", } m["kwe"] = { "Kwerba", 6450328, "paa-tkw", } m["kwf"] = { "Kwara'ae", 3200829, "poz-oce", } m["kwg"] = { "Sara Kaba Deme", 3915384, "csu-kab", } m["kwh"] = { "Kowiai", 6435028, "poz", } m["kwi"] = { "Awa-Cuaiquer", 2603103, "sai-bar", "Latn", } m["kwj"] = { "Kwanga", 3438383, "paa-spk", } m["kwk"] = { "tiếng Kwak'wala", 2640628, "wak", "Latn", "Tiếng Kwak'wala", "Kwak'wala", } m["kwl"] = { "Kofyar", 3441382, "cdc-wst", "Latn", } m["kwm"] = { "Kwambi", 3487165, "bnt-ova", } m["kwn"] = { "Kwangali", 36334, "bnt-kav", "Latn", } m["kwo"] = { "Kwomtari", 3508116, } m["kwp"] = { "Kodia", 3914867, "kro-ekr", } m["kwq"] = { "Kwak", 11014183, "nic-nka", ancestors = "yam", } m["kwr"] = { "Kwer", 12635137, "ngf-okk", } m["kws"] = { "Kwese", 3200846, "bnt-pen", } m["kwt"] = { "Kwesten", 6450354, "paa-tkw", } m["kwu"] = { "Kwakum", 35624, "bnt-kak", } m["kwv"] = { "Sara Kaba Náà", 3915361, "csu-kab", } m["kww"] = { "tiếng Kwinti", 721182, "crp", "Latn", "Tiếng Kwinti", "Kwinti", ancestors = "en" } m["kwx"] = { "Khirwar", 12976968, "dra", } m["kwz"] = { "Kwadi", 2364661, "khi-kkw", "Latn", } m["kxa"] = { "Kairiru", 3398785, "poz-ocw", "Latn", } m["kxb"] = { "Krobu", 35586, "alv-ptn", "Latn", } m["kxc"] = { "tiếng Konso", 56624, "cus-eas", "Ethi, Latn", "Tiếng Konso", "Konso", } m["kxd"] = { "tiếng Mã Lai Brunei", 3182878, "poz-mly", "Latn, ms-Arab", "Tiếng Mã Lai Brunei", "Mã Lai Brunei", } m["kxe"] = { "Kakihum", 3914433, "nic-kam", ancestors = "tvd", } m["kxf"] = { "tiếng Manumanaw", 12952592, "kar", "Mymr, Latn", "Tiếng Manumanaw", "Manumanaw", } m["kxh"] = { "tiếng Karo", 3447116, "omv-aro", "Ethi", "Tiếng Karo", "Karo", } m["kxi"] = { "Keningau Murut", 6389308, "poz-san", "Latn", } m["kxj"] = { "Kulfa", 713654, "csu-kab", } m["kxk"] = { "tiếng Karen Zayein", 14352960, "kar", "Mymr", "Tiếng Karen Zayein", "Karen Zayein", } m["kxl"] = { "Nepali Kurux", 3200624, "dra-kml", "Deva", ancestors = "kru", } m["kxm"] = { "tiếng Khmer Surin", 3502234, "mkh-kmr", "Thai, Khmr", "Tiếng Khmer Surin", "Khmer Surin", ancestors = "xhm", sort_key = { from = {"[%pๆ]", "[็-๎]", "([เแโใไ])([ก-ฮ])"}, to = {"", "", "%2%1"} }, } m["kxn"] = { "Kanowit", 6364300, "poz-bnn", "Latn", } m["kxo"] = { "Kanoé", 4356223, "qfa-iso", } m["kxp"] = { "tiếng Koli Wadiyara", 12953645, "inc-wes", "Gujr", "Tiếng Koli Wadiyara", "Koli Wadiyara", } m["kxq"] = { "Smärky Kanum", 12952569, "paa-yam", } m["kxr"] = { "Koro (New Guinea)", 3198994, "poz-oce", "Latn", } m["kxs"] = { "tiếng Khang Gia", 3182570, "xgn-shr", "Latn", "Tiếng Khang Gia", "Khang Gia", } m["kxt"] = { "Koiwat", 6426388, "paa-spk", } m["kxu"] = { "tiếng Kui (Ấn Độ)", 33919, "dra-kki", "Orya", "Tiếng Kui (Ấn Độ)", "Kui (Ấn Độ)", translit = "kxv-translit", strip_diacritics = { remove_diacritics = "୕", from = {"ଆଆ", "ଇଇ", "ଉଉ", "ଏଏ", "ଓଓ", "ିଇ", "ୁଉ", "େଏ", "ୋଓ"}, to = {"ଆ", "ଈ", "ଊ", "ଏ", "ଓ", "ୀ", "ୂ", "େ", "ୋ"}, }, } m["kxv"] = { "tiếng Kuvi", 3200721, "dra-kki", "Orya", "Tiếng Kuvi", "Kuvi", translit = "kxv-translit", entry_name = { remove_diacritics = "୕", from = {"ଆଆ", "ଇଇ", "ଉଉ", "ଏଏ", "ଓଓ", "([କ-ହ])ଆ", "ିଇ", "ୁଉ", "େଏ", "ୋଓ"}, to = {"ଆ", "ଈ", "ଊ", "ଏ", "ଓ", "%1ା", "ୀ", "ୂ", "େ", "ୋ"}, }, } m["kxw"] = { "Konai", 11732339, } m["kxx"] = { "Likuba", 35646, "bnt-bmo", } m["kxy"] = { "tiếng Ca Dong", 6380673, "mkh-nbn", "Latn", "Tiếng Ca Dong", "Ca Dong", } m["kxz"] = { "Kerewo", 6393847, "paa-kiw", } m["kya"] = { "Kwaya", 6450276, "bnt-haj", "Latn", } m["kyb"] = { "Butbut Kalinga", 18753300, "phi", } m["kyc"] = { "Kyaka", 12952690, "paa-eng", } m["kyd"] = { "Karey", 6370196, "poz", } m["kye"] = { "Krache", 35658, "alv-gng", } m["kyf"] = { "Kouya", 35595, "kro-bet", } m["kyg"] = { "Keyagana", 6398208, "paa-kag", } m["kyh"] = { "Karok", 1288440, "qfa-iso", "Latn", } m["kyi"] = { "Kiput", 3038653, "poz-swa", "Latn", } m["kyj"] = { "tiếng Karao", 3192950, "phi", "Latn", "Tiếng Karao", "Karao", } m["kyk"] = { "tiếng Kamayo", 3192339, "phi", "Latn", "Tiếng Kamayo", "Kamayo" } m["kyl"] = { "Kalapuya", 3192120, "nai-klp", } m["kym"] = { "Kpatili", 3913982, "znd", } m["kyn"] = { "Karolanos", 6373093, "phi", } m["kyo"] = { "Kelon", 6386414, "ngf", } m["kyp"] = { "Kang", 25559558, "tai", } m["kyq"] = { "Kenga", 35707, "csu-bgr", } m["kyr"] = { "Kuruáya", 3200633, "tup", "Latn", } m["kys"] = { "Baram Kayan", 2883794, "poz", } m["kyt"] = { "Kayagar", 6380394, "ngf", } m["kyu"] = { "tiếng Tây Kayah", 12952596, "kar", "Kali, Mymr, Latn", "Tiếng Tây Kayah", "Tây Kayah", translit = {Kali = "Kali-translit"}, } m["kyv"] = { "tiếng Kayort", 6380675, "inc-eas", "as-Beng", "Tiếng Kayort", "Kayort", } m["kyw"] = { "tiếng Kudmal", 6446173, "inc-eas", "Deva, as-Beng, Orya, Chis", "Tiếng Kudmal", "Kudmal", ancestors = "bh", } m["kyx"] = { "Rapoisi", 7294279, "paa-nbo", } m["kyy"] = { "Kambaira", 6356254, "paa-kag", } m["kyz"] = { "Kayabí", 6380372, "tup-gua", "Latn", } m["kza"] = { "Western Karaboro", 36601, "alv-krb", } m["kzb"] = { "Kaibobo", 6347565, "poz-cma", } m["kzc"] = { "Bondoukou Kulango", 11031321, "alv-kul", } m["kzd"] = { "Kadai", 7679471, "poz-cma", "Latn", } m["kze"] = { "Kosena", 12952663, "ngf", "Latn", } m["kzf"] = { "Da'a Kaili", 33103997, "poz-kal", "Latn", } m["kzg"] = { "tiếng Kikai", 3196527, "jpx-nry", "Jpan", "Tiếng Kikai", "Kikai", translit = s["Jpan-translit"], sort_key = s["Jpan-sortkey"], } m["kzh"] = { "tiếng Dongolawi", 5295991, "nub", "Latn", "Tiếng Dongolawi", "Dongolawi", } m["kzi"] = { "Kelabit", 6385445, "poz-swa", "Latn", } m["kzj"] = { "tiếng Kadazan bờ biển", 3307195, "poz-san", "Latn", "Tiếng Kadazan bờ biển", "Kadazan bờ biển", } m["kzk"] = { "Kazukuru", 1089069, "poz-ocw", } m["kzl"] = { "Kayeli", 4207444, "poz-cma", "Latn", } m["kzm"] = { "Kais", 6348319, "paa", "Latn", } m["kzn"] = { "Kokola", 11128329, "bnt-mak", "Latn", ancestors = "vmw", } m["kzo"] = { "Kaningi", 35683, "bnt-mbt", } m["kzp"] = { "Kaidipang", 6347611, "phi", } m["kzq"] = { "Kaike", 10951226, "sit-tam", } m["kzr"] = { "Karang", 35681, "alv-mbm", "Latn", } m["kzs"] = { "Sugut Dusun", 12953510, "poz-san", "Latn", } m["kzt"] = { "Tambunan Dusun", 12953514, "poz-san", "Latn", } m["kzu"] = { "Kayupulau", 6380723, "poz-ocw", } m["kzv"] = { "Komyandaret", 6428671, "ngf-okk", "Latn", } m["kzw"] = { -- contrast xoo, sai-kat, sai-xoc, the last of which the ISO conflated into this code "tiếng Kariri", 12953620, "sai-mje", "Latn", "Tiếng Kariri", "Kariri", } m["kzx"] = { "Kamarian", 6356040, "poz-cma", "Latn", } m["kzy"] = { "Kango-Sua", 11008360, "bnt-kbi", "Latn", ancestors = "bip", } m["kzz"] = { "Kalabra", 6350038, "paa", "Latn", } return require("Module:languages").finalizeData(m, "language") rskgq1t9ymsnwydk14b725nv2caoa74 Mô đun:languages/data/3/a 828 270567 2349878 2345264 2026-05-03T12:15:36Z Lcsnes 40261 2349878 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} m["aaa"] = { "tiếng Ghotuo", 35463, "alv-yek", "Latn", "Tiếng Ghotuo", "Ghotuo", } m["aab"] = { "tiếng Alumu-Tesu", 35034, "nic-alu", "Latn", "Tiếng Alumu-Tesu", "Alumu-Tesu", } m["aac"] = { "tiếng Ari", 1811224, "paa-pag", "Latn", "Tiếng Ari", "Ari", } m["aad"] = { "tiếng Amal", 56708, "paa-iwm", "Latn", "Tiếng Amal", "Amal", } -- "aae" IS TREATED AS "sq", SEE WT:LT m["aaf"] = { "tiếng Aranadan", 3507928, "dra-mal", "Mlym", "Tiếng Aranadan", "Aranadan", translit = {Mlym = "ml-translit"}, } m["aag"] = { "tiếng Ambrak", 4741706, "qfa-tor", "Latn", "Tiếng Ambrak", "Ambrak", } m["aah"] = { "Abu' Arapesh", 4670715, "qfa-tor", "Latn", } m["aai"] = { "Arifama-Miniafia", 4790560, "poz-ocw", "Latn", } m["aak"] = { "tiếng Ankave", 3446690, "ngf", "Latn", "Tiếng Ankave", "Ankave", } m["aal"] = { "tiếng Afade", 56434, "cdc-cbm", "Latn", "Tiếng Afade", "Afade", } m["aan"] = { "Anambé", 3507873, "tup-gua", "Latn", } m["aap"] = { "Pará Arára", 56807, "sai-pek", "Latn", } m["aaq"] = { "tiếng Đông Abenaki", 3515185, "alg-abp", "Latn", "Tiếng Đông Abenaki", "Đông Abenaki", } m["aas"] = { "tiếng Aasax", 56620, "cus-sou", "Latn", "Tiếng Aasax", "Aasax", } -- "aat" IS TREATED AS "sq", SEE WT:LT m["aau"] = { "tiếng Abau", 3073568, "paa-spk", "Latn", "Tiếng Abau", "Abau", } m["aaw"] = { "tiếng Solong", 7558834, "poz-ocw", "Latn", "Tiếng Solong", "Solong", } m["aax"] = { "Mandobo Atas", 12636156, "ngf", "Latn", } m["aaz"] = { "tiếng Amarasi", 4740192, "poz-tim", "Latn", "Tiếng Amarasi", "Amarasi", } m["aba"] = { "Abé", 34833, "alv-lag", "Latn", } m["abb"] = { "tiếng Bankon", 34860, "bnt-bsa", "Latn", "Tiếng Bankon", "Bankon", } m["abc"] = { "Ambala Ayta", 3448896, "phi", "Latn", } m["abd"] = { "Camarines Norte Agta", 3399682, "phi", "Latn", } m["abe"] = { "tiếng Tây Abenaki", 17502788, "alg-abp", "Latn", "Tiếng Tây Abenaki", "Tây Abenaki", } m["abf"] = { "Abai Sungai", 4663287, "poz-san", "Latn", } m["abg"] = { "tiếng Abaga", 3507954, "paa-kag", "Latn", "Tiếng Abaga", "Abaga", } m["abh"] = { "tiếng Ả Rập Tajikistan", 56833, "sem-arb", "Arab", "Tiếng Ả Rập Tajikistan", "Ả Rập Tajikistan", entry_name = "ar-entryname", } m["abi"] = { "tiếng Abidji", 34781, "alv-lag", "Latn", "Tiếng Abidji", "Abidji", } m["abj"] = { "Aka-Bea", 2356391, "qfa-ads", "Latn", } m["abl"] = { "Abung", 49215, "poz-lgx", "Latn", } m["abm"] = { "tiếng Abanyom", 7502, "nic-eko", "Latn", "Tiếng Abanyom", "Abanyom", } m["abn"] = { "Abua", 34835, "nic-cde", "Latn", } m["abo"] = { "tiếng Abon", 35121, "nic-tvn", "Latn", "Tiếng Abon", "Abon", } m["abp"] = { "Abenlen Ayta", 3436621, "phi", "Latn", } m["abq"] = { "tiếng Abaza", 27567, "cau-abz", "Cyrl, Latn", "Tiếng Abaza", "Abaza", translit = {Cyrl = "abq-translit"}, override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = { Cyrl = s["cau-Cyrl-entryname"], Latn = s["cau-Latn-entryname"], }, sort_key = { Cyrl = { from = { "гъв", "гъь", "гӏв", "джв", "джь", "къв", "къь", "кӏв", "кӏь", "хъв", "хӏв", "чӏв", -- 3 chars "гв", "гъ", "гь", "гӏ", "дж", "дз", "ё", "жв", "жь", "кв", "къ", "кь", "кӏ", "ль", "лӏ", "пӏ", "тл", "тш", "тӏ", "фӏ", "хв", "хъ", "хь", "хӏ", "цӏ", "чв", "чӏ", "шв", "шӏ" -- 2 chars }, to = { "г" .. p[3], "г" .. p[4], "г" .. p[7], "д" .. p[2], "д" .. p[3], "к" .. p[3], "к" .. p[4], "к" .. p[7], "к" .. p[8], "х" .. p[3], "х" .. p[6], "ч" .. p[3], "г" .. p[1], "г" .. p[2], "г" .. p[5], "г" .. p[6], "д" .. p[1], "д" .. p[4], "е" .. p[1], "ж" .. p[1], "ж" .. p[2], "к" .. p[1], "к" .. p[2], "к" .. p[5], "к" .. p[6], "л" .. p[1], "л" .. p[2], "п" .. p[1], "т" .. p[1], "т" .. p[2], "т" .. p[3], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[4], "х" .. p[5], "ц" .. p[1], "ч" .. p[1], "ч" .. p[2], "ш" .. p[1], "ш" .. p[2] } }, }, } m["abr"] = { "tiếng Abron", 34831, "alv-ctn", "Latn", "Tiếng Abron", "Abron", ancestors = "ak", } m["abs"] = { "tiếng Mã Lai Ambon", 3124354, "crp", "Latn", "Tiếng Mã Lai Ambon", "Mã Lai Ambon", ancestors = "ms", } m["abt"] = { "tiếng Ambulas", 3508015, "paa-spk", "Latn", "Tiếng Ambulas", "Ambulas", } m["abu"] = { "tiếng Abure", 34767, "alv-ptn", "Latn", "Tiếng Abure", "Abure", } m["abv"] = { "Baharna Arabic", 56576, "sem-arb", "Arab", entry_name = "ar-entryname", } m["abw"] = { "Pal", 7126121, "ngf-mad", "Latn", } m["abx"] = { "Inabaknon", 2820163, "poz-sbj", "Latn", } m["aby"] = { "Aneme Wake", 3508107, "ngf", "Latn", } m["abz"] = { "tiếng Abui", 2822110, "qfa-tap", "Latn", "Tiếng Abui", "Abui", } m["aca"] = { "tiếng Achawa", 2822982, "awd", "Latn", "Tiếng Achawa", "Achawa", } m["acb"] = { "Áncá", 11130787, "nic-mom", "Latn", } m["acd"] = { "Gikyode", 35256, "alv-gng", "Latn", } m["ace"] = { "tiếng Aceh", 27683, "cmc", "Latn, ms-Arab", "Tiếng Aceh", "Aceh", standardChars = { Latn = "AaBbCcDdEeÉéÈèËëFfGgHhIiJjKkLlMmNnOoÔôÖöPpQqRrSsTtUuVvWwXxYyZz", -- current orthography (not yet add Arab) c.punc }, } m["ach"] = { "tiếng Acholi", 34926, "sdv-los", "Latn", "Tiếng Acholi", "Acholi", } m["aci"] = { "Aka-Cari", 2670418, "qfa-adn", "Latn", } m["ack"] = { "Aka-Kora", 3433680, "qfa-adn", "Latn", } m["acl"] = { "Akar-Bale", 3436825, "qfa-ads", "Latn", } m["acm"] = { "tiếng Ả Rập Iraq", 56232, "sem-arb", "Arab", "Tiếng Ả Rập Iraq", "Ả Rập Iraq", entry_name = "ar-entryname", } m["acn"] = { "tiếng A Xương", 56582, "tbq-brm", "Latn", "Tiếng A Xương", "A Xương", } m["acp"] = { "tiếng Đông Acipa", 5329945, "nic-kmk", "Latn", "Tiếng Đông Acipa", "Đông Acipa", } m["acr"] = { "tiếng Achi", 34774, "myn", "Latn", "Tiếng Achi", "Achi", } m["acs"] = { "Acroá", 2829146, "sai-cje", "Latn", } m["acu"] = { "tiếng Achuar", 2823170, "sai-jiv", "Latn", "Tiếng Achuar", "Achuar", } m["acv"] = { "Achumawi", 56661, "nai-pal", "Latn", } m["acw"] = { "tiếng Ả Rập Hijazi", 56608, "sem-arb", "Arab", "Tiếng Ả Rập Hijazi", "Ả Rập Hijazi", entry_name = "ar-entryname", } m["acx"] = { "tiếng Ả Rập Oman", 56630, "sem-arb", "Arab", "Tiếng Ả Rập Oman", "Ả Rập Oman", entry_name = "ar-entryname", } m["acy"] = { "tiếng Ả Rập Síp", 56416, "sem-arb", "Latn, Grek", "Tiếng Ả Rập Síp", "Ả Rập Síp", ancestors = "acm", standardChars = { Latn = "AaBbCcDdΔδEeFfGgĠġĊċIiJjKkLlMmNnOoPpΘθRrSsTtUuVvWwXxYyZzŞş", c.punc }, entry_name = {remove_diacritics = c.grave .. c.acute .. c.breve}, } m["acz"] = { "tiếng Acheron", 34769, "alv-tal", "Latn", "Tiếng Acheron", "Acheron", } m["ada"] = { "tiếng Adangme", 35141, "alv-gda", "Latn", "Tiếng Adangme", "Adangme", } m["adb"] = { -- rename or remove, see RFM "Adabe", 36872, nil, "Latn", } m["add"] = { "Dzodinka", 35266, "nic-nka", "Latn", } m["ade"] = { "Adele", 27740, "alv-ntg", "Latn", } m["adf"] = { "Dhofari Arabic", 56565, "sem-arb", "Arab", entry_name = "ar-entryname", } m["adg"] = { "Andegerebinha", 3508123, "aus-pam", "Latn", } m["adh"] = { "Adhola", 1971400, "sdv-los", "Latn", } m["adi"] = { "tiếng Adi", 56440, "sit-tan", "Latn", "Tiếng Adi", "Adi", } m["adj"] = { "Adioukrou", 34738, "alv-lag", "Latn", } m["adl"] = { "tiếng Galo", 2857892, "sit-tan", "Latn", "Tiếng Galo", "Galo", } m["adn"] = { "Adang", 3398276, "qfa-tap", "Latn", } m["ado"] = { "Abu", 56659, "paa-ram", "Latn", } m["adp"] = { "Adap", 3512402, "sit-tib", "Tibt", ancestors = "dz", translit = "Tibt-translit", override_translit = true, display_text = s["Tibt-displaytext"], entry_name = s["Tibt-entryname"], sort_key = "Tibt-sortkey", wikipedia_article = "Dzongkha", -- Considered a dialect of Dzongkha } m["adq"] = { "Adangbe", 34730, "alv-gda", "Latn", ancestors = "ada", } m["adr"] = { "Adonara", 4684505, "poz-cet", "Latn", } m["ads"] = { "Adamorobe Sign Language", 27709, "sgn", "Latn", -- when documented } m["adt"] = { "tiếng Adnyamathanha", 2225391, "aus-psw", "Latn", "Tiếng Adnyamathanha", "Adnyamathanha", } m["adu"] = { "Aduge", 34734, "alv-nwd", "Latn", ancestors = "opa", wikipedia_article = "Okpamheri language", } m["adw"] = { "Amondawa", 12626847, "tup-gua", "Latn", } m["ady"] = { "tiếng Adygea", 27776, "cau-cir", "Cyrl, Latn, Arab", "Tiếng Adygea", "Adygea", translit = { Cyrl = "cau-cir-translit", Arab = "ar-translit", }, override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = { Cyrl = s["cau-Cyrl-entryname"], Latn = s["cau-Latn-entryname"], }, sort_key = { Cyrl = { from = { "кхъу", "къӏу", -- 4 chars "гъу", "джу", "дзу", "жъу", "къу", "кхъ", "къӏ", "кӏу", "кӏь", "лъу", "лӏу", "пӏу", "сӏу", "тӏу", "фӏу", "хъу", "цӏу", "чъу", "чӏу", "шъу", "шӏу", "щӏу", -- 3 chars "гу", "гъ", "гь", "дж", "дз", "ё", "жъ", "жь", "ку", "къ", "кь", "кӏ", "лъ", "ль", "лӏ", "пӏ", "сӏ", "тӏ", "фӏ", "ху", "хъ", "хь", "цу", "цӏ", "чу", "чъ", "чӏ", "шъ", "шӏ", "щӏ", "ӏу", "ӏь" -- 2 chars }, to = { "к" .. p[5], "к" .. p[7], "г" .. p[3], "д" .. p[2], "д" .. p[4], "ж" .. p[2], "к" .. p[3], "к" .. p[4], "к" .. p[6], "к" .. p[10], "к" .. p[11], "л" .. p[2], "л" .. p[5], "п" .. p[2], "с" .. p[2], "т" .. p[2], "ф" .. p[2], "х" .. p[3], "ц" .. p[3], "ч" .. p[3], "ч" .. p[5], "ш" .. p[2], "ш" .. p[4], "щ" .. p[2], "г" .. p[1], "г" .. p[2], "г" .. p[4], "д" .. p[1], "д" .. p[3], "е" .. p[1], "ж" .. p[1], "ж" .. p[3], "к" .. p[1], "к" .. p[2], "к" .. p[8], "к" .. p[9], "л" .. p[1], "л" .. p[3], "л" .. p[4], "п" .. p[1], "с" .. p[1], "т" .. p[1], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[4], "ц" .. p[1], "ц" .. p[2], "ч" .. p[1], "ч" .. p[2], "ч" .. p[4], "ш" .. p[1], "ш" .. p[3], "щ" .. p[1], "ӏ" .. p[1], "ӏ" .. p[2] } }, }, } m["adz"] = { "tiếng Adzera", nil, "poz-ocw", "Latn", "Tiếng Adzera", "Adzera", } m["aea"] = { "Areba", 3509129, "aus-pam", "Latn", } m["aeb"] = { "Tunisian Arabic", 56240, "sem-arb", "Arab", entry_name = "ar-entryname", } m["aed"] = { "Argentine Sign Language", 3322073, "sgn", "Latn", -- when documented } m["aee"] = { "Northeast Pashayi", 12642198, "inc-pas", "fa-Arab, Latn", } m["aek"] = { "Haeke", 5638166, "poz-cln", "Latn", } m["ael"] = { "Ambele", 34818, "nic-grf", "Latn", } m["aem"] = { "tiếng Arem", 3507920, "mkh-vie", "Latn", "Tiếng Arem", "Arem", } m["aen"] = { "Armenian Sign Language", 3446604, "sgn", } m["aeq"] = { "tiếng Aer", 3246741, "inc-wes", "Arab", "Tiếng Aer", "Aer", } m["aer"] = { "tiếng Arrernte Đông", 10728232, "aus-pam", "Latn", "Tiếng Arrernte Đông", "Arrernte Đông", } m["aes"] = { "tiếng Alsea", 2395641, nil, "Latn", "Tiếng Alsea", "Alsea", } m["aeu"] = { "Akeu", 4700657, "tbq-sil", "Latn", } m["aew"] = { "Ambakich", 56642, "paa-ram", "Latn", } m["aey"] = { "Amele", 3508025, "ngf-mad", "Latn", } m["aez"] = { "Aeka", 16110528, "ngf", "Latn", wikipedia_article = "Orokaiva language", -- subvariety? } m["afb"] = { "tiếng Ả Rập vùng Vịnh", 56385, "sem-arb", "Arab", "Tiếng Ả Rập vùng Vịnh", "Ả Rập vùng Vịnh", entry_name = "ar-entryname", } m["afd"] = { "Andai", 4753480, "paa-arf", "Latn", } m["afe"] = { "Putukwam", 3914930, "nic-ben", "Latn", } m["afg"] = { "Afghan Sign Language", 4689093, "sgn", } m["afh"] = { "Afrihili", 384707, "art", "Latn", type = "appendix-constructed", } m["afi"] = { "Akrukay", 57003, "paa-ram", "Latn", } m["afk"] = { "Nanubae", 6964416, "paa-arf", "Latn", } m["afn"] = { "Defaka", 35174, "nic", "Latn", } m["afo"] = { "Eloyi", 3914066, "nic-plt", "Latn", } m["afp"] = { "Tapei", 16887371, "paa-arf", "Latn", } m["afs"] = { "Afro-Seminole Creole", 27867, "crp", "Latn", ancestors = "en", } m["aft"] = { "Afitti", 3400829, "sdv-nyi", "Latn", } m["afu"] = { "Awutu", 34847, "alv-gng", "Latn", } m["afz"] = { "Obokuitai", 7075258, "paa-lkp", "Latn", } m["aga"] = { "Aguano", 3331203, nil, "Latn", } m["agb"] = { "Legbo", 35584, "nic-uce", "Latn", } m["agc"] = { "tiếng Agatu", 34732, "alv-ido", "Latn", "Tiếng Agatu", "Agatu", } m["agd"] = { "Agarabi", 3399642, "paa-kag", "Latn", } m["age"] = { "Angal", 10951553, "paa-eng", "Latn", } m["agf"] = { "Arguni", 12473346, "poz-cet", "Latn", } m["agg"] = { "Angor", 3508100, "paa", "Latn", } m["agh"] = { "Ngelima", 7022266, "bnt-bta", "Latn", } m["agi"] = { "Agariya", 663586, "mun", "Deva", } m["agj"] = { "tiếng Argobba", 29292, "sem-eth", "Ethi", "Tiếng Argobba", "Argobba", } m["agk"] = { "Isarog Agta", 6078982, "phi", "Latn", } m["agl"] = { "Fembe", 372927, "ngf", "Latn", } m["agm"] = { "Angaataha", 3508001, "ngf", "Latn", } m["agn"] = { "Agutaynen", 3399717, "phi-kal", "Latn", } m["ago"] = { "Tainae", 7676186, "ngf", "Latn", } m["agq"] = { "tiếng Aghem", 34737, "nic-rnw", "Latn", "Tiếng Aghem", "Aghem", } m["agr"] = { "Aguaruna", 1526530, "sai-jiv", "Latn", "Tiếng Aguaruna", "Aguaruna", } m["ags"] = { "tiếng Esimbi", 35260, "nic-bds", "Latn", "Tiếng Esimbi", "Esimbi", } m["agt"] = { "Central Cagayan Agta", 5017296, "phi", "Latn", } m["agu"] = { "tiếng Aguacateca", 35091, "myn", "Latn", "Tiếng Aguacateca", "Aguacateca", } m["agv"] = { "Remontado Agta", 3508085, "phi", "Latn", } m["agw"] = { "Kahua", 3191906, "poz-sls", "Latn", } m["agx"] = { "tiếng Aghul", 36498, "cau-esm", "Cyrl", "Tiếng Aghul", "Aghul", translit = "cau-nec-translit", override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = {Cyrl = s["cau-Cyrl-entryname"]}, sort_key = { from = {"аь", "гъ", "гь", "гӏ", "дж", "ё", "къ", "кь", "кӏ", "оь", "пӏ", "тӏ", "уь", "хъ", "хь", "хӏ", "цӏ", "чӏ"}, to = {"а" .. p[1], "г" .. p[1], "г" .. p[2], "г" .. p[3], "д" .. p[1], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "о" .. p[1], "п" .. p[1], "т" .. p[1], "у" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "ц" .. p[1], "ч" .. p[1]} }, } m["agy"] = { "Southern Alta", 7569611, "phi", "Latn", } m["agz"] = { "Mount Iriga Agta", 6921432, "phi", "Latn", } m["aha"] = { "Ahanta", 34729, "alv-ctn", "Latn", } m["ahb"] = { "Axamb", 2874710, "poz-vnc", "Latn", } m["ahg"] = { "tiếng Qimant", 35663, "cus-cen", "Latn", "Tiếng Qimant", "Qimant", } m["ahh"] = { "Aghu", 3436645, "ngf", "Latn", } m["ahi"] = { "Tiagbamrin Aizi", 3400073, "kro-aiz", "Latn", } m["ahk"] = { "tiếng Akha", 56643, "tbq-han", "Latn, Mymr, Thai", "Tiếng Akha", "Akha", sort_key = { Thai = { from = {"[%pๆ]", "[็-๎]", "([เแโใไ])([ก-ฮ])"}, to = {"", "", "%2%1"} }, }, } m["ahl"] = { "Igo", 35412, "alv-ktg", "Latn", } m["ahm"] = { "Mobumrin Aizi", 35967, "kro-aiz", "Latn", } m["ahn"] = { "Àhàn", 34723, "alv-aah", "Latn", } m["aho"] = { "tiếng Ahom", 34778, "tai-swe", "Ahom", "Tiếng Ahom", "Ahom", translit = "Ahom-translit", } m["ahp"] = { "Aproumu Aizi", 34810, "alv-kwa", "Latn", } m["ahr"] = { "Ahirani", 15549890, "inc-wes", "Deva", translit = "mr-translit", } m["ahs"] = { "Ashe", 34823, "nic-plc", "Latn", } m["aht"] = { "tiếng Ahtna", 21058, "ath-nor", "Latn", "Tiếng Ahtna", "Ahtna", } m["aia"] = { "Arosi", 2863483, "poz-sls", "Latn", } m["aib"] = { "tiếng Äynu", 27927, "qfa-mix", "Arab, Latn", "Tiếng Äynu", "Äynu", ancestors = "ug, fa" } m["aic"] = { "Ainbai", 3332149, "paa-brd", "Latn", } m["aid"] = { "Alngith", 3279409, "aus-pmn", "Latn", } m["aie"] = { "Amara", 2841180, "poz-ocw", "Latn", } m["aif"] = { "Agi", 3331491, "qfa-tor", "Latn", } m["aig"] = { "Antigua and Barbuda Creole English", 3244184, "crp", "Latn", ancestors = "en", } m["aih"] = { "Ai-Cham", 2827749, "qfa-kms", "Latn, Hani", sort_key = {Hani = "Hani-sortkey"}, } m["aii"] = { "tiếng Tân Aram Assyria", 29440, "sem-nna", "Syrc, Cyrl", "Tiếng Tân Aram Assyria", "Tân Aram Assyria", translit = {Syrc = "aii-translit"}, entry_name = "Syrc-entryname", } m["aij"] = { "tiếng Lishanid Noshan", 3436467, "sem-nna", "Hebr", "Tiếng Lishanid Noshan", "Lishanid Noshan", } m["aik"] = { "Ake", 34808, "nic-pls", "Latn", } m["ail"] = { "Aimele", 3327418, "ngf", "Latn", } m["aim"] = { "tiếng Aimol", 4697175, "tbq-kuk", "Latn, Beng", "Tiếng Aimol", "Aimol", } m["ain"] = { "tiếng Ainu", 27969, "qfa-ain", "Kana, Latn, Cyrl", "Tiếng Ainu", "Ainu", sort_key = {Kana = "Kana-sortkey"}, } m["aio"] = { "tiếng Aiton", 3399725, "tai-swe", "Mymr", "Tiếng Aiton", "Aiton", translit = "aio-phk-translit", entry_name = {remove_diacritics = c.VS01}, } m["aip"] = { "Burumakok", 5000984, "ngf-okk", "Latn", } m["air"] = { "Airoran", 3321131, "paa-tkw", "Latn", } m["ait"] = { "Arikem", 3446679, "tup", "Latn", } m["aiw"] = { "tiếng Aari", 7495, "omv-aro", "Latn, Ethi", "Tiếng Aari", "Aari", } m["aix"] = { "Aighon", 3504287, "poz-ocw", "Latn", } m["aiy"] = { "Ali", 34814, "alv-gbf", "Latn", } m["aja"] = { "Aja", 3237491, "csu-bkr", "Latn", } m["ajg"] = { "tiếng Adja", 35035, "alv-gbe", "Latn", "Tiếng Adja", "Adja", } m["aji"] = { "tiếng Ajië", 2828867, "poz-cln", "Latn", "Tiếng Ajië", "Ajië", } m["ajn"] = { "Andajin", 16111302, "aus-wor", "Latn", } m["ajp"] = { "tiếng Ả Rập Nam Levant", nil, "sem-arb", "Arab", "Tiếng Ả Rập Nam Levant", "Ả Rập Nam Levant", entry_name = "ar-entryname", } m["ajw"] = { "Ajawa", 56645, "cdc-wst", "Latn", } m["ajz"] = { "Amri Karbi", 3508092, "tbq-kuk", "Latn", ancestors = "mjw", } m["akb"] = { "Angkola Batak", 2640686, "btk", "Latn, Batk", } m["akc"] = { "Mpur", 3327139, "paa-wpa", "Latn", } m["akd"] = { "Ukpet-Ehom", 36618, "nic-ucr", "Latn", } m["ake"] = { "tiếng Akawaio", 28059, "sai-pem", "Latn", "Tiếng Akawaio", "Akawaio", } m["akf"] = { "Akpa", 34801, "alv-ido", "Latn", } m["akg"] = { "Anakalangu", 4750964, "poz-cet", "Latn", } m["akh"] = { "Angal Heneng", 10950354, "paa-eng", "Latn", } m["aki"] = { "Aiome", 56735, "paa", "Latn", } m["akj"] = { "tiếng Aka-Jeru", 2919121, "qfa-adn", "Latn, Deva", "Tiếng Aka-Jeru", "Aka-Jeru", } m["akk"] = { "tiếng Akkad", 35518, "sem-eas", "Xsux, Latn", "Tiếng Akkad", "Akkad", } m["akl"] = { "tiếng Aklanon", 8773, "phi", "Latn", "Tiếng Aklanon", "Aklanon", ancestors = "poz-pro,phi-pro", } m["akm"] = { "tiếng Aka-Bo", 35361, "qfa-adn", "Latn", "Tiếng Aka-Bo", "Aka-Bo", } m["ako"] = { "Akurio", 56650, "sai-tar", "Latn", } m["akp"] = { "tiếng Siwu", 36470, "alv-ntg", "Latn", "Tiếng Siwu", "Siwu", } m["akq"] = { "Ak", 56654, "paa", "Latn", } m["akr"] = { "tiếng Araki", 2699882, "poz-vnc", "Latn", "Tiếng Araki", "Araki", } m["aks"] = { "tiếng Akaselem", 34817, "nic-grm", "Latn", "Tiếng Akaselem", "Akaselem", } m["akt"] = { "Akolet", 3330162, "poz-ocw", "Latn", } m["aku"] = { "Akum", 34799, "nic-ykb", "Latn", } m["akv"] = { "tiếng Akhvakh", 56423, "cau-and", "Cyrl", "Tiếng Akhvakh", "Akhvakh", translit = "cau-nec-translit", override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = {Cyrl = s["cau-Cyrl-entryname"]}, } m["akw"] = { "Akwa", 34802, "bnt-mbo", "Latn", } m["akx"] = { "Aka-Kede", 3436816, "qfa-adc", "Latn", } m["aky"] = { "Aka-Kol", 3436784, "qfa-adc", "Latn", } m["akz"] = { "tiếng Alabama", 1815020, "nai-mus", "Latn", "Tiếng Alabama", "Alabama", } m["ala"] = { "Alago", 34813, "alv-ido", "Latn", } m["alc"] = { "tiếng Kawésqar", 56544, "aqa", "Latn", "Tiếng Kawésqar", "Kawésqar", } m["ald"] = { "Alladian", 34837, "alv-lag", "Latn", } m["ale"] = { "tiếng Aleut", 27210, "esx", "Latn, Cyrl", "Tiếng Aleut", "Aleut", } m["alf"] = { "Alege", 34815, "nic-ben", "Latn", } m["alh"] = { "tiếng Alawa", 2147917, "aus-gun", "Latn", "Tiếng Alawa", "Alawa", } m["ali"] = { "tiếng Amaimon", 3327427, "ngf-mad", "Latn", "Tiếng Amaimon", "Amaimon", } m["alj"] = { "tiếng Alangan", 3327423, "phi", "Latn", "Tiếng Alangan", "Alangan", } m["alk"] = { "tiếng Alak", 2714690, "mkh", "Latn", "Tiếng Alak", "Alak" } m["all"] = { "tiếng Allar", 3393634, "dra-mal", "Mlym", "Tiếng Allar", "Allar", translit = "ml-translit" } -- "aln" IS TREATED AS "sq", SEE WT:LT m["alm"] = { "Amblong", 11022615, "poz-vnc", "Latn", } m["alo"] = { "Larike-Wakasihu", 3217929, "poz-cma", "Latn", } m["alp"] = { "Alune", 3327367, "poz-cet", "Latn", } m["alq"] = { "tiếng Algonquin", 28092, "alg", "Latn", "Tiếng Algonquin", "Algonquin", ancestors = "oj", } m["alr"] = { "tiếng Alutor", 28213, "qfa-ckn", "Cyrl", "Tiếng Alutor", "Alutor", entry_name = { from = {"['’]"}, to = {"ʼ"} }, sort_key = { from = {"вʼ", "гʼ", "ғ", "ә", "ё", "ӄ", "ӈ"}, to = {"в" .. p[1], "г" .. p[1], "г" .. p[2], "е" .. p[1], "е" .. p[2], "к" .. p[1], "н" .. p[1]} }, } m["alt"] = { "tiếng Nam Altai", 1991779, "trk-kkp", "Cyrl", "Tiếng Nam Altai", "Nam Altai", translit = "Altai-translit", sort_key = { from = {"ј", "ё", "ҥ", "ӧ", "ӱ"}, to = {"д" .. p[1], "е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]} }, } m["alu"] = { "tiếng 'Are'are", 5160, "poz-sls", "Latn", "Tiếng 'Are'are", "'Are'are", } m["alw"] = { "tiếng Alaba-K’abeena", 56652, "cus-hec", "Latn, Ethi", "Tiếng Alaba-K’abeena", "Alaba-K’abeena", } m["alx"] = { "Amol", 3504260, "qfa-tor", "Latn", } m["aly"] = { "Alyawarr", 3327389, "aus-pam", "Latn", } m["alz"] = { "Alur", 56507, "sdv-los", "Latn", } m["ama"] = { "Amanayé", 3508053, "tup-gua", "Latn", } m["amb"] = { "Ambo", 3450142, "nic-tvn", "Latn", } m["amc"] = { "tiếng Amahuaca", 2669150, "sai-pan", "Latn", "Tiếng Amahuaca", "Amahuaca", } m["ame"] = { "Yanesha'", 3088540, "awd", "Latn", } m["amf"] = { "tiếng Hamer-Banna", 35764, "omv-aro", "Latn, Ethi", "Tiếng Hamer-Banna", "Hamer-Banna", } m["amg"] = { "tiếng Amurdag", 3360016, "aus-wdj", "Latn", "Tiếng Amurdag", "Amurdag", } m["ami"] = { "tiếng Amis", 35132, "map", "Latn", "Tiếng Amis", "Amis", } m["amj"] = { "tiếng Amdang", 28335, "ssa-fur", "Latn", "Tiếng Amdang", "Amdang", } m["amk"] = { "tiếng Ambai", 1875885, "poz-hce", "Latn", "Tiếng Ambai", "Ambai", } m["aml"] = { "tiếng War-Jaintia", 56321, "aav-khs", "Latn", "Tiếng War-Jaintia", "War-Jaintia", } m["amm"] = { "tiếng Ama", 3446626, "qfa-mal", "Latn", "Tiếng Ama", "Ama", } m["amn"] = { "tiếng Amanab", 3327399, "paa-brd", "Latn", "Tiếng Amanab", "Amanab", } m["amo"] = { "Amo", 34826, "nic-kne", "Latn", } m["amp"] = { "tiếng Alamblak", 56688, "paa", "Latn", "Tiếng Alamblak", "Alamblak", } m["amq"] = { "Amahai", 3327384, "poz-cma", "Latn", } m["amr"] = { "Amarakaeri", 35128, "sai-har", "Latn", } m["ams"] = { "tiếng Nam Amami Ōshima", 2840986, "jpx-nry", "Jpan", "Tiếng Nam Amami Ōshima", "Nam Amami Ōshima", translit = s["jpx-translit"], display_text = s["jpx-displaytext"], entry_name = s["jpx-entryname"], sort_key = s["jpx-sortkey"], } m["amt"] = { "Amto", 56517, "paa-asa", "Latn", } m["amu"] = { "tiếng Amuzgo", 3501942, "omq", "Latn", "Tiếng Amuzgo", "Amuzgo", } m["amv"] = { "Ambelau", 2669214, "poz-cma", "Latn", } m["amw"] = { "tiếng Tân Aram Tây", 34226, "sem-arw", "Armi, Syrc, Latn", "Tiếng Tân Aram Tây", "Tân Aram Tây", entry_name = {Syrc = "Syrc-entryname"}, } m["amx"] = { "Anmatyerre", 10412317, "aus-pam", "Latn", } m["amy"] = { "Ami", 12626835, "aus-dal", "Latn", } m["amz"] = { "Atampaya", 3446651, "aus-pam", "Latn", } m["ana"] = { "Andaqui", 2846078, nil, "Latn", } m["anb"] = { "Andoa", 2846171, "sai-zap", "Latn", } m["anc"] = { "tiếng Ngas", 35999, "cdc-wst", "Latn", "Tiếng Ngas", "Ngas", } m["and"] = { "Ansus", 3513300, "poz-hce", "Latn", } m["ane"] = { "tiếng Xârâcùù", 3571097, "poz-cln", "Latn", "Tiếng Xârâcùù", "Xârâcùù", } m["anf"] = { "Animere", 34783, "alv-ktg", "Latn", } m["ang"] = { "tiếng Anh cổ", 42365, "gmw-ang", "Latn, Runr", "Tiếng Anh cổ", "Anh cổ", translit = {Runr = "Runr-translit"}, entry_name = { Latn = { remove_diacritics = c.acute .. c.macron .. c.dotabove, from = {"Ƿ", "ƿ"}, to = {"W", "w"} }, }, sort_key = { Latn = { from = {"æ", "ð", "þ", "ƿ"}, to = {"ae", "t" .. p[1], "t" .. p[2], "w" .. p[1]} }, }, } m["anh"] = { "Nend", 6991554, "ngf-mad", "Latn", } m["ani"] = { "tiếng Andi", 34849, "cau-and", "Cyrl", "Tiếng Andi", "Andi", translit = "cau-nec-translit", override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = {Cyrl = s["cau-Cyrl-entryname"]}, } m["anj"] = { "Anor", 56458, "paa", "Latn", } m["ank"] = { "Goemai", 35272, "cdc-wst", "Latn", } m["anl"] = { "Anu", 4777679, "sit-mru", "Latn", } m["anm"] = { "tiếng Anal", 56235, "tbq-kuk", "Latn", "Tiếng Anal", "Anal", } m["ann"] = { "Obolo", 36614, "nic-lcr", "Latn", } m["ano"] = { "Andoque", 2669225, "qfa-iso", "Latn", } m["anp"] = { "tiếng Angika", 28378, "inc-eas", "Deva", "Tiếng Angika", "Angika", ancestors = "bh", } m["anq"] = { "tiếng Jarawa", 2475526, "qfa-ong", "Latn, Deva", "Tiếng Jarawa", "Jarawa", } m["anr"] = { "Andh", 4754314, "inc-sou", "Deva", } m["ans"] = { "Anserma", 3446613, "sai-chc", "Latn", } m["ant"] = { "Antakarinya", 921304, "aus-psw", "Latn", } m["anu"] = { "tiếng Anuak", 56677, "sdv-lon", "Latn, Ethi", "Tiếng Anuak", "Anuak", } m["anv"] = { "Denya", 35187, "nic-mam", "Latn", } m["anw"] = { "tiếng Anaang", 2845320, "nic-ief", "Latn", "Tiếng Anaang", "Anaang", } m["anx"] = { "Andra-Hus", 2846195, "poz-aay", "Latn", } m["any"] = { "tiếng Anyi", 28395, "alv-ctn", "Latn", "Tiếng Anyi", "Anyi", } m["anz"] = { "Anem", 56512, "paa", "Latn", } m["aoa"] = { "tiếng Angola", 34994, "crp", "Latn", "Tiếng Angola", "Angola", ancestors = "pt", } m["aob"] = { "Abom", 3446647, "ngf", "Latn", } m["aoc"] = { "tiếng Pemon", 10729616, "sai-pem", "Latn", "Tiếng Pemon", "Pemon", } m["aod"] = { "Andarum", 3507888, "paa", "Latn", } m["aoe"] = { "Angal Enen", 10951638, "paa-eng", "Latn", } m["aof"] = { "Bragat", 3507977, "qfa-tor", "Latn", } m["aog"] = { "Angoram", 56366, -- cf 6754745 for merged dialect "paa-lsp", "Latn", } m["aoi"] = { "Anindilyakwa", 2714654, "aus-arn", "Latn", } m["aoj"] = { "Mufian", 3507881, "qfa-tor", "Latn", } m["aok"] = { "Arhö", 4790086, "poz-cln", "Latn", } m["aol"] = { "Alor", 3332062, "poz", "Latn", } m["aom"] = { "Ömie", 8078975, "ngf", "Latn", } m["aon"] = { "Bumbita Arapesh", 3508044, "qfa-tor", "Latn", } m["aor"] = { "Aore", 12627129, "poz-vnc", "Latn", } m["aos"] = { "Taikat", 7676018, "paa-brd", "Latn", } m["aot"] = { "tiếng Atong (Ấn Độ)", 5646, "tbq-bdg", "Latn, Beng", "Tiếng Atong (Ấn Độ)", "Atong (Ấn Độ)", } m["aou"] = { "tiếng A'ou", 16109994, "qfa-gel", "Latn", -- also Hani? "Tiếng A'ou", "A'ou", } m["aox"] = { "Atorada", 3507932, "awd", "Latn", } m["aoz"] = { "Uab Meto", 3441962, "poz-tim", "Latn", } m["apb"] = { "Sa'a", 36294, "poz-sls", "Latn", } m["apc"] = { "tiếng Ả Rập Bắc Levant", 22809485, "sem-arb", "Arab", "Tiếng Ả Rập Bắc Levant", "Ả Rập Bắc Levant", entry_name = "ar-entryname", } m["apd"] = { "tiếng Ả Rập Sudan", 56573, "sem-arb", "Arab", "Tiếng Ả Rập Sudan", "Ả Rập Sudan", entry_name = "ar-entryname", } m["ape"] = { "Bukiyip", 3507895, "qfa-tor", "Latn", } m["apf"] = { "Pahanan Agta", 7135432, "phi", "Latn", } m["apg"] = { "Ampanang", 4748035, "poz", "Latn", } m["aph"] = { "tiếng Athpariya", 3449126, "sit-kie", "Deva, Latn", "Tiếng Athpariya", "Athpariya", } m["api"] = { "Apiaká", 3507941, "tup-gua", "Latn", } m["apj"] = { "tiếng Jicarilla", 28277, "apa", "Latn", "Tiếng Jicarilla", "Jicarilla", } m["apk"] = { "tiếng Apache đồng bằng", 27861, "apa", "Latn", "Tiếng Apache đồng bằng", "Apache đồng bằng" } m["apl"] = { "tiếng Lipan", 28269, "apa", "Latn", "Tiếng Lipan", "Lipan", } m["apm"] = { "tiếng Chiricahua", 13368, "apa", "Latn", "Tiếng Chiricahua", "Chiricahua", } m["apn"] = { "tiếng Apinayé", 2858311, "sai-nje", "Latn", "Tiếng Apinayé", "Apinayé", } m["apo"] = { "Ambul", 12627135, "poz-ocw", "Latn", } m["app"] = { "Apma", 2669188, "poz-vnc", "Latn", } m["apq"] = { "tiếng Pucikwar", 28466, "qfa-adc", "Latn", "Tiếng Pucikwar", "Pucikwar", } m["apr"] = { "Arop-Lokep", 2863482, "poz-ocw", "Latn", } m["aps"] = { "Arop-Sissano", 12627242, "poz-ocw", "Latn", } m["apt"] = { "tiếng Apatani", 56306, "sit-tan", "Latn", "Tiếng Apatani", "Apatani", } m["apu"] = { "Apurinã", 2859081, "awd", "Latn", } m["apv"] = { "Alapmunte", 16110782, "sai-nmk", "Latn", } m["apw"] = { "tiếng Apache Tây", 28060, "apa", "Latn", "Tiếng Apache Tây", "Apache Tây", } m["apx"] = { "tiếng Aputai", 12473343, "poz-tim", "Latn", "Tiếng Aputai", "Aputai", } m["apy"] = { "tiếng Aparaí", 2736980, "sai-gui", "Latn", "Tiếng Aparaí", "Aparaí", } m["apz"] = { "Safeyoka", 7398693, "ngf", "Latn", } m["aqc"] = { "tiếng Archi", 34915, "cau-lzg", "Cyrl", "Tiếng Archi", "Archi", translit = "cau-nec-translit", override_translit = true, display_text = {Cyrl = s["cau-Cyrl-displaytext"]}, entry_name = {Cyrl = s["cau-Cyrl-entryname"]}, sort_key = { from = { "ккъӏв", "ххьӏв", -- 5 chars "гъӏв", "ёоӏ", "ккъӏ", "ккъв", "къӏв", "ллъв", "ххьӏ", "хъӏв", "хьӏв", "ццӏв", "ччӏв", -- 4 chars "ааӏ", "гӏв", "гъӏ", "гъв", "гьв", "ееӏ", "ёӏ", "ёо", "ииӏ", "кӏв", "ккв", "ккъ", "къӏ", "къв", "кьв", "лӏв", "ллъ", "лъв", "льв", "ооӏ", "пӏв", "ппв", "ссв", "тӏв", "ттв", "ууӏ", "хӏв", "ххв", "хъӏ", "хъв", "хьӏ", "цӏв", "ццӏ", "ццв", "чӏв", "ччӏ", "ээӏ", "юуӏ", "яаӏ", -- 3 chars "аӏ", "аа", "гӏ", "гв", "гъ", "гь", "дв", "еӏ", "ее", "ё", "жв", "зв", "иӏ", "ии", "кӏ", "кв", "кк", "къ", "кь", "лӏ", "лв", "лъ", "ль", "оӏ", "оо", "пӏ", "пв", "пп", "св", "сс", "тӏ", "тв", "тт", "уӏ", "уу", "фв", "хӏ", "хв", "хх", "хъ", "цӏ", "цв", "цц", "чӏ", "чв", "шв", "щв", "эӏ", "ээ", "юӏ", "юу", "яӏ", "яа" -- 2 chars }, to = { "к" .. p[8], "х" .. p[7], "г" .. p[6], "е" .. p[7], "к" .. p[7], "к" .. p[9], "к" .. p[12], "л" .. p[5], "х" .. p[6], "х" .. p[10], "х" .. p[13], "ц" .. p[6], "ч" .. p[5], "а" .. p[3], "г" .. p[2], "г" .. p[5], "г" .. p[7], "г" .. p[9], "е" .. p[3], "е" .. p[5], "е" .. p[6], "и" .. p[3], "к" .. p[2], "к" .. p[5], "к" .. p[6], "к" .. p[11], "к" .. p[13], "к" .. p[15], "л" .. p[2], "л" .. p[4], "л" .. p[7], "л" .. p[9], "о" .. p[3], "п" .. p[2], "п" .. p[5], "с" .. p[3], "т" .. p[2], "т" .. p[5], "у" .. p[3], "х" .. p[2], "х" .. p[5], "х" .. p[9], "х" .. p[11], "х" .. p[12], "ц" .. p[2], "ц" .. p[5], "ц" .. p[7], "ч" .. p[2], "ч" .. p[4], "э" .. p[3], "ю" .. p[3], "я" .. p[3], "а" .. p[1], "а" .. p[2], "г" .. p[1], "г" .. p[3], "г" .. p[4], "г" .. p[8], "д" .. p[1], "е" .. p[1], "е" .. p[2], "е" .. p[4], "ж" .. p[1], "з" .. p[1], "и" .. p[1], "и" .. p[2], "к" .. p[1], "к" .. p[3], "к" .. p[4], "к" .. p[10], "к" .. p[14], "л" .. p[1], "л" .. p[3], "л" .. p[6], "л" .. p[8], "о" .. p[1], "о" .. p[2], "п" .. p[1], "п" .. p[3], "п" .. p[4], "с" .. p[1], "с" .. p[2], "т" .. p[1], "т" .. p[3], "т" .. p[4], "у" .. p[1], "у" .. p[2], "ф" .. p[1], "х" .. p[1], "х" .. p[3], "х" .. p[4], "х" .. p[8], "ц" .. p[1], "ц" .. p[3], "ц" .. p[4], "ч" .. p[1], "ч" .. p[3], "ш" .. p[1], "щ" .. p[1], "э" .. p[1], "э" .. p[2], "ю" .. p[1], "ю" .. p[2], "я" .. p[1], "я" .. p[2] } }, } m["aqd"] = { "Ampari Dogon", 4748057, "nic-dgw", "Latn", } m["aqg"] = { "Arigidi", 34829, "alv-von", "Latn", } m["aqm"] = { "Atohwaim", 11732297, "ngf", "Latn", } m["aqn"] = { "Northern Alta", 7058116, "phi", "Latn", } m["aqp"] = { "Atakapa", 10975683, "qfa-iso", "Latn", } m["aqr"] = { "Arhâ", 4790085, "poz-cln", "Latn", } m["aqt"] = { "Angaité", 15736037, "sai-mas", "Latn", } m["aqz"] = { "tiếng Akuntsu", 4701960, "tup", "Latn", "Tiếng Akuntsu", "Akuntsu", } m["arc"] = { "tiếng Aram", 28602, "sem-ara", "Hebr, Armi, Syrc, Palm, Nbat, Phnx, Mand, Samr, Hatr, Elym", "Tiếng Aram", "Aram", translit = { Armi = "Armi-translit", Palm = "Palm-translit", }, entry_name = { Hebr = {remove_diacritics = u(0x0591) .. "-" .. u(0x05BD) .. u(0x05BF) .. "-" .. u(0x05C5) .. u(0x05C7)}, Syrc = {remove_diacritics = u(0x0730) .. "-" .. u(0x0748)}, remove_diacritics = c.macron .. c.diaer .. c.macronbelow}, -- Which script(s)? } m["ard"] = { "Arabana", 3507959, "aus-kar", "Latn", } m["are"] = { "Western Arrernte", 12645549, "aus-pam", "Latn", } m["arh"] = { "tiếng Arhuaco", 2640621, "cba", "Latn", "Tiếng Arhuaco", "Arhuaco", } m["ari"] = { "Arikara", 56539, "cdd", "Latn", } m["arj"] = { "Arapaso", 12627166, "sai-tuc", "Latn", } m["ark"] = { "Arikapú", 3446640, "sai-mje", "Latn", } m["arl"] = { "Arabela", 2591221, "sai-zap", "Latn", } m["arn"] = { "tiếng Mapuche", 33730, "sai-ara", "Latn", "Tiếng Mapuche", "Mapuche", } m["aro"] = { "Araona", 958414, "sai-tac", "Latn", } m["arp"] = { "tiếng Arapaho", 56417, "alg-ara", "Latn", "Tiếng Arapaho", "Arapaho", } m["arq"] = { "tiếng Ả Rập Algérie", 56499, "sem-arb", "Arab", "Tiếng Ả Rập Algérie", "Ả Rập Algérie", entry_name = "ar-entryname", } m["arr"] = { "Arara-Karo", 35539, "tup", "Latn", } m["ars"] = { "Najdi Arabic", 56574, "sem-arb", "Arab", entry_name = "ar-entryname", } m["aru"] = { "Arua", 2746221, "auf", "Latn", } m["arv"] = { "Arbore", 56883, "cus-eas", "Latn", } m["arw"] = { "tiếng Lokono", 2655664, "awd-taa", "Latn", "Tiếng Lokono", "Lokono", } m["arx"] = { "Aruá", 3507907, "tup", "Latn", } m["ary"] = { "tiếng Ả Rập Maroc", 56426, "sem-arb", "Arab", "Tiếng Ả Rập Maroc", "Ả Rập Maroc", entry_name = "ar-entryname", sort_key = { from = {"^%f[" .. u(0x5D0) .. "-" .. u(0x5EA) .. "]"}, to = {u(0xFB21)}, }, } m["arz"] = { "tiếng Ả Rập Ai Cập", 29919, "sem-arb", "Arab", "Tiếng Ả Rập Ai Cập", "Ả Rập Ai Cập", entry_name = "ar-entryname", } m["asa"] = { "Pare", 36403, "bnt-par", "Latn", } m["asb"] = { "tiếng Assiniboine", 2591288, "sio-dkt", "Latn", "Tiếng Assiniboine", "Assiniboine", } m["asc"] = { "Casuarina Coast Asmat", 11732046, "ngf", "Latn", } m["ase"] = { "ngôn ngữ ký hiệu Mỹ", 14759, "sgn", "Sgnw", "Ngôn ngữ ký hiệu Mỹ", "ngôn ngữ ký hiệu Mỹ", } m["asf"] = { "Auslan", 29525, "sgn", "Latn", -- when documented } m["asg"] = { "Cishingini", 35199, "nic-kam", "Latn", } m["ash"] = { "Abishira", 2871740, "qfa-iso", "Latn", } m["asi"] = { "Buruwai", 5001031, "ngf", "Latn", } m["asj"] = { "Nsari", 36418, "nic-bbe", "Latn", } m["ask"] = { "tiếng Ashkun", 29379, "nur-sou", "Arab, Latn", "Tiếng Ashkun", "Ashkun", } m["asl"] = { "Asilulu", 12473347, "poz-cma", "Latn", } m["asn"] = { "Xingú Asuriní", 8044571, "tup-gua", "Latn", } m["aso"] = { "Dano", 5220979, "paa-kag", "Latn", } m["asp"] = { "Algerian Sign Language", 3135421, "sgn", } m["asq"] = { "Austrian Sign Language", 36668, "sgn", "Latn", -- when documented } m["asr"] = { "tiếng Asur", 3504321, "mun", "Deva, Latn", "Tiếng Asur", "Asur" } m["ass"] = { "Ipulo", 35408, "nic-tvc", "Latn", } m["ast"] = { "tiếng Asturias", 29507, "roa-ibe", "Latn", "Tiếng Asturias", "Asturias", ancestors = "roa-ole", } m["asu"] = { "Tocantins Asurini", 32041490, "tup-gua", "Latn", } m["asv"] = { "Asoa", 56296, "csu-maa", "Latn", } m["asw"] = { "Australian Aboriginal Sign Language", 955216, "sgn", "Latn", -- when documented } m["asx"] = { "Muratayak", 11732766, "ngf-fin", "Latn", } m["asy"] = { "Yaosakor Asmat", 16113158, "ngf", "Latn", } m["asz"] = { "As", 2866218, "poz-hce", "Latn", } m["ata"] = { "Pele-Ata", 56511, "paa", "Latn", } m["atb"] = { "tiếng Zaiwa", 56594, "tbq-brm", "Latn, Lisu", -- also Hani? "Tiếng Zaiwa", "Zaiwa", translit = {Lisu = "Lisu-translit"}, sort_key = {Lisu = s["Lisu-sortkey"]}, } m["atc"] = { "tiếng Atsahuaca", 4817730, "sai-pan", "Latn", "Tiếng Atsahuaca", "Atsahuaca", } m["atd"] = { "Ata Manobo", 12627315, "mno", "Latn", } m["ate"] = { "tiếng Atemble", 4813055, "ngf-mad", "Latn", "Tiếng Atemble", "Atemble", } m["atg"] = { "Okpela", 7082551, "alv-yek", "Latn", } m["ati"] = { "Attié", 34844, "alv-lag", "Latn", } m["atj"] = { "tiếng Atikamekw", 56590, "alg", "Latn", ancestors = "cr", "Tiếng Atikamekw", "Atikamekw", } m["atk"] = { "Ati", 4815751, "phi", "Latn", } m["atl"] = { "Mount Iraya Agta", 6921430, "phi", "Latn", } m["atm"] = { "Ata", 4812603, "phi", "Latn", } m["ato"] = { "Atong (Cameroon)", 34824, "nic-grs", "Latn", } m["atp"] = { "Pudtol Atta", 12640726, "phi", "Latn", } m["atq"] = { "Aralle-Tabulahan", 4783889, "poz-ssw", "Latn", } m["atr"] = { "Waimiri-Atroari", 56865, "sai-car", "Latn", } m["ats"] = { "Gros Ventre", 56628, "alg-ara", "Latn", } m["att"] = { "Pamplona Atta", 12639245, "phi", "Latn", } m["atu"] = { "Reel", 7306882, "sdv-dnu", "Latn", } m["atv"] = { "tiếng Bắc Altai", 2640863, "trk-ssb", "Cyrl", "Tiếng Bắc Altai", "Bắc Altai", translit = "Altai-translit", } m["atw"] = { "Atsugewi", 56718, "nai-pal", "Latn", } m["atx"] = { "Arutani", 56609, nil, "Latn", } m["aty"] = { "Aneityum", 2379113, "poz-oce", "Latn", } m["atz"] = { "Arta", 3508067, "phi", "Latn", } m["aua"] = { "tiếng Asumboa", 4811870, "poz-oce", "Latn", "Tiếng Asumboa", "Asumboa", } m["aub"] = { "Alugu", 12626798, "tbq-urp", "Latn", -- also Hani? } m["auc"] = { "Huaorani", 758570, "qfa-iso", "Latn", } m["aud"] = { "Anuta", 35326, "poz-pnp", "Latn", } m["aug"] = { "Aguna", 34733, "alv-gbe", "Latn", } m["auh"] = { "Aushi", 2872082, "bnt-sbi", "Latn", } m["aui"] = { "tiếng Anuki", 3508132, "poz-ocw", "Latn", "Tiếng Anuki", "Anuki", } m["auj"] = { "tiếng Awjila", 56398, "ber", "Latn, Arab, Tfng", "Tiếng Awjila", "Awjila", } m["auk"] = { "Heyo", 3504295, "qfa-tor", "Latn", } m["aul"] = { "Aulua", 427300, "poz-vnc", "Latn", } m["aum"] = { "Asu", 34798, "alv-ngb", "Latn", } m["aun"] = { "Molmo One", 12637224, "qfa-tor", "Latn", } m["auo"] = { "Auyokawa", 56247, "cdc-wst", "Latn", } m["aup"] = { "Makayam", 6738863, "ngf", "Latn", } m["auq"] = { "Anus", 23855, "poz-ocw", "Latn", } m["aur"] = { "Aruek", 3504279, "qfa-tor", "Latn", } m["aut"] = { "Austral", 2669261, "poz-pep", "Latn", } m["auu"] = { "Auye", 4827334, "ngf", "Latn", } m["auw"] = { "Awyi", 3513326, "paa-brd", "Latn", } m["aux"] = { "Aurá", 3507995, "tup-gua", "Latn", } m["auy"] = { "Auyana", 2873211, "paa-kag", "Latn", } m["auz"] = { "tiếng Ả Rập Uzbekistan", 3399507, "sem-arb", "Arab", "Tiếng Ả Rập Uzbekistan", "Ả Rập Uzbekistan", entry_name = "ar-entryname", } m["avb"] = { "Avau", 12627412, "poz-ocw", "Latn", } m["avd"] = { "Alviri-Vidari", 3327357, "xme", "fa-Arab", ancestors = "xme-mid", } m["avi"] = { "Avikam", 34840, "alv-lag", "Latn", } m["avk"] = { "tiếng Kotava", 1377116, "art", "Latn", "Tiếng Kotava", "Kotava", type = "appendix-constructed", } m["avm"] = { "Angkamuthi", nil, "aus-pmn", "Latn", } m["avn"] = { "tiếng Avatime", 34796, "alv-ktg", "Latn", "Tiếng Avatime", "Avatime", } m["avo"] = { "Agavotaguerra", 3508007, "awd", "Latn", } m["avs"] = { "Aushiri", 3409318, "sai-zap", "Latn", } m["avt"] = { "Au", 3446608, "qfa-tor", "Latn", } m["avu"] = { "tiếng Avokaya", 56685, "csu-mma", "Latn", "Tiếng Avokaya", "Avokaya", } m["avv"] = { "Avá-Canoeiro", 4829584, "tup-gua", "Latn", } m["awa"] = { "tiếng Awadh", 29579, "inc-hie", "Deva, Kthi, fa-Arab", "Tiếng Awadh", "Awadh", translit = {Deva = "hi-translit"}, } m["awb"] = { "Awa (New Guinea)", 2874650, "paa-kag", "Latn", } m["awc"] = { "Cicipu", 35193, "nic-kam", "Latn", } m["awe"] = { "Awetí", 4830038, "tup", "Latn", } m["awg"] = { "Anguthimri", 4764288, "aus-pam", "Latn", } m["awh"] = { "Awbono", 3446684, "ngf", "Latn", } m["awi"] = { "Aekyom", 3399691, "ngf", "Latn", } m["awk"] = { "Awabakal", 3449138, "aus-pam", "Latn", } m["awm"] = { "Arawum", 4784537, "ngf-mad", "Latn", } m["awn"] = { "tiếng Awngi", 34934, "cus-cen", "Ethi", "Tiếng Awngi", "Awngi", } m["awo"] = { "Awak", 3446643, "alv-wjk", "Latn", } m["awr"] = { "Awera", 56379, "paa-lkp", "Latn", } m["aws"] = { "South Awyu", 12633986, "ngf", "Latn", } m["awt"] = { "tiếng Araweté", 4784535, "tup-gua", "Latn", "Tiếng Araweté", "Araweté", } m["awu"] = { "Central Awyu", 12628801, "ngf", "Latn", } m["awv"] = { "Jair Awyu", 16110177, "ngf", "Latn", } m["aww"] = { "Awun", 56369, "paa-spk", "Latn", } m["awx"] = { "Awara", 2874670, "ngf-fin", "Latn", } m["awy"] = { "Edera Awyu", 12630425, "ngf", "Latn", } m["axb"] = { "Abipon", 11252539, "sai-guc", "Latn", } m["axe"] = { "Ayerrerenge", 16112737, "aus-pam", "Latn", } m["axg"] = { "Mato Grosso Arára", 3446660, nil, "Latn", } m["axk"] = { "Aka (Central Africa)", 11010149, "bnt-ngn", "Latn", } m["axl"] = { "Lower Southern Aranda", 6693295, "aus-pam", "Latn", } m["axm"] = { "tiếng Armenia trung đại", 4438498, "hyx", "Armn", "Tiếng Armenia trung đại", "Armenia trung đại", ancestors = "xcl", translit = "Armn-translit", override_translit = true, entry_name = { remove_diacritics = "՞՜՛՟", from = {"եւ"}, to = {"և"} } } m["axx"] = { "Xaragure", 8045635, "poz-cln", "Latn", } m["aya"] = { "Awar", 56876, "paa", "Latn", } m["ayb"] = { "Ayizo", 34841, "alv-pph", "Latn", } m["ayd"] = { "Ayabadhu", 3509164, "aus-pmn", "Latn", } m["aye"] = { "tiếng Ayere", 34788, "alv-aah", "Latn", "Tiếng Ayere", "Ayere", } m["ayg"] = { "Nyanga (Togo)", 35446, "alv-gng", "Latn", } m["ayi"] = { "Leyigha", 3914492, "nic-uce", "Latn", } m["ayk"] = { "Akuku", 3450179, "alv-nwd", "Latn", } m["ayl"] = { "tiếng Ả Rập Libya", 56503, "sem-arb", "Arab", entry_name = "ar-entryname", "Tiếng Ả Rập Libya", "Ả Rập Libya", } m["ayn"] = { "Yemeni Arabic", 1686766, "sem-arb", "Arab", entry_name = "ar-entryname", } m["ayo"] = { "Ayoreo", 56634, "sai-zam", "Latn", } m["ayp"] = { "North Mesopotamian Arabic", 56577, "sem-arb", "Arab", ancestors = "acm", entry_name = "ar-entryname", } m["ayq"] = { "Ayi", 56449, "paa-spk", "Latn", } m["ays"] = { "Sorsogon Ayta", 7563752, "phi", "Latn", } m["ayt"] = { "Bataan Ayta", 4921648, "phi", "Latn", } m["ayu"] = { "Ayu", 34786, "alv", "Latn", } m["ayy"] = { "Tayabas Ayta", 7689745, "phi", "Latn", } m["ayz"] = { "Maybrat", 4830892, "paa-wpa", "Latn", } m["aza"] = { "Azha", 4832486, "tbq-axi", "Latn", } m["azd"] = { "Eastern Durango Nahuatl", 16115449, "azc-nah", "Latn", } m["azg"] = { "San Pedro Amuzgos Amuzgo", 35092, "omq", "Latn", } m["azm"] = { "Ipalapa Amuzgo", 12633013, "omq", "Latn", } m["azn"] = { "Western Durango Nahuatl", 12645553, "azc-nah", "Latn", } m["azo"] = { "tiếng Awing", 34856, "nic-nge", "Latn", "Tiếng Awing", "Awing", } m["azt"] = { "Faire Atta", 12630884, "phi", "Latn", } m["azz"] = { "Highland Puebla Nahuatl", 12953754, "azc-nah", "Latn", } return require("Module:languages").finalizeData(m, "language") og349bpwtf99bdzxke4gvviw6rd803x sla 0 270616 2350087 2305003 2026-05-04T04:16:07Z WhoAlone 40420 2350087 wikitext text/x-wiki =={{langname|kha}}== ==={{ĐM|pron}}=== * {{IPA4|kha|/sla/}} ==={{ĐM|noun}}=== {{head|kha|Danh từ}} # [[lá]]. {{c|kha|Thực vật}} =={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[gai]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. {{-tyz-}} {{-pron-}} {{tyz-IPA}} {{-noun-}} {{pn}} # [[cát]]. {{-syn-}} * [[slài]] {{-ref-}} {{R:Lương Bèn}} [[Thể loại:Danh từ tiếng Tày]] 2cygu0wf2ev901l7yo4hv790mjb92m2 0 273117 2349933 2299543 2026-05-03T13:56:39Z WhoAlone 40420 2349933 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|pronoun}}=== {{head|cje|Đại từ}} # [[ngài]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} =={{langname|nut}}== ==={{ĐM|noun}}=== {{head|nut|Danh từ}} # {{label|nut|Nùng Phàn Slình}} [[núi]]. bqstf5qfx8oqyhqvrisd1ge9uizaxv5 Mô đun:languages/canonical names 828 273923 2350115 2349061 2026-05-04T06:22:29Z Hiyuune 50834 2350115 Scribunto text/plain return { ["Tiếng A'ou"] = "aou", ["Aba"] = "utp", ["Abai Sungai"] = "abf", ["Tiếng Abanyom"] = "abm", ["Abenlen Ayta"] = "abp", ["Abipon"] = "axb", ["Abishira"] = "ash", ["Abom"] = "aob", ["Tiếng Abon"] = "abo", ["Tiếng Abron"] = "abr", ["Abu"] = "ado", ["Abu' Arapesh"] = "aah", ["Abua"] = "abn", ["Tiếng Abui"] = "abz", ["Abun"] = "kgr", ["Abung"] = "abl", ["Tiếng Abure"] = "abu", ["Abureni"] = "mgj", ["Abé"] = "aba", ["Acatepec Me'phaa"] = "tpx", ["Ache"] = "yif", ["Tiếng Achi"] = "acr", ["Tiếng Achuar"] = "acu", ["Achumawi"] = "acv", ["Aché"] = "guq", ["Acroá"] = "acs", ["Adabe"] = "adb", ["Adai"] = "xad", ["Adamorobe Sign Language"] = "ads", ["Adang"] = "adn", ["Adangbe"] = "adq", ["Adap"] = "adp", ["Adasen"] = "tiu", ["Adele"] = "ade", ["Adhola"] = "adh", ["Tiếng Adi"] = "adi", ["Adioukrou"] = "adj", ["Adithinngithigh"] = "dth", ["Tiếng Adnyamathanha"] = "adt", ["Adonara"] = "adr", ["Aduge"] = "adu", ["Aeka"] = "aez", ["Aekyom"] = "awi", ["Aequian"] = "xae", ["Aer"] = "aeq", ["Afade"] = "aal", ["Afghan Sign Language"] = "afg", ["Afitti"] = "aft", ["Afra"] = "ulf", ["Afrihili"] = "afh", ["Afro-Seminole Creole"] = "afs", ["Agarabi"] = "agd", ["Agariya"] = "agi", ["Tiếng Agatu"] = "agc", ["Agavotaguerra"] = "avo", ["Aghu"] = "ahh", ["Aghu Tharrnggala"] = "gtu", ["Agi"] = "aif", ["Agob"] = "kit", ["Agoi"] = "ibm", ["Tiếng Aguacateca"] = "agu", ["Aguano"] = "aga", ["Aguaruna"] = "agr", ["Aguna"] = "aug", ["Agusan Manobo"] = "msm", ["Agutaynen"] = "agn", ["Agwagwune"] = "yay", ["Ahanta"] = "aha", ["Ahirani"] = "ahr", ["Ahwai"] = "nfd", ["Ai-Cham"] = "aih", ["Aighon"] = "aix", ["Aikanã"] = "tba", ["Aiklep"] = "mwg", ["Aimele"] = "ail", ["Ainbai"] = "aic", ["Aiome"] = "aki", ["Airoran"] = "air", ["Aisi"] = "mmq", ["Aiwoo"] = "nfl", ["Aja"] = "aja", ["Ajagua"] = "sai-ajg", ["Ajawa"] = "ajw", ["Ajyíninka Apurucayali"] = "cpc", ["Ak"] = "akq", ["Aka (Central Africa)"] = "axk", ["Aka (Sudan)"] = "soh", ["Aka-Bea"] = "abj", ["Aka-Cari"] = "aci", ["Aka-Kede"] = "akx", ["Aka-Kol"] = "aky", ["Aka-Kora"] = "ack", ["Akar-Bale"] = "acl", ["Akaselem"] = "aks", ["Akatek"] = "knj", ["Ake"] = "aik", ["Akebu"] = "keu", ["Akei"] = "tsr", ["Akeu"] = "aeu", ["Akolet"] = "akt", ["Akoose"] = "bss", ["Akoye"] = "miw", ["Akpa"] = "akf", ["Akpes"] = "ibe", ["Akrukay"] = "afi", ["Akuku"] = "ayk", ["Akum"] = "aku", ["Tiếng Akuntsu"] = "aqz", ["Akurio"] = "ako", ["Akuwagel"] = "bey", ["Akwa"] = "akw", ["Akyaung Ari"] = "nqy", ["Al-Sayyid Bedouin Sign Language"] = "syy", ["Alabat Island Agta"] = "dul", ["Alacatlatzala Mixtec"] = "mim", ["Alago"] = "ala", ["Tiếng Alamblak"] = "amp", ["Tiếng Alangan"] = "alj", ["Alapmunte"] = "apv", ["Alas-Kluet Batak"] = "btz", ["Alazapa"] = "nai-ala", ["Albanian Sign Language"] = "sqk", ["Tiếng Mixtec Alcozauca"] = "xta", ["Alege"] = "alf", ["Algerian Sign Language"] = "asp", ["Ali"] = "aiy", ["Alladian"] = "ald", ["Allar"] = "all", ["Tiếng Alyentiyak"] = "sai-all", ["Alngith"] = "aid", ["Alo Phola"] = "ypo", ["Alor"] = "aol", ["Aloápam Zapotec"] = "zaq", ["Alu"] = "mte", ["Tiếng Kurumba Alu"] = "xua", ["Alugu"] = "aub", ["Tiếng Alumu-Tesu"] = "aab", ["Alune"] = "alp", ["Alungul"] = "aus-alu", ["Aluo"] = "yna", ["Alur"] = "alz", ["Alutiiq"] = "ems", ["Alviri-Vidari"] = "avd", ["Alyawarr"] = "aly", ["Amahai"] = "amq", ["Tiếng Amal"] = "aad", ["Tiếng Amanab"] = "amn", ["Amanayé"] = "ama", ["Amara"] = "aie", ["Amarakaeri"] = "amr", ["Amarizana"] = "awd-ama", ["Amasi"] = "alv-ama", ["Amatlán Zapotec"] = "zpo", ["Amba"] = "rwm", ["Tiếng Ambai"] = "amk", ["Ambakich"] = "aew", ["Ambala Ayta"] = "abc", ["Ambelau"] = "amv", ["Ambele"] = "ael", ["Amblong"] = "alm", ["Ambo"] = "amb", ["Ambul"] = "apo", ["Tiếng Ambulas"] = "abt", ["Amele"] = "aey", ["Amganad Ifugao"] = "ifa", ["Ami"] = "amy", ["Ammonite"] = "sem-amm", ["Amo"] = "amo", ["Amol"] = "alx", ["Amoltepec Mixtec"] = "mbz", ["Amondawa"] = "adw", ["Amorite"] = "sem-amo", ["Ampanang"] = "apg", ["Ampari Dogon"] = "aqd", ["Amri Karbi"] = "ajz", ["Amto"] = "amt", ["Ana Tinga Dogon"] = "dti", ["Tiếng Anaang"] = "anw", ["Anakalangu"] = "akg", ["Anam"] = "pda", ["Anambé"] = "aan", ["Anamgura"] = "imi", ["Anasi"] = "bpo", ["Tiếng Anauyá"] = "awd-ana", ["Ancient Ligurian"] = "xlg", ["Ancient North Arabian"] = "xna", ["Ancient Zapotec"] = "xzp", ["Andai"] = "afd", ["Andajin"] = "ajn", ["Tiếng Ả Rập Andalusia"] = "xaa", ["Andaman Creole Hindi"] = "hca", ["Andaqui"] = "ana", ["Andarum"] = "aod", ["Andegerebinha"] = "adg", ["Andh"] = "anr", ["Andio"] = "bzb", ["Andjingith"] = "aus-and", ["Andoa"] = "anb", ["Andoque"] = "ano", ["Andoquero"] = "sai-and", ["Andra-Hus"] = "anx", ["Aneityum"] = "aty", ["Anem"] = "anz", ["Aneme Wake"] = "aby", ["Anfillo"] = "myo", ["Angaataha"] = "agm", ["Angaité"] = "aqt", ["Angal"] = "age", ["Angal Enen"] = "aoe", ["Angal Heneng"] = "akh", ["Tiếng Angami"] = "njm", ["Angevin"] = "roa-ang", ["Tiếng Yali Angguruk"] = "yli", ["Angkamuthi"] = "avm", ["Angkola Batak"] = "akb", ["Tiếng Angkula"] = "aus-ang", ["Angloromani"] = "rme", ["Angor"] = "agg", ["Angoram"] = "aog", ["Angosturas Tunebo"] = "tnd", ["Anguthimri"] = "awg", ["Ani Phowa"] = "ypn", ["Animere"] = "anf", ["Anindilyakwa"] = "aoi", ["Anjam"] = "boj", ["Anmatyerre"] = "amx", ["Tiếng Annobón"] = "fab", ["Anong"] = "nun", ["Anor"] = "anj", ["Anserma"] = "ans", ["Ansus"] = "and", ["Antakarinya"] = "ant", ["Antigua and Barbuda Creole English"] = "aig", ["Tiếng Creole Antilles"] = "gcf", ["Anu"] = "anl", ["Anuak"] = "anu", ["Anufo"] = "cko", ["Anus"] = "auq", ["Anuta"] = "aud", ["Anyin Morofo"] = "mtb", ["Tiếng Ao"] = "njo", ["Aoheng"] = "pni", ["Aore"] = "aor", ["Ap Ma"] = "kbx", ["Apalachee"] = "xap", ["Apali"] = "ena", ["Apasco-Apoala Mixtec"] = "mip", ["Tiếng Apatani"] = "apt", ["Apiaká"] = "api", ["Apma"] = "app", ["Apolista"] = "awd-apo", ["Aproumu Aizi"] = "ahp", ["Apurinã"] = "apu", ["Arabana"] = "ard", ["Arabela"] = "arl", ["Aralle-Tabulahan"] = "atq", ["Arammba"] = "stk", ["Aranama-Tamique"] = "xrt", ["Arandai"] = "jbj", ["Araona"] = "aro", ["Tiếng Arapaho"] = "arp", ["Arapaso"] = "arj", ["Arara-Karo"] = "arr", ["Ararandewára"] = "xaj", ["Arawum"] = "awm", ["Arbore"] = "arv", ["Are"] = "mwc", ["Areba"] = "aea", ["Argentine Sign Language"] = "aed", ["Arguni"] = "agf", ["Arhuaco"] = "arh", ["Arhâ"] = "aqr", ["Arhö"] = "aok", ["Tiếng Ari"] = "aac", ["Aribwatsa"] = "laz", ["Aribwaung"] = "ylu", ["Arifama-Miniafia"] = "aai", ["Arigidi"] = "aqg", ["Arikapú"] = "ark", ["Arikara"] = "ari", ["Arikem"] = "ait", ["Tiếng Arin"] = "xrn", ["Aringa"] = "luc", ["Armazic"] = "xrm", ["Armenian Sign Language"] = "aen", ["Arop-Lokep"] = "apr", ["Arop-Sissano"] = "aps", ["Arosi"] = "aia", ["Arritinngithigh"] = "rrt", ["Arta"] = "atz", ["Arua"] = "aru", ["Aruamu"] = "msy", ["Aruek"] = "aur", ["Aruop"] = "lsr", ["Arutani"] = "atx", ["Aruá"] = "arx", ["As"] = "asz", ["Asaro'o"] = "mtv", ["Ashe"] = "ahs", ["Tiếng Ashkun"] = "ask", ["Asho Chin"] = "csh", ["Asháninka"] = "cni", ["Tiếng Ashéninka Pajonal"] = "cjo", ["Ashéninka Perené"] = "prq", ["Tiếng Asi"] = "bno", ["Asilulu"] = "asl", ["Asoa"] = "asv", ["Assangori"] = "sjg", ["Tiếng Assiniboine"] = "asb", ["Asu"] = "aum", ["Asue Awyu"] = "psa", ["Tiếng Asumboa"] = "aua", ["Asunción Mixtepec Zapotec"] = "zoo", ["Ata"] = "atm", ["Ata Manobo"] = "atd", ["Atakapa"] = "aqp", ["Atampaya"] = "amz", ["Atanques"] = "cba-ata", ["Atatláhuca Mixtec"] = "mib", ["Tiếng Atemble"] = "ate", ["Ateso"] = "teo", ["Ati"] = "atk", ["Atohwaim"] = "aqm", ["Atong (Cameroon)"] = "ato", ["Atorada"] = "aox", ["Tiếng Atsahuaca"] = "atc", ["Atsam"] = "cch", ["Atsugewi"] = "atw", ["Attié"] = "ati", ["Au"] = "avt", ["Aulua"] = "aul", ["Aurá"] = "aux", ["Aushi"] = "auh", ["Aushiri"] = "avs", ["Auslan"] = "asf", ["Austral"] = "aut", ["Australian Aboriginal Sign Language"] = "asw", ["Austrian Sign Language"] = "asq", ["Austronesian Mari"] = "hob", ["Auwe"] = "smf", ["Auyana"] = "auy", ["Auye"] = "auu", ["Auyokawa"] = "auo", ["Avatime"] = "avn", ["Avau"] = "avb", ["Avava"] = "tmb", ["Avikam"] = "avi", ["Avá-Canoeiro"] = "avv", ["Awa (China)"] = "vwa", ["Awa (New Guinea)"] = "awb", ["Awa-Cuaiquer"] = "kwi", ["Awabakal"] = "awk", ["Awak"] = "awo", ["Awar"] = "aya", ["Awara"] = "awx", ["Awbono"] = "awh", ["Aweer"] = "bob", ["Awera"] = "awr", ["Awetí"] = "awe", ["Tiếng Awjila"] = "auj", ["Awngthim"] = "gwm", ["Awtuw"] = "kmn", ["Awun"] = "aww", ["Awutu"] = "afu", ["Awyi"] = "auw", ["Axamb"] = "ahb", ["Ayabadhu"] = "ayd", ["Ayautla Mazatec"] = "vmy", ["Ayerrerenge"] = "axe", ["Ayi"] = "ayq", ["Ayizi"] = "yyz", ["Ayizo"] = "ayb", ["Ayomán"] = "sai-ayo", ["Ayoquesco Zapotec"] = "zaf", ["Ayoreo"] = "ayo", ["Ayu"] = "ayu", ["Ayutla Mixtec"] = "miy", ["Azha"] = "aza", ["Azhe"] = "yiz", ["Azoyú Me'phaa"] = "tpc", ["Baa"] = "kwb", ["Tiếng Baagandji"] = "drl", ["Baan"] = "bvj", ["Baangi"] = "bqx", ["Baatonum"] = "bba", ["Baba"] = "bbw", ["Babango"] = "bbm", ["Babanki"] = "bbk", ["Babine-Witsuwit'en"] = "bcr", ["Babole"] = "bvx", ["Tiếng Bacama"] = "bcy", ["Tiếng Mã Lai Bacan"] = "btj", ["Bada"] = "bhz", ["Bade"] = "bde", ["Badeshi"] = "bdz", ["Badimaya"] = "bia", ["Badyara"] = "pbp", ["Baeggu"] = "bvd", ["Baelelea"] = "bvc", ["Baenan"] = "sai-bae", ["Baetora"] = "btr", ["Bafanji"] = "bfj", ["Bafaw"] = "bwt", ["Bafia"] = "ksf", ["Bafut"] = "bfd", ["Baga Kaloum"] = "bqf", ["Baga Koga"] = "bgo", ["Baga Manduri"] = "bmd", ["Baga Pokur"] = "bcg", ["Baga Sitemu"] = "bsp", ["Baga Sobané"] = "bsv", ["Bagheli"] = "bfy", ["Bagirmi"] = "bmi", ["Bago-Kusuntu"] = "bqg", ["Bagri"] = "bgq", ["Tiếng Bagua"] = "sai-bag", ["Bagupi"] = "bpi", ["Bagusa"] = "bqb", ["Baha"] = "yha", ["Baham"] = "bdw", ["Bahamian Creole"] = "bah", ["Baharna Arabic"] = "abv", ["Bahau"] = "bhv", ["Bahinemo"] = "bjh", ["Bahonsuai"] = "bsu", ["Bai"] = "bdj", ["Baibai"] = "bbf", ["Baikeno"] = "bkx", ["Baima"] = "bqh", ["Baimak"] = "bmx", ["Bainouk-Gunyaamolo"] = "bcz", ["Bainouk-Samik"] = "bcb", ["Baissa Fali"] = "fah", ["Bajan"] = "bjs", ["Bajelani"] = "bjm", ["Bajjika"] = "vjk", ["Baka"] = "bkc", ["Bakairí"] = "bkq", ["Bakaka"] = "bqz", ["Baki"] = "bki", ["Bakoko"] = "bkh", ["Bakole"] = "kme", ["Bakpinka"] = "bbs", ["Bakulung"] = "bbu", ["Bakumpai"] = "bkr", ["Tiếng Bakung"] = "xkl", ["Bakwé"] = "bjw", ["Balaesang"] = "bls", ["Balangao"] = "blw", ["Balangingi"] = "sse", ["Tiếng Balantak"] = "blz", ["Balau"] = "blg", ["Baldemu"] = "bdn", ["Bali"] = "bcp", ["Baliledo"] = "poz-bal", ["Balinese Malay"] = "mhp", ["Balkan Romani"] = "rmn", ["Balo"] = "bqo", ["Baloi"] = "biz", ["Balong"] = "bnt-bal", ["Baltic Romani"] = "rml", ["Baluan-Pam"] = "blq", ["Bamako Sign Language"] = "bog", ["Bamali"] = "bbq", ["Bambalang"] = "bmo", ["Bambam"] = "ptu", ["Bambili-Bambui"] = "baw", ["Bamenyam"] = "bce", ["Bamu"] = "bcf", ["Bamukumbit"] = "bqt", ["Bamum"] = "bax", ["Bamunka"] = "bvm", ["Bamwe"] = "bmg", ["Ban Khor Sign Language"] = "bfk", ["Bana"] = "bcw", ["Banam Bay"] = "vrt", ["Banao Itneg"] = "bjx", ["Banaro"] = "byz", ["Banda"] = "bnd", ["Banda Malay"] = "bpq", ["Banda-Bambari"] = "liy", ["Banda-Banda"] = "bpd", ["Banda-Mbrès"] = "bqk", ["Banda-Ndélé"] = "bfl", ["Banda-Yangere"] = "yaj", ["Bandi"] = "bza", ["Bandial"] = "bqj", ["Tiếng Bandjalang"] = "bdy", ["Bangala"] = "bxg", ["Bangandu"] = "bgf", ["Bangba"] = "bbe", ["Tiếng Banggai"] = "bgz", ["Tiếng Bangi"] = "bni", ["Bangime"] = "dba", ["Bangka"] = "mfb", ["Bangolan"] = "bgj", ["Bangubangu"] = "bnx", ["Bangwinji"] = "bsj", ["Baniva"] = "bvv", ["Baniwa"] = "bwi", ["Banka"] = "bxw", ["Bankan Tey Dogon"] = "dbw", ["Tiếng Bankon"] = "abb", ["Banoni"] = "bcm", ["Bantayanon"] = "bfx", ["Bantik"] = "bnq", ["Banyumasan"] = "map-bms", ["Baraamu"] = "brd", ["Baram Kayan"] = "kys", ["Barama"] = "bbg", ["Barambu"] = "brm", ["Baramu"] = "bmz", ["Barapasi"] = "brp", ["Baras"] = "brs", ["Barasana"] = "bsn", ["Barbareño"] = "boi", ["Barclayville Grebo"] = "gry", ["Bardi"] = "bcj", ["Barein"] = "bva", ["Bargam"] = "mlp", ["Bariai"] = "bch", ["Bariji"] = "bjc", ["Barikanchi"] = "bxo", ["Tiếng Barikewa"] = "jbk", ["Barngarla"] = "bjb", ["Barok"] = "bjk", ["Tiếng Barombi"] = "bbi", ["Barranbinya"] = "aus-bra", ["Barro Negro Tunebo"] = "tbn", ["Barrow Point"] = "bpt", ["Baruga"] = "bjz", ["Barunggam"] = "aus-brm", ["Baruya"] = "byr", ["Barwe"] = "bwg", ["Barí"] = "mot", ["Basa"] = "bzw", ["Basa-Gumna"] = "bsl", ["Basa-Gurmana"] = "buj", ["Basap"] = "bdb", ["Bashkardi"] = "bsg", ["Bassa-Kontagora"] = "bsr", ["Bassari"] = "bsc", ["Bassossi"] = "bsi", ["Bata"] = "bta", ["Bataan Ayta"] = "ayt", ["Batad Ifugao"] = "ifb", ["Batanga"] = "bnm", ["Bateri"] = "btv", ["Bathari"] = "bhm", ["Bati (Cameroon)"] = "btc", ["Bati (Indonesia)"] = "bvt", ["Batu"] = "btu", ["Batui"] = "zbt", ["Bau"] = "bbd", ["Bauchi"] = "bsf", ["Baure"] = "brg", ["Bauria"] = "bge", ["Bauro"] = "bxa", ["Bauwaki"] = "bwk", ["Bauzi"] = "bvz", ["Bawm Chin"] = "bgr", ["Bay Miwok"] = "mkq", ["Bayali"] = "bjy", ["Baybayanon"] = "bvy", ["Baygo"] = "byg", ["Bayogoula"] = "nai-bay", ["Bayono"] = "byl", ["Bayot"] = "bda", ["Bayungu"] = "bxj", ["Bazigar"] = "bfr", ["Baïnounk Gubëeher"] = "alv-bgu", ["Beami"] = "beo", ["Beaver"] = "bea", ["Beba"] = "bfp", ["Bebe"] = "bzv", ["Bebele"] = "beb", ["Bebeli"] = "bek", ["Bebil"] = "bxp", ["Bedik"] = "tnr", ["Bedjond"] = "bjv", ["Bedoanas"] = "bed", ["Beeke"] = "bkf", ["Beele"] = "bxq", ["Beembe"] = "beq", ["Beezen"] = "bnz", ["Befang"] = "bby", ["Begbere-Ejar"] = "bqv", ["Bekati'"] = "bei", ["Bekwarra"] = "bkv", ["Bekwel"] = "bkw", ["Belait"] = "beg", ["Belanda Bor"] = "bxb", ["Belanda Viri"] = "bvi", ["Belizean Creole"] = "bzj", ["Bembe"] = "bmb", ["Ben Tey"] = "dbt", ["Bena"] = "yun", ["Benabena"] = "bef", ["Bende"] = "bdp", ["Bendi"] = "bct", ["Beneraf"] = "bnv", ["Beng"] = "nhb", ["Benga"] = "bng", ["Benggoi"] = "bgy", ["Bengkala Sign Language"] = "bqy", ["Bentong"] = "bnu", ["Benyadu'"] = "byd", ["Beothuk"] = "bue", ["Bepour"] = "bie", ["Bera"] = "brf", ["Berakou"] = "bxv", ["Berau Malay"] = "bve", ["Berawan"] = "lod", ["Bergish"] = "gmw-bgh", ["Berinomo"] = "bit", ["Berom"] = "bom", ["Berta"] = "wti", ["Berti"] = "byt", ["Besme"] = "bes", ["Besoa"] = "bep", ["Betaf"] = "bfe", ["Bete"] = "byf", ["Bete-Bendi"] = "btt", ["Betoi"] = "sai-bet", ["Betta Kurumba"] = "xub", ["Bhadrawahi"] = "bhd", ["Bhalay"] = "bhx", ["Bharia"] = "bha", ["Bhatri"] = "bgw", ["Bhattiyali"] = "bht", ["Bhaya"] = "bhe", ["Bhele"] = "bhy", ["Bhilali"] = "bhi", ["Bhoti Kinnauri"] = "nes", ["Bhunjia"] = "bhu", ["Biafada"] = "bif", ["Biage"] = "bdf", ["Biak"] = "bhw", ["Biali"] = "beh", ["Bian Marind"] = "bpv", ["Biangai"] = "big", ["Biao"] = "byk", ["Biao Mon"] = "bmt", ["Biao-Jiao Mien"] = "bje", ["Bibaali"] = "bcn", ["Bibbulman"] = "xbp", ["Bidiyo"] = "bid", ["Bidyara"] = "bym", ["Bidyogo"] = "bjg", ["Biem"] = "bmc", ["Bierebo"] = "bnk", ["Bieria"] = "brj", ["Biete"] = "biu", ["Big Nambas"] = "nmb", ["Biga"] = "bhc", ["Bigambal"] = "xbe", ["Bikaru"] = "bic", ["Bikya"] = "byb", ["Bila"] = "bip", ["Bilakura"] = "bql", ["Bilba"] = "bpz", ["Bilbil"] = "brz", ["Bile"] = "bil", ["Biliau"] = "bcu", ["Biloxi"] = "bll", ["Tiếng Bilua"] = "blb", ["Bilur"] = "bxf", ["Tiếng Bima"] = "bhp", ["Bimin"] = "bhl", ["Bimoba"] = "bim", ["Bina"] = "bmn", ["Binahari"] = "bxz", ["Binandere"] = "bhg", ["Binawa"] = "byj", ["Bindal"] = "xbd", ["Bine"] = "bon", ["Binji"] = "bpj", ["Binongan Itneg"] = "itb", ["Bintauna"] = "bne", ["Bintulu"] = "bny", ["Binukid"] = "bkd", ["Binumarien"] = "bjr", ["Bipi"] = "biq", ["Birgid"] = "brk", ["Birgit"] = "btf", ["Biri"] = "bzr", ["Biritai"] = "bqq", ["Birri"] = "bvq", ["Birrpayi"] = "xbj", ["Birwa"] = "brl", ["Biseni"] = "ije", ["Bishuo"] = "bwh", ["Bisis"] = "bnw", ["Bisorio"] = "bir", ["Tiếng Bissa"] = "bib", ["Bitare"] = "brt", ["Bitur"] = "mcc", ["Biwat"] = "bwm", ["Biyo"] = "byo", ["Biyom"] = "bpm", ["Blablanga"] = "blp", ["Black Speech"] = "art-bsp", ["Blafe"] = "bfh", ["Bo"] = "bgl", ["Bo-Rukul"] = "mae", ["Bo-Ung"] = "mux", ["Boano (Maluku)"] = "bzn", ["Boano (Sulawesi)"] = "bzl", ["Bobongko"] = "bgb", ["Bobot"] = "bty", ["Bodo (Central Africa)"] = "boy", ["Tiếng Gadaba Bodo"] = "gbj", ["Bodo Parja"] = "bdv", ["Bofi"] = "bff", ["Boga"] = "bvw", ["Bogaya"] = "boq", ["Boguru"] = "bqu", ["Tiếng Tân Aram Bohtan"] = "bhn", ["Boikin"] = "bzf", ["Bokha"] = "ybk", ["Boko"] = "bqc", ["Bokoto"] = "bdt", ["Bokyi"] = "bky", ["Tiếng Bola"] = "bnp", ["Bolak"] = "art-blk", ["Bolango"] = "bld", ["Bole"] = "bol", ["Bolgo"] = "bvo", ["Bolia"] = "bli", ["Bolinao"] = "smk", ["Bolivian Sign Language"] = "bvl", ["Boloki"] = "bkt", ["Bolon"] = "bof", ["Bolondo"] = "bzm", ["Bolongan"] = "blj", ["Bom"] = "bmf", ["Boma Nkuu"] = "bnt-bon", ["Boma Yumu"] = "bnt-boy", ["Bomboli"] = "bml", ["Bomboma"] = "bws", ["Bomitaba"] = "zmx", ["Bomu"] = "bmq", ["Bomwali"] = "bmw", ["Bon Gula"] = "glc", ["Bondei"] = "bou", ["Bondoukou Kulango"] = "kzc", ["Bondum Dom Dogon"] = "dbu", ["Bonerate"] = "bna", ["Bonggi"] = "bdg", ["Bonggo"] = "bpg", ["Bongili"] = "bui", ["Bongo"] = "bot", ["Bongu"] = "bpu", ["Bonjo"] = "bok", ["Bonkeng"] = "bvg", ["Bonkiman"] = "bop", ["Bookan"] = "bnb", ["Boor"] = "bvf", ["Bora"] = "boa", ["Border Kuna"] = "kvn", ["Borei"] = "gai", ["Boro"] = "xxb", ["Borong"] = "ksr", ["Boruca"] = "brn", ["Boselewa"] = "bwf", ["Bosngun"] = "bqs", ["Bote-Majhi"] = "bmj", ["Botolan Sambal"] = "sbl", ["Bouna Kulango"] = "nku", ["Bourbonnais-Berrichon"] = "roa-bbn", ["Tiếng Bourguignon"] = "roa-brg", ["Bozaba"] = "bzo", ["Bragat"] = "aof", ["Brazilian Sign Language"] = "bzs", ["Brek Karen"] = "kvl", ["Brem"] = "buq", ["Bribri"] = "bzd", ["British Sign Language"] = "bfi", ["Brokkat"] = "bro", ["Brokpake"] = "sgt", ["Brokskat"] = "bkk", ["Broome Pearling Lugger Pidgin"] = "bpl", ["Brunei Bisaya"] = "bsb", ["Bruny Island"] = "xpz", ["Bu"] = "jid", ["Bu-Nao Bunu"] = "bwx", ["Bua"] = "bub", ["Bualkhaw Chin"] = "cbl", ["Buamu"] = "box", ["Tiếng Bube"] = "bvb", ["Bubi"] = "buw", ["Bubia"] = "bbx", ["Budibud"] = "btp", ["Budong-Budong"] = "bdx", ["Budu"] = "buu", ["Buduma"] = "bdm", ["Budza"] = "bja", ["Buena Vista Yokuts"] = "nai-bvy", ["Buglere"] = "sab", ["Bugun"] = "bgg", ["Buhi'non Bikol"] = "ubl", ["Tiếng Buhid"] = "bku", ["Buhutu"] = "bxh", ["Bujhyal"] = "byh", ["Bukar-Sadung Bidayuh"] = "sdo", ["Bukat"] = "bvk", ["Bukawa"] = "buk", ["Bukit Malay"] = "bvu", ["Bukitan"] = "bkn", ["Bukiyip"] = "ape", ["Buksa"] = "tkb", ["Bukusu"] = "bxk", ["Bulgarian Sign Language"] = "bqn", ["Bulgebi"] = "bmp", ["Buli (Ghana)"] = "bwu", ["Buli (Indonesia)"] = "bzq", ["Bulu (Cameroon)"] = "bum", ["Bulu (New Guinea)"] = "bjl", ["Bum"] = "bmv", ["Bumaji"] = "byp", ["Bumbita Arapesh"] = "aon", ["Bumthangkha"] = "kjz", ["Bun"] = "buv", ["Buna"] = "bvn", ["Bunaba"] = "bck", ["Bunak"] = "bfn", ["Bunama"] = "bdd", ["Bundeli"] = "bns", ["Bung"] = "bqd", ["Bungain"] = "but", ["Bunganditj"] = "xbg", ["Tiếng Bungku"] = "bkz", ["Bungu"] = "wun", ["Bunoge"] = "dgb", ["Buol"] = "blf", ["Bura"] = "bwr", ["Burak"] = "bys", ["Buraka"] = "bkg", ["Burarra"] = "bvr", ["Burate"] = "bti", ["Burduna"] = "bxn", ["Bure"] = "bvh", ["Burgundian"] = "gem-bur", ["Burmeso"] = "bzu", ["Buru (Indonesia)"] = "mhs", ["Buru (Nigeria)"] = "bqw", ["Burui"] = "bry", ["Burumakok"] = "aip", ["Burun"] = "bdi", ["Burusu"] = "bqr", ["Buruwai"] = "asi", ["Busam"] = "bxs", ["Busami"] = "bsm", ["Busang Kayan"] = "bfg", ["Bushoong"] = "buf", ["Buso"] = "bso", ["Busoa"] = "bup", ["Bussa"] = "dox", ["Busuu"] = "bju", ["Butbut Kalinga"] = "kyb", ["Butchulla"] = "xby", ["Butmas-Tur"] = "bnr", ["Tiếng Butuanon"] = "btw", ["Buwal"] = "bhs", ["Buyeo"] = "xpy", ["Buyu"] = "byi", ["Buyuan Jino"] = "jiy", ["Bwa"] = "bww", ["Bwaidoka"] = "bwd", ["Bwala"] = "bnt-bwa", ["Bwanabwana"] = "tte", ["Bwatoo"] = "bwa", ["Bwela"] = "bwl", ["Bwile"] = "bwc", ["Bwisi"] = "bwz", ["Byangsi"] = "bee", ["Byep"] = "mkk", ["Bädi Kanum"] = "khd", ["Caac"] = "msq", ["Cabiyarí"] = "cbb", ["Cabécar"] = "cjp", ["Cacaloxtepec Mixtec"] = "miu", ["Cacaopera"] = "ccr", ["Cacua"] = "cbv", ["Cacán"] = "sai-cac", ["Caddo"] = "cad", ["Cafundó"] = "ccd", ["Cahuarano"] = "cah", ["Cajonos Zapotec"] = "zad", ["Caka"] = "ckx", ["Cakchiquel-Quiché Mixed Language"] = "ckz", ["Cakfem-Mushere"] = "cky", ["Calabrian Greek"] = "grk-cal", ["Calamian Tagbanwa"] = "tbk", ["Callawalla"] = "caw", ["Calusa"] = "nai-cal", ["Caluyanun"] = "clu", ["Caló"] = "rmq", ["Camarines Norte Agta"] = "abd", ["Cameroon Mambila"] = "mcu", ["Cameroon Pidgin"] = "wes", ["Campalagian"] = "cml", ["Camsá"] = "kbh", ["Camtho"] = "cmt", ["Camunic"] = "xcc", ["Candoshi-Shapra"] = "cbu", ["Canichana"] = "caz", ["Cao Miao"] = "cov", ["Tiếng Capanahua"] = "kaq", ["Capiznon"] = "cps", ["Caquinte"] = "cot", ["Cara"] = "cfd", ["Carabayo"] = "cby", ["Caramanta"] = "crf", ["Caranqui"] = "sai-caq", ["Carapana"] = "cbc", ["Carian"] = "xcr", ["Cariay"] = "awd-kar", ["Carijona"] = "cbd", ["Carolina Algonquian"] = "crr", ["Carolinian"] = "cal", ["Carpathian Romani"] = "rmc", ["Cashibo-Cacataibo"] = "cbr", ["Cashinahua"] = "cbs", ["Casiguran Dumagat Agta"] = "dgc", ["Casuarina Coast Asmat"] = "asc", ["Catacao"] = "sai-cat", ["Catalan Sign Language"] = "csc", ["Tiếng Catawba"] = "chc", ["Catuquinaru"] = "sai-ctq", ["Catío Chibcha"] = "cba-cat", ["Cauca"] = "cca", ["Cavere"] = "awd-cav", ["Cavineña"] = "cav", ["Cayubaba"] = "cyb", ["Cayuse"] = "xcy", ["Cazcan"] = "azc-caz", ["Cañari"] = "sai-cnr", ["Cebaara Senoufo"] = "sef", ["Cemuhî"] = "cam", ["Cen"] = "cen", ["Central Asmat"] = "cns", ["Central Awyu"] = "awu", ["Tiếng Bạch Trung"] = "bca", ["Central Bontoc"] = "lbk", ["Central Cagayan Agta"] = "agt", ["Tiếng Trung Dusun"] = "dtp", ["Central Grebo"] = "grv", ["Central Huishui Hmong"] = "hmc", ["Central Maewo"] = "mwo", ["Central Mahuatlán Zapoteco"] = "zam", ["Central Malay"] = "pse", ["Central Masela"] = "mxz", ["Central Mashan Hmong"] = "hmm", ["Central Melanau"] = "mel", ["Central Ojibwa"] = "ojc", ["Central Palawano"] = "plc", ["Central Pame"] = "pbs", ["Central Pomo"] = "poo", ["Central Puebla Nahuatl"] = "ncx", ["Central Sama"] = "sml", ["Central Siberian Yupik"] = "ess", ["Central Sierra Miwok"] = "csm", ["Central Subanen"] = "syb", ["Central Tagbanwa"] = "tgt", ["Central Tarahumara"] = "tar", ["Central Teke"] = "nzu", ["Central Tunebo"] = "tuf", ["Centúúm"] = "cet", ["Cerma"] = "cme", ["Ch'olti'"] = "myn-chl", ["Chaap Wuurong"] = "tjw", ["Chadian Sign Language"] = "cds", ["Chaha"] = "sem-cha", ["Chairel"] = "sit-cha", ["Chak"] = "ckh", ["Chakali"] = "cli", ["Chala"] = "cll", ["Chaldean Neo-Aramaic"] = "cld", ["Chali"] = "tgf", ["Chamacoco"] = "ceg", ["Chamba Daka"] = "ccg", ["Chamba Leko"] = "ndi", ["Chambri"] = "can", ["Champenois"] = "roa-cha", ["Chang"] = "nbc", ["Changriwa"] = "cga", ["Changthang"] = "cna", ["Chantyal"] = "chx", ["Chaná"] = "sai-chn", ["Chané"] = "caj", ["Chapacura"] = "sai-chp", ["Chara"] = "cra", ["Charrua"] = "sai-chr", ["Chaudangsi"] = "cdn", ["Chayahuita"] = "cbt", ["Chazumba Mixtec"] = "xtb", ["Che"] = "ruk", ["Cheke Holo"] = "mrn", ["Chemakum"] = "xch", ["Chenapian"] = "cjn", ["Chenchu"] = "cde", ["Chenoua"] = "cnu", ["Chepya"] = "ycp", ["Cherepon"] = "cpn", ["Chesu"] = "ych", ["Chetco-Tolowa"] = "ctc", ["Chhintange"] = "ctn", ["Chhulung"] = "cur", ["Chiangmai Sign Language"] = "csd", ["Chiapanec"] = "cip", ["Tiếng Triqui Chicahuaxtla"] = "trs", ["Chichicapan Zapotec"] = "zpv", ["Chichimeca-Jonaz"] = "pei", ["Chichonyi-Chidzihana-Chikauma"] = "coh", ["Chicomuceltec"] = "cob", ["Chiduruma"] = "dug", ["Chigmecatitlán Mixtec"] = "mii", ["Chilcotin"] = "clc", ["Chilean Sign Language"] = "csg", ["Chilisso"] = "clh", ["Chiltepec Chinantec"] = "csa", ["Chimalapa Zoque"] = "zoh", ["Chimariko"] = "cid", ["Chimila"] = "cbg", ["Chimwiini"] = "bnt-cmw", ["Chinali"] = "cih", ["Chinbon Chin"] = "cnb", ["Chinese Pidgin English"] = "cpi", ["Chinese Sign Language"] = "csl", ["Chipaya"] = "cap", ["Chiquihuitlán Mazatec"] = "maq", ["Chiquimulilla"] = "nai-chi", ["Chiquitano"] = "cax", ["Tiếng Chiricahua"] = "apm", ["Chirino"] = "sai-chi", ["Chiripá"] = "nhd", ["Chitimacha"] = "ctm", ["Chitkuli Kinnauri"] = "cik", ["Chitwania Tharu"] = "the", ["Choapan Zapotec"] = "zpc", ["Chochotec"] = "coz", ["Chokri Naga"] = "nri", ["Chokwe"] = "cjk", ["Tiếng Chol"] = "ctu", ["Cholón"] = "cht", ["Chono"] = "sai-cno", ["Chopi"] = "cce", ["Chuabo"] = "chw", ["Chuanqiandian Cluster Miao"] = "cqd", ["Chuave"] = "cjv", ["Chug"] = "cvg", ["Chuj"] = "cac", ["Chuka"] = "cuh", ["Chukwa"] = "cuw", ["Chumburung"] = "ncu", ["Tiếng Churah"] = "cdj", ["Churuya"] = "sai-chu", ["Chácobo"] = "cao", ["Ci Gbe"] = "cib", ["Cibak"] = "ckl", ["Cicipu"] = "awc", ["Ciguayo"] = "nai-cig", ["Cinamiguin Manobo"] = "mkx", ["Cinda-Regi-Tiyal"] = "cdr", ["Cineni"] = "cie", ["Cinta Larga"] = "cin", ["Cishingini"] = "asg", ["Citak"] = "txt", ["Ciwogai"] = "tgd", ["Classical Gaelic"] = "ghc", ["Classical Guaraní"] = "gn-cls", ["Classical Mandaic"] = "myz", ["Classical Newar"] = "nwc", ["Classical Quechua"] = "qwc", ["Coahuilteco"] = "xcw", ["Coast Miwok"] = "csi", ["Tiếng Kadazan bờ biển"] = "kzj", ["Coastal Konjo"] = "kjc", ["Coatecas Altas Zapotec"] = "zca", ["Coatepec Nahuatl"] = "naz", ["Coatlán Mixe"] = "mco", ["Coatlán Zapotec"] = "zps", ["Coatzospan Mixtec"] = "miz", ["Tiếng Cocama"] = "cod", ["Tiếng Cochimi"] = "coj", ["Cocopa"] = "coc", ["Cocos Islands Malay"] = "coa", ["Coeruna"] = "sai-coe", ["Coeur d'Alene"] = "crd", ["Cogui"] = "kog", ["Col"] = "liw", ["Colombian Sign Language"] = "csn", ["Colonia Tovar German"] = "gct", ["Columbia-Wenatchi"] = "col", ["Colán"] = "sai-col", ["Comaltepec Chinantec"] = "cco", ["Comechingon"] = "sai-cmg", ["Comecrudo"] = "xcm", ["Communicationssprache"] = "art-com", ["Como Karim"] = "cfg", ["Con"] = "cno", ["Coos"] = "csz", ["Copainalá Zoque"] = "zoc", ["Copala Triqui"] = "trc", ["Copallén"] = "sai-cop", ["Coquille"] = "coq", ["Cora"] = "crn", ["Cori"] = "cry", ["Coroado Puri"] = "sai-crd", ["Cosoleacaque Nahuatl"] = "nhk", ["Costa Rican Sign Language"] = "csr", ["Cotabato Manobo"] = "mta", ["Cotoname"] = "xcn", ["Tiếng Cowlitz"] = "cow", ["Coyaima"] = "coy", ["Coyotepec Popoloca"] = "pbf", ["Coyutla Totonac"] = "toc", ["Crimean Gothic"] = "gme-cgo", ["Croatian Sign Language"] = "csq", ["Cross River Mbembe"] = "mfn", ["Cruzeño"] = "crz", ["Cuban Sign Language"] = "csf", ["Cubeo"] = "cub", ["Cueva"] = "sai-cva", ["Cuiba"] = "cui", ["Cuitlatec"] = "cuy", ["Culina"] = "cul", ["Culli"] = "sai-cul", ["Cumanagoto"] = "cuo", ["Cumbric"] = "xcb", ["Cun"] = "cuq", ["Cung"] = "cug", ["Curonian"] = "xcu", ["Curripaco"] = "kpc", ["Cutchi-Swahili"] = "ccl", ["Cuvok"] = "cuv", ["Cuyamecalco Mixtec"] = "xtu", ["Tiếng Cuyunon"] = "cyo", ["Cwi Bwamu"] = "bwy", ["Czech Sign Language"] = "cse", ["Tiếng Cống"] = "cnc", ["Da'a Kaili"] = "kzf", ["Daai Chin"] = "dao", ["Daantanai'"] = "lni", ["Daba"] = "dbq", ["Dabe"] = "dbe", ["Dadanitic"] = "sem-dad", ["Dadi Dadi"] = "dda", ["Dadiya"] = "dbd", ["Daga"] = "dgz", ["Dagaari Dioula"] = "dgd", ["Dagba"] = "dgk", ["Dagik"] = "dec", ["Dagoman"] = "dgn", ["Daho-Doo"] = "das", ["Dai"] = "dij", ["Dair"] = "drb", ["Dairi Batak"] = "btd", ["Dakaka"] = "bpa", ["Dakka"] = "dkk", ["Dakpa"] = "dka", ["Daloa Bété"] = "bev", ["Dama (Nigeria)"] = "dmm", ["Dama (Sierra Leone)"] = "dmn-dam", ["Damakawa"] = "dam", ["Damal"] = "uhn", ["Dameli"] = "dml", ["Dampelas"] = "dms", ["Danaru"] = "dnr", ["Dandami Maria"] = "daq", ["Dangaura Tharu"] = "thl", ["Danish Sign Language"] = "dsl", ["Dano"] = "aso", ["Dao"] = "daz", ["Daonda"] = "dnd", ["Dar Daju Daju"] = "djc", ["Dar Fur Daju"] = "daj", ["Dar Sila Daju"] = "dau", ["Darai"] = "dry", ["Darkinjung"] = "xda", ["Darlong"] = "dln", ["Darmiya"] = "drd", ["Daro-Matu Melanau"] = "dro", ["Darumbal"] = "xgm", ["Dass"] = "dot", ["Datooga"] = "tcc", ["Daungwurrung"] = "dgw", ["Davawenyo"] = "daw", ["Dawawa"] = "dww", ["Dawera-Daweloor"] = "ddw", ["Day"] = "dai", ["Dayi"] = "dax", ["Dazaga"] = "dzg", ["Deccani"] = "dcc", ["Dedua"] = "ded", ["Defaka"] = "afn", ["Defi Gbe"] = "gbh", ["Deg"] = "mzw", ["Tiếng Deg Xinag"] = "ing", ["Degenan"] = "dge", ["Dehwari"] = "deh", ["Dek"] = "dek", ["Dela-Oenale"] = "row", ["Delo"] = "ntr", ["Delta Yokuts"] = "nai-dly", ["Dem"] = "dem", ["Dema"] = "dmx", ["Demisa"] = "dei", ["Demta"] = "dmy", ["Dena'ina"] = "tfn", ["Dendi"] = "ddn", ["Dengese"] = "dez", ["Dengka"] = "dnk", ["Deno"] = "dbb", ["Denya"] = "anv", ["Dení"] = "dny", ["Deori"] = "der", ["Desano"] = "des", ["Dewas Rai"] = "dwz", ["Dewoin"] = "dee", ["Dezfuli"] = "def", ["Dghwede"] = "dgh", ["Dhaiso"] = "dhs", ["Dhalandji"] = "dhl", ["Dhangu"] = "dhg", ["Dhao"] = "nfa", ["Tiếng Dharug"] = "xdk", ["Dhatki"] = "mki", ["Dhimal"] = "dhi", ["Dhofari Arabic"] = "adf", ["Dhudhuroa"] = "ddr", ["Dhungaloo"] = "dhx", ["Dhurga"] = "dhu", ["Dhuwal"] = "dwu", ["Dhuwaya"] = "dwy", ["Dia"] = "dia", ["Dibiyaso"] = "dby", ["Dibo"] = "dio", ["Dicamay Agta"] = "duy", ["Didinga"] = "did", ["Tiếng Dieri"] = "dif", ["Digo"] = "dig", ["Dii"] = "dur", ["Dijim-Bwilim"] = "cfa", ["Dilling"] = "dil", ["Dima"] = "jma", ["Tiếng Dimasa"] = "dis", ["Dimbong"] = "dii", ["Dime"] = "dim", ["Dinapigue Agta"] = "phi-din", ["Dineor"] = "mrx", ["Ding"] = "diz", ["Diodio"] = "ddi", ["Diri"] = "dwa", ["Dirim"] = "dir", ["Disa"] = "dsi", ["Diuwe"] = "diy", ["Diuxi-Tilantongo Mixtec"] = "xtd", ["Dixon Reef"] = "dix", ["Djadjawurrung"] = "dja", ["Djambarrpuyngu"] = "djr", ["Djangun"] = "djf", ["Djauan"] = "djn", ["Djawi"] = "djw", ["Djimini"] = "dyi", ["Djinang"] = "dji", ["Djinba"] = "djb", ["Djiwarli"] = "djl", ["Dobel"] = "kvo", ["Dobu"] = "dob", ["Doe"] = "doe", ["Doga"] = "dgg", ["Doghoro"] = "dgx", ["Dogoso"] = "dgs", ["Dogosé"] = "dos", ["Dogul Dom"] = "dbg", ["Doka"] = "dbi", ["Doko-Uyanga"] = "uya", ["Dom"] = "doa", ["Domaaki"] = "dmk", ["Dominican Sign Language"] = "doq", ["Dompo"] = "doy", ["Domu"] = "dof", ["Domung"] = "dev", ["Dondo"] = "dok", ["Dong"] = "doh", ["Dongo"] = "doo", ["Dongotono"] = "ddd", ["Dongshanba Lalo"] = "yik", ["Donno So Dogon"] = "dds", ["Doondo"] = "dde", ["Dorasque"] = "cba-dor", ["Dori'o"] = "dor", ["Dorig"] = "wwo", ["Doromu-Koki"] = "kqc", ["Dorze"] = "doz", ["Doso"] = "dol", ["Tiếng Doteli"] = "dty", ["Dothraki"] = "art-dtk", ["Doura"] = "don", ["Doutai"] = "tds", ["Doyayo"] = "dow", ["Drehu"] = "dhv", ["Duala"] = "dua", ["Duano"] = "dup", ["Duau"] = "dva", ["Dubu"] = "dmu", ["Dugun"] = "ndu", ["Duguri"] = "dbm", ["Dugwor"] = "dme", ["Duhwa"] = "kbz", ["Duit"] = "cba-dui", ["Duke"] = "nke", ["Dulbu"] = "dbo", ["Duli"] = "duz", ["Duma"] = "dma", ["Dumaitic"] = "sem-dum", ["Dumbea"] = "duf", ["Dumi"] = "dus", ["Dumpas"] = "dmv", ["Dumun"] = "dui", ["Duna"] = "duc", ["Dungmali"] = "raa", ["Dungu"] = "dbv", ["Tiếng Agta Dupaningan"] = "duo", ["Dura"] = "drq", ["Duri"] = "mvp", ["Duriankere"] = "dbn", ["Tiếng Duruwa"] = "pci", ["Dusner"] = "dsn", ["Dusun Deyah"] = "dun", ["Dusun Malang"] = "duq", ["Tiếng Dusun Witu"] = "duw", ["Tiếng Hạ Saxon Hà Lan"] = "nds-nl", ["Dutch Sign Language"] = "dse", ["Duupa"] = "dae", ["Duvle"] = "duv", ["Duwai"] = "dbp", ["Duwet"] = "gve", ["Dwang"] = "nnu", ["Dyaabugay"] = "dyy", ["Dyaberdyaber"] = "dyb", ["Dyan"] = "dya", ["Dyangadi"] = "dyn", ["Dyugun"] = "dyd", ["Tiếng Dyula"] = "dyu", ["Dza"] = "jen", ["Dzala"] = "dzl", ["Dzando"] = "dzn", ["Dzao Min"] = "bpn", ["Dzodinka"] = "add", ["Dâw"] = "kwa", ["Tiếng Ai"] = "eee", ["E'ma Buyang"] = "yzg", ["Tiếng Assam cận đại"] = "inc-oas", ["Early Modern Korean"] = "ko-ear", ["Early Tripuri"] = "xtr", ["East Damar"] = "dmr", ["East Franconian"] = "vmf", ["East Kewa"] = "kjs", ["East Limba"] = "lma", ["East Makian"] = "mky", ["East Masela"] = "vme", ["East Nyala"] = "nle", ["East Tarangan"] = "tre", ["Eastern Acipa"] = "acp", ["Tiếng Arrernte Đông"] = "aer", ["Eastern Bolivian Guaraní"] = "gui", ["Eastern Canadian Inuktitut"] = "ike", ["Eastern Durango Nahuatl"] = "azd", ["Eastern Gurung"] = "ggn", ["Eastern Highland Chatino"] = "cly", ["Eastern Highland Otomi"] = "otm", ["Eastern Huasteca Nahuatl"] = "nhe", ["Eastern Huishui Hmong"] = "hme", ["Eastern Karaboro"] = "xrb", ["Eastern Kayah"] = "eky", ["Eastern Keres"] = "kee", ["Eastern Krahn"] = "kqo", ["Eastern Lalu"] = "yit", ["Eastern Maninkakan"] = "emk", ["Eastern Meohang"] = "emg", ["Eastern Muria"] = "emu", ["Eastern Ngad'a"] = "nea", ["Eastern Nisu"] = "nos", ["Eastern Ojibwa"] = "ojg", ["Eastern Penan"] = "pez", ["Eastern Pomo"] = "peb", ["Eastern Qiandong Miao"] = "hmq", ["Eastern Subanun"] = "sfe", ["Eastern Tawbuid"] = "bnj", ["Eastern Xiangxi Miao"] = "muq", ["Eastern Xwla Gbe"] = "gbx", ["Ebira"] = "igb", ["Ecuadorian Sign Language"] = "ecs", ["Ede Cabe"] = "cbj", ["Ede Ica"] = "ica", ["Ede Ije"] = "ijj", ["Edera Awyu"] = "awy", ["Edolo"] = "etr", ["Edomite"] = "xdm", ["Edopi"] = "dbf", ["Efutop"] = "ofu", ["Egyptian Sign Language"] = "esl", ["Ejamat"] = "eja", ["Ekajuk"] = "eka", ["Ekari"] = "ekg", ["Ekele"] = "khy", ["Eki"] = "eki", ["Ekit"] = "eke", ["Ekpeye"] = "ekp", ["El Alto Zapotec"] = "zpp", ["El Hugeirat"] = "elh", ["Eleme"] = "elm", ["Elepi"] = "ele", ["Elip"] = "ekm", ["Elkei"] = "elk", ["Eloi"] = "art-elo", ["Elotepec Zapotec"] = "zte", ["Eloyi"] = "afo", ["Elseng"] = "mrf", ["Elu"] = "elu", ["Emae"] = "mmw", ["Emai"] = "ema", ["Eman"] = "emn", ["Embaloh"] = "emb", ["Emberá-Baudó"] = "bdc", ["Emberá-Catío"] = "cto", ["Emem"] = "enr", ["Emerillon"] = "eme", ["Emplawas"] = "emw", ["Enawené-Nawé"] = "unk", ["Ende"] = "end", ["Enga"] = "enq", ["Enggano"] = "eno", ["Enlhet"] = "enl", ["Enrekang"] = "ptt", ["Enu"] = "enu", ["Enwan"] = "env", ["Enwang"] = "enw", ["Enxet"] = "enx", ["Enya"] = "gey", ["Epena"] = "sja", ["Epi-Olmec"] = "xep", ["Epigraphic Mayan"] = "emy", ["Eravallan"] = "era", ["Erave"] = "kjy", ["Ere"] = "twp", ["Erie"] = "iro-ere", ["Eritai"] = "ert", ["Erokwanas"] = "erw", ["Erre"] = "err", ["Erromintxela"] = "emx", ["Eruwa"] = "erh", ["Ese Ejja"] = "ese", ["Eshtehardi"] = "esh", ["Eskayan"] = "esy", ["Esmeralda"] = "sai-esm", ["Esselen"] = "esq", ["Estado de México Otomi"] = "ots", ["Estonian Sign Language"] = "eso", ["Esuma"] = "esm", ["Etchemin"] = "etc", ["Etebi"] = "etb", ["Eten"] = "etx", ["Eteocypriot"] = "ecy", ["Ethiopian Sign Language"] = "eth", ["Etkywan"] = "ich", ["Eton (Cameroon)"] = "eto", ["Eton (Vanuatu)"] = "etn", ["Etulo"] = "utr", ["Evant"] = "bzz", ["Ewage-Notu"] = "nou", ["Ewarhuyana"] = "sai-ewa", ["Ewondo"] = "ewo", ["Extremaduran"] = "ext", ["Eyak"] = "eya", ["Ezaa"] = "eza", ["Fagani"] = "faf", ["Faire Atta"] = "azt", ["Faita"] = "faj", ["Faiwol"] = "fai", ["Fakkanci"] = "gel", ["Falam Chin"] = "cfm", ["Fali"] = "fli", ["Fam"] = "fam", ["Tiếng Fanagalo"] = "fng", ["Fanamaket"] = "bjp", ["Fang (Bantu)"] = "fan", ["Fang (Beboid)"] = "fak", ["Fania"] = "fni", ["Far Western Muria"] = "fmu", ["Fas"] = "fqs", ["Fasu"] = "faa", ["Fataleka"] = "far", ["Fataluku"] = "ddg", ["Fayu"] = "fau", ["Fedan"] = "pdn", ["Fembe"] = "agl", ["Fer"] = "kah", ["Feroge"] = "fer", ["Filomena Mata-Coahuitlán Totonac"] = "tlp", ["Finisterre Yau"] = "yuw", ["Finnish Sign Language"] = "fse", ["Finnish-Swedish Sign Language"] = "fss", ["Finongan"] = "fag", ["Fipa"] = "fip", ["Firan"] = "fir", ["Fiwaga"] = "fiw", ["Flemish Sign Language"] = "vgt", ["Flinders Island"] = "fln", ["Foau"] = "flh", ["Tiếng Foi"] = "foi", ["Foia Foia"] = "ffi", ["Folopa"] = "ppo", ["Foma"] = "fom", ["Fongoro"] = "fgr", ["Foodo"] = "fod", ["Forak"] = "frq", ["Fordata"] = "frd", ["Fore"] = "for", ["Forest Nenets"] = "syd-fne", ["Fortsenal"] = "frt", ["Franc-Comtois"] = "roa-fcm", ["Francisco León Zoque"] = "zos", ["French Belgian Sign Language"] = "sfb", ["French Sign Language"] = "fsl", ["Fuliiru"] = "flr", ["Fulniô"] = "fun", ["Fum"] = "fum", ["Fungwa"] = "ula", ["Furu"] = "fuu", ["Futuna-Aniwa"] = "fut", ["Fuyug"] = "fuy", ["Fwe"] = "fwe", ["Fwâi"] = "fwa", ["Fyam"] = "pym", ["Fyer"] = "fie", ["Ga'anda"] = "gqa", ["Ga'dang"] = "gdg", ["Gaa"] = "ttb", ["Gaam"] = "tbi", ["Gabadi"] = "kbt", ["Gabi"] = "gbw", ["Gabrielino-Fernandeño"] = "xgf", ["Gadang"] = "gdk", ["Gaddi"] = "gbk", ["Gade"] = "ged", ["Gadjerawang"] = "gdh", ["Gadsup"] = "gaj", ["Gafat"] = "gft", ["Gagadu"] = "gbu", ["Gagnoa Bété"] = "btg", ["Gahri"] = "bfu", ["Gaikundi"] = "gbf", ["Gaina"] = "gcn", ["Gal"] = "gap", ["Galambu"] = "glo", ["Galela"] = "gbi", ["Galeya"] = "gar", ["Galice"] = "gce", ["Galindian"] = "xgl", ["Gallaecian"] = "cel-gal", ["Tiếng Gallo"] = "roa-gal", ["Tiếng Gallura"] = "sdn", ["Tiếng Galo"] = "adl", ["Galoli"] = "gal", ["Gambera"] = "gma", ["Gamela"] = "sai-gam", ["Tiếng Gamilaraay"] = "kld", ["Gamkonora"] = "gak", ["Gamo-Ningi"] = "bte", ["Gana"] = "gnq", ["Ganang"] = "gne", ["Gane"] = "gzn", ["Ganggalida"] = "gcd", ["Ganglau"] = "ggl", ["Gangte"] = "gnb", ["Gangulu"] = "gnl", ["Gants"] = "gao", ["Ganzi"] = "gnz", ["Gao"] = "gga", ["Gapapaiwa"] = "pwg", ["Garawa"] = "wrk", ["Garhwali"] = "gbm", ["Tiếng Garifuna"] = "cab", ["Garingbal"] = "xgi", ["Garus"] = "gyb", ["Garza"] = "xgr", ["Gashowu"] = "nai-gsy", ["Gaulish"] = "cel-gau", ["Gavak"] = "dmc", ["Gavar"] = "gou", ["Gavião do Jiparaná"] = "gvo", ["Tiếng Gawwada"] = "gwd", ["Tiếng Gayil"] = "gyl", ["Gayo"] = "gay", ["Gayón"] = "sai-gay", ["Gbagyi"] = "gbr", ["Gban"] = "ggu", ["Gbanu"] = "gbv", ["Gbanziri"] = "gbg", ["Gbari"] = "gby", ["Gbaya"] = "gba", ["Gbaya-Bossangoa"] = "gbp", ["Gbaya-Bozoum"] = "gbq", ["Gbaya-Mbodomo"] = "gmm", ["Gbayi"] = "gyg", ["Gbesi Gbe"] = "gbs", ["Gbii"] = "ggb", ["Gbin"] = "xgb", ["Tiếng Gbiri-Niragu"] = "grh", ["Gboloo Grebo"] = "gec", ["Gciriku"] = "diu", ["Gcwi"] = "gwj", ["Ge"] = "hmj", ["Gebe"] = "gei", ["Gedaged"] = "gdd", ["Geji"] = "gji", ["Gela"] = "nlg", ["Gelao"] = "gio", ["Gele'"] = "sbc", ["Geme"] = "geq", ["Gen"] = "gej", ["Gende"] = "gaf", ["Gengle"] = "geg", ["Gepo"] = "ygp", ["Gera"] = "gew", ["German Sign Language"] = "gsg", ["Geruma"] = "gea", ["Geser-Gorom"] = "ges", ["Gey"] = "guv", ["Ghanaian Sign Language"] = "gse", ["Ghandruk Sign Language"] = "gds", ["Ghanongga"] = "ghn", ["Ghari"] = "gri", ["Ghayavi"] = "bmk", ["Ghera"] = "ghr", ["Ghomara"] = "gho", ["Tiếng Ghotuo"] = "aaa", ["Ghulfan"] = "ghl", ["Giangan"] = "bgi", ["Gibanawa"] = "gib", ["Gidar"] = "gid", ["Gikyode"] = "acd", ["Gilima"] = "gix", ["Gimi (Austronesian)"] = "gip", ["Gimme"] = "kmp", ["Gimnime"] = "gmn", ["Ginuman"] = "gnm", ["Girawa"] = "bbr", ["Giryama"] = "nyf", ["Githabul"] = "gih", ["Gitua"] = "ggt", ["Gitxsan"] = "git", ["Giyug"] = "giy", ["Gizrra"] = "tof", ["Glaro-Twabo"] = "glr", ["Glavda"] = "glw", ["Glio-Oubi"] = "oub", ["Gnau"] = "gnu", ["Goa'uld"] = "art-gld", ["Goaria"] = "gig", ["Gobasi"] = "goi", ["Gobu"] = "gox", ["Godié"] = "god", ["Godwari"] = "gdx", ["Goemai"] = "ank", ["Gogo"] = "gog", ["Gogodala"] = "ggw", ["Gojri"] = "gju", ["Gokana"] = "gkn", ["Gokhy"] = "sit-gkh", ["Gola"] = "gol", ["Golin"] = "gvf", ["Golpa"] = "lja", ["Gondi"] = "gon", ["Gongduk"] = "goe", ["Gonja"] = "gjn", ["Goo"] = "gov", ["Tiếng Gooniyandi"] = "gni", ["Gor"] = "gqr", ["Gorakor"] = "goc", ["Gorap"] = "goq", ["Goreng"] = "xgg", ["Tiếng Gorontalo"] = "gor", ["Gorovu"] = "grq", ["Gottscheerish"] = "gmw-gts", ["Goundo"] = "goy", ["Gourmanchéma"] = "gux", ["Gowlan"] = "goj", ["Gowro"] = "gwf", ["Gozarkhani"] = "goz", ["Grangali"] = "nli", ["Grass Koiari"] = "kbk", ["Grebo"] = "grb", ["Greek Sign Language"] = "gss", ["Green Gelao"] = "giq", ["Green Hmong"] = "hnj", ["Grenadian Creole English"] = "gcl", ["Gresi"] = "grs", ["Groma"] = "gro", ["Gros Ventre"] = "ats", ["Gua"] = "gwx", ["Guahibo"] = "guh", ["Guambiano"] = "gum", ["Guamo"] = "sai-gmo", ["Guanano"] = "gvc", ["Guatemalan Sign Language"] = "gsm", ["Guató"] = "gta", ["Guayabero"] = "guo", ["Guazacapán"] = "nai-guz", ["Gudang"] = "xgd", ["Gudanji"] = "nji", ["Gude"] = "gde", ["Gudu"] = "gdu", ["Guduf-Gava"] = "gdf", ["Guerrero Nahuatl"] = "ngu", ["Guevea de Humboldt Zapotec"] = "zpg", ["Gugadj"] = "ggd", ["Gugu Badhun"] = "gdc", ["Gugu Warra"] = "wrw", ["Guhu-Samane"] = "ghs", ["Guianese Creole"] = "gcr", ["Guiberoua Bété"] = "bet", ["Guinau"] = "awd-gnu", ["Guinea Kpelle"] = "gkp", ["Guinea-Bissau Creole"] = "pov", ["Guinea-Bissau Sign Language"] = "lgs", ["Guinean Sign Language"] = "gus", ["Guiqiong"] = "gqi", ["Gula"] = "glu", ["Gula'alaa"] = "gmb", ["Gule"] = "gly", ["Gullah"] = "gul", ["Gumalu"] = "gmu", ["Gumatj"] = "gnn", ["Gumawana"] = "gvs", ["Gundi"] = "gdi", ["Gunditjmara"] = "gjm", ["Gundungurra"] = "xrd", ["Gungabula"] = "gyf", ["Gungu"] = "rub", ["Guntai"] = "gnt", ["Gunu"] = "yas", ["Gunwinggu"] = "gup", ["Gunya"] = "gyy", ["Gupa-Abawa"] = "gpa", ["Gupapuyngu"] = "guf", ["Gur Lama"] = "las", ["Guragone"] = "gge", ["Guramalum"] = "grz", ["Tiếng Goran"] = "hac", ["Gureng Gureng"] = "gnr", ["Gurgula"] = "ggg", ["Guriaso"] = "grx", ["Gurindji"] = "gue", ["Gurjar Apabhramsa"] = "inc-gup", ["Gurmana"] = "gvm", ["Guro"] = "goa", ["Guruntum"] = "grd", ["Gusan"] = "gsn", ["Gusii"] = "guz", ["Gusilay"] = "gsl", ["Gutnish"] = "gmq-gut", ["Guwa"] = "xgw", ["Guwamu"] = "gwu", ["Guwar"] = "aus-guw", ["Guya"] = "gka", ["Guyanese Creole English"] = "gyn", ["Guyani"] = "gvy", ["Guébie"] = "gie", ["Gvoko"] = "ngs", ["Gwa"] = "gwb", ["Gwahatike"] = "dah", ["Gwak"] = "jgk", ["Gwamhi-Wuri"] = "bga", ["Gwandara"] = "gwn", ["Gwara"] = "alv-gwa", ["Gweda"] = "grw", ["Gweno"] = "gwe", ["Gwere"] = "gwr", ["Gyalsumdo"] = "gyo", ["Gyele"] = "gyi", ["Gyem"] = "gye", ["Güenoa"] = "sai-gue", ["Habu"] = "hbu", ["Hadothi"] = "hoj", ["Hadrami"] = "xhd", ["Hadza"] = "hts", ["Haeke"] = "aek", ["Hahon"] = "hah", ["Haigwai"] = "hgw", ["Hainyaxo Bozo"] = "bzx", ["Haiphong Sign Language"] = "haf", ["Haisla"] = "has", ["Haitian Vodoun Culture Language"] = "hvc", ["Haiǁom"] = "hgm", ["Haji"] = "hji", ["Hakö"] = "hao", ["Halang Doan"] = "hld", ["Halia"] = "hla", ["Hamap"] = "hmu", ["Hamba"] = "hba", ["Hamtai"] = "hmt", ["Hanga"] = "hag", ["Hanga Hundi"] = "wos", ["Hanoi Sign Language"] = "hab", ["Harami"] = "xha", ["Haraza"] = "nub-har", ["Harijan Kinnauri"] = "kjo", ["Tiếng Harsusi"] = "hss", ["Haruai"] = "tmd", ["Haruku"] = "hrk", ["Haryanvi"] = "bgc", ["Harzani"] = "hrz", ["Hasaitic"] = "sem-has", ["Hasha"] = "ybj", ["Hassaniya Arabic"] = "mey", ["Hatam"] = "had", ["Hausa Sign Language"] = "hsl", ["Haveke"] = "hvk", ["Havu"] = "hav", ["Hawai'i Pidgin Sign Language"] = "hps", ["Hawaiian Creole"] = "hwc", ["Haya"] = "hay", ["Hdi"] = "xed", ["Hehe"] = "heh", ["Heiban"] = "hbn", ["Helong"] = "heg", ["Helu"] = "elu-prk", ["Hema"] = "nix", ["Hemba"] = "hem", ["Herdé"] = "hed", ["Hermit"] = "llf", ["Tiếng Hernici"] = "xhr", ["Hewa"] = "ham", ["Heyo"] = "auk", ["Hibito"] = "hib", ["Hidatsa"] = "hid", ["Highland Konjo"] = "kjk", ["Highland Oaxaca Chontal"] = "chd", ["Highland Puebla Nahuatl"] = "azz", ["Tiếng Totonac cao nguyên"] = "tos", ["Hijuk"] = "hij", ["Hill Maria"] = "mrr", ["Himarimã"] = "hir", ["Himyaritic"] = "sem-him", ["Hindi Dogri"] = "dgo", ["Hinduri"] = "hii", ["Hinukh"] = "gin", ["Hismaic"] = "sem-his", ["Hitchiti"] = "nai-hit", ["Hitu"] = "htu", ["Hiw"] = "hiw", ["Hixkaryana"] = "hix", ["Hlepho Phowa"] = "yhl", ["Hlersu"] = "hle", ["Hmar"] = "hmr", ["Hmong Dô"] = "hmv", ["Hmong Shua"] = "hmz", ["Hmwaveke"] = "mrk", ["Ho Chi Minh City Sign Language"] = "hos", ["Hobyót"] = "hoh", ["Hoia Hoia"] = "hhi", ["Holikachuk"] = "hoi", ["Holiya"] = "hoy", ["Holma"] = "hod", ["Holoholo"] = "hoo", ["Holu"] = "hol", ["Homa"] = "hom", ["Honduran Lenca"] = "len", ["Honduras Sign Language"] = "hds", ["Hone"] = "juh", ["Hong Kong Sign Language"] = "hks", ["Honi"] = "how", ["Tiếng Hopi"] = "hop", ["Horned Miao"] = "hrm", ["Horo"] = "hor", ["Horom"] = "hoe", ["Hote"] = "hot", ["Hoti"] = "hti", ["Hovongan"] = "hov", ["Hoyahoya"] = "hhy", ["Hrangkhol"] = "hra", ["Hruso"] = "hru", ["Huachipaeri"] = "hug", ["Huambisa"] = "hub", ["Huaorani"] = "auc", ["Huarijio"] = "var", ["Huaulu"] = "hud", ["Huautla Mazatec"] = "mau", ["Huave"] = "huv", ["Huaxcaleca Nahuatl"] = "nhq", ["Huba"] = "hbb", ["Huehuetla Tepehua"] = "tee", ["Huetar"] = "cba-hue", ["Huichol"] = "hch", ["Huilliche"] = "huh", ["Huitepec Mixtec"] = "mxs", ["Hukumina"] = "huw", ["Hula"] = "hul", ["Huli"] = "hui", ["Hulung"] = "huk", ["Humburi Senni"] = "hmb", ["Humene"] = "huf", ["Hun"] = "uth", ["Hunde"] = "hke", ["Hungana"] = "hum", ["Hungarian Sign Language"] = "hsh", ["Hungworo"] = "nat", ["Hunjara-Kaina Ke"] = "hkk", ["Hunnic"] = "xhc", ["Hupdë"] = "jup", ["Hupla"] = "hap", ["Hutterisch"] = "geh", ["Hwana"] = "hwo", ["Hya"] = "hya", ["Hän"] = "haa", ["Hértevin"] = "hrt", ["I-Wak"] = "iwk", ["Iamalele"] = "yml", ["Iatmul"] = "ian", ["Iau"] = "tmu", ["Ibali Teke"] = "tek", ["Tiếng Ibanag"] = "ibg", ["Ibani"] = "iby", ["Iberian"] = "xib", ["Iboko"] = "bkp", ["Ibu"] = "ibu", ["Icelandic Sign Language"] = "icl", ["Iceve-Maci"] = "bec", ["Tiếng Ida'an"] = "dbj", ["Idakho-Isukha-Tiriki"] = "ida", ["Idaté"] = "idt", ["Idere"] = "ide", ["Idesa"] = "ids", ["Idi"] = "idi", ["Idoma"] = "idu", ["Idon"] = "idc", ["Tiếng Idu"] = "clk", ["Idun"] = "ldb", ["Iduna"] = "viv", ["Ifo"] = "iff", ["Igana"] = "igg", ["Igede"] = "ige", ["Ignaciano"] = "ign", ["Igo"] = "ahl", ["Iguta"] = "nar", ["Igwe"] = "igw", ["Iha"] = "ihp", ["Ihievbe"] = "ihi", ["Ija-Zuba"] = "vki", ["Ik"] = "ikx", ["Ika"] = "ikk", ["Ikaranggal"] = "ikr", ["Ikizu"] = "ikz", ["Iko"] = "iki", ["Ikobi-Mena"] = "meb", ["Ikoma"] = "ntk", ["Ikpeng"] = "txi", ["Ikpeshi"] = "ikp", ["Ikposo"] = "kpo", ["Iku-Gora-Ankwa"] = "ikv", ["Ikulu"] = "ikl", ["Ikwo"] = "iqw", ["Ila"] = "ilb", ["Ile Ape"] = "ila", ["Ilgar"] = "ilg", ["Ili'uun"] = "ilu", ["Ilianen Manobo"] = "mbi", ["Illyrian"] = "xil", ["Ilongot"] = "ilk", ["Ilue"] = "ilv", ["Ilwana"] = "mlk", ["Imbongu"] = "imo", ["Imonda"] = "imn", ["Imroing"] = "imr", ["Inabaknon"] = "abx", ["Inapang"] = "mzu", ["Indanga"] = "bnt-ind", ["Indian Sign Language"] = "ins", ["Indonesian Bajau"] = "bdl", ["Indonesian Sign Language"] = "inl", ["Indri"] = "idr", ["Indus Valley Language"] = "xiv", ["Inebu One"] = "oin", ["Ineseño"] = "inz", ["Inga"] = "inb", ["Inlaod Itneg"] = "iti", ["Inoke-Yate"] = "ino", ["Inonhan"] = "loc", ["Inpui Naga"] = "nkf", ["International Sign"] = "ils", ["Inuinnaqtun"] = "esx-inq", ["Inuit Sign Language"] = "iks", ["Inuktun"] = "esx-ink", ["Inuvialuktun"] = "ikt", ["Ipai"] = "nai-ipa", ["Ipalapa Amuzgo"] = "azm", ["Ipiko"] = "ipo", ["Ipili"] = "ipi", ["Ipulo"] = "ass", ["Iquito"] = "iqu", ["Ir"] = "irr", ["Irantxe"] = "irn", ["Iranun"] = "ill", ["Tiếng Ả Rập Iraq"] = "acm", ["Irarutu"] = "irh", ["Iraya"] = "iry", ["Iresim"] = "ire", ["Iriga Bicolano"] = "bto", ["Irish Sign Language"] = "isg", ["Tiếng Irula"] = "iru", ["Isabi"] = "isa", ["Isanzu"] = "isn", ["Isarog Agta"] = "agk", ["Isaurian"] = "und-isa", ["Isconahua"] = "isc", ["Isebe"] = "igo", ["Ishkashimi"] = "isk", ["Isinai"] = "inn", ["Isirawa"] = "srl", ["Islander Creole English"] = "icr", ["Israeli Sign Language"] = "isr", ["Isthmus Mixe"] = "mir", ["Tiếng Zapotec Isthmus"] = "zai", ["Isu"] = "isu", ["Isubu"] = "szv", ["Italian Sign Language"] = "ise", ["Itawit"] = "itv", ["Itene"] = "ite", ["Iteri"] = "itr", ["Itik"] = "itx", ["Ito"] = "itw", ["Itundujia Mixtec"] = "mce", ["Itzá"] = "itz", ["Iwal"] = "kbm", ["Iwam"] = "iwm", ["Iwur"] = "iwo", ["Ixcatec"] = "ixc", ["Ixcatlán Mazatec"] = "mzi", ["Ixtayutla Mixtec"] = "vmj", ["Ixtenco Otomi"] = "otz", ["Iyayu"] = "iya", ["Iyive"] = "uiv", ["Iyo"] = "nca", ["Iyo'wujwa Chorote"] = "crq", ["Iyojwa'ja Chorote"] = "crt", ["Izere"] = "izr", ["Izi"] = "izz", ["Izi-Ezaa-Ikwo-Mgbo"] = "izi", ["Tiếng Izon"] = "ijc", ["Izora"] = "cbo", ["Iñapari"] = "inp", ["Jabem"] = "jae", ["Jabutí"] = "jbt", ["Jad"] = "jda", ["Jadgali"] = "jdg", ["Jahanka"] = "jad", ["Jair Awyu"] = "awv", ["Jakati"] = "jat", ["Jalapa de Díaz Mazatec"] = "maj", ["Jalkunan"] = "bxl", ["Jamaican Country Sign Language"] = "jcs", ["Jamaican Sign Language"] = "jls", ["Jambi Malay"] = "jax", ["Jamiltepec Mixtec"] = "mxt", ["Jaminjung"] = "djd", ["Jamsay"] = "djm", ["Jamtish"] = "gmq-jmk", ["Jandavra"] = "jnd", ["Janday"] = "jan", ["Jangkang"] = "djo", ["Jangshung"] = "jna", ["Janji"] = "jni", ["Japanese Sign Language"] = "jsl", ["Japrería"] = "jru", ["Jara"] = "jaf", ["Jaru"] = "ddj", ["Jassic"] = "ysc", ["Jaunsari"] = "jns", ["Jawe"] = "jaz", ["Jaya"] = "jyy", ["Jebero"] = "jeb", ["Jeikó"] = "sai-jko", ["Tiếng Jemez"] = "tow", ["Jenaama Bozo"] = "bze", ["Jeng"] = "jeg", ["Jennu Kurumba"] = "xuj", ["Jere"] = "jer", ["Jeri Kuo"] = "jek", ["Jerung"] = "jee", ["Jhankot Sign Language"] = "jhs", ["Jiamao"] = "jio", ["Jiba"] = "juo", ["Jibu"] = "jib", ["Tiếng Jicarilla"] = "apj", ["Jilbe"] = "jie", ["Jili"] = "mgi", ["Jilim"] = "jil", ["Jimi"] = "jmi", ["Jimjimen"] = "jim", ["Tiếng Tấn"] = "cjy", ["Jina"] = "jia", ["Jingulu"] = "jig", ["Jiongnai Bunu"] = "pnu", ["Jirajara"] = "sai-jrj", ["Jirel"] = "jul", ["Jiru"] = "jrr", ["Jita"] = "jit", ["Jju"] = "kaj", ["Joba"] = "job", ["Jofotek-Bromnya"] = "jbr", ["Jola-Fonyi"] = "dyo", ["Jola-Kasa"] = "csk", ["Jonkor Bourmataguil"] = "jeu", ["Jordanian Sign Language"] = "jos", ["Jorá"] = "jor", ["Jowulu"] = "jow", ["Ju"] = "juu", ["Jukun Takum"] = "jbu", ["Tiếng Jumaytepeque"] = "nai-jum", ["Jumla Sign Language"] = "jus", ["Jumli"] = "jml", ["Jungle Inga"] = "inj", ["Juquila Mixe"] = "mxq", ["Jur Modo"] = "bex", ["Tiếng Juray"] = "juy", ["Jurúna"] = "jur", ["Jutiapa"] = "nai-jtp", ["Juwal"] = "mwb", ["Juxtlahuaca Mixtec"] = "vmc", ["Jwira-Pepesa"] = "jwi", ["Júma"] = "jua", ["Kaamba"] = "xku", ["Kaan"] = "ldl", ["Kaang Chin"] = "ckn", ["Kaansa"] = "gna", ["Kaapor Sign Language"] = "uks", ["Kaba"] = "ksp", ["Kabalai"] = "kvf", ["Kabatei"] = "xkp", ["Kabba-Laka"] = "lap", ["Kabishiana"] = "tup-kab", ["Kabola"] = "klz", ["Kabore One"] = "onk", ["Kabras"] = "lkb", ["Kaburi"] = "uka", ["Kabutra"] = "kbu", ["Tiếng Kabuverdianu"] = "kea", ["Kabwa"] = "cwa", ["Kabwari"] = "kcw", ["Tiếng Kachama-Ganjule"] = "kcx", ["Kachari"] = "xac", ["Kachi Koli"] = "gjk", ["Kacipo-Balesi"] = "koe", ["Kaco'"] = "xkk", ["Kadai"] = "kzd", ["Kadar"] = "kej", ["Kadara"] = "kad", ["Kadaru"] = "kdu", ["Kadiwéu"] = "kbc", ["Kado"] = "kdv", ["Kadugli"] = "xtc", ["Kaduo"] = "ktp", ["Kaera"] = "jka", ["Kafoa"] = "kpu", ["Kagan Kalagan"] = "kll", ["Kagate"] = "syw", ["Tiếng Kagayanen"] = "cgc", ["Kagoma"] = "kdm", ["Kagoro"] = "xkg", ["Kagulu"] = "kki", ["Kahe"] = "hka", ["Kahua"] = "agw", ["Kaian"] = "kct", ["Kaibobo"] = "kzb", ["Kaidipang"] = "kzp", ["Kaiep"] = "kbw", ["Kaikadi"] = "kep", ["Kaike"] = "kzq", ["Kaiku"] = "kkq", ["Kaimbulawa"] = "zka", ["Kaimbé"] = "xai", ["Kairak"] = "ckr", ["Kairiru"] = "kxa", ["Kairui-Midiki"] = "krd", ["Kais"] = "kzm", ["Kaivi"] = "kce", ["Kaiwá"] = "kgk", ["Kaiy"] = "tcq", ["Kajakse"] = "ckq", ["Kajali"] = "xkj", ["Kajaman"] = "kag", ["Kakabe"] = "kke", ["Kakanda"] = "kka", ["Tiếng Kaki Ae"] = "tbd", ["Kakihum"] = "kxe", ["Kako"] = "kkj", ["Kakwa"] = "keo", ["Kala"] = "kcl", ["Kala Lagaw Ya"] = "mwp", ["Kalaamaya"] = "lkm", ["Kalabakan"] = "kve", ["Kalabari"] = "ijn", ["Kalabra"] = "kzz", ["Kalagan"] = "kqe", ["Kalaktang Monpa"] = "kkf", ["Kalam"] = "kmh", ["Kalamsé"] = "knz", ["Kalanadi"] = "wkl", ["Kalanga"] = "kck", ["Kalapuya"] = "kyl", ["Kalarko"] = "kba", ["Kalasuri"] = "xme-kls", ["Kalenjin"] = "kln", ["Kalinago"] = "crb", ["Kalkatungu"] = "ktg", ["Kalkoti"] = "xka", ["Kalou"] = "ywa", ["Kaluli"] = "bco", ["Kalumpang"] = "kli", ["Kam"] = "kdx", ["Kamakan"] = "vkm", ["Kamang"] = "woi", ["Kamano"] = "kbq", ["Kamantan"] = "kci", ["Kamar"] = "keq", ["Kamara"] = "jmr", ["Kamarian"] = "kzx", ["Kamaru"] = "kgx", ["Kamarupi Prakrit"] = "inc-kam", ["Kamasa"] = "klp", ["Kamasau"] = "kms", ["Tiếng Kamayo"] = "kyk", ["Kamayurá"] = "kay", ["Kamba"] = "kam", ["Kambaira"] = "kyy", ["Tiếng Kambera"] = "xbr", ["Kamberataro"] = "kbv", ["Kamberau"] = "irx", ["Kambiwá"] = "xbw", ["Kami"] = "kmi", ["Kamkata-viri"] = "bsh", ["Kamo"] = "kcq", ["Kamoro"] = "kgq", ["Kamu"] = "xmu", ["Tiếng Kamula"] = "xla", ["Kamwe"] = "hig", ["Kanakuru"] = "kna", ["Kanamari"] = "knm", ["Kanashi"] = "xns", ["Kanasi"] = "soq", ["Kandas"] = "kqw", ["Kandawo"] = "gam", ["Kande"] = "kbs", ["Kang"] = "kyp", ["Kanga"] = "kcp", ["Kanggape"] = "igm", ["Kango"] = "kty", ["Kango-Sua"] = "kzy", ["Kangri"] = "xnr", ["Kaniet"] = "ktk", ["Kanikkaran"] = "kev", ["Kaningdon-Nindem"] = "kdp", ["Kaningi"] = "kzo", ["Kaningra"] = "knr", ["Kaninuwa"] = "wat", ["Kanite"] = "kmu", ["Kanjari"] = "kft", ["Kanju"] = "kbe", ["Tiếng Kankanaey"] = "kne", ["Kannada Kurumba"] = "kfi", ["Kanowit"] = "kxn", ["Kanoé"] = "kxo", ["Kansa"] = "ksk", ["Kantosi"] = "xkt", ["Kanu"] = "khx", ["Kanufi"] = "kni", ["Kanyok"] = "kny", ["Kao"] = "kax", ["Kaonde"] = "kqn", ["Kap"] = "ykm", ["Kapauri"] = "khp", ["Kapin"] = "tbx", ["Kapinawá"] = "xpn", ["Kapriman"] = "dju", ["Kaptiau"] = "kbi", ["Kapya"] = "klo", ["Tiếng Kaqchikel"] = "cak", ["Kara (New Guinea)"] = "leu", ["Kara (Tanzania)"] = "reg", ["Karadjeri"] = "gbd", ["Karaga Mandaya"] = "mry", ["Karami"] = "xar", ["Karamojong"] = "kdj", ["Karang"] = "kzr", ["Karanga"] = "kth", ["Karankawa"] = "zkk", ["Karas"] = "kgv", ["Karawa"] = "xrw", ["Kare (Africa)"] = "kbn", ["Kare (New Guinea)"] = "kmf", ["Tiếng Karekare"] = "kai", ["Karey"] = "kyd", ["Kari"] = "kbj", ["Karingani"] = "kgn", ["Karipuna"] = "kuq", ["Karipúna"] = "kgm", ["Karipúna Creole French"] = "kmv", ["Tiếng Kariri"] = "kzw", ["Tiếng Karitiâna"] = "ktn", ["Kariya"] = "kil", ["Kariyarra"] = "vka", ["Karkar-Yuri"] = "yuj", ["Karkin"] = "krb", ["Karko"] = "kko", ["Karnai"] = "bbv", ["Karo"] = "kxh", ["Karo Batak"] = "btx", ["Karok"] = "kyh", ["Karolanos"] = "kyn", ["Karon"] = "krx", ["Karon Dori"] = "kgw", ["Karore"] = "xkx", ["Karranga"] = "xrq", ["Karuwali"] = "rxw", ["Kasanga"] = "ccj", ["Kasem"] = "xsm", ["Kasiguranin"] = "ksn", ["Kaska"] = "kkz", ["Kaskean"] = "zsk", ["Kaskihá"] = "gva", ["Kassite"] = "und-kas", ["Kassonke"] = "kao", ["Kasua"] = "khs", ["Kataang"] = "kgd", ["Katabaga"] = "ktq", ["Katawixi"] = "xat", ["Katembri"] = "sai-kat", ["Kathlamet"] = "nai-kat", ["Kathoriya Tharu"] = "tkt", ["Kathu"] = "ykt", ["Katkari"] = "kfu", ["Katla"] = "kcr", ["Kato"] = "ktw", ["Katso"] = "kaf", ["Katukina"] = "knt", ["Kaulong"] = "pss", ["Kaur"] = "vkk", ["Kaure"] = "bpp", ["Tiếng Kaurna"] = "zku", ["Kauwera"] = "xau", ["Kawacha"] = "kcb", ["Kawaiisu"] = "xaw", ["Kawe"] = "kgb", ["Kawishana"] = "awd-kaw", ["Kaxararí"] = "ktx", ["Kaxuyana"] = "kbb", ["Kaya"] = "zra", ["Kayabí"] = "kyz", ["Kayagar"] = "kyt", ["Kayan"] = "pdu", ["Kayan Mahakam"] = "xay", ["Kayan River Kayan"] = "xkn", ["Tiếng Kalanguya"] = "kak", ["Kayardild"] = "gyd", ["Kayeli"] = "kzl", ["Kaytetye"] = "gbb", ["Kayupulau"] = "kzu", ["Kazukuru"] = "kzk", ["Ke'o"] = "xxk", ["Keak"] = "keh", ["Keapara"] = "khz", ["Kedah Malay"] = "meo", ["Kedang"] = "ksx", ["Keder"] = "kdy", ["Kehu"] = "khh", ["Kei"] = "kei", ["Keiga"] = "kec", ["Kein"] = "bmh", ["Keiyo"] = "eyo", ["Kela-Yela"] = "kel", ["Kelabit"] = "kzi", ["Keley-I Kallahan"] = "ify", ["Keliko"] = "kbo", ["Kelo"] = "xel", ["Kelon"] = "kyo", ["Kemak"] = "kem", ["Kembayan"] = "xem", ["Kemberano"] = "bzp", ["Kembra"] = "xkw", ["Kemezung"] = "dmo", ["Kemi Sami"] = "sjk", ["Kemiehua"] = "kfj", ["Kemtuik"] = "kmt", ["Kenaboi"] = "xbn", ["Kenati"] = "gat", ["Kendayan"] = "knx", ["Kendeje"] = "klf", ["Kendem"] = "kvm", ["Kenga"] = "kyq", ["Keningau Murut"] = "kxi", ["Keninjal"] = "knl", ["Kenswei Nsei"] = "ndb", ["Kenyan Sign Language"] = "xki", ["Kenyang"] = "ken", ["Kenyi"] = "lke", ["Keoru-Ahia"] = "xeu", ["Kepkiriwát"] = "kpn", ["Kepo'"] = "kuk", ["Kera"] = "ker", ["Kerak"] = "hhr", ["Kereho"] = "xke", ["Kerek"] = "krk", ["Kerewe"] = "ked", ["Kerewo"] = "kxz", ["Kerinci"] = "kvr", ["Tiếng Kerman"] = "xme-ker", ["Kesawai"] = "xes", ["Ketangalan"] = "kae", ["Kete"] = "kcv", ["Ketengban"] = "xte", ["Ketum"] = "ktt", ["Kewa"] = "kew", ["Keyagana"] = "kyg", ["Kgalagadi"] = "xkv", ["Khana"] = "ogo", ["Khandeshi"] = "khn", ["Khao"] = "xao", ["Kharam Naga"] = "kfw", ["Kharia Thar"] = "ksy", ["Khayo"] = "lko", ["Khe"] = "kqg", ["Khehek"] = "tlx", ["Khetrani"] = "xhe", ["Khezha Naga"] = "nkh", ["Khirwar"] = "kwx", ["Khisa"] = "kqm", ["Khlor"] = "llo", ["Khlula"] = "ykl", ["Khoibu Naga"] = "nkb", ["Khoini"] = "xkc", ["Kholok"] = "ktc", ["Tiếng Kholosi"] = "inc-kho", ["Khotanese"] = "kho", ["Khroskyabs"] = "jiq", ["Khumi Chin"] = "cnk", ["Khwe"] = "xuu", ["Kibala"] = "blv", ["Kibena"] = "bez", ["Kibet"] = "kie", ["Kibiri"] = "prm", ["Kichwa"] = "qwe-kch", ["Kikami"] = "kcu", ["Kilit"] = "xme-klt", ["Kilivila"] = "kij", ["Kiliwa"] = "klb", ["Kilmeri"] = "kih", ["Kim"] = "kia", ["Kimaama"] = "kig", ["Kimaragang"] = "kqr", ["Kimbu"] = "kiv", ["Kimki"] = "sbt", ["Kimré"] = "kqp", ["Kinabalian"] = "cbw", ["Kinalakna"] = "kco", ["Tiếng Kinaray-a"] = "krj", ["Kinga"] = "zga", ["Kings River Yokuts"] = "nai-kry", ["Kinikinao"] = "gqn", ["Tiếng Kinnaur"] = "kfk", ["Kinuku"] = "kkd", ["Kioko"] = "ues", ["Kiong"] = "kkm", ["Kiorr"] = "xko", ["Kipfokomo"] = "pkb", ["Kipsigis"] = "sgc", ["Kiput"] = "kyi", ["Kir-Balar"] = "kkr", ["Kire"] = "geb", ["Kirfi"] = "kks", ["Kirikiri"] = "kiy", ["Kirya-Konzel"] = "fkk", ["Kis"] = "kis", ["Kisa"] = "lks", ["Kisankasa"] = "kqh", ["Kisar"] = "kje", ["Kisi"] = "kiz", ["Kita Maninkakan"] = "mwk", ["Kitanemuk"] = "azc-ktn", ["Kitembo"] = "tbt", ["Kitja"] = "gia", ["Kitsai"] = "kii", ["Kiunum"] = "wei", ["Kla"] = "lda", ["Klamath-Modoc"] = "kla", ["Klao"] = "klu", ["Klias River Kadazan"] = "kqt", ["Ko"] = "fuj", ["Tiếng Koalib"] = "kib", ["Koasati"] = "cku", ["Koba"] = "kpd", ["Kobiana"] = "kcj", ["Kobol"] = "kgu", ["Kochila Tharu"] = "thq", ["Kodaku"] = "ksz", ["Kodeoha"] = "vko", ["Kodi"] = "kod", ["Kodia"] = "kwp", ["Koenoem"] = "kcs", ["Kofa"] = "kso", ["Kofei"] = "kpi", ["Kofyar"] = "kwl", ["Kohin"] = "kkx", ["Kohumono"] = "bcs", ["Koi"] = "kkt", ["Koireng"] = "nkd", ["Koitabu"] = "kqi", ["Koiwat"] = "kxt", ["Kui (Ấn Độ)"] = "kxu", ["Kok-Nar"] = "gko", ["Kok-Paponk"] = "okg", ["Kokata"] = "ktd", ["Koke"] = "kou", ["Koko-Bera"] = "kkp", ["Kokoda"] = "xod", ["Kokola"] = "kzn", ["Kokota"] = "kkk", ["Kol (Cameroon)"] = "biw", ["Kol (New Guinea)"] = "kol", ["Kola"] = "kvv", ["Kolbila"] = "klc", ["Kolibugan Subanon"] = "skn", ["Kolom"] = "klm", ["Koluwawa"] = "klx", ["Kom (India)"] = "kmm", ["Koma"] = "kmy", ["Komba"] = "kpf", ["Kombai"] = "tyn", ["Kombio"] = "xbi", ["Komering"] = "kge", ["Tiếng Komi-Yazva"] = "urj-kya", ["Kominimung"] = "xoi", ["Komo"] = "xom", ["Tiếng Komodo"] = "kvh", ["Kompane"] = "kvp", ["Komyandaret"] = "kzv", ["Kon Keu"] = "kkn", ["Konabéré"] = "bbo", ["Konai"] = "kxw", ["Konda"] = "knd", ["Konda-Dora"] = "kfc", ["Kondekor"] = "gau", ["Koneraw"] = "kdw", ["Konkomba"] = "xon", ["Konni"] = "kma", ["Kono (Guinea)"] = "knu", ["Kono (Nigeria)"] = "klk", ["Kono (Sierra Leone)"] = "kno", ["Konomala"] = "koa", ["Konomihu"] = "nai-knm", ["Konongo"] = "kcz", ["Konyak Naga"] = "nbe", ["Konyanka Maninka"] = "mku", ["Konzo"] = "koo", ["Kopar"] = "xop", ["Kopkaka"] = "opk", ["Korafe-Yegha"] = "kpr", ["Korak"] = "koz", ["Korana"] = "kqz", ["Korandje"] = "kcy", ["Korean Sign Language"] = "kvk", ["Koreguaje"] = "coe", ["Koresh-e Rostam"] = "okh", ["Korlai Creole Portuguese"] = "vkp", ["Koro (India)"] = "jkr", ["Koro (New Guinea)"] = "kxr", ["Koro (Vanuatu)"] = "krf", ["Koro (West Africa)"] = "kfo", ["Koromfé"] = "kfz", ["Koromira"] = "kqj", ["Koronadal Blaan"] = "bpr", ["Koroni"] = "xkq", ["Korop"] = "krp", ["Koropó"] = "xxr", ["Koroshi"] = "ktl", ["Korowai"] = "khe", ["Korubo"] = "xor", ["Korupun-Sela"] = "kpq", ["Tiếng Korwa"] = "kfp", ["Kosadle"] = "kiq", ["Kosarek Yale"] = "kkl", ["Kosena"] = "kze", ["Koshin"] = "kid", ["Kota (Gabon)"] = "koq", ["Kota (India)"] = "kfe", ["Kota Bangun Kutai Malay"] = "mqg", ["Kota Marudu Talantang"] = "grm", ["Kota Marudu Tinagas"] = "ktr", ["Kotafon Gbe"] = "kqk", ["Koti"] = "eko", ["Tiếng Kott"] = "zko", ["Kou"] = "snz", ["Kouya"] = "kyf", ["Kovai"] = "kqb", ["Kove"] = "kvc", ["Kowaki"] = "xow", ["Kowiai"] = "kwh", ["Koy Sanjaq Surat"] = "kqd", ["Koya"] = "kff", ["Koyaga"] = "kga", ["Koyo"] = "koh", ["Koyra Chiini"] = "khq", ["Koyukon"] = "koy", ["Kpagua"] = "kuw", ["Kpala"] = "kpl", ["Kpan"] = "kpk", ["Kpasam"] = "pbn", ["Kpati"] = "koc", ["Kpatili"] = "kym", ["Kpee"] = "cpo", ["Kpelle"] = "kpe", ["Kpessi"] = "kef", ["Kplang"] = "kph", ["Krache"] = "kye", ["Krahô"] = "xra", ["Krenak"] = "kqq", ["Kresh"] = "krs", ["Krevinian"] = "zkv", ["Kreye"] = "xre", ["Krikati-Timbira"] = "xri", ["Krim"] = "krm", ["Tiếng Kriol Úc"] = "rop", ["Krisa"] = "ksi", ["Kristang"] = "mcm", ["Krobu"] = "kxb", ["Krongo"] = "kgo", ["Kua"] = "tyu", ["Kua-nsi"] = "ykn", ["Kuamasi"] = "yku", ["Kuan"] = "uan", ["Kuanhua"] = "xnh", ["Kube"] = "kgf", ["Kubi"] = "kof", ["Kubo"] = "jko", ["Kubu"] = "kvb", ["Kucong"] = "lkc", ["Tiếng Kudiya"] = "kfg", ["Kudu-Camo"] = "kov", ["Kugama"] = "kow", ["Kugbo"] = "kes", ["Kugu-Muminh"] = "xmh", ["Kui (India)"] = "kxu", ["Kui (Indonesia)"] = "kvd", ["Kuijau"] = "dkr", ["Kuikúro"] = "kui", ["Kujarge"] = "vkj", ["Kuk"] = "kfn", ["Kukatja"] = "kux", ["Kukele"] = "kez", ["Kukkuzi"] = "urj-kuk", ["Kuku-Mangk"] = "xmq", ["Kuku-Mu'inh"] = "xmp", ["Kuku-Thaypan"] = "typ", ["Kuku-Ugbanh"] = "ugb", ["Kuku-Uwanh"] = "uwa", ["Kuku-Yalanji"] = "gvn", ["Kula"] = "tpg", ["Kulaal"] = "glj", ["Kulere"] = "kul", ["Kulfa"] = "kxj", ["Kulina"] = "xpk", ["Kulisusu"] = "vkl", ["Kulon"] = "uon", ["Kulung"] = "kle", ["Kumak"] = "nee", ["Kumalu"] = "ksl", ["Kumam"] = "kdi", ["Kuman"] = "kue", ["Kumaoni"] = "kfy", ["Kumba"] = "ksm", ["Kumbainggar"] = "kgs", ["Kumbaran"] = "wkb", ["Tiếng Kumeyaay"] = "nai-kum", ["Kumhali"] = "kra", ["Kumu"] = "kmw", ["Kumukio"] = "kuo", ["Tiếng Kuna"] = "cuk", ["Kunama"] = "kun", ["Kunbarlang"] = "wlg", ["Kunda"] = "kdn", ["Kunduvadi"] = "wku", ["Kung"] = "kfl", ["Kungarakany"] = "ggk", ["Kungardutyi"] = "gdt", ["Kunggari"] = "kgl", ["Kungkari"] = "lku", ["Kuni"] = "kse", ["Kuni-Boazi"] = "kvg", ["Kunimaipa"] = "kup", ["Kunja"] = "pep", ["Kunjen"] = "kjn", ["Kunyi"] = "njx", ["Kunza"] = "kuz", ["Kuo"] = "xuo", ["Kuot"] = "kto", ["Kupa"] = "kug", ["Kupang Malay"] = "mkn", ["Kupia"] = "key", ["Kupsabiny"] = "kpz", ["Kur"] = "kuv", ["Kura Ede Nago"] = "nqk", ["Kurama"] = "krh", ["Kuranko"] = "knk", ["Kuri"] = "nbn", ["Kuria"] = "kuj", ["Kurichiya"] = "kfh", ["Kurmukar"] = "kfv", ["Kurnai"] = "unn", ["Kurrama"] = "vku", ["Kurti"] = "ktm", ["Kurtjar"] = "gdj", ["Kurudu"] = "kjr", ["Kurukh"] = "kru", ["Kuruáya"] = "kyr", ["Kusaal"] = "kus", ["Kusaghe"] = "ksg", ["Kushi"] = "kuh", ["Kustenau"] = "awd-kus", ["Kusu"] = "ksv", ["Kusunda"] = "kgg", ["Kutang Ghale"] = "ght", ["Tiếng Ktunaxa"] = "kut", ["Kutep"] = "kub", ["Kuthant"] = "xut", ["Kutto"] = "kpa", ["Kutu"] = "kdc", ["Kuturmi"] = "khj", ["Kuuk Thaayorre"] = "thd", ["Kuuk Yak"] = "uky", ["Kuuku-Ya'u"] = "kuy", ["Kuvale"] = "olu", ["Kuwaa"] = "blh", ["Kuwaataay"] = "cwt", ["Kuwani"] = "paa-kwn", ["Tiếng Kven"] = "fkv", ["Kwa'"] = "bko", ["Kwaami"] = "ksq", ["Kwadi"] = "kwz", ["Kwaio"] = "kwd", ["Kwaja"] = "kdz", ["Kwak"] = "kwq", ["Kwakum"] = "kwu", ["Kwalhioqua-Tlatskanai"] = "qwt", ["Kwama"] = "kmq", ["Kwambi"] = "kwm", ["Kwamera"] = "tnk", ["Kwami"] = "ktf", ["Kwamtim One"] = "okk", ["Kwang"] = "kvi", ["Kwanga"] = "kwj", ["Kwangali"] = "kwn", ["Kwanja"] = "knp", ["Kwanka"] = "bij", ["Kwara'ae"] = "kwf", ["Kwasio"] = "nmg", ["Kwaya"] = "kya", ["Kwaza"] = "xwa", ["Kwegu"] = "xwg", ["Kwer"] = "kwr", ["Kwerba"] = "kwe", ["Kwerba Mamberamo"] = "xwr", ["Kwere"] = "cwe", ["Kwerisa"] = "kkb", ["Kwese"] = "kws", ["Kwesten"] = "kwt", ["Kwini"] = "gww", ["Kwinsu"] = "kuc", ["Tiếng Kwinti"] = "kww", ["Kwoma"] = "kmo", ["Kwomtari"] = "kwo", ["Kyak"] = "bka", ["Kyaka"] = "kyc", ["Kyan-Karyaw Naga"] = "nqq", ["Kyenele"] = "kql", ["Kyenga"] = "tye", ["Kyerung"] = "kgy", ["Kélé"] = "keb", ["Kómnzo"] = "paa-kom", ["La'bi"] = "lbi", ["Laal"] = "gdm", ["Tiếng Laalaa"] = "cae", ["Laba"] = "lau", ["Label"] = "lbb", ["Labir"] = "jku", ["Labo"] = "mwi", ["Labo Phowa"] = "ypb", ["Labu"] = "lbu", ["Labuk-Kinabatangan Kadazan"] = "dtb", ["Lacandon"] = "lac", ["Lachi"] = "lbt", ["Lachiguiri Zapotec"] = "zpa", ["Lachixío Zapotec"] = "zpl", ["Ladji-Ladji"] = "llj", ["Laeko-Libuat"] = "lkl", ["Lafofa"] = "laf", ["Laghu"] = "lgb", ["Laghuu"] = "lgh", ["Lagwan"] = "kot", ["Laha (Indonesia)"] = "lhh", ["Laha (Vietnam)"] = "lha", ["Lahanan"] = "lhn", ["Lahta Karen"] = "kvt", ["Lahu Shi"] = "lhi", ["Lahul Lohar"] = "lhl", ["Lai"] = "cnh", ["Laimbue"] = "lmx", ["Laitu Chin"] = "clj", ["Laiyolo"] = "lji", ["Laka"] = "lak", ["Tiếng Lakalei"] = "lka", ["Lake Miwok"] = "lmw", ["Lakha"] = "lkh", ["Laki"] = "lki", ["Lakkia"] = "lbc", ["Lakon"] = "lkn", ["Lakondê"] = "lkd", ["Lakota Dida"] = "dic", ["Lala (New Guinea)"] = "nrz", ["Lala (South Africa)"] = "bnt-lal", ["Lala-Bisa"] = "leb", ["Lala-Roba"] = "lla", ["Lalana Chinantec"] = "cnl", ["Tiếng Bạch Lạp Mã"] = "lay", ["Lamaholot"] = "slp", ["Lamalera"] = "lmr", ["Lamang"] = "hia", ["Lamatuka"] = "lmq", ["Lamba"] = "lam", ["Lambichhong"] = "lmh", ["Lambya"] = "lai", ["Lame"] = "bma", ["Lamenu"] = "lmu", ["Lamet"] = "lbn", ["Lamja-Dengsa-Tola"] = "ldh", ["Lamkang"] = "lmk", ["Lamma"] = "lev", ["Lamnso'"] = "lns", ["Lamogai"] = "lmg", ["Lampung Api"] = "ljp", ["Lamu"] = "llh", ["Lamu-Lamu"] = "lby", ["Lanas Lobu"] = "ruu", ["Landoma"] = "ldm", ["Lang'e"] = "yne", ["Langam"] = "lnm", ["Langbashe"] = "lna", ["Langi"] = "lag", ["Langnian Buyang"] = "yln", ["Lango (Sudan)"] = "lno", ["Lango (Uganda)"] = "laj", ["Lanima"] = "lnw", ["Lao Naga"] = "nlq", ["Laopang"] = "lbg", ["Laos Sign Language"] = "lso", ["Lapaguía-Guivini Zapotec"] = "ztl", ["Lapine"] = "art-lap", ["Lapuyan Subanun"] = "laa", ["Laragia"] = "lrg", ["Larantuka Malay"] = "lrt", ["Lardil"] = "lbz", ["Larevat"] = "lrv", ["Larike-Wakasihu"] = "alo", ["Laro"] = "lro", ["Larteh"] = "lar", ["Laru"] = "lan", ["Lasgerdi"] = "lsa", ["Lasi"] = "lss", ["Latu"] = "ltu", ["Latvian Sign Language"] = "lsl", ["Lau"] = "llu", ["Laua"] = "luf", ["Lauan"] = "llx", ["Lauje"] = "law", ["Laura"] = "lur", ["Laurentian"] = "lre", ["Tiếng Lutuv"] = "clt", ["Lavatbura-Lamusong"] = "lbv", ["Lawangan"] = "lbx", ["Tiếng Lawi"] = "lvi", ["Lawu"] = "lwu", ["Lawunuia"] = "tgi", ["Layakha"] = "lya", ["Laze"] = "tbq-laz", ["Lealao Chinantec"] = "cle", ["Leco"] = "lec", ["Ledo Kaili"] = "lew", ["Leelau"] = "ldk", ["Lefa"] = "lfa", ["Lega-Mwenga"] = "lgm", ["Lega-Shabunda"] = "lea", ["Legbo"] = "agb", ["Legenyem"] = "lcc", ["Lehali"] = "tql", ["Lehalurup"] = "urr", ["Leinong Naga"] = "lzn", ["Leipon"] = "lek", ["Lela"] = "dri", ["Lelak"] = "llk", ["Lele (Chad)"] = "lln", ["Lele (Congo)"] = "lel", ["Lele (Guinea)"] = "llc", ["Lele (New Guinea)"] = "lle", ["Lelemi"] = "lef", ["Lelepa"] = "lpa", ["Lembena"] = "leq", ["Lemerig"] = "lrz", ["Lemio"] = "lei", ["Lemolang"] = "ley", ["Lemoro"] = "ldj", ["Lenakel"] = "tnl", ["Lendu"] = "led", ["Lengilu"] = "lgi", ["Lengo"] = "lgr", ["Lengola"] = "lej", ["Lenje"] = "leh", ["Lenkau"] = "ler", ["Lenyima"] = "ldg", ["Tiếng León"] = "roa-leo", ["Lepki"] = "lpe", ["Lere"] = "gnh", ["Lese"] = "les", ["Lesing-Gelimi"] = "let", ["Letemboi"] = "nms", ["Leti (Cameroon)"] = "leo", ["Leti (Indonesia)"] = "lti", ["Levuka"] = "lvu", ["Lewo"] = "lww", ["Lewo Eleng"] = "lwe", ["Lewotobi"] = "lwt", ["Leyigha"] = "ayi", ["Lhokpu"] = "lhp", ["Li'o"] = "ljl", ["Liana-Seti"] = "ste", ["Liangmai Naga"] = "njn", ["Liberia Kpelle"] = "xpe", ["Liberian Kreyol"] = "lir", ["Libinza"] = "liz", ["Libon Bikol"] = "lbl", ["Liburnian"] = "xli", ["Libyan Sign Language"] = "lbs", ["Ligbi"] = "lig", ["Ligenza"] = "lgz", ["Lihir"] = "lih", ["Lika"] = "lik", ["Liki"] = "lio", ["Likila"] = "lie", ["Likuba"] = "kxx", ["Likum"] = "lib", ["Likwala"] = "kwc", ["Lilau"] = "lll", ["Limassa"] = "bme", ["Limbu"] = "lif", ["Limbum"] = "lmp", ["Limi"] = "ylm", ["Limilngan"] = "lmc", ["Tiếng Lindu"] = "klw", ["Linear A"] = "lab", ["Tiếng Lâm Cao"] = "onb", ["Lingkhim"] = "lii", ["Lingua Franca Nova"] = "lfn", ["Linngithigh"] = "lnj", ["Tiếng Lipan"] = "apl", ["Lipo"] = "lpo", ["Lisabata-Nuniali"] = "lcs", ["Lisela"] = "lcl", ["Lish"] = "lsh", ["Lishán Didán"] = "trg", ["Literary Chinese"] = "lzh", ["Lithuanian Sign Language"] = "lls", ["Little Swanport"] = "aus-lsw", ["Litzlitz"] = "lzl", ["Lizu"] = "sit-liz", ["Lo-Toga"] = "lht", ["Loarki"] = "lrk", ["Lobala"] = "loq", ["Lobi"] = "lob", ["Lodhi"] = "lbm", ["Logba"] = "lgq", ["Logo"] = "log", ["Logol"] = "lof", ["Logooli"] = "rag", ["Logorik"] = "liu", ["Lokaa"] = "yaz", ["Loko"] = "lok", ["Lokoya"] = "lky", ["Lola"] = "lcd", ["Lolak"] = "llq", ["Lole"] = "llg", ["Lolo"] = "llb", ["Loloda"] = "loa", ["Lolopo"] = "ycl", ["Loma"] = "lom", ["Lomaiviti"] = "lmv", ["Lomakka"] = "loi", ["Lomavren"] = "rmi", ["Lombi"] = "lmi", ["Lombo"] = "loo", ["Lomwe"] = "ngl", ["Loncong"] = "lce", ["Long Phuri Naga"] = "lpn", ["Long Wat"] = "ttw", ["Longgu"] = "lgu", ["Longto"] = "wok", ["Longuda"] = "lnu", ["Loniu"] = "los", ["Lonwolwol"] = "crc", ["Loo"] = "ldo", ["Lopa"] = "lop", ["Lope"] = "yiu", ["Lopi"] = "lov", ["Lopit"] = "lpx", ["Lorang"] = "lrn", ["Lorediakarkar"] = "lnn", ["Tiếng Lorrain"] = "roa-lor", ["Lote"] = "uvl", ["Lotha Naga"] = "njh", ["Lotud"] = "dtr", ["Lotuko"] = "lot", ["Loun"] = "lox", ["Loup A"] = "xlo", ["Loup B"] = "xlb", ["Lovono"] = "vnk", ["Lower Burdekin"] = "xbb", ["Lower Chehalis"] = "cea", ["Lower Grand Valley Dani"] = "dni", ["Lower Nossob"] = "nsb", ["Lower Southern Aranda"] = "axl", ["Lower Ta'oih"] = "tto", ["Tiếng Hạ Tanana"] = "taa", ["Lowland Oaxaca Chontal"] = "clo", ["Lowland Tarahumara"] = "tac", ["Loxicha Zapotec"] = "ztp", ["Lozi"] = "loz", ["Luang"] = "lex", ["Luba-Kasai"] = "lua", ["Lubila"] = "kcc", ["Lubu"] = "lcf", ["Lubuagan Kalinga"] = "knb", ["Luchazi"] = "lch", ["Tiếng Lucumí"] = "luq", ["Lufu"] = "ldq", ["Lugbara"] = "lgg", ["Luguru"] = "ruf", ["Luhu"] = "lcq", ["Tiếng Luhya"] = "luy", ["Luimbi"] = "lum", ["Luiseño"] = "lui", ["Lukpa"] = "dop", ["Lule"] = "ule", ["Lule Sami"] = "smj", ["Lumba-Yakkha"] = "luu", ["Lumbee"] = "lmz", ["Lumbu"] = "lup", ["Lumun"] = "lmd", ["Lun Bawang"] = "lnd", ["Luna"] = "luj", ["Lunanakha"] = "luk", ["Lunda"] = "lun", ["Lungga"] = "lga", ["Luo"] = "luo", ["Luopohe Hmong"] = "hml", ["Luri (Nigeria)"] = "ldd", ["Lusengo"] = "lse", ["Lusi"] = "khl", ["Lusitanian"] = "xls", ["Lutachoni"] = "lts", ["Lutos"] = "ndy", ["Luvale"] = "lue", ["Luwati"] = "luv", ["Luwo"] = "lwo", ["Luyana"] = "lyn", ["Lwalu"] = "lwa", ["Lwel"] = "bnt-lwl", ["Tiếng Lycia"] = "xlc", ["Lyélé"] = "lee", ["Láadan"] = "ldn", ["Láá Láá Bwamu"] = "bwj", ["Ma"] = "msj", ["Ma Manda"] = "skc", ["Ma'di"] = "mhi", ["Ma'ya"] = "slz", ["Tiếng Maay"] = "ymm", ["Maba"] = "mqa", ["Mabaale"] = "mmz", ["Tiếng Mabaan"] = "mfz", ["Mabaka Valley Kalinga"] = "kkg", ["Mabire"] = "muj", ["Maca"] = "mca", ["Macaguaje"] = "mcl", ["Macaguán"] = "mbn", ["Macanese"] = "mzs", ["Macau Pidgin Portuguese"] = "crp-mpp", ["Machame"] = "jmc", ["Machiguenga"] = "mcb", ["Machinere"] = "mpd", ["Machinga"] = "mvw", ["Macoris"] = "nai-mac", ["Macuna"] = "myy", ["Mada (Cameroon)"] = "mxu", ["Mada (Nigeria)"] = "mda", ["Madagascar Sign Language"] = "mzc", ["Madak"] = "mmx", ["Maden"] = "xmx", ["Madhi Madhi"] = "dmd", ["Madi"] = "grg", ["Madngele"] = "zml", ["Madukayang Kalinga"] = "kmd", ["Mae"] = "mme", ["Maek"] = "hmk", ["Maeng Itneg"] = "itt", ["Mafa"] = "maf", ["Mafea"] = "mkv", ["Mag-Anchi Ayta"] = "sgb", ["Mag-Indi Ayta"] = "blx", ["Magahat"] = "mtw", ["Tiếng Magaha"] = "mag", ["Magdalena Peñasco Mixtec"] = "xtm", ["Magiyi"] = "gmg", ["Magoma"] = "gmx", ["Magɨ"] = "gkd", ["Mahasu Pahari"] = "bfz", ["Mahican"] = "mjy", ["Mahongwe"] = "mhb", ["Mahou"] = "mxx", ["Maia"] = "sks", ["Maiadomu"] = "mzz", ["Maiani"] = "tnh", ["Maii"] = "mmm", ["Mailu"] = "mgu", ["Maindo"] = "cwb", ["Mairasi"] = "zrs", ["Maisin"] = "mbq", ["Maiwa (Indonesia)"] = "wmm", ["Maiwa (New Guinea)"] = "mti", ["Maiwala"] = "mum", ["Majang"] = "mpe", ["Majera"] = "xmj", ["Tiếng Majhi"] = "mjz", ["Majhwar"] = "mmj", ["Mak (China)"] = "mkg", ["Mak (Nigeria)"] = "pbl", ["Makaa"] = "mcp", ["Makah"] = "myh", ["Makalero"] = "mjb", ["Makasae"] = "mkz", ["Tiếng Makassar"] = "mak", ["Makassar Malay"] = "mfp", ["Makayam"] = "aup", ["Makhuwa"] = "vmw", ["Makhuwa-Marrevone"] = "xmc", ["Makhuwa-Meetto"] = "mgh", ["Makhuwa-Moniga"] = "mhm", ["Makhuwa-Saka"] = "xsq", ["Makhuwa-Shirima"] = "vmk", ["Maklew"] = "mgf", ["Makolkol"] = "zmh", ["Makonde"] = "kde", ["Maku"] = "xak", ["Maku'a"] = "lva", ["Makuri Naga"] = "jmn", ["Makuráp"] = "mpu", ["Makwe"] = "ymk", ["Makyan Naga"] = "umn", ["Mal"] = "mlf", ["Mal Paharia"] = "mkb", ["Mala (New Guinea)"] = "ped", ["Mala (Nigeria)"] = "ruy", ["Mala Malasar"] = "ima", ["Malaccan Creole Malay"] = "ccm", ["Malalamai"] = "mmt", ["Malalí"] = "sai-mal", ["Malango"] = "mln", ["Malankuravan"] = "mjo", ["Malapandaram"] = "mjp", ["Malaryan"] = "mjq", ["Malas"] = "mkr", ["Malasanga"] = "mqz", ["Malasar"] = "ymr", ["Malavedan"] = "mjr", ["Malawi Lomwe"] = "lon", ["Malawian Sign Language"] = "lws", ["Malayic Dayak"] = "xdy", ["Malaynon"] = "mlz", ["Malaysian Sign Language"] = "xml", ["Malba Birifor"] = "bfo", ["Male"] = "mdc", ["Tiếng Malecite-Passamaquoddy"] = "pqm", ["Maleu-Kilenge"] = "mgl", ["Malfaxal"] = "mlx", ["Malgana"] = "vml", ["Malgbe"] = "mxf", ["Mali"] = "gcc", ["Malibu"] = "sai-mlb", ["Malila"] = "mgq", ["Malimba"] = "mzd", ["Malimpung"] = "mli", ["Malinaltepec Tlapanec"] = "tcf", ["Malol"] = "mbk", ["Maltese Sign Language"] = "mdl", ["Malua Bay"] = "mll", ["Malvi"] = "mup", ["Maléku Jaíka"] = "gut", ["Mam"] = "mam", ["Mama"] = "mma", ["Mamaa"] = "mhf", ["Mamaindé"] = "wmd", ["Mamanwa"] = "mmn", ["Mamara Senoufo"] = "myk", ["Mamasa"] = "mqj", ["Mambae"] = "mgm", ["Mambai"] = "mcs", ["Mamboru"] = "mvd", ["Mambwe-Lungu"] = "mgr", ["Mamuju"] = "mqx", ["Mamulique"] = "emm", ["Mamusi"] = "kdf", ["Mamvu"] = "mdi", ["Man Met"] = "mml", ["Manado Malay"] = "xmm", ["Manam"] = "mva", ["Manambu"] = "mle", ["Manangba"] = "nmm", ["Manangkari"] = "znk", ["Manao"] = "awd-man", ["Manda (Australia)"] = "zma", ["Manda (Tanzania)"] = "mgs", ["Tiếng Mandahuaca"] = "mht", ["Mandaic"] = "mid", ["Mandailing Batak"] = "btm", ["Mandalorian"] = "art-man", ["Mandan"] = "mhq", ["Mandandanyi"] = "zmk", ["Mandar"] = "mdr", ["Mandari"] = "mqu", ["Mandeali"] = "mjl", ["Mander"] = "mqr", ["Mandingo"] = "man", ["Mandjak"] = "mfv", ["Mandobo Atas"] = "aax", ["Mandobo Bawah"] = "bwp", ["Manem"] = "jet", ["Mangala"] = "mem", ["Mangarayi"] = "mpc", ["Mangarevan"] = "mrv", ["Mangayat"] = "myj", ["Mangbetu"] = "mdj", ["Mangbutu"] = "mdk", ["Mangerr"] = "zme", ["Mangga Buang"] = "mmo", ["Mango"] = "mge", ["Mangole"] = "mqc", ["Mangseng"] = "mbh", ["Manigri-Kambolé Ede Nago"] = "xkb", ["Manikion"] = "mnx", ["Manipa"] = "mqp", ["Mankiyali"] = "nlm", ["Manna-Dora"] = "mju", ["Tiếng Mannan"] = "mjv", ["Manombai"] = "woo", ["Tiếng Mansaka"] = "msk", ["Mansoanka"] = "msw", ["Manta"] = "myg", ["Mantsi"] = "nty", ["Manusela"] = "wha", ["Manya"] = "mzj", ["Manyawa"] = "mny", ["Manza"] = "mzv", ["Mao Naga"] = "nbi", ["Mape"] = "mlh", ["Mapena"] = "mnm", ["Mapia"] = "mpy", ["Mapidian"] = "mpw", ["Mapos Buang"] = "bzh", ["Mapoyo"] = "mcg", ["Mapun"] = "sjm", ["Mara"] = "mec", ["Mara Chin"] = "mrh", ["Marachi"] = "lri", ["Maraghei"] = "vmh", ["Maragus"] = "mrs", ["Maram Naga"] = "nma", ["Marama"] = "lrm", ["Tiếng Maranao"] = "mrw", ["Maranungku"] = "zmr", ["Mararit"] = "mgb", ["Maratino"] = "sai-mar", ["Marau"] = "mvr", ["Marawan"] = "awd-mar", ["Marba"] = "mpg", ["Marenje"] = "vmr", ["Marfa"] = "mvu", ["Margany"] = "zmc", ["Marghi South"] = "mfm", ["Margi"] = "mrt", ["Maria"] = "mds", ["Mariaté"] = "awd-mrt", ["Tiếng Maricopa"] = "mrc", ["Maridan"] = "zmd", ["Maridjabin"] = "zmj", ["Marik"] = "dad", ["Marimanindji"] = "zmm", ["Marind"] = "mrz", ["Maring"] = "mbw", ["Maring Naga"] = "nng", ["Maringarr"] = "zmt", ["Marino"] = "mrb", ["Mariri"] = "mqi", ["Maritime Sign Language"] = "nsr", ["Maritsauá"] = "msp", ["Mariyedi"] = "zmy", ["Marka"] = "rkm", ["Markweeta"] = "enb", ["Maroon Spirit Language"] = "cpe-mar", ["Marovo"] = "mvo", ["Marrgu"] = "mhg", ["Marriammu"] = "xru", ["Marrithiyel"] = "mfr", ["Marrucinian"] = "umc", ["Marsian"] = "ims", ["Martha's Vineyard Sign Language"] = "mre", ["Marti Ke"] = "zmg", ["Martu Wangka"] = "mpj", ["Tiếng Martuthunira"] = "vma", ["Marúbo"] = "mzr", ["Masaba"] = "myx", ["Masadiit Itneg"] = "tis", ["Masakará"] = "sai-msk", ["Masalit"] = "mls", ["Masana"] = "mcn", ["Masbate Sorsogon"] = "bks", ["Tiếng Masbatenyo"] = "msb", ["Mashco Piro"] = "cuj", ["Mashi"] = "mho", ["Masimasi"] = "ism", ["Masiwang"] = "bnf", ["Maskelynes"] = "klv", ["Maslam"] = "msv", ["Masmaje"] = "mes", ["Massachusett"] = "wam", ["Massalat"] = "mdg", ["Massep"] = "mvs", ["Matagalpa"] = "mtn", ["Tiếng Matal"] = "mfh", ["Matanawi"] = "sai-mat", ["Matbat"] = "xmt", ["Matengo"] = "mgv", ["Matepi"] = "mqe", ["Matigsalug Manobo"] = "mbt", ["Matipuhy"] = "mzo", ["Matlatzinca"] = "mat", ["Mato"] = "met", ["Mato Grosso Arára"] = "axg", ["Matsés"] = "mcf", ["Mattole"] = "mvb", ["Matukar"] = "mjk", ["Matumbi"] = "mgw", ["Matya Samo"] = "stj", ["Matís"] = "mpq", ["Maung"] = "mph", ["Tiếng Creole Mauritius"] = "mfe", ["Mauritian Sign Language"] = "lsy", ["Mauwake"] = "mhl", ["Mawa"] = "mcw", ["Mawak"] = "mjj", ["Mawan"] = "mcz", ["Mawayana"] = "mzx", ["Mawchi"] = "mke", ["Mawes"] = "mgk", ["Maxakalí"] = "mbl", ["Maxi Gbe"] = "mxl", ["Maya Samo"] = "sym", ["Mayaguduna"] = "xmy", ["Mayangna"] = "yan", ["Mayawali"] = "yxa", ["Maybrat"] = "ayz", ["Mayeka"] = "myc", ["Mayi-Thakurti"] = "xyt", ["Maykulan"] = "mnt", ["Maynas"] = "sai-mys", ["Mayo"] = "mfy", ["Mayogo"] = "mdm", ["Mayoyao Ifugao"] = "ifu", ["Maypure"] = "awd-mpr", ["Mazagway"] = "dkx", ["Mazaltepec Zapotec"] = "zpy", ["Mazatlán Mazatec"] = "vmz", ["Mazatlán Mixe"] = "mzl", ["Mba"] = "mfc", ["Mbala"] = "mdp", ["Mbalanhu"] = "lnb", ["Mbandja"] = "zmz", ["Mbangala"] = "mxg", ["Mbangi"] = "mgn", ["Mbangwe"] = "zmn", ["Mbara (Australia)"] = "mvl", ["Mbara (Chad)"] = "mpk", ["Mbariman-Gudhinma"] = "zmv", ["Mbati"] = "mdn", ["Mbato"] = "gwa", ["Mbay"] = "myb", ["Mbe"] = "mfo", ["Mbe'"] = "mtk", ["Mbelime"] = "mql", ["Mbere"] = "mdt", ["Mbesa"] = "zms", ["Mbiywom"] = "aus-mbi", ["Mbo (Cameroon)"] = "mbo", ["Mbo (Congo)"] = "zmw", ["Mboi"] = "moi", ["Mboko"] = "mdu", ["Mbole"] = "mdq", ["Mbonga"] = "xmb", ["Mbongno"] = "bgu", ["Mbosi"] = "mdw", ["Mbowe"] = "mxo", ["Mbre"] = "mka", ["Mbu'"] = "muc", ["Mbudum"] = "xmd", ["Mbugu"] = "mhd", ["Mbugwe"] = "mgz", ["Mbuko"] = "mqb", ["Mbukushu"] = "mhw", ["Mbula"] = "mna", ["Mbula-Bwazza"] = "mbu", ["Mbule"] = "mlb", ["Mbulungish"] = "mbv", ["Mbum"] = "mdd", ["Mbunda"] = "mck", ["Mbunga"] = "mgy", ["Mburku"] = "bbt", ["Mbuun"] = "zmp", ["Mbwela"] = "mfu", ["Mea"] = "meg", ["Mebu"] = "mjn", ["Mecayapan Nahuatl"] = "nhx", ["Medebur"] = "mjm", ["Medefaidrin"] = "dmf", ["Media Lengua"] = "mue", ["Mednyj Aleut"] = "mud", ["Mefele"] = "mfj", ["Megam"] = "mef", ["Mehek"] = "nux", ["Mehináku"] = "mmh", ["Mekeo"] = "mek", ["Mekmek"] = "mvk", ["Mekwei"] = "msf", ["Mekéns"] = "skf", ["Mel-Khaonh"] = "hkn", ["Mele-Fila"] = "mxe", ["Tiếng Melo"] = "mfx", ["Melpa"] = "med", ["Mendalam Kayan"] = "xkd", ["Mendankwe-Nkwen"] = "mfd", ["Mengaka"] = "xmg", ["Mengen"] = "mee", ["Menien"] = "sai-men", ["Menka"] = "mea", ["Tiếng Menominee"] = "mez", ["Tiếng Mentawai"] = "mwv", ["Menya"] = "mcr", ["Meoswar"] = "mvx", ["Mer"] = "mnu", ["Meramera"] = "mxm", ["Merei"] = "lmb", ["Merey"] = "meq", ["Merlav"] = "mrm", ["Meroitic"] = "xmr", ["Meru"] = "mer", ["Tiếng Mesaka"] = "iyo", ["Mese"] = "mci", ["Mesme"] = "zim", ["Mesmes"] = "mys", ["Mesqan"] = "mvz", ["Messapic"] = "cms", ["Meta'"] = "mgo", ["Metlatónoc Mixtec"] = "mxv", ["Mewari"] = "mtr", ["Mewati"] = "wtm", ["Mexican Sign Language"] = "mfs", ["Meyah"] = "mej", ["Mezontla Popoloca"] = "pbe", ["Tiếng Meänkieli"] = "fit", ["Mfinu"] = "zmf", ["Mfumte"] = "nfu", ["Mgbo"] = "gmz", ["Mian"] = "mpt", ["Miani"] = "pla", ["Micha"] = "yiq", ["Michif"] = "crg", ["Michigamea"] = "cmm", ["Michoacán Nahuatl"] = "ncl", ["Mid Grand Valley Dani"] = "dnt", ["Mid-Southern Banda"] = "bjo", ["Middle Assamese"] = "inc-mas", ["Middle Bengali"] = "inc-mbn", ["Middle Cornish"] = "cnx", ["Middle Gujarati"] = "inc-mgu", ["Middle Kannada"] = "dra-mkn", ["Middle Median"] = "xme-mid", ["Middle Newar"] = "nwx", ["Middle Norwegian"] = "gmq-mno", ["Middle Oriya"] = "inc-mor", ["Middle Watut"] = "mpl", ["Tiếng Wales trung đại"] = "wlm", ["Midob"] = "mei", ["Migaama"] = "mmy", ["Migabac"] = "mpp", ["Miji"] = "sjl", ["Miju"] = "mxj", ["Mikasuki"] = "mik", ["Milang"] = "und-mil", ["Mili"] = "ymh", ["Millcayac"] = "sai-mil", ["Miltu"] = "mlj", ["Miluk"] = "iml", ["Milyan"] = "imy", ["Mimi of Decorse"] = "und-mmd", ["Mimi of Nachtigal"] = "und-mmn", ["Mina"] = "hna", ["Minaean"] = "inm", ["Minang"] = "xrg", ["Tiếng Minangkabau"] = "min", ["Minanibai"] = "mcv", ["Minaveha"] = "mvn", ["Minderico"] = "drc", ["Mindiri"] = "mpn", ["Mingang Doso"] = "mko", ["Mingo"] = "iro-min", ["Minica Huitoto"] = "hto", ["Minidien"] = "wii", ["Minigir"] = "vmg", ["Minjungbal"] = "xjb", ["Minkin"] = "xxm", ["Minoan"] = "omn", ["Minokok"] = "mqq", ["Miraya Bikol"] = "rbl", ["Mire"] = "mvh", ["Mirgan"] = "zrg", ["Miriti"] = "mmv", ["Miriwoong Sign Language"] = "rsm", ["Miriwung"] = "mep", ["Mirpur Panjabi"] = "pmu", ["Misantla Totonac"] = "tlc", ["Miship"] = "mjs", ["Misima-Paneati"] = "mpx", ["Mising"] = "mrg", ["Tiếng Miskito"] = "miq", ["Mitla Zapotec"] = "zaw", ["Mitlatongo Mixtec"] = "vmm", ["Mittu"] = "mwu", ["Mituku"] = "zmq", ["Miu"] = "mpo", ["Miwa"] = "vmi", ["Mixed Great Andamanese"] = "gac", ["Mixifore"] = "mfg", ["Mixtepec Mixtec"] = "mix", ["Mixtepec Zapotec"] = "zpm", ["Miya"] = "mkf", ["Miyobe"] = "soy", ["Mlahsö"] = "lhs", ["Mlap"] = "kja", ["Mlomp"] = "mlo", ["Mmaala"] = "mmu", ["Mmani"] = "buy", ["Mmen"] = "bfm", ["Mo"] = "wkd", ["Mo'da"] = "gbn", ["Moabite"] = "obm", ["Moba"] = "mfq", ["Mobilian"] = "mod", ["Mobumrin Aizi"] = "ahm", ["Mocana"] = "sai-mcn", ["Mochi"] = "old", ["Mochica"] = "omc", ["Mocho"] = "mhc", ["Mocoví"] = "moc", ["Modang"] = "mxd", ["Modole"] = "mqo", ["Moere"] = "mvq", ["Mofu-Gudur"] = "mif", ["Mogum"] = "mou", ["Mohegan-Pequot"] = "xpq", ["Moi (Congo)"] = "mow", ["Moi (Indonesia)"] = "mxn", ["Moikodi"] = "mkp", ["Moingi"] = "mwz", ["Mojave"] = "mov", ["Moji"] = "ymi", ["Mok"] = "mqt", ["Mokerang"] = "mft", ["Mokole"] = "mkl", ["Mokpwe"] = "bri", ["Molale"] = "mbe", ["Tiếng Molbog"] = "pwm", ["Moldova Sign Language"] = "vsi", ["Molengue"] = "bxc", ["Molima"] = "mox", ["Molmo One"] = "aun", ["Molo"] = "zmo", ["Molof"] = "msl", ["Moloko"] = "mlw", ["Mom Jango"] = "ver", ["Moma"] = "myl", ["Momare"] = "msz", ["Mombo Dogon"] = "dmb", ["Mombum"] = "mso", ["Momina"] = "mmb", ["Momuna"] = "mqf", ["Monastic Sign Language"] = "mzg", ["Mondropolon"] = "npn", ["Mondé"] = "mnd", ["Tiếng Mongo"] = "lol", ["Mongol"] = "mgt", ["Mongolian Sign Language"] = "msr", ["Tiếng Mongondow"] = "mog", ["Moni"] = "mnz", ["Monimbo"] = "mom", ["Mono (California)"] = "mnr", ["Mono (Cameroon)"] = "mru", ["Mono (Congo)"] = "mnh", ["Monsang Naga"] = "nmh", ["Montagnais"] = "moe", ["Montana Salish"] = "fla", ["Montol"] = "mtl", ["Monumbo"] = "mxk", ["Monzombo"] = "moj", ["Moo"] = "gwg", ["Moose Cree"] = "crm", ["Mopan Maya"] = "mop", ["Mor (Austronesian)"] = "mhz", ["Mor (Papuan)"] = "moq", ["Moraid"] = "msg", ["Moran"] = "sit-mor", ["Morawa"] = "mze", ["Morelos Nahuatl"] = "nhm", ["Morerebi"] = "xmo", ["Moresada"] = "msx", ["Mori Atas"] = "mzq", ["Mori Bawah"] = "xmz", ["Morigi"] = "mdb", ["Moro"] = "mor", ["Moroccan Amazigh"] = "zgh", ["Moroccan Sign Language"] = "xms", ["Morom"] = "bdo", ["Moronene"] = "mqn", ["Morori"] = "mok", ["Morouas"] = "mrp", ["Mortlockese"] = "mrl", ["Moru"] = "mgd", ["Mosimo"] = "mqv", ["Moskona"] = "mtj", ["Mota"] = "mtt", ["Motembo"] = "tmv", ["Mouk-Aria"] = "mwh", ["Mount Iraya Agta"] = "atl", ["Mount Iriga Agta"] = "agz", ["Mountain Koiari"] = "kpx", ["Mouwase"] = "jmw", ["Movima"] = "mzp", ["Moyadan Itneg"] = "ity", ["Moyon Naga"] = "nmo", ["Mozambican Sign Language"] = "mzy", ["Mpade"] = "mpi", ["Mpalitjanh"] = "xpj", ["Mpi"] = "mpz", ["Mpiemo"] = "mcx", ["Mpiin"] = "bnt-mpi", ["Mpinda"] = "pnd", ["Mpongmpong"] = "mgg", ["Mpoto"] = "mpa", ["Mpotovoro"] = "mvt", ["Mpuono"] = "bnt-mpu", ["Mpur"] = "akc", ["Mro Chin"] = "cmr", ["Mru"] = "mro", ["Mser"] = "kqx", ["Mualang"] = "mtd", ["Mubami"] = "tsx", ["Mubi"] = "mub", ["Mucuchí"] = "sai-muc", ["Muda"] = "ymd", ["Tiếng Mudburra"] = "dmw", ["Muduapa"] = "wiv", ["Muduga"] = "udg", ["Muellama"] = "sai-mue", ["Mufian"] = "aoj", ["Muher"] = "sem-mhr", ["Muinane"] = "bmr", ["Mukha-Dora"] = "mmk", ["Mukulu"] = "moz", ["Mulaha"] = "mfw", ["Mulam"] = "mlm", ["Mulao"] = "giu", ["Mullu Kurumba"] = "kpb", ["Mullukmulluk"] = "mpb", ["Muluridyi"] = "vmu", ["Mum"] = "kqa", ["Mumuye"] = "mzm", ["Tiếng Muna"] = "mnb", ["Munda"] = "unx", ["Tiếng Mundabli"] = "boe", ["Mundang"] = "mua", ["Mundani"] = "mnf", ["Mundat"] = "mmf", ["Mundolinco"] = "art-mun", ["Mundurukú"] = "myu", ["Mungaka"] = "mhk", ["Mungbam"] = "mij", ["Munggui"] = "mth", ["Mungkip"] = "mpv", ["Muniche"] = "myr", ["Munit"] = "mtc", ["Tiếng Munsee"] = "umu", ["Mur Pano"] = "tkv", ["Muratayak"] = "asx", ["Murik (Malaysia)"] = "mxr", ["Murik (New Guinea)"] = "mtf", ["Murkim"] = "rmh", ["Murle"] = "mur", ["Murrinh-Patha"] = "mwf", ["Murui Huitoto"] = "huu", ["Murupi"] = "mqw", ["Muruwari"] = "zmu", ["Musan"] = "mmp", ["Musar"] = "mmi", ["Musasa"] = "smm", ["Musey"] = "mse", ["Musgu"] = "mug", ["Musi"] = "mui", ["Muskum"] = "mje", ["Musom"] = "msu", ["Mussau-Emira"] = "emi", ["Muthuvan"] = "muv", ["Mutu"] = "tuc", ["Muya"] = "mvm", ["Muyang"] = "muy", ["Muyuw"] = "myw", ["Muzi"] = "ymz", ["Muzo"] = "sai-muz", ["Mvanip"] = "mcj", ["Mvuba"] = "mxh", ["Mwaghavul"] = "sur", ["Mwali Comorian"] = "wlc", ["Tiếng Mwan"] = "moa", ["Mwani"] = "wmw", ["Mwatebu"] = "mwa", ["Mwera"] = "mwe", ["Mwimbi-Muthambi"] = "mws", ["Mycenaean Greek"] = "gmy", ["Myene"] = "mye", ["Mysian"] = "yms", ["Mzieme Naga"] = "nme", ["Mághdì"] = "gmd", ["Tiếng Mòcheno"] = "mhn", ["Mün Chin"] = "mwq", ["Mündü"] = "muh", ["N'Ko"] = "nqo", ["Na"] = "nbt", ["Na'vi"] = "art-nav", ["Naaba"] = "nao", ["Naba"] = "mne", ["Nabak"] = "naf", ["Nabi"] = "mty", ["Nachering"] = "ncd", ["Nadruvian"] = "ndf", ["Nadëb"] = "mbj", ["Tiếng Nafaanra"] = "nfr", ["Nafi"] = "srf", ["Nafri"] = "nxx", ["Naga Pidgin"] = "nag", ["Nagarchal"] = "nbg", ["Nage"] = "nxe", ["Nagtipunan Agta"] = "phi-nag", ["Nagu"] = "ngr", ["Nagumi"] = "ngv", ["Nahali"] = "nlx", ["Nahari"] = "nhh", ["Nahavaq"] = "sns", ["Nai"] = "bio", ["Najdi Arabic"] = "ars", ["Naka'ela"] = "nae", ["Nakai"] = "nkj", ["Nakame"] = "nib", ["Nakanai"] = "nak", ["Nakara"] = "nck", ["Nake"] = "nbk", ["Naki"] = "mff", ["Nakwi"] = "nax", ["Nalca"] = "nlc", ["Nali"] = "nss", ["Nalik"] = "nal", ["Nalu"] = "naj", ["Nalögo"] = "nlz", ["Namakura"] = "nmk", ["Namat"] = "nkm", ["Tiếng Nambikwara"] = "nab", ["Nambo"] = "ncm", ["Nambya"] = "nmq", ["Namia"] = "nnm", ["Namiae"] = "nvm", ["Namibian Sign Language"] = "nbs", ["Namla"] = "naa", ["Namo"] = "mxw", ["Namonuito"] = "nmt", ["Namosi-Naitasiri-Serua"] = "bwb", ["Namuyi"] = "nmy", ["Nancere"] = "nnc", ["Nande"] = "nnb", ["Nandi"] = "niq", ["Nanerigé Sénoufo"] = "sen", ["Nanga Dama Dogon"] = "nzz", ["Nankina"] = "nnk", ["Nanti"] = "cox", ["Nanticoke"] = "nnt", ["Nanubae"] = "afk", ["Naolan"] = "nai-nao", ["Napu"] = "npy", ["Nar Phu"] = "npa", ["Nara"] = "nrb", ["Narak"] = "nac", ["Narango"] = "nrg", ["Narau"] = "nxu", ["Narim"] = "loh", ["Naro"] = "nhr", ["Narom"] = "nrm", ["Narragansett"] = "xnt", ["Narungga"] = "nnr", ["Naruo"] = "ylo", ["Nasal"] = "nsy", ["Nasarian"] = "nvh", ["Nasioi"] = "nas", ["Naskapi"] = "nsk", ["Nasu"] = "ywq", ["Natagaimas"] = "nts", ["Natchez"] = "ncz", ["Nateni"] = "ntm", ["Nathembo"] = "nte", ["Natioro"] = "nti", ["Natú"] = "sai-nat", ["Natügu"] = "ntu", ["Nauete"] = "nxa", ["Naukanski"] = "ynk", ["Nauna"] = "ncn", ["Nauo"] = "nwo", ["Navarro-Aragonese"] = "roa-oan", ["Navut"] = "nsw", ["Nawaru"] = "nwr", ["Nawathinehena"] = "nwa", ["Nawdm"] = "nmz", ["Nawuri"] = "naw", ["Nayi"] = "noz", ["Ncane"] = "ncr", ["Nchumbulu"] = "nlu", ["Nda'nda'"] = "nnz", ["Ndai"] = "gke", ["Ndaka"] = "ndk", ["Ndali"] = "ndh", ["Ndam"] = "ndm", ["Ndamba"] = "ndj", ["Ndambomo"] = "nxo", ["Ndasa"] = "nda", ["Ndau"] = "ndc", ["Nde-Gbite"] = "ned", ["Nde-Nsele-Nta"] = "ndd", ["Ndemli"] = "nml", ["Ndendeule"] = "dne", ["Ndengereko"] = "ndg", ["Nding"] = "eli", ["Ndjébbana"] = "djj", ["Ndo"] = "ndp", ["Ndobo"] = "ndw", ["Ndoe"] = "nbb", ["Ndolo"] = "ndl", ["Ndom"] = "nqm", ["Ndombe"] = "ndq", ["Ndoola"] = "ndr", ["Ndrulo"] = "dno", ["Nduga"] = "ndx", ["Ndumu"] = "nmd", ["Ndunda"] = "nuh", ["Ndunga"] = "ndt", ["Ndut"] = "ndv", ["Ndyuka-Trio Pidgin"] = "njt", ["Ndzwani Comorian"] = "wni", ["Nedebang"] = "nec", ["Nefamese"] = "nef", ["Negeri Sembilan Malay"] = "zmi", ["Nehan"] = "nsn", ["Nek"] = "nif", ["Nekgini"] = "nkg", ["Neko"] = "nej", ["Neku"] = "nek", ["Neme"] = "nex", ["Nemi"] = "nem", ["Nen"] = "nqn", ["Nend"] = "anh", ["Nengone"] = "nen", ["Neo"] = "neu", ["Nepalese Sign Language"] = "nsp", ["Nepali Kurux"] = "kxl", ["Nete"] = "net", ["Neve'ei"] = "vnm", ["Neverver"] = "lgk", ["New Caledonian Javanese"] = "jas", ["New River Shasta"] = "nai-nrs", ["New Zealand Sign Language"] = "nzs", ["Neyo"] = "ney", ["Nez Perce"] = "nez", ["Nga La"] = "hlt", ["Ngaanyatjarra"] = "ntj", ["Tiếng Ngadha"] = "nxg", ["Ngadjunmaya"] = "nju", ["Ngadjuri"] = "jui", ["Ngaing"] = "nnf", ["Ngaju"] = "nij", ["Ngala"] = "nud", ["Ngalakan"] = "nig", ["Ngalkbun"] = "ngk", ["Ngam"] = "nmc", ["Ngamambo"] = "nbv", ["Ngambay"] = "sba", ["Ngamini"] = "nmv", ["Ngamo"] = "nbh", ["Ngan'gityemerri"] = "nam", ["Nganakarti"] = "xnk", ["Ngandi"] = "nid", ["Ngando (Central African Republic)"] = "ngd", ["Ngando (Congo)"] = "nxd", ["Ngandyera"] = "nne", ["Ngangam"] = "gng", ["Ngantangarra"] = "ntg", ["Nganyaywana"] = "nyx", ["Ngardi"] = "rxd", ["Ngarigu"] = "xni", ["Ngarinman"] = "nbj", ["Ngarinyin"] = "ung", ["Ngarla"] = "nrk", ["Ngarluma"] = "nrl", ["Ngarrindjeri"] = "nay", ["Ngasa"] = "nsg", ["Ngatik Men's Creole"] = "ngm", ["Ngawn Chin"] = "cnw", ["Ngawun"] = "nxn", ["Ngazidja Comorian"] = "zdj", ["Ngbaka"] = "nga", ["Ngbaka Ma'bo"] = "nbm", ["Ngbaka Manza"] = "ngg", ["Ngbee"] = "jgb", ["Ngbinda"] = "nbd", ["Ngbundu"] = "nuu", ["Ngelima"] = "agh", ["Ngemba"] = "nge", ["Ngen"] = "gnj", ["Ngendelengo"] = "nql", ["Ngeq"] = "ngt", ["Ngete"] = "nnn", ["Nggem"] = "nbq", ["Nggwahyi"] = "ngx", ["Ngie"] = "ngj", ["Ngile"] = "jle", ["Ngindo"] = "nnq", ["Ngiti"] = "niy", ["Tiếng Ngiyambaa"] = "wyb", ["Ngizim"] = "ngi", ["Ngkoth"] = "aus-ngk", ["Ngkâlmpw Kanum"] = "kcd", ["Ngochang"] = "tbq-ngo", ["Ngom"] = "nra", ["Ngombale"] = "nla", ["Ngombe (Central African Republic)"] = "nmj", ["Tiếng Ngombe (Congo)"] = "ngc", ["Ngong"] = "nnx", ["Ngongo"] = "noq", ["Ngoni"] = "ngo", ["Ngoreme"] = "ngq", ["Ngoshie"] = "nsh", ["Ngul"] = "nlo", ["Ngulu"] = "ngp", ["Nguluwan"] = "nuw", ["Ngumbi"] = "nui", ["Ngunawal"] = "xul", ["Ngundi"] = "ndn", ["Ngundu"] = "nue", ["Ngungwel"] = "ngz", ["Ngurmbur"] = "nrx", ["Ngwaba"] = "ngw", ["Ngwe"] = "nwe", ["Ngwo"] = "ngn", ["Ngäbere"] = "gym", ["Nhanda"] = "nha", ["Nhirrpi"] = "hrp", ["Nhuwala"] = "nhf", ["Nicaraguan Creole"] = "bzk", ["Nicaraguan Sign Language"] = "ncs", ["Nicola"] = "ath-nic", ["Niellim"] = "nie", ["Nigeria Mambila"] = "mzk", ["Nigerian Pidgin"] = "pcm", ["Nigerian Sign Language"] = "nsi", ["Nihali"] = "nll", ["Nii"] = "nii", ["Niksek"] = "gbe", ["Nila"] = "nil", ["Nilamba"] = "nim", ["Nimadi"] = "noe", ["Nimanbur"] = "nmp", ["Nimbari"] = "nmr", ["Nimboran"] = "nir", ["Nimi"] = "nis", ["Nimo"] = "niw", ["Nimoa"] = "nmw", ["Ninam"] = "shb", ["Nindi"] = "nxi", ["Ningera"] = "nby", ["Ninggerum"] = "nxr", ["Ningil"] = "niz", ["Ninia Yali"] = "nlk", ["Ninzo"] = "nin", ["Nipsan"] = "nps", ["Nisa"] = "njs", ["Nisenan"] = "nsz", ["Nisga'a"] = "ncg", ["Nisi"] = "yso", ["Niuafo'ou"] = "num", ["Niuatoputapu"] = "nkp", ["Tiếng Nivaclé"] = "cag", ["Niwer Mil"] = "hrc", ["Njalgulgule"] = "njl", ["Njebi"] = "nzb", ["Njen"] = "njj", ["Njerep"] = "njr", ["Njyem"] = "njy", ["Nkami"] = "nkq", ["Nkangala"] = "nkn", ["Nkem-Nkum"] = "isi", ["Nkhumbi"] = "khu", ["Nkongho"] = "nkc", ["Nkoroo"] = "nkx", ["Nkoya"] = "nka", ["Nkukoli"] = "nbo", ["Nkutu"] = "nkw", ["Nnam"] = "nbp", ["Nobonob"] = "gaw", ["Nocamán"] = "nom", ["Nocte Naga"] = "njb", ["Noiri"] = "noi", ["Nokuku"] = "nkk", ["Nomaande"] = "lem", ["Nomane"] = "nof", ["Nomatsiguenga"] = "not", ["Nomlaki"] = "nol", ["Nomu"] = "noh", ["Nonuya"] = "noj", ["Nooksack"] = "nok", ["Noon"] = "snf", ["Noone"] = "nhu", ["Nopala Chatino"] = "cya", ["Norn"] = "nrn", ["Norra"] = "nrr", ["North Ambrym"] = "mmg", ["North Asmat"] = "nks", ["North Awyu"] = "yir", ["North Babar"] = "bcd", ["North Boma"] = "boh", ["North Central Mixe"] = "neq", ["North Efate"] = "llp", ["North Fali"] = "fll", ["North Giziga"] = "gis", ["North Marquesan"] = "mrq", ["North Mesopotamian Arabic"] = "ayp", ["North Mofu"] = "mfk", ["North Muyu"] = "kti", ["North Nuaulu"] = "nni", ["North Picene"] = "nrp", ["North Tairora"] = "tbg", ["North Tanna"] = "tnn", ["North Wahgi"] = "whg", ["North Watut"] = "una", ["Northeast Kiwai"] = "kiw", ["Northeast Maidu"] = "nmu", ["Northeast Pashayi"] = "aee", ["Northeastern Dinka"] = "dip", ["Northeastern Pomo"] = "pef", ["Northern Alta"] = "aqn", ["Northern Bontoc"] = "rbk", ["Tiếng Bắc Catanduanes Bikol"] = "cts", ["Northern Dagara"] = "dgi", ["Northern East Cree"] = "crl", ["Northern Ghale"] = "ghh", ["Northern Grebo"] = "gbo", ["Northern Guiyang Hmong"] = "huj", ["Northern Haida"] = "hdn", ["Northern Huishui Hmong"] = "hmi", ["Northern Kalapuya"] = "nrt", ["Northern Kam"] = "doc", ["Northern Kankanay"] = "xnn", ["Northern Khanty"] = "kca-nor", ["Northern Kissi"] = "kqs", ["Northern Lorung"] = "lbr", ["Northern Mashan Hmong"] = "hmp", ["Northern Muji"] = "ymx", ["Northern Ngbandi"] = "ngb", ["Northern Nuni"] = "nuv", ["Northern Oaxaca Nahuatl"] = "nhy", ["Northern Ohlone"] = "cst", ["Northern One"] = "onr", ["Tiếng Bắc Paiute"] = "pao", ["Northern Pame"] = "pmq", ["Northern Pinghua"] = "cnp", ["Northern Pomo"] = "pej", ["Northern Puebla Nahuatl"] = "ncj", ["Northern Pumi"] = "pmi", ["Northern Qiandong Miao"] = "hea", ["Northern Rengma Naga"] = "nnl", ["Northern Sierra Miwok"] = "nsq", ["Northern Subanen"] = "stb", ["Northern Tarahumara"] = "thh", ["Northern Tepehuan"] = "ntp", ["Northern Tidong"] = "ntd", ["Northern Tlaxiaco Mixtec"] = "xtn", ["Northern Toussian"] = "tsp", ["Northern Tutchone"] = "ttm", ["Northern Valley Yokuts"] = "nai-nvy", ["Tiếng Tây Bắc Gbaya"] = "gya", ["Northwest Maidu"] = "mjd", ["Northwest Oaxaca Mixtec"] = "mxa", ["Northwest Pashayi"] = "glh", ["Northwestern Dinka"] = "diw", ["Northwestern Fars"] = "faz", ["Northwestern Ojibwa"] = "ojb", ["Northwestern Tamang"] = "tmk", ["Norwegian Sign Language"] = "nsl", ["Notre"] = "bly", ["Notsi"] = "ncf", ["Nottoway"] = "ntw", ["Nottoway-Meherrin"] = "nwy", ["Noxilo"] = "art-nox", ["Noy"] = "noy", ["Nsari"] = "asj", ["Nsenga"] = "nse", ["Nshi"] = "nsc", ["Nsong"] = "soo", ["Nsongo"] = "nsx", ["Ntcham"] = "bud", ["Ntomba"] = "nto", ["Ntra'ngith"] = "dgt", ["Nuguria"] = "nur", ["Nuk"] = "noc", ["Nukak Makú"] = "mbr", ["Nukna"] = "klt", ["Nukuini"] = "nuc", ["Nukumanu"] = "nuq", ["Nukunu"] = "nnv", ["Nukunul"] = "xnu", ["Nukuoro"] = "nkr", ["Numana"] = "nbr", ["Numanggang"] = "nop", ["Numbami"] = "sij", ["Nume"] = "tgs", ["Numee"] = "kdk", ["Numidian"] = "nxm", ["Nungali"] = "nug", ["Nunggubuyu"] = "nuy", ["Nungon"] = "paa-nun", ["Nungu"] = "rin", ["Nupbikha"] = "npb", ["Tiếng Nupe"] = "nup", ["Nusa Laut"] = "nul", ["Nusu"] = "nuf", ["Nutabe"] = "cba-nut", ["Nyabwa"] = "nwb", ["Nyaheun"] = "nev", ["Nyakyusa"] = "nyy", ["Nyali"] = "nlj", ["Nyam"] = "nmi", ["Nyamal"] = "nly", ["Nyambo"] = "now", ["Nyamusa-Molo"] = "nwm", ["Nyamwanga"] = "mwn", ["Nyamwezi"] = "nym", ["Nyaneka"] = "nyk", ["Nyang'i"] = "nyp", ["Nyanga (Congo)"] = "nyj", ["Nyanga (Togo)"] = "ayg", ["Nyanga-li"] = "nyc", ["Nyangatom"] = "nnj", ["Nyangbo"] = "nyb", ["Nyangga"] = "nny", ["Nyangumarta"] = "nna", ["Nyankole"] = "nyn", ["Nyaturu"] = "rim", ["Nyawaygi"] = "nyt", ["Nyemba"] = "nba", ["Nyengo"] = "nye", ["Nyenkha"] = "neh", ["Nyigina"] = "nyh", ["Nyiha"] = "nih", ["Nyika"] = "nkt", ["Nyimang"] = "nyi", ["Nyindrou"] = "lid", ["Nyindu"] = "nyg", ["Nyishi"] = "njz", ["Nyiyaparli"] = "xny", ["Nyokon"] = "nvo", ["Nyole (Kenya)"] = "nyd", ["Nyole (Uganda)"] = "nuj", ["Nyong"] = "muo", ["Nyoro"] = "nyo", ["Nyulnyul"] = "nyv", ["Tiếng Nyunga"] = "nys", ["Nyungwe"] = "nyu", ["Nyâlayu"] = "yly", ["Tiếng Nzadi"] = "nzd", ["Nzakambay"] = "nzy", ["Nzakara"] = "nzk", ["Nzanyi"] = "nja", ["Nzima"] = "nzi", ["Nüpode Huitoto"] = "hux", ["Tiếng Nǀuu"] = "ngh", ["O'chi'chi'"] = "xoc", ["Obanliku"] = "bzy", ["Obispeño"] = "obi", ["Oblo"] = "obl", ["Obo Manobo"] = "obo", ["Obokuitai"] = "afz", ["Obolo"] = "ann", ["Obulom"] = "obu", ["Ocotepec Mixtec"] = "mie", ["Ocotlán Zapotec"] = "zac", ["Od"] = "odk", ["Odiai"] = "bhf", ["Odoodee"] = "kkc", ["Odual"] = "odu", ["Odut"] = "oda", ["Ofayé"] = "opy", ["Ofo"] = "ofo", ["Ogbah"] = "ogc", ["Ogbia"] = "ogb", ["Ogbogolo"] = "ogg", ["Ogea"] = "eri", ["Oirata"] = "oia", ["Okiek"] = "oki", ["Oko-Eni-Osayen"] = "oks", ["Oko-Juwoi"] = "okj", ["Okobo"] = "okb", ["Okodia"] = "okd", ["Okolod"] = "kqv", ["Okpamheri"] = "opa", ["Okpe (Northwestern Edo)"] = "okx", ["Okpe (Southwestern Edo)"] = "oke", ["Okpela"] = "atg", ["Oksapmin"] = "opm", ["Oku"] = "oku", ["Okwanuchu"] = "nai-okw", ["Old Avar"] = "oav", ["Old Bengali"] = "inc-obn", ["Tiếng Catalan cổ"] = "roa-oca", ["Tiếng Cornwall cổ"] = "oco", ["Old Gujarati"] = "inc-ogu", ["Old Hindi"] = "inc-ohi", ["Tiếng Hungary cổ"] = "ohu", ["Old Kamta"] = "inc-ork", ["Tiếng Kannada cổ"] = "dra-okn", ["Tiếng Telugu cổ"] = "dra-ote", ["Old Kentish Sign Language"] = "okl", ["Old Leonese"] = "roa-ole", ["Tiếng Navarro-Aragon"] = "roa-ona", ["Tiếng Litva cổ"] = "olt", ["Old Manipuri"] = "omp", ["Old Marathi"] = "omr", ["Old Nubian"] = "onw", ["Old Oriya"] = "inc-oor", ["Tiếng Punjab cổ"] = "inc-opa", ["Tiếng Nam Ả Rập cổ"] = "sem-srb", ["Old Tati"] = "xme-ott", ["Tiếng Tây Tạng cổ"] = "otb", ["Old Welsh"] = "owl", ["Olekha"] = "ole", ["Ollari"] = "gdb", ["Olo"] = "ong", ["Oloma"] = "olm", ["Olrat"] = "olr", ["Olu'bo"] = "lul", ["Olulumo-Ikom"] = "iko", ["Oluta Popoluca"] = "plo", ["Olutsotso"] = "lto", ["Omagua"] = "omg", ["Omba"] = "omb", ["Ombamba"] = "mbm", ["Ombo"] = "oml", ["Ometepec Nahuatl"] = "nht", ["Omi"] = "omi", ["Omotik"] = "omt", ["Omurano"] = "omu", ["Oneida"] = "one", ["Ong"] = "oog", ["Ongota"] = "bxe", ["Onin"] = "oni", ["Onjob"] = "onj", ["Ono"] = "ons", ["Onobasulu"] = "onn", ["Onondaga"] = "ono", ["Ontenu"] = "ont", ["Ontong Java"] = "ojv", ["Oorlams"] = "oor", ["Opao"] = "opo", ["Opata"] = "opt", ["Opuuo"] = "lgn", ["Opón"] = "sai-opo", ["Oraon Sadri"] = "sdr", ["Orejón"] = "ore", ["Oring"] = "org", ["Orizaba Nahuatl"] = "nlv", ["Orléanais"] = "roa-orl", ["Oro"] = "orx", ["Oro Win"] = "orw", ["Oroha"] = "ora", ["Orokaiva"] = "okv", ["Oroko"] = "bdu", ["Orokolo"] = "oro", ["Orowe"] = "bpk", ["Oruma"] = "orr", ["Orya"] = "ury", ["Osamayi"] = "syx", ["Osing"] = "osi", ["Ososo"] = "oso", ["Ot Danum"] = "otd", ["Otank"] = "uta", ["Oti"] = "oti", ["Otomaco"] = "sai-oto", ["Otoro"] = "otr", ["Ottawa"] = "otw", ["Ouma"] = "oum", ["Oune"] = "oue", ["Owa"] = "stn", ["Owenia"] = "wsr", ["Owiniga"] = "owi", ["Oy"] = "oyb", ["Oya'oya"] = "oyy", ["Tiếng Oyda"] = "oyd", ["Ozolotepec Zapotec"] = "zao", ["Pa"] = "ppt", ["Pa Di"] = "pdi", ["Pa'a"] = "pqa", ["Paama"] = "pma", ["Paasaal"] = "sig", ["Pacahuara"] = "pcp", ["Padoe"] = "pdo", ["Paelignian"] = "pgn", ["Paeonian"] = "ine-pae", ["Pagi"] = "pgi", ["Pagibete"] = "pae", ["Tiếng Pagu"] = "pgu", ["Pahanan Agta"] = "apf", ["Tiếng Pothohar"] = "phr", ["Pahi"] = "lgt", ["Pahlavani"] = "phv", ["Pai Tavytera"] = "pta", ["Pai-lang"] = "tbq-plg", ["Paicî"] = "pri", ["Paikoneka"] = "awd-pai", ["Paipai"] = "ppi", ["Pajapan Nahuatl"] = "nhp", ["Pak-Tong"] = "pkg", ["Pakanha"] = "pkn", ["Pakistan Sign Language"] = "pks", ["Tiếng Paku"] = "pku", ["Paku Karen"] = "kpp", ["Pal"] = "abw", ["Palaka Senoufo"] = "plr", ["Palantla Chinantec"] = "cpa", ["Palawan Batak"] = "bya", ["Paleni"] = "pnl", ["Palenquero"] = "pln", ["Palewyami"] = "nai-ply", ["Palikur"] = "plu", ["Paliyan"] = "pcf", ["Pallanganmiddang"] = "pmd", ["Palor"] = "fap", ["Palta"] = "sai-pal", ["Palu'e"] = "ple", ["Paluan"] = "plz", ["Palya Bareli"] = "bpx", ["Pam"] = "pmn", ["Pambia"] = "pmb", ["Pamigua"] = "sai-pam", ["Pamlico"] = "pmk", ["Pamona"] = "pmf", ["Pamosu"] = "hih", ["Pamplona Atta"] = "att", ["Pana (Central Africa)"] = "pnz", ["Pana (West Africa)"] = "pnq", ["Panamanian Sign Language"] = "lsp", ["Panamint"] = "par", ["Panare"] = "pbh", ["Panará"] = "kre", ["Panasuan"] = "psn", ["Panawa"] = "pwb", ["Pande"] = "bkj", ["Pangseng"] = "pgs", ["Pangutaran Sama"] = "slm", ["Pangwa"] = "pbr", ["Panim"] = "pnr", ["Paniya"] = "pcg", ["Pankararé"] = "pax", ["Pankararú"] = "paz", ["Pankhu"] = "pkh", ["Pannei"] = "pnc", ["Panobo"] = "pno", ["Panyi Bai"] = "bfc", ["Panyjima"] = "pnw", ["Panzaleo"] = "sai-pnz", ["Pao"] = "ppa", ["Tiếng Totonac Papantla"] = "top", ["Papapana"] = "ppn", ["Papar"] = "dpp", ["Papasena"] = "pas", ["Papel"] = "pbo", ["Papi"] = "ppe", ["Papitalai"] = "pat", ["Papora"] = "ppu", ["Papua New Guinean Sign Language"] = "pgz", ["Papuan Malay"] = "pmy", ["Papuma"] = "ppm", ["Para Naga"] = "pzn", ["Parachi"] = "prc", ["Tiếng Guarani Paraguay"] = "gug", ["Paraguayan Sign Language"] = "pys", ["Parakanã"] = "pak", ["Paranan"] = "prf", ["Paranawát"] = "paf", ["Paratió"] = "sai-par", ["Tiếng Paraujano"] = "pbg", ["Parawen"] = "prw", ["Pardhan"] = "pch", ["Pardhi"] = "pcl", ["Pare"] = "asa", ["Tiếng Pareci"] = "pab", ["Paredarerme"] = "xpd", ["Parenga"] = "pcj", ["Parya"] = "paq", ["Pará Arára"] = "aap", ["Pará Gavião"] = "gvp", ["Pasi"] = "psq", ["Pass Valley Yali"] = "yac", ["Passé"] = "awd-pas", ["Patagón"] = "sai-ptg", ["Patamona"] = "pbc", ["Patani"] = "ptn", ["Pataxó Hã-Ha-Hãe"] = "pth", ["Patep"] = "ptp", ["Pathiya"] = "pty", ["Patpatar"] = "gfk", ["Pattani"] = "lae", ["Tiếng Mã Lai Pattani"] = "mfa", ["Pattapu"] = "ptq", ["Patwin"] = "pwi", ["Paulohi"] = "plh", ["Paumarí"] = "pad", ["Pauri Bareli"] = "bfb", ["Pauserna"] = "psm", ["Pawaia"] = "pwa", ["Payaguá"] = "sai-pyg", ["Paynamar"] = "pmr", ["Pe"] = "pai", ["Pech"] = "pay", ["Peerapper"] = "xpw", ["Peere"] = "pfe", ["Pei"] = "ppq", ["Pekal"] = "pel", ["Pele-Ata"] = "ata", ["Penang Sign Language"] = "psg", ["Penchal"] = "pek", ["Pendau"] = "ums", ["Pennsylvania German"] = "pdc", ["Penrhyn"] = "pnh", ["Pentlatch"] = "ptw", ["Perai"] = "wet", ["Perema"] = "wom", ["Pericú"] = "nai-per", ["Pero"] = "pip", ["Persian Sign Language"] = "psc", ["Peruvian Sign Language"] = "prl", ["Petapa Zapotec"] = "zpe", ["Petats"] = "pex", ["Peñoles Mixtec"] = "mil", ["Phala"] = "ypa", ["Phana'"] = "phq", ["Phangduwali"] = "phw", ["Phende"] = "pem", ["Philippine Sign Language"] = "psp", ["Philistine"] = "und-phi", ["Phimbi"] = "phm", ["Phola"] = "ypg", ["Pholo"] = "yip", ["Phom"] = "nph", ["Phudagi"] = "phd", ["Phuie"] = "pug", ["Phukha"] = "phh", ["Phuma"] = "ypm", ["Phunoi"] = "pho", ["Phupa"] = "ypp", ["Phupha"] = "yph", ["Phuthi"] = "bnt-phu", ["Phuza"] = "ypz", ["Piamatsina"] = "ptr", ["Piame"] = "pin", ["Piapoco"] = "pio", ["Piaroa"] = "pid", ["Pichinglis"] = "fpe", ["Pichis Ashéninka"] = "cpu", ["Pictish"] = "xpi", ["Picuris"] = "nai-pic", ["Pidgin Delaware"] = "dep", ["Pidgin Iha"] = "ihb", ["Pidgin Onin"] = "onx", ["Pijao"] = "pij", ["Pije"] = "piz", ["Pijin"] = "pis", ["Pileni"] = "piv", ["Pima Bajo"] = "pia", ["Pimbwe"] = "piw", ["Pinai-Hagahai"] = "pnn", ["Pingelapese"] = "pif", ["Pini"] = "pii", ["Pinigura"] = "pnv", ["Pinjarup"] = "pnj", ["Pinji"] = "pic", ["Pinotepa Nacional Mixtec"] = "mio", ["Pintiini"] = "pti", ["Pintupi-Luritja"] = "piu", ["Pirahã"] = "myp", ["Piratapuyo"] = "pir", ["Pirlatapa"] = "bxi", ["Piro"] = "pie", ["Pirriya"] = "xpa", ["Pisabo"] = "pig", ["Pisaflores Tepehua"] = "tpp", ["Piscataway"] = "psy", ["Pisidian"] = "xps", ["Pitcairn-Norfolk"] = "pih", ["Pite Sami"] = "sje", ["Piti"] = "pcn", ["Pitjantjatjara"] = "pjt", ["Pitta-Pitta"] = "pit", ["Piu"] = "pix", ["Piya-Kwonci"] = "piy", ["Tiếng Apache đồng bằng"] = "apk", ["Plains Indian Sign Language"] = "psd", ["Plains Miwok"] = "pmw", ["Plapo Krumen"] = "ktj", ["Playero"] = "gob", ["Pochuri Naga"] = "npo", ["Pochutec"] = "xpo", ["Podoko"] = "pbi", ["Pogali"] = "hkh", ["Pogolo"] = "poy", ["Poitevin-Saintongeais"] = "roa-poi", ["Pokangá"] = "pok", ["Poke"] = "pof", ["Pol"] = "pmm", ["Polci"] = "plj", ["Polish Sign Language"] = "pso", ["Polonombauk"] = "plb", ["Pom"] = "pmo", ["Ponam"] = "ncc", ["Pongu"] = "png", ["Ponyo"] = "npg", ["Poqomam"] = "poc", ["Poqomchi'"] = "poh", ["Porohanon"] = "prh", ["Port Sandwich"] = "psw", ["Port Sorell"] = "xpl", ["Port Vato"] = "ptv", ["Portuguese Sign Language"] = "psr", ["Potiguára"] = "pog", ["Poumei Naga"] = "pmx", ["Pouye"] = "bye", ["Powari"] = "pwr", ["Powhatan"] = "pim", ["Poyanáwa"] = "pyn", ["Primitive Irish"] = "pgl", ["Principense"] = "pre", ["Tiếng Algic nguyên thủy"] = "aql-pro", ["Proto-Amuesha-Chamicuro"] = "awd-amc-pro", ["Proto-Anatolian"] = "ine-ana-pro", ["Proto-Apachean"] = "apa-pro", ["Proto-Arawa"] = "auf-pro", ["Tiếng Arawak nguyên thủy"] = "awd-pro", ["Proto-Armenian"] = "hyx-pro", ["Proto-Arnhem"] = "aus-arn-pro", ["Tiếng Aari nguyên thủy"] = "omv-aro-pro", ["Proto-Atayalic"] = "map-ata-pro", ["Proto-Athabaskan"] = "ath-pro", ["Proto-Atlantic-Congo"] = "alv-pro", ["Tiếng Avar-Andic nguyên thủy"] = "cau-ava-pro", ["Proto-Bantoid"] = "nic-bod-pro", ["Proto-Batak"] = "btk-pro", ["Tiếng Bối-Thái nguyên thủy"] = "qfa-bet-pro", ["Proto-Benue-Congo"] = "nic-bco-pro", ["Proto-Bongo-Bagirmi"] = "csu-bba-pro", ["Proto-Boran"] = "sai-bor-pro", ["Proto-Bua"] = "alv-bua-pro", ["Proto-Bungku-Tolaki"] = "poz-btk-pro", ["Proto-Caddoan"] = "cdd-pro", ["Proto-Cangin"] = "alv-cng-pro", ["Proto-Central Chadic"] = "cdc-cbm-pro", ["Proto-Central Indo-Aryan"] = "inc-cen-pro", ["Proto-Central Jê"] = "sai-cje-pro", ["Proto-Central New South Wales"] = "aus-cww-pro", ["Proto-Central Sudanic"] = "csu-pro", ["Proto-Central Togo"] = "alv-gtm-pro", ["Proto-Chadic"] = "cdc-pro", ["Proto-Chatino"] = "omq-cha-pro", ["Proto-Chibchan"] = "cba-pro", ["Proto-Chimakuan"] = "chi-pro", ["Proto-Chinookan"] = "nai-ckn-pro", ["Proto-Chukotko-Kamchatkan"] = "qfa-cka-pro", ["Proto-Chumash"] = "nai-chu-pro", ["Proto-Cupan"] = "azc-cup-pro", ["Proto-Daju"] = "sdv-daj-pro", ["Proto-Daly"] = "aus-dal-pro", ["Tiếng Dizi nguyên thủy"] = "omv-diz-pro", ["Proto-Eastern Jebel"] = "sdv-eje-pro", ["Proto-Eastern Oti-Volta"] = "nic-eov-pro", ["Proto-Edoid"] = "alv-edo-pro", ["Tiếng Eskimo-Aleut nguyên thủy"] = "esx-pro", ["Proto-Fali"] = "alv-fli-pro", ["Proto-Grassfields"] = "nic-grf-pro", ["Proto-Great Andamanese"] = "qfa-adm-pro", ["Proto-Guang"] = "alv-gng-pro", ["Proto-Gur"] = "nic-gur-pro", ["Proto-Gurunsi"] = "nic-gns-pro", ["Proto-Halmahera-Cenderawasih"] = "poz-hce-pro", ["Proto-Heiban"] = "alv-hei-pro", ["Proto-Highland East Cushitic"] = "cus-hec-pro", ["Proto-Hmong"] = "hmn-pro", ["Proto-Hrusish"] = "sit-hrs-pro", ["Proto-Huitoto-Ocaina"] = "sai-hoc-pro", ["Proto-Hurro-Urartian"] = "qfa-hur-pro", ["Proto-Idomoid"] = "alv-ido-pro", ["Proto-Igboid"] = "alv-igb-pro", ["Proto-Ijoid"] = "ijo-pro", ["Proto-Iwaidjan"] = "aus-wdj-pro", ["Proto-Jukunoid"] = "nic-jkn-pro", ["Proto-Kadu"] = "qfa-kad-pro", ["Proto-Kalamian"] = "phi-kal-pro", ["Proto-Kalapuyan"] = "nai-klp-pro", ["Proto-Kam-Sui"] = "qfa-kms-pro", ["Proto-Kampa"] = "awd-kmp-pro", ["Proto-Kham"] = "sit-kha-pro", ["Proto-Khoe"] = "khi-kho-pro", ["Tiếng Koman nguyên thủy"] = "ssa-kom-pro", ["Proto-Komisenian"] = "ira-kms-pro", ["Tiếng Kra nguyên thủy"] = "qfa-kra-pro", ["Tiếng Kra-Dai nguyên thủy"] = "qfa-tak-pro", ["Proto-Kru"] = "kro-pro", ["Proto-Kuki-Chin"] = "tbq-kuk-pro", ["Proto-Kuliak"] = "ssa-klk-pro", ["Proto-Kurdish"] = "ku-pro", ["Proto-Kwa"] = "alv-kwa-pro", ["Proto-Lalo"] = "tbq-lal-pro", ["Proto-Lampungic"] = "poz-lgx-pro", ["Proto-Lolo-Burmese"] = "tbq-lob-pro", ["Proto-Loloish"] = "tbq-lol-pro", ["Proto-Lower Cross River"] = "nic-lcr-pro", ["Proto-Luish"] = "sit-luu-pro", ["Proto-Maidun"] = "nai-mdu-pro", ["Proto-Mande"] = "dmn-pro", ["Proto-Mangbetu"] = "csu-maa-pro", ["Tiếng Mari nguyên thủy"] = "chm-pro", ["Proto-Masa"] = "cdc-mas-pro", ["Proto-Mazatec"] = "omq-maz-pro", ["Proto-Medo-Parthian"] = "ira-mpr-pro", ["Tiếng Miền nguyên thủy"] = "hmx-mie-pro", ["Proto-Mixe-Zoque"] = "nai-miz-pro", ["Proto-Mixtec"] = "omq-mxt-pro", ["Proto-Mixtecan"] = "omq-mix-pro", ["Proto-Mumuye"] = "alv-mum-pro", ["Proto-Munji-Yidgha"] = "ira-mny-pro", ["Proto-Na-Dene"] = "xnd-pro", ["Proto-Nahuan"] = "azc-nah-pro", ["Proto-Nawiki"] = "awd-nwk-pro", ["Tiếng Nguni nguyên thủy"] = "bnt-ngu-pro", ["Tiếng Niger-Congo nguyên thủy"] = "nic-pro", ["Tiếng Nin-Sahara nguyên thủy"] = "ssa-pro", ["Proto-Nilotic"] = "sdv-nil-pro", ["Proto-Norse"] = "gmq-pro", ["Proto-North Caucasian"] = "ccn-pro", ["Proto-North Halmahera"] = "paa-nha-pro", ["Proto-North Sarawak"] = "poz-swa-pro", ["Proto-Nubian"] = "nub-pro", ["Proto-Numic"] = "azc-num-pro", ["Proto-Nupoid"] = "alv-nup-pro", ["Tiếng Nuristan nguyên thủy"] = "iir-nur-pro", ["Proto-Nyima"] = "sdv-nyi-pro", ["Proto-Nyulnyulan"] = "aus-nyu-pro", ["Proto-Ogoni"] = "nic-ogo-pro", ["Tiếng Omo nguyên thủy"] = "omv-pro", ["Tiếng Önge nguyên thủy"] = "qfa-ong-pro", ["Proto-Ossetic"] = "os-pro", ["Proto-Oti-Volta"] = "nic-ovo-pro", ["Proto-Oto-Manguean"] = "omq-pro", ["Proto-Oto-Pamean"] = "omq-otp-pro", ["Proto-Otomi"] = "oto-otm-pro", ["Proto-Otomian"] = "oto-pro", ["Proto-Paresi-Waura"] = "awd-prw-pro", ["Proto-Plateau"] = "nic-plt-pro", ["Proto-Plateau Penutian"] = "nai-plp-pro", ["Proto-Pnar-Khasi-Lyngngam"] = "aav-pkl-pro", ["Proto-Pomeranian"] = "zlw-pom-pro", ["Proto-Pomo"] = "nai-pom-pro", ["Tiếng Rukai nguyên thủy"] = "dru-pro", ["Tiếng Lưu Cầu nguyên thủy"] = "jpx-ryu-pro", ["Proto-Saka"] = "xsc-sak-pro", ["Proto-Saka-Wakhi"] = "xsc-skw-pro", ["Proto-Sanglechi-Ishkashimi"] = "ira-sgi-pro", ["Proto-Sara"] = "csu-sar-pro", ["Proto-Scythian"] = "xsc-pro", ["Proto-Shughni-Roshani"] = "ira-shr-pro", ["Proto-Shughni-Yazghulami"] = "ira-shy-pro", ["Proto-Shughni-Yazghulami-Munji"] = "ira-sym-pro", ["Proto-Siouan-Catawban"] = "nai-sca-pro", ["Proto-Songhay"] = "son-pro", ["Proto-Sotho-Tswana"] = "bnt-sts-pro", ["Proto-South Sulawesi"] = "poz-ssw-pro", ["Proto-Southern Jê"] = "sai-sje-pro", ["Proto-Sunda-Sulawesi"] = "poz-sus-pro", ["Proto-Ta-Arawak"] = "awd-taa-pro", ["Proto-Takic"] = "azc-tak-pro", ["Proto-Taman"] = "sdv-tmn-pro", ["Proto-Tani"] = "sit-tan-pro", ["Proto-Taranoan"] = "sai-tar-pro", ["Proto-Tatic"] = "xme-ttc-pro", ["Proto-Totozoquean"] = "nai-tot-pro", ["Proto-Trans-New Guinea"] = "ngf-pro", ["Proto-Trique"] = "omq-tri-pro", ["Proto-Tsezian"] = "cau-tsz-pro", ["Proto-Tsimshianic"] = "nai-tsi-pro", ["Tiếng Tupi nguyên thủy"] = "tup-pro", ["Proto-Ubangian"] = "nic-ubg-pro", ["Proto-Upper Cross River"] = "nic-ucr-pro", ["Proto-Utian"] = "nai-utn-pro", ["Tiếng Ute-Aztec nguyên thủy"] = "azc-pro", ["Proto-Volta-Congo"] = "nic-vco-pro", ["Proto-Volta-Niger"] = "alv-von-pro", ["Tiếng Semit Tây nguyên thủy"] = "sem-wes-pro", ["Proto-Western Mande"] = "dmn-mdw-pro", ["Proto-Witotoan"] = "sai-wit-pro", ["Proto-Yeniseian"] = "qfa-yen-pro", ["Proto-Yupik"] = "ypk-pro", ["Proto-Zapotec"] = "omq-zpc-pro", ["Proto-Zapotecan"] = "omq-zap-pro", ["Proto-Zaza-Gorani"] = "ira-zgr-pro", ["Providencia Sign Language"] = "prz", ["Psikye"] = "kvj", ["Puare"] = "pux", ["Pudtol Atta"] = "atp", ["Puebla Mazatec"] = "pbm", ["Puelche"] = "pue", ["Puerto Rican Sign Language"] = "psl", ["Puimei Naga"] = "npu", ["Puinave"] = "pui", ["Puiron"] = "sit-prn", ["Pukapukan"] = "pkp", ["Pulabu"] = "pup", ["Puluwat"] = "puw", ["Puma"] = "pum", ["Tiếng Pumpokol"] = "xpm", ["Pumé"] = "yae", ["Punan Aput"] = "pud", ["Punan Bah-Biau"] = "pna", ["Punan Batu"] = "pnm", ["Punan Merah"] = "puf", ["Punan Merap"] = "puc", ["Punan Tubu"] = "puj", ["Punu"] = "puu", ["Puquina"] = "puq", ["Puragi"] = "pru", ["Purari"] = "iar", ["Purepecha"] = "pua", ["Puri"] = "prr", ["Purik"] = "prx", ["Purisimeño"] = "puy", ["Puruborá"] = "pur", ["Puruhá"] = "sai-prh", ["Purukotó"] = "sai-pur", ["Purum"] = "pub", ["Putai"] = "mfl", ["Putoh"] = "put", ["Putukwam"] = "afe", ["Puyo-Paekche"] = "xpp", ["Pwaamei"] = "pme", ["Pwapwa"] = "pop", ["Pyapun"] = "pcw", ["Pye Krumen"] = "pye", ["Pyemmairre"] = "xpb", ["Pyen"] = "pyy", ["Pykobjê"] = "sai-pyk", ["Pyu"] = "pby", ["Páez"] = "pbb", ["Pááfang"] = "pfa", ["Päri"] = "lkr", ["Pémono"] = "pev", ["Pévé"] = "lme", ["Pökoot"] = "pko", ["Q'anjob'al"] = "kjb", ["Q'eqchi"] = "kek", ["Qabiao"] = "laq", ["Qaqet"] = "byx", ["Qatabanian"] = "xqt", ["Qau"] = "gqu", ["Qila Muji"] = "ymq", ["Tiếng Qimant"] = "ahg", ["Quebec Sign Language"] = "fcs", ["Querétaro Otomi"] = "otq", ["Quetzaltepec Mixe"] = "pxm", ["Queyu"] = "qvy", ["Quiavicuzas Zapotec"] = "zpj", ["Quileute"] = "qui", ["Quimbaya"] = "sai-qmb", ["Quinault"] = "qun", ["Quinigua"] = "nai-qng", ["Quinqui"] = "quq", ["Quioquitani-Quierí Zapotec"] = "ztq", ["Quiotepec Chinantec"] = "chq", ["Quitemo"] = "sai-qtm", ["Tiếng Quốc tế ngữ"] = "eo", ["Rabona"] = "sai-rab", ["Raga"] = "lml", ["Rahambuu"] = "raz", ["Rajah Kabunsuwan Manobo"] = "mqk", ["Raji"] = "rji", ["Rajong"] = "rjg", ["Rakahanga-Manihiki"] = "rkh", ["Ralte"] = "ral", ["Ramandi"] = "tks", ["Ramanos"] = "sai-ram", ["Ramoaaina"] = "rai", ["Ramopa"] = "kjx", ["Rampi"] = "lje", ["Rana Tharu"] = "thr", ["Rang"] = "rax", ["Rangkas"] = "rgk", ["Ranglong"] = "rnl", ["Rao"] = "rao", ["Rapa"] = "ray", ["Rapoisi"] = "kyx", ["Rapting"] = "rpt", ["Rara Bakati'"] = "lra", ["Tiếng Ratagnon"] = "btn", ["Ratahan"] = "rth", ["Rathawi"] = "rtw", ["Rathwi Bareli"] = "bgd", ["Rawa"] = "rwo", ["Rawat"] = "jnl", ["Rawo"] = "rwa", ["Rayón Zoque"] = "zor", ["Razajerdi"] = "rat", ["Razihi"] = "rzh", ["Reang"] = "ria", ["Red Gelao"] = "gir", ["Reel"] = "atu", ["Rejang Kayan"] = "ree", ["Reli"] = "rei", ["Rema"] = "bow", ["Rembarunga"] = "rmb", ["Rembong"] = "reb", ["Remo"] = "rem", ["Remontado Agta"] = "agv", ["Rempi"] = "rmp", ["Remun"] = "lkj", ["Rennellese"] = "mnv", ["Repanbitip"] = "rpn", ["Rer Bare"] = "rer", ["Rerau"] = "rea", ["Rerep"] = "pgk", ["Reshe"] = "res", ["Resígaro"] = "rgr", ["Retta"] = "ret", ["Reyesano"] = "rey", ["Rhine Franconian"] = "gmw-rfr", ["Riang"] = "ril", ["Riantana"] = "ran", ["Ribun"] = "rir", ["Rigwe"] = "iri", ["Rikbaktsa"] = "rkb", ["Rincón Zapotec"] = "zar", ["Ringgou"] = "rgu", ["Ririo"] = "rri", ["Ritarungo"] = "rit", ["Riung"] = "riu", ["Riverain Sango"] = "snj", ["Rogo"] = "rod", ["Roma"] = "rmm", ["Romani Greek"] = "rge", ["Romanian Sign Language"] = "rms", ["Romano-Serbian"] = "rsb", ["Romanova"] = "rmv", ["Romblomanon"] = "rol", ["Rombo"] = "rof", ["Romkun"] = "rmk", ["Ron"] = "cla", ["Ronga"] = "rng", ["Rongga"] = "ror", ["Rongmei Naga"] = "nbu", ["Rongpo"] = "rnp", ["Ronji"] = "roe", ["Roon"] = "rnn", ["Roria"] = "rga", ["Roro"] = "rro", ["Rotokas"] = "roo", ["Rotuman"] = "rtm", ["Roviana"] = "rug", ["Rudbari"] = "rdb", ["Rufiji"] = "rui", ["Ruga"] = "ruh", ["Rukiga"] = "cgg", ["Ruma"] = "ruz", ["Rumu"] = "klq", ["Runga"] = "rou", ["Rungtu"] = "rtc", ["Rungwa"] = "rnw", ["Russenorsk"] = "crp-rsn", ["Russian Sign Language"] = "rsl", ["Ruuli"] = "ruc", ["Ruwund"] = "rnd", ["Rwa"] = "rwk", ["Rwanda-Rundi"] = "rw", ["Réunion Creole French"] = "rcf", ["Sa"] = "sax", ["Sa'a"] = "apb", ["Sa'ban"] = "snv", ["Sa'och"] = "scq", ["Saafi-Saafi"] = "sav", ["Saam"] = "raq", ["Saamia"] = "lsm", ["Saare"] = "uss", ["Saba"] = "saa", ["Tiếng Bisaya Sabah"] = "bsy", ["Sabah Malay"] = "msi", ["Sabanê"] = "sae", ["Sabaot"] = "spy", ["Sabine"] = "sbv", ["Sabir"] = "pml", ["Sabu"] = "hvn", ["Sacapulteco"] = "quv", ["Saep"] = "spd", ["Safaitic"] = "sem-saf", ["Safaliba"] = "saf", ["Safeyoka"] = "apz", ["Safwa"] = "sbk", ["Sagala"] = "sbm", ["Sagalla"] = "tga", ["Sahaptin"] = "nai-spt", ["Sahu"] = "saj", ["Sajau Basap"] = "sjb", ["Sakachep"] = "sch", ["Sakam"] = "skm", ["Sakao"] = "sku", ["Sakata"] = "skt", ["Sake"] = "sak", ["Sala"] = "shq", ["Salampasu"] = "slx", ["Salas"] = "sgu", ["Salchuq"] = "slq", ["Saleman"] = "sau", ["Saliba (Colombia)"] = "slc", ["Saliba (New Guinea)"] = "sbe", ["Salinan"] = "sln", ["Salt-Yui"] = "sll", ["Saluan"] = "loe", ["Salumá"] = "slj", ["Salvadoran Lenca"] = "nai-sln", ["Salvadoran Sign Language"] = "esn", ["Sam"] = "snx", ["Sama"] = "smd", ["Samaritan Aramaic"] = "sam", ["Samaritan Hebrew"] = "smp", ["Samarokena"] = "tmj", ["Samatao"] = "ysd", ["Samba"] = "smx", ["Tiếng Sambali"] = "xsb", ["Sambalpuri"] = "spv", ["Sambe"] = "xab", ["Samberigi"] = "ssx", ["Samburu"] = "saq", ["Tiếng Thát Mai"] = "smh", ["Tiếng Samo"] = "smq", ["Samoan Plantation Pidgin"] = "cpe-spp", ["Samosa"] = "swm", ["Sampang"] = "rav", ["Samre"] = "sxm", ["Samvedi"] = "smv", ["San Agustín Mixtepec Zapotec"] = "ztm", ["San Baltazar Loxicha Zapotec"] = "zpx", ["San Felipe Otlaltepec Popoloca"] = "pow", ["San Jerónimo Tecóatl Mazatec"] = "maa", ["San Juan Atzingo Popoloca"] = "poe", ["San Juan Colorado Mixtec"] = "mjc", ["Tiếng Zapotec San Juan Guelavía"] = "zab", ["San Juan Quiahije Chatino"] = "ctp-san", ["San Juan Teita Mixtec"] = "xtj", ["San Luís Temalacayuca Popoloca"] = "pps", ["San Marcos Tlalcoyalco Popoloca"] = "pls", ["Tiếng Triqui San Martín Itunyoso"] = "trq", ["San Miguel Creole French"] = "scf", ["San Miguel Piedras Mixtec"] = "xtp", ["San Miguel el Grande Mixtec"] = "mig", ["San Pablo Güilá Zapotec"] = "ztu", ["San Pedro Amuzgos Amuzgo"] = "azg", ["San Pedro Quiatoni Zapotec"] = "zpf", ["San Vicente Coatlán Zapotec"] = "zpt", ["Sanapaná"] = "spn", ["Sanaviron"] = "sai-san", ["Sandawe"] = "sad", ["Sanga (Congo)"] = "sng", ["Sanga (Nigeria)"] = "xsn", ["Sanggau"] = "scg", ["Sangil"] = "snl", ["Tiếng Sangir"] = "sxn", ["Sangisari"] = "sgr", ["Sangkong"] = "sgk", ["Sanglechi"] = "sgy", ["Sangtam Naga"] = "nsa", ["Sangu (Gabon)"] = "snq", ["Sangu (Tanzania)"] = "sbp", ["Sani"] = "ysn", ["Sanie"] = "ysy", ["Saniyo-Hiyewe"] = "sny", ["Sankaran Maninka"] = "msc", ["Sansi"] = "ssi", ["Santa Catarina Albarradas Zapotec"] = "ztn", ["Santa Inés Ahuatempan Popoloca"] = "pca", ["Santa Inés Yatzechi Zapotec"] = "zpn", ["Santa Lucía Monteverde Mixtec"] = "mdv", ["Santa María La Alta Nahuatl"] = "nhz", ["Santa María Quiegolani Zapotec"] = "zpi", ["Santa María Zacatepec Mixtec"] = "mza", ["Santa Teresa Cora"] = "cok", ["Santiago Xanica Zapotec"] = "zpr", ["Santo Domingo Albarradas Zapotec"] = "zas", ["Sanumá"] = "xsu", ["Saparua"] = "spr", ["Sapará"] = "sai-sap", ["Sapo"] = "krn", ["Saponi"] = "spi", ["Sapuan"] = "spu", ["Sapé"] = "spc", ["Sar"] = "mwm", ["Sara"] = "sre", ["Sara Kaba"] = "sbz", ["Sara Kaba Deme"] = "kwg", ["Sara Kaba Náà"] = "kwv", ["Sarangani Blaan"] = "bps", ["Sarangani Manobo"] = "mbs", ["Sarasira"] = "zsa", ["Saraveca"] = "sar", ["Tiếng Sarikol"] = "srh", ["Sarli"] = "sdf", ["Sartang"] = "onp", ["Sarua"] = "swy", ["Sarudu"] = "sdu", ["Saruga"] = "sra", ["Tiếng Sasak"] = "sas", ["Sasaru"] = "sxs", ["Sassarese"] = "sdc", ["Satawalese"] = "stw", ["Sateré-Mawé"] = "mav", ["Sathmar Swabian"] = "gmw-stm", ["Saudi Arabian Sign Language"] = "sdl", ["Sauraseni Apabhramsa"] = "inc-sap", ["Saurashtra"] = "saz", ["Sauri"] = "srt", ["Sause"] = "sao", ["Sausi"] = "ssj", ["Savi"] = "sdg", ["Savosavo"] = "svs", ["Sawai"] = "szw", ["Saweru"] = "swr", ["Sawi"] = "saw", ["Sawila"] = "swt", ["Saya"] = "say", ["Sayula Popoluca"] = "pos", ["Scanian"] = "gmq-scy", ["Seba"] = "kdg", ["Seberuang"] = "sbx", ["Sebop"] = "sib", ["Sebuyau"] = "snb", ["Sechelt"] = "sec", ["Sechura"] = "sai-sec", ["Secoya"] = "sey", ["Sedoa"] = "tvw", ["Seenku"] = "sos", ["Segai"] = "sge", ["Segeju"] = "seg", ["Seget"] = "sbg", ["Sehwi"] = "sfw", ["Seim"] = "sim", ["Seimat"] = "ssg", ["Seit-Kaitetu"] = "hik", ["Sekani"] = "sek", ["Sekapan"] = "skp", ["Sekar"] = "skz", ["Seke"] = "skj", ["Sekele"] = "vaj", ["Seki"] = "syi", ["Seko Padang"] = "skx", ["Seko Tengah"] = "sko", ["Sekpele"] = "lip", ["Selangor Sign Language"] = "kgi", ["Selaru"] = "slu", ["Selayar"] = "sly", ["Selee"] = "snw", ["Selepet"] = "spl", ["Selk'nam"] = "ona", ["Selonian"] = "sxl", ["Selungai Murut"] = "slg", ["Seluwasan"] = "sws", ["Sema"] = "nsm", ["Semandang"] = "sdm", ["Sembakung Murut"] = "sbr", ["Semimi"] = "etz", ["Semnani"] = "smy", ["Sempan"] = "xse", ["Tiếng Sena"] = "seh", ["Senara Sénoufo"] = "seq", ["Senaya"] = "syn", ["Sene"] = "sej", ["Sengele"] = "szg", ["Senggi"] = "snu", ["Sengo"] = "spk", ["Sengseng"] = "ssz", ["Tiếng Senhaja de Srair"] = "sjs", ["Sensi"] = "sni", ["Sentani"] = "set", ["Senthang Chin"] = "sez", ["Sentinelese"] = "std", ["Sepa (Indonesia)"] = "spb", ["Sepa (New Guinea)"] = "spe", ["Sepen"] = "spm", ["Sepik Iwam"] = "iws", ["Sepik Mari"] = "mbx", ["Sera"] = "sry", ["Sere"] = "swf", ["Serer"] = "srr", ["Serili"] = "sve", ["Seroa"] = "kqu", ["Serrano"] = "ser", ["Seru"] = "szd", ["Serua"] = "srw", ["Serudung Murut"] = "srk", ["Serui-Laut"] = "seu", ["Seta"] = "stf", ["Setaman"] = "stm", ["Seti"] = "sbi", ["Severn Ojibwa"] = "ojs", ["Sewa Bay"] = "sew", ["Seychellois Creole"] = "crs", ["Sha"] = "scw", ["Shabak"] = "sdb", ["Shabo"] = "sbf", ["Shahmirzadi"] = "srz", ["Shahrudi"] = "shm", ["Shall-Zwall"] = "sha", ["Shama-Sambuga"] = "sqa", ["Shamang"] = "xsh", ["Shambala"] = "ksb", ["Shanenawa"] = "swo", ["Shanga"] = "sho", ["Shangzhai"] = "jih", ["Shaozhou Tuhua"] = "zhx-sht", ["Sharanahua"] = "mcd", ["Shark Bay"] = "ssv", ["Sharwa"] = "swq", ["Shasta"] = "sht", ["Shatt"] = "shj", ["Shau"] = "sqh", ["Shawnee"] = "sjw", ["She"] = "shx", ["Tiếng Shebayo"] = "awd-she", ["Shehri"] = "shv", ["Shekkacho"] = "moy", ["Sheko"] = "she", ["Shelta"] = "sth", ["Shendu"] = "shl", ["Sheni"] = "scv", ["Sherbro"] = "bun", ["Sherdukpen"] = "sdp", ["Tiếng Kham Sheshi"] = "kip", ["Shi"] = "shr", ["Shihhi Arabic"] = "ssh", ["Shiki"] = "gua", ["Shilluk"] = "shk", ["Tiếng Shinasha"] = "bwo", ["Shipibo-Conibo"] = "shp", ["Shixing"] = "sxg", ["Shoo-Minda-Nye"] = "bcv", ["Shoshone"] = "shh", ["Shua"] = "shg", ["Shuar"] = "jiv", ["Shuba"] = "cbq", ["Tiếng Shughnan"] = "sgh", ["Shumashti"] = "sts", ["Shumcho"] = "scu", ["Shuwa-Zamani"] = "ksa", ["Shwai"] = "shw", ["Sialum"] = "slw", ["Siamou"] = "sif", ["Sian"] = "spg", ["Siane"] = "snp", ["Siang"] = "sya", ["Siar-Lak"] = "sjr", ["Sibe"] = "nco", ["Sibu Melanau"] = "sdx", ["Sicanian"] = "sxc", ["Siculo-Arabic"] = "sqr", ["Sidetic"] = "xsd", ["Sie"] = "erg", ["Sierra Leone Sign Language"] = "sgx", ["Sierra Negra Nahuatl"] = "nsu", ["Sierra de Juárez Zapotec"] = "zaa", ["Sighu"] = "sxe", ["Sihan"] = "snr", ["Sika"] = "ski", ["Sikaiana"] = "sky", ["Sikaritai"] = "tty", ["Sikiana"] = "sik", ["Sikule"] = "skh", ["Sila"] = "slt", ["Silacayoapan Mixtec"] = "mks", ["Sileibi"] = "sbq", ["Silimo"] = "wul", ["Siliput"] = "mkc", ["Silopi"] = "xsp", ["Simaa"] = "sie", ["Simba"] = "sbw", ["Simbali"] = "smg", ["Simbari"] = "smb", ["Simbo"] = "sbb", ["Simeku"] = "smz", ["Simeulue"] = "smr", ["Simte"] = "smt", ["Sinacantán"] = "nai-sin", ["Sinagen"] = "siu", ["Sinasina"] = "sst", ["Sinaugoro"] = "snc", ["Sindarin"] = "sjn", ["Sindhi Bhil"] = "sbn", ["Sindihui Mixtec"] = "xts", ["Singa"] = "sgm", ["Singapore Sign Language"] = "sls", ["Singpho"] = "sgp", ["Sinicahua Mixtec"] = "xti", ["Sininkere"] = "skq", ["Sinte Romani"] = "rmo", ["Sinyar"] = "sys", ["Sinúfana"] = "sai-sin", ["Sio"] = "xsi", ["Siona"] = "snn", ["Sipakapense"] = "qum", ["Sira"] = "swj", ["Sirenik"] = "ysr", ["Siri"] = "sir", ["Siriano"] = "sri", ["Sirionó"] = "srq", ["Sirmauri"] = "srx", ["Siroi"] = "ssd", ["Sissala"] = "sld", ["Tiếng Tứ Thổ"] = "sit-sit", ["Siuslaw"] = "sis", ["Sivandi"] = "siy", ["Siwai"] = "siw", ["Siwu"] = "akp", ["Siyin Chin"] = "csy", ["Skagit"] = "ska", ["Skalvian"] = "svx", ["Ske"] = "ske", ["Skou"] = "skv", ["Slavomolisano"] = "svm", ["Slovakian Sign Language"] = "svk", ["Small Flowery Miao"] = "sfm", ["Smärky Kanum"] = "kxq", ["Snohomish"] = "sno", ["So'a"] = "ssq", ["Sobei"] = "sob", ["Sochiapam Chinantec"] = "cso", ["Soga"] = "xog", ["Sok"] = "skk", ["Soko"] = "soc", ["Sokoro"] = "sok", ["Solano"] = "xso", ["Soli"] = "sby", ["Solos"] = "sol", ["Som"] = "smc", ["Somba-Siawari"] = "bmu", ["Somra"] = "ntx", ["Somrai"] = "sor", ["Somray"] = "smu", ["Somyev"] = "kgt", ["Sonaga"] = "ysg", ["Sonde"] = "shc", ["Songe"] = "sop", ["Songlai Chin"] = "csj", ["Songomeno"] = "soe", ["Songoora"] = "sod", ["Sonha"] = "soi", ["Sonia"] = "siq", ["Soninke"] = "snk", ["Soo"] = "teu", ["Sop"] = "urw", ["Sori-Harengan"] = "sbh", ["Sorkhei"] = "sqo", ["Sorothaptic"] = "sxo", ["Sorsogon Ayta"] = "ays", ["Sos Kundi"] = "sdk", ["Sota Kanum"] = "krz", ["Sou"] = "sqq", ["South African Sign Language"] = "sfs", ["South Awyu"] = "aws", ["South Boma"] = "bnt-sbo", ["South Central Banda"] = "lnl", ["South Central Dinka"] = "dib", ["South Efate"] = "erk", ["South Fali"] = "fal", ["South Giziga"] = "giz", ["South Lembata"] = "lmf", ["South Marquesan"] = "mqm", ["South Muyu"] = "kts", ["South Nuaulu"] = "nxl", ["South Tairora"] = "omw", ["South Ucayali Ashéninka"] = "cpy", ["South Watut"] = "mcy", ["Southeast Ambrym"] = "tvk", ["Southeast Babar"] = "vbb", ["Southeast Ijo"] = "ijs", ["Southeast Pashayi"] = "psi", ["Southeast Tasmanian"] = "xpf", ["Southeastern Dinka"] = "dks", ["Southeastern Ixtlán Zapotec"] = "zpd", ["Southeastern Nochixtlán Mixtec"] = "mxy", ["Southeastern Pomo"] = "pom", ["Southeastern Puebla Nahuatl"] = "npl", ["Southeastern Tarahumara"] = "tcu", ["Southern Alta"] = "agy", ["Tiếng Bạch Nam"] = "bfs", ["Southern Birifor"] = "biv", ["Southern Bobo"] = "bwq", ["Southern Bontoc"] = "obk", ["Southern Carrier"] = "caf", ["Southern Catanduanes Bicolano"] = "bln", ["Southern Dagaare"] = "dga", ["Southern East Cree"] = "crj", ["Southern Ghale"] = "ghe", ["Southern Grebo"] = "grj", ["Southern Guiyang Hmong"] = "hmy", ["Southern Haida"] = "hax", ["Southern Hindko"] = "hnd", ["Southern Kalapuya"] = "sxk", ["Southern Kalinga"] = "ksc", ["Southern Khanty"] = "kca-sou", ["Southern Kissi"] = "kss", ["Southern Kiwai"] = "kjd", ["Southern Kurdish"] = "sdh", ["Southern Lolopo"] = "ysp", ["Southern Lorung"] = "lrr", ["Southern Ma'di"] = "snm", ["Southern Mashan Hmong"] = "hma", ["Southern Muji"] = "ymc", ["Southern Ngbandi"] = "nbw", ["Southern Nisu"] = "nsd", ["Southern Nuni"] = "nnw", ["Southern Ohlone"] = "css", ["Southern One"] = "osu", ["Southern Pame"] = "pmz", ["Southern Pinghua"] = "csp", ["Southern Pomo"] = "peq", ["Southern Puebla Mixtec"] = "mit", ["Southern Puget Sound Salish"] = "slh", ["Southern Pumi"] = "pmj", ["Southern Qiandong Miao"] = "hms", ["Tiếng Khương Nam"] = "qxs", ["Southern Rengma Naga"] = "nre", ["Southern Rincon Zapotec"] = "zsr", ["Southern Sama"] = "ssb", ["Southern Samo"] = "sbd", ["Southern Sierra Miwok"] = "skd", ["Southern Tidong"] = "itd", ["Southern Tiwa"] = "tix", ["Southern Toussian"] = "wib", ["Southern Tutchone"] = "tce", ["Southern Valley Yokuts"] = "nai-svy", ["Southwest Gbaya"] = "gso", ["Southwest Palawano"] = "plv", ["Southwest Pashayi"] = "psh", ["Southwest Tanna"] = "nwi", ["Southwestern Bontoc"] = "vbk", ["Southwestern Dinka"] = "dik", ["Southwestern Fars"] = "fay", ["Southwestern Guiyang Hmong"] = "hmg", ["Southwestern Huishui Hmong"] = "hmh", ["Southwestern Nisu"] = "nsv", ["Southwestern Tamang"] = "tsf", ["Southwestern Tarahumara"] = "twr", ["Southwestern Tepehuan"] = "tla", ["Southwestern Tlaxiaco Mixtec"] = "meh", ["Sowa"] = "sww", ["Sowanda"] = "sow", ["Soyaltepec Mazatec"] = "vmp", ["Soyaltepec Mixtec"] = "vmq", ["Spanish Sign Language"] = "ssp", ["Spiti Bhoti"] = "spt", ["Spokane"] = "spo", ["Squamish"] = "squ", ["Sri Lankan Creole Malay"] = "sci", ["Sri Lankan Sign Language"] = "sqs", ["Stod Bhoti"] = "sbu", ["Stoney"] = "sto", ["Suabo"] = "szp", ["Suarmin"] = "seo", ["Suau"] = "swp", ["Suba"] = "sxb", ["Suba-Simbiti"] = "ssc", ["Subi"] = "xsj", ["Subiya"] = "sbs", ["Subtiaba"] = "sut", ["Sudest"] = "tgo", ["Sudovian"] = "xsv", ["Suena"] = "sue", ["Suga"] = "sgi", ["Suganga"] = "sug", ["Sugut Dusun"] = "kzs", ["Suki"] = "sui", ["Suku"] = "sub", ["Sukuma"] = "suk", ["Sukur"] = "syk", ["Sukurum"] = "zsu", ["Sula"] = "szn", ["Sulka"] = "sua", ["Sulod"] = "srg", ["Sulung"] = "suv", ["Suma"] = "sqm", ["Sumariup"] = "siv", ["Sumau"] = "six", ["Sumbawa"] = "smw", ["Sumbwa"] = "suw", ["Sumtu Chin"] = "csv", ["Sunam"] = "ssk", ["Sunum"] = "ymn", ["Sunwar"] = "suz", ["Suoy"] = "syo", ["Supyire"] = "spp", ["Sur"] = "tdl", ["Surbakhal"] = "sbj", ["Surigaonon"] = "sgd", ["Sursurunga"] = "sgz", ["Suruahá"] = "swx", ["Surubu"] = "sde", ["Suruí"] = "sru", ["Suruí Do Pará"] = "mdz", ["Susquehannock"] = "sqn", ["Susu"] = "sus", ["Susuami"] = "ssu", ["Suundi"] = "sdj", ["Suwawa"] = "swu", ["Suyá"] = "suy", ["Swabian"] = "swg", ["Swampy Cree"] = "csw", ["Swedish Sign Language"] = "swl", ["Swiss-French Sign Language"] = "ssr", ["Swiss-German Sign Language"] = "sgg", ["Swiss-Italian Sign Language"] = "slf", ["Swo"] = "sox", ["Syenara Senoufo"] = "shz", ["Sácata"] = "sai-sac", ["São Paulo Kaingáng"] = "zkp", ["Sãotomense"] = "cri", ["Sìcìté Sénoufo"] = "sep", ["T'en"] = "tct", ["Tabaa Zapotec"] = "zat", ["Tabancale"] = "sai-tab", ["Tabaru"] = "tby", ["Tabasco Chontal"] = "chf", ["Tabasco Nahuatl"] = "nhc", ["Tabasco Zoque"] = "zoq", ["Tabla"] = "tnm", ["Tabo"] = "knv", ["Tabriak"] = "tzx", ["Tacahua Mixtec"] = "xtt", ["Tacana"] = "tna", ["Tadaksahak"] = "dsq", ["Tiếng Tadyawan"] = "tdy", ["Tae'"] = "rob", ["Tafi"] = "tcd", ["Tafreshi"] = "xme-taf", ["Tagabawa"] = "bgs", ["Tagakaulu Kalagan"] = "klg", ["Tagbanwa"] = "tbw", ["Tagbu"] = "tbm", ["Tagdal"] = "tda", ["Tagish"] = "tgx", ["Tagwana Senoufo"] = "tgw", ["Tahltan"] = "tht", ["Tai"] = "taw", ["Tai Hang Tong"] = "thc", ["Tai Hongjin"] = "tiz", ["Tai Long"] = "thi", ["Tai Thanh"] = "tmm", ["Tai Ya"] = "cuu", ["Taiap"] = "gpn", ["Taikat"] = "aos", ["Tiếng Nga bồi Taimyr"] = "crp-tpr", ["Tainae"] = "ago", ["Tairuma"] = "uar", ["Taita"] = "dav", ["Tiếng Taivoan"] = "tvx", ["Taiwan Sign Language"] = "tss", ["Taje"] = "pee", ["Tajio"] = "tdj", ["Tajuasohn"] = "tja", ["Takelma"] = "tkm", ["Takia"] = "tbc", ["Takka Apabhramsa"] = "inc-tak", ["Takua"] = "tkz", ["Takuu"] = "nho", ["Takwane"] = "tke", ["Talaud"] = "tld", ["Taliabu"] = "tlv", ["Talieng"] = "tdf", ["Talinga-Bwisi"] = "tlj", ["Talise"] = "tlr", ["Tallán"] = "sai-tal", ["Talodi"] = "tlo", ["Taloki"] = "tlk", ["Talondo'"] = "tln", ["Talu"] = "yta", ["Tama (Chad)"] = "tma", ["Tama (Colombia)"] = "ten", ["Tamagario"] = "tcg", ["Tamambo"] = "mla", ["Taman (Indonesia)"] = "tmn", ["Taman (Myanmar)"] = "tcl", ["Tamanaku"] = "tmz", ["Tamazola Mixtec"] = "vmx", ["Tambas"] = "tdk", ["Tambora"] = "xxt", ["Tambotalo"] = "tls", ["Tambunan Dusun"] = "kzt", ["Tami"] = "tmy", ["Tamnim Citak"] = "tml", ["Tampias Lobu"] = "low", ["Tampulma"] = "tpm", ["Tanacross"] = "tcb", ["Tanahmerah"] = "tcm", ["Tanapag"] = "tpv", ["Tandaganon"] = "tgn", ["Tandia"] = "tni", ["Tanema"] = "tnx", ["Tangale"] = "tan", ["Tangam"] = "sit-tgm", ["Tanggu"] = "tgu", ["Tangko"] = "tkx", ["Tangoa"] = "tgp", ["Tangsa"] = "nst", ["Tanguat"] = "tbs", ["Tanimuca-Retuarã"] = "tnc", ["Tanjijili"] = "uji", ["Tanudan Kalinga"] = "kml", ["Tanzanian Sign Language"] = "tza", ["Tapachultec"] = "nai-tap", ["Taparita"] = "sai-tpr", ["Tapayuna"] = "sai-tap", ["Tapeba"] = "tbb", ["Tapei"] = "afp", ["Tapieté"] = "tpj", ["Tar Gula"] = "kcm", ["Tarairiú"] = "sai-trr", ["Tiếng Tarantino"] = "roa-tar", ["Tarao"] = "tro", ["Taraon"] = "mhu", ["Tareng"] = "tgr", ["Tarjumo"] = "txj", ["Tarok"] = "yer", ["Tarpia"] = "tpf", ["Tartessian"] = "txr", ["Taruma"] = "tdm", ["Tasawaq"] = "twq", ["Tasmate"] = "tmt", ["Tiếng Tat"] = "ttt", ["Tataltepec Chatino"] = "cta", ["Tatana"] = "txx", ["Tataviam"] = "azc-tat", ["Tauade"] = "ttd", ["Taulil"] = "tuh", ["Taupota"] = "tpa", ["Taushiro"] = "trr", ["Tauya"] = "tya", ["Taveta"] = "tvs", ["Tawala"] = "tbo", ["Tawandê"] = "xtw", ["Tawang Monpa"] = "twm", ["Tawasa"] = "nai-taw", ["Taworta"] = "tbp", ["Tawoyan"] = "twy", ["Tawr Chin"] = "tcp", ["Tay Khang"] = "tnu", ["Tayabas Ayta"] = "ayy", ["Tiếng Tayma"] = "sem-tay", ["Tayo"] = "cks", ["Tiếng Taíno"] = "tnq", ["Tboli"] = "tbl", ["Tchitchege"] = "tck", ["Tchumbuli"] = "bqa", ["Te'un"] = "tve", ["Teanu"] = "tkw", ["Tebul Sign Language"] = "tsy", ["Tebul Ure Dogon"] = "dtu", ["Tecpatlán Totonac"] = "tcw", ["Tedaga"] = "tuq", ["Tedim Chin"] = "ctd", ["Tee"] = "tkq", ["Tefaro"] = "tfo", ["Tegali"] = "ras", ["Tehit"] = "kps", ["Tehuelche"] = "teh", ["Teiwa"] = "twe", ["Tejalapan Zapotec"] = "ztt", ["Teke-Fuumu"] = "ifm", ["Teke-Kukuya"] = "kkw", ["Teke-Laali"] = "lli", ["Teke-Tege"] = "teg", ["Teke-Tsaayi"] = "tyi", ["Teke-Tyee"] = "tyx", ["Tektiteko"] = "ttc", ["Tela-Masbuar"] = "tvm", ["Telefol"] = "tlf", ["Teluti"] = "tlt", ["Tembé"] = "tqb", ["Teme"] = "tdo", ["Temein"] = "teq", ["Temi"] = "soz", ["Temne"] = "tem", ["Temoaya Otomi"] = "ott", ["Tempasuk Dusun"] = "tdu", ["Tenango Otomi"] = "otn", ["Tene Kan Dogon"] = "dtk", ["Tenggarong Kutai Malay"] = "vkt", ["Tengger"] = "tes", ["Tenino"] = "tqn", ["Tenis"] = "tns", ["Tennet"] = "tex", ["Teojomulco Chatino"] = "omq-teo", ["Teop"] = "tio", ["Teor"] = "tev", ["Tepecano"] = "tep", ["Tepetotutla Chinantec"] = "cnt", ["Tepeuxila Cuicatec"] = "cux", ["Tepo Krumen"] = "ted", ["Teposcolula Mixtec"] = "omq-tel", ["Tequistlatec"] = "nai-teq", ["Ter Sami"] = "sjt", ["Tera"] = "ttr", ["Terebu"] = "trb", ["Terei"] = "buo", ["Tereno"] = "ter", ["Tereweng"] = "twg", ["Tiếng Teribe"] = "tfr", ["Terik"] = "tec", ["Termanu"] = "twu", ["Ternateño"] = "tmg", ["Tese"] = "keg", ["Teshenawa"] = "twc", ["Tetela"] = "tll", ["Tetelcingo Nahuatl"] = "nhg", ["Tetete"] = "teb", ["Tetserret"] = "tez", ["Tetun Dili"] = "tdt", ["Teushen"] = "sai-teu", ["Teutila Cuicatec"] = "cut", ["Tewa"] = "tew", ["Texcatepec Otomi"] = "otx", ["Texistepec Popoluca"] = "poq", ["Texmelucan Zapotec"] = "zpz", ["Tezoatlán Mixtec"] = "mxb", ["Tha"] = "thy", ["Thachanadan"] = "thn", ["Thado Chin"] = "tcz", ["Thai Sign Language"] = "tsq", ["Thaiphum Chin"] = "cth", ["Thakali"] = "ths", ["Thamudic"] = "sem-tha", ["Thangal Naga"] = "nki", ["Thangmi"] = "thf", ["Thao"] = "ssf", ["Tharaka"] = "thk", ["Tharrgari"] = "dhr", ["Thawa"] = "xtv", ["Thompson"] = "thp", ["Thopho"] = "ytp", ["Thu Lao"] = "tyl", ["Thulung"] = "tdh", ["Thurawal"] = "tbh", ["Thuri"] = "thu", ["Tiagbamrin Aizi"] = "ahi", ["Tiale"] = "mnl", ["Tibea"] = "ngy", ["Ticuna"] = "tca", ["Tidaá Mixtec"] = "mtx", ["Tidore"] = "tvo", ["Tiemacèwè Bozo"] = "boo", ["Tiene"] = "tii", ["Tifal"] = "tif", ["Tigak"] = "tgc", ["Tigon Mbembe"] = "nza", ["Tii"] = "txq", ["Tijaltepec Mixtec"] = "xtl", ["Tikar"] = "tik", ["Tikopia"] = "tkp", ["Tilapa Otomi"] = "otl", ["Tillamook"] = "til", ["Tilquiapan Zapotec"] = "zts", ["Tilung"] = "tij", ["Tima"] = "tms", ["Timbe"] = "tim", ["Timor Pidgin"] = "tvy", ["Timote"] = "sai-tim", ["Timucua"] = "tjm", ["Timugon Murut"] = "tih", ["Tinani"] = "lbf", ["Tingui-Boto"] = "tgv", ["Tinigua"] = "tit", ["Tinoc Kallahan"] = "tne", ["Tinputz"] = "tpz", ["Tiếng Tipai"] = "nai-tip", ["Tippera"] = "tpe", ["Tira"] = "tic", ["Tirahi"] = "tra", ["Tiranige Diga Dogon"] = "tde", ["Tircul"] = "pyx", ["Tiri"] = "cir", ["Tita"] = "tdq", ["Titan"] = "ttv", ["Tiv"] = "tiv", ["Tiwa"] = "lax", ["Tiếng Tiwi"] = "tiw", ["Tiéfo"] = "tiq", ["Tiéyaxo Bozo"] = "boz", ["Tjurruru"] = "tju", ["Tiếng Tepehua Tlachichilco"] = "tpt", ["Tlacoapa Me'phaa"] = "tpl", ["Tlacoatzintepec Chinantec"] = "ctl", ["Tlacolulita Zapotec"] = "zpk", ["Tlahuica"] = "ocu", ["Tlahuitoltepec Mixe"] = "mxp", ["Tlamacazapa Nahuatl"] = "nuz", ["Tlazoyaltepec Mixtec"] = "mqh", ["To"] = "toz", ["To'abaita"] = "mlu", ["Toaripi"] = "tqo", ["Toba"] = "tob", ["Toba Batak"] = "bbc", ["Toba-Maskoy"] = "tmf", ["Tobagonian Creole English"] = "tgh", ["Tobanga"] = "tng", ["Tobati"] = "tti", ["Tobelo"] = "tlb", ["Tobilung"] = "tgb", ["Tobo"] = "tbv", ["Tocantins Asurini"] = "asu", ["Tofanma"] = "tlg", ["Tofin Gbe"] = "tfi", ["Togbo-Vara Banda"] = "tor", ["Togoyo"] = "tgy", ["Tojolabal"] = "toj", ["Toka-Leya"] = "dov", ["Tokano"] = "zuh", ["Tol"] = "jic", ["Tolai"] = "ksd", ["Tolaki"] = "lbw", ["Tolomako"] = "tlm", ["Tolowa"] = "tol", ["Toloza"] = "ytl", ["Toma"] = "tod", ["Tomadino"] = "tdi", ["Tombelala"] = "ttp", ["Tombonuo"] = "txa", ["Tombulu"] = "tom", ["Tomini"] = "txm", ["Tommeginne"] = "xpv", ["Tommo So"] = "dto", ["Tomo Kan Dogon"] = "dtm", ["Tomoip"] = "tqp", ["Tondano"] = "tdn", ["Tonga (Malawi)"] = "tog", ["Tonga (Mozambique)"] = "toh", ["Tonga (Zambia)"] = "toi", ["Tongwe"] = "tny", ["Tonjon"] = "tjn", ["Tiếng Tonkawa"] = "tqw", ["Tonsawang"] = "tnw", ["Tonsea"] = "txs", ["Tontemboan"] = "tnt", ["Toogee"] = "xpx", ["Topoiyo"] = "toy", ["Toposa"] = "toq", ["Toraja-Sa'dan"] = "sda", ["Toram"] = "trj", ["Torau"] = "ttu", ["Toro"] = "tdv", ["Toro So Dogon"] = "dts", ["Toro Tegu Dogon"] = "dtt", ["Toromono"] = "tno", ["Torona"] = "tqr", ["Torres Strait Creole"] = "tcs", ["Torricelli"] = "tei", ["Torricelli Yau"] = "yyu", ["Torá"] = "trz", ["Tosu"] = "sit-tos", ["Totela"] = "ttl", ["Totoli"] = "txe", ["Totomachapan Zapotec"] = "zph", ["Totontepec Mixe"] = "mto", ["Totoro"] = "ttk", ["Touo"] = "tqu", ["Toura"] = "neb", ["Tourangeau"] = "roa-tou", ["Towei"] = "ttn", ["Transylvanian Saxon"] = "gmw-tsx", ["Traveller Danish"] = "rmd", ["Traveller Norwegian"] = "rmg", ["Traveller Scottish"] = "trl", ["Tregami"] = "trm", ["Tremembé"] = "tme", ["Trieng"] = "stg", ["Trimuris"] = "tip", ["Tring"] = "tgq", ["Tringgus"] = "trx", ["Trinidad and Tobago Sign Language"] = "lst", ["Trinidadian Creole English"] = "trf", ["Trinitario"] = "trn", ["Truká"] = "tka", ["Trumai"] = "tpy", ["Ts'ün-Lao"] = "tsl", ["Tsaangi"] = "tsa", ["Tsafiki"] = "cof", ["Tsakwambo"] = "kvz", ["Tsetsaut"] = "txc", ["Tsez"] = "ddo", ["Tshobdun"] = "sit-tsh", ["Tshwa"] = "hio", ["Tsikimba"] = "kdl", ["Tsimané"] = "cas", ["Tsishingini"] = "tsw", ["Tso"] = "ldp", ["Tsogo"] = "tsv", ["Tsotsitaal"] = "fly", ["Tsum"] = "ttz", ["Tsuvadi"] = "tvd", ["Tsuvan"] = "tsh", ["Tswa"] = "tsc", ["Tswapong"] = "two", ["Tubar"] = "tbu", ["Tucano"] = "tuo", ["Tugen"] = "tuy", ["Tugun"] = "tzn", ["Tugutil"] = "tuj", ["Tukpa"] = "tpq", ["Tukudede"] = "tkd", ["Tukumanféd"] = "tkf", ["Tula"] = "tul", ["Tule-Kaweah Yokuts"] = "nai-tky", ["Tulehu"] = "tlu", ["Tulishi"] = "tey", ["Tulu-Bohuai"] = "rak", ["Tulua"] = "aus-tul", ["Tuma-Irumu"] = "iou", ["Tumak"] = "tmc", ["Tumi"] = "kku", ["Tumleo"] = "tmq", ["Tumshuqese"] = "xtq", ["Tumtum"] = "tbr", ["Tumulung Sisaala"] = "sil", ["Tunen"] = "tvu", ["Tungag"] = "lcm", ["Tunggare"] = "trt", ["Tunia"] = "tug", ["Tiếng Tunica"] = "tun", ["Tunisian Arabic"] = "aeb", ["Tiếng Berber Tunisia"] = "sds", ["Tunisian Sign Language"] = "tse", ["Tunjung"] = "tjg", ["Tunumiisut"] = "esx-tut", ["Tunzu"] = "dza", ["Tuotomb"] = "ttf", ["Tuparí"] = "tpr", ["Tupinikin"] = "tpk", ["Tupuri"] = "tui", ["Turaka"] = "trh", ["Turi"] = "trd", ["Turiwára"] = "twt", ["Turka"] = "tuz", ["Turkana"] = "tuv", ["Turkish Sign Language"] = "tsm", ["Turks and Caicos Creole English"] = "tch", ["Tiếng Turoyo"] = "tru", ["Turumsa"] = "tqm", ["Turung"] = "try", ["Tuscarora"] = "tus", ["Tutelo"] = "tta", ["Tutong"] = "ttg", ["Tutsa Naga"] = "tvt", ["Tutuba"] = "tmi", ["Tututepec Mixtec"] = "mtu", ["Tututni"] = "tuu", ["Tuwali Ifugao"] = "ifk", ["Tuwari"] = "tww", ["Tuwuli"] = "bov", ["Tuxináwa"] = "tux", ["Tuxá"] = "tud", ["Tuyuca"] = "tue", ["Twana"] = "twa", ["Twendi"] = "twn", ["Tiếng Tyap"] = "kcg", ["Tyaraity"] = "woa", ["Tyerrernotepanner"] = "xph", ["Tz'utujil"] = "tzj", ["Tzeltal"] = "tzh", ["Tiếng Tzotzil"] = "tzo", ["Tày Tac"] = "tyt", ["Tiếng Tây Bồi"] = "tas", ["Téén"] = "lor", ["Tübatulabal"] = "tub", ["Tiếng U"] = "uuu", ["Uab Meto"] = "aoz", ["Uamué"] = "uam", ["Uare"] = "ksj", ["Ubaghara"] = "byc", ["Ubang"] = "uba", ["Ubi"] = "ubi", ["Ubir"] = "ubr", ["Ucayali-Yurúa Ashéninka"] = "cpb", ["Uda"] = "uda", ["Tiếng Uduk"] = "udu", ["Ufim"] = "ufi", ["Ugandan Sign Language"] = "ugn", ["Ughele"] = "uge", ["Uhami"] = "uha", ["Uisai"] = "uis", ["Ujir"] = "udj", ["Ukaan"] = "kcf", ["Ukhwejo"] = "ukh", ["Ukit"] = "umi", ["Ukpe-Bayobiri"] = "ukp", ["Ukpet-Ehom"] = "akd", ["Ukrainian Sign Language"] = "ukl", ["Ukue"] = "uku", ["Ukuriguma"] = "ukg", ["Ukwa"] = "ukq", ["Ukwuani-Aboh-Ndoni"] = "ukw", ["Ulau-Suain"] = "svb", ["Tiếng Ulch"] = "ulc", ["Uldeme"] = "udl", ["Ulithian"] = "uli", ["Ullatan"] = "ull", ["Ulumanda'"] = "ulm", ["Ulwa"] = "ulw", ["Uma"] = "ppk", ["Uma' Lasan"] = "xky", ["Uma' Lung"] = "ulu", ["Umanakaina"] = "gdn", ["Umatilla"] = "uma", ["Umbindhamu"] = "umd", ["Umbu-Ungu"] = "ubu", ["Umbugarla"] = "umr", ["Tiếng Umbundu"] = "umb", ["Umbuygamu"] = "umg", ["Umeda"] = "upi", ["Umiida"] = "xud", ["Umiray Dumaget Agta"] = "due", ["Umon"] = "umm", ["Umotína"] = "umo", ["Umpila"] = "ump", ["Una"] = "mtg", ["Unami"] = "unm", ["Unas"] = "art-una", ["Unde Kaili"] = "unz", ["Uneme"] = "une", ["Unggaranggu"] = "xun", ["Unggumi"] = "xgu", ["Unserdeutsch"] = "uln", ["Unua"] = "onu", ["Unubahe"] = "unu", ["Uokha"] = "uok", ["Upper Chehalis"] = "cjh", ["Upper Grand Valley Dani"] = "dna", ["Tiếng Thượng Kinabatangan"] = "dmg", ["Upper Kuskokwim"] = "kuu", ["Upper Necaxa Totonac"] = "tku", ["Upper Tanana"] = "tau", ["Upper Taromi"] = "tov", ["Upper Umpqua"] = "xup", ["Ura (New Guinea)"] = "uro", ["Ura (Vanuatu)"] = "uur", ["Uradhi"] = "urf", ["Urali"] = "url", ["Urapmin"] = "urm", ["Urarina"] = "ura", ["Urat"] = "urt", ["Urhobo"] = "urh", ["Uri"] = "uvh", ["Urigina"] = "urg", ["Urim"] = "uri", ["Urimo"] = "urx", ["Uripiv-Wala-Rano-Atchin"] = "upv", ["Urningangg"] = "urc", ["Uru"] = "ure", ["Uru-Eu-Wau-Wau"] = "urz", ["Uru-Pa-In"] = "urp", ["Uruangnirin"] = "urn", ["Uruava"] = "urv", ["Uruguayan Sign Language"] = "ugy", ["Urumi"] = "uru", ["Usaghade"] = "usk", ["Usan"] = "wnu", ["Usarufa"] = "usa", ["Usila Chinantec"] = "cuc", ["Uspanteco"] = "usp", ["Usui"] = "usi", ["Utarmbung"] = "omo", ["Ute"] = "ute", ["Utu"] = "utu", ["Tiếng Uvbie"] = "evh", ["Uwinymil"] = "aus-uwi", ["Uya"] = "usu", ["Uyajitaya"] = "duk", ["Uzekwe"] = "eze", ["Vaagri Booli"] = "vaa", ["Vaghua"] = "tva", ["Vagla"] = "vag", ["Vai"] = "vai", ["Vaiphei"] = "vap", ["Vale"] = "vae", ["Valencian Sign Language"] = "vsv", ["Valle Nacional Chinantec"] = "cvn", ["Valley Maidu"] = "vmv", ["Valman"] = "van", ["Valpei"] = "vlp", ["Vamale"] = "mkt", ["Vame"] = "mlr", ["Vandalic"] = "xvn", ["Vangunu"] = "mpr", ["Vanimo"] = "vam", ["Vanji"] = "ira-wnj", ["Vanuma"] = "vau", ["Vao"] = "vao", ["Varhadi"] = "vah", ["Varisi"] = "vrs", ["Vayu"] = "vay", ["Veddah"] = "ved", ["Vehes"] = "val", ["Vemgo-Mabas"] = "vem", ["Venezuelan Sign Language"] = "vsl", ["Ventureño"] = "veo", ["Vera'a"] = "vra", ["Vestinian"] = "xvs", ["Vidunda"] = "vid", ["Viemo"] = "vig", ["Vilela"] = "vil", ["Vili"] = "vif", ["Villa Viciosa Agta"] = "dyg", ["Vincentian Creole English"] = "svc", ["Virgin Islands Creole"] = "vic", ["Vishavan"] = "vis", ["Viti"] = "vit", ["Vitou"] = "vto", ["Viya"] = "gev", ["Vlax Romani"] = "rmy", ["Volga German"] = "gmw-vog", ["Vono"] = "kch", ["Voro"] = "vor", ["Vracada Apabhramsa"] = "inc-vra", ["Vumbu"] = "vum", ["Vunapu"] = "vnp", ["Vunjo"] = "vun", ["Vute"] = "vut", ["Tiếng Võro"] = "vro", ["Wa"] = "wbm", ["Wa'ema"] = "wag", ["Waama"] = "wwa", ["Waamwang"] = "wmn", ["Wab"] = "wab", ["Wabo"] = "wbb", ["Waboda"] = "kmx", ["Waci Gbe"] = "wci", ["Wadaginam"] = "wdg", ["Waddar"] = "wbq", ["Wadi Wadi"] = "xwd", ["Wadjabangayi"] = "wdy", ["Wadjiginy"] = "wdj", ["Wadjigu"] = "wdu", ["Wae Rana"] = "wrx", ["Waffa"] = "waj", ["Wagawaga"] = "wgb", ["Wagaya"] = "wga", ["Wagdi"] = "wbr", ["Wageman"] = "waq", ["Wagi"] = "fad", ["Wahau Kayan"] = "whu", ["Wahau Kenyah"] = "whk", ["Tiếng Wahgi"] = "wgi", ["Waigali"] = "wbk", ["Waigeo"] = "wgo", ["Waikuri"] = "nai-wai", ["Wailaki"] = "wlk", ["Wailapa"] = "wlr", ["Waima'a"] = "wmh", ["Waimiri-Atroari"] = "atr", ["Wainumá"] = "awd-wai", ["Waioli"] = "wli", ["Waitaká"] = "sai-wai", ["Waja"] = "wja", ["Wajarri"] = "wbv", ["Wajuk"] = "xwj", ["Waka"] = "wav", ["Wakawaka"] = "wkw", ["Wakoná"] = "waf", ["Wala"] = "lgl", ["Walak"] = "wlw", ["Walangama"] = "nlw", ["Wali (Ghana)"] = "wlx", ["Wali (Sudan)"] = "wll", ["Waling"] = "wly", ["Walio"] = "wla", ["Walla Walla"] = "waa", ["Walmajarri"] = "wmt", ["Wam"] = "wmo", ["Wamas"] = "wmc", ["Wambaya"] = "wmb", ["Wambon"] = "wms", ["Wamey"] = "cou", ["Wamin"] = "wmi", ["Wampar"] = "lbq", ["Wampur"] = "waz", ["Wan"] = "wan", ["Wanambre"] = "wnb", ["Wanap"] = "wnp", ["Wancho"] = "nnp", ["Wanda"] = "wbh", ["Wandala"] = "mfi", ["Wandamen"] = "wad", ["Wandarang"] = "wnd", ["Wandji"] = "wdd", ["Wanga"] = "lwg", ["Wanggamala"] = "wnm", ["Wangganguru"] = "wgg", ["Wanggom"] = "wng", ["Wangkayutyuru"] = "wky", ["Wangkumara"] = "xwk", ["Wanham"] = "sai-wnm", ["Wanji"] = "wbi", ["Wanman"] = "wbt", ["Wannu"] = "jub", ["Wano"] = "wno", ["Wantoat"] = "wnc", ["Wanukaka"] = "wnk", ["Wanyi"] = "wny", ["Wané"] = "hwa", ["Wapan"] = "juk", ["Wapishana"] = "wap", ["Wappo"] = "wao", ["Wara"] = "wbf", ["Warao"] = "wba", ["Warapu"] = "wra", ["Waray Sorsogon"] = "srv", ["Tiếng Wardaman"] = "wrr", ["Wardandi"] = "wxw", ["Warembori"] = "wsa", ["Wari'"] = "pav", ["Waris"] = "wrs", ["Waritai"] = "wbe", ["Wariyangga"] = "wri", ["Warkay-Bipim"] = "bgv", ["Warlmanpa"] = "wrl", ["Warlpiri"] = "wbp", ["Warluwara"] = "wrb", ["Warnang"] = "wrn", ["Waropen"] = "wrp", ["Warray"] = "wrz", ["Warrgamay"] = "wgy", ["Warrwa"] = "wwr", ["Waru"] = "wru", ["Warumungu"] = "wrm", ["Waruna"] = "wrv", ["Warungu"] = "wrg", ["Warwar Feni"] = "hrw", ["Wasa"] = "wss", ["Wasco-Wishram"] = "wac", ["Wasembo"] = "gsp", ["Washo"] = "was", ["Waskia"] = "wsk", ["Tiếng Wastek"] = "hus", ["Wasu"] = "wsu", ["Watakataui"] = "wtk", ["Watam"] = "wax", ["Wathaurong"] = "wth", ["Watiwa"] = "wtf", ["Watubela"] = "wah", ["Waube"] = "kop", ["Wauja"] = "wau", ["Wauyai"] = "wuy", ["Wawa"] = "www", ["Wawonii"] = "wow", ["Waxiang"] = "wxa", ["Wayanad Chetti"] = "ctt", ["Wayoró"] = "wyr", ["Wayumará"] = "sai-way", ["Wedau"] = "wed", ["Weh"] = "weh", ["Welaung"] = "weu", ["Weliki"] = "klh", ["Welsh Romani"] = "rmw", ["Wemale"] = "weo", ["Tiếng Wemba-Wemba"] = "xww", ["Weme Gbe"] = "wem", ["Wendat"] = "wdt", ["Weri"] = "wer", ["Wersing"] = "kvw", ["West Albay Bikol"] = "fbl", ["West Ambae"] = "nnd", ["West Central Banda"] = "bbp", ["Tiếng Tây Duyên hải Bajau"] = "bdr", ["West Damar"] = "drn", ["West Greenlandic Pidgin"] = "crp-gep", ["West Lembata"] = "lmj", ["West Masela"] = "mss", ["West Tarangan"] = "txn", ["West Uvean"] = "uve", ["West-Central Limba"] = "lia", ["Western Arrernte"] = "are", ["Western Bolivian Guaraní"] = "gnw", ["Western Bukidnon Manobo"] = "mbb", ["Western Dani"] = "dnw", ["Western Durango Nahuatl"] = "azn", ["Western Fijian"] = "wyy", ["Western Gurung"] = "gvr", ["Western Jicaque"] = "und-wji", ["Western Juxtlahuaca Mixtec"] = "jmx", ["Western Karaboro"] = "kza", ["Western Keres"] = "kjq", ["Western Krahn"] = "krw", ["Western Lalu"] = "ywl", ["Western Maninkakan"] = "mlq", ["Tiếng Mari Tây"] = "mrj", ["Western Mashan Hmong"] = "hmw", ["Western Meohang"] = "raf", ["Western Muria"] = "mut", ["Tiếng Tân Aram Tây"] = "amw", ["Western Ojibwa"] = "ojw", ["Western Panjabi"] = "pnb", ["Western Penan"] = "pne", ["Western Sisaala"] = "ssl", ["Western Subanon"] = "suc", ["Western Tawbuid"] = "twb", ["Western Totonac"] = "tqt", ["Western Tunebo"] = "tnb", ["Western Xwla Gbe"] = "xwl", ["Westrobothnian"] = "gmq-bot", ["Weyewa"] = "wew", ["White Lachi"] = "lwh", ["Whitesands"] = "tnp", ["Wiarumus"] = "tua", ["Wichita"] = "wic", ["Wichí Lhamtés Güisnay"] = "mzh", ["Wichí Lhamtés Nocten"] = "mtp", ["Wichí Lhamtés Vejoz"] = "wlv", ["Wik-Epa"] = "wie", ["Wik-Iiyanh"] = "wij", ["Wik-Keyangan"] = "wif", ["Wik-Me'anha"] = "wih", ["Wik-Mungkan"] = "wim", ["Wik-Ngathana"] = "wig", ["Wikalkan"] = "wik", ["Wikngenchera"] = "wua", ["Wilawila"] = "wil", ["Wintu"] = "wnw", ["Winyé"] = "kst", ["Wipi"] = "gdr", ["Tiếng Wiradjuri"] = "wrh", ["Wiraféd"] = "wir", ["Wirangu"] = "wgu", ["Wiru"] = "wiu", ["Wirö"] = "wpc", ["Wiwa"] = "mbp", ["Tiếng Wiyot"] = "wiy", ["Woccon"] = "xwc", ["Wogamusin"] = "wog", ["Wogeo"] = "woc", ["Woi"] = "wbw", ["Tiếng Woiwurrung"] = "wyi", ["Wojenaka"] = "jod", ["Wolane"] = "wle", ["Wolani"] = "wod", ["Woleaian"] = "woe", ["Womo"] = "wmx", ["Wong-gie"] = "aus-won", ["Wongo"] = "won", ["Woods Cree"] = "cwd", ["Woria"] = "wor", ["Worimi"] = "kda", ["Worodougou"] = "jud", ["Worora"] = "wro", ["Wotapuri-Katarqalai"] = "wsv", ["Woun Meu"] = "noa", ["Wudu"] = "wud", ["Wulguru"] = "aus-wul", ["Wuliwuli"] = "wlu", ["Wulna"] = "wux", ["Wumboko"] = "bqm", ["Wumbvu"] = "wum", ["Wumeng"] = "ywu", ["Wunai Bunu"] = "bwn", ["Wunambal"] = "wub", ["Wurrugu"] = "wur", ["Wusa"] = "yig", ["Wushi"] = "bse", ["Wusi"] = "wsi", ["Wutung"] = "wut", ["Wuvulu-Aua"] = "wuv", ["Wyandot"] = "wya", ["Wára"] = "tci", ["Wãpha"] = "juw", ["Wè Southern"] = "gxx", ["Wè Western"] = "wec", ["Xadani Zapotec"] = "zax", ["Xakriabá"] = "xkr", ["Xanaguía Zapotec"] = "ztg", ["Xaragure"] = "axx", ["Tiếng Xavante"] = "xav", ["Xerénte"] = "xer", ["Xetá"] = "xet", ["Xicotepec de Juárez Totonac"] = "too", ["Xinca"] = "xin", ["Xingú Asuriní"] = "asn", ["Xipaya"] = "xiy", ["Xiri"] = "xii", ["Xiriâna"] = "xir", ["Xishanba Lalo"] = "ywt", ["Xocó"] = "sai-xoc", ["Xokleng"] = "xok", ["Xukurú"] = "xoo", ["Xwela Gbe"] = "xwe", ["Yaa"] = "iyx", ["Tiếng Yaaku"] = "muu", ["Yabarana"] = "yar", ["Yabaâna"] = "ybn", ["Yaben"] = "ybm", ["Yabong"] = "ybo", ["Yabula Yabula"] = "yxy", ["Yace"] = "ekr", ["Yafi"] = "wfg", ["Yagara"] = "yxg", ["Yagaria"] = "ygr", ["Yagomi"] = "ygm", ["Yagua"] = "yad", ["Yagwoia"] = "ygw", ["Yahadian"] = "ner", ["Yahang"] = "rhp", ["Yahuna"] = "ynu", ["Yaka"] = "yaf", ["Yakaikeke"] = "ykk", ["Yakoma"] = "yky", ["Yala"] = "yba", ["Yalahatan"] = "jal", ["Yalakalore"] = "xyl", ["Yalarnnga"] = "ylr", ["Yale"] = "nce", ["Yaleba"] = "ylb", ["Yalunka"] = "yal", ["Yalálag Zapotec"] = "zpu", ["Yamap"] = "ymp", ["Yamba"] = "yam", ["Yambes"] = "ymb", ["Yambeta"] = "yat", ["Yamdena"] = "jmd", ["Yameo"] = "yme", ["Yaminahua"] = "yaa", ["Yamongeri"] = "ymg", ["Yamphu"] = "ybi", ["Yan-nhangu"] = "jay", ["Yana"] = "ynn", ["Yanda"] = "yda", ["Yanda Dogon"] = "dym", ["Yandjibara"] = "xyb", ["Yandruwandha"] = "ynd", ["Yanesha'"] = "ame", ["Yangben"] = "yav", ["Yangkaal"] = "aus-ynk", ["Yangkam"] = "bsx", ["Yangman"] = "jng", ["Yango"] = "yng", ["Yangulam"] = "ynl", ["Yangum Dey"] = "yde", ["Yangum Gel"] = "ygl", ["Yangum Mon"] = "ymo", ["Yankunytjatjara"] = "kdd", ["Yanomamö"] = "guu", ["Yanomámi"] = "wca", ["Yansi"] = "yns", ["Tiếng Yanyuwa"] = "jao", ["Tiếng Yao (châu Phi)"] = "yao", ["Yaosakor Asmat"] = "asy", ["Yaouré"] = "yre", ["Yaqay"] = "jaq", ["Yaqui"] = "yaq", ["Yarawata"] = "yrw", ["Yareba"] = "yrb", ["Yareni Zapotec"] = "zae", ["Yarli"] = "yxl", ["Yarluyandi"] = "yry", ["Yarumá"] = "sai-yar", ["Yarí"] = "yri", ["Yasa"] = "yko", ["Yatay"] = "yty", ["Yatee Zapotec"] = "zty", ["Tiếng Zapotec Yatzachi"] = "zav", ["Yaul"] = "yla", ["Yaur"] = "jau", ["Yautepec Zapotec"] = "zpb", ["Yavitero"] = "yvt", ["Yawa"] = "yva", ["Yawalapití"] = "yaw", ["Yawanawa"] = "ywn", ["Yawarawarga"] = "yww", ["Yaweyuha"] = "yby", ["Yawijibaya"] = "jbw", ["Yawiyo"] = "ybx", ["Yawuru"] = "ywr", ["Yaygir"] = "xya", ["Tiếng Yazghulom"] = "yah", ["Yei"] = "jei", ["Yekhee"] = "ets", ["Yekora"] = "ykr", ["Yelmek"] = "jel", ["Yelogu"] = "ylg", ["Yemba"] = "ybb", ["Yemeni Arabic"] = "ayn", ["Yendang"] = "yen", ["Yeni"] = "yei", ["Yeniche"] = "yec", ["Yerakai"] = "yra", ["Yeretuar"] = "gop", ["Yerukula"] = "yeu", ["Yeskwa"] = "yes", ["Yessan-Mayo"] = "yss", ["Yetfa"] = "yet", ["Yeyi"] = "yey", ["Yil"] = "yll", ["Tiếng Creole Nghi Lan"] = "ycr", ["Yimas"] = "yee", ["Yimchungru Naga"] = "yim", ["Yinbaw Karen"] = "kvu", ["Yinchia"] = "yin", ["Tiếng Yindjibarndi"] = "yij", ["Yindjilandji"] = "yil", ["Yine"] = "pib", ["Yinggarda"] = "yia", ["Yinhawangka"] = "ywg", ["Yiningayi"] = "ygi", ["Yintale Karen"] = "kvy", ["Yinwum"] = "yxm", ["Yir-Yoront"] = "yiy", ["Yirandali"] = "ljw", ["Yis"] = "yis", ["Yitha Yitha"] = "xth", ["Yoba"] = "yob", ["Yocoboué Dida"] = "gud", ["Yoidik"] = "ydk", ["Yoke"] = "yki", ["Yolmo"] = "scp", ["Yolngu Sign Language"] = "ygs", ["Yoloxochitl Mixtec"] = "xty", ["Yom"] = "pil", ["Yombe"] = "yom", ["Yopno"] = "yut", ["Yora"] = "mts", ["Yorta Yorta"] = "xyy", ["Tiếng Mixtec Yosondúa"] = "mpm", ["Younuo Bunu"] = "buh", ["Yout Wam"] = "ytw", ["Yuaga"] = "nua", ["Yucatec Maya Sign Language"] = "msd", ["Yuchi"] = "yuc", ["Yucuañe Mixtec"] = "mvg", ["Yucuna"] = "ycn", ["Yugambal"] = "yub", ["Yugoslavian Sign Language"] = "ysl", ["Yugul"] = "ygu", ["Yuhup"] = "yab", ["Yuki"] = "yuk", ["Yukpa"] = "yup", ["Yukuben"] = "ybl", ["Yulu"] = "yul", ["Yuma"] = "yum", ["Yumana"] = "awd-yum", ["Yupiltepeque"] = "nai-yup", ["Yupua"] = "sai-yup", ["Yuqui"] = "yuq", ["Yuracare"] = "yuz", ["Yuru"] = "ljx", ["Yurumanguí"] = "sai-yur", ["Yurutí"] = "yui", ["Yutanduchi Mixtec"] = "mab", ["Yuwana"] = "yau", ["Yuyu"] = "yxu", ["Yámana"] = "yag", ["Zaachila Zapotec"] = "ztx", ["Zabana"] = "kji", ["Zacatepec Chatino"] = "ctz", ["Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"] = "nhi", ["Zakhring"] = "zkr", ["Zambian Sign Language"] = "zsl", ["Zan Gula"] = "zna", ["Zanaki"] = "zak", ["Zande"] = "zne", ["Zangskari"] = "zau", ["Zangwal"] = "zah", ["Tiếng Zapotec Zaniza"] = "zpw", ["Tiếng Zapotec"] = "zap", ["Zaramo"] = "zaj", ["Zari"] = "zaz", ["Zauzou"] = "zal", ["Tiếng Karen Zayein"] = "kxk", ["Zazao"] = "jaj", ["Zbu"] = "sit-zbu", ["Zeem"] = "zua", ["Zemba"] = "dhm", ["Zeme Naga"] = "nzm", ["Zemgalian"] = "xzm", ["Zenag"] = "zeg", ["Zenzontepec Chatino"] = "czn", ["Zhang-Zhung"] = "xzh", ["Zhire"] = "zhi", ["Zhoa"] = "zhw", ["Zhár"] = "jjr", ["Zia"] = "zia", ["Zialo"] = "zil", ["Zigula"] = "ziw", ["Zimakani"] = "zik", ["Zimba"] = "zmb", ["Zimbabwe Sign Language"] = "zib", ["Zinza"] = "zin", ["Zipser German"] = "gmw-zps", ["Zire"] = "sih", ["Ziriya"] = "zir", ["Zizilivakan"] = "ziz", ["Zo'é"] = "pto", ["Zokhuo"] = "yzk", ["Tiếng Zapotec Zoogocho"] = "zpq", ["Zotung Chin"] = "czt", ["Zou"] = "zom", ["Zulgo-Gemzek"] = "gnd", ["Zumaya"] = "zuy", ["Zuni"] = "zun", ["Zuwara"] = "ber-zuw", ["Zyphe"] = "zyp", ["Záparo"] = "zro", ["biệt ngữ Chinook"] = "chn", ["không xác định ngôn ngữ"] = "und", ["ngôn ngữ ký hiệu Mỹ"] = "ase", ["Tiếng 'Are'are"] = "alu", ["Tiếng A Xương"] = "acn", ["Tiếng A-Hmao"] = "hmd", ["Tiếng Aari"] = "aiw", ["Tiếng Aasax"] = "aas", ["Tiếng Abaga"] = "abg", ["Tiếng Abai"] = "poz-abi", ["Tiếng Abau"] = "aau", ["Tiếng Abaza"] = "abq", ["Tiếng Abidji"] = "abi", ["Tiếng Abinomn"] = "bsa", ["Tiếng Abkhaz"] = "ab", ["Tiếng Abkhaz-Abaza nguyên thủy"] = "cau-abz-pro", ["Tiếng Aceh"] = "ace", ["Tiếng Achawa"] = "aca", ["Tiếng Acheron"] = "acz", ["Tiếng Acholi"] = "ach", ["Tiếng Adangme"] = "ada", ["Tiếng Adja"] = "ajg", ["Tiếng Adygea"] = "ady", ["Tiếng Adzera"] = "adz", ["Tiếng Afar"] = "aa", ["Tiếng Afrikaans"] = "af", ["Tiếng Agawam"] = "alg-aga", ["Tiếng Aghem"] = "agq", ["Tiếng Aghul"] = "agx", ["Tiếng Aghwan"] = "xag", ["Tiếng Ahom"] = "aho", ["Tiếng Ahtna"] = "aht", ["Tiếng Ai Cập"] = "egy", ["Tiếng Ai Cập bình dân"] = "egx-dem", ["Tiếng Aimol"] = "aim", ["Tiếng Ainu"] = "ain", ["Tiếng Aiton"] = "aio", ["Tiếng Ajië"] = "aji", ["Tiếng Aka-Bo"] = "akm", ["Tiếng Aka-Jeru"] = "akj", ["Tiếng Akan"] = "ak", ["Tiếng Akawaio"] = "ake", ["Tiếng Akha"] = "ahk", ["Tiếng Akhvakh"] = "akv", ["Tiếng Akkad"] = "akk", ["Tiếng Aklanon"] = "akl", ["Tiếng Alaba-K’abeena"] = "alw", ["Tiếng Alabama"] = "akz", ["Tiếng Alagwa"] = "wbj", ["Tiếng Alak"] = "alk", ["Tiếng Alawa"] = "alh", ["Tiếng Albani"] = "sq", ["Tiếng Albani nguyên thủy"] = "sqj-pro", ["Tiếng Alchuka"] = "tuw-alk", ["Tiếng Alekano"] = "gah", ["Tiếng Aleut"] = "ale", ["Tiếng Algonquin"] = "alq", ["Tiếng Algonquin nguyên thủy"] = "alg-pro", ["Tiếng Alsea"] = "aes", ["Tiếng Alutor"] = "alr", ["Tiếng Ama"] = "amm", ["Tiếng Amahuaca"] = "amc", ["Tiếng Amaimon"] = "ali", ["Tiếng Amarasi"] = "aaz", ["Tiếng Ambrak"] = "aag", ["Tiếng Amdang"] = "amj", ["Tiếng Amhara"] = "am", ["Tiếng Amis"] = "ami", ["Tiếng Amurdag"] = "amg", ["Tiếng Amuzgo"] = "amu", ["Tiếng Anal"] = "anm", ["Tiếng Andi"] = "ani", ["Tiếng Angika"] = "anp", ["Tiếng Angola"] = "aoa", ["Tiếng Anh"] = "en", ["Tiếng Anh Solombala"] = "crp-slb", ["Tiếng Anh cổ"] = "ang", ["Tiếng Anh trung đại"] = "enm", ["Tiếng Anii"] = "blo", ["Tiếng Ankave"] = "aak", ["Tiếng Anuki"] = "aui", ["Tiếng Anyi"] = "any", ["Tiếng Apache Tây"] = "apw", ["Tiếng Aparaí"] = "apy", ["Tiếng Apinayé"] = "apn", ["Tiếng Aputai"] = "apx", ["Tiếng Aquitani"] = "xaq", ["Tiếng Aragon"] = "an", ["Tiếng Araki"] = "akr", ["Tiếng Arakwal"] = "rkw", ["Tiếng Aram"] = "arc", ["Tiếng Aranadan"] = "aaf", ["Tiếng Araweté"] = "awt", ["Tiếng Archi"] = "aqc", ["Tiếng Arem"] = "aem", ["Tiếng Argobba"] = "agj", ["Tiếng Armenia"] = "hy", ["Tiếng Armenia cổ"] = "xcl", ["Tiếng Armenia trung đại"] = "axm", ["Tiếng Aromania"] = "rup", ["Tiếng Ashraaf"] = "cus-ash", ["Tiếng Askopan"] = "eiv", ["Tiếng Asli nguyên thủy"] = "mkh-asl-pro", ["Tiếng Assam"] = "as", ["Tiếng Assan"] = "xss", ["Tiếng Asturias"] = "ast", ["Tiếng Asur"] = "asr", ["Tiếng Atayal"] = "tay", ["Tiếng Athpariya"] = "aph", ["Tiếng Atikamekw"] = "atj", ["Tiếng Atong (Ấn Độ)"] = "aot", ["Tiếng Auhelawa"] = "kud", ["Tiếng Aukan"] = "djk", ["Tiếng Avar"] = "av", ["Tiếng Avesta"] = "ae", ["Tiếng Avokaya"] = "avu", ["Tiếng Awadh"] = "awa", ["Tiếng Awing"] = "azo", ["Tiếng Awngi"] = "awn", ["Tiếng Axi"] = "yix", ["Tiếng Ayere"] = "aye", ["Tiếng Aymara"] = "ay", ["Tiếng Azerbaijan"] = "az", ["Tiếng Ba Lan"] = "pl", ["Tiếng Ba Lan cổ"] = "zlw-opl", ["Tiếng Ba Na"] = "bdq", ["Tiếng Ba Tư"] = "fa", ["Tiếng Ba Tư cổ"] = "peo", ["Tiếng Ba Tư trung đại"] = "pal", ["Tiếng Ba Tư-Do Thái"] = "jpr", ["Tiếng Babatana"] = "baa", ["Tiếng Babungo"] = "bav", ["Tiếng Babuza"] = "bzg", ["Tiếng Bactria"] = "xbc", ["Tiếng Badaga"] = "bfq", ["Tiếng Badanchi"] = "bau", ["Tiếng Badui"] = "bac", ["Tiếng Bagvalal"] = "kva", ["Tiếng Bahing"] = "bhj", ["Tiếng Bahnar nguyên thủy"] = "mkh-ban-pro", ["Tiếng Bainouk-Gunyuño"] = "bab", ["Tiếng Baiso"] = "bsw", ["Tiếng Bakhtiari"] = "bqi", ["Tiếng Bala"] = "tuw-bal", ["Tiếng Balanta-Ganja"] = "bjt", ["Tiếng Balanta-Kentohe"] = "ble", ["Tiếng Bali"] = "ban", ["Tiếng Baloch"] = "bal", ["Tiếng Balt-Slav nguyên thủy"] = "ine-bsl-pro", ["Tiếng Balti"] = "bft", ["Tiếng Bambara"] = "bm", ["Tiếng Bambassi"] = "myf", ["Tiếng Banjar"] = "bjn", ["Tiếng Bantawa"] = "bap", ["Tiếng Bantu nguyên thủy"] = "bnt-pro", ["Tiếng Baoule"] = "bci", ["Tiếng Barai"] = "bbb", ["Tiếng Barakai"] = "baj", ["Tiếng Bari"] = "bfa", ["Tiếng Baré"] = "bae", ["Tiếng Basaa"] = "bas", ["Tiếng Basay"] = "byq", ["Tiếng Bashkir"] = "ba", ["Tiếng Basketo"] = "bst", ["Tiếng Basque"] = "eu", ["Tiếng Basque nguyên thủy"] = "euq-pro", ["Tiếng Bassa"] = "bsq", ["Tiếng Batak Simalungun"] = "bts", ["Tiếng Batek"] = "btq", ["Tiếng Bats"] = "bbl", ["Tiếng Batuley"] = "bay", ["Tiếng Bayern"] = "bar", ["Tiếng Beja"] = "bej", ["Tiếng Belarus"] = "be", ["Tiếng Belhariya"] = "byw", ["Tiếng Beli"] = "blm", ["Tiếng Bella Coola"] = "blc", ["Tiếng Bellara"] = "brw", ["Tiếng Belnəng"] = "glb", ["Tiếng Bemba"] = "bem", ["Tiếng Bench"] = "bcq", ["Tiếng Bengal"] = "bn", ["Tiếng Berber Bắc Sahara"] = "mzb", ["Tiếng Berber nguyên thủy"] = "ber-pro", ["Tiếng Berber-Do Thái"] = "jbe", ["Tiếng Berik"] = "bkl", ["Tiếng Betawi"] = "bew", ["Tiếng Bezhta"] = "kap", ["Tiếng Bhil"] = "bhb", ["Tiếng Bhil Dungra"] = "duh", ["Tiếng Bhnong"] = "mkh-bhn", ["Tiếng Bhojpur"] = "bho", ["Tiếng Bhumij"] = "aav-bhu", ["Tiếng Bidayuh Biatah"] = "bth", ["Tiếng Bih"] = "ibh", ["Tiếng Bihari"] = "bh", ["Tiếng Bilaspur"] = "kfs", ["Tiếng Bilen"] = "byn", ["Tiếng Birao"] = "brr", ["Tiếng Birhor"] = "biy", ["Tiếng Birjia"] = "bix", ["Tiếng Bishnupriya"] = "bpy", ["Tiếng Bislama"] = "bi", ["Tiếng Bisu"] = "bzi", ["Tiếng Bit"] = "bgk", ["Tiếng Blackfoot"] = "bla", ["Tiếng Blagar"] = "beu", ["Tiếng Blang"] = "blr", ["Tiếng Bodo (Ấn Độ)"] = "brx", ["Tiếng Bodo-Garo nguyên thủy"] = "tbq-bdg-pro", ["Tiếng Boghom"] = "bux", ["Tiếng Bokar"] = "sit-bok", ["Tiếng Bokobaru"] = "bus", ["Tiếng Bondo"] = "bfw", ["Tiếng Boon"] = "bnl", ["Tiếng Borôro"] = "bor", ["Tiếng Botlikh"] = "bph", ["Tiếng Brahui"] = "brh", ["Tiếng Braj"] = "bra", ["Tiếng Breri"] = "brq", ["Tiếng Breton"] = "br", ["Tiếng Breton cổ"] = "obt", ["Tiếng Breton trung đại"] = "xbm", ["Tiếng Britton nguyên thủy"] = "cel-bry-pro", ["Tiếng Bru"] = "bru", ["Tiếng Bru Tây"] = "brv", ["Tiếng Brâu"] = "brb", ["Tiếng Budukh"] = "bdk", ["Tiếng Bughotu"] = "bgt", ["Tiếng Bugis"] = "bug", ["Tiếng Bukhara"] = "bhh", ["Tiếng Bulgar"] = "xbo", ["Tiếng Bulgari"] = "bg", ["Tiếng Bunun"] = "bnn", ["Tiếng Burji"] = "bji", ["Tiếng Burunge"] = "bds", ["Tiếng Burushaski"] = "bsk", ["Tiếng Buryat"] = "bua", ["Tiếng Busa"] = "bqp", ["Tiếng Bushi"] = "buc", ["Tiếng Bách Tế"] = "pkc", ["Tiếng Bảo An"] = "peh", ["Tiếng Bắc Altai"] = "atv", ["Tiếng Bắc Amami Ōshima"] = "ryn", ["Tiếng Bắc Emberá"] = "emp", ["Tiếng Bắc Friesland"] = "frr", ["Tiếng Bắc Iroquois nguyên thủy"] = "iro-nor-pro", ["Tiếng Bắc Mansi"] = "mns-nor", ["Tiếng Bắc Ndebele"] = "nd", ["Tiếng Bắc Nisu"] = "yiv", ["Tiếng Bắc Sami"] = "se", ["Tiếng Bắc Slavey"] = "scs", ["Tiếng Bắc Thái"] = "nod", ["Tiếng Bắc Yukaghir"] = "ykg", ["Tiếng Bắc Âu cổ"] = "non", ["Tiếng Bố Cam"] = "bbh", ["Tiếng Bố Lưu"] = "ply", ["Tiếng Bố Mang"] = "bvp", ["Tiếng Bố Y"] = "pcc", ["Tiếng Bồ Đào Nha"] = "pt", ["Tiếng Bổ trợ Quốc tế"] = "ia", ["Tiếng Ca Dong"] = "kxy", ["Tiếng Ca Tua"] = "kta", ["Tiếng Cahuilla"] = "chl", ["Tiếng Camling"] = "rab", ["Tiếng Canela"] = "ram", ["Tiếng Cao Câu Ly"] = "zkg", ["Tiếng Carib nguyên thủy"] = "sai-car-pro", ["Tiếng Carrier"] = "crx", ["Tiếng Catalan"] = "ca", ["Tiếng Cayuga"] = "cay", ["Tiếng Cebu"] = "ceb", ["Tiếng Celt nguyên thủy"] = "cel-pro", ["Tiếng Celtiberi"] = "xce", ["Tiếng Cerrado nguyên thủy"] = "sai-cer-pro", ["Tiếng Ch'orti'"] = "caa", ["Tiếng Chachi"] = "cbi", ["Tiếng Chagatai"] = "chg", ["Tiếng Chakma"] = "ccp", ["Tiếng Chăm cổ"] = "ocm", ["Tiếng Chamalal"] = "cji", ["Tiếng Chamba"] = "cdh", ["Tiếng Chamicuro"] = "ccc", ["Tiếng Chamorro"] = "ch", ["Tiếng Chatino cao nguyên Tây"] = "ctp", ["Tiếng Chaura"] = "crv", ["Tiếng Chavacano"] = "cbk", ["Tiếng Chechen"] = "ce", ["Tiếng Chepang"] = "cdm", ["Tiếng Cherokee"] = "chr", ["Tiếng Chewong"] = "cwg", ["Tiếng Cheyenne"] = "chy", ["Tiếng Chhattisgarh"] = "hne", ["Tiếng Chibcha"] = "chb", ["Tiếng Chichewa"] = "ny", ["Tiếng Chickasaw"] = "cic", ["Tiếng Chinantec Ojitlán"] = "chj", ["Tiếng Chinantec Ozumacín"] = "chz", ["Tiếng Chinantec Tepinapa"] = "cte", ["Tiếng Chinook"] = "chh", ["Tiếng Chiru"] = "cdf", ["Tiếng Chittagong"] = "ctg", ["Tiếng Chiwere"] = "iow", ["Tiếng Chocangacakha"] = "cgk", ["Tiếng Choctaw"] = "cho", ["Tiếng Chodri"] = "cdi", ["Tiếng Chong"] = "cog", ["Tiếng Chu Ru"] = "cje", ["Tiếng Chukot"] = "ckt", ["Tiếng Chulym"] = "clw", ["Tiếng Chuuk"] = "chk", ["Tiếng Chuvan"] = "xcv", ["Tiếng Chuvash"] = "cv", ["Tiếng Châu Đại Dương nguyên thủy"] = "poz-oce-pro", ["Tiếng Chăm Tây"] = "cja", ["Tiếng Chăm nguyên thủy"] = "cmc-pro", ["Tiếng Chăm Đông"] = "cjm", ["Tiếng Chơ Ro"] = "crw", ["Tiếng Chứt"] = "scb", ["Tiếng Cia-Cia"] = "cia", ["Tiếng Cimbri"] = "cim", ["Tiếng Circassia nguyên thủy"] = "cau-cir-pro", ["Tiếng Co"] = "cua", ["Tiếng Cofán"] = "con", ["Tiếng Comanche"] = "com", ["Tiếng Comoros Maore"] = "swb", ["Tiếng Comox"] = "coo", ["Tiếng Copt"] = "cop", ["Tiếng Cornwall"] = "kw", ["Tiếng Corse"] = "co", ["Tiếng Cree"] = "cr", ["Tiếng Cree đồng bằng"] = "crk", ["Tiếng Creole Hà Lan Berbice"] = "brc", ["Tiếng Creole Jamaica"] = "jam", ["Tiếng Creole Louisiana"] = "lou", ["Tiếng Crow"] = "cro", ["Tiếng Cuman"] = "qwm", ["Tiếng Cupeño"] = "cup", ["Tiếng Cushit nguyên thủy"] = "cus-pro", ["Tiếng Càn-đà-la"] = "pgd", ["Tiếng Cơ Nặc Du Lạc"] = "jiu", ["Tiếng Cơ Tu"] = "ktv", ["Tiếng Cơ Tu Phương"] = "phg", ["Tiếng Cơ Tu Tây"] = "kuf", ["Tiếng Cơ Tu nguyên thủy"] = "mkh-kat-pro", ["Tiếng Cám"] = "gan", ["Tiếng Cờ Lao Trắng"] = "giw", ["Tiếng Daasanach"] = "dsh", ["Tiếng Dabarre"] = "dbr", ["Tiếng Dacia"] = "xdc", ["Tiếng Dadibi"] = "mps", ["Tiếng Dagbani"] = "dag", ["Tiếng Dahalik"] = "dlk", ["Tiếng Dahalo"] = "dal", ["Tiếng Dakota"] = "dak", ["Tiếng Dalmatia"] = "dlm", ["Tiếng Dambi"] = "dac", ["Tiếng Dan"] = "dnj", ["Tiếng Danau"] = "dnu", ["Tiếng Dangaléat"] = "daa", ["Tiếng Danu"] = "dnv", ["Tiếng Danuwar"] = "dhw", ["Tiếng Dargwa"] = "dar", ["Tiếng Dargwa nguyên thủy"] = "cau-drg-pro", ["Tiếng Daur"] = "dta", ["Tiếng Dawro"] = "dwr", ["Tiếng Degema"] = "deg", ["Tiếng Denesuline"] = "chp", ["Tiếng Desiya"] = "dso", ["Tiếng Dhanka"] = "dhn", ["Tiếng Dhivehi"] = "dv", ["Tiếng Dhodia"] = "dho", ["Tiếng Dibabawon"] = "mbd", ["Tiếng Digan"] = "rom", ["Tiếng Digan Tavringer"] = "rmu", ["Tiếng Dinka"] = "din", ["Tiếng Dirasha"] = "gdl", ["Tiếng Ditidaht"] = "dtd", ["Tiếng Dizi"] = "mdx", ["Tiếng Do Thái"] = "he", ["Tiếng Dogri"] = "doi", ["Tiếng Dogrib"] = "dgr", ["Tiếng Dolgan"] = "dlg", ["Tiếng Domari"] = "rmt", ["Tiếng Dongolawi"] = "kzh", ["Tiếng Dravida nguyên thủy"] = "dra-pro", ["Tiếng Dubla"] = "dub", ["Tiếng Dukha"] = "trk-dkh", ["Tiếng Duun"] = "dux", ["Tiếng Duy Ngô Nhĩ"] = "ug", ["Tiếng Duy Ngô Nhĩ cổ"] = "oui", ["Tiếng Dyirbal"] = "dbl", ["Tiếng Dzongkha"] = "dz", ["Tiếng Dzuun"] = "dnn", ["Tiếng Ebla"] = "xeb", ["Tiếng Ebrié"] = "ebr", ["Tiếng Ebughu"] = "ebg", ["Tiếng Ede Idaca"] = "idd", ["Tiếng Ede Nago"] = "nqg", ["Tiếng Edekiri nguyên thủy"] = "alv-edk-pro", ["Tiếng Edo"] = "bin", ["Tiếng Efai"] = "efa", ["Tiếng Efe"] = "efe", ["Tiếng Efik"] = "efi", ["Tiếng Ega"] = "ega", ["Tiếng Eggon"] = "ego", ["Tiếng Ehueun"] = "ehu", ["Tiếng Eipomek"] = "eip", ["Tiếng Eitiep"] = "eit", ["Tiếng Ejagham"] = "etu", ["Tiếng El Molo"] = "elo", ["Tiếng Elam"] = "elx", ["Tiếng Elymi"] = "xly", ["Tiếng Emberá-Chamí"] = "cmi", ["Tiếng Emberá-Tadó"] = "tdc", ["Tiếng Embu"] = "ebu", ["Tiếng Emilia"] = "egl", ["Tiếng Enets lãnh nguyên"] = "enh", ["Tiếng Enets rừng"] = "enf", ["Tiếng Engenni"] = "enn", ["Tiếng Eotile"] = "eot", ["Tiếng Epie"] = "epi", ["Tiếng Erzya"] = "myv", ["Tiếng Esan"] = "ish", ["Tiếng Ese"] = "mcq", ["Tiếng Esimbi"] = "ags", ["Tiếng Eskimo nguyên thủy"] = "esx-esk-pro", ["Tiếng Estonia"] = "et", ["Tiếng Eteocrete"] = "ecr", ["Tiếng Etrusca"] = "ett", ["Tiếng Even"] = "eve", ["Tiếng Evenk"] = "evn", ["Tiếng Ewe"] = "ee", ["Tiếng Fala"] = "fax", ["Tiếng Falisci"] = "xfa", ["Tiếng Faroe"] = "fo", ["Tiếng Fe'fe'"] = "fmp", ["Tiếng Fiji"] = "fj", ["Tiếng Finn nguyên thủy"] = "urj-fin-pro", ["Tiếng Flemish Tây"] = "vls", ["Tiếng Fogaha"] = "ber-fog", ["Tiếng Fon"] = "fon", ["Tiếng Fox"] = "sac", ["Tiếng Franco-Provençal"] = "frp", ["Tiếng Franken Trung"] = "gmw-cfr", ["Tiếng Frisia Saterland"] = "stq", ["Tiếng Frisia cổ"] = "ofs", ["Tiếng Friuli"] = "fur", ["Tiếng Fula"] = "ff", ["Tiếng Fur"] = "fvr", ["Tiếng Ga"] = "gaa", ["Tiếng Gabri"] = "gab", ["Tiếng Gaddang"] = "gad", ["Tiếng Gael Scotland"] = "gd", ["Tiếng Gagauz"] = "gag", ["Tiếng Galati"] = "xga", ["Tiếng Galicia"] = "gl", ["Tiếng Galicia-Bồ Đào Nha"] = "roa-opt", ["Tiếng Gamit"] = "gbl", ["Tiếng Gamo"] = "gmv", ["Tiếng Ganza"] = "gza", ["Tiếng Garasia Adiwasi"] = "gas", ["Tiếng Garasia Rajput"] = "gra", ["Tiếng Garo"] = "grt", ["Tiếng Garre"] = "gex", ["Tiếng Gata'"] = "gaq", ["Tiếng Gawar-Bati"] = "gwt", ["Tiếng Gbe Saxwe"] = "sxw", ["Tiếng Gbe nguyên thủy"] = "alv-gbe-pro", ["Tiếng Gedeo"] = "drs", ["Tiếng German Tây nguyên thủy"] = "gmw-pro", ["Tiếng Scots trung đại"] = "gmw-msc", ["Tiếng German nguyên thủy"] = "gem-pro", ["Tiếng Geʽez"] = "gez", ["Tiếng Ghadames"] = "gha", ["Tiếng Ghomala'"] = "bbj", ["Tiếng Gia Rai"] = "jra", ["Tiếng Gikuyu"] = "ki", ["Tiếng Gilak"] = "glk", ["Tiếng Gimi (Goroka)"] = "gim", ["Tiếng Girirra"] = "gii", ["Tiếng Giẻ"] = "jeh", ["Tiếng Glosa"] = "igs", ["Tiếng Godoberi"] = "gdo", ["Tiếng Gofa"] = "gof", ["Tiếng Gone Dau"] = "goo", ["Tiếng Gorowa"] = "gow", ["Tiếng Goth"] = "got", ["Tiếng Greenland"] = "kl", ["Tiếng Gruzia"] = "ka", ["Tiếng Gruzia cổ"] = "oge", ["Tiếng Gruzia-Do Thái"] = "jge", ["Tiếng Gruzia-Zan nguyên thủy"] = "ccs-gzn-pro", ["Tiếng Guajajára"] = "gub", ["Tiếng Guajá"] = "gvj", ["Tiếng Guanche"] = "gnc", ["Tiếng Guaraní"] = "gn", ["Tiếng Guarani Mbya"] = "gun", ["Tiếng Guarayu"] = "gyr", ["Tiếng Gujarat"] = "gu", ["Tiếng Gulay"] = "gvl", ["Tiếng Gumuz"] = "guk", ["Tiếng Gun"] = "guw", ["Tiếng Gurenne"] = "gur", ["Tiếng Guugu Yimidhirr"] = "kky", ["Tiếng Gwichʼin"] = "gwi", ["Tiếng H'Mông Tương Tây Tây"] = "mmr", ["Tiếng H'Mông-Miền nguyên thủy"] = "hmx-pro", ["Tiếng H'roi"] = "hro", ["Tiếng Hachijō"] = "jpx-hcj", ["Tiếng Hadiyya"] = "hdy", ["Tiếng Haida"] = "hai", ["Tiếng Creole Haiti"] = "ht", ["Tiếng Hajong"] = "haj", ["Tiếng Halba"] = "hlb", ["Tiếng Halkomelem"] = "hur", ["Tiếng Hamer-Banna"] = "amf", ["Tiếng Hanunoo"] = "hnn", ["Tiếng Harari"] = "har", ["Tiếng Hatti"] = "xht", ["Tiếng Hausa"] = "ha", ["Tiếng Haush"] = "sai-hau", ["Tiếng Havasupai-Walapai-Yavapai"] = "yuf", ["Tiếng Hawaii"] = "haw", ["Tiếng Hazara"] = "haz", ["Tiếng Heiltsuk"] = "hei", ["Tiếng Hellen nguyên thủy"] = "grk-pro", ["Tiếng Herero"] = "hz", ["Tiếng Higaonon"] = "mba", ["Tiếng Hiligaynon"] = "hil", ["Tiếng Hindi"] = "hi", ["Tiếng Hindi Fiji"] = "hif", ["Tiếng Hindko Bắc"] = "hno", ["Tiếng Hindustan Caribe"] = "hns", ["Tiếng Hiri Motu"] = "ho", ["Tiếng Hitti"] = "hit", ["Tiếng Hlai"] = "lic", ["Tiếng Hlai nguyên thủy"] = "qfa-lic-pro", ["Tiếng Ho"] = "hoc", ["Tiếng Hoava"] = "hoa", ["Tiếng Hocak"] = "win", ["Tiếng Horpa"] = "ero", ["Tiếng Hozo"] = "hoz", ["Tiếng Hpon"] = "hpo", ["Tiếng Hrê"] = "hre", ["Tiếng Hu"] = "huo", ["Tiếng Hulaulá"] = "huy", ["Tiếng Hungary"] = "hu", ["Tiếng Hunsrik"] = "hrx", ["Tiếng Hunzib"] = "huz", ["Tiếng Hupa"] = "hup", ["Tiếng Hurri"] = "xhu", ["Tiếng Huy"] = "czh", ["Tiếng Hy Lạp"] = "el", ["Tiếng Hy Lạp Cappadocia"] = "cpg", ["Tiếng Hy Lạp Italiot"] = "grk-ita", ["Tiếng Hy Lạp Mariupol"] = "grk-mar", ["Tiếng Hy Lạp Pontos"] = "pnt", ["Tiếng Hy Lạp cổ"] = "grc", ["Tiếng Hyam"] = "jab", ["Tiếng Hà Lan"] = "nl", ["Tiếng Hà Lan Jersey"] = "gmw-jdt", ["Tiếng Hà Lan cổ"] = "odt", ["Tiếng Hà Lan trung đại"] = "dum", ["Tiếng Hà Lăng"] = "hal", ["Tiếng Hà Nhì"] = "hni", ["Tiếng Hán thượng cổ"] = "och", ["Tiếng Hán trung cổ"] = "ltc", ["Tiếng Hán-Tạng nguyên thủy"] = "sit-pro", ["Tiếng Hạ Sorb"] = "dsb", ["Tiếng Hạ Đức"] = "nds", ["Tiếng Hạ Đức Mennonite"] = "pdt", ["Tiếng Hạ Đức trung đại"] = "gml", ["Tiếng Hạ Đức tại Đức"] = "nds-de", ["Tiếng Iaai"] = "iai", ["Tiếng Ibaloi"] = "ibl", ["Tiếng Iban"] = "iba", ["Tiếng Ibatan"] = "ivb", ["Tiếng Ibibio"] = "ibb", ["Tiếng Ibino"] = "ibn", ["Tiếng Ibuoro"] = "ibr", ["Tiếng Iceland"] = "is", ["Tiếng Ido"] = "io", ["Tiếng Ifè"] = "ife", ["Tiếng Igala"] = "igl", ["Tiếng Igbo"] = "ig", ["Tiếng Ikwere"] = "ikw", ["Tiếng Ili Turki"] = "ili", ["Tiếng Ilokano"] = "ilo", ["Tiếng Indo-Bồ Đào Nha"] = "idb", ["Tiếng Indonesia"] = "id", ["Tiếng Indonesia Peranakan"] = "pea", ["Tiếng Ingria"] = "izh", ["Tiếng Ingush"] = "inh", ["Tiếng Inor"] = "ior", ["Tiếng Interlingue"] = "ie", ["Tiếng Intha"] = "int", ["Tiếng Inuit nguyên thủy"] = "esx-inu-pro", ["Tiếng Inuktitut"] = "iu", ["Tiếng Inupiaq"] = "ik", ["Tiếng Iran nguyên thủy"] = "ira-pro", ["Tiếng Iraqw"] = "irk", ["Tiếng Ireland"] = "ga", ["Tiếng Ireland cổ"] = "sga", ["Tiếng Ireland trung đại"] = "mga", ["Tiếng Iroquois nguyên thủy"] = "iro-pro", ["Tiếng Isan"] = "tts", ["Tiếng Isnag"] = "isd", ["Tiếng Isoko"] = "iso", ["Tiếng Istria"] = "ist", ["Tiếng Istria Rumani"] = "ruo", ["Tiếng Italic nguyên thủy"] = "itc-pro", ["Tiếng Itaŋikom"] = "bkm", ["Tiếng Itelmen"] = "itl", ["Tiếng Itonama"] = "ito", ["Tiếng Itsekiri"] = "its", ["Tiếng Itu Mbon Uzo"] = "itm", ["Tiếng Ivatan"] = "ivv", ["Tiếng Iwaidja"] = "ibd", ["Tiếng Ixil"] = "ixl", ["Tiếng Jacaltec"] = "jac", ["Tiếng Jah Hut"] = "jah", ["Tiếng Jamamadí"] = "jaa", ["Tiếng Japhug"] = "sit-jap", ["Tiếng Jaqaru"] = "jqr", ["Tiếng Jarawa"] = "anq", ["Tiếng Java"] = "jv", ["Tiếng Java Caribe"] = "jvn", ["Tiếng Java cổ"] = "kaw", ["Tiếng Javindo"] = "jvd", ["Tiếng Jehai"] = "jhi", ["Tiếng Jeju"] = "jje", ["Tiếng Jiiddu"] = "jii", ["Tiếng Jru'"] = "lbo", ["Tiếng Juang"] = "jun", ["Tiếng Jumjum"] = "jum", ["Tiếng Juǀ'hoan"] = "ktz", ["Tiếng Jylland"] = "jut", ["Tiếng Jê Bắc nguyên thủy"] = "sai-nje-pro", ["Tiếng Jê nguyên thủy"] = "sai-jee-pro", ["Tiếng K'Ho"] = "kpm", ["Tiếng K'iche'"] = "quc", ["Tiếng Kabardia"] = "kbd", ["Tiếng Kabiye"] = "kbp", ["Tiếng Kabyle"] = "kab", ["Tiếng Kachin"] = "kac", ["Tiếng Kadu"] = "zkd", ["Tiếng Kafa"] = "kbr", ["Tiếng Kaingang"] = "kgp", ["Tiếng Kakabai"] = "kqf", ["Tiếng Kalam"] = "gwc", ["Tiếng Kalao"] = "kly", ["Tiếng Kalash"] = "kls", ["Tiếng Kalinga Limos"] = "kmk", ["Tiếng Kalmyk"] = "xal", ["Tiếng Kalo Phần Lan"] = "rmf", ["Tiếng Kamassia"] = "xas", ["Tiếng Kambaata"] = "ktb", ["Tiếng Kanakanavu"] = "xnb", ["Tiếng Kangean"] = "kkv", ["Tiếng Kannada"] = "kn", ["Tiếng Kannauj"] = "bjj", ["Tiếng Kanuri"] = "kr", ["Tiếng Kapampangan"] = "pam", ["Tiếng Kapingamarangi"] = "kpg", ["Tiếng Karachay-Balkar"] = "krc", ["Tiếng Karaim"] = "kdr", ["Tiếng Karajá"] = "kpj", ["Tiếng Karakalpak"] = "kaa", ["Tiếng Karakhanid"] = "xqa", ["Tiếng Karao"] = "kyj", ["Tiếng Karata"] = "kpt", ["Tiếng Karbi"] = "mjw", ["Tiếng Karelia"] = "krl", ["Tiếng Karen Bwe"] = "bwe", ["Tiếng Karen Geba"] = "kvq", ["Tiếng Karen Geko"] = "ghk", ["Tiếng Karen Mobwa"] = "jkm", ["Tiếng Karen Paku"] = "jkp", ["Tiếng Karen S'gaw"] = "ksw", ["Tiếng Karen nguyên thủy"] = "kar-pro", ["Tiếng Kari'na"] = "car", ["Tiếng Kartvelia nguyên thủy"] = "ccs-pro", ["Tiếng Kashaya"] = "kju", ["Tiếng Kashmir"] = "ks", ["Tiếng Kaszëb"] = "csb", ["Tiếng Katang Bắc"] = "ncq", ["Tiếng Kavalan"] = "ckv", ["Tiếng Kavet"] = "krv", ["Tiếng Kawésqar"] = "alc", ["Tiếng Kayapó"] = "txu", ["Tiếng Kayort"] = "kyv", ["Tiếng Kazakh"] = "kk", ["Tiếng Kensiu"] = "kns", ["Tiếng Ket"] = "ket", ["Tiếng Khakas"] = "kjh", ["Tiếng Khalaj"] = "klj", ["Tiếng Khaling"] = "klr", ["Tiếng Kham Gamale"] = "kgj", ["Tiếng Kham Parbate Tây"] = "kjl", ["Tiếng Kham Parbate Đông"] = "kif", ["Tiếng Khamti"] = "kht", ["Tiếng Khamyang"] = "ksu", ["Tiếng Khang Gia"] = "kxs", ["Tiếng Khanty"] = "kca", ["Tiếng Kharia"] = "khr", ["Tiếng Khasa Prakrit"] = "inc-kha", ["Tiếng Khasi"] = "kha", ["Tiếng Khasi nguyên thủy"] = "aav-khs-pro", ["Tiếng Khazar"] = "zkz", ["Tiếng Khengkha"] = "xkf", ["Tiếng Khiamniungan"] = "kix", ["Tiếng Khinalug"] = "kjj", ["Tiếng Khiết Đan"] = "zkt", ["Tiếng Khmer"] = "km", ["Tiếng Khmer Surin"] = "kxm", ["Tiếng Khmer cổ"] = "okz", ["Tiếng Khmer nguyên thủy"] = "mkh-kmr-pro", ["Tiếng Khmer trung đại"] = "xhm", ["Tiếng Khoekhoe"] = "naq", ["Tiếng Khowar"] = "khw", ["Tiếng Khuen"] = "khf", ["Tiếng Khvarshi"] = "khv", ["Tiếng Khwarezm"] = "xco", ["Tiếng Khách Gia"] = "hak", ["Tiếng Kháng"] = "kjm", ["Tiếng Khün"] = "kkh", ["Tiếng Khùa"] = "xhv", ["Tiếng Khơ Mú"] = "kjg", ["Tiếng Khơ Mú nguyên thủy"] = "mkh-khm-pro", ["Tiếng Khương Bắc"] = "cng", ["Tiếng Kickapoo"] = "kic", ["Tiếng Kikai"] = "kzg", ["Tiếng Kili"] = "tuw-kil", ["Tiếng Kim Môn"] = "mji", ["Tiếng Kimbundu"] = "kmb", ["Tiếng Kintaq"] = "knq", ["Tiếng Kiowa"] = "kio", ["Tiếng Kiribati"] = "gil", ["Tiếng Kirike"] = "okr", ["Tiếng Kisan"] = "xis", ["Tiếng Kistane"] = "gru", ["Tiếng Kituba"] = "ktu", ["Tiếng Klallam"] = "clm", ["Tiếng Klingon"] = "tlh", ["Tiếng Knaan"] = "czk", ["Tiếng Kobon"] = "kpw", ["Tiếng Koch"] = "kdq", ["Tiếng Koda"] = "cdz", ["Tiếng Kodava"] = "kfa", ["Tiếng Kohistan"] = "mvy", ["Tiếng Koibal"] = "zkb", ["Tiếng Kok Borok"] = "trp", ["Tiếng Kolami"] = "kfb", ["Tiếng Kolhe"] = "ekl", ["Tiếng Koli Parkar"] = "kvx", ["Tiếng Koli Wadiyara"] = "kxp", ["Tiếng Komi cổ"] = "urj-koo", ["Tiếng Komi-Permyak"] = "koi", ["Tiếng Komi-Zyrian"] = "kpv", ["Tiếng Kongo"] = "kg", ["Tiếng Konkan"] = "kok", ["Tiếng Konso"] = "kxc", ["Tiếng Koonzime"] = "ozm", ["Tiếng Koore"] = "kqy", ["Tiếng Koraga Korra"] = "kfd", ["Tiếng Koraga Mudu"] = "vmd", ["Tiếng Korku"] = "kfq", ["Tiếng Koryak"] = "kpy", ["Tiếng Kosrae"] = "kos", ["Tiếng Kotava"] = "avk", ["Tiếng Kraol"] = "rka", ["Tiếng Krio"] = "kri", ["Tiếng Krung"] = "krr", ["Tiếng Krymchak"] = "jct", ["Tiếng Kryts"] = "kry", ["Tiếng Kudmal"] = "kyw", ["Tiếng Kui Dawik"] = "dwk", ["Tiếng Kukna"] = "kex", ["Tiếng Kullu"] = "kfx", ["Tiếng Kulon-Pazeh"] = "uun", ["Tiếng Kumbewaha"] = "xks", ["Tiếng Kumyk"] = "kum", ["Tiếng Kumzar"] = "zum", ["Tiếng Kundal Shahi"] = "shd", ["Tiếng Kunigami"] = "xug", ["Tiếng Kurmanji"] = "kmr", ["Tiếng Kurtokha"] = "xkz", ["Tiếng Kurumba Attapady"] = "pkr", ["Tiếng Kutch"] = "kfr", ["Tiếng Kuvi"] = "kxv", ["Tiếng Kuy"] = "kdt", ["Tiếng Kw'adza"] = "wka", ["Tiếng Kwak'wala"] = "kwk", ["Tiếng Kwanyama"] = "kj", ["Tiếng Kyakala"] = "tuw-kkl", ["Tiếng Kyrgyz"] = "ky", ["Tiếng Kyrgyz Phú Dụ"] = "trk-fyk", ["Tiếng Kâte"] = "kmg", ["Tiếng La Hủ"] = "lhu", ["Tiếng Ladakh"] = "lbj", ["Tiếng Ladin"] = "lld", ["Tiếng Ladino"] = "lad", ["Tiếng Lahnda"] = "lah", ["Tiếng Lak"] = "lbe", ["Tiếng Lakota"] = "lkt", ["Tiếng Lambadi"] = "lmn", ["Tiếng Lamboya"] = "lmy", ["Tiếng Lanoh"] = "lnh", ["Tiếng Laomian"] = "lwm", ["Tiếng Lar"] = "lrl", ["Tiếng Lasalimu"] = "llm", ["Tiếng Lashi"] = "lsi", ["Tiếng Latgale"] = "ltg", ["Tiếng Latinh"] = "la", ["Tiếng Latundê"] = "ltn", ["Tiếng Latvia"] = "lv", ["Tiếng Lavukaleve"] = "lvk", ["Tiếng Lawa Tây"] = "lcp", ["Tiếng Lawa Đông"] = "lwl", ["Tiếng Laz"] = "lzz", ["Tiếng Lemnos"] = "xle", ["Tiếng Lepcha"] = "lep", ["Tiếng Leponti"] = "xlp", ["Tiếng Lezghi nguyên thủy"] = "cau-lzg-pro", ["Tiếng Lezgi"] = "lez", ["Tiếng Lhao Vo"] = "mhx", ["Tiếng Liabuku"] = "lix", ["Tiếng Libido"] = "liq", ["Tiếng Liguria"] = "lij", ["Tiếng Lillooet"] = "lil", ["Tiếng Limburg"] = "li", ["Tiếng Lingala"] = "ln", ["Tiếng Lishana Deni"] = "lsd", ["Tiếng Lishanid Noshan"] = "aij", ["Tiếng Lisu"] = "lis", ["Tiếng Litva"] = "lt", ["Tiếng Livonia"] = "liv", ["Tiếng Livvi"] = "olo", ["Tiếng Lojban"] = "jbo", ["Tiếng Lokono"] = "arw", ["Tiếng Lombard"] = "lmo", ["Tiếng Lou"] = "loj", ["Tiếng Luba-Katanga"] = "lu", ["Tiếng Luganda"] = "lg", ["Tiếng Lur Bắc"] = "lrc", ["Tiếng Lur Nam"] = "luz", ["Tiếng Lushootseed"] = "lut", ["Tiếng Luwi"] = "xlu", ["Tiếng Luxembourg"] = "lb", ["Tiếng Lydia"] = "xld", ["Tiếng Lyngngam"] = "lyg", ["Tiếng Lyydi"] = "lud", ["Tiếng Lào"] = "lo", ["Tiếng Lô Lô"] = "ii", ["Tiếng Lư Nhân"] = "sit-lrn", ["Tiếng Lự"] = "khb", ["Tiếng M'Nông Nam"] = "mnn", ["Tiếng M'Nông Trung"] = "cmo", ["Tiếng M'Nông Đông"] = "mng", ["Tiếng Ma Thoa"] = "nru", ["Tiếng Ma'anyan"] = "mhy", ["Tiếng Maaka"] = "mew", ["Tiếng Maale"] = "mdy", ["Tiếng Maasai"] = "mas", ["Tiếng Mabang"] = "mde", ["Tiếng Macedoni"] = "mk", ["Tiếng Macedoni cổ đại"] = "xmk", ["Tiếng Macushi"] = "mbc", ["Tiếng Madura"] = "mad", ["Tiếng Magar Tây"] = "mrd", ["Tiếng Magar Đông"] = "mgp", ["Tiếng Magori"] = "zgr", ["Tiếng Maguindanao"] = "mdh", ["Tiếng Mah Meri"] = "mhe", ["Tiếng Mahal"] = "mjx", ["Tiếng Maithil"] = "mai", ["Tiếng Malagasy"] = "mg", ["Tiếng Malayalam"] = "ml", ["Tiếng Malta"] = "mt", ["Tiếng Mampruli"] = "maw", ["Tiếng Man"] = "gv", ["Tiếng Manda (Ấn Độ)"] = "mha", ["Tiếng Mandara"] = "tbf", ["Tiếng Mandinka"] = "mnk", ["Tiếng Mangas"] = "zns", ["Tiếng Manggarai"] = "mqy", ["Tiếng Mangghuer"] = "xgn-mgr", ["Tiếng Manipur"] = "mni", ["Tiếng Mankanya"] = "knf", ["Tiếng Mano"] = "mev", ["Tiếng Mansi nguyên thủy"] = "mns-pro", ["Tiếng Manumanaw"] = "kxf", ["Tiếng Mao Nam"] = "mmd", ["Tiếng Maori"] = "mi", ["Tiếng Mapuche"] = "arn", ["Tiếng Marathi"] = "mr", ["Tiếng Mari Đông"] = "mhr", ["Tiếng Marma"] = "rmz", ["Tiếng Marshall"] = "mh", ["Tiếng Marwar"] = "mwr", ["Tiếng Mator"] = "mtm", ["Tiếng Maya Yucatán"] = "yua", ["Tiếng Maya nguyên thủy"] = "myn-pro", ["Tiếng Mazahua Michoacán"] = "mmc", ["Tiếng Mazahua Trung"] = "maz", ["Tiếng Mazandaran"] = "mzn", ["Tiếng Mbabaram"] = "vmb", ["Tiếng Me'en"] = "mym", ["Tiếng Media cổ"] = "xme-old", ["Tiếng Medumba"] = "byv", ["Tiếng Mehri"] = "gdq", ["Tiếng Memon"] = "mby", ["Tiếng Mende"] = "men", ["Tiếng Meriam"] = "ulk", ["Tiếng Mi'kmaq"] = "mic", ["Tiếng Miami"] = "mia", ["Tiếng Mingrelia"] = "xmf", ["Tiếng Minriq"] = "mnq", ["Tiếng Mintil"] = "mzt", ["Tiếng Miranda"] = "mwl", ["Tiếng Mixtec Chayuco"] = "mih", ["Tiếng Miyako"] = "mvi", ["Tiếng Mizo"] = "lus", ["Tiếng Miến Điện"] = "my", ["Tiếng Miến Điện cổ"] = "obr", ["Tiếng Mlabri"] = "mra", ["Tiếng Mogholi"] = "mhj", ["Tiếng Moglena-Rumani"] = "ruq", ["Tiếng Mohawk"] = "moh", ["Tiếng Moken"] = "mwt", ["Tiếng Mokil"] = "mkj", ["Tiếng Moklen"] = "mkm", ["Tiếng Moksha"] = "mdf", ["Tiếng Mongghul"] = "xgn-mgl", ["Tiếng Mooré"] = "mos", ["Tiếng Mordvin nguyên thủy"] = "urj-mdv-pro", ["Tiếng Morokodo"] = "mgc", ["Tiếng Motu"] = "meu", ["Tiếng Mozarab"] = "mxi", ["Tiếng Muak Sa-aak"] = "ukk", ["Tiếng Munda nguyên thủy"] = "mun-pro", ["Tiếng Mundari"] = "unr", ["Tiếng Munji"] = "mnj", ["Tiếng Mursi"] = "muz", ["Tiếng Muscogee"] = "mus", ["Tiếng Muskogee nguyên thủy"] = "nai-mus-pro", ["Tiếng Mwotlap"] = "mlv", ["Tiếng Mân Bắc"] = "mnp", ["Tiếng Mân Nam"] = "nan", ["Tiếng Mân Trung"] = "czo", ["Tiếng Mân Tuyền Chương"] = "nan-hbl", ["Tiếng Mân nguyên thủy"] = "zhx-min-pro", ["Tiếng Mân Đông"] = "cdo", ["Tiếng Mã Lai"] = "ms", ["Tiếng Mã Lai Ambon"] = "abs", ["Tiếng Mã Lai Baba"] = "mbf", ["Tiếng Mã Lai Brunei"] = "kxd", ["Tiếng Mã Lai Bắc Maluku"] = "max", ["Tiếng Mã Lai cổ"] = "omy", ["Tiếng Mã Lai nguyên thủy"] = "poz-mly-pro", ["Tiếng Mã Lai-Chăm nguyên thủy"] = "poz-mcm-pro", ["Tiếng Mã Lai-Sumbawa nguyên thủy"] = "poz-msa-pro", ["Tiếng Mã Lai-Đa Đảo Trung Đông nguyên thủy"] = "poz-cet-pro", ["Tiếng Mã Lai-Đa Đảo nguyên thủy"] = "poz-pro", ["Tiếng Mã Lai-Đa Đảo Đông nguyên thủy"] = "pqe-pro", ["Tiếng Mã Liềng"] = "pkt", ["Tiếng Mãn Châu"] = "mnc", ["Tiếng Môn"] = "mnw", ["Tiếng Môn Thái"] = "mnw-tha", ["Tiếng Môn cổ"] = "omx", ["Tiếng Môn nguyên thủy"] = "mkh-mnc-pro", ["Tiếng Môn trung đại"] = "mkh-mmn", ["Tiếng Môn-Khmer nguyên thủy"] = "mkh-pro", ["Tiếng Mông"] = "hmf", ["Tiếng Mông Cổ"] = "mn", ["Tiếng Mông Cổ Khamnigan"] = "ykh", ["Tiếng Mông Cổ cổ điển"] = "cmg", ["Tiếng Mông Cổ nguyên thủy"] = "xgn-pro", ["Tiếng Mông Cổ trung đại"] = "xng", ["Tiếng Mông Trắng"] = "mww", ["Tiếng Mơ Nâm"] = "moo", ["Tiếng Mường"] = "mtq", ["Tiếng Mạ"] = "cma", ["Tiếng Mảng"] = "zng", ["Tiếng Na Miểu"] = "neo", ["Tiếng Na Uy"] = "no", ["Tiếng Na Uy (Bokmål)"] = "nb", ["Tiếng Na Uy (Nynorsk)"] = "nn", ["Tiếng Naga Chothe"] = "nct", ["Tiếng Nahuatl"] = "nah", ["Tiếng Nahuatl Temascaltepec"] = "nhv", ["Tiếng Nahuatl cổ điển"] = "nci", ["Tiếng Nakh nguyên thủy"] = "cau-nkh-pro", ["Tiếng Nam Altai"] = "alt", ["Tiếng Nam Amami Ōshima"] = "ams", ["Tiếng Nam Kolami"] = "nit", ["Tiếng Nam Mansi"] = "mns-sou", ["Tiếng Nam Ndebele"] = "nr", ["Tiếng Nam Sami"] = "sma", ["Tiếng Nam Slavey"] = "xsl", ["Tiếng Nam Thái"] = "sou", ["Tiếng Nam Uzbek"] = "uzs", ["Tiếng Nam Yukaghir"] = "yux", ["Tiếng Nam Á nguyên thủy"] = "aav-pro", ["Tiếng Nam Đảo nguyên thủy"] = "map-pro", ["Tiếng Nam Động"] = "kmc", ["Tiếng Nanai"] = "gld", ["Tiếng Napoli"] = "nap", ["Tiếng Nauru"] = "na", ["Tiếng Navajo"] = "nv", ["Tiếng Ndogo"] = "ndz", ["Tiếng Ndonga"] = "ng", ["Tiếng Nefusa"] = "jbn", ["Tiếng Negerhollands"] = "dcr", ["Tiếng Negidal"] = "neg", ["Tiếng Nenets lãnh nguyên"] = "yrk", ["Tiếng Nepal"] = "ne", ["Tiếng Newa"] = "new", ["Tiếng Nga"] = "ru", ["Tiếng Ngalum"] = "szb", ["Tiếng Nganasan"] = "nio", ["Tiếng Ngas"] = "anc", ["Tiếng Ngiemboon"] = "nnh", ["Tiếng Ngomba"] = "jgo", ["Tiếng Nguồn"] = "nuo", ["Tiếng Ngô"] = "wuu", ["Tiếng Ngũ Đồn"] = "wuh", ["Tiếng Nha Lang"] = "yrn", ["Tiếng Nheengatu"] = "yrl", ["Tiếng Nhu Nhiên"] = "qfa-xgx-rou", ["Tiếng Nhĩ Tô"] = "ers", ["Tiếng Nhật"] = "ja", ["Tiếng Nhật Bản nguyên thủy"] = "jpx-pro", ["Tiếng Nhật cổ"] = "ojp", ["Tiếng Nias"] = "nia", ["Tiếng Nicobar Car"] = "caq", ["Tiếng Nicobar Nam"] = "nik", ["Tiếng Nicobar Trung"] = "ncb", ["Tiếng Nicobar nguyên thủy"] = "aav-nic-pro", ["Tiếng Niue"] = "niu", ["Tiếng Nivkh"] = "niv", ["Tiếng Nkari"] = "nkz", ["Tiếng Nkonya"] = "nko", ["Tiếng Nobiin"] = "fia", ["Tiếng Nogai"] = "nog", ["Tiếng Noreia"] = "nrc", ["Tiếng Norman"] = "nrf", ["Tiếng Novgorod cổ"] = "zle-ono", ["Tiếng Novial"] = "nov", ["Tiếng Nubaca"] = "baf", ["Tiếng Nubi"] = "kcn", ["Tiếng Nuer"] = "nus", ["Tiếng Nuu-chah-nulth"] = "nuk", ["Tiếng Nyah Kur"] = "cbn", ["Tiếng Nyaw"] = "nyw", ["Tiếng Nyeu"] = "nyl", ["Tiếng Nùng"] = "nut", ["Tiếng Nùng Vẻn"] = "enc", ["Tiếng Nạp Tây"] = "nxq", ["Tiếng Nữ Chân"] = "juc", ["Tiếng O'odham"] = "ood", ["Tiếng Ocaina"] = "oca", ["Tiếng Occitan"] = "oc", ["Tiếng Occitan cổ"] = "pro", ["Tiếng Ogbronuagum"] = "ogu", ["Tiếng Oirat"] = "xwo", ["Tiếng Ojibwe"] = "oj", ["Tiếng Okanagan"] = "oka", ["Tiếng Okinawa"] = "ryu", ["Tiếng Okinoerabu"] = "okn", ["Tiếng Olukumi"] = "ulb", ["Tiếng Omaha-Ponca"] = "oma", ["Tiếng Omok"] = "omk", ["Tiếng Oriya"] = "or", ["Tiếng Oriya Adiwasi"] = "ort", ["Tiếng Orma"] = "orc", ["Tiếng Ormu"] = "orz", ["Tiếng Ormur"] = "oru", ["Tiếng Oroch"] = "oac", ["Tiếng Orok"] = "oaa", ["Tiếng Oromo"] = "om", ["Tiếng Oromo Nam"] = "gax", ["Tiếng Oromo Đông"] = "hae", ["Tiếng Oroqen"] = "orh", ["Tiếng Osage"] = "osa", ["Tiếng Osatu"] = "ost", ["Tiếng Osci"] = "osc", ["Tiếng Ossetia"] = "os", ["Tiếng Ossetia cổ"] = "oos", ["Tiếng Otomi Mezquital"] = "ote", ["Tiếng Otuke"] = "otu", ["Tiếng Pa Kô"] = "pac", ["Tiếng Pa'O"] = "blk", ["Tiếng Paharia Kumarbhag"] = "kmj", ["Tiếng Paharia Sauria"] = "mjt", ["Tiếng Paite"] = "pck", ["Tiếng Paiwan"] = "pwn", ["Tiếng Pakan nguyên thủy"] = "mkh-pkn-pro", ["Tiếng Pala"] = "plq", ["Tiếng Palau"] = "pau", ["Tiếng Palaung Ruching"] = "pce", ["Tiếng Palaung Rumai"] = "rbb", ["Tiếng Palaung Shwe"] = "pll", ["Tiếng Palaung nguyên thủy"] = "mkh-pal-pro", ["Tiếng Palawano Brooke's Point"] = "plw", ["Tiếng Pali"] = "pi", ["Tiếng Pama-Nyungar nguyên thủy"] = "aus-pam-pro", ["Tiếng Pancana"] = "pnp", ["Tiếng Panchpargania"] = "tdb", ["Tiếng Pangasinan"] = "pag", ["Tiếng Pangwala"] = "pgg", ["Tiếng Papiamento"] = "pap", ["Tiếng Parauk"] = "prk", ["Tiếng Parthia"] = "xpr", ["Tiếng Pashtun"] = "ps", ["Tiếng Pathan nguyên thủy"] = "ira-pat-pro", ["Tiếng Pauna"] = "pnk", ["Tiếng Pawnee"] = "paw", ["Tiếng Pazeh"] = "pzh", ["Tiếng Pear"] = "pcb", ["Tiếng Pear nguyên thủy"] = "mkh-pea-pro", ["Tiếng Pecheneg"] = "xpc", ["Tiếng Pela"] = "bxd", ["Tiếng Pemon"] = "aoc", ["Tiếng Pengo"] = "peg", ["Tiếng Perm nguyên thủy"] = "urj-prm-pro", ["Tiếng Petjo"] = "pey", ["Tiếng Phai"] = "prt", ["Tiếng Phake"] = "phk", ["Tiếng Phalura"] = "phl", ["Tiếng Phi-Á nguyên thủy"] = "afa-pro", ["Tiếng Philippines nguyên thủy"] = "phi-pro", ["Tiếng Phoenicia"] = "phn", ["Tiếng Phong-Kniang"] = "pnx", ["Tiếng Phrygia"] = "xpg", ["Tiếng Phu Thái"] = "pht", ["Tiếng Phuan"] = "phu", ["Tiếng Pháp"] = "fr", ["Tiếng Pháp cổ"] = "fro", ["Tiếng Pháp trung đại"] = "frm", ["Tiếng Phạn"] = "sa", ["Tiếng Phần Lan"] = "fi", ["Tiếng Phổ Hiền"] = "cpx", ["Tiếng Phổ cổ"] = "prg", ["Tiếng Picard"] = "pcd", ["Tiếng Piceni Nam"] = "spx", ["Tiếng Piemonte"] = "pms", ["Tiếng Pilagá"] = "plg", ["Tiếng Pinyin"] = "pny", ["Tiếng Pipil"] = "ppl", ["Tiếng Pnar"] = "pbv", ["Tiếng Pohnpei"] = "pon", ["Tiếng Polabia"] = "pox", ["Tiếng Ponosakan"] = "pns", ["Tiếng Popoluca cao nguyên"] = "poi", ["Tiếng Potawatomi"] = "pot", ["Tiếng Prakrit"] = "pra", ["Tiếng Prakrit Ashoka"] = "inc-ash", ["Tiếng Prakrit Niya"] = "pra-niy", ["Tiếng Prakrit Paisaci"] = "inc-psc", ["Tiếng Prakrit Saurasen"] = "psu", ["Tiếng Prasuni"] = "prn", ["Tiếng Pucikwar"] = "apq", ["Tiếng Punic"] = "xpu", ["Tiếng Punjab"] = "pa", ["Tiếng Puyuma"] = "pyu", ["Tiếng Pwo Bắc"] = "pww", ["Tiếng Pwo Phrae"] = "kjt", ["Tiếng Pwo Tây"] = "pwo", ["Tiếng Pwo Đông"] = "kjp", ["Tiếng Pà Thẻn"] = "pha", ["Tiếng Pọng"] = "hnu", ["Tiếng Qashqai"] = "qxq", ["Tiếng Quan Thoại"] = "cmn", ["Tiếng Quapaw"] = "qua", ["Tiếng Quechua"] = "qu", ["Tiếng Quenya"] = "qya", ["Tiếng Quiripi"] = "qyp", ["Tiếng Quảng Đông"] = "yue", ["Tiếng Ra Glai Bắc"] = "rog", ["Tiếng Ra Glai Cát Gia"] = "roc", ["Tiếng Ra Glai Nam"] = "rgs", ["Tiếng Rabha"] = "rah", ["Tiếng Raetia"] = "xrr", ["Tiếng Rajasthan"] = "raj", ["Tiếng Rajbanshi"] = "rjs", ["Tiếng Rakhine"] = "rki", ["Tiếng Rama"] = "rma", ["Tiếng Rangpur"] = "rkt", ["Tiếng Rapa Nui"] = "rap", ["Tiếng Rarotonga"] = "rar", ["Tiếng Rasawa"] = "rac", ["Tiếng Raute"] = "rau", ["Tiếng Ravula"] = "yea", ["Tiếng Rawang"] = "raw", ["Tiếng Rejang"] = "rej", ["Tiếng Rendille"] = "rel", ["Tiếng Rohingya"] = "rhg", ["Tiếng Romagnol"] = "rgn", ["Tiếng Romansh"] = "rm", ["Tiếng Rukai"] = "dru", ["Tiếng Rumani"] = "ro", ["Tiếng Rungus"] = "drg", ["Tiếng Rusnak"] = "rsk", ["Tiếng Rusyn"] = "rue", ["Tiếng Ruthenia cổ"] = "zle-ort", ["Tiếng Rutul"] = "rut", ["Tiếng Rơ Măm"] = "rmx", ["Tiếng Rơ Ngao"] = "ren", ["Tiếng Saanich"] = "str", ["Tiếng Saaroa"] = "sxr", ["Tiếng Saba"] = "xsa", ["Tiếng Sabüm"] = "sbo", ["Tiếng Sadri"] = "sck", ["Tiếng Saek"] = "skb", ["Tiếng Saho"] = "ssy", ["Tiếng Saisiyat"] = "xsy", ["Tiếng Sakizaya"] = "szy", ["Tiếng Salar"] = "slr", ["Tiếng Salish nguyên thủy"] = "sal-pro", ["Tiếng Sami Akkala"] = "sia", ["Tiếng Sami Inari"] = "smn", ["Tiếng Sami Kildin"] = "sjd", ["Tiếng Sami Skolt"] = "sms", ["Tiếng Sami Ume"] = "sju", ["Tiếng Sami nguyên thủy"] = "smi-pro", ["Tiếng Samoa"] = "sm", ["Tiếng Samogitia"] = "sgs", ["Tiếng Samoyed nguyên thủy"] = "syd-pro", ["Tiếng Samtao"] = "stu", ["Tiếng Sango"] = "sg", ["Tiếng Santal"] = "sat", ["Tiếng Saposa"] = "sps", ["Tiếng Saraiki"] = "skr", ["Tiếng Saramacca"] = "srm", ["Tiếng Sardegna"] = "sc", ["Tiếng Saxon cổ"] = "osx", ["Tiếng Scots"] = "sco", ["Tiếng Sebat Bet Gurage"] = "sgw", ["Tiếng Selkup"] = "sel", ["Tiếng Semai"] = "sea", ["Tiếng Semaq Beri"] = "szc", ["Tiếng Semelai"] = "sza", ["Tiếng Semit nguyên thủy"] = "sem-pro", ["Tiếng Semnam"] = "ssm", ["Tiếng Seneca"] = "see", ["Tiếng Senni Koyraboro"] = "ses", ["Tiếng Senoufo Nyarafolo"] = "sev", ["Tiếng Serbia-Croatia"] = "sh", ["Tiếng Seri"] = "sei", ["Tiếng Seze"] = "sze", ["Tiếng Shan"] = "shn", ["Tiếng Sherpa"] = "xsr", ["Tiếng Shina"] = "scl", ["Tiếng Shina Kohistan"] = "plk", ["Tiếng Sholaga"] = "sle", ["Tiếng Shompen"] = "sii", ["Tiếng Shona"] = "sn", ["Tiếng Shor"] = "cjs", ["Tiếng Shuswap"] = "shs", ["Tiếng Sicel"] = "scx", ["Tiếng Sicily"] = "scn", ["Tiếng Sidamo"] = "sid", ["Tiếng Sikkim"] = "sip", ["Tiếng Silesia"] = "szl", ["Tiếng Siltʼe"] = "stv", ["Tiếng Sindh"] = "sd", ["Tiếng Bidayuh Bau"] = "sne", ["Tiếng Sinhala"] = "si", ["Tiếng Sioux nguyên thủy"] = "sio-pro", ["Tiếng Siraya"] = "fos", ["Tiếng Sissano"] = "sso", ["Tiếng Siwi"] = "siz", ["Tiếng Skepi"] = "skw", ["Tiếng Slav Giáo hội"] = "zls-chs", ["Tiếng Slav Giáo hội cổ"] = "cu", ["Tiếng Slav nguyên thủy"] = "sla-pro", ["Tiếng Slav Đông cổ"] = "orv", ["Tiếng Slovak"] = "sk", ["Tiếng Slovene"] = "sl", ["Tiếng Slovincia"] = "zlw-slv", ["Tiếng Socotra"] = "sqt", ["Tiếng Sogdia"] = "sog", ["Tiếng Sogdia nguyên thủy"] = "ira-sgc-pro", ["Tiếng Sokna"] = "swn", ["Tiếng Solon"] = "tuw-sol", ["Tiếng Solong"] = "aaw", ["Tiếng Somali"] = "so", ["Tiếng Sonsorol"] = "sov", ["Tiếng Sora"] = "srb", ["Tiếng Soran"] = "ckb", ["Tiếng Sotho"] = "st", ["Tiếng Sotho Bắc"] = "nso", ["Tiếng Soyot"] = "trk-soy", ["Tiếng Sranan Tongo"] = "srn", ["Tiếng Sumer"] = "sux", ["Tiếng Sunda"] = "su", ["Tiếng Sunda cổ"] = "osn", ["Tiếng Suri"] = "suq", ["Tiếng Surjapur"] = "sjp", ["Tiếng Svan"] = "sva", ["Tiếng Swahili"] = "sw", ["Tiếng Swazi"] = "ss", ["Tiếng Sylhet"] = "syl", ["Tiếng Syriac cổ điển"] = "syc", ["Tiếng Sán Chay"] = "mlc", ["Tiếng Séc"] = "cs", ["Tiếng Séc cổ"] = "zlw-ocs", ["Tiếng Sô"] = "sss", ["Tiếng Taabwa"] = "tap", ["Tiếng Tabasaran"] = "tab", ["Tiếng Tachawit"] = "shy", ["Tiếng Tagal Murut"] = "mvv", ["Tiếng Tagalog"] = "tl", ["Tiếng Tagoi"] = "tag", ["Tiếng Tahiti"] = "ty", ["Tiếng Tai Loi"] = "tlq", ["Tiếng Tai Tây Nam nguyên thủy"] = "tai-swe-pro", ["Tiếng Tajik"] = "tg", ["Tiếng Tal"] = "tal", ["Tiếng Tala"] = "tak", ["Tiếng Talossa"] = "tzl", ["Tiếng Talysh"] = "tly", ["Tiếng Tamang Gorkha Đông"] = "tge", ["Tiếng Tamang Tây"] = "tdg", ["Tiếng Tamang Đông"] = "taj", ["Tiếng Tamazight Trung Atlas"] = "tzm", ["Tiếng Tamil"] = "ta", ["Tiếng Tamil cổ"] = "oty", ["Tiếng Tamki"] = "tax", ["Tiếng Tammari"] = "tbz", ["Tiếng Tampuan"] = "tpu", ["Tiếng Tanchangya"] = "tnv", ["Tiếng Tangkhul Naga"] = "nmf", ["Tiếng Tangut"] = "txg", ["Tiếng Tanimbili"] = "tbe", ["Tiếng Taos"] = "twf", ["Tiếng Tapirapé"] = "taf", ["Tiếng Tara Baka"] = "bdh", ["Tiếng Tariana"] = "tae", ["Tiếng Tarifit"] = "rif", ["Tiếng Tashelhit"] = "shi", ["Tiếng Tat-Do Thái"] = "jdt", ["Tiếng Tatar"] = "tt", ["Tiếng Tatar Crưm"] = "crh", ["Tiếng Tatar Siberia"] = "sty", ["Tiếng Tatuyo"] = "tav", ["Tiếng Taungyo"] = "tco", ["Tiếng Tause"] = "tad", ["Tiếng Tausug"] = "tsg", ["Tiếng Tavoy"] = "tvn", ["Tiếng Tay Dọ"] = "tyj", ["Tiếng Taz"] = "zhx-taz", ["Tiếng Telugu"] = "te", ["Tiếng Tem"] = "kdh", ["Tiếng Temiar"] = "tea", ["Tiếng Temoq"] = "tmo", ["Tiếng Ten'edn"] = "tnz", ["Tiếng Tenharim"] = "pah", ["Tiếng Tepehuan Đông Nam"] = "stp", ["Tiếng Teressa"] = "tef", ["Tiếng Ternate"] = "tft", ["Tiếng Tetum"] = "tet", ["Tiếng Thavưng"] = "thm", ["Tiếng Thracia"] = "txh", ["Tiếng Thác Bạt"] = "qfa-xgx-tuo", ["Tiếng Thái"] = "th", ["Tiếng Thái Hàng Tổng"] = "tpo", ["Tiếng Thái Lai"] = "tjl", ["Tiếng Thái Na"] = "tdd", ["Tiếng Thái Trắng"] = "twh", ["Tiếng Thái Song"] = "soa", ["Tiếng Thái nguyên thủy"] = "tai-pro", ["Tiếng Thái Đen"] = "blt", ["Tiếng Thái Đỏ"] = "tyr", ["Tiếng Thượng Sorb"] = "hsb", ["Tiếng Thổ"] = "tou", ["Tiếng Thổ Dục Hồn"] = "qfa-xgx-tuh", ["Tiếng Thổ Gia Bắc"] = "tji", ["Tiếng Thổ Gia Nam"] = "tjs", ["Tiếng Thổ Nhĩ Kỳ"] = "tr", ["Tiếng Thổ Nhĩ Kỳ Anatolia cổ"] = "trk-oat", ["Tiếng Thổ Nhĩ Kỳ Gagauz Balkan"] = "bgx", ["Tiếng Thổ Nhĩ Kỳ Ottoman"] = "ota", ["Tiếng Thụy Điển"] = "sv", ["Tiếng Thụy Điển cổ"] = "gmq-osw", ["Tiếng Thủy"] = "swi", ["Tiếng Tiang"] = "tbj", ["Tiếng Tigre"] = "tig", ["Tiếng Tigrinya"] = "ti", ["Tiếng Tindi"] = "tin", ["Tiếng Tiruray"] = "tiy", ["Tiếng Tiên Ti"] = "qfa-xgx-xbi", ["Tiếng Tlingit"] = "tli", ["Tiếng Tobi"] = "tox", ["Tiếng Tochari A"] = "xto", ["Tiếng Tochari B"] = "txb", ["Tiếng Tochari nguyên thủy"] = "ine-toc-pro", ["Tiếng Tocho"] = "taz", ["Tiếng Toda"] = "tcx", ["Tiếng Tofa"] = "kim", ["Tiếng Tok Pisin"] = "tpi", ["Tiếng Tokelau"] = "tkl", ["Tiếng Toki Pona"] = "tok", ["Tiếng Tokunoshima"] = "tkn", ["Tiếng Tonga"] = "to", ["Tiếng Tooro"] = "ttj", ["Tiếng Torwali"] = "trw", ["Tiếng Toto"] = "txo", ["Tiếng Tráng Tả Giang"] = "zzj", ["Tiếng Trió"] = "tri", ["Tiếng Triều Châu"] = "nan-tws", ["Tiếng Triều Tiên"] = "ko", ["Tiếng Triều Tiên cổ"] = "oko", ["Tiếng Triều Tiên nguyên thủy"] = "qfa-kor-pro", ["Tiếng Triều Tiên trung đại"] = "okm", ["Tiếng Truku"] = "trv", ["Tiếng Trung Bikol"] = "bcl", ["Tiếng Trung Mansi"] = "mns-cen", ["Tiếng Trung Nahuatl"] = "nhn", ["Tiếng Trung Nahuatl Huasteca"] = "nch", ["Tiếng Trung Quốc"] = "zh", ["Tiếng Trà Động"] = "cdy", ["Tiếng Trác Ni"] = "cda", ["Tiếng Tráng"] = "za", ["Tiếng Tráng Nông"] = "zhn", ["Tiếng Tráng Đức Tĩnh"] = "zyg", ["Tiếng Trát Bá"] = "zhb", ["Tiếng Tsakhur"] = "tkr", ["Tiếng Tsakonia"] = "tsd", ["Tiếng Tsamai"] = "tsb", ["Tiếng Tsat"] = "huq", ["Tiếng Tshangla"] = "tsj", ["Tiếng Tsimshian"] = "tsi", ["Tiếng Tsonga"] = "ts", ["Tiếng Tsou"] = "tsu", ["Tiếng Tsuut'ina"] = "srs", ["Tiếng Tswana"] = "tn", ["Tiếng Tuamotu"] = "pmt", ["Tiếng Tuareg"] = "tmh", ["Tiếng Tukang Besi Bắc"] = "khc", ["Tiếng Tukang Besi Nam"] = "bhq", ["Tiếng Tuki"] = "bag", ["Tiếng Tulu"] = "tcy", ["Tiếng Tumbuka"] = "tum", ["Tiếng Tungus nguyên thủy"] = "tuw-pro", ["Tiếng Tunni"] = "tqq", ["Tiếng Tupi"] = "tpn", ["Tiếng Tupi cổ"] = "tpw", ["Tiếng Tupi-Guarani nguyên thủy"] = "tup-gua-pro", ["Tiếng Turk Khorasan"] = "kmz", ["Tiếng Turk Khorezm"] = "zkh", ["Tiếng Turk cổ"] = "otk", ["Tiếng Turk nguyên thủy"] = "trk-pro", ["Tiếng Turkmen"] = "tk", ["Tiếng Tuva"] = "tyv", ["Tiếng Tuvalu"] = "tvl", ["Tiếng Tà Mun"] = "aav-tam", ["Tiếng Tà Ôi Thượng"] = "tth", ["Tiếng Tày"] = "tyz", ["Tiếng Tày Sa Pa"] = "tys", ["Tiếng Tân Aram Assyria"] = "aii", ["Tiếng Tân Aram Do Thái Barzani"] = "bjf", ["Tiếng Tây Abenaki"] = "abe", ["Tiếng Tây Ban Nha"] = "es", ["Tiếng Tây Ban Nha cổ"] = "osp", ["Tiếng Tây Bắc Kavkaz nguyên thủy"] = "cau-nwc-pro", ["Tiếng Tây Frisia"] = "fy", ["Tiếng Tây Huasteca Nahuatl"] = "nhw", ["Tiếng Tây Kayah"] = "kyu", ["Tiếng Tây Makian"] = "mqs", ["Tiếng Tây Tạng"] = "bo", ["Tiếng Tây Tạng cổ điển"] = "xct", ["Tiếng Tây Yugur"] = "ybe", ["Tiếng Tích Bá"] = "sjo", ["Tiếng Tơ Đrá"] = "tdr", ["Tiếng Tương"] = "hsn", ["Tiếng Chaima"] = "ciy", ["Tiếng Ubykh"] = "uby", ["Tiếng Udi"] = "udi", ["Tiếng Udihe"] = "ude", ["Tiếng Udmurt"] = "udm", ["Tiếng Ugarit"] = "uga", ["Tiếng Ugong"] = "ugo", ["Tiếng Ugria nguyên thủy"] = "urj-ugr-pro", ["Tiếng Ukraina"] = "uk", ["Tiếng Umbria"] = "xum", ["Tiếng Uneapa"] = "bbn", ["Tiếng Urak Lawoi'"] = "urk", ["Tiếng Ural nguyên thủy"] = "urj-pro", ["Tiếng Urartu"] = "xur", ["Tiếng Urdu"] = "ur", ["Tiếng Urubú-Kaapor"] = "urb", ["Tiếng Urum"] = "uum", ["Tiếng Ushojo"] = "ush", ["Tiếng Uzbek"] = "uz", ["Tiếng Vaghri"] = "vgr", ["Tiếng Varli"] = "vav", ["Tiếng Vasavi"] = "vas", ["Tiếng Venda"] = "ve", ["Tiếng Veneti"] = "xve", ["Tiếng Veneto"] = "vec", ["Tiếng Veps"] = "vep", ["Tiếng Việt"] = "vi", ["Tiếng Việt trung cổ"] = "mkh-mvi", ["Tiếng Việt-Mường nguyên thủy"] = "mkh-vie-pro", ["Tiếng Volapük"] = "vo", ["Tiếng Volsci"] = "xvo", ["Tiếng Vot"] = "vot", ["Tiếng Vurës"] = "msn", ["Tiếng Waata"] = "ssn", ["Tiếng Waimaha"] = "bao", ["Tiếng Waiwai"] = "waw", ["Tiếng Wakhi"] = "wbl", ["Tiếng Wales"] = "cy", ["Tiếng Wallis"] = "wls", ["Tiếng Wallon"] = "wa", ["Tiếng Wambule"] = "wme", ["Tiếng Waneci"] = "wne", ["Tiếng War-Jaintia"] = "aml", ["Tiếng Waray"] = "war", ["Tiếng Warekena"] = "gae", ["Tiếng Warji"] = "wji", ["Tiếng Wayampi"] = "oym", ["Tiếng Wayana"] = "way", ["Tiếng Wayuu"] = "guc", ["Tiếng Wewaw"] = "wea", ["Tiếng Wobé"] = "wob", ["Tiếng Wolaytta"] = "wal", ["Tiếng Wolio"] = "wlo", ["Tiếng Wolof"] = "wo", ["Tiếng Wotu"] = "wtw", ["Tiếng Wymysorys"] = "wym", ["Tiếng Xamtanga"] = "xan", ["Tiếng Xhosa"] = "xh", ["Tiếng Xinh Mun"] = "puo", ["Tiếng Xtiêng"] = "sti", ["Tiếng Xtiêng Bù Đeh"] = "stt", ["Tiếng Xârâcùù"] = "ane", ["Tiếng Xơ Đăng"] = "sed", ["Tiếng Yaeyama"] = "rys", ["Tiếng Yaghnob"] = "yai", ["Tiếng Yakan"] = "yka", ["Tiếng Yakima"] = "yak", ["Tiếng Yakkha"] = "ybh", ["Tiếng Yakut"] = "sah", ["Tiếng Yami"] = "tao", ["Tiếng Yao (Nam Mĩ)"] = "sai-yao", ["Tiếng Yap"] = "yap", ["Tiếng Yapunda"] = "yev", ["Tiếng Ye'kwana"] = "mch", ["Tiếng Yele"] = "yle", ["Tiếng Yemsa"] = "jnj", ["Tiếng Yevan"] = "yej", ["Tiếng Yiddish"] = "yi", ["Tiếng Yidgha"] = "ydg", ["Tiếng Yidiny"] = "yii", ["Tiếng Yiwom"] = "gek", ["Tiếng Yogad"] = "yog", ["Tiếng Yola"] = "yol", ["Tiếng Yonaguni"] = "yoi", ["Tiếng Yong"] = "yno", ["Tiếng Yongkom"] = "yon", ["Tiếng Yoron"] = "yox", ["Tiếng Yoruba"] = "yo", ["Tiếng Yoruba nguyên thủy"] = "alv-yor-pro", ["Tiếng Yoy"] = "yoy", ["Tiếng Yugh"] = "yug", ["Tiếng Yukaghir nguyên thủy"] = "qfa-yuk-pro", ["Tiếng Yup'ik"] = "esu", ["Tiếng Yuri"] = "sai-yri", ["Tiếng Yurok"] = "yur", ["Tiếng Zaghawa"] = "zag", ["Tiếng Zaiwa"] = "atb", ["Tiếng Zarma"] = "dje", ["Tiếng Zarphat"] = "zrp", ["Tiếng Zay"] = "zwa", ["Tiếng Zayse-Zergulla"] = "zay", ["Tiếng Zaza"] = "zza", ["Tiếng Zeeland"] = "zea", ["Tiếng Zenaga"] = "zen", ["Tiếng Zirenkel"] = "zrn", ["Tiếng Zulu"] = "zu", ["Tiếng Zumbun"] = "jmb", ["Tiếng Äynu"] = "aib", ["Tiếng Ê Đê"] = "rad", ["Tiếng Ông Bối nguyên thủy"] = "qfa-onb-pro", ["Tiếng Övdal"] = "ovd", ["Tiếng Ý"] = "it", ["Tiếng Ý-Do Thái"] = "itk", ["Tiếng Đa Đảo hạt nhân nguyên thủy"] = "poz-pnp-pro", ["Tiếng Đa Đảo nguyên thủy"] = "poz-pol-pro", ["Tiếng Đa Đảo Đông nguyên thủy"] = "poz-pep-pro", ["Tiếng Đan Mạch"] = "da", ["Tiếng Đan Mạch cổ"] = "gmq-oda", ["Tiếng Đài Sơn"] = "zhx-tai", ["Tiếng Đông Abenaki"] = "aaq", ["Tiếng Đông Bontoc"] = "ebk", ["Tiếng Đông Bắc Kavkaz nguyên thủy"] = "cau-nec-pro", ["Tiếng Đông Can"] = "dng", ["Tiếng Đông Futuna"] = "fud", ["Tiếng Đông Hương"] = "sce", ["Tiếng Đông Khanty"] = "kca-eas", ["Tiếng Đông Yugur"] = "yuy", ["Tiếng Đường Uông"] = "zhx-twa", ["Tiếng Độc Long"] = "duu", ["Tiếng Đức"] = "de", ["Tiếng Đức Alemanni"] = "gsw", ["Tiếng Đức cao địa cổ"] = "goh", ["Tiếng Đức cao địa trung đại"] = "gmh", ["Tiếng Đức Đông Trung"] = "gmw-ecg", ["Tiếng Ơ Đu"] = "tyh", ["Tiếng Ưu Miền"] = "ium", ["Tiếng ǃXóõ"] = "nmn", ["Tiếng Ả Rập"] = "ar", ["Tiếng Ả Rập Ai Cập"] = "arz", ["Tiếng Ả Rập Algérie"] = "arq", ["Tiếng Ả Rập Bắc Levant"] = "apc", ["Tiếng Ả Rập Hijazi"] = "acw", ["Tiếng Ả Rập Juba"] = "pga", ["Tiếng Ả Rập Libya"] = "ayl", ["Tiếng Ả Rập Maroc"] = "ary", ["Tiếng Ả Rập Nam Levant"] = "ajp", ["Tiếng Ả Rập Oman"] = "acx", ["Tiếng Ả Rập Sudan"] = "apd", ["Tiếng Ả Rập Síp"] = "acy", ["Tiếng Ả Rập Tajikistan"] = "abh", ["Tiếng Ả Rập Tchad"] = "shu", ["Tiếng Ả Rập Uzbekistan"] = "auz", ["Tiếng Ả Rập vùng Vịnh"] = "afb", ["Tiếng Ấn-Arya nguyên thủy"] = "inc-pro", ["Tiếng Ấn-Iran nguyên thủy"] = "iir-pro", ["Tiếng Ấn-Âu nguyên thủy"] = "ine-pro", ["Tiếng Ỹaroamë"] = "yro", ["Àhàn"] = "ahn", ["Áncá"] = "acb", ["Ömie"] = "aom", ["Tiếng Önge"] = "oon", ["Đa ngữ"] = "mul", ["ǀXam"] = "xam", ["ǁAni"] = "hnh", ["ǁGana"] = "gnk", ["ǁXegwi"] = "xeg", ["ǂHoan"] = "huc", ["ǃKung"] = "khi-kun", ["Tiếng Bắc Selkup"] = "sel-nor", ["Tiếng Nam Selkup"] = "sel-sou", ["Tiếng Selkup nguyên thủy"] = "sel-pro", ["Tiếng Slovak cổ"] = "zlw-osk", ["Proto-Central Naga"] = "sit-aao-pro", ["Tiếng Bạch nguyên thủy"] = "sit-bai-pro", ["Bangru"] = "sit-ban", ["Proto-Bodish"] = "sit-bdi-pro", ["Tiếng Tứ Xuyên"] = "zhx-sic", ["Tiếng Quảng Lâm"] = "aav-qal", } pd34etb50jm995tzgwcjctl9y1wd7co ip 0 274315 2350079 2083807 2026-05-04T04:07:52Z WhoAlone 40420 2350079 wikitext text/x-wiki {{-ili-}} {{-noun-}} {{pn}} # [[sợi]]. [[Thể loại:Danh từ tiếng Ili Turki]] =={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[hạt]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. jeslmvnfxbkkzb8m3uld7m0sa80enr5 Mô đun:form of/data/1 828 275089 2350012 2344052 2026-05-04T00:42:38Z Hiyuune 50834 2350012 Scribunto text/plain --[=[ This module lists the more common recognized inflection tags, along with their shortcut aliases, the corresponding glossary entry or page describing the tag, and the corresponding wikidata entry. The less common tags are in [[Module:form of/data/2]]. We divide the tags this way to save memory space. Be careful adding more tags to this module; add them to the other module unless you're sure they are common. TAGS is a table where keys are the canonical form of an inflection tag and the corresponding values are tables describing the tags, consisting of the following keys: - 1: Type of the tag ("person", "number", "gender", "case", "animacy", "tense-aspect", "mood", "voice-valence", etc.). - 2: Anchor or page describing the inflection tag, with the following values: * nil: No link. * APPENDIX: Anchor in [[Appendix:Glossary]] whose name is the same as the tag * WIKT: Page in the English Wiktionary whose name is the same as the tag. * WP: Page in the English Wikipedia whose name is the same as the tag. * A string: If prefixed by 'w:' the specified page in the English Wikipedia. If prefixed by 'wikt:', the specified page in the English Wiktionary. Otherwise, an anchor in [[Appendix:Glossary]]. NOTE: GLOSSARY ANCHORS ARE PREFERRED. Other types of entries should be migrated to the glossary, with links to Wikipedia and/or Wiktionary entries as appropriate. - 3: List of shortcuts (i.e. aliases for the inflection tag) or a single shortcut string, or nil. - 4: Numeric value of Wikidata identifier (see wikidata.org) for the concept most closely describing this tag. (The actual Wikidata identifier is a string formed by prefixing the number with Q.) - display: If specified, consists of text to display in the definition line, in lieu of the canonical form of the inflection tag. If there is a glossary entry, the displayed text forms the right side of the two-part glossary link. - no_space_on_left: If specified, don't display a space to the left of the tag. Used for punctuation. - no_space_on_right: If specified, don't display a space to the right of the tag. Used for punctuation. SHORTCUTS is a table mapping shortcut aliases to canonical inflection tag names. Shortcuts are of one of three types: (1) A simple alias of a tag. These do not need to be entered explicitly into the table; code at the end of the module automatically fills in these entries based on the information in TAGS. (2) An alias to a multipart tag. For example, the alias "mf" maps to the multipart tag "m//f", which will in turn be expanded into the canonical multipart tag {"masculine", "feminine"}, which will display as (approximately) "[[Appendix:Glossary#gender|masculine]] and [[Appendix:Glossary#gender|feminine]]". The number of such aliases should be liminted, and should cover only the most common combinations. Normally, multipart tags are displayed using serialCommaJoin() in [[Module:table]] to appropriately join the display form of the individual tags using commas and/or "và". However, some multipart tags are displayed specially; see DISPLAY_HANDLERS below. Note that aliases to multipart tags can themselves contain simple aliases in them. (3) An alias to a list of multiple tags (which may themselves be simple or multipart aliases). Specifying the alias is exactly equivalent to specifying the tags in the list in order, one after another. An example is "1s", which maps to the list {"1", "s"}. The number of such aliases should be limited, and should cover only the most common combinations. NOTE: In some cases below, multiple tags point to the same wikidata, because Wikipedia considers them synonyms. Examples are indirect case vs. objective case vs. oblique case, and inferential mood vs. renarrative mood. We do this because (a) we want to allow users to choose their own terminology; (b) we want to be able to use the terminology most common for the language in question; (c) terms considered synonyms may or may not actually be synonyms, as different languages may use the terms differently. For example, although the Wikipedia page on [[w:inferential mood]] claims that inferential and renarrative moods are the same, the page on [[w:Bulgarian_verbs#Evidentials]] claims that Bulgarian has both, and that they are not the same. ]=] local m_form_of_data = require("Module:form of/data") local APPENDIX = m_form_of_data.APPENDIX local WP = m_form_of_data.WP local WIKT = m_form_of_data.WIKT local tags = {} local shortcuts = {} ----------------------- Person ----------------------- tags["ngôi thứ nhất"] = { "person", APPENDIX, "1", 21714344, } tags["ngôi thứ hai"] = { "person", APPENDIX, "2", 51929049, } tags["ngôi thứ ba"] = { "person", APPENDIX, "3", 51929074, } tags["vô nhân xưng"] = { "person", APPENDIX, "impers", } shortcuts["12"] = "1//2" shortcuts["13"] = "1//3" shortcuts["23"] = "2//3" shortcuts["123"] = "1//2//3" ----------------------- Number ----------------------- tags["số ít"] = { "number", "số ít", {"s", "sg"}, 110786, } tags["số đôi"] = { "number", "số đôi", {"d", "du"}, 110022, } tags["số nhiều"] = { "number", "số nhiều", {"p", "pl"}, 146786, } tags["một người sở hữu"] = { "number", "singular number", {"spos","single-possession"}, 110786, -- Singular } tags["nhiều người sở hữu"] = { "number", "plural number", {"mpos","multiple-possession"}, 146786, -- Plural } shortcuts["1s"] = {"1", "s"} shortcuts["2s"] = {"2", "s"} shortcuts["3s"] = {"3", "s"} shortcuts["1d"] = {"1", "d"} shortcuts["2d"] = {"2", "d"} shortcuts["3d"] = {"3", "d"} shortcuts["1p"] = {"1", "p"} shortcuts["2p"] = {"2", "p"} shortcuts["3p"] = {"3", "p"} ----------------------- Gender ----------------------- tags["giống đực"] = { "gender", "giống đực", "m", 499327, } -- This is useful e.g. in Swedish. tags["natural masculine"] = { "gender", "gender", "natm", } tags["giống cái"] = { "gender", "giống", "f", 1775415, } tags["giống trung"] = { "gender", "giống", "n", 1775461, } tags["giống chung"] = { "gender", "giống", "c", 1305037, } tags["nonvirile"] = { "gender", APPENDIX, "nv", } shortcuts["mf"] = "m//f" shortcuts["mn"] = "m//n" shortcuts["fn"] = "f//n" shortcuts["mfn"] = "m//f//n" ----------------------- Animacy ----------------------- -- (may be useful sometimes for [[Module:object usage]].) tags["hữu sinh"] = { "animacy", APPENDIX, {"an","animate"}, 51927507, } tags["vô sinh"] = { "animacy", APPENDIX, {"in", "inan", "inanimate"}, 51927539, } tags["personal"] = { "animacy", APPENDIX, {"pr", "pers"}, 63302102, } ----------------------- Tense/aspect ----------------------- tags["hiện tại"] = { "tense-aspect", "thì hiện tại", "pres", 192613, } tags["quá khứ"] = { "tense-aspect", "thì quá khứ", "past", 1994301, } tags["tương lai"] = { "tense-aspect", "thì tương lai", {"fut", "futr"}, 501405, } tags["tương lai hoàn thành"] = { "tense-aspect", APPENDIX, {"futp", "fperf"}, 1234617, } tags["phi quá khứ"] = { "tense-aspect", "thì phi quá khứ", {"npast","non-past"}, 16916993, } tags["progressive"] = { "tense-aspect", APPENDIX, "prog", 56653945, } tags["quá khứ đơn"] = { "tense-aspect", APPENDIX, "pret", 442485, } tags["hoàn thành"] = { "tense-aspect", APPENDIX, "perf", 625420, } tags["pluperfect"] = { "tense-aspect", APPENDIX, {"plup", "pluperf"}, 623742, } tags["quá khứ bất định"] = { "tense-aspect", "w:Thì quá khứ bất định", {"aorist","aor", "aori"}, 216497, } tags["quá khứ đơn"] = { "tense-aspect", nil, "phis", 442485, -- Preterite } tags["chưa hoàn thành"] = { "tense-aspect", "thì chưa hoàn thành", {"imperfective","impfv", "imperfv", "impf", "imperf"}, 371427, } tags["hoàn thành số nhiều"] = { "tense-aspect", APPENDIX, {"perfective","pfv", "perfv"}, 1424306, } shortcuts["spast"] = {"quá khứ", "đơn"} shortcuts["simple past"] = {"quá khứ", "đơn"} shortcuts["spres"] = {"hiện tại", "đơn"} shortcuts["simple present"] = {"hiện tại", "đơn"} ----------------------- Mood ----------------------- tags["mệnh lệnh"] = { "mood", "thức mệnh lệnh", {"imp", "impr", "impv"}, 22716, } tags["trần thuật"] = { "mood", "thức trần thuật", {"ind", "indc", "indic"}, 682111, } tags["giả định"] = { "mood", "thức giả định", {"sub", "subj"}, 473746, } tags["conditional"] = { "mood", "conditional mood", "cond", 625581, } tags["modal"] = { "mood", "w:modality (linguistics)", "mod", 1243600, } tags["optative"] = { "mood", "optative mood", {"opta", "opt"}, 527205, } tags["jussive"] = { "mood", "jussive mood", "juss", 462367, } tags["hortative"] = { "mood", WP, "hort", 5906629, } ----------------------- Voice/valence ----------------------- -- This tag type combines what is normally called "voice" (active, passive, middle, mediopassive) with other tags that -- aren't normally called voice but are similar in that they control the valence/valency (number and structure of the -- arguments of a verb). tags["chủ động"] = { "voice-valence", "thái chủ động", {"act", "actv"}, 1317831, } tags["middle"] = { "voice-valence", "middle voice", {"mid", "midl"}, } tags["bị động"] = { "voice-valence", "thái bị động", {"pass", "pasv"}, 1194697, } tags["mediopassive"] = { "voice-valence", APPENDIX, {"mp", "mpass", "mpasv", "mpsv"}, 1601545, } tags["reflexive"] = { "voice-valence", APPENDIX, "refl", 13475484, -- for "reflexive verb" } tags["transitive"] = { "voice-valence", "transitive verb", {"tr", "vt"}, 1774805, -- for "transitive verb" } tags["intransitive"] = { "voice-valence", "intransitive verb", {"intr", "vi"}, 1166153, -- for "intransitive verb" } tags["ditransitive"] = { "voice-valence", "ditransitive verb", "ditr", 2328313, -- for "ditransitive verb" } tags["causative"] = { "voice-valence", APPENDIX, "caus", 56677011, -- for "causative verb" } ----------------------- Non-finite ----------------------- tags["nguyên mẫu"] = { "non-finite", APPENDIX, "inf", 179230, } -- A form found in Portuguese and Galician, as well as in Hungarian. This is probably unnecessary and can be replaced -- with the regular "infinitive" tag. A personal infinitive is not a separate infinitive from the plain infinitive, just -- an inflection of the infinitive. tags["personal infinitive"] = { "non-finite", "w:Portuguese verb conjugation", "pinf", } tags["phân từ"] = { "non-finite", APPENDIX, {"part", "ptcp"}, 814722, } tags["verbal noun"] = { "non-finite", APPENDIX, "vnoun", 1350145, } tags["danh động từ (gerund)"] = { "non-finite", APPENDIX, "ger", 1923028, } tags["supine"] = { "non-finite", APPENDIX, "sup", 548470, } tags["transgressive"] = { "non-finite", APPENDIX, nil, 904896, } ----------------------- Case ----------------------- tags["ly cách"] = { "case", APPENDIX, "abl", 156986, } tags["đối cách"] = { "case", APPENDIX, "acc", 146078, } tags["dữ cách"] = { "case", APPENDIX, "dat", 145599, } tags["sinh cách"] = { "case", APPENDIX, "gen", 146233, } tags["cách công cụ"] = { "case", APPENDIX, "ins", 192997, } tags["định vị cách"] = { "case", APPENDIX, "loc", 202142, } tags["danh cách"] = { "case", APPENDIX, "nom", 131105, } tags["giới cách"] = { "case", APPENDIX, {"pre", "prep"}, 2114906, } tags["hô cách"] = { "case", APPENDIX, "voc", 185077, } ----------------------- State ----------------------- tags["construct"] = { "state", "construct state", {"cons", "construct state"}, 1641446, display = "construct state", } tags["xác định"] = { "state", APPENDIX, {"def", "defn", "definite state"}, 53997851, } tags["bất định"] = { "state", APPENDIX, {"indef", "indf", "indefinite state"}, 53997857, } tags["possessive"] = { "state", WP, "poss", 2105891, } tags["mạnh"] = { "state", "indefinite", "str", 53997857, -- Indefinite } tags["yếu"] = { "state", "definite", "wk", 53997851, -- Definite } tags["hỗn hợp"] = { "state", APPENDIX, "mix", 63302161, } tags["attributive"] = { "state", APPENDIX, "attr", } tags["predicative"] = { "state", APPENDIX, "pred", } ----------------------- Degrees of comparison ----------------------- tags["positive degree"] = { "comparison", "positive", {"posd", "positive"}, 3482678, -- Doesn't exist in English; only in Czech, Estonian, Finnish and various Nordic languages. } tags["comparative degree"] = { "comparison", "comparative", {"comd", "comparative"}, 14169499, } tags["superlative degree"] = { "comparison", "superlative", {"supd", "superlative"}, 1817208, } ----------------------- Register ----------------------- ----------------------- Deixis ----------------------- ----------------------- Clusivity ----------------------- ----------------------- Inflectional class ----------------------- tags["pronominal"] = { "class", WIKT, "pron", 12721180, -- for "pronominal attribute", existing only in the Romanian Wikipedia } ----------------------- Attitude ----------------------- -- This is a vague tag type grouping augmentative, diminutive and pejorative, which generally indicate the speaker's -- attitude towards the object in question (as well as often indicating size). tags["augmentative"] = { "attitude", APPENDIX, "aug", 1358239, } tags["giảm nhẹ nghĩa"] = { "attitude", APPENDIX, "dim", 108709, } tags["pejorative"] = { "attitude", APPENDIX, "pej", 545779, } ----------------------- Sound changes ----------------------- tags["contracted"] = { "sound change", nil, "contr", 126473, } tags["uncontracted"] = { "sound change", nil, "uncontr", } ----------------------- Misc grammar ----------------------- shortcuts["past-cl"] = {"past", "-", "tense", "clause"} shortcuts["pres-cl"] = {"pres", "-", "tense", "clause"} shortcuts["fut-cl"] = {"fut", "-", "tense", "clause"} shortcuts["ind-cl"] = {"ind", "clause"} shortcuts["sub-cl"] = {"sub", "clause"} shortcuts["past-sub-cl"] = {"past", "sub", "clause"} shortcuts["pres-sub-cl"] = {"pres", "sub", "clause"} shortcuts["fut-sub-cl"] = {"fut", "sub", "clause"} shortcuts["cond-cl"] = {"cond", "clause"} shortcuts["cond-past-cl"] = {"cond", "past", "clause"} tags["đơn"] = { "grammar", nil, "sim", } tags["short"] = { "grammar", } tags["long"] = { "grammar", } tags["form"] = { "grammar", } tags["adjectival"] = { "grammar", WIKT, "adj", } tags["adverbial"] = { "grammar", APPENDIX, "adv", } tags["phủ định"] = { "grammar", "negative", {"neg", "negative"}, 63302088, } tags["nominalized"] = { "grammar", nil, "nomz", 4683152, -- entry for "nominalized adjective" } tags["nominalization"] = { "grammar", nil, "nomzn", 1500667, } tags["root"] = { "grammar", nil, nil, 111029, } tags["stem"] = { "grammar", nil, nil, 210523, } tags["dependent"] = { "grammar", nil, "dep", 1122094, -- entry for "dependent clause" } tags["independent"] = { "grammar", nil, "indep", 1419215, -- entry for "independent clause" } tags["subject"] = { "grammar", APPENDIX, "sbj", -- sub and subj used for subjunctive 164573, } tags["tân ngữ"] = { "grammar", APPENDIX, {"obj","object"}, 175026, } tags["tân ngữ trực tiếp"] = { "grammar", APPENDIX, {"dirobj","direct object"}, 2990574, } tags["tân ngữ gián tiếp"] = { "grammar", APPENDIX, {"indirobj","indirect object"}, 1094061, } tags["tense"] = { "grammar", APPENDIX, nil, 177691, } tags["clause"] = { "grammar", APPENDIX, nil, 117364, } tags["phrase"] = { "grammar", APPENDIX, nil, 187931, } ----------------------- Other tags ----------------------- -- This consists of non-content words like "và" as well as punctuation characters. If the punctuation characters appear -- by themselves as tags, we special-case the handling of surrounding spaces so the output looks correct. tags["và"] = { "other", } -- HACK! "in" is a shortcut for "inanimate" so create "!in" to display "in". We should generalize this like for labels. tags["!in"] = { "other", display = "in", } tags[","] = { "other", no_space_on_left = true, } tags[":"] = { "other", no_space_on_left = true, } tags["/"] = { "other", no_space_on_left = true, no_space_on_right = true, } tags["("] = { "other", no_space_on_right = true, } tags[")"] = { "other", no_space_on_left = true, } tags["["] = { "other", no_space_on_right = true, } tags["]"] = { "other", no_space_on_left = true, } tags["-"] = { -- regular hyphen-minus "other", no_space_on_left = true, no_space_on_right = true, } ----------------------- Create the shortcuts list ----------------------- m_form_of_data.finalize(tags, shortcuts) return {tags = tags, shortcuts = shortcuts} mlrfs5ttf88nbp6d3i7kau2sylv0ixl Mô đun:form of/data/2 828 275092 2350015 2344538 2026-05-04T00:48:43Z Hiyuune 50834 2350015 Scribunto text/plain --[=[ This module lists the less common recognized inflection tags, in the same format as for [[Module:form of/data/1]] (which contains the more common tags). We split the tags this way to save memory, so we avoid loading the less common tags in the majority of cases. ]=] local m_form_of_data = require("Module:form of/data") local APPENDIX = m_form_of_data.APPENDIX local WP = m_form_of_data.WP local WIKT = m_form_of_data.WIKT local tags = {} local shortcuts = {} ----------------------- Person ----------------------- tags["ngôi thứ tư"] = { "person", "ngôi thứ tư", {"4","fourth-person"}, 3348541, } tags["tân ngữ ở ngôi thứ hai"] = { "person", APPENDIX, {"2o","second-person-object form"}, } ----------------------- Number ----------------------- tags["associative plural"] = { "number", WIKT, {"ass p", "ass pl", "assoc p", "assoc pl"}, } tags["collective"] = { "number", "collective number", "col", 694268, } tags["collective-possession"] = { "number", "collective number", {"cpos", "colpos"}, } tags["distributive paucal"] = { "number", WIKT, "dpau", } tags["dạng đếm"] = { "number", "dạng đếm", {"count form"}, 12273953, } tags["nhập cách"] = { "case", "nhập cách", {"illative","ill"}, 474668, } tags["paucal"] = { "number", WIKT, "pau", 489410, } tags["singulative"] = { "number", "singulative number", "sgl", 1450795, } tags["transnumeral"] = { "number", APPENDIX, "trn", 113631596, display = "singular or plural", } tags["trial"] = { "number", "trial number", "tri", 2142560, } ----------------------- Gender ----------------------- tags["natural feminine"] = { "gender", "gender", "natf", } tags["virile"] = { "gender", APPENDIX, "vr", } ----------------------- Animacy ----------------------- ----------------------- Tense/aspect ----------------------- tags["abtemporal"] = { "tense-aspect", WIKT, "abtemp", } tags["anterior"] = { "tense-aspect", "w:relative and absolute tense", "ant", } tags["cessative"] = { "tense-aspect", WP, "cess", 17027342, } -- Aspect in Tagalog; presumably similar to the perfect tense/aspect but not necessarily similar enough to use the same -- Wikidata ID tags["complete"] = { "tense-aspect", "w:Tagalog grammar#Aspect", "compl", } tags["concomitant"] = { "tense-aspect", WIKT, "concom", } tags["confirmative"] = { "tense-aspect", WIKT, "conf", } -- Aspect in Tagalog tags["contemplative"] = { "tense-aspect", "w:Tagalog grammar#Aspect", "contem", } tags["contemporal"] = { "tense-aspect", WIKT, "contemp", } tags["continuative"] = { "tense-aspect", WP, nil, 28130104, } tags["continuous"] = { "tense-aspect", "w:continuous aspect", "cont", 12721117, } tags["delimitative"] = { "tense-aspect", "w:delimitative aspect", "delim", 5316270, } tags["durative"] = { "tense-aspect", WP, "dur", } tags["futuritive"] = { "tense-aspect", WP, {"futv", "futrv"}, } tags["frequentative"] = { "tense-aspect", WP, "freq", 467562, } tags["habitual"] = { "tense-aspect", "w:habitual aspect", "hab", 5636904, } -- same as the habitual; used in Mongolian linguistics tags["habitive"] = { "tense-aspect", WP, "habv", } tags["immediative"] = { "tense-aspect", WIKT, {"imm", "immed"}, } tags["incidental"] = { "tense-aspect", WIKT, "incid", } tags["iterative"] = { "tense-aspect", "w:iterative aspect", "iter", 2866772, } tags["momentane"] = { "tense-aspect", WP, nil, 6897160, } tags["momentaneous"] = { "tense-aspect", WIKT, "mom", 115110791, } tags["posterior"] = { "tense-aspect", "w:relative and absolute tense", "post", } tags["preconditional"] = { "tense-aspect", WIKT, "precond", } -- Type of participle in Hindi; also called agentive or agentive-prospective tags["prospective"] = { "tense-aspect", "w:prospective aspect", "pros", } tags["purposive"] = { "tense-aspect", WIKT, "purp", } -- Aspect in Tagalog; presumably similar to the perfect tense/aspect but not necessarily similar enough to use the same -- Wikidata ID tags["recently complete"] = { "tense-aspect", "w:Tagalog grammar#Aspect", "rcompl", } tags["resultative"] = { "tense-aspect", WP, "res", 7316356, } tags["semelfactive"] = { "tense-aspect", WP, "semf", 7449203, } tags["serial"] = { "tense-aspect", WIKT, "ser", } tags["successive"] = { "tense-aspect", WIKT, "succ", } -- be careful not to clash with terminative case tag tags["terminative aspect"] = { "tense-aspect", "w:cessative aspect", "term", display = "terminative", } ----------------------- Mood ----------------------- tags["benedictive"] = { "mood", WP, "bened", 4887358, } tags["cohortative"] = { "mood", "w:cohortative mood", {"coho", "cohort"}, } tags["concessive"] = { "mood", WIKT, "conc", } tags["contrafactual"] = { "mood", WIKT, "cfact", 110323459, } -- Same as the contrafactual, but terminology depends on language. tags["counterfactual"] = { "mood", WP, "counterf", 1783264, -- for "counterfactual conditional" } tags["desiderative"] = { "mood", WP, {"des", "desid"}, 1200631, } tags["dubitative"] = { "mood", "w:dubitative mood", "dub", 1263049, } tags["energetic"] = { "mood", "w:energetic mood", "ener", } tags["inferential"] = { "mood", "w:inferential mood", {"infer", "infr"}, -- Per [[w:inferential mood]], also called "renarrative mood" or (in Estonian) "oblique mood" (but -- "renarrative mood" may be different, see its entry). 3332616, } -- It's not clear that this is exactly a mood, but I'm not sure where -- else to group it tags["intensive"] = { "mood", WP, "inten", 10965321, -- for "intensive word form" } tags["intentional"] = { "mood", WIKT, "intent", } tags["interrogative"] = { "mood", WP, {"interr", "interrog"}, 12021746, } tags["necessitative"] = { "mood", WIKT, "nec", } tags["permissive"] = { "mood", "w:permissive mood", "perm", 4351483, } tags["potential"] = { "mood", "w:potential mood", "potn", 2296856, } tags["precative"] = { "mood", WIKT, "prec", } tags["prescriptive"] = { "mood", WIKT, "prescr", } tags["presumptive"] = { "mood", "w:presumptive mood", "presump", 25463575, } -- Exists at least in Estonian tags["quotative"] = { "mood", "w:quotative evidential mood", "quot", -- 7272884, -- this is for "quotative" morphemes, not the same } tags["renarrative"] = { "mood", "w:renarrative mood", "renarr", -- Per [[w:inferential mood]], renarrative and inferential mood are the same; but per -- [[w:Bulgarian verbs#Evidentials]], they are different, and Bulgarian has both. 3332616, } tags["volitive"] = { "mood", "w:volitive mood", "voli", 10716592, } tags["voluntative"] = { "mood", WIKT, {"voln", "volun"}, } ----------------------- Voice/valence ----------------------- tags["antipassive"] = { "voice-valence", "w:antipassive voice", {"apass", "apasv", "apsv"}, 287232, } tags["applicative"] = { "voice-valence", "w:applicative voice", "appl", 621634, } tags["cooperative"] = { -- ("all together") used in Mongolian "voice-valence", "wikt:cooperative voice", "coop", 114033228, } tags["pluritative"] = { -- ("many together") used in Mongolian "voice-valence", "wikt:pluritative voice", "plur", 114033289, } tags["reciprocal"] = { "voice-valence", "w:reciprocal (grammar)", {"recp", "recip"}, 1964083, } -- Specific to Modern Irish, similar to impersonal tags["autonomous"] = { "voice-valence", WIKT, "auton", } ----------------------- Non-finite ----------------------- -- be careful not to clash with agentive case tag tags["agentive"] = { "non-finite", "w:agent noun", {"ag", "agent"}, } -- Latin etc. tags["gerundive"] = { "non-finite", WP, "gerv", 731298, -- Wikidata claims this is a grammatical mood, which is not really correct } -- Old Irish etc. tags["verbal of necessity"] = { "non-finite", "w:gerundive", "verbnec", 731298, -- gerundive } tags["l-participle"] = { "non-finite", "participle", {"l-ptcp", "lptcp"}, 814722, -- "participle" } -- Finnish agent participle tags["agent participle"] = { "non-finite", "w:Finnish grammar#Agent participle", "agentpart", } -- Hungarian participle tags["verbal participle"] = { "non-finite", WIKT, nil, 2361676, -- attributive verb, aka verbal participle } tags["converb"] = { "non-finite", WP, "conv", 149761, } tags["connegative"] = { "non-finite", APPENDIX, {"conn", "conneg"}, 5161718, } -- Occurs in Hindi as a type of participle used to conjoin two clauses; similarly occurs in Japanese as the "te-form" tags["conjunctive"] = { "non-finite", "w:serial verb construction", -- FIXME! No good link for "conjunctive"; another possibility is "converb" "conj", } tags["absolutive verb form"] = { "non-finite", "wikt:absolutive#Noun", "absvf", display = "absolutive", } -- FIXME! Should this be a mood? tags["debitive"] = { "non-finite", WP, "deb", 17119041, } ----------------------- Case ----------------------- tags["vô cách"] = { "case", "abessive", {"abe","abessive"}, 319822, } tags["tuyệt cách"] = { "case", "tuyệt cách", {"absv","absolutive"}, -- FIXME, find uses of "abs" = absolutive 332734, } tags["adessive"] = { "case", "w:adessive case", "ade", 281954, } -- be careful not to clash with adverbial grammar tag tags["adverbial case"] = { "case", WP, "advc", display = "adverbial", } -- be careful not to clash with agentive non-finite tag tags["agentive case"] = { "case", WP, "agc", display = "agentive", } tags["đích cách"] = { "case", "đích cách", {"allative","all"}, 655020, } --No evidence of the existence of this case on the web, and the shortcuts are better used elsewhere. --tags["anterior"] = { -- "case", -- nil, -- {"ant"}, --} tags["associative"] = { "case", "w:associative case", {"ass", "assoc"}, 15948746, } tags["benefactive"] = { "case", "w:benefactive case", {"ben", "bene"}, 664905, } tags["causal"] = { "case", "w:causal case", {"cauc", "causc"}, 2943136, } tags["causal-final"] = { "case", "w:causal-final case", {"cfi", "cfin"}, 18012653, } tags["cách kèm"] = { "case", "comitative", {"com","comitative"}, 838581, } -- be careful not to clash with comparative degree tags["comparative case"] = { "case", WP, "comc", 5155633, display = "comparative", } tags["delative"] = { "case", "w:delative case", "del", 1183901, } tags["direct"] = { "case", "w:direct case", "dir", 1751855, } tags["directive"] = { "case", "wikt:directive case", "dirc", 56526905, } tags["distributive"] = { "case", "w:distributive case", {"dis", "dist", "distr"}, 492457, } tags["xuất cách"] = { "case", "elative case", {"ela","elative case","elative"}, 394253, } tags["khiển cách"] = { "case", "khiển cách", {"erg","ergative"}, 324305, } -- be careful not to clash with equative degree tag tags["equative"] = { "case", "w:equative case", "equc", 3177653, } tags["essive-formal"] = { "case", "w:essive-formal case", {"esf", "efor"}, 3827688, } tags["essive-modal"] = { "case", "w:essive-modal case", {"esm", "emod"}, 3827703, } tags["cách cương vị"] = { "case", "essive", {"ess","essive"}, 148465, } --No evidence of the existence of this case on the web, and the shortcuts are better used elsewhere. --tags["exclusive"] = { -- "case", -- nil, -- {"exc", "excl"}, --} tags["nhập cách"] = { "case", "nhập cách", {"illative","ill"}, 474668, } tags["indirect"] = { "case", "w:direct case", "indir", 1233197, -- Same as oblique. } tags["inessive"] = { "case", "w:inessive case", "ine", 282031, } tags["instructive"] = { "case", "w:instructive case", "ist", 1665275, } tags["lative"] = { "case", "w:lative case", "lat", 260425, } tags["limitative"] = { "case", "w:list of grammatical cases", "lim", 35870079, } tags["locative-qualitative"] = { "case", "locative-qualitative case", {"lqu", "lqua"}, } tags["objective"] = { "case", "objective case", "objv", -- obj used for "object" 1233197, -- Same as oblique. } tags["oblique"] = { "case", "oblique case", "obl", 1233197, } tags["chiết phân cách"] = { "case", "chiết phân cách", {"partitive","ptv", "par"}, 857325, } --certain languages use this term for the abessive tags["privative"] = { "case", "w:privative case", "priv", 319822, } tags["cách hoàn chỉnh"] = { "case", "prolative", {"prolative","pro", "prol"}, 952933, } tags["cách liên đới"] = { "case", "sociative", {"soc","sociative","sociative case"}, 3773161, } tags["subjective"] = { "case", "w:subjective case", {"subjv", "sbjv"}, -- "sub" and "subj" used for subjunctive, "sbj" for "subject" 131105, -- Same as nominative. } tags["sublative"] = { "case", "w:sublative case", {"sbl", "subl"}, 2120615, } tags["superessive"] = { "case", "w:superessive case", {"spe", "supe"}, 222355, } tags["temporal"] = { "case", "w:temporal case", {"tem", "temp"}, 3235219, } -- be careful not to clash with terminative aspect tag tags["kết cách"] = { "case", "w:en:terminative case", {"ter","terminative case","terminative"}, 747019, display = "kết cách", } tags["di chuyển cách"] = { "case", "translative case", {"tra", "tran","translative","translative case"}, 950170, } ----------------------- State ----------------------- tags["independent genitive"] = { "state", WIKT, "indgen", } tags["possessor"] = { "state", WIKT, {"posr", "possr"}, } tags["reflexive possessive"] = { "state", WIKT, {"reflposs", "refl poss"}, } tags["substantive"] = { "state", APPENDIX, {"subs", "subst"}, } ----------------------- Degrees of comparison ----------------------- tags["absolute superlative degree"] = { "comparison", "wikt:absolute superlative", {"asupd", "absolute superlative"}, } tags["relative superlative degree"] = { "comparison", "wikt:relative superlative", {"rsupd", "relative superlative"}, } tags["elative degree"] = { "comparison", "elative", "elad", -- Can't use "elative" as shortcut because that's already used for the elative case 1555419, } -- be careful not to clash with equative case tag tags["equative degree"] = { "comparison", "w:equative", "equd", 5384239, } tags["excessive degree"] = { "comparison", nil, "excd", } ----------------------- Register ----------------------- tags["familiar"] = { "register", "w:T–V distinction", "fam", } tags["polite"] = { "register", "w:T–V distinction", "pol", } tags["intimate"] = { "register", -- "intimate" is also a possible formality level in the sociolinguistic register sense. "w:T–V distinction", "intim", } tags["trang trọng"] = { "register", "trang trọng", "formal", } tags["không trang trọng"] = { "register", "không trang trọng", {"informal","inform"}, } tags["colloquial"] = { "register", "w:colloquialism", "colloq", } tags["slang"] = { "register", WP, } tags["contemporary"] = { "register", WIKT, "conty", } tags["literary"] = { "register", "w:literary language", "lit", } tags["dated"] = { "register", WIKT, } tags["archaic"] = { "register", "w:archaism", "arch", } tags["obsolete"] = { "register", WIKT, "obs", } tags["emphatic"] = { "register", WIKT, "emph", } ----------------------- Deixis ----------------------- tags["gần người nói"] = { "deixis", "proximal", {"prox", "prxl","proximal"}, } tags["medial"] = { "deixis", "w:deixis", "medl", } tags["distal"] = { "deixis", "w:deixis", "dstl", } ----------------------- Clusivity ----------------------- tags["inclusive"] = { "clusivity", "w:clusivity", "incl", } tags["exclusive"] = { "clusivity", "w:clusivity", "excl", } tags["obviative"] = { "clusivity", "w:clusivity", "obv", } ----------------------- Inflectional class ----------------------- tags["absolute"] = { "grammar", WIKT, "abs", } tags["conjunct"] = { "grammar", WP, "conjt", } tags["deuterotonic"] = { "grammar", "w:dependent and independent verb forms", "deut", } tags["prototonic"] = { "grammar", "w:dependent and independent verb forms", "prot", } ----------------------- Attitude ----------------------- tags["endearing"] = { "attitude", -- FIXME! No good glossary entry for this; the entry for "hypocoristic" refers specifically to proper names. "w:hypocoristic", "end", 1130279, -- entry for "hypocorism" } tags["moderative"] = { "attitude", WIKT, "moder", } ----------------------- Sound changes ----------------------- tags["alliterative"] = { "sound change", "w:alliteration", nil, 484495, } tags["back"] = { "sound change", "w:back vowel", nil, 853589, } tags["front"] = { "sound change", "w:front vowel", nil, 5505949, } tags["rounded"] = { "sound change", "w:roundedness", "round", } tags["sigmatic"] = { "sound change", WIKT, "sigm", } tags["unrounded"] = { "sound change", "w:roundedness", "unround", } tags["vowel harmonic"] = { "sound change", "w:vowel harmony", "vharm", 147137, } ----------------------- Misc grammar ----------------------- tags["relative"] = { "grammar", WIKT, "rel", } tags["direct relative"] = { "grammar", "w:relative_clause#Celtic_languages", "dirrel", } tags["indirect relative"] = { "grammar", "w:relative_clause#Celtic_languages", "indrel", } tags["synthetic"] = { "grammar", WIKT, "synth", } tags["analytic"] = { "grammar", WIKT, {"anal", "analytical"}, } tags["periphrastic"] = { "grammar", WIKT, "peri", } tags["affirmative"] = { "grammar", "w:affirmation and negation", "aff", } tags["possessed"] = { "grammar", "w:possessive affix", {"possd", "possed"}, -- posd = positive degree 804020, -- for possessive affix } tags["non-possessed"] = { "grammar", "w:possessive affix", {"npossd", "npossed", "nonpossessed"}, } tags["possessive affix"] = { "grammar", WP, {"posaf", "possaf"}, 804020, } tags["possessive suffix"] = { "grammar", "w:possessive affix", "possuf", 804020, } tags["possessive prefix"] = { "grammar", "w:possessive affix", {"pospref", "posspref"}, 804020, } tags["prefix"] = { "grammar", APPENDIX, "pref", -- pre = prepositional 134830, } tags["prefixal"] = { "grammar", WIKT, "prefl", -- pre = prepositional 134830, } tags["suffix"] = { "grammar", APPENDIX, {"suf", "suff"}, 102047, } tags["suffixal"] = { "grammar", WIKT, {"sufl", "suffl"}, 102047, } tags["affix"] = { "grammar", WP, "af", -- aff = affirmative 62155, } tags["affixal"] = { "grammar", WIKT, "afl", -- aff = affirmative 62155, } tags["circumfix"] = { "grammar", WP, {"circ", "cirf", "circf"}, 124939, } tags["circumfixal"] = { "grammar", WIKT, {"circl", "cirfl", "circfl"}, 124939, } tags["infix"] = { "grammar", WP, "infx", 201322, } tags["infixal"] = { "grammar", WIKT, "infxl", 201322, } tags["nonfinite"] = { "grammar", APPENDIX, "nonfin", 1050494, -- entry for "non-finite verb" } tags["tenseless"] = { "grammar", WIKT, } tags["aspect"] = { "grammar", APPENDIX, "asp", 208084, } tags["augmented"] = { "grammar", "augment", nil, 760437, } tags["unaugmented"] = { "grammar", "augment", nil, 760437, } ----------------------- Other tags ----------------------- tags["–"] = { -- Unicode en-dash "other", no_space_on_left = true, no_space_on_right = true, } tags["—"] = { -- Unicode em-dash "other", no_space_on_left = true, no_space_on_right = true, } ----------------------- Create the shortcuts list ----------------------- m_form_of_data.finalize(tags, shortcuts) return {tags = tags, shortcuts = shortcuts} 1zd02z9bbtcmueokdichi0j24ret03i mơja 0 277734 2349887 2092122 2026-05-03T12:25:33Z WhoAlone 40420 2349887 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[chồn]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} =={{langname|jra}}== ==={{ĐM|noun}}=== {{head|jra|Danh từ}} # [[cáo]]. 10dyluqvt7bnw15muue14fpd5ascxi8 trí giả 0 282190 2349998 2349840 2026-05-03T15:19:15Z TheHighFighter2 42988 /* Danh từ */ 2349998 wikitext text/x-wiki =={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|noun}}=== {{vi-noun}} # Người có [[trình độ]] [[học vấn]] [[uyên thâm]], [[hiểu biết]] [[sâu rộng]]. #: {{ux|vi|Những bậc '''trí giả'''.}} 1jc9qm7v276vhd3zwi97xcpg1ilyvaw 2350000 2349998 2026-05-03T15:29:26Z TheHighFighter2 42988 /* Tiếng Việt */ 2350000 wikitext text/x-wiki =={{langname|vi}}== ==={{ĐM|etym}}=== {{vi-etym-sino|智|[[khôn]]; [[thông minh]]|者|[[người]]}}. ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|noun}}=== {{vi-noun}} # Người có [[trình độ]] [[học vấn]] [[uyên thâm]], [[hiểu biết]] [[sâu rộng]]. #: {{ux|vi|Những bậc '''trí giả'''.}} bp33b7vgi9ehmoefokncfr9y5t0ojzx Mô đun:place/placetypes 828 282248 2349904 2333389 2026-05-03T12:59:36Z Hiyuune 50834 2349904 Scribunto text/plain local export = {} export.force_cat = false -- set to true for testing local m_locations = require("Module:place/locations") local m_links = require("Module:links") local m_table = require("Module:table") local m_strutils = require("Module:string utilities") local debug_track_module = "Module:debug/track" local en_utilities_module = "Module:en-utilities" local dump = mw.dumpObject local insert = table.insert local concat = table.concat local internal_error = m_locations.internal_error export.internal_error = internal_error local process_error = m_locations.process_error export.process_error = process_error local unpack = unpack or table.unpack -- Lua 5.2 compatibility local ucfirst = m_strutils.ucfirst local ulower = m_strutils.lower local rmatch = m_strutils.match local split = m_strutils.split --[==[ intro: This module contains placetype data used by [[Module:place]] and {{tl|place}}, along with a significant amount of code to work with both placetypes and locations, as well as some placename-related info (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 else placetype = 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 = "tên" 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 `"của"` 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 "của" 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 link end end --[==[ Get the display form of a placetype by looking it up in `placetype_data`. If the placetype is recognized, or is the plural of a recognized placetype, the corresponding linked display form is returned (with plural placetypes displaying as plural but linked to the singular form of the placetype). Otherwise, return nil. If we're generating the description of a category, `category_type` should be set to one of `"top-level"` (for top-level categories like [[:Category:Neighborhoods]]), `"noncity"` (for non-city categories like [[:Category:Neighborhoods in Illinois, USA]]) or `"city"` (for city categories like [[:Category:Neighborhoods of Chicago]]). Otherwise, we're generating the description for use in formatting a {{tl|place}} call, and category-only placetypes ending in `!` will be ignored, along with special `category_link*` settings. `return_full` is used along with `category_type` and will preferably return the "full" variant of category link settings, i.e. `full_category_link*`; if they don't exist, the `category_link*` value is prepended with `"names of"`. `noerror` says to not throw an error when encountering entry placetypes that would be disallowed. ]==] function export.get_placetype_display_form(placetype, category_type, return_full, noerror) local from_category = not not category_type local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category) if canon_placetype then local raw_link local function is_linked_string(str) return type(str) == "string" and str:find("%[%[") end if category_type then local fetched_full local function fetch_maybe_full(prop) local retval = ptdata["full_" .. prop] if retval ~= nil then if return_full then return retval, true else internal_error("Saw full_" .. prop .. "=%s but `return_full` not set, can't handle", retval) end end return ptdata[prop], false end local function maybe_prefix(str) if return_full and not fetched_full then return "names of " .. str else return str end end -- Careful with `false` as possible value. if category_type == "top-level" then raw_link, fetched_full = fetch_maybe_full("category_link_top_level") elseif category_type == "noncity" then raw_link, fetched_full = fetch_maybe_full("category_link_before_noncity") elseif category_type == "city" then raw_link, fetched_full = fetch_maybe_full("category_link_before_city") else internal_error('Unrecognized value for `category_type` %s, should be "top-level", "noncity" or "city"', category_type) end if type(raw_link) == "string" then return maybe_prefix(raw_link), ptdata elseif raw_link ~= nil then return raw_link, ptdata end raw_link, fetched_full = fetch_maybe_full("category_link") if raw_link == false then return raw_link, ptdata end if is_linked_string(raw_link) then return maybe_prefix(raw_link), ptdata end if ptmatch == "plural" then raw_link, fetched_full = fetch_maybe_full("plural_link") if raw_link == false then return raw_link, ptdata end if is_linked_string(raw_link) then return maybe_prefix(raw_link), ptdata end end if raw_link == nil then raw_link, fetched_full = fetch_maybe_full("link") end if raw_link == false then return raw_link, ptdata end return maybe_prefix(make_placetype_link(raw_link, canon_placetype, placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror)), ptdata else if ptmatch == "plural" then raw_link = ptdata.plural_link if raw_link == false then process_error("Placetype %s cannot appear plural", placetype) end if is_linked_string(raw_link) then return raw_link, ptdata end end if raw_link == nil then raw_link = ptdata.link end return make_placetype_link(raw_link, canon_placetype, placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror), ptdata end end return nil end local function resolve_unlinked_placename_display_aliases(placetype, placename) local equiv_placetypes = export.get_placetype_equivs(placetype) for i, equiv in ipairs(equiv_placetypes) do equiv_placetypes[i] = equiv.placetype end local all_display_aliases_found = {} local all_others_found = {} for group, key, spec in m_locations.iterate_matching_location { placetypes = equiv_placetypes, placename = placename, alias_resolution = "display", } do if spec.alias_of and spec.display then insert(all_display_aliases_found, {group, key, spec, spec.display_as_full}) else insert(all_others_found, {group, key, spec}) end end if not all_display_aliases_found[1] then return placename elseif all_display_aliases_found[2] then internal_error("Found multiple matching display aliases for placename %s, placetype %s: " .. "all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found, all_others_found) elseif all_others_found[1] then internal_error("Found a display alias along with other possible meanings for placename %s, placetype %s: " .. "all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found, all_others_found) else local group, key, spec, as_full = unpack(all_display_aliases_found[1]) local full, elliptical = m_locations.key_to_placename(group, key) return as_full and full or elliptical end end --[==[ If `placename` of type `placetype` is a display alias, convert it to its canonical form; otherwise, return unchanged. Display aliases transform certain placenames into canonical displayed forms. For example, if any of `country/US`, `country/USA` or `country/United States of America` (or `c/US`, etc.) are given, the result will be displayed as `United States`. '''NOTE''': Display aliases change what is displayed from what the editor wrote in the Wikitext. As a result, they should (a) be non-political in nature, and (b) not involve a change where the word `the` needs to be added or removed. For example, normalizing `US` and `USA` to `United States` for display purposes is OK but normalizing `Burma` to `Myanmar` is not (instead a cat alias should be used) because the terms `Burma` and `Myanmar` have clear political connotations. Similarly, we have a display alias that maps the old name of `Macedonia` as a country (but not a region!) to `North Macedonia`, but `Republic of Macedonia` is mapped to `North Macedonia` only as a cat alias because the two terms differ in their use of `the`. (For example, if we had a display alias mapping `Republic of Macedonia` to `North Macedonia`, the call {{tl|place|en|the <<capital city>> of the <<c/Republic of Macedonia>>}} would wrongly display as `the [[capital city]] of the [[North Macedonia]]`.) Generally, display normalizations tend to involve alternative forms (e.g. abbreviations, ellipses, foreign spellings) where the normalization improves clarity and consistency. ]==] function export.resolve_placename_display_aliases(placetype, placename) -- If the placename is a link, apply the alias inside the link. -- This pattern matches both piped and unpiped links. If the link is not piped, the second capture (linktext) will -- be empty. local link, linktext = rmatch(placename, "^%[%[([^|%[%]]+)|?([^|%[%]]-)%]%]$") if link then if linktext ~= "" then local alias = resolve_unlinked_placename_display_aliases(placetype, linktext) return "[[" .. link .. "|" .. alias .. "]]" else local alias = resolve_unlinked_placename_display_aliases(placetype, link) return "[[" .. alias .. "]]" end else return resolve_unlinked_placename_display_aliases(placetype, placename) end end --[==[ Generate the "prefixed" version of a bare key, i.e. prefix it with `the` if correct for this key. ]==] function export.get_prefixed_key(key, spec) if spec.the then return "the " .. key else return key end end -- Necessary for use by [[Module:place]]. FIXME: Reorganize the modules so this isn't necessary. export.iterate_matching_location = m_locations.iterate_matching_location --[=[ Iterator that iterates over holonyms in `place_desc`. If `first_holonym_index` is given, start iterating at the specified holonym and stop either when there are no more holonyms or a holonym with modifier `:also` is found. If `first_holonym_index` is nil or omitted, iterate over all holonyms regardless. If `include_raw_text_holonyms` is specified, raw text holonyms (those not of the form `placetype/placename`) are returned as well; they can be identified by the fact that the `placetype` field in the holonym structure is nil. Two values are returned at each iteration, the holonym index and holonym structure, similar to `ipairs()`. ]=] function export.get_holonyms_to_check(place_desc, first_holonym_index, include_raw_text_holonyms) local stop_at_also = not not first_holonym_index return function(place_desc, index) while true do index = index + 1 local this_holonym = place_desc.holonyms[index] -- If we were passed in a starting holonym index, go up to but not including a holonym marked with `:also` -- (continue_cat_loop); the categorization code will then restart the loop at that holonym. That holonym -- will have `:also` marked on it, so make sure not to stop immediately if the first holonym is marked with -- `:also`. if not this_holonym or stop_at_also and index > first_holonym_index and this_holonym.continue_cat_loop then return nil end -- If not placetype, we're processing raw text, which we normally want to skip. if include_raw_text_holonyms or this_holonym.placetype then return index, this_holonym end end end, place_desc, first_holonym_index and first_holonym_index - 1 or 0 end --[==[ If the holonym in `data` (in the format as passed to a category handler) refers to a known location, iterate over all such known locations, returning for each location the corresponding key, spec and group as well as the trail of ancestral containers. Unlike `iterate_matching_location()`, this specifically checks that there is no mismatch between the location's containers at any level and any of the following holonyms in the {{tl|place}} spec. The fields in `data` are: * `holonym_placetype`: The placetype of the holonym. It can actually be a list of possible placetypes, as with `iterate_matching_location()`. * `holonym_placename`: The placename of the holonym. * `holonym_index`: The index of the holonym among the holonyms in `place_desc`, or nil if the holonym is not among the holonyms in `place_desc`. (If a holonym index is given, we check for container mismatches among the holonyms following the specified index, stopping either when encountering a holonym marked with modifier `:also` or, if none exist, when we run out of holonyms. If no holonym index is given, we check all holonyms for container mismatches.) * `place_desc`: Description of the place; used for the holonyms, to check for container mismatches. Returns four values: the location group, the canonical key by which the location is known, the spec object describing the location and the trail of ancestral containers for the location. The first three values are the same as for `iterate_matching_location`. ]==] function export.iterate_matching_holonym_location(data) local holonym_placetype, holonym_placename, holonym_index, place_desc = data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc local matching_location_iterator = m_locations.iterate_matching_location { placetypes = holonym_placetype, placename = holonym_placename, } return function() while true do local group, key, spec = matching_location_iterator() if not group then return nil end local container_trail = {} -- For each level of container, check that there are no mismatches (i.e. other location of the same -- placetype) mentioned. We allow a mismatch at a given level if there's also a match with the container -- at that level. For example, in the case of Kansas City, defined in [[Module:place/locations]] as a city -- in Missouri, if we define it as {{tl|place|city|s/Missouri,Kansas}}, we ignore the mismatching state of -- Kansas because the correct state of Missouri was also mentioned. But imagine we are defining Newark, -- Delaware as {{tl|place|city|s/Delaware|c/US}} and (as is the case) we have an entry for Newark, New -- Jersey in [[Module:place/locations]]. Just because the containing location `US` matches isn't enough, -- because Newark, NJ also has New Jersey as a containing location and there's a mismatch at that level. If -- there are no mismatches at any level we assume we're dealing with the right known location. -- -- If at a given level there are multiple containing locations, we count a match if any holonym matches any -- containing location, and a mismatch only if a holonym exists of the same placetype that doesn't match any -- containing location. local containers_mismatch = false for containers in m_locations.iterate_containers(group, key, spec) do insert(container_trail, containers) local match_at_level = false local mismatch_at_level = false for other_holonym_index, other_holonym in export.get_holonyms_to_check(place_desc, holonym_index and holonym_index + 1 or nil) do local other_source_holonym = other_holonym.augmented_from_holonym if other_source_holonym and other_source_holonym.placetype == holonym_placetype and other_source_holonym.unlinked_placename ~= holonym_placename then -- Ignore holonyms added during the augmentation process for other holonyms of the same -- placetype as the placetype of the holonym we're considering. See comment in -- augment_holonyms_with_container() for why we do this. -- continue; grrr, no 'continue' in Lua else local holonym_matches_at_level = false local holonym_exists_with_same_placetype = false for _, container in ipairs(containers) do if not container.spec.no_check_holonym_mismatch then local full_container_placename, elliptical_container_placename = m_locations.key_to_placename(container.group, container.key) local placetypes = container.spec.placetype if type(placetypes) ~= "table" then placetypes = {placetypes} end local placetype_equivs = {} for _, pt in ipairs(placetypes) do m_table.extend(placetype_equivs, export.get_placetype_equivs(pt)) end local this_holonym_matches = export.get_equiv_placetype_prop_from_equivs( placetype_equivs, function(placetype) return other_holonym.placetype == placetype and (other_holonym.unlinked_placename == full_container_placename or other_holonym.unlinked_placename == elliptical_container_placename) end ) if this_holonym_matches then holonym_matches_at_level = true break end local this_holonym_exists_with_same_placetype = export.get_equiv_placetype_prop_from_equivs( placetype_equivs, function(placetype) return other_holonym.placetype == placetype end ) if this_holonym_exists_with_same_placetype then -- We seem to have a mismatch at this level. But before we decide conclusively that this -- is the case, check to see whether the putative mismatch is an alias and matches when -- we resolve the alias. for oh_group, oh_key, oh_spec, oh_container_trail in export.iterate_matching_holonym_location { holonym_placetype = other_holonym.placetype, holonym_placename = other_holonym.unlinked_placename, holonym_index = other_holonym_index, place_desc = place_desc, } do local oh_full_placename, oh_elliptical_placename = m_locations.key_to_placename(oh_group, oh_key) if oh_full_placename == full_container_placename or oh_elliptical_placename == elliptical_container_placename then -- Alias matched when resolved. this_holonym_matches = true break end end if this_holonym_matches then -- Alias matched above when resolved. holonym_matches_at_level = true break else -- Not an alias, or doesn't match when resolved. We have a true mismatch. holonym_exists_with_same_placetype = true end end end end if holonym_matches_at_level then match_at_level = true break end if holonym_exists_with_same_placetype then mismatch_at_level = true end end end if not match_at_level and mismatch_at_level then containers_mismatch = true break end end if not containers_mismatch then return group, key, spec, container_trail end end end end --[==[ If the holonym in `data` (in the format as passed to a category handler) refers to a known location, find and return the corresponding key, spec and group as well as the trail of ancestral containers. This is like `iterate_matching_holonym_location()` but throws an error if more than one location matches. (An example where this would happen is {{tl|place|en|neighborhood|city/Newcastle}}, because there are two known locations named Newcastle. To fix this, specify additional following disambiguating holonyms, e.g. {{tl|place|en|neighborhood|city/Newcastle|s/New South Wales}}. ]==] function export.find_matching_holonym_location(data) local all_found = {} for group, key, spec, container_trail in export.iterate_matching_holonym_location(data) do insert(all_found, {group, key, spec, container_trail}) end if not all_found[1] then return nil elseif all_found[2] then local holonym_placetype = data.holonym_placetype if type(holonym_placetype) == "table" then holonym_placetype = concat(holonym_placetype, ",") end local found_keys = {} for _, found in ipairs(all_found) do local _, key, _, _ = unpack(found) insert(found_keys, key) end error(("Found multiple matching locations for holonym '%s/%s'; specify disambiguating context in the " .. "containing holonyms: %s"):format(holonym_placetype, data.holonym_placename, dump(found_keys))) else return unpack(all_found[1]) end end ------------------------------------------------------------------------------------------ -- Placename and placetype data -- ------------------------------------------------------------------------------------------ --[==[ var: This is a map from aliases to their canonical forms. Any placetypes appearing as keys here will be mapped to their canonical forms in all respects, including the display form. Contrast entries in 'placetype_data' with a fallback, which applies to categorization and other processes but not to display. The most important aliases are for holonym placetypes, particularly those that occur often such as "country", "state", "province" and the like. Particularly long placetypes that mostly occur as entry placetypes (e.g. "census-designated place") can be given abbreviations, but it is generally preferred to spell out the entry placetype. Note also that we purposely avoid certain abbreviations that would be ambiguous (e.g. "d", which could variously be interpreted as "department", "district" or "division"). ]==] export.placetype_aliases = { ["acomm"] = "autonomous community", ["adr"] = "administrative region", ["adterr"] = "administrative territory", -- Pakistan ["aobl"] = "autonomous oblast", ["aokr"] = "autonomous okrug", ["ap"] = "autonomous province", ["apref"] = "autonomous prefecture", ["aprov"] = "autonomous province", ["ar"] = "autonomous region", ["arch"] = "archipelago", ["arep"] = "autonomous republic", ["aterr"] = "autonomous territory", ["atu"] = "autonomous territorial unit", ["bor"] = "borough", ["c"] = "country", ["can"] = "canton", ["carea"] = "council area", ["cc"] = "constituent country", ["cdblock"] = "community development block", ["cdep"] = "Crown dependency", ["CDP"] = "census-designated place", ["cdp"] = "census-designated place", ["clcity"] = "county-level city", ["co"] = "county", ["cobor"] = "county borough", ["colcity"] = "county-level city", ["coll"] = "collectivity", ["comm"] = "community", ["cont"] = "continent", ["contr"] = "continental region", ["contregion"] = "continental region", ["cpar"] = "civil parish", ["damun"] = "direct-administered municipality", ["dep"] = "dependency", ["department capital"] = "departmental capital", ["dept"] = "department", ["depterr"] = "dependent territory", ["dist"] = "district", ["distmun"] = "district municipality", ["div"] = "division", ["emp"] = "empire", ["fpref"] = "French prefecture", ["gov"] = "governorate", ["govnat"] = "governorate", ["home-rule city"] = "home rule city", ["home-rule municipality"] = "home rule municipality", ["inner-city area"] = "inner city area", ["ires"] = "Indian reservation", ["isl"] = "island", ["lbor"] = "London borough", ["lga"] = "local government area", ["lgarea"] = "local government area", ["lgd"] = "local government district", ["lgdist"] = "local government district", ["metbor"] = "metropolitan borough", ["metcity"] = "metropolitan city", ["metmun"] = "metropolitan municipality", ["mtn"] = "mountain", ["mun"] = "municipality", ["mundist"] = "municipal district", ["nonmetropolitan county"] = "non-metropolitan county", ["obl"] = "oblast", ["okr"] = "okrug", ["p"] = "province", ["par"] = "parish", ["parmun"] = "parish municipality", ["pen"] = "peninsula", ["plcity"] = "prefecture-level city", ["plcolony"] = "Polish colony", ["pref"] = "prefecture", ["prefcity"] = "prefecture-level city", ["preflcity"] = "prefecture-level city", ["prov"] = "province", ["r"] = "region", ["range"] = "mountain range", ["rcm"] = "regional county municipality", ["rcomun"] = "regional county municipality", ["rdist"] = "regional district", ["rep"] = "republic", ["rhrom"] = "rural hromada", ["riv"] = "river", ["rmun"] = "regional municipality", ["robor"] = "royal borough", ["romp"] = "Roman province", ["runit"] = "regional unit", ["rurmun"] = "rural municipality", ["s"] = "state", ["sar"] = "special administrative region", ["shrom"] = "settlement hromada", ["spref"] = "subprefecture", ["sprefcity"] = "sub-prefectural city", ["sprovcity"] = "subprovincial city", ["submet city"] = "sub-metropolitan city", ["submetropolitan city"] = "sub-metropolitan city", ["sub-prefecture-level city"] = "sub-prefectural city", ["sub-provincial city"] = "subprovincial city", ["sub-provincial district"] = "subprovincial district", ["terr"] = "territory", ["terrauth"] = "territorial authority", ["twp"] = "township", ["twpmun"] = "township municipality", ["uauth"] = "unitary authority", ["ucomm"] = "unincorporated community", ["udist"] = "unitary district", ["uhrom"] = "urban hromada", ["uterr"] = "union territory", ["utwpmun"] = "united township municipality", ["val"] = "valley", ["vdc"] = "village development committee", ["vil"] = "village", ["voi"] = "voivodeship", ["wcomm"] = "Welsh community", } local no_link_def_article = {link = false, article = ""} 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"] = {"^Vịnh của "}, ["lake"] = {"^Hồ của "}, ["country"] = {"^Republic of ", " Republic$"}, ["republic"] = {"^Republic of ", " Republic$"}, ["region"] = {"^Vùng của "}, ["river"] = {"^Sông của "}, ["local government area"] = {"^Shire of "}, ["county"] = {"^Shire of "}, ["Indian reservation"] = {" Reservation", " Nation"}, ["tribal jurisdictional area"] = {" Reservation", " Nation"}, } --[==[ var: If any of the following holonyms are present, the associated holonyms are automatically added to the end of the list of holonyms for categorization (but not display) purposes. ]==] export.cat_implications = { ["region"] = { ["Eastern Europe"] = {"continent/Europe"}, ["Central Europe"] = {"continent/Europe"}, ["Western Europe"] = {"continent/Europe"}, ["South Europe"] = {"continent/Europe"}, ["Southern Europe"] = {"continent/Europe"}, ["Northern Europe"] = {"continent/Europe"}, ["Northeast Europe"] = {"continent/Europe"}, ["Northeastern Europe"] = {"continent/Europe"}, ["Southeast Europe"] = {"continent/Europe"}, ["Southeastern Europe"] = {"continent/Europe"}, ["North Caucasus"] = {"continent/Europe"}, ["South Caucasus"] = {"continent/Asia"}, ["South Asia"] = {"continent/Asia"}, ["Southern Asia"] = {"continent/Asia"}, ["East Asia"] = {"continent/Asia"}, ["Eastern Asia"] = {"continent/Asia"}, ["Central Asia"] = {"continent/Asia"}, ["West Asia"] = {"continent/Asia"}, ["Western Asia"] = {"continent/Asia"}, ["Southeast Asia"] = {"continent/Asia"}, ["North Asia"] = {"continent/Asia"}, ["Northern Asia"] = {"continent/Asia"}, ["Anatolia"] = {"continent/Asia"}, ["Asia Minor"] = {"continent/Asia"}, ["Mesopotamia"] = {"continent/Asia"}, ["North Africa"] = {"continent/Africa"}, ["Central Africa"] = {"continent/Africa"}, ["West Africa"] = {"continent/Africa"}, ["East Africa"] = {"continent/Africa"}, ["Southern Africa"] = {"continent/Africa"}, ["Central America"] = {"continent/Central America"}, ["Caribbean"] = {"continent/North America"}, ["Polynesia"] = {"continent/Oceania"}, ["Micronesia"] = {"continent/Oceania"}, ["Melanesia"] = {"continent/Oceania"}, ["Siberia"] = {"country/Russia", "continent/Asia"}, ["Russian Far East"] = {"country/Russia", "continent/Asia"}, ["South Wales"] = {"constituent country/Wales", "continent/Europe"}, ["Balkans"] = {"continent/Europe"}, ["West Bank"] = {"country/Palestine", "continent/Asia"}, ["Gaza"] = {"country/Palestine", "continent/Asia"}, ["Gaza Strip"] = {"country/Palestine", "continent/Asia"}, } } ------------------------------------------------------------------------------------------ -- Category and display handlers -- ------------------------------------------------------------------------------------------ local function city_type_cat_handler(data) local entry_placetype = data.entry_placetype local generic_before_non_cities = export.get_placetype_prop(entry_placetype, "generic_before_non_cities") if not generic_before_non_cities then internal_error("city_type_cat_handler called on placetype %s that doesn't have a `generic_before_non_cities`" .. " setting", entry_placetype) end local plural_entry_placetype = export.pluralize_placetype(entry_placetype) local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group and not spec.is_former_place and not spec.is_city then -- Categorize both in key, and in the larger polity that the key is part of, e.g. [[Hirakata]] goes in both -- "Cities in Osaka Prefecture" and "Cities in Japan". (But don't do the latter if no_container_cat is set.) local cap_plural_entry_placetype = ucfirst(plural_entry_placetype) local retcats = {("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities, export.get_prefixed_key(key, spec))} if container_trail[1] and not spec.no_container_cat then for _, container in ipairs(container_trail[1]) do insert(retcats, ("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities, export.get_prefixed_key(container.key, container.spec))) end end return retcats end end local function capital_city_cat_handler(data, non_city) local holonym_placetype, holonym_placename, holonym_index, place_desc = data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc -- The first time we're called we want to return something; otherwise we will be called for later-mentioned -- holonyms, which can result in wrongly classifying into e.g. `National capitals`. Simulate the loop in -- find_placetype_cat_specs() over holonyms so we get the proper `Cities in ...` categories as well as the capital -- category/categories we add below. local retcats if not non_city and place_desc.holonyms then for h_index, holonym in export.get_holonyms_to_check(place_desc, holonym_index) do local h_placetype, h_placename = holonym.placetype, holonym.unlinked_placename retcats = city_type_cat_handler { entry_placetype = "city", holonym_placetype = h_placetype, holonym_placename = h_placename, holonym_index = h_index, place_desc = place_desc, } if retcats then break end end end if not retcats then retcats = {} end -- Now find the appropriate capital-type category for the placetype of the holonym, e.g. 'State capitals'. If we -- recognize the holonym among the known holonyms in [[Module:place/locations]], also add a category like 'State -- capitals of the United States'. Truncate e.g. 'autonomous region' to 'region', 'union territory' to 'territory' -- when looking up the type of capital category, if we can't find an entry for the holonym placetype itself (there's -- an entry for 'autonomous community'). local capital_cat = export.placetype_to_capital_cat[holonym_placetype] if not capital_cat then capital_cat = export.placetype_to_capital_cat[holonym_placetype:gsub("^.* ", "")] end if capital_cat then capital_cat = ucfirst(capital_cat) local inserted_specific_variant_cat = false if holonym_index then -- Now find the first recognized holonym location. We don't stop when :also is seen because of the common pattern -- where we use :also to specify that a given city is the capital at multiple surrounding levels. local matching_group, matching_key, matching_spec, matching_container_trail, matching_holonym_index for h_index = holonym_index, #place_desc.holonyms do if place_desc.holonyms[h_index].placetype then matching_group, matching_key, matching_spec, matching_container_trail = export.find_matching_holonym_location { holonym_placetype = place_desc.holonyms[h_index].placetype, holonym_placename = place_desc.holonyms[h_index].unlinked_placename, holonym_index = h_index, place_desc = place_desc, } if matching_group then matching_holonym_index = h_index break end end end if matching_holonym_index == holonym_index then if matching_container_trail[1] and not matching_spec.no_container_cat then for _, container in ipairs(matching_container_trail[1]) do insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key, container.spec))) inserted_specific_variant_cat = true end end elseif matching_holonym_index then -- Check to make sure that the holonym placetype we were called on is listed among the -- divtypes of the location we found. local function insert_specific_variant_if_possible(key, spec) return export.get_equiv_placetype_prop(holonym_placetype, function(pt) local plural_holonym_placetype = export.pluralize_placetype(pt) local saw_matching_div if spec.divs then local divs = spec.divs if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) ~= "table" then div = {type = div} end if plural_holonym_placetype == div.type then saw_matching_div = true break end end end if saw_matching_div then insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(key, spec))) return true end return false end) end if insert_specific_variant_if_possible(matching_key, matching_spec) then inserted_specific_variant_cat = true elseif not matching_spec.no_container_cat then for _, containers in ipairs(matching_container_trail) do local saw_no_container_cat = false for _, container in ipairs(containers) do if insert_specific_variant_if_possible(container.key, container.spec) then inserted_specific_variant_cat = true break end saw_no_container_cat = saw_no_container_cat or container.spec.no_container_cat end if inserted_specific_variant_cat or saw_no_container_cat then break end end end end else -- This happens when in an invocation like {{place|en|capital city|s/Haryana,Punjab}} for -- [[Chandigarh]]. We fall back to older code that doesn't depend on the holonym index existing. -- FIXME: This may not be necessary. In the example just given, when processing Haryana we add to -- [[:Category:en:State capitals of India]], and nothing extra gets added when processing Punjab. -- Possibly we can just skip this case entirely. local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group and container_trail[1] and not spec.no_container_cat then for _, container in ipairs(container_trail[1]) do insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key, container.spec))) inserted_specific_variant_cat = true end end end if not inserted_specific_variant_cat then insert(retcats, capital_cat) end else -- We didn't recognize the holonym placetype; just put in 'Capital cities'. insert(retcats, "Capital cities") end return retcats end --[=[ This is invoked specially for all placetypes (see the `*` placetype key at the bottom of `placetype_data`). This is used in two ways: # To add pages to generic holonym categories like [[:Category:en:Places in Merseyside, England]] (and [[:Category:en:Places in England]]) for any pages that have `co/Merseyside` as their holonym. # To categorize demonyms in bare placename categories like [[:Category:en:Merseyside, England]] if the demonym description mentions `co/Merseyside` and doesn't mention a more specific placename that also has a category. (In this case there are none, but we can have demonyms at multiple levels, e.g. in France for individual villages, departments, administrative regions, and for the entire country, and for example we only want to categorize a demonym into [[:Category:France]] if no more specific category applies.) Unlike when invoked from {{tl|place}}, a demonym invocation only adds the most specific holonym category and not the category of any containing polity (hence if we add [[:Category:en:Merseyside, England]] we won't also add [[:Category:England]]). This code also handles cities; e.g. for the first use case above, it would be used to add a page that has `city/Boston` as a holonym to [[:Category:en:Places in Boston]], along with [[:Category:en:Places in Massachusetts, USA]] and [[:Category:en:Places in the United States]]. The city handler tries to deal with the possibility of multiple cities having the same name. For example, the code in [[Module:place/locations]] knows about the city of [[Columbus]], [[Ohio]], which has containing polities `Ohio` (a state) and `the United States` (a country). If either containing polity is mentioned, the handler proceeds to return the key `Columbus` (along with `Ohio, USA` and `the United States`). Otherwise, if any other state or country is mentioned, the handler returns nothing, and otherwise it assumes the mentioned city is the one we're considering and returns `Columbus` etc. This works correctly if the place only mentions Ohio and a holonym for a Columbus in a different country is encountered, because of the function `augment_holonyms_with_container`, which adds the US as a holonym when Ohio is encountered. The single parameter `data` is as in category handlers. The return value is a list of categories (without the preceding language code). ]=] local function generic_place_cat_handler(data) local from_demonym = data.from_demonym local retcats = {} local function insert_retkey(key, spec) if from_demonym then insert(retcats, key) else insert(retcats, ("Places in %s"):format(export.get_prefixed_key(key, spec))) end end local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group then if not spec.no_generic_place_cat then -- This applies to continents and continental regions. insert_retkey(key, spec) end -- Categorize both in key, and in the larger location(s) that the key is part of, e.g. [[Hirakata]] goes in -- both [[Category:Places in Osaka Prefecture, Japan]] and [[Category:Places in Japan]]. But not when -- no_container_cat is set (e.g. for 'United Kingdom'). if not spec.no_container_cat then for _, container_set in ipairs(container_trail) do local stop_adding_containers = false for _, container in ipairs(container_set) do if not container.spec.no_generic_place_cat then insert_retkey(container.key, container.spec) end if container.spec.no_container_cat then stop_adding_containers = true end end if stop_adding_containers then break end end end return retcats end end --[==[ Special category handler run for all placetypes that checks for specified division placetypes of known locations and categorizes appropriately. ]==] function export.political_division_cat_handler(data) if data.from_demonym then return end local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group then local divlists = {} if spec.divs then insert(divlists, spec.divs) end if spec.addl_divs then insert(divlists, spec.addl_divs) end for _, divlist in ipairs(divlists) do if type(divlist) ~= "table" then divlist = {divlist} end for _, div in ipairs(divlist) do if type(div) == "string" then div = {type = div} end local sgdiv = export.maybe_singularize_placetype(div.type) or div.type local prep = div.prep or "of" local cat_as = div.cat_as or div.type if type(cat_as) ~= "table" then cat_as = {cat_as} end if not export.placetype_data[sgdiv] then internal_error("Placetype %s associated with known location key %s and data %s not found in " .. "`placetype_data`", sgdiv, key, spec) end if sgdiv == data.entry_placetype then local retcats = {} for _, pt_cat in ipairs(cat_as) do if type(pt_cat) == "string" then pt_cat = {type = pt_cat} end local pt_prep = pt_cat.prep or prep insert(retcats, ucfirst(pt_cat.type) .. " " .. pt_prep .. " " .. export.get_prefixed_key(key, spec)) end return retcats end end end end end --[==[ This is used to add pages to "bare" categories like [[:Category:en:Georgia, USA]] for `[[Georgia]]` and any foreign-language terms that are translations of the state of Georgia. We look at the page title (or its overridden value in {{para|pagename}}) as well as the glosses in {{para|t}}/{{para|t2}} etc., various extra-info values such as the modern names in {{para|modern}}, and any values specified using a form-of directive. We need to pay attention to the entry placetypes specified so we don't overcategorize; e.g. the US state of Georgia is `[[Джорджия]]` in Russian but the country of Georgia is `[[Грузия]]`, and if we just looked for matching names, we'd get both Russian terms categorized into both [[:Category:ru:Georgia, USA]] and [[:Category:ru:Georgia]]. We also need to check the containing holonyms to make sure there isn't a mismatch (so we don't e.g. categorize Newark, Delaware in [[:Category:en:Newark]], which is intended for Newark, New Jersey). ]==] function export.get_bare_categories(args, overall_place_spec) local bare_cats = {} local place_descs = overall_place_spec.descs local possible_placetypes_by_place_desc = {} for i, place_desc in ipairs(place_descs) do possible_placetypes_by_place_desc[i] = {} for _, placetype in ipairs(place_desc.placetypes) do if not export.placetype_is_ignorable(placetype) then local equivs = export.get_placetype_equivs(placetype, {register_former_as_non_former = true}) for _, equiv in ipairs(equivs) do insert(possible_placetypes_by_place_desc[i], equiv.placetype) end end end end local function check_term(term) -- Treat Wikipedia links like local ones. term = term:gsub("%[%[w:", "[["):gsub("%[%[wikipedia:", "[[") term = export.remove_links_and_html(term) term = term:gsub("^ ", "") 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["Hạt " .. unlinked_placename .. ", Ireland"] or m_locations.northern_ireland_counties["Hạt " .. unlinked_placename .. ", Bắc Ireland"] then return prefix_display_handler("Hạt", holonym_placename) end -- Display handler for Taiwanese counties. Taiwanese counties are displayed as e.g. "[[Chiayi]] County". if m_locations.taiwan_counties[unlinked_placename .. ", Đài Loan"] then return suffix_display_handler("Hạt", holonym_placename) end -- Display handler for Romanian counties. Romanian counties are displayed as e.g. "[[Cluj]] County". if m_locations.romania_counties[unlinked_placename .. ", România"] then return suffix_display_handler("Hạt", 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 .. ", Nhật Bản"] 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 .. ", Bulgaria"] or m_locations.iran_provinces[unlinked_placename .. ", Iran"] or m_locations.laos_provinces[unlinked_placename .. ", Lào"] or m_locations.north_korea_provinces[unlinked_placename .. ", Cộng hòa Dân chủ Nhân dân Triều Tiên"] or m_locations.south_korea_provinces[unlinked_placename .. ", Hàn Quốc"] or m_locations.thailand_provinces[unlinked_placename .. ", Thái Lan"] or m_locations.turkey_provinces[unlinked_placename .. ", Thổ Nhĩ Kỳ"] or m_locations.vietnam_provinces[unlinked_placename .. ", Việt Nam"] 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 .. ", 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 = "của", 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 = true, 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 return export mypr3lfr9sz4c8k98fhfoex5iv7rc0k 2349910 2349904 2026-05-03T13:20:50Z Hiyuune 50834 2349910 Scribunto text/plain local export = {} export.force_cat = false -- set to true for testing local m_locations = require("Module:place/locations") local m_links = require("Module:links") local m_table = require("Module:table") local m_strutils = require("Module:string utilities") local debug_track_module = "Module:debug/track" local en_utilities_module = "Module:en-utilities" local dump = mw.dumpObject local insert = table.insert local concat = table.concat local internal_error = m_locations.internal_error export.internal_error = internal_error local process_error = m_locations.process_error export.process_error = process_error local unpack = unpack or table.unpack -- Lua 5.2 compatibility local ucfirst = m_strutils.ucfirst local ulower = m_strutils.lower local rmatch = m_strutils.match local split = m_strutils.split --[==[ intro: This module contains placetype data used by [[Module:place]] and {{tl|place}}, along with a significant amount of code to work with both placetypes and locations, as well as some placename-related info (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 else placetype = 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 = "tên" 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 `"của"` 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 "của" 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 link end end --[==[ Get the display form of a placetype by looking it up in `placetype_data`. If the placetype is recognized, or is the plural of a recognized placetype, the corresponding linked display form is returned (with plural placetypes displaying as plural but linked to the singular form of the placetype). Otherwise, return nil. If we're generating the description of a category, `category_type` should be set to one of `"top-level"` (for top-level categories like [[:Category:Neighborhoods]]), `"noncity"` (for non-city categories like [[:Category:Neighborhoods in Illinois, USA]]) or `"city"` (for city categories like [[:Category:Neighborhoods of Chicago]]). Otherwise, we're generating the description for use in formatting a {{tl|place}} call, and category-only placetypes ending in `!` will be ignored, along with special `category_link*` settings. `return_full` is used along with `category_type` and will preferably return the "full" variant of category link settings, i.e. `full_category_link*`; if they don't exist, the `category_link*` value is prepended with `"names of"`. `noerror` says to not throw an error when encountering entry placetypes that would be disallowed. ]==] function export.get_placetype_display_form(placetype, category_type, return_full, noerror) local from_category = not not category_type local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category) if canon_placetype then local raw_link local function is_linked_string(str) return type(str) == "string" and str:find("%[%[") end if category_type then local fetched_full local function fetch_maybe_full(prop) local retval = ptdata["full_" .. prop] if retval ~= nil then if return_full then return retval, true else internal_error("Saw full_" .. prop .. "=%s but `return_full` not set, can't handle", retval) end end return ptdata[prop], false end local function maybe_prefix(str) if return_full and not fetched_full then return "names of " .. str else return str end end -- Careful with `false` as possible value. if category_type == "top-level" then raw_link, fetched_full = fetch_maybe_full("category_link_top_level") elseif category_type == "noncity" then raw_link, fetched_full = fetch_maybe_full("category_link_before_noncity") elseif category_type == "city" then raw_link, fetched_full = fetch_maybe_full("category_link_before_city") else internal_error('Unrecognized value for `category_type` %s, should be "top-level", "noncity" or "city"', category_type) end if type(raw_link) == "string" then return maybe_prefix(raw_link), ptdata elseif raw_link ~= nil then return raw_link, ptdata end raw_link, fetched_full = fetch_maybe_full("category_link") if raw_link == false then return raw_link, ptdata end if is_linked_string(raw_link) then return maybe_prefix(raw_link), ptdata end if ptmatch == "plural" then raw_link, fetched_full = fetch_maybe_full("plural_link") if raw_link == false then return raw_link, ptdata end if is_linked_string(raw_link) then return maybe_prefix(raw_link), ptdata end end if raw_link == nil then raw_link, fetched_full = fetch_maybe_full("link") end if raw_link == false then return raw_link, ptdata end return maybe_prefix(make_placetype_link(raw_link, canon_placetype, placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror)), ptdata else if ptmatch == "plural" then raw_link = ptdata.plural_link if raw_link == false then process_error("Placetype %s cannot appear plural", placetype) end if is_linked_string(raw_link) then return raw_link, ptdata end end if raw_link == nil then raw_link = ptdata.link end return make_placetype_link(raw_link, canon_placetype, placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror), ptdata end end return nil end local function resolve_unlinked_placename_display_aliases(placetype, placename) local equiv_placetypes = export.get_placetype_equivs(placetype) for i, equiv in ipairs(equiv_placetypes) do equiv_placetypes[i] = equiv.placetype end local all_display_aliases_found = {} local all_others_found = {} for group, key, spec in m_locations.iterate_matching_location { placetypes = equiv_placetypes, placename = placename, alias_resolution = "display", } do if spec.alias_of and spec.display then insert(all_display_aliases_found, {group, key, spec, spec.display_as_full}) else insert(all_others_found, {group, key, spec}) end end if not all_display_aliases_found[1] then return placename elseif all_display_aliases_found[2] then internal_error("Found multiple matching display aliases for placename %s, placetype %s: " .. "all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found, all_others_found) elseif all_others_found[1] then internal_error("Found a display alias along with other possible meanings for placename %s, placetype %s: " .. "all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found, all_others_found) else local group, key, spec, as_full = unpack(all_display_aliases_found[1]) local full, elliptical = m_locations.key_to_placename(group, key) return as_full and full or elliptical end end --[==[ If `placename` of type `placetype` is a display alias, convert it to its canonical form; otherwise, return unchanged. Display aliases transform certain placenames into canonical displayed forms. For example, if any of `country/US`, `country/USA` or `country/United States of America` (or `c/US`, etc.) are given, the result will be displayed as `United States`. '''NOTE''': Display aliases change what is displayed from what the editor wrote in the Wikitext. As a result, they should (a) be non-political in nature, and (b) not involve a change where the word `the` needs to be added or removed. For example, normalizing `US` and `USA` to `United States` for display purposes is OK but normalizing `Burma` to `Myanmar` is not (instead a cat alias should be used) because the terms `Burma` and `Myanmar` have clear political connotations. Similarly, we have a display alias that maps the old name of `Macedonia` as a country (but not a region!) to `North Macedonia`, but `Republic of Macedonia` is mapped to `North Macedonia` only as a cat alias because the two terms differ in their use of `the`. (For example, if we had a display alias mapping `Republic of Macedonia` to `North Macedonia`, the call {{tl|place|en|the <<capital city>> of the <<c/Republic of Macedonia>>}} would wrongly display as `the [[capital city]] of the [[North Macedonia]]`.) Generally, display normalizations tend to involve alternative forms (e.g. abbreviations, ellipses, foreign spellings) where the normalization improves clarity and consistency. ]==] function export.resolve_placename_display_aliases(placetype, placename) -- If the placename is a link, apply the alias inside the link. -- This pattern matches both piped and unpiped links. If the link is not piped, the second capture (linktext) will -- be empty. local link, linktext = rmatch(placename, "^%[%[([^|%[%]]+)|?([^|%[%]]-)%]%]$") if link then if linktext ~= "" then local alias = resolve_unlinked_placename_display_aliases(placetype, linktext) return "[[" .. link .. "|" .. alias .. "]]" else local alias = resolve_unlinked_placename_display_aliases(placetype, link) return "[[" .. alias .. "]]" end else return resolve_unlinked_placename_display_aliases(placetype, placename) end end --[==[ Generate the "prefixed" version of a bare key, i.e. prefix it with `the` if correct for this key. ]==] function export.get_prefixed_key(key, spec) if spec.the then return "the " .. key else return key end end -- Necessary for use by [[Module:place]]. FIXME: Reorganize the modules so this isn't necessary. export.iterate_matching_location = m_locations.iterate_matching_location --[=[ Iterator that iterates over holonyms in `place_desc`. If `first_holonym_index` is given, start iterating at the specified holonym and stop either when there are no more holonyms or a holonym with modifier `:also` is found. If `first_holonym_index` is nil or omitted, iterate over all holonyms regardless. If `include_raw_text_holonyms` is specified, raw text holonyms (those not of the form `placetype/placename`) are returned as well; they can be identified by the fact that the `placetype` field in the holonym structure is nil. Two values are returned at each iteration, the holonym index and holonym structure, similar to `ipairs()`. ]=] function export.get_holonyms_to_check(place_desc, first_holonym_index, include_raw_text_holonyms) local stop_at_also = not not first_holonym_index return function(place_desc, index) while true do index = index + 1 local this_holonym = place_desc.holonyms[index] -- If we were passed in a starting holonym index, go up to but not including a holonym marked with `:also` -- (continue_cat_loop); the categorization code will then restart the loop at that holonym. That holonym -- will have `:also` marked on it, so make sure not to stop immediately if the first holonym is marked with -- `:also`. if not this_holonym or stop_at_also and index > first_holonym_index and this_holonym.continue_cat_loop then return nil end -- If not placetype, we're processing raw text, which we normally want to skip. if include_raw_text_holonyms or this_holonym.placetype then return index, this_holonym end end end, place_desc, first_holonym_index and first_holonym_index - 1 or 0 end --[==[ If the holonym in `data` (in the format as passed to a category handler) refers to a known location, iterate over all such known locations, returning for each location the corresponding key, spec and group as well as the trail of ancestral containers. Unlike `iterate_matching_location()`, this specifically checks that there is no mismatch between the location's containers at any level and any of the following holonyms in the {{tl|place}} spec. The fields in `data` are: * `holonym_placetype`: The placetype of the holonym. It can actually be a list of possible placetypes, as with `iterate_matching_location()`. * `holonym_placename`: The placename of the holonym. * `holonym_index`: The index of the holonym among the holonyms in `place_desc`, or nil if the holonym is not among the holonyms in `place_desc`. (If a holonym index is given, we check for container mismatches among the holonyms following the specified index, stopping either when encountering a holonym marked with modifier `:also` or, if none exist, when we run out of holonyms. If no holonym index is given, we check all holonyms for container mismatches.) * `place_desc`: Description of the place; used for the holonyms, to check for container mismatches. Returns four values: the location group, the canonical key by which the location is known, the spec object describing the location and the trail of ancestral containers for the location. The first three values are the same as for `iterate_matching_location`. ]==] function export.iterate_matching_holonym_location(data) local holonym_placetype, holonym_placename, holonym_index, place_desc = data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc local matching_location_iterator = m_locations.iterate_matching_location { placetypes = holonym_placetype, placename = holonym_placename, } return function() while true do local group, key, spec = matching_location_iterator() if not group then return nil end local container_trail = {} -- For each level of container, check that there are no mismatches (i.e. other location of the same -- placetype) mentioned. We allow a mismatch at a given level if there's also a match with the container -- at that level. For example, in the case of Kansas City, defined in [[Module:place/locations]] as a city -- in Missouri, if we define it as {{tl|place|city|s/Missouri,Kansas}}, we ignore the mismatching state of -- Kansas because the correct state of Missouri was also mentioned. But imagine we are defining Newark, -- Delaware as {{tl|place|city|s/Delaware|c/US}} and (as is the case) we have an entry for Newark, New -- Jersey in [[Module:place/locations]]. Just because the containing location `US` matches isn't enough, -- because Newark, NJ also has New Jersey as a containing location and there's a mismatch at that level. If -- there are no mismatches at any level we assume we're dealing with the right known location. -- -- If at a given level there are multiple containing locations, we count a match if any holonym matches any -- containing location, and a mismatch only if a holonym exists of the same placetype that doesn't match any -- containing location. local containers_mismatch = false for containers in m_locations.iterate_containers(group, key, spec) do insert(container_trail, containers) local match_at_level = false local mismatch_at_level = false for other_holonym_index, other_holonym in export.get_holonyms_to_check(place_desc, holonym_index and holonym_index + 1 or nil) do local other_source_holonym = other_holonym.augmented_from_holonym if other_source_holonym and other_source_holonym.placetype == holonym_placetype and other_source_holonym.unlinked_placename ~= holonym_placename then -- Ignore holonyms added during the augmentation process for other holonyms of the same -- placetype as the placetype of the holonym we're considering. See comment in -- augment_holonyms_with_container() for why we do this. -- continue; grrr, no 'continue' in Lua else local holonym_matches_at_level = false local holonym_exists_with_same_placetype = false for _, container in ipairs(containers) do if not container.spec.no_check_holonym_mismatch then local full_container_placename, elliptical_container_placename = m_locations.key_to_placename(container.group, container.key) local placetypes = container.spec.placetype if type(placetypes) ~= "table" then placetypes = {placetypes} end local placetype_equivs = {} for _, pt in ipairs(placetypes) do m_table.extend(placetype_equivs, export.get_placetype_equivs(pt)) end local this_holonym_matches = export.get_equiv_placetype_prop_from_equivs( placetype_equivs, function(placetype) return other_holonym.placetype == placetype and (other_holonym.unlinked_placename == full_container_placename or other_holonym.unlinked_placename == elliptical_container_placename) end ) if this_holonym_matches then holonym_matches_at_level = true break end local this_holonym_exists_with_same_placetype = export.get_equiv_placetype_prop_from_equivs( placetype_equivs, function(placetype) return other_holonym.placetype == placetype end ) if this_holonym_exists_with_same_placetype then -- We seem to have a mismatch at this level. But before we decide conclusively that this -- is the case, check to see whether the putative mismatch is an alias and matches when -- we resolve the alias. for oh_group, oh_key, oh_spec, oh_container_trail in export.iterate_matching_holonym_location { holonym_placetype = other_holonym.placetype, holonym_placename = other_holonym.unlinked_placename, holonym_index = other_holonym_index, place_desc = place_desc, } do local oh_full_placename, oh_elliptical_placename = m_locations.key_to_placename(oh_group, oh_key) if oh_full_placename == full_container_placename or oh_elliptical_placename == elliptical_container_placename then -- Alias matched when resolved. this_holonym_matches = true break end end if this_holonym_matches then -- Alias matched above when resolved. holonym_matches_at_level = true break else -- Not an alias, or doesn't match when resolved. We have a true mismatch. holonym_exists_with_same_placetype = true end end end end if holonym_matches_at_level then match_at_level = true break end if holonym_exists_with_same_placetype then mismatch_at_level = true end end end if not match_at_level and mismatch_at_level then containers_mismatch = true break end end if not containers_mismatch then return group, key, spec, container_trail end end end end --[==[ If the holonym in `data` (in the format as passed to a category handler) refers to a known location, find and return the corresponding key, spec and group as well as the trail of ancestral containers. This is like `iterate_matching_holonym_location()` but throws an error if more than one location matches. (An example where this would happen is {{tl|place|en|neighborhood|city/Newcastle}}, because there are two known locations named Newcastle. To fix this, specify additional following disambiguating holonyms, e.g. {{tl|place|en|neighborhood|city/Newcastle|s/New South Wales}}. ]==] function export.find_matching_holonym_location(data) local all_found = {} for group, key, spec, container_trail in export.iterate_matching_holonym_location(data) do insert(all_found, {group, key, spec, container_trail}) end if not all_found[1] then return nil elseif all_found[2] then local holonym_placetype = data.holonym_placetype if type(holonym_placetype) == "table" then holonym_placetype = concat(holonym_placetype, ",") end local found_keys = {} for _, found in ipairs(all_found) do local _, key, _, _ = unpack(found) insert(found_keys, key) end error(("Found multiple matching locations for holonym '%s/%s'; specify disambiguating context in the " .. "containing holonyms: %s"):format(holonym_placetype, data.holonym_placename, dump(found_keys))) else return unpack(all_found[1]) end end ------------------------------------------------------------------------------------------ -- Placename and placetype data -- ------------------------------------------------------------------------------------------ --[==[ var: This is a map from aliases to their canonical forms. Any placetypes appearing as keys here will be mapped to their canonical forms in all respects, including the display form. Contrast entries in 'placetype_data' with a fallback, which applies to categorization and other processes but not to display. The most important aliases are for holonym placetypes, particularly those that occur often such as "country", "state", "province" and the like. Particularly long placetypes that mostly occur as entry placetypes (e.g. "census-designated place") can be given abbreviations, but it is generally preferred to spell out the entry placetype. Note also that we purposely avoid certain abbreviations that would be ambiguous (e.g. "d", which could variously be interpreted as "department", "district" or "division"). ]==] export.placetype_aliases = { ["acomm"] = "autonomous community", ["adr"] = "administrative region", ["adterr"] = "administrative territory", -- Pakistan ["aobl"] = "autonomous oblast", ["aokr"] = "autonomous okrug", ["ap"] = "autonomous province", ["apref"] = "autonomous prefecture", ["aprov"] = "autonomous province", ["ar"] = "autonomous region", ["arch"] = "archipelago", ["arep"] = "autonomous republic", ["aterr"] = "autonomous territory", ["atu"] = "autonomous territorial unit", ["bor"] = "borough", ["c"] = "country", ["can"] = "canton", ["carea"] = "council area", ["cc"] = "constituent country", ["cdblock"] = "community development block", ["cdep"] = "Crown dependency", ["CDP"] = "census-designated place", ["cdp"] = "census-designated place", ["clcity"] = "county-level city", ["co"] = "county", ["cobor"] = "county borough", ["colcity"] = "county-level city", ["coll"] = "collectivity", ["comm"] = "community", ["cont"] = "continent", ["contr"] = "continental region", ["contregion"] = "continental region", ["cpar"] = "civil parish", ["damun"] = "direct-administered municipality", ["dep"] = "dependency", ["department capital"] = "departmental capital", ["dept"] = "department", ["depterr"] = "dependent territory", ["dist"] = "district", ["distmun"] = "district municipality", ["div"] = "division", ["emp"] = "empire", ["fpref"] = "French prefecture", ["gov"] = "governorate", ["govnat"] = "governorate", ["home-rule city"] = "home rule city", ["home-rule municipality"] = "home rule municipality", ["inner-city area"] = "inner city area", ["ires"] = "Indian reservation", ["isl"] = "island", ["lbor"] = "London borough", ["lga"] = "local government area", ["lgarea"] = "local government area", ["lgd"] = "local government district", ["lgdist"] = "local government district", ["metbor"] = "metropolitan borough", ["metcity"] = "metropolitan city", ["metmun"] = "metropolitan municipality", ["mtn"] = "mountain", ["mun"] = "municipality", ["mundist"] = "municipal district", ["nonmetropolitan county"] = "non-metropolitan county", ["obl"] = "oblast", ["okr"] = "okrug", ["p"] = "province", ["par"] = "parish", ["parmun"] = "parish municipality", ["pen"] = "peninsula", ["plcity"] = "prefecture-level city", ["plcolony"] = "Polish colony", ["pref"] = "prefecture", ["prefcity"] = "prefecture-level city", ["preflcity"] = "prefecture-level city", ["prov"] = "province", ["r"] = "region", ["range"] = "mountain range", ["rcm"] = "regional county municipality", ["rcomun"] = "regional county municipality", ["rdist"] = "regional district", ["rep"] = "republic", ["rhrom"] = "rural hromada", ["riv"] = "river", ["rmun"] = "regional municipality", ["robor"] = "royal borough", ["romp"] = "Roman province", ["runit"] = "regional unit", ["rurmun"] = "rural municipality", ["s"] = "state", ["sar"] = "special administrative region", ["shrom"] = "settlement hromada", ["spref"] = "subprefecture", ["sprefcity"] = "sub-prefectural city", ["sprovcity"] = "subprovincial city", ["submet city"] = "sub-metropolitan city", ["submetropolitan city"] = "sub-metropolitan city", ["sub-prefecture-level city"] = "sub-prefectural city", ["sub-provincial city"] = "subprovincial city", ["sub-provincial district"] = "subprovincial district", ["terr"] = "territory", ["terrauth"] = "territorial authority", ["twp"] = "township", ["twpmun"] = "township municipality", ["uauth"] = "unitary authority", ["ucomm"] = "unincorporated community", ["udist"] = "unitary district", ["uhrom"] = "urban hromada", ["uterr"] = "union territory", ["utwpmun"] = "united township municipality", ["val"] = "valley", ["vdc"] = "village development committee", ["vil"] = "village", ["voi"] = "voivodeship", ["wcomm"] = "Welsh community", } local no_link_def_article = {link = false, article = ""} 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"] = {"^Vịnh của "}, ["lake"] = {"^Hồ của "}, ["country"] = {"^Republic of ", " Republic$"}, ["republic"] = {"^Republic of ", " Republic$"}, ["region"] = {"^Vùng của "}, ["river"] = {"^Sông của "}, ["local government area"] = {"^Shire of "}, ["county"] = {"^Shire of "}, ["Indian reservation"] = {" Reservation", " Nation"}, ["tribal jurisdictional area"] = {" Reservation", " Nation"}, } --[==[ var: If any of the following holonyms are present, the associated holonyms are automatically added to the end of the list of holonyms for categorization (but not display) purposes. ]==] export.cat_implications = { ["region"] = { ["Eastern Europe"] = {"continent/Europe"}, ["Central Europe"] = {"continent/Europe"}, ["Western Europe"] = {"continent/Europe"}, ["South Europe"] = {"continent/Europe"}, ["Southern Europe"] = {"continent/Europe"}, ["Northern Europe"] = {"continent/Europe"}, ["Northeast Europe"] = {"continent/Europe"}, ["Northeastern Europe"] = {"continent/Europe"}, ["Southeast Europe"] = {"continent/Europe"}, ["Southeastern Europe"] = {"continent/Europe"}, ["North Caucasus"] = {"continent/Europe"}, ["South Caucasus"] = {"continent/Asia"}, ["South Asia"] = {"continent/Asia"}, ["Southern Asia"] = {"continent/Asia"}, ["East Asia"] = {"continent/Asia"}, ["Eastern Asia"] = {"continent/Asia"}, ["Central Asia"] = {"continent/Asia"}, ["West Asia"] = {"continent/Asia"}, ["Western Asia"] = {"continent/Asia"}, ["Southeast Asia"] = {"continent/Asia"}, ["North Asia"] = {"continent/Asia"}, ["Northern Asia"] = {"continent/Asia"}, ["Anatolia"] = {"continent/Asia"}, ["Asia Minor"] = {"continent/Asia"}, ["Mesopotamia"] = {"continent/Asia"}, ["North Africa"] = {"continent/Africa"}, ["Central Africa"] = {"continent/Africa"}, ["West Africa"] = {"continent/Africa"}, ["East Africa"] = {"continent/Africa"}, ["Southern Africa"] = {"continent/Africa"}, ["Central America"] = {"continent/Central America"}, ["Caribbean"] = {"continent/North America"}, ["Polynesia"] = {"continent/Oceania"}, ["Micronesia"] = {"continent/Oceania"}, ["Melanesia"] = {"continent/Oceania"}, ["Siberia"] = {"country/Russia", "continent/Asia"}, ["Russian Far East"] = {"country/Russia", "continent/Asia"}, ["South Wales"] = {"constituent country/Wales", "continent/Europe"}, ["Balkans"] = {"continent/Europe"}, ["West Bank"] = {"country/Palestine", "continent/Asia"}, ["Gaza"] = {"country/Palestine", "continent/Asia"}, ["Gaza Strip"] = {"country/Palestine", "continent/Asia"}, } } ------------------------------------------------------------------------------------------ -- Category and display handlers -- ------------------------------------------------------------------------------------------ local function city_type_cat_handler(data) local entry_placetype = data.entry_placetype local generic_before_non_cities = export.get_placetype_prop(entry_placetype, "generic_before_non_cities") if not generic_before_non_cities then internal_error("city_type_cat_handler called on placetype %s that doesn't have a `generic_before_non_cities`" .. " setting", entry_placetype) end local plural_entry_placetype = export.pluralize_placetype(entry_placetype) local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group and not spec.is_former_place and not spec.is_city then -- Categorize both in key, and in the larger polity that the key is part of, e.g. [[Hirakata]] goes in both -- "Cities in Osaka Prefecture" and "Cities in Japan". (But don't do the latter if no_container_cat is set.) local cap_plural_entry_placetype = ucfirst(plural_entry_placetype) local retcats = {("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities, export.get_prefixed_key(key, spec))} if container_trail[1] and not spec.no_container_cat then for _, container in ipairs(container_trail[1]) do insert(retcats, ("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities, export.get_prefixed_key(container.key, container.spec))) end end return retcats end end local function capital_city_cat_handler(data, non_city) local holonym_placetype, holonym_placename, holonym_index, place_desc = data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc -- The first time we're called we want to return something; otherwise we will be called for later-mentioned -- holonyms, which can result in wrongly classifying into e.g. `National capitals`. Simulate the loop in -- find_placetype_cat_specs() over holonyms so we get the proper `Cities in ...` categories as well as the capital -- category/categories we add below. local retcats if not non_city and place_desc.holonyms then for h_index, holonym in export.get_holonyms_to_check(place_desc, holonym_index) do local h_placetype, h_placename = holonym.placetype, holonym.unlinked_placename retcats = city_type_cat_handler { entry_placetype = "city", holonym_placetype = h_placetype, holonym_placename = h_placename, holonym_index = h_index, place_desc = place_desc, } if retcats then break end end end if not retcats then retcats = {} end -- Now find the appropriate capital-type category for the placetype of the holonym, e.g. 'State capitals'. If we -- recognize the holonym among the known holonyms in [[Module:place/locations]], also add a category like 'State -- capitals of the United States'. Truncate e.g. 'autonomous region' to 'region', 'union territory' to 'territory' -- when looking up the type of capital category, if we can't find an entry for the holonym placetype itself (there's -- an entry for 'autonomous community'). local capital_cat = export.placetype_to_capital_cat[holonym_placetype] if not capital_cat then capital_cat = export.placetype_to_capital_cat[holonym_placetype:gsub("^.* ", "")] end if capital_cat then capital_cat = ucfirst(capital_cat) local inserted_specific_variant_cat = false if holonym_index then -- Now find the first recognized holonym location. We don't stop when :also is seen because of the common pattern -- where we use :also to specify that a given city is the capital at multiple surrounding levels. local matching_group, matching_key, matching_spec, matching_container_trail, matching_holonym_index for h_index = holonym_index, #place_desc.holonyms do if place_desc.holonyms[h_index].placetype then matching_group, matching_key, matching_spec, matching_container_trail = export.find_matching_holonym_location { holonym_placetype = place_desc.holonyms[h_index].placetype, holonym_placename = place_desc.holonyms[h_index].unlinked_placename, holonym_index = h_index, place_desc = place_desc, } if matching_group then matching_holonym_index = h_index break end end end if matching_holonym_index == holonym_index then if matching_container_trail[1] and not matching_spec.no_container_cat then for _, container in ipairs(matching_container_trail[1]) do insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key, container.spec))) inserted_specific_variant_cat = true end end elseif matching_holonym_index then -- Check to make sure that the holonym placetype we were called on is listed among the -- divtypes of the location we found. local function insert_specific_variant_if_possible(key, spec) return export.get_equiv_placetype_prop(holonym_placetype, function(pt) local plural_holonym_placetype = export.pluralize_placetype(pt) local saw_matching_div if spec.divs then local divs = spec.divs if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) ~= "table" then div = {type = div} end if plural_holonym_placetype == div.type then saw_matching_div = true break end end end if saw_matching_div then insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(key, spec))) return true end return false end) end if insert_specific_variant_if_possible(matching_key, matching_spec) then inserted_specific_variant_cat = true elseif not matching_spec.no_container_cat then for _, containers in ipairs(matching_container_trail) do local saw_no_container_cat = false for _, container in ipairs(containers) do if insert_specific_variant_if_possible(container.key, container.spec) then inserted_specific_variant_cat = true break end saw_no_container_cat = saw_no_container_cat or container.spec.no_container_cat end if inserted_specific_variant_cat or saw_no_container_cat then break end end end end else -- This happens when in an invocation like {{place|en|capital city|s/Haryana,Punjab}} for -- [[Chandigarh]]. We fall back to older code that doesn't depend on the holonym index existing. -- FIXME: This may not be necessary. In the example just given, when processing Haryana we add to -- [[:Category:en:State capitals of India]], and nothing extra gets added when processing Punjab. -- Possibly we can just skip this case entirely. local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group and container_trail[1] and not spec.no_container_cat then for _, container in ipairs(container_trail[1]) do insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key, container.spec))) inserted_specific_variant_cat = true end end end if not inserted_specific_variant_cat then insert(retcats, capital_cat) end else -- We didn't recognize the holonym placetype; just put in 'Capital cities'. insert(retcats, "Capital cities") end return retcats end --[=[ This is invoked specially for all placetypes (see the `*` placetype key at the bottom of `placetype_data`). This is used in two ways: # To add pages to generic holonym categories like [[:Category:en:Places in Merseyside, England]] (and [[:Category:en:Places in England]]) for any pages that have `co/Merseyside` as their holonym. # To categorize demonyms in bare placename categories like [[:Category:en:Merseyside, England]] if the demonym description mentions `co/Merseyside` and doesn't mention a more specific placename that also has a category. (In this case there are none, but we can have demonyms at multiple levels, e.g. in France for individual villages, departments, administrative regions, and for the entire country, and for example we only want to categorize a demonym into [[:Category:France]] if no more specific category applies.) Unlike when invoked from {{tl|place}}, a demonym invocation only adds the most specific holonym category and not the category of any containing polity (hence if we add [[:Category:en:Merseyside, England]] we won't also add [[:Category:England]]). This code also handles cities; e.g. for the first use case above, it would be used to add a page that has `city/Boston` as a holonym to [[:Category:en:Places in Boston]], along with [[:Category:en:Places in Massachusetts, USA]] and [[:Category:en:Places in the United States]]. The city handler tries to deal with the possibility of multiple cities having the same name. For example, the code in [[Module:place/locations]] knows about the city of [[Columbus]], [[Ohio]], which has containing polities `Ohio` (a state) and `the United States` (a country). If either containing polity is mentioned, the handler proceeds to return the key `Columbus` (along with `Ohio, USA` and `the United States`). Otherwise, if any other state or country is mentioned, the handler returns nothing, and otherwise it assumes the mentioned city is the one we're considering and returns `Columbus` etc. This works correctly if the place only mentions Ohio and a holonym for a Columbus in a different country is encountered, because of the function `augment_holonyms_with_container`, which adds the US as a holonym when Ohio is encountered. The single parameter `data` is as in category handlers. The return value is a list of categories (without the preceding language code). ]=] local function generic_place_cat_handler(data) local from_demonym = data.from_demonym local retcats = {} local function insert_retkey(key, spec) if from_demonym then insert(retcats, key) else insert(retcats, ("Địa danh của %s"):format(export.get_prefixed_key(key, spec))) end end local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group then if not spec.no_generic_place_cat then -- This applies to continents and continental regions. insert_retkey(key, spec) end -- Categorize both in key, and in the larger location(s) that the key is part of, e.g. [[Hirakata]] goes in -- both [[Category:Places in Osaka Prefecture, Japan]] and [[Category:Places in Japan]]. But not when -- no_container_cat is set (e.g. for 'United Kingdom'). if not spec.no_container_cat then for _, container_set in ipairs(container_trail) do local stop_adding_containers = false for _, container in ipairs(container_set) do if not container.spec.no_generic_place_cat then insert_retkey(container.key, container.spec) end if container.spec.no_container_cat then stop_adding_containers = true end end if stop_adding_containers then break end end end return retcats end end --[==[ Special category handler run for all placetypes that checks for specified division placetypes of known locations and categorizes appropriately. ]==] function export.political_division_cat_handler(data) if data.from_demonym then return end local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group then local divlists = {} if spec.divs then insert(divlists, spec.divs) end if spec.addl_divs then insert(divlists, spec.addl_divs) end for _, divlist in ipairs(divlists) do if type(divlist) ~= "table" then divlist = {divlist} end for _, div in ipairs(divlist) do if type(div) == "string" then div = {type = div} end local sgdiv = export.maybe_singularize_placetype(div.type) or div.type local prep = div.prep or "of" local cat_as = div.cat_as or div.type if type(cat_as) ~= "table" then cat_as = {cat_as} end if not export.placetype_data[sgdiv] then internal_error("Placetype %s associated with known location key %s and data %s not found in " .. "`placetype_data`", sgdiv, key, spec) end if sgdiv == data.entry_placetype then local retcats = {} for _, pt_cat in ipairs(cat_as) do if type(pt_cat) == "string" then pt_cat = {type = pt_cat} end local pt_prep = pt_cat.prep or prep insert(retcats, ucfirst(pt_cat.type) .. " " .. pt_prep .. " " .. export.get_prefixed_key(key, spec)) end return retcats end end end end end --[==[ This is used to add pages to "bare" categories like [[:Category:en:Georgia, USA]] for `[[Georgia]]` and any foreign-language terms that are translations of the state of Georgia. We look at the page title (or its overridden value in {{para|pagename}}) as well as the glosses in {{para|t}}/{{para|t2}} etc., various extra-info values such as the modern names in {{para|modern}}, and any values specified using a form-of directive. We need to pay attention to the entry placetypes specified so we don't overcategorize; e.g. the US state of Georgia is `[[Джорджия]]` in Russian but the country of Georgia is `[[Грузия]]`, and if we just looked for matching names, we'd get both Russian terms categorized into both [[:Category:ru:Georgia, USA]] and [[:Category:ru:Georgia]]. We also need to check the containing holonyms to make sure there isn't a mismatch (so we don't e.g. categorize Newark, Delaware in [[:Category:en:Newark]], which is intended for Newark, New Jersey). ]==] function export.get_bare_categories(args, overall_place_spec) local bare_cats = {} local place_descs = overall_place_spec.descs local possible_placetypes_by_place_desc = {} for i, place_desc in ipairs(place_descs) do possible_placetypes_by_place_desc[i] = {} for _, placetype in ipairs(place_desc.placetypes) do if not export.placetype_is_ignorable(placetype) then local equivs = export.get_placetype_equivs(placetype, {register_former_as_non_former = true}) for _, equiv in ipairs(equivs) do insert(possible_placetypes_by_place_desc[i], equiv.placetype) end end end end local function check_term(term) -- Treat Wikipedia links like local ones. term = term:gsub("%[%[w:", "[["):gsub("%[%[wikipedia:", "[[") term = export.remove_links_and_html(term) term = term:gsub("^ ", "") 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["Hạt " .. unlinked_placename .. ", Ireland"] or m_locations.northern_ireland_counties["Hạt " .. unlinked_placename .. ", Bắc Ireland"] then return prefix_display_handler("Hạt", holonym_placename) end -- Display handler for Taiwanese counties. Taiwanese counties are displayed as e.g. "[[Chiayi]] County". if m_locations.taiwan_counties[unlinked_placename .. ", Đài Loan"] then return suffix_display_handler("Hạt", holonym_placename) end -- Display handler for Romanian counties. Romanian counties are displayed as e.g. "[[Cluj]] County". if m_locations.romania_counties[unlinked_placename .. ", România"] then return suffix_display_handler("Hạt", 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 .. ", Nhật Bản"] 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 .. ", Bulgaria"] or m_locations.iran_provinces[unlinked_placename .. ", Iran"] or m_locations.laos_provinces[unlinked_placename .. ", Lào"] or m_locations.north_korea_provinces[unlinked_placename .. ", Cộng hòa Dân chủ Nhân dân Triều Tiên"] or m_locations.south_korea_provinces[unlinked_placename .. ", Hàn Quốc"] or m_locations.thailand_provinces[unlinked_placename .. ", Thái Lan"] or m_locations.turkey_provinces[unlinked_placename .. ", Thổ Nhĩ Kỳ"] or m_locations.vietnam_provinces[unlinked_placename .. ", Việt Nam"] 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 .. ", 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 = "của", 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 = true, 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 return export 0xm43xz2g96ipgk9jh31xugizyo12h9 2349918 2349910 2026-05-03T13:38:00Z Hiyuune 50834 2349918 Scribunto text/plain local export = {} export.force_cat = false -- set to true for testing local m_locations = require("Module:place/locations") local m_links = require("Module:links") local m_table = require("Module:table") local m_strutils = require("Module:string utilities") local debug_track_module = "Module:debug/track" local en_utilities_module = "Module:en-utilities" local dump = mw.dumpObject local insert = table.insert local concat = table.concat local internal_error = m_locations.internal_error export.internal_error = internal_error local process_error = m_locations.process_error export.process_error = process_error local unpack = unpack or table.unpack -- Lua 5.2 compatibility local ucfirst = m_strutils.ucfirst local ulower = m_strutils.lower local rmatch = m_strutils.match local split = m_strutils.split --[==[ intro: This module contains placetype data used by [[Module:place]] and {{tl|place}}, along with a significant amount of code to work with both placetypes and locations, as well as some placename-related info (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 else placetype = 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 = "tên" 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 `"của"` 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 "của" 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 link end end --[==[ Get the display form of a placetype by looking it up in `placetype_data`. If the placetype is recognized, or is the plural of a recognized placetype, the corresponding linked display form is returned (with plural placetypes displaying as plural but linked to the singular form of the placetype). Otherwise, return nil. If we're generating the description of a category, `category_type` should be set to one of `"top-level"` (for top-level categories like [[:Category:Neighborhoods]]), `"noncity"` (for non-city categories like [[:Category:Neighborhoods in Illinois, USA]]) or `"city"` (for city categories like [[:Category:Neighborhoods of Chicago]]). Otherwise, we're generating the description for use in formatting a {{tl|place}} call, and category-only placetypes ending in `!` will be ignored, along with special `category_link*` settings. `return_full` is used along with `category_type` and will preferably return the "full" variant of category link settings, i.e. `full_category_link*`; if they don't exist, the `category_link*` value is prepended with `"names of"`. `noerror` says to not throw an error when encountering entry placetypes that would be disallowed. ]==] function export.get_placetype_display_form(placetype, category_type, return_full, noerror) local from_category = not not category_type local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category) if canon_placetype then local raw_link local function is_linked_string(str) return type(str) == "string" and str:find("%[%[") end if category_type then local fetched_full local function fetch_maybe_full(prop) local retval = ptdata["full_" .. prop] if retval ~= nil then if return_full then return retval, true else internal_error("Saw full_" .. prop .. "=%s but `return_full` not set, can't handle", retval) end end return ptdata[prop], false end local function maybe_prefix(str) if return_full and not fetched_full then return "names of " .. str else return str end end -- Careful with `false` as possible value. if category_type == "top-level" then raw_link, fetched_full = fetch_maybe_full("category_link_top_level") elseif category_type == "noncity" then raw_link, fetched_full = fetch_maybe_full("category_link_before_noncity") elseif category_type == "city" then raw_link, fetched_full = fetch_maybe_full("category_link_before_city") else internal_error('Unrecognized value for `category_type` %s, should be "top-level", "noncity" or "city"', category_type) end if type(raw_link) == "string" then return maybe_prefix(raw_link), ptdata elseif raw_link ~= nil then return raw_link, ptdata end raw_link, fetched_full = fetch_maybe_full("category_link") if raw_link == false then return raw_link, ptdata end if is_linked_string(raw_link) then return maybe_prefix(raw_link), ptdata end if ptmatch == "plural" then raw_link, fetched_full = fetch_maybe_full("plural_link") if raw_link == false then return raw_link, ptdata end if is_linked_string(raw_link) then return maybe_prefix(raw_link), ptdata end end if raw_link == nil then raw_link, fetched_full = fetch_maybe_full("link") end if raw_link == false then return raw_link, ptdata end return maybe_prefix(make_placetype_link(raw_link, canon_placetype, placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror)), ptdata else if ptmatch == "plural" then raw_link = ptdata.plural_link if raw_link == false then process_error("Placetype %s cannot appear plural", placetype) end if is_linked_string(raw_link) then return raw_link, ptdata end end if raw_link == nil then raw_link = ptdata.link end return make_placetype_link(raw_link, canon_placetype, placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror), ptdata end end return nil end local function resolve_unlinked_placename_display_aliases(placetype, placename) local equiv_placetypes = export.get_placetype_equivs(placetype) for i, equiv in ipairs(equiv_placetypes) do equiv_placetypes[i] = equiv.placetype end local all_display_aliases_found = {} local all_others_found = {} for group, key, spec in m_locations.iterate_matching_location { placetypes = equiv_placetypes, placename = placename, alias_resolution = "display", } do if spec.alias_of and spec.display then insert(all_display_aliases_found, {group, key, spec, spec.display_as_full}) else insert(all_others_found, {group, key, spec}) end end if not all_display_aliases_found[1] then return placename elseif all_display_aliases_found[2] then internal_error("Found multiple matching display aliases for placename %s, placetype %s: " .. "all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found, all_others_found) elseif all_others_found[1] then internal_error("Found a display alias along with other possible meanings for placename %s, placetype %s: " .. "all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found, all_others_found) else local group, key, spec, as_full = unpack(all_display_aliases_found[1]) local full, elliptical = m_locations.key_to_placename(group, key) return as_full and full or elliptical end end --[==[ If `placename` of type `placetype` is a display alias, convert it to its canonical form; otherwise, return unchanged. Display aliases transform certain placenames into canonical displayed forms. For example, if any of `country/US`, `country/USA` or `country/United States of America` (or `c/US`, etc.) are given, the result will be displayed as `United States`. '''NOTE''': Display aliases change what is displayed from what the editor wrote in the Wikitext. As a result, they should (a) be non-political in nature, and (b) not involve a change where the word `the` needs to be added or removed. For example, normalizing `US` and `USA` to `United States` for display purposes is OK but normalizing `Burma` to `Myanmar` is not (instead a cat alias should be used) because the terms `Burma` and `Myanmar` have clear political connotations. Similarly, we have a display alias that maps the old name of `Macedonia` as a country (but not a region!) to `North Macedonia`, but `Republic of Macedonia` is mapped to `North Macedonia` only as a cat alias because the two terms differ in their use of `the`. (For example, if we had a display alias mapping `Republic of Macedonia` to `North Macedonia`, the call {{tl|place|en|the <<capital city>> of the <<c/Republic of Macedonia>>}} would wrongly display as `the [[capital city]] of the [[North Macedonia]]`.) Generally, display normalizations tend to involve alternative forms (e.g. abbreviations, ellipses, foreign spellings) where the normalization improves clarity and consistency. ]==] function export.resolve_placename_display_aliases(placetype, placename) -- If the placename is a link, apply the alias inside the link. -- This pattern matches both piped and unpiped links. If the link is not piped, the second capture (linktext) will -- be empty. local link, linktext = rmatch(placename, "^%[%[([^|%[%]]+)|?([^|%[%]]-)%]%]$") if link then if linktext ~= "" then local alias = resolve_unlinked_placename_display_aliases(placetype, linktext) return "[[" .. link .. "|" .. alias .. "]]" else local alias = resolve_unlinked_placename_display_aliases(placetype, link) return "[[" .. alias .. "]]" end else return resolve_unlinked_placename_display_aliases(placetype, placename) end end --[==[ Generate the "prefixed" version of a bare key, i.e. prefix it with `the` if correct for this key. ]==] function export.get_prefixed_key(key, spec) if spec.the then return "the " .. key else return key end end -- Necessary for use by [[Module:place]]. FIXME: Reorganize the modules so this isn't necessary. export.iterate_matching_location = m_locations.iterate_matching_location --[=[ Iterator that iterates over holonyms in `place_desc`. If `first_holonym_index` is given, start iterating at the specified holonym and stop either when there are no more holonyms or a holonym with modifier `:also` is found. If `first_holonym_index` is nil or omitted, iterate over all holonyms regardless. If `include_raw_text_holonyms` is specified, raw text holonyms (those not of the form `placetype/placename`) are returned as well; they can be identified by the fact that the `placetype` field in the holonym structure is nil. Two values are returned at each iteration, the holonym index and holonym structure, similar to `ipairs()`. ]=] function export.get_holonyms_to_check(place_desc, first_holonym_index, include_raw_text_holonyms) local stop_at_also = not not first_holonym_index return function(place_desc, index) while true do index = index + 1 local this_holonym = place_desc.holonyms[index] -- If we were passed in a starting holonym index, go up to but not including a holonym marked with `:also` -- (continue_cat_loop); the categorization code will then restart the loop at that holonym. That holonym -- will have `:also` marked on it, so make sure not to stop immediately if the first holonym is marked with -- `:also`. if not this_holonym or stop_at_also and index > first_holonym_index and this_holonym.continue_cat_loop then return nil end -- If not placetype, we're processing raw text, which we normally want to skip. if include_raw_text_holonyms or this_holonym.placetype then return index, this_holonym end end end, place_desc, first_holonym_index and first_holonym_index - 1 or 0 end --[==[ If the holonym in `data` (in the format as passed to a category handler) refers to a known location, iterate over all such known locations, returning for each location the corresponding key, spec and group as well as the trail of ancestral containers. Unlike `iterate_matching_location()`, this specifically checks that there is no mismatch between the location's containers at any level and any of the following holonyms in the {{tl|place}} spec. The fields in `data` are: * `holonym_placetype`: The placetype of the holonym. It can actually be a list of possible placetypes, as with `iterate_matching_location()`. * `holonym_placename`: The placename of the holonym. * `holonym_index`: The index of the holonym among the holonyms in `place_desc`, or nil if the holonym is not among the holonyms in `place_desc`. (If a holonym index is given, we check for container mismatches among the holonyms following the specified index, stopping either when encountering a holonym marked with modifier `:also` or, if none exist, when we run out of holonyms. If no holonym index is given, we check all holonyms for container mismatches.) * `place_desc`: Description of the place; used for the holonyms, to check for container mismatches. Returns four values: the location group, the canonical key by which the location is known, the spec object describing the location and the trail of ancestral containers for the location. The first three values are the same as for `iterate_matching_location`. ]==] function export.iterate_matching_holonym_location(data) local holonym_placetype, holonym_placename, holonym_index, place_desc = data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc local matching_location_iterator = m_locations.iterate_matching_location { placetypes = holonym_placetype, placename = holonym_placename, } return function() while true do local group, key, spec = matching_location_iterator() if not group then return nil end local container_trail = {} -- For each level of container, check that there are no mismatches (i.e. other location of the same -- placetype) mentioned. We allow a mismatch at a given level if there's also a match with the container -- at that level. For example, in the case of Kansas City, defined in [[Module:place/locations]] as a city -- in Missouri, if we define it as {{tl|place|city|s/Missouri,Kansas}}, we ignore the mismatching state of -- Kansas because the correct state of Missouri was also mentioned. But imagine we are defining Newark, -- Delaware as {{tl|place|city|s/Delaware|c/US}} and (as is the case) we have an entry for Newark, New -- Jersey in [[Module:place/locations]]. Just because the containing location `US` matches isn't enough, -- because Newark, NJ also has New Jersey as a containing location and there's a mismatch at that level. If -- there are no mismatches at any level we assume we're dealing with the right known location. -- -- If at a given level there are multiple containing locations, we count a match if any holonym matches any -- containing location, and a mismatch only if a holonym exists of the same placetype that doesn't match any -- containing location. local containers_mismatch = false for containers in m_locations.iterate_containers(group, key, spec) do insert(container_trail, containers) local match_at_level = false local mismatch_at_level = false for other_holonym_index, other_holonym in export.get_holonyms_to_check(place_desc, holonym_index and holonym_index + 1 or nil) do local other_source_holonym = other_holonym.augmented_from_holonym if other_source_holonym and other_source_holonym.placetype == holonym_placetype and other_source_holonym.unlinked_placename ~= holonym_placename then -- Ignore holonyms added during the augmentation process for other holonyms of the same -- placetype as the placetype of the holonym we're considering. See comment in -- augment_holonyms_with_container() for why we do this. -- continue; grrr, no 'continue' in Lua else local holonym_matches_at_level = false local holonym_exists_with_same_placetype = false for _, container in ipairs(containers) do if not container.spec.no_check_holonym_mismatch then local full_container_placename, elliptical_container_placename = m_locations.key_to_placename(container.group, container.key) local placetypes = container.spec.placetype if type(placetypes) ~= "table" then placetypes = {placetypes} end local placetype_equivs = {} for _, pt in ipairs(placetypes) do m_table.extend(placetype_equivs, export.get_placetype_equivs(pt)) end local this_holonym_matches = export.get_equiv_placetype_prop_from_equivs( placetype_equivs, function(placetype) return other_holonym.placetype == placetype and (other_holonym.unlinked_placename == full_container_placename or other_holonym.unlinked_placename == elliptical_container_placename) end ) if this_holonym_matches then holonym_matches_at_level = true break end local this_holonym_exists_with_same_placetype = export.get_equiv_placetype_prop_from_equivs( placetype_equivs, function(placetype) return other_holonym.placetype == placetype end ) if this_holonym_exists_with_same_placetype then -- We seem to have a mismatch at this level. But before we decide conclusively that this -- is the case, check to see whether the putative mismatch is an alias and matches when -- we resolve the alias. for oh_group, oh_key, oh_spec, oh_container_trail in export.iterate_matching_holonym_location { holonym_placetype = other_holonym.placetype, holonym_placename = other_holonym.unlinked_placename, holonym_index = other_holonym_index, place_desc = place_desc, } do local oh_full_placename, oh_elliptical_placename = m_locations.key_to_placename(oh_group, oh_key) if oh_full_placename == full_container_placename or oh_elliptical_placename == elliptical_container_placename then -- Alias matched when resolved. this_holonym_matches = true break end end if this_holonym_matches then -- Alias matched above when resolved. holonym_matches_at_level = true break else -- Not an alias, or doesn't match when resolved. We have a true mismatch. holonym_exists_with_same_placetype = true end end end end if holonym_matches_at_level then match_at_level = true break end if holonym_exists_with_same_placetype then mismatch_at_level = true end end end if not match_at_level and mismatch_at_level then containers_mismatch = true break end end if not containers_mismatch then return group, key, spec, container_trail end end end end --[==[ If the holonym in `data` (in the format as passed to a category handler) refers to a known location, find and return the corresponding key, spec and group as well as the trail of ancestral containers. This is like `iterate_matching_holonym_location()` but throws an error if more than one location matches. (An example where this would happen is {{tl|place|en|neighborhood|city/Newcastle}}, because there are two known locations named Newcastle. To fix this, specify additional following disambiguating holonyms, e.g. {{tl|place|en|neighborhood|city/Newcastle|s/New South Wales}}. ]==] function export.find_matching_holonym_location(data) local all_found = {} for group, key, spec, container_trail in export.iterate_matching_holonym_location(data) do insert(all_found, {group, key, spec, container_trail}) end if not all_found[1] then return nil elseif all_found[2] then local holonym_placetype = data.holonym_placetype if type(holonym_placetype) == "table" then holonym_placetype = concat(holonym_placetype, ",") end local found_keys = {} for _, found in ipairs(all_found) do local _, key, _, _ = unpack(found) insert(found_keys, key) end error(("Found multiple matching locations for holonym '%s/%s'; specify disambiguating context in the " .. "containing holonyms: %s"):format(holonym_placetype, data.holonym_placename, dump(found_keys))) else return unpack(all_found[1]) end end ------------------------------------------------------------------------------------------ -- Placename and placetype data -- ------------------------------------------------------------------------------------------ --[==[ var: This is a map from aliases to their canonical forms. Any placetypes appearing as keys here will be mapped to their canonical forms in all respects, including the display form. Contrast entries in 'placetype_data' with a fallback, which applies to categorization and other processes but not to display. The most important aliases are for holonym placetypes, particularly those that occur often such as "country", "state", "province" and the like. Particularly long placetypes that mostly occur as entry placetypes (e.g. "census-designated place") can be given abbreviations, but it is generally preferred to spell out the entry placetype. Note also that we purposely avoid certain abbreviations that would be ambiguous (e.g. "d", which could variously be interpreted as "department", "district" or "division"). ]==] export.placetype_aliases = { ["acomm"] = "autonomous community", ["adr"] = "administrative region", ["adterr"] = "administrative territory", -- Pakistan ["aobl"] = "autonomous oblast", ["aokr"] = "autonomous okrug", ["ap"] = "autonomous province", ["apref"] = "autonomous prefecture", ["aprov"] = "autonomous province", ["ar"] = "autonomous region", ["arch"] = "archipelago", ["arep"] = "autonomous republic", ["aterr"] = "autonomous territory", ["atu"] = "autonomous territorial unit", ["bor"] = "borough", ["c"] = "country", ["can"] = "canton", ["carea"] = "council area", ["cc"] = "constituent country", ["cdblock"] = "community development block", ["cdep"] = "Crown dependency", ["CDP"] = "census-designated place", ["cdp"] = "census-designated place", ["clcity"] = "county-level city", ["co"] = "county", ["cobor"] = "county borough", ["colcity"] = "county-level city", ["coll"] = "collectivity", ["comm"] = "community", ["cont"] = "continent", ["contr"] = "continental region", ["contregion"] = "continental region", ["cpar"] = "civil parish", ["damun"] = "direct-administered municipality", ["dep"] = "dependency", ["department capital"] = "departmental capital", ["dept"] = "department", ["depterr"] = "dependent territory", ["dist"] = "district", ["distmun"] = "district municipality", ["div"] = "division", ["emp"] = "empire", ["fpref"] = "French prefecture", ["gov"] = "governorate", ["govnat"] = "governorate", ["home-rule city"] = "home rule city", ["home-rule municipality"] = "home rule municipality", ["inner-city area"] = "inner city area", ["ires"] = "Indian reservation", ["isl"] = "island", ["lbor"] = "London borough", ["lga"] = "local government area", ["lgarea"] = "local government area", ["lgd"] = "local government district", ["lgdist"] = "local government district", ["metbor"] = "metropolitan borough", ["metcity"] = "metropolitan city", ["metmun"] = "metropolitan municipality", ["mtn"] = "mountain", ["mun"] = "municipality", ["mundist"] = "municipal district", ["nonmetropolitan county"] = "non-metropolitan county", ["obl"] = "oblast", ["okr"] = "okrug", ["p"] = "province", ["par"] = "parish", ["parmun"] = "parish municipality", ["pen"] = "peninsula", ["plcity"] = "prefecture-level city", ["plcolony"] = "Polish colony", ["pref"] = "prefecture", ["prefcity"] = "prefecture-level city", ["preflcity"] = "prefecture-level city", ["prov"] = "province", ["r"] = "region", ["range"] = "mountain range", ["rcm"] = "regional county municipality", ["rcomun"] = "regional county municipality", ["rdist"] = "regional district", ["rep"] = "republic", ["rhrom"] = "rural hromada", ["riv"] = "river", ["rmun"] = "regional municipality", ["robor"] = "royal borough", ["romp"] = "Roman province", ["runit"] = "regional unit", ["rurmun"] = "rural municipality", ["s"] = "state", ["sar"] = "special administrative region", ["shrom"] = "settlement hromada", ["spref"] = "subprefecture", ["sprefcity"] = "sub-prefectural city", ["sprovcity"] = "subprovincial city", ["submet city"] = "sub-metropolitan city", ["submetropolitan city"] = "sub-metropolitan city", ["sub-prefecture-level city"] = "sub-prefectural city", ["sub-provincial city"] = "subprovincial city", ["sub-provincial district"] = "subprovincial district", ["terr"] = "territory", ["terrauth"] = "territorial authority", ["twp"] = "township", ["twpmun"] = "township municipality", ["uauth"] = "unitary authority", ["ucomm"] = "unincorporated community", ["udist"] = "unitary district", ["uhrom"] = "urban hromada", ["uterr"] = "union territory", ["utwpmun"] = "united township municipality", ["val"] = "valley", ["vdc"] = "village development committee", ["vil"] = "village", ["voi"] = "voivodeship", ["wcomm"] = "Welsh community", } local no_link_def_article = {link = false, article = ""} 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"] = {"^Vịnh của "}, ["lake"] = {"^Hồ của "}, ["country"] = {"^Republic of ", " Republic$"}, ["republic"] = {"^Republic of ", " Republic$"}, ["region"] = {"^Vùng của "}, ["river"] = {"^Sông của "}, ["local government area"] = {"^Shire of "}, ["county"] = {"^Shire of "}, ["Indian reservation"] = {" Reservation", " Nation"}, ["tribal jurisdictional area"] = {" Reservation", " Nation"}, } --[==[ var: If any of the following holonyms are present, the associated holonyms are automatically added to the end of the list of holonyms for categorization (but not display) purposes. ]==] export.cat_implications = { ["region"] = { ["Eastern Europe"] = {"continent/Europe"}, ["Central Europe"] = {"continent/Europe"}, ["Western Europe"] = {"continent/Europe"}, ["South Europe"] = {"continent/Europe"}, ["Southern Europe"] = {"continent/Europe"}, ["Northern Europe"] = {"continent/Europe"}, ["Northeast Europe"] = {"continent/Europe"}, ["Northeastern Europe"] = {"continent/Europe"}, ["Southeast Europe"] = {"continent/Europe"}, ["Southeastern Europe"] = {"continent/Europe"}, ["North Caucasus"] = {"continent/Europe"}, ["South Caucasus"] = {"continent/Asia"}, ["South Asia"] = {"continent/Asia"}, ["Southern Asia"] = {"continent/Asia"}, ["East Asia"] = {"continent/Asia"}, ["Eastern Asia"] = {"continent/Asia"}, ["Central Asia"] = {"continent/Asia"}, ["West Asia"] = {"continent/Asia"}, ["Western Asia"] = {"continent/Asia"}, ["Southeast Asia"] = {"continent/Asia"}, ["North Asia"] = {"continent/Asia"}, ["Northern Asia"] = {"continent/Asia"}, ["Anatolia"] = {"continent/Asia"}, ["Asia Minor"] = {"continent/Asia"}, ["Mesopotamia"] = {"continent/Asia"}, ["North Africa"] = {"continent/Africa"}, ["Central Africa"] = {"continent/Africa"}, ["West Africa"] = {"continent/Africa"}, ["East Africa"] = {"continent/Africa"}, ["Southern Africa"] = {"continent/Africa"}, ["Central America"] = {"continent/Central America"}, ["Caribbean"] = {"continent/North America"}, ["Polynesia"] = {"continent/Oceania"}, ["Micronesia"] = {"continent/Oceania"}, ["Melanesia"] = {"continent/Oceania"}, ["Siberia"] = {"country/Russia", "continent/Asia"}, ["Russian Far East"] = {"country/Russia", "continent/Asia"}, ["South Wales"] = {"constituent country/Wales", "continent/Europe"}, ["Balkans"] = {"continent/Europe"}, ["West Bank"] = {"country/Palestine", "continent/Asia"}, ["Gaza"] = {"country/Palestine", "continent/Asia"}, ["Gaza Strip"] = {"country/Palestine", "continent/Asia"}, } } ------------------------------------------------------------------------------------------ -- Category and display handlers -- ------------------------------------------------------------------------------------------ local function city_type_cat_handler(data) local entry_placetype = data.entry_placetype local generic_before_non_cities = export.get_placetype_prop(entry_placetype, "generic_before_non_cities") if not generic_before_non_cities then internal_error("city_type_cat_handler called on placetype %s that doesn't have a `generic_before_non_cities`" .. " setting", entry_placetype) end local plural_entry_placetype = export.pluralize_placetype(entry_placetype) local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group and not spec.is_former_place and not spec.is_city then -- Categorize both in key, and in the larger polity that the key is part of, e.g. [[Hirakata]] goes in both -- "Cities in Osaka Prefecture" and "Cities in Japan". (But don't do the latter if no_container_cat is set.) local cap_plural_entry_placetype = ucfirst(plural_entry_placetype) local retcats = {("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities, export.get_prefixed_key(key, spec))} if container_trail[1] and not spec.no_container_cat then for _, container in ipairs(container_trail[1]) do insert(retcats, ("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities, export.get_prefixed_key(container.key, container.spec))) end end return retcats end end local function capital_city_cat_handler(data, non_city) local holonym_placetype, holonym_placename, holonym_index, place_desc = data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc -- The first time we're called we want to return something; otherwise we will be called for later-mentioned -- holonyms, which can result in wrongly classifying into e.g. `National capitals`. Simulate the loop in -- find_placetype_cat_specs() over holonyms so we get the proper `Cities in ...` categories as well as the capital -- category/categories we add below. local retcats if not non_city and place_desc.holonyms then for h_index, holonym in export.get_holonyms_to_check(place_desc, holonym_index) do local h_placetype, h_placename = holonym.placetype, holonym.unlinked_placename retcats = city_type_cat_handler { entry_placetype = "city", holonym_placetype = h_placetype, holonym_placename = h_placename, holonym_index = h_index, place_desc = place_desc, } if retcats then break end end end if not retcats then retcats = {} end -- Now find the appropriate capital-type category for the placetype of the holonym, e.g. 'State capitals'. If we -- recognize the holonym among the known holonyms in [[Module:place/locations]], also add a category like 'State -- capitals of the United States'. Truncate e.g. 'autonomous region' to 'region', 'union territory' to 'territory' -- when looking up the type of capital category, if we can't find an entry for the holonym placetype itself (there's -- an entry for 'autonomous community'). local capital_cat = export.placetype_to_capital_cat[holonym_placetype] if not capital_cat then capital_cat = export.placetype_to_capital_cat[holonym_placetype:gsub("^.* ", "")] end if capital_cat then capital_cat = ucfirst(capital_cat) local inserted_specific_variant_cat = false if holonym_index then -- Now find the first recognized holonym location. We don't stop when :also is seen because of the common pattern -- where we use :also to specify that a given city is the capital at multiple surrounding levels. local matching_group, matching_key, matching_spec, matching_container_trail, matching_holonym_index for h_index = holonym_index, #place_desc.holonyms do if place_desc.holonyms[h_index].placetype then matching_group, matching_key, matching_spec, matching_container_trail = export.find_matching_holonym_location { holonym_placetype = place_desc.holonyms[h_index].placetype, holonym_placename = place_desc.holonyms[h_index].unlinked_placename, holonym_index = h_index, place_desc = place_desc, } if matching_group then matching_holonym_index = h_index break end end end if matching_holonym_index == holonym_index then if matching_container_trail[1] and not matching_spec.no_container_cat then for _, container in ipairs(matching_container_trail[1]) do insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key, container.spec))) inserted_specific_variant_cat = true end end elseif matching_holonym_index then -- Check to make sure that the holonym placetype we were called on is listed among the -- divtypes of the location we found. local function insert_specific_variant_if_possible(key, spec) return export.get_equiv_placetype_prop(holonym_placetype, function(pt) local plural_holonym_placetype = export.pluralize_placetype(pt) local saw_matching_div if spec.divs then local divs = spec.divs if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) ~= "table" then div = {type = div} end if plural_holonym_placetype == div.type then saw_matching_div = true break end end end if saw_matching_div then insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(key, spec))) return true end return false end) end if insert_specific_variant_if_possible(matching_key, matching_spec) then inserted_specific_variant_cat = true elseif not matching_spec.no_container_cat then for _, containers in ipairs(matching_container_trail) do local saw_no_container_cat = false for _, container in ipairs(containers) do if insert_specific_variant_if_possible(container.key, container.spec) then inserted_specific_variant_cat = true break end saw_no_container_cat = saw_no_container_cat or container.spec.no_container_cat end if inserted_specific_variant_cat or saw_no_container_cat then break end end end end else -- This happens when in an invocation like {{place|en|capital city|s/Haryana,Punjab}} for -- [[Chandigarh]]. We fall back to older code that doesn't depend on the holonym index existing. -- FIXME: This may not be necessary. In the example just given, when processing Haryana we add to -- [[:Category:en:State capitals of India]], and nothing extra gets added when processing Punjab. -- Possibly we can just skip this case entirely. local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group and container_trail[1] and not spec.no_container_cat then for _, container in ipairs(container_trail[1]) do insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key, container.spec))) inserted_specific_variant_cat = true end end end if not inserted_specific_variant_cat then insert(retcats, capital_cat) end else -- We didn't recognize the holonym placetype; just put in 'Capital cities'. insert(retcats, "Capital cities") end return retcats end --[=[ This is invoked specially for all placetypes (see the `*` placetype key at the bottom of `placetype_data`). This is used in two ways: # To add pages to generic holonym categories like [[:Category:en:Places in Merseyside, England]] (and [[:Category:en:Places in England]]) for any pages that have `co/Merseyside` as their holonym. # To categorize demonyms in bare placename categories like [[:Category:en:Merseyside, England]] if the demonym description mentions `co/Merseyside` and doesn't mention a more specific placename that also has a category. (In this case there are none, but we can have demonyms at multiple levels, e.g. in France for individual villages, departments, administrative regions, and for the entire country, and for example we only want to categorize a demonym into [[:Category:France]] if no more specific category applies.) Unlike when invoked from {{tl|place}}, a demonym invocation only adds the most specific holonym category and not the category of any containing polity (hence if we add [[:Category:en:Merseyside, England]] we won't also add [[:Category:England]]). This code also handles cities; e.g. for the first use case above, it would be used to add a page that has `city/Boston` as a holonym to [[:Category:en:Places in Boston]], along with [[:Category:en:Places in Massachusetts, USA]] and [[:Category:en:Places in the United States]]. The city handler tries to deal with the possibility of multiple cities having the same name. For example, the code in [[Module:place/locations]] knows about the city of [[Columbus]], [[Ohio]], which has containing polities `Ohio` (a state) and `the United States` (a country). If either containing polity is mentioned, the handler proceeds to return the key `Columbus` (along with `Ohio, USA` and `the United States`). Otherwise, if any other state or country is mentioned, the handler returns nothing, and otherwise it assumes the mentioned city is the one we're considering and returns `Columbus` etc. This works correctly if the place only mentions Ohio and a holonym for a Columbus in a different country is encountered, because of the function `augment_holonyms_with_container`, which adds the US as a holonym when Ohio is encountered. The single parameter `data` is as in category handlers. The return value is a list of categories (without the preceding language code). ]=] local function generic_place_cat_handler(data) local from_demonym = data.from_demonym local retcats = {} local function insert_retkey(key, spec) if from_demonym then insert(retcats, key) else insert(retcats, ("Địa danh của %s"):format(export.get_prefixed_key(key, spec))) end end local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group then if not spec.no_generic_place_cat then -- This applies to continents and continental regions. insert_retkey(key, spec) end -- Categorize both in key, and in the larger location(s) that the key is part of, e.g. [[Hirakata]] goes in -- both [[Category:Places in Osaka Prefecture, Japan]] and [[Category:Places in Japan]]. But not when -- no_container_cat is set (e.g. for 'United Kingdom'). if not spec.no_container_cat then for _, container_set in ipairs(container_trail) do local stop_adding_containers = false for _, container in ipairs(container_set) do if not container.spec.no_generic_place_cat then insert_retkey(container.key, container.spec) end if container.spec.no_container_cat then stop_adding_containers = true end end if stop_adding_containers then break end end end return retcats end end --[==[ Special category handler run for all placetypes that checks for specified division placetypes of known locations and categorizes appropriately. ]==] function export.political_division_cat_handler(data) if data.from_demonym then return end local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group then local divlists = {} if spec.divs then insert(divlists, spec.divs) end if spec.addl_divs then insert(divlists, spec.addl_divs) end for _, divlist in ipairs(divlists) do if type(divlist) ~= "table" then divlist = {divlist} end for _, div in ipairs(divlist) do if type(div) == "string" then div = {type = div} end local sgdiv = export.maybe_singularize_placetype(div.type) or div.type local prep = div.prep or "of" local cat_as = div.cat_as or div.type if type(cat_as) ~= "table" then cat_as = {cat_as} end if not export.placetype_data[sgdiv] then internal_error("Placetype %s associated with known location key %s and data %s not found in " .. "`placetype_data`", sgdiv, key, spec) end if sgdiv == data.entry_placetype then local retcats = {} for _, pt_cat in ipairs(cat_as) do if type(pt_cat) == "string" then pt_cat = {type = pt_cat} end local pt_prep = pt_cat.prep or prep insert(retcats, ucfirst(pt_cat.type) .. " " .. pt_prep .. " " .. export.get_prefixed_key(key, spec)) end return retcats end end end end end --[==[ This is used to add pages to "bare" categories like [[:Category:en:Georgia, USA]] for `[[Georgia]]` and any foreign-language terms that are translations of the state of Georgia. We look at the page title (or its overridden value in {{para|pagename}}) as well as the glosses in {{para|t}}/{{para|t2}} etc., various extra-info values such as the modern names in {{para|modern}}, and any values specified using a form-of directive. We need to pay attention to the entry placetypes specified so we don't overcategorize; e.g. the US state of Georgia is `[[Джорджия]]` in Russian but the country of Georgia is `[[Грузия]]`, and if we just looked for matching names, we'd get both Russian terms categorized into both [[:Category:ru:Georgia, USA]] and [[:Category:ru:Georgia]]. We also need to check the containing holonyms to make sure there isn't a mismatch (so we don't e.g. categorize Newark, Delaware in [[:Category:en:Newark]], which is intended for Newark, New Jersey). ]==] function export.get_bare_categories(args, overall_place_spec) local bare_cats = {} local place_descs = overall_place_spec.descs local possible_placetypes_by_place_desc = {} for i, place_desc in ipairs(place_descs) do possible_placetypes_by_place_desc[i] = {} for _, placetype in ipairs(place_desc.placetypes) do if not export.placetype_is_ignorable(placetype) then local equivs = export.get_placetype_equivs(placetype, {register_former_as_non_former = true}) for _, equiv in ipairs(equivs) do insert(possible_placetypes_by_place_desc[i], equiv.placetype) end end end end local function check_term(term) -- Treat Wikipedia links like local ones. term = term:gsub("%[%[w:", "[["):gsub("%[%[wikipedia:", "[[") term = export.remove_links_and_html(term) term = term:gsub("^ ", "") 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["Hạt " .. unlinked_placename .. ", Ireland"] or m_locations.northern_ireland_counties["Hạt " .. unlinked_placename .. ", Bắc Ireland"] then return prefix_display_handler("Hạt", holonym_placename) end -- Display handler for Taiwanese counties. Taiwanese counties are displayed as e.g. "[[Chiayi]] County". if m_locations.taiwan_counties[unlinked_placename .. ", Đài Loan"] then return suffix_display_handler("Hạt", holonym_placename) end -- Display handler for Romanian counties. Romanian counties are displayed as e.g. "[[Cluj]] County". if m_locations.romania_counties[unlinked_placename .. ", România"] then return suffix_display_handler("Hạt", 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 .. ", Nhật Bản"] 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 .. ", Bulgaria"] or m_locations.iran_provinces[unlinked_placename .. ", Iran"] or m_locations.laos_provinces[unlinked_placename .. ", Lào"] or m_locations.north_korea_provinces[unlinked_placename .. ", Cộng hòa Dân chủ Nhân dân Triều Tiên"] or m_locations.south_korea_provinces[unlinked_placename .. ", Hàn Quốc"] or m_locations.thailand_provinces[unlinked_placename .. ", Thái Lan"] or m_locations.turkey_provinces[unlinked_placename .. ", Thổ Nhĩ Kỳ"] or m_locations.vietnam_provinces[unlinked_placename .. ", Việt Nam"] 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 .. ", 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 = "của", 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", }, ["đặc điểm tự nhiên!"] = { category_link = "tổng hợp các yếu tố vật chất hình thành tồn tại", bare_category_parent = "địa danh", }, ["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", }, ["địa danh!"] = { generic_before_non_cities = "của", generic_before_cities = "của", 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 = "tên", }, ["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 = true, 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 return export rnp11rnytksjozxj72g78a1rkvy81sb 2349930 2349918 2026-05-03T13:55:28Z Hiyuune 50834 2349930 Scribunto text/plain local export = {} export.force_cat = false -- set to true for testing local m_locations = require("Module:place/locations") local m_links = require("Module:links") local m_table = require("Module:table") local m_strutils = require("Module:string utilities") local debug_track_module = "Module:debug/track" local en_utilities_module = "Module:en-utilities" local dump = mw.dumpObject local insert = table.insert local concat = table.concat local internal_error = m_locations.internal_error export.internal_error = internal_error local process_error = m_locations.process_error export.process_error = process_error local unpack = unpack or table.unpack -- Lua 5.2 compatibility local ucfirst = m_strutils.ucfirst local ulower = m_strutils.lower local rmatch = m_strutils.match local split = m_strutils.split --[==[ intro: This module contains placetype data used by [[Module:place]] and {{tl|place}}, along with a significant amount of code to work with both placetypes and locations, as well as some placename-related info (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 else placetype = 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 = "tên" 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 `"của"` 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 "của" 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 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 link end end --[==[ Get the display form of a placetype by looking it up in `placetype_data`. If the placetype is recognized, or is the plural of a recognized placetype, the corresponding linked display form is returned (with plural placetypes displaying as plural but linked to the singular form of the placetype). Otherwise, return nil. If we're generating the description of a category, `category_type` should be set to one of `"top-level"` (for top-level categories like [[:Category:Neighborhoods]]), `"noncity"` (for non-city categories like [[:Category:Neighborhoods in Illinois, USA]]) or `"city"` (for city categories like [[:Category:Neighborhoods of Chicago]]). Otherwise, we're generating the description for use in formatting a {{tl|place}} call, and category-only placetypes ending in `!` will be ignored, along with special `category_link*` settings. `return_full` is used along with `category_type` and will preferably return the "full" variant of category link settings, i.e. `full_category_link*`; if they don't exist, the `category_link*` value is prepended with `"names of"`. `noerror` says to not throw an error when encountering entry placetypes that would be disallowed. ]==] function export.get_placetype_display_form(placetype, category_type, return_full, noerror) local from_category = not not category_type local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category) if canon_placetype then local raw_link local function is_linked_string(str) return type(str) == "string" and str:find("%[%[") end if category_type then local fetched_full local function fetch_maybe_full(prop) local retval = ptdata["full_" .. prop] if retval ~= nil then if return_full then return retval, true else internal_error("Saw full_" .. prop .. "=%s but `return_full` not set, can't handle", retval) end end return ptdata[prop], false end local function maybe_prefix(str) if return_full and not fetched_full then return "names of " .. str else return str end end -- Careful with `false` as possible value. if category_type == "top-level" then raw_link, fetched_full = fetch_maybe_full("category_link_top_level") elseif category_type == "noncity" then raw_link, fetched_full = fetch_maybe_full("category_link_before_noncity") elseif category_type == "city" then raw_link, fetched_full = fetch_maybe_full("category_link_before_city") else internal_error('Unrecognized value for `category_type` %s, should be "top-level", "noncity" or "city"', category_type) end if type(raw_link) == "string" then return maybe_prefix(raw_link), ptdata elseif raw_link ~= nil then return raw_link, ptdata end raw_link, fetched_full = fetch_maybe_full("category_link") if raw_link == false then return raw_link, ptdata end if is_linked_string(raw_link) then return maybe_prefix(raw_link), ptdata end if ptmatch == "plural" then raw_link, fetched_full = fetch_maybe_full("plural_link") if raw_link == false then return raw_link, ptdata end if is_linked_string(raw_link) then return maybe_prefix(raw_link), ptdata end end if raw_link == nil then raw_link, fetched_full = fetch_maybe_full("link") end if raw_link == false then return raw_link, ptdata end return maybe_prefix(make_placetype_link(raw_link, canon_placetype, placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror)), ptdata else if ptmatch == "plural" then raw_link = ptdata.plural_link if raw_link == false then process_error("Placetype %s cannot appear plural", placetype) end if is_linked_string(raw_link) then return raw_link, ptdata end end if raw_link == nil then raw_link = ptdata.link end return make_placetype_link(raw_link, canon_placetype, placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror), ptdata end end return nil end local function resolve_unlinked_placename_display_aliases(placetype, placename) local equiv_placetypes = export.get_placetype_equivs(placetype) for i, equiv in ipairs(equiv_placetypes) do equiv_placetypes[i] = equiv.placetype end local all_display_aliases_found = {} local all_others_found = {} for group, key, spec in m_locations.iterate_matching_location { placetypes = equiv_placetypes, placename = placename, alias_resolution = "display", } do if spec.alias_of and spec.display then insert(all_display_aliases_found, {group, key, spec, spec.display_as_full}) else insert(all_others_found, {group, key, spec}) end end if not all_display_aliases_found[1] then return placename elseif all_display_aliases_found[2] then internal_error("Found multiple matching display aliases for placename %s, placetype %s: " .. "all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found, all_others_found) elseif all_others_found[1] then internal_error("Found a display alias along with other possible meanings for placename %s, placetype %s: " .. "all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found, all_others_found) else local group, key, spec, as_full = unpack(all_display_aliases_found[1]) local full, elliptical = m_locations.key_to_placename(group, key) return as_full and full or elliptical end end --[==[ If `placename` of type `placetype` is a display alias, convert it to its canonical form; otherwise, return unchanged. Display aliases transform certain placenames into canonical displayed forms. For example, if any of `country/US`, `country/USA` or `country/United States of America` (or `c/US`, etc.) are given, the result will be displayed as `United States`. '''NOTE''': Display aliases change what is displayed from what the editor wrote in the Wikitext. As a result, they should (a) be non-political in nature, and (b) not involve a change where the word `the` needs to be added or removed. For example, normalizing `US` and `USA` to `United States` for display purposes is OK but normalizing `Burma` to `Myanmar` is not (instead a cat alias should be used) because the terms `Burma` and `Myanmar` have clear political connotations. Similarly, we have a display alias that maps the old name of `Macedonia` as a country (but not a region!) to `North Macedonia`, but `Republic of Macedonia` is mapped to `North Macedonia` only as a cat alias because the two terms differ in their use of `the`. (For example, if we had a display alias mapping `Republic of Macedonia` to `North Macedonia`, the call {{tl|place|en|the <<capital city>> of the <<c/Republic of Macedonia>>}} would wrongly display as `the [[capital city]] of the [[North Macedonia]]`.) Generally, display normalizations tend to involve alternative forms (e.g. abbreviations, ellipses, foreign spellings) where the normalization improves clarity and consistency. ]==] function export.resolve_placename_display_aliases(placetype, placename) -- If the placename is a link, apply the alias inside the link. -- This pattern matches both piped and unpiped links. If the link is not piped, the second capture (linktext) will -- be empty. local link, linktext = rmatch(placename, "^%[%[([^|%[%]]+)|?([^|%[%]]-)%]%]$") if link then if linktext ~= "" then local alias = resolve_unlinked_placename_display_aliases(placetype, linktext) return "[[" .. link .. "|" .. alias .. "]]" else local alias = resolve_unlinked_placename_display_aliases(placetype, link) return "[[" .. alias .. "]]" end else return resolve_unlinked_placename_display_aliases(placetype, placename) end end --[==[ Generate the "prefixed" version of a bare key, i.e. prefix it with `the` if correct for this key. ]==] function export.get_prefixed_key(key, spec) if spec.the then return "the " .. key else return key end end -- Necessary for use by [[Module:place]]. FIXME: Reorganize the modules so this isn't necessary. export.iterate_matching_location = m_locations.iterate_matching_location --[=[ Iterator that iterates over holonyms in `place_desc`. If `first_holonym_index` is given, start iterating at the specified holonym and stop either when there are no more holonyms or a holonym with modifier `:also` is found. If `first_holonym_index` is nil or omitted, iterate over all holonyms regardless. If `include_raw_text_holonyms` is specified, raw text holonyms (those not of the form `placetype/placename`) are returned as well; they can be identified by the fact that the `placetype` field in the holonym structure is nil. Two values are returned at each iteration, the holonym index and holonym structure, similar to `ipairs()`. ]=] function export.get_holonyms_to_check(place_desc, first_holonym_index, include_raw_text_holonyms) local stop_at_also = not not first_holonym_index return function(place_desc, index) while true do index = index + 1 local this_holonym = place_desc.holonyms[index] -- If we were passed in a starting holonym index, go up to but not including a holonym marked with `:also` -- (continue_cat_loop); the categorization code will then restart the loop at that holonym. That holonym -- will have `:also` marked on it, so make sure not to stop immediately if the first holonym is marked with -- `:also`. if not this_holonym or stop_at_also and index > first_holonym_index and this_holonym.continue_cat_loop then return nil end -- If not placetype, we're processing raw text, which we normally want to skip. if include_raw_text_holonyms or this_holonym.placetype then return index, this_holonym end end end, place_desc, first_holonym_index and first_holonym_index - 1 or 0 end --[==[ If the holonym in `data` (in the format as passed to a category handler) refers to a known location, iterate over all such known locations, returning for each location the corresponding key, spec and group as well as the trail of ancestral containers. Unlike `iterate_matching_location()`, this specifically checks that there is no mismatch between the location's containers at any level and any of the following holonyms in the {{tl|place}} spec. The fields in `data` are: * `holonym_placetype`: The placetype of the holonym. It can actually be a list of possible placetypes, as with `iterate_matching_location()`. * `holonym_placename`: The placename of the holonym. * `holonym_index`: The index of the holonym among the holonyms in `place_desc`, or nil if the holonym is not among the holonyms in `place_desc`. (If a holonym index is given, we check for container mismatches among the holonyms following the specified index, stopping either when encountering a holonym marked with modifier `:also` or, if none exist, when we run out of holonyms. If no holonym index is given, we check all holonyms for container mismatches.) * `place_desc`: Description of the place; used for the holonyms, to check for container mismatches. Returns four values: the location group, the canonical key by which the location is known, the spec object describing the location and the trail of ancestral containers for the location. The first three values are the same as for `iterate_matching_location`. ]==] function export.iterate_matching_holonym_location(data) local holonym_placetype, holonym_placename, holonym_index, place_desc = data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc local matching_location_iterator = m_locations.iterate_matching_location { placetypes = holonym_placetype, placename = holonym_placename, } return function() while true do local group, key, spec = matching_location_iterator() if not group then return nil end local container_trail = {} -- For each level of container, check that there are no mismatches (i.e. other location of the same -- placetype) mentioned. We allow a mismatch at a given level if there's also a match with the container -- at that level. For example, in the case of Kansas City, defined in [[Module:place/locations]] as a city -- in Missouri, if we define it as {{tl|place|city|s/Missouri,Kansas}}, we ignore the mismatching state of -- Kansas because the correct state of Missouri was also mentioned. But imagine we are defining Newark, -- Delaware as {{tl|place|city|s/Delaware|c/US}} and (as is the case) we have an entry for Newark, New -- Jersey in [[Module:place/locations]]. Just because the containing location `US` matches isn't enough, -- because Newark, NJ also has New Jersey as a containing location and there's a mismatch at that level. If -- there are no mismatches at any level we assume we're dealing with the right known location. -- -- If at a given level there are multiple containing locations, we count a match if any holonym matches any -- containing location, and a mismatch only if a holonym exists of the same placetype that doesn't match any -- containing location. local containers_mismatch = false for containers in m_locations.iterate_containers(group, key, spec) do insert(container_trail, containers) local match_at_level = false local mismatch_at_level = false for other_holonym_index, other_holonym in export.get_holonyms_to_check(place_desc, holonym_index and holonym_index + 1 or nil) do local other_source_holonym = other_holonym.augmented_from_holonym if other_source_holonym and other_source_holonym.placetype == holonym_placetype and other_source_holonym.unlinked_placename ~= holonym_placename then -- Ignore holonyms added during the augmentation process for other holonyms of the same -- placetype as the placetype of the holonym we're considering. See comment in -- augment_holonyms_with_container() for why we do this. -- continue; grrr, no 'continue' in Lua else local holonym_matches_at_level = false local holonym_exists_with_same_placetype = false for _, container in ipairs(containers) do if not container.spec.no_check_holonym_mismatch then local full_container_placename, elliptical_container_placename = m_locations.key_to_placename(container.group, container.key) local placetypes = container.spec.placetype if type(placetypes) ~= "table" then placetypes = {placetypes} end local placetype_equivs = {} for _, pt in ipairs(placetypes) do m_table.extend(placetype_equivs, export.get_placetype_equivs(pt)) end local this_holonym_matches = export.get_equiv_placetype_prop_from_equivs( placetype_equivs, function(placetype) return other_holonym.placetype == placetype and (other_holonym.unlinked_placename == full_container_placename or other_holonym.unlinked_placename == elliptical_container_placename) end ) if this_holonym_matches then holonym_matches_at_level = true break end local this_holonym_exists_with_same_placetype = export.get_equiv_placetype_prop_from_equivs( placetype_equivs, function(placetype) return other_holonym.placetype == placetype end ) if this_holonym_exists_with_same_placetype then -- We seem to have a mismatch at this level. But before we decide conclusively that this -- is the case, check to see whether the putative mismatch is an alias and matches when -- we resolve the alias. for oh_group, oh_key, oh_spec, oh_container_trail in export.iterate_matching_holonym_location { holonym_placetype = other_holonym.placetype, holonym_placename = other_holonym.unlinked_placename, holonym_index = other_holonym_index, place_desc = place_desc, } do local oh_full_placename, oh_elliptical_placename = m_locations.key_to_placename(oh_group, oh_key) if oh_full_placename == full_container_placename or oh_elliptical_placename == elliptical_container_placename then -- Alias matched when resolved. this_holonym_matches = true break end end if this_holonym_matches then -- Alias matched above when resolved. holonym_matches_at_level = true break else -- Not an alias, or doesn't match when resolved. We have a true mismatch. holonym_exists_with_same_placetype = true end end end end if holonym_matches_at_level then match_at_level = true break end if holonym_exists_with_same_placetype then mismatch_at_level = true end end end if not match_at_level and mismatch_at_level then containers_mismatch = true break end end if not containers_mismatch then return group, key, spec, container_trail end end end end --[==[ If the holonym in `data` (in the format as passed to a category handler) refers to a known location, find and return the corresponding key, spec and group as well as the trail of ancestral containers. This is like `iterate_matching_holonym_location()` but throws an error if more than one location matches. (An example where this would happen is {{tl|place|en|neighborhood|city/Newcastle}}, because there are two known locations named Newcastle. To fix this, specify additional following disambiguating holonyms, e.g. {{tl|place|en|neighborhood|city/Newcastle|s/New South Wales}}. ]==] function export.find_matching_holonym_location(data) local all_found = {} for group, key, spec, container_trail in export.iterate_matching_holonym_location(data) do insert(all_found, {group, key, spec, container_trail}) end if not all_found[1] then return nil elseif all_found[2] then local holonym_placetype = data.holonym_placetype if type(holonym_placetype) == "table" then holonym_placetype = concat(holonym_placetype, ",") end local found_keys = {} for _, found in ipairs(all_found) do local _, key, _, _ = unpack(found) insert(found_keys, key) end error(("Found multiple matching locations for holonym '%s/%s'; specify disambiguating context in the " .. "containing holonyms: %s"):format(holonym_placetype, data.holonym_placename, dump(found_keys))) else return unpack(all_found[1]) end end ------------------------------------------------------------------------------------------ -- Placename and placetype data -- ------------------------------------------------------------------------------------------ --[==[ var: This is a map from aliases to their canonical forms. Any placetypes appearing as keys here will be mapped to their canonical forms in all respects, including the display form. Contrast entries in 'placetype_data' with a fallback, which applies to categorization and other processes but not to display. The most important aliases are for holonym placetypes, particularly those that occur often such as "country", "state", "province" and the like. Particularly long placetypes that mostly occur as entry placetypes (e.g. "census-designated place") can be given abbreviations, but it is generally preferred to spell out the entry placetype. Note also that we purposely avoid certain abbreviations that would be ambiguous (e.g. "d", which could variously be interpreted as "department", "district" or "division"). ]==] export.placetype_aliases = { ["acomm"] = "autonomous community", ["adr"] = "administrative region", ["adterr"] = "administrative territory", -- Pakistan ["aobl"] = "autonomous oblast", ["aokr"] = "autonomous okrug", ["ap"] = "autonomous province", ["apref"] = "autonomous prefecture", ["aprov"] = "autonomous province", ["ar"] = "autonomous region", ["arch"] = "archipelago", ["arep"] = "autonomous republic", ["aterr"] = "autonomous territory", ["atu"] = "autonomous territorial unit", ["bor"] = "borough", ["c"] = "country", ["can"] = "canton", ["carea"] = "council area", ["cc"] = "constituent country", ["cdblock"] = "community development block", ["cdep"] = "Crown dependency", ["CDP"] = "census-designated place", ["cdp"] = "census-designated place", ["clcity"] = "county-level city", ["co"] = "county", ["cobor"] = "county borough", ["colcity"] = "county-level city", ["coll"] = "collectivity", ["comm"] = "community", ["cont"] = "continent", ["contr"] = "continental region", ["contregion"] = "continental region", ["cpar"] = "civil parish", ["damun"] = "direct-administered municipality", ["dep"] = "dependency", ["department capital"] = "departmental capital", ["dept"] = "department", ["depterr"] = "dependent territory", ["dist"] = "district", ["distmun"] = "district municipality", ["div"] = "division", ["emp"] = "empire", ["fpref"] = "French prefecture", ["gov"] = "governorate", ["govnat"] = "governorate", ["home-rule city"] = "home rule city", ["home-rule municipality"] = "home rule municipality", ["inner-city area"] = "inner city area", ["ires"] = "Indian reservation", ["isl"] = "island", ["lbor"] = "London borough", ["lga"] = "local government area", ["lgarea"] = "local government area", ["lgd"] = "local government district", ["lgdist"] = "local government district", ["metbor"] = "metropolitan borough", ["metcity"] = "metropolitan city", ["metmun"] = "metropolitan municipality", ["mtn"] = "mountain", ["mun"] = "municipality", ["mundist"] = "municipal district", ["nonmetropolitan county"] = "non-metropolitan county", ["obl"] = "oblast", ["okr"] = "okrug", ["p"] = "province", ["par"] = "parish", ["parmun"] = "parish municipality", ["pen"] = "peninsula", ["plcity"] = "prefecture-level city", ["plcolony"] = "Polish colony", ["pref"] = "prefecture", ["prefcity"] = "prefecture-level city", ["preflcity"] = "prefecture-level city", ["prov"] = "province", ["r"] = "region", ["range"] = "mountain range", ["rcm"] = "regional county municipality", ["rcomun"] = "regional county municipality", ["rdist"] = "regional district", ["rep"] = "republic", ["rhrom"] = "rural hromada", ["riv"] = "river", ["rmun"] = "regional municipality", ["robor"] = "royal borough", ["romp"] = "Roman province", ["runit"] = "regional unit", ["rurmun"] = "rural municipality", ["s"] = "state", ["sar"] = "special administrative region", ["shrom"] = "settlement hromada", ["spref"] = "subprefecture", ["sprefcity"] = "sub-prefectural city", ["sprovcity"] = "subprovincial city", ["submet city"] = "sub-metropolitan city", ["submetropolitan city"] = "sub-metropolitan city", ["sub-prefecture-level city"] = "sub-prefectural city", ["sub-provincial city"] = "subprovincial city", ["sub-provincial district"] = "subprovincial district", ["terr"] = "territory", ["terrauth"] = "territorial authority", ["twp"] = "township", ["twpmun"] = "township municipality", ["uauth"] = "unitary authority", ["ucomm"] = "unincorporated community", ["udist"] = "unitary district", ["uhrom"] = "urban hromada", ["uterr"] = "union territory", ["utwpmun"] = "united township municipality", ["val"] = "valley", ["vdc"] = "village development committee", ["vil"] = "village", ["voi"] = "voivodeship", ["wcomm"] = "Welsh community", } local no_link_def_article = {link = false, article = ""} 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"] = {"^Vịnh của "}, ["lake"] = {"^Hồ của "}, ["country"] = {"^Republic of ", " Republic$"}, ["republic"] = {"^Republic of ", " Republic$"}, ["region"] = {"^Vùng của "}, ["river"] = {"^Sông của "}, ["local government area"] = {"^Shire of "}, ["county"] = {"^Shire of "}, ["Indian reservation"] = {" Reservation", " Nation"}, ["tribal jurisdictional area"] = {" Reservation", " Nation"}, } --[==[ var: If any of the following holonyms are present, the associated holonyms are automatically added to the end of the list of holonyms for categorization (but not display) purposes. ]==] export.cat_implications = { ["region"] = { ["Eastern Europe"] = {"continent/Europe"}, ["Central Europe"] = {"continent/Europe"}, ["Western Europe"] = {"continent/Europe"}, ["South Europe"] = {"continent/Europe"}, ["Southern Europe"] = {"continent/Europe"}, ["Northern Europe"] = {"continent/Europe"}, ["Northeast Europe"] = {"continent/Europe"}, ["Northeastern Europe"] = {"continent/Europe"}, ["Southeast Europe"] = {"continent/Europe"}, ["Southeastern Europe"] = {"continent/Europe"}, ["North Caucasus"] = {"continent/Europe"}, ["South Caucasus"] = {"continent/Asia"}, ["South Asia"] = {"continent/Asia"}, ["Southern Asia"] = {"continent/Asia"}, ["East Asia"] = {"continent/Asia"}, ["Eastern Asia"] = {"continent/Asia"}, ["Central Asia"] = {"continent/Asia"}, ["West Asia"] = {"continent/Asia"}, ["Western Asia"] = {"continent/Asia"}, ["Southeast Asia"] = {"continent/Asia"}, ["North Asia"] = {"continent/Asia"}, ["Northern Asia"] = {"continent/Asia"}, ["Anatolia"] = {"continent/Asia"}, ["Asia Minor"] = {"continent/Asia"}, ["Mesopotamia"] = {"continent/Asia"}, ["North Africa"] = {"continent/Africa"}, ["Central Africa"] = {"continent/Africa"}, ["West Africa"] = {"continent/Africa"}, ["East Africa"] = {"continent/Africa"}, ["Southern Africa"] = {"continent/Africa"}, ["Central America"] = {"continent/Central America"}, ["Caribbean"] = {"continent/North America"}, ["Polynesia"] = {"continent/Oceania"}, ["Micronesia"] = {"continent/Oceania"}, ["Melanesia"] = {"continent/Oceania"}, ["Siberia"] = {"country/Russia", "continent/Asia"}, ["Russian Far East"] = {"country/Russia", "continent/Asia"}, ["South Wales"] = {"constituent country/Wales", "continent/Europe"}, ["Balkans"] = {"continent/Europe"}, ["West Bank"] = {"country/Palestine", "continent/Asia"}, ["Gaza"] = {"country/Palestine", "continent/Asia"}, ["Gaza Strip"] = {"country/Palestine", "continent/Asia"}, } } ------------------------------------------------------------------------------------------ -- Category and display handlers -- ------------------------------------------------------------------------------------------ local function city_type_cat_handler(data) local entry_placetype = data.entry_placetype local generic_before_non_cities = export.get_placetype_prop(entry_placetype, "generic_before_non_cities") if not generic_before_non_cities then internal_error("city_type_cat_handler called on placetype %s that doesn't have a `generic_before_non_cities`" .. " setting", entry_placetype) end local plural_entry_placetype = export.pluralize_placetype(entry_placetype) local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group and not spec.is_former_place and not spec.is_city then -- Categorize both in key, and in the larger polity that the key is part of, e.g. [[Hirakata]] goes in both -- "Cities in Osaka Prefecture" and "Cities in Japan". (But don't do the latter if no_container_cat is set.) local cap_plural_entry_placetype = ucfirst(plural_entry_placetype) local retcats = {("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities, export.get_prefixed_key(key, spec))} if container_trail[1] and not spec.no_container_cat then for _, container in ipairs(container_trail[1]) do insert(retcats, ("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities, export.get_prefixed_key(container.key, container.spec))) end end return retcats end end local function capital_city_cat_handler(data, non_city) local holonym_placetype, holonym_placename, holonym_index, place_desc = data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc -- The first time we're called we want to return something; otherwise we will be called for later-mentioned -- holonyms, which can result in wrongly classifying into e.g. `National capitals`. Simulate the loop in -- find_placetype_cat_specs() over holonyms so we get the proper `Cities in ...` categories as well as the capital -- category/categories we add below. local retcats if not non_city and place_desc.holonyms then for h_index, holonym in export.get_holonyms_to_check(place_desc, holonym_index) do local h_placetype, h_placename = holonym.placetype, holonym.unlinked_placename retcats = city_type_cat_handler { entry_placetype = "city", holonym_placetype = h_placetype, holonym_placename = h_placename, holonym_index = h_index, place_desc = place_desc, } if retcats then break end end end if not retcats then retcats = {} end -- Now find the appropriate capital-type category for the placetype of the holonym, e.g. 'State capitals'. If we -- recognize the holonym among the known holonyms in [[Module:place/locations]], also add a category like 'State -- capitals of the United States'. Truncate e.g. 'autonomous region' to 'region', 'union territory' to 'territory' -- when looking up the type of capital category, if we can't find an entry for the holonym placetype itself (there's -- an entry for 'autonomous community'). local capital_cat = export.placetype_to_capital_cat[holonym_placetype] if not capital_cat then capital_cat = export.placetype_to_capital_cat[holonym_placetype:gsub("^.* ", "")] end if capital_cat then capital_cat = ucfirst(capital_cat) local inserted_specific_variant_cat = false if holonym_index then -- Now find the first recognized holonym location. We don't stop when :also is seen because of the common pattern -- where we use :also to specify that a given city is the capital at multiple surrounding levels. local matching_group, matching_key, matching_spec, matching_container_trail, matching_holonym_index for h_index = holonym_index, #place_desc.holonyms do if place_desc.holonyms[h_index].placetype then matching_group, matching_key, matching_spec, matching_container_trail = export.find_matching_holonym_location { holonym_placetype = place_desc.holonyms[h_index].placetype, holonym_placename = place_desc.holonyms[h_index].unlinked_placename, holonym_index = h_index, place_desc = place_desc, } if matching_group then matching_holonym_index = h_index break end end end if matching_holonym_index == holonym_index then if matching_container_trail[1] and not matching_spec.no_container_cat then for _, container in ipairs(matching_container_trail[1]) do insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key, container.spec))) inserted_specific_variant_cat = true end end elseif matching_holonym_index then -- Check to make sure that the holonym placetype we were called on is listed among the -- divtypes of the location we found. local function insert_specific_variant_if_possible(key, spec) return export.get_equiv_placetype_prop(holonym_placetype, function(pt) local plural_holonym_placetype = export.pluralize_placetype(pt) local saw_matching_div if spec.divs then local divs = spec.divs if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) ~= "table" then div = {type = div} end if plural_holonym_placetype == div.type then saw_matching_div = true break end end end if saw_matching_div then insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(key, spec))) return true end return false end) end if insert_specific_variant_if_possible(matching_key, matching_spec) then inserted_specific_variant_cat = true elseif not matching_spec.no_container_cat then for _, containers in ipairs(matching_container_trail) do local saw_no_container_cat = false for _, container in ipairs(containers) do if insert_specific_variant_if_possible(container.key, container.spec) then inserted_specific_variant_cat = true break end saw_no_container_cat = saw_no_container_cat or container.spec.no_container_cat end if inserted_specific_variant_cat or saw_no_container_cat then break end end end end else -- This happens when in an invocation like {{place|en|capital city|s/Haryana,Punjab}} for -- [[Chandigarh]]. We fall back to older code that doesn't depend on the holonym index existing. -- FIXME: This may not be necessary. In the example just given, when processing Haryana we add to -- [[:Category:en:State capitals of India]], and nothing extra gets added when processing Punjab. -- Possibly we can just skip this case entirely. local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group and container_trail[1] and not spec.no_container_cat then for _, container in ipairs(container_trail[1]) do insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key, container.spec))) inserted_specific_variant_cat = true end end end if not inserted_specific_variant_cat then insert(retcats, capital_cat) end else -- We didn't recognize the holonym placetype; just put in 'Capital cities'. insert(retcats, "Capital cities") end return retcats end --[=[ This is invoked specially for all placetypes (see the `*` placetype key at the bottom of `placetype_data`). This is used in two ways: # To add pages to generic holonym categories like [[:Category:en:Places in Merseyside, England]] (and [[:Category:en:Places in England]]) for any pages that have `co/Merseyside` as their holonym. # To categorize demonyms in bare placename categories like [[:Category:en:Merseyside, England]] if the demonym description mentions `co/Merseyside` and doesn't mention a more specific placename that also has a category. (In this case there are none, but we can have demonyms at multiple levels, e.g. in France for individual villages, departments, administrative regions, and for the entire country, and for example we only want to categorize a demonym into [[:Category:France]] if no more specific category applies.) Unlike when invoked from {{tl|place}}, a demonym invocation only adds the most specific holonym category and not the category of any containing polity (hence if we add [[:Category:en:Merseyside, England]] we won't also add [[:Category:England]]). This code also handles cities; e.g. for the first use case above, it would be used to add a page that has `city/Boston` as a holonym to [[:Category:en:Places in Boston]], along with [[:Category:en:Places in Massachusetts, USA]] and [[:Category:en:Places in the United States]]. The city handler tries to deal with the possibility of multiple cities having the same name. For example, the code in [[Module:place/locations]] knows about the city of [[Columbus]], [[Ohio]], which has containing polities `Ohio` (a state) and `the United States` (a country). If either containing polity is mentioned, the handler proceeds to return the key `Columbus` (along with `Ohio, USA` and `the United States`). Otherwise, if any other state or country is mentioned, the handler returns nothing, and otherwise it assumes the mentioned city is the one we're considering and returns `Columbus` etc. This works correctly if the place only mentions Ohio and a holonym for a Columbus in a different country is encountered, because of the function `augment_holonyms_with_container`, which adds the US as a holonym when Ohio is encountered. The single parameter `data` is as in category handlers. The return value is a list of categories (without the preceding language code). ]=] local function generic_place_cat_handler(data) local from_demonym = data.from_demonym local retcats = {} local function insert_retkey(key, spec) if from_demonym then insert(retcats, key) else insert(retcats, ("Địa danh của %s"):format(export.get_prefixed_key(key, spec))) end end local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group then if not spec.no_generic_place_cat then -- This applies to continents and continental regions. insert_retkey(key, spec) end -- Categorize both in key, and in the larger location(s) that the key is part of, e.g. [[Hirakata]] goes in -- both [[Category:Places in Osaka Prefecture, Japan]] and [[Category:Places in Japan]]. But not when -- no_container_cat is set (e.g. for 'United Kingdom'). if not spec.no_container_cat then for _, container_set in ipairs(container_trail) do local stop_adding_containers = false for _, container in ipairs(container_set) do if not container.spec.no_generic_place_cat then insert_retkey(container.key, container.spec) end if container.spec.no_container_cat then stop_adding_containers = true end end if stop_adding_containers then break end end end return retcats end end --[==[ Special category handler run for all placetypes that checks for specified division placetypes of known locations and categorizes appropriately. ]==] function export.political_division_cat_handler(data) if data.from_demonym then return end local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group then local divlists = {} if spec.divs then insert(divlists, spec.divs) end if spec.addl_divs then insert(divlists, spec.addl_divs) end for _, divlist in ipairs(divlists) do if type(divlist) ~= "table" then divlist = {divlist} end for _, div in ipairs(divlist) do if type(div) == "string" then div = {type = div} end local sgdiv = export.maybe_singularize_placetype(div.type) or div.type local prep = div.prep or "of" local cat_as = div.cat_as or div.type if type(cat_as) ~= "table" then cat_as = {cat_as} end if not export.placetype_data[sgdiv] then internal_error("Placetype %s associated with known location key %s and data %s not found in " .. "`placetype_data`", sgdiv, key, spec) end if sgdiv == data.entry_placetype then local retcats = {} for _, pt_cat in ipairs(cat_as) do if type(pt_cat) == "string" then pt_cat = {type = pt_cat} end local pt_prep = pt_cat.prep or prep insert(retcats, ucfirst(pt_cat.type) .. " " .. pt_prep .. " " .. export.get_prefixed_key(key, spec)) end return retcats end end end end end --[==[ This is used to add pages to "bare" categories like [[:Category:en:Georgia, USA]] for `[[Georgia]]` and any foreign-language terms that are translations of the state of Georgia. We look at the page title (or its overridden value in {{para|pagename}}) as well as the glosses in {{para|t}}/{{para|t2}} etc., various extra-info values such as the modern names in {{para|modern}}, and any values specified using a form-of directive. We need to pay attention to the entry placetypes specified so we don't overcategorize; e.g. the US state of Georgia is `[[Джорджия]]` in Russian but the country of Georgia is `[[Грузия]]`, and if we just looked for matching names, we'd get both Russian terms categorized into both [[:Category:ru:Georgia, USA]] and [[:Category:ru:Georgia]]. We also need to check the containing holonyms to make sure there isn't a mismatch (so we don't e.g. categorize Newark, Delaware in [[:Category:en:Newark]], which is intended for Newark, New Jersey). ]==] function export.get_bare_categories(args, overall_place_spec) local bare_cats = {} local place_descs = overall_place_spec.descs local possible_placetypes_by_place_desc = {} for i, place_desc in ipairs(place_descs) do possible_placetypes_by_place_desc[i] = {} for _, placetype in ipairs(place_desc.placetypes) do if not export.placetype_is_ignorable(placetype) then local equivs = export.get_placetype_equivs(placetype, {register_former_as_non_former = true}) for _, equiv in ipairs(equivs) do insert(possible_placetypes_by_place_desc[i], equiv.placetype) end end end end local function check_term(term) -- Treat Wikipedia links like local ones. term = term:gsub("%[%[w:", "[["):gsub("%[%[wikipedia:", "[[") term = export.remove_links_and_html(term) term = term:gsub("^ ", "") 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["Hạt " .. unlinked_placename .. ", Ireland"] or m_locations.northern_ireland_counties["Hạt " .. unlinked_placename .. ", Bắc Ireland"] then return prefix_display_handler("Hạt", holonym_placename) end -- Display handler for Taiwanese counties. Taiwanese counties are displayed as e.g. "[[Chiayi]] County". if m_locations.taiwan_counties[unlinked_placename .. ", Đài Loan"] then return suffix_display_handler("Hạt", holonym_placename) end -- Display handler for Romanian counties. Romanian counties are displayed as e.g. "[[Cluj]] County". if m_locations.romania_counties[unlinked_placename .. ", România"] then return suffix_display_handler("Hạt", 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 .. ", Nhật Bản"] 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 .. ", Bulgaria"] or m_locations.iran_provinces[unlinked_placename .. ", Iran"] or m_locations.laos_provinces[unlinked_placename .. ", Lào"] or m_locations.north_korea_provinces[unlinked_placename .. ", Cộng hòa Dân chủ Nhân dân Triều Tiên"] or m_locations.south_korea_provinces[unlinked_placename .. ", Hàn Quốc"] or m_locations.thailand_provinces[unlinked_placename .. ", Thái Lan"] or m_locations.turkey_provinces[unlinked_placename .. ", Thổ Nhĩ Kỳ"] or m_locations.vietnam_provinces[unlinked_placename .. ", Việt Nam"] 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 .. ", 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 = "của", 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", }, ["quốc gia"] = { link = true, class = "polity", ["continent/*"] = {true, "Quốc gia"}, 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", }, ["đặc điểm tự nhiên!"] = { category_link = "tổng hợp các yếu tố vật chất hình thành tồn tại", bare_category_parent = "địa danh", }, ["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", }, ["địa danh!"] = { generic_before_non_cities = "của", generic_before_cities = "của", 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 = "tên", }, ["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 = true, 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 return export lcocryhz2u7w98uwapp4tc46p5y5u55 2349938 2349930 2026-05-03T14:00:09Z Hiyuune 50834 2349938 Scribunto text/plain local export = {} export.force_cat = false -- set to true for testing local m_locations = require("Module:place/locations") local m_links = require("Module:links") local m_table = require("Module:table") local m_strutils = require("Module:string utilities") local debug_track_module = "Module:debug/track" local en_utilities_module = "Module:en-utilities" local dump = mw.dumpObject local insert = table.insert local concat = table.concat local internal_error = m_locations.internal_error export.internal_error = internal_error local process_error = m_locations.process_error export.process_error = process_error local unpack = unpack or table.unpack -- Lua 5.2 compatibility local ucfirst = m_strutils.ucfirst local ulower = m_strutils.lower local rmatch = m_strutils.match local split = m_strutils.split --[==[ intro: This module contains placetype data used by [[Module:place]] and {{tl|place}}, along with a significant amount of code to work with both placetypes and locations, as well as some placename-related info (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 else placetype = 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 = "tên" 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 `"của"` 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 "của" 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 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 link end end --[==[ Get the display form of a placetype by looking it up in `placetype_data`. If the placetype is recognized, or is the plural of a recognized placetype, the corresponding linked display form is returned (with plural placetypes displaying as plural but linked to the singular form of the placetype). Otherwise, return nil. If we're generating the description of a category, `category_type` should be set to one of `"top-level"` (for top-level categories like [[:Category:Neighborhoods]]), `"noncity"` (for non-city categories like [[:Category:Neighborhoods in Illinois, USA]]) or `"city"` (for city categories like [[:Category:Neighborhoods of Chicago]]). Otherwise, we're generating the description for use in formatting a {{tl|place}} call, and category-only placetypes ending in `!` will be ignored, along with special `category_link*` settings. `return_full` is used along with `category_type` and will preferably return the "full" variant of category link settings, i.e. `full_category_link*`; if they don't exist, the `category_link*` value is prepended with `"names of"`. `noerror` says to not throw an error when encountering entry placetypes that would be disallowed. ]==] function export.get_placetype_display_form(placetype, category_type, return_full, noerror) local from_category = not not category_type local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category) if canon_placetype then local raw_link local function is_linked_string(str) return type(str) == "string" and str:find("%[%[") end if category_type then local fetched_full local function fetch_maybe_full(prop) local retval = ptdata["full_" .. prop] if retval ~= nil then if return_full then return retval, true else internal_error("Saw full_" .. prop .. "=%s but `return_full` not set, can't handle", retval) end end return ptdata[prop], false end local function maybe_prefix(str) if return_full and not fetched_full then return "names of " .. str else return str end end -- Careful with `false` as possible value. if category_type == "top-level" then raw_link, fetched_full = fetch_maybe_full("category_link_top_level") elseif category_type == "noncity" then raw_link, fetched_full = fetch_maybe_full("category_link_before_noncity") elseif category_type == "city" then raw_link, fetched_full = fetch_maybe_full("category_link_before_city") else internal_error('Unrecognized value for `category_type` %s, should be "top-level", "noncity" or "city"', category_type) end if type(raw_link) == "string" then return maybe_prefix(raw_link), ptdata elseif raw_link ~= nil then return raw_link, ptdata end raw_link, fetched_full = fetch_maybe_full("category_link") if raw_link == false then return raw_link, ptdata end if is_linked_string(raw_link) then return maybe_prefix(raw_link), ptdata end if ptmatch == "plural" then raw_link, fetched_full = fetch_maybe_full("plural_link") if raw_link == false then return raw_link, ptdata end if is_linked_string(raw_link) then return maybe_prefix(raw_link), ptdata end end if raw_link == nil then raw_link, fetched_full = fetch_maybe_full("link") end if raw_link == false then return raw_link, ptdata end return maybe_prefix(make_placetype_link(raw_link, canon_placetype, placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror)), ptdata else if ptmatch == "plural" then raw_link = ptdata.plural_link if raw_link == false then process_error("Placetype %s cannot appear plural", placetype) end if is_linked_string(raw_link) then return raw_link, ptdata end end if raw_link == nil then raw_link = ptdata.link end return make_placetype_link(raw_link, canon_placetype, placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror), ptdata end end return nil end local function resolve_unlinked_placename_display_aliases(placetype, placename) local equiv_placetypes = export.get_placetype_equivs(placetype) for i, equiv in ipairs(equiv_placetypes) do equiv_placetypes[i] = equiv.placetype end local all_display_aliases_found = {} local all_others_found = {} for group, key, spec in m_locations.iterate_matching_location { placetypes = equiv_placetypes, placename = placename, alias_resolution = "display", } do if spec.alias_of and spec.display then insert(all_display_aliases_found, {group, key, spec, spec.display_as_full}) else insert(all_others_found, {group, key, spec}) end end if not all_display_aliases_found[1] then return placename elseif all_display_aliases_found[2] then internal_error("Found multiple matching display aliases for placename %s, placetype %s: " .. "all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found, all_others_found) elseif all_others_found[1] then internal_error("Found a display alias along with other possible meanings for placename %s, placetype %s: " .. "all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found, all_others_found) else local group, key, spec, as_full = unpack(all_display_aliases_found[1]) local full, elliptical = m_locations.key_to_placename(group, key) return as_full and full or elliptical end end --[==[ If `placename` of type `placetype` is a display alias, convert it to its canonical form; otherwise, return unchanged. Display aliases transform certain placenames into canonical displayed forms. For example, if any of `country/US`, `country/USA` or `country/United States of America` (or `c/US`, etc.) are given, the result will be displayed as `United States`. '''NOTE''': Display aliases change what is displayed from what the editor wrote in the Wikitext. As a result, they should (a) be non-political in nature, and (b) not involve a change where the word `the` needs to be added or removed. For example, normalizing `US` and `USA` to `United States` for display purposes is OK but normalizing `Burma` to `Myanmar` is not (instead a cat alias should be used) because the terms `Burma` and `Myanmar` have clear political connotations. Similarly, we have a display alias that maps the old name of `Macedonia` as a country (but not a region!) to `North Macedonia`, but `Republic of Macedonia` is mapped to `North Macedonia` only as a cat alias because the two terms differ in their use of `the`. (For example, if we had a display alias mapping `Republic of Macedonia` to `North Macedonia`, the call {{tl|place|en|the <<capital city>> of the <<c/Republic of Macedonia>>}} would wrongly display as `the [[capital city]] of the [[North Macedonia]]`.) Generally, display normalizations tend to involve alternative forms (e.g. abbreviations, ellipses, foreign spellings) where the normalization improves clarity and consistency. ]==] function export.resolve_placename_display_aliases(placetype, placename) -- If the placename is a link, apply the alias inside the link. -- This pattern matches both piped and unpiped links. If the link is not piped, the second capture (linktext) will -- be empty. local link, linktext = rmatch(placename, "^%[%[([^|%[%]]+)|?([^|%[%]]-)%]%]$") if link then if linktext ~= "" then local alias = resolve_unlinked_placename_display_aliases(placetype, linktext) return "[[" .. link .. "|" .. alias .. "]]" else local alias = resolve_unlinked_placename_display_aliases(placetype, link) return "[[" .. alias .. "]]" end else return resolve_unlinked_placename_display_aliases(placetype, placename) end end --[==[ Generate the "prefixed" version of a bare key, i.e. prefix it with `the` if correct for this key. ]==] function export.get_prefixed_key(key, spec) if spec.the then return "the " .. key else return key end end -- Necessary for use by [[Module:place]]. FIXME: Reorganize the modules so this isn't necessary. export.iterate_matching_location = m_locations.iterate_matching_location --[=[ Iterator that iterates over holonyms in `place_desc`. If `first_holonym_index` is given, start iterating at the specified holonym and stop either when there are no more holonyms or a holonym with modifier `:also` is found. If `first_holonym_index` is nil or omitted, iterate over all holonyms regardless. If `include_raw_text_holonyms` is specified, raw text holonyms (those not of the form `placetype/placename`) are returned as well; they can be identified by the fact that the `placetype` field in the holonym structure is nil. Two values are returned at each iteration, the holonym index and holonym structure, similar to `ipairs()`. ]=] function export.get_holonyms_to_check(place_desc, first_holonym_index, include_raw_text_holonyms) local stop_at_also = not not first_holonym_index return function(place_desc, index) while true do index = index + 1 local this_holonym = place_desc.holonyms[index] -- If we were passed in a starting holonym index, go up to but not including a holonym marked with `:also` -- (continue_cat_loop); the categorization code will then restart the loop at that holonym. That holonym -- will have `:also` marked on it, so make sure not to stop immediately if the first holonym is marked with -- `:also`. if not this_holonym or stop_at_also and index > first_holonym_index and this_holonym.continue_cat_loop then return nil end -- If not placetype, we're processing raw text, which we normally want to skip. if include_raw_text_holonyms or this_holonym.placetype then return index, this_holonym end end end, place_desc, first_holonym_index and first_holonym_index - 1 or 0 end --[==[ If the holonym in `data` (in the format as passed to a category handler) refers to a known location, iterate over all such known locations, returning for each location the corresponding key, spec and group as well as the trail of ancestral containers. Unlike `iterate_matching_location()`, this specifically checks that there is no mismatch between the location's containers at any level and any of the following holonyms in the {{tl|place}} spec. The fields in `data` are: * `holonym_placetype`: The placetype of the holonym. It can actually be a list of possible placetypes, as with `iterate_matching_location()`. * `holonym_placename`: The placename of the holonym. * `holonym_index`: The index of the holonym among the holonyms in `place_desc`, or nil if the holonym is not among the holonyms in `place_desc`. (If a holonym index is given, we check for container mismatches among the holonyms following the specified index, stopping either when encountering a holonym marked with modifier `:also` or, if none exist, when we run out of holonyms. If no holonym index is given, we check all holonyms for container mismatches.) * `place_desc`: Description of the place; used for the holonyms, to check for container mismatches. Returns four values: the location group, the canonical key by which the location is known, the spec object describing the location and the trail of ancestral containers for the location. The first three values are the same as for `iterate_matching_location`. ]==] function export.iterate_matching_holonym_location(data) local holonym_placetype, holonym_placename, holonym_index, place_desc = data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc local matching_location_iterator = m_locations.iterate_matching_location { placetypes = holonym_placetype, placename = holonym_placename, } return function() while true do local group, key, spec = matching_location_iterator() if not group then return nil end local container_trail = {} -- For each level of container, check that there are no mismatches (i.e. other location of the same -- placetype) mentioned. We allow a mismatch at a given level if there's also a match with the container -- at that level. For example, in the case of Kansas City, defined in [[Module:place/locations]] as a city -- in Missouri, if we define it as {{tl|place|city|s/Missouri,Kansas}}, we ignore the mismatching state of -- Kansas because the correct state of Missouri was also mentioned. But imagine we are defining Newark, -- Delaware as {{tl|place|city|s/Delaware|c/US}} and (as is the case) we have an entry for Newark, New -- Jersey in [[Module:place/locations]]. Just because the containing location `US` matches isn't enough, -- because Newark, NJ also has New Jersey as a containing location and there's a mismatch at that level. If -- there are no mismatches at any level we assume we're dealing with the right known location. -- -- If at a given level there are multiple containing locations, we count a match if any holonym matches any -- containing location, and a mismatch only if a holonym exists of the same placetype that doesn't match any -- containing location. local containers_mismatch = false for containers in m_locations.iterate_containers(group, key, spec) do insert(container_trail, containers) local match_at_level = false local mismatch_at_level = false for other_holonym_index, other_holonym in export.get_holonyms_to_check(place_desc, holonym_index and holonym_index + 1 or nil) do local other_source_holonym = other_holonym.augmented_from_holonym if other_source_holonym and other_source_holonym.placetype == holonym_placetype and other_source_holonym.unlinked_placename ~= holonym_placename then -- Ignore holonyms added during the augmentation process for other holonyms of the same -- placetype as the placetype of the holonym we're considering. See comment in -- augment_holonyms_with_container() for why we do this. -- continue; grrr, no 'continue' in Lua else local holonym_matches_at_level = false local holonym_exists_with_same_placetype = false for _, container in ipairs(containers) do if not container.spec.no_check_holonym_mismatch then local full_container_placename, elliptical_container_placename = m_locations.key_to_placename(container.group, container.key) local placetypes = container.spec.placetype if type(placetypes) ~= "table" then placetypes = {placetypes} end local placetype_equivs = {} for _, pt in ipairs(placetypes) do m_table.extend(placetype_equivs, export.get_placetype_equivs(pt)) end local this_holonym_matches = export.get_equiv_placetype_prop_from_equivs( placetype_equivs, function(placetype) return other_holonym.placetype == placetype and (other_holonym.unlinked_placename == full_container_placename or other_holonym.unlinked_placename == elliptical_container_placename) end ) if this_holonym_matches then holonym_matches_at_level = true break end local this_holonym_exists_with_same_placetype = export.get_equiv_placetype_prop_from_equivs( placetype_equivs, function(placetype) return other_holonym.placetype == placetype end ) if this_holonym_exists_with_same_placetype then -- We seem to have a mismatch at this level. But before we decide conclusively that this -- is the case, check to see whether the putative mismatch is an alias and matches when -- we resolve the alias. for oh_group, oh_key, oh_spec, oh_container_trail in export.iterate_matching_holonym_location { holonym_placetype = other_holonym.placetype, holonym_placename = other_holonym.unlinked_placename, holonym_index = other_holonym_index, place_desc = place_desc, } do local oh_full_placename, oh_elliptical_placename = m_locations.key_to_placename(oh_group, oh_key) if oh_full_placename == full_container_placename or oh_elliptical_placename == elliptical_container_placename then -- Alias matched when resolved. this_holonym_matches = true break end end if this_holonym_matches then -- Alias matched above when resolved. holonym_matches_at_level = true break else -- Not an alias, or doesn't match when resolved. We have a true mismatch. holonym_exists_with_same_placetype = true end end end end if holonym_matches_at_level then match_at_level = true break end if holonym_exists_with_same_placetype then mismatch_at_level = true end end end if not match_at_level and mismatch_at_level then containers_mismatch = true break end end if not containers_mismatch then return group, key, spec, container_trail end end end end --[==[ If the holonym in `data` (in the format as passed to a category handler) refers to a known location, find and return the corresponding key, spec and group as well as the trail of ancestral containers. This is like `iterate_matching_holonym_location()` but throws an error if more than one location matches. (An example where this would happen is {{tl|place|en|neighborhood|city/Newcastle}}, because there are two known locations named Newcastle. To fix this, specify additional following disambiguating holonyms, e.g. {{tl|place|en|neighborhood|city/Newcastle|s/New South Wales}}. ]==] function export.find_matching_holonym_location(data) local all_found = {} for group, key, spec, container_trail in export.iterate_matching_holonym_location(data) do insert(all_found, {group, key, spec, container_trail}) end if not all_found[1] then return nil elseif all_found[2] then local holonym_placetype = data.holonym_placetype if type(holonym_placetype) == "table" then holonym_placetype = concat(holonym_placetype, ",") end local found_keys = {} for _, found in ipairs(all_found) do local _, key, _, _ = unpack(found) insert(found_keys, key) end error(("Found multiple matching locations for holonym '%s/%s'; specify disambiguating context in the " .. "containing holonyms: %s"):format(holonym_placetype, data.holonym_placename, dump(found_keys))) else return unpack(all_found[1]) end end ------------------------------------------------------------------------------------------ -- Placename and placetype data -- ------------------------------------------------------------------------------------------ --[==[ var: This is a map from aliases to their canonical forms. Any placetypes appearing as keys here will be mapped to their canonical forms in all respects, including the display form. Contrast entries in 'placetype_data' with a fallback, which applies to categorization and other processes but not to display. The most important aliases are for holonym placetypes, particularly those that occur often such as "country", "state", "province" and the like. Particularly long placetypes that mostly occur as entry placetypes (e.g. "census-designated place") can be given abbreviations, but it is generally preferred to spell out the entry placetype. Note also that we purposely avoid certain abbreviations that would be ambiguous (e.g. "d", which could variously be interpreted as "department", "district" or "division"). ]==] export.placetype_aliases = { ["acomm"] = "autonomous community", ["adr"] = "administrative region", ["adterr"] = "administrative territory", -- Pakistan ["aobl"] = "autonomous oblast", ["aokr"] = "autonomous okrug", ["ap"] = "autonomous province", ["apref"] = "autonomous prefecture", ["aprov"] = "autonomous province", ["ar"] = "autonomous region", ["arch"] = "archipelago", ["arep"] = "autonomous republic", ["aterr"] = "autonomous territory", ["atu"] = "autonomous territorial unit", ["bor"] = "borough", ["c"] = "country", ["can"] = "canton", ["carea"] = "council area", ["cc"] = "constituent country", ["cdblock"] = "community development block", ["cdep"] = "Crown dependency", ["CDP"] = "census-designated place", ["cdp"] = "census-designated place", ["clcity"] = "county-level city", ["co"] = "county", ["cobor"] = "county borough", ["colcity"] = "county-level city", ["coll"] = "collectivity", ["comm"] = "community", ["cont"] = "continent", ["contr"] = "continental region", ["contregion"] = "continental region", ["cpar"] = "civil parish", ["damun"] = "direct-administered municipality", ["dep"] = "dependency", ["department capital"] = "departmental capital", ["dept"] = "department", ["depterr"] = "dependent territory", ["dist"] = "district", ["distmun"] = "district municipality", ["div"] = "division", ["emp"] = "empire", ["fpref"] = "French prefecture", ["gov"] = "governorate", ["govnat"] = "governorate", ["home-rule city"] = "home rule city", ["home-rule municipality"] = "home rule municipality", ["inner-city area"] = "inner city area", ["ires"] = "Indian reservation", ["isl"] = "island", ["lbor"] = "London borough", ["lga"] = "local government area", ["lgarea"] = "local government area", ["lgd"] = "local government district", ["lgdist"] = "local government district", ["metbor"] = "metropolitan borough", ["metcity"] = "metropolitan city", ["metmun"] = "metropolitan municipality", ["mtn"] = "mountain", ["mun"] = "municipality", ["mundist"] = "municipal district", ["nonmetropolitan county"] = "non-metropolitan county", ["obl"] = "oblast", ["okr"] = "okrug", ["p"] = "province", ["par"] = "parish", ["parmun"] = "parish municipality", ["pen"] = "peninsula", ["plcity"] = "prefecture-level city", ["plcolony"] = "Polish colony", ["pref"] = "prefecture", ["prefcity"] = "prefecture-level city", ["preflcity"] = "prefecture-level city", ["prov"] = "province", ["r"] = "region", ["range"] = "mountain range", ["rcm"] = "regional county municipality", ["rcomun"] = "regional county municipality", ["rdist"] = "regional district", ["rep"] = "republic", ["rhrom"] = "rural hromada", ["riv"] = "river", ["rmun"] = "regional municipality", ["robor"] = "royal borough", ["romp"] = "Roman province", ["runit"] = "regional unit", ["rurmun"] = "rural municipality", ["s"] = "state", ["sar"] = "special administrative region", ["shrom"] = "settlement hromada", ["spref"] = "subprefecture", ["sprefcity"] = "sub-prefectural city", ["sprovcity"] = "subprovincial city", ["submet city"] = "sub-metropolitan city", ["submetropolitan city"] = "sub-metropolitan city", ["sub-prefecture-level city"] = "sub-prefectural city", ["sub-provincial city"] = "subprovincial city", ["sub-provincial district"] = "subprovincial district", ["terr"] = "territory", ["terrauth"] = "territorial authority", ["twp"] = "township", ["twpmun"] = "township municipality", ["uauth"] = "unitary authority", ["ucomm"] = "unincorporated community", ["udist"] = "unitary district", ["uhrom"] = "urban hromada", ["uterr"] = "union territory", ["utwpmun"] = "united township municipality", ["val"] = "valley", ["vdc"] = "village development committee", ["vil"] = "village", ["voi"] = "voivodeship", ["wcomm"] = "Welsh community", } local no_link_def_article = {link = false, article = ""} 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"] = {"^Vịnh của "}, ["lake"] = {"^Hồ của "}, ["country"] = {"^Republic of ", " Republic$"}, ["republic"] = {"^Republic of ", " Republic$"}, ["region"] = {"^Vùng của "}, ["river"] = {"^Sông của "}, ["local government area"] = {"^Shire of "}, ["county"] = {"^Shire of "}, ["Indian reservation"] = {" Reservation", " Nation"}, ["tribal jurisdictional area"] = {" Reservation", " Nation"}, } --[==[ var: If any of the following holonyms are present, the associated holonyms are automatically added to the end of the list of holonyms for categorization (but not display) purposes. ]==] export.cat_implications = { ["region"] = { ["Eastern Europe"] = {"continent/Europe"}, ["Central Europe"] = {"continent/Europe"}, ["Western Europe"] = {"continent/Europe"}, ["South Europe"] = {"continent/Europe"}, ["Southern Europe"] = {"continent/Europe"}, ["Northern Europe"] = {"continent/Europe"}, ["Northeast Europe"] = {"continent/Europe"}, ["Northeastern Europe"] = {"continent/Europe"}, ["Southeast Europe"] = {"continent/Europe"}, ["Southeastern Europe"] = {"continent/Europe"}, ["North Caucasus"] = {"continent/Europe"}, ["South Caucasus"] = {"continent/Asia"}, ["South Asia"] = {"continent/Asia"}, ["Southern Asia"] = {"continent/Asia"}, ["East Asia"] = {"continent/Asia"}, ["Eastern Asia"] = {"continent/Asia"}, ["Central Asia"] = {"continent/Asia"}, ["West Asia"] = {"continent/Asia"}, ["Western Asia"] = {"continent/Asia"}, ["Southeast Asia"] = {"continent/Asia"}, ["North Asia"] = {"continent/Asia"}, ["Northern Asia"] = {"continent/Asia"}, ["Anatolia"] = {"continent/Asia"}, ["Asia Minor"] = {"continent/Asia"}, ["Mesopotamia"] = {"continent/Asia"}, ["North Africa"] = {"continent/Africa"}, ["Central Africa"] = {"continent/Africa"}, ["West Africa"] = {"continent/Africa"}, ["East Africa"] = {"continent/Africa"}, ["Southern Africa"] = {"continent/Africa"}, ["Central America"] = {"continent/Central America"}, ["Caribbean"] = {"continent/North America"}, ["Polynesia"] = {"continent/Oceania"}, ["Micronesia"] = {"continent/Oceania"}, ["Melanesia"] = {"continent/Oceania"}, ["Siberia"] = {"country/Russia", "continent/Asia"}, ["Russian Far East"] = {"country/Russia", "continent/Asia"}, ["South Wales"] = {"constituent country/Wales", "continent/Europe"}, ["Balkans"] = {"continent/Europe"}, ["West Bank"] = {"country/Palestine", "continent/Asia"}, ["Gaza"] = {"country/Palestine", "continent/Asia"}, ["Gaza Strip"] = {"country/Palestine", "continent/Asia"}, } } ------------------------------------------------------------------------------------------ -- Category and display handlers -- ------------------------------------------------------------------------------------------ local function city_type_cat_handler(data) local entry_placetype = data.entry_placetype local generic_before_non_cities = export.get_placetype_prop(entry_placetype, "generic_before_non_cities") if not generic_before_non_cities then internal_error("city_type_cat_handler called on placetype %s that doesn't have a `generic_before_non_cities`" .. " setting", entry_placetype) end local plural_entry_placetype = export.pluralize_placetype(entry_placetype) local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group and not spec.is_former_place and not spec.is_city then -- Categorize both in key, and in the larger polity that the key is part of, e.g. [[Hirakata]] goes in both -- "Cities in Osaka Prefecture" and "Cities in Japan". (But don't do the latter if no_container_cat is set.) local cap_plural_entry_placetype = ucfirst(plural_entry_placetype) local retcats = {("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities, export.get_prefixed_key(key, spec))} if container_trail[1] and not spec.no_container_cat then for _, container in ipairs(container_trail[1]) do insert(retcats, ("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities, export.get_prefixed_key(container.key, container.spec))) end end return retcats end end local function capital_city_cat_handler(data, non_city) local holonym_placetype, holonym_placename, holonym_index, place_desc = data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc -- The first time we're called we want to return something; otherwise we will be called for later-mentioned -- holonyms, which can result in wrongly classifying into e.g. `National capitals`. Simulate the loop in -- find_placetype_cat_specs() over holonyms so we get the proper `Cities in ...` categories as well as the capital -- category/categories we add below. local retcats if not non_city and place_desc.holonyms then for h_index, holonym in export.get_holonyms_to_check(place_desc, holonym_index) do local h_placetype, h_placename = holonym.placetype, holonym.unlinked_placename retcats = city_type_cat_handler { entry_placetype = "city", holonym_placetype = h_placetype, holonym_placename = h_placename, holonym_index = h_index, place_desc = place_desc, } if retcats then break end end end if not retcats then retcats = {} end -- Now find the appropriate capital-type category for the placetype of the holonym, e.g. 'State capitals'. If we -- recognize the holonym among the known holonyms in [[Module:place/locations]], also add a category like 'State -- capitals of the United States'. Truncate e.g. 'autonomous region' to 'region', 'union territory' to 'territory' -- when looking up the type of capital category, if we can't find an entry for the holonym placetype itself (there's -- an entry for 'autonomous community'). local capital_cat = export.placetype_to_capital_cat[holonym_placetype] if not capital_cat then capital_cat = export.placetype_to_capital_cat[holonym_placetype:gsub("^.* ", "")] end if capital_cat then capital_cat = ucfirst(capital_cat) local inserted_specific_variant_cat = false if holonym_index then -- Now find the first recognized holonym location. We don't stop when :also is seen because of the common pattern -- where we use :also to specify that a given city is the capital at multiple surrounding levels. local matching_group, matching_key, matching_spec, matching_container_trail, matching_holonym_index for h_index = holonym_index, #place_desc.holonyms do if place_desc.holonyms[h_index].placetype then matching_group, matching_key, matching_spec, matching_container_trail = export.find_matching_holonym_location { holonym_placetype = place_desc.holonyms[h_index].placetype, holonym_placename = place_desc.holonyms[h_index].unlinked_placename, holonym_index = h_index, place_desc = place_desc, } if matching_group then matching_holonym_index = h_index break end end end if matching_holonym_index == holonym_index then if matching_container_trail[1] and not matching_spec.no_container_cat then for _, container in ipairs(matching_container_trail[1]) do insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key, container.spec))) inserted_specific_variant_cat = true end end elseif matching_holonym_index then -- Check to make sure that the holonym placetype we were called on is listed among the -- divtypes of the location we found. local function insert_specific_variant_if_possible(key, spec) return export.get_equiv_placetype_prop(holonym_placetype, function(pt) local plural_holonym_placetype = export.pluralize_placetype(pt) local saw_matching_div if spec.divs then local divs = spec.divs if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) ~= "table" then div = {type = div} end if plural_holonym_placetype == div.type then saw_matching_div = true break end end end if saw_matching_div then insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(key, spec))) return true end return false end) end if insert_specific_variant_if_possible(matching_key, matching_spec) then inserted_specific_variant_cat = true elseif not matching_spec.no_container_cat then for _, containers in ipairs(matching_container_trail) do local saw_no_container_cat = false for _, container in ipairs(containers) do if insert_specific_variant_if_possible(container.key, container.spec) then inserted_specific_variant_cat = true break end saw_no_container_cat = saw_no_container_cat or container.spec.no_container_cat end if inserted_specific_variant_cat or saw_no_container_cat then break end end end end else -- This happens when in an invocation like {{place|en|capital city|s/Haryana,Punjab}} for -- [[Chandigarh]]. We fall back to older code that doesn't depend on the holonym index existing. -- FIXME: This may not be necessary. In the example just given, when processing Haryana we add to -- [[:Category:en:State capitals of India]], and nothing extra gets added when processing Punjab. -- Possibly we can just skip this case entirely. local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group and container_trail[1] and not spec.no_container_cat then for _, container in ipairs(container_trail[1]) do insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key, container.spec))) inserted_specific_variant_cat = true end end end if not inserted_specific_variant_cat then insert(retcats, capital_cat) end else -- We didn't recognize the holonym placetype; just put in 'Capital cities'. insert(retcats, "Capital cities") end return retcats end --[=[ This is invoked specially for all placetypes (see the `*` placetype key at the bottom of `placetype_data`). This is used in two ways: # To add pages to generic holonym categories like [[:Category:en:Places in Merseyside, England]] (and [[:Category:en:Places in England]]) for any pages that have `co/Merseyside` as their holonym. # To categorize demonyms in bare placename categories like [[:Category:en:Merseyside, England]] if the demonym description mentions `co/Merseyside` and doesn't mention a more specific placename that also has a category. (In this case there are none, but we can have demonyms at multiple levels, e.g. in France for individual villages, departments, administrative regions, and for the entire country, and for example we only want to categorize a demonym into [[:Category:France]] if no more specific category applies.) Unlike when invoked from {{tl|place}}, a demonym invocation only adds the most specific holonym category and not the category of any containing polity (hence if we add [[:Category:en:Merseyside, England]] we won't also add [[:Category:England]]). This code also handles cities; e.g. for the first use case above, it would be used to add a page that has `city/Boston` as a holonym to [[:Category:en:Places in Boston]], along with [[:Category:en:Places in Massachusetts, USA]] and [[:Category:en:Places in the United States]]. The city handler tries to deal with the possibility of multiple cities having the same name. For example, the code in [[Module:place/locations]] knows about the city of [[Columbus]], [[Ohio]], which has containing polities `Ohio` (a state) and `the United States` (a country). If either containing polity is mentioned, the handler proceeds to return the key `Columbus` (along with `Ohio, USA` and `the United States`). Otherwise, if any other state or country is mentioned, the handler returns nothing, and otherwise it assumes the mentioned city is the one we're considering and returns `Columbus` etc. This works correctly if the place only mentions Ohio and a holonym for a Columbus in a different country is encountered, because of the function `augment_holonyms_with_container`, which adds the US as a holonym when Ohio is encountered. The single parameter `data` is as in category handlers. The return value is a list of categories (without the preceding language code). ]=] local function generic_place_cat_handler(data) local from_demonym = data.from_demonym local retcats = {} local function insert_retkey(key, spec) if from_demonym then insert(retcats, key) else insert(retcats, ("Địa danh của %s"):format(export.get_prefixed_key(key, spec))) end end local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group then if not spec.no_generic_place_cat then -- This applies to continents and continental regions. insert_retkey(key, spec) end -- Categorize both in key, and in the larger location(s) that the key is part of, e.g. [[Hirakata]] goes in -- both [[Category:Places in Osaka Prefecture, Japan]] and [[Category:Places in Japan]]. But not when -- no_container_cat is set (e.g. for 'United Kingdom'). if not spec.no_container_cat then for _, container_set in ipairs(container_trail) do local stop_adding_containers = false for _, container in ipairs(container_set) do if not container.spec.no_generic_place_cat then insert_retkey(container.key, container.spec) end if container.spec.no_container_cat then stop_adding_containers = true end end if stop_adding_containers then break end end end return retcats end end --[==[ Special category handler run for all placetypes that checks for specified division placetypes of known locations and categorizes appropriately. ]==] function export.political_division_cat_handler(data) if data.from_demonym then return end local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group then local divlists = {} if spec.divs then insert(divlists, spec.divs) end if spec.addl_divs then insert(divlists, spec.addl_divs) end for _, divlist in ipairs(divlists) do if type(divlist) ~= "table" then divlist = {divlist} end for _, div in ipairs(divlist) do if type(div) == "string" then div = {type = div} end local sgdiv = export.maybe_singularize_placetype(div.type) or div.type local prep = div.prep or "of" local cat_as = div.cat_as or div.type if type(cat_as) ~= "table" then cat_as = {cat_as} end if not export.placetype_data[sgdiv] then internal_error("Placetype %s associated with known location key %s and data %s not found in " .. "`placetype_data`", sgdiv, key, spec) end if sgdiv == data.entry_placetype then local retcats = {} for _, pt_cat in ipairs(cat_as) do if type(pt_cat) == "string" then pt_cat = {type = pt_cat} end local pt_prep = pt_cat.prep or prep insert(retcats, ucfirst(pt_cat.type) .. " " .. pt_prep .. " " .. export.get_prefixed_key(key, spec)) end return retcats end end end end end --[==[ This is used to add pages to "bare" categories like [[:Category:en:Georgia, USA]] for `[[Georgia]]` and any foreign-language terms that are translations of the state of Georgia. We look at the page title (or its overridden value in {{para|pagename}}) as well as the glosses in {{para|t}}/{{para|t2}} etc., various extra-info values such as the modern names in {{para|modern}}, and any values specified using a form-of directive. We need to pay attention to the entry placetypes specified so we don't overcategorize; e.g. the US state of Georgia is `[[Джорджия]]` in Russian but the country of Georgia is `[[Грузия]]`, and if we just looked for matching names, we'd get both Russian terms categorized into both [[:Category:ru:Georgia, USA]] and [[:Category:ru:Georgia]]. We also need to check the containing holonyms to make sure there isn't a mismatch (so we don't e.g. categorize Newark, Delaware in [[:Category:en:Newark]], which is intended for Newark, New Jersey). ]==] function export.get_bare_categories(args, overall_place_spec) local bare_cats = {} local place_descs = overall_place_spec.descs local possible_placetypes_by_place_desc = {} for i, place_desc in ipairs(place_descs) do possible_placetypes_by_place_desc[i] = {} for _, placetype in ipairs(place_desc.placetypes) do if not export.placetype_is_ignorable(placetype) then local equivs = export.get_placetype_equivs(placetype, {register_former_as_non_former = true}) for _, equiv in ipairs(equivs) do insert(possible_placetypes_by_place_desc[i], equiv.placetype) end end end end local function check_term(term) -- Treat Wikipedia links like local ones. term = term:gsub("%[%[w:", "[["):gsub("%[%[wikipedia:", "[[") term = export.remove_links_and_html(term) term = term:gsub("^ ", "") 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["Hạt " .. unlinked_placename .. ", Ireland"] or m_locations.northern_ireland_counties["Hạt " .. unlinked_placename .. ", Bắc Ireland"] then return prefix_display_handler("Hạt", holonym_placename) end -- Display handler for Taiwanese counties. Taiwanese counties are displayed as e.g. "[[Chiayi]] County". if m_locations.taiwan_counties[unlinked_placename .. ", Đài Loan"] then return suffix_display_handler("Hạt", holonym_placename) end -- Display handler for Romanian counties. Romanian counties are displayed as e.g. "[[Cluj]] County". if m_locations.romania_counties[unlinked_placename .. ", România"] then return suffix_display_handler("Hạt", 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 .. ", Nhật Bản"] 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 .. ", Bulgaria"] or m_locations.iran_provinces[unlinked_placename .. ", Iran"] or m_locations.laos_provinces[unlinked_placename .. ", Lào"] or m_locations.north_korea_provinces[unlinked_placename .. ", Cộng hòa Dân chủ Nhân dân Triều Tiên"] or m_locations.south_korea_provinces[unlinked_placename .. ", Hàn Quốc"] or m_locations.thailand_provinces[unlinked_placename .. ", Thái Lan"] or m_locations.turkey_provinces[unlinked_placename .. ", Thổ Nhĩ Kỳ"] or m_locations.vietnam_provinces[unlinked_placename .. ", Việt Nam"] 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 .. ", 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 = "của", 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", }, ["quốc gia"] = { link = true, class = "polity", ["continent/*"] = {true, "Quốc gia"}, 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", }, ["đặc điểm tự nhiên!"] = { category_link = "tổng hợp các yếu tố vật chất hình thành tồn tại", bare_category_parent = "địa danh", }, ["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", }, ["địa danh!"] = { generic_before_non_cities = "của", generic_before_cities = "của", 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 = "tên", }, ["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", }, ["tổ chức chính trị"] = { link = true, category_link = "[[independent]] or [[semi-]][[independent]] [[polity|polities]]", class = "polity", bare_category_parent = "địa danh", 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 = true, 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 return export mp2g1t1gj06yyi4z4lc9c4vhel60hst 2350127 2349938 2026-05-04T09:32:27Z TheHighFighter2 42988 2350127 Scribunto text/plain local export = {} export.force_cat = false -- set to true for testing local m_locations = require("Module:place/locations") local m_links = require("Module:links") local m_table = require("Module:table") local m_strutils = require("Module:string utilities") local debug_track_module = "Module:debug/track" local en_utilities_module = "Module:en-utilities" local dump = mw.dumpObject local insert = table.insert local concat = table.concat local internal_error = m_locations.internal_error export.internal_error = internal_error local process_error = m_locations.process_error export.process_error = process_error local unpack = unpack or table.unpack -- Lua 5.2 compatibility local ucfirst = m_strutils.ucfirst local ulower = m_strutils.lower local rmatch = m_strutils.match local split = m_strutils.split --[==[ intro: This module contains placetype data used by [[Module:place]] and {{tl|place}}, along with a significant amount of code to work with both placetypes and locations, as well as some placename-related info (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 else placetype = 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 = "tên" 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 `"của"` 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 "của" 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 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 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"] = "lục địa", ["contr"] = "continental region", ["contregion"] = "continental region", ["cpar"] = "civil parish", ["damun"] = "direct-administered municipality", ["dep"] = "dependency", ["department capital"] = "departmental capital", ["dept"] = "department", ["depterr"] = "dependent territory", ["dist"] = "district", ["distmun"] = "district municipality", ["div"] = "division", ["emp"] = "empire", ["fpref"] = "French prefecture", ["gov"] = "governorate", ["govnat"] = "governorate", ["home-rule city"] = "home rule city", ["home-rule municipality"] = "home rule municipality", ["inner-city area"] = "inner city area", ["ires"] = "Indian reservation", ["isl"] = "island", ["lbor"] = "London borough", ["lga"] = "local government area", ["lgarea"] = "local government area", ["lgd"] = "local government district", ["lgdist"] = "local government district", ["metbor"] = "metropolitan borough", ["metcity"] = "metropolitan city", ["metmun"] = "metropolitan municipality", ["mtn"] = "mountain", ["mun"] = "municipality", ["mundist"] = "municipal district", ["nonmetropolitan county"] = "non-metropolitan county", ["obl"] = "oblast", ["okr"] = "okrug", ["p"] = "province", ["par"] = "parish", ["parmun"] = "parish municipality", ["pen"] = "peninsula", ["plcity"] = "prefecture-level city", ["plcolony"] = "Polish colony", ["pref"] = "prefecture", ["prefcity"] = "prefecture-level city", ["preflcity"] = "prefecture-level city", ["prov"] = "province", ["r"] = "region", ["range"] = "mountain range", ["rcm"] = "regional county municipality", ["rcomun"] = "regional county municipality", ["rdist"] = "regional district", ["rep"] = "republic", ["rhrom"] = "rural hromada", ["riv"] = "river", ["rmun"] = "regional municipality", ["robor"] = "royal borough", ["romp"] = "Roman province", ["runit"] = "regional unit", ["rurmun"] = "rural municipality", ["s"] = "state", ["sar"] = "special administrative region", ["shrom"] = "settlement hromada", ["spref"] = "subprefecture", ["sprefcity"] = "sub-prefectural city", ["sprovcity"] = "subprovincial city", ["submet city"] = "sub-metropolitan city", ["submetropolitan city"] = "sub-metropolitan city", ["sub-prefecture-level city"] = "sub-prefectural city", ["sub-provincial city"] = "subprovincial city", ["sub-provincial district"] = "subprovincial district", ["terr"] = "territory", ["terrauth"] = "territorial authority", ["twp"] = "township", ["twpmun"] = "township municipality", ["uauth"] = "unitary authority", ["ucomm"] = "unincorporated community", ["udist"] = "unitary district", ["uhrom"] = "urban hromada", ["uterr"] = "union territory", ["utwpmun"] = "united township municipality", ["val"] = "valley", ["vdc"] = "village development committee", ["vil"] = "village", ["voi"] = "voivodeship", ["wcomm"] = "Welsh community", } local no_link_def_article = {link = false, article = ""} 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"] = {"^Vịnh của "}, ["lake"] = {"^Hồ của "}, ["country"] = {"^Republic of ", " Republic$"}, ["republic"] = {"^Republic of ", " Republic$"}, ["region"] = {"^Vùng của "}, ["river"] = {"^Sông của "}, ["local government area"] = {"^Shire of "}, ["county"] = {"^Shire of "}, ["Indian reservation"] = {" Reservation", " Nation"}, ["tribal jurisdictional area"] = {" Reservation", " Nation"}, } --[==[ var: If any of the following holonyms are present, the associated holonyms are automatically added to the end of the list of holonyms for categorization (but not display) purposes. ]==] export.cat_implications = { ["region"] = { ["Eastern Europe"] = {"continent/Europe"}, ["Central Europe"] = {"continent/Europe"}, ["Western Europe"] = {"continent/Europe"}, ["South Europe"] = {"continent/Europe"}, ["Southern Europe"] = {"continent/Europe"}, ["Northern Europe"] = {"continent/Europe"}, ["Northeast Europe"] = {"continent/Europe"}, ["Northeastern Europe"] = {"continent/Europe"}, ["Southeast Europe"] = {"continent/Europe"}, ["Southeastern Europe"] = {"continent/Europe"}, ["North Caucasus"] = {"continent/Europe"}, ["South Caucasus"] = {"continent/Asia"}, ["South Asia"] = {"continent/Asia"}, ["Southern Asia"] = {"continent/Asia"}, ["East Asia"] = {"continent/Asia"}, ["Eastern Asia"] = {"continent/Asia"}, ["Central Asia"] = {"continent/Asia"}, ["West Asia"] = {"continent/Asia"}, ["Western Asia"] = {"continent/Asia"}, ["Southeast Asia"] = {"continent/Asia"}, ["North Asia"] = {"continent/Asia"}, ["Northern Asia"] = {"continent/Asia"}, ["Anatolia"] = {"continent/Asia"}, ["Asia Minor"] = {"continent/Asia"}, ["Mesopotamia"] = {"continent/Asia"}, ["North Africa"] = {"continent/Africa"}, ["Central Africa"] = {"continent/Africa"}, ["West Africa"] = {"continent/Africa"}, ["East Africa"] = {"continent/Africa"}, ["Southern Africa"] = {"continent/Africa"}, ["Central America"] = {"continent/Central America"}, ["Caribbean"] = {"continent/North America"}, ["Polynesia"] = {"continent/Oceania"}, ["Micronesia"] = {"continent/Oceania"}, ["Melanesia"] = {"continent/Oceania"}, ["Siberia"] = {"country/Russia", "continent/Asia"}, ["Russian Far East"] = {"country/Russia", "continent/Asia"}, ["South Wales"] = {"constituent country/Wales", "continent/Europe"}, ["Balkans"] = {"continent/Europe"}, ["West Bank"] = {"country/Palestine", "continent/Asia"}, ["Gaza"] = {"country/Palestine", "continent/Asia"}, ["Gaza Strip"] = {"country/Palestine", "continent/Asia"}, } } ------------------------------------------------------------------------------------------ -- Category and display handlers -- ------------------------------------------------------------------------------------------ local function city_type_cat_handler(data) local entry_placetype = data.entry_placetype local generic_before_non_cities = export.get_placetype_prop(entry_placetype, "generic_before_non_cities") if not generic_before_non_cities then internal_error("city_type_cat_handler called on placetype %s that doesn't have a `generic_before_non_cities`" .. " setting", entry_placetype) end local plural_entry_placetype = export.pluralize_placetype(entry_placetype) local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group and not spec.is_former_place and not spec.is_city then -- Categorize both in key, and in the larger polity that the key is part of, e.g. [[Hirakata]] goes in both -- "Cities in Osaka Prefecture" and "Cities in Japan". (But don't do the latter if no_container_cat is set.) local cap_plural_entry_placetype = ucfirst(plural_entry_placetype) local retcats = {("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities, export.get_prefixed_key(key, spec))} if container_trail[1] and not spec.no_container_cat then for _, container in ipairs(container_trail[1]) do insert(retcats, ("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities, export.get_prefixed_key(container.key, container.spec))) end end return retcats end end local function capital_city_cat_handler(data, non_city) local holonym_placetype, holonym_placename, holonym_index, place_desc = data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc -- The first time we're called we want to return something; otherwise we will be called for later-mentioned -- holonyms, which can result in wrongly classifying into e.g. `National capitals`. Simulate the loop in -- find_placetype_cat_specs() over holonyms so we get the proper `Cities in ...` categories as well as the capital -- category/categories we add below. local retcats if not non_city and place_desc.holonyms then for h_index, holonym in export.get_holonyms_to_check(place_desc, holonym_index) do local h_placetype, h_placename = holonym.placetype, holonym.unlinked_placename retcats = city_type_cat_handler { entry_placetype = "city", holonym_placetype = h_placetype, holonym_placename = h_placename, holonym_index = h_index, place_desc = place_desc, } if retcats then break end end end if not retcats then retcats = {} end -- Now find the appropriate capital-type category for the placetype of the holonym, e.g. 'State capitals'. If we -- recognize the holonym among the known holonyms in [[Module:place/locations]], also add a category like 'State -- capitals of the United States'. Truncate e.g. 'autonomous region' to 'region', 'union territory' to 'territory' -- when looking up the type of capital category, if we can't find an entry for the holonym placetype itself (there's -- an entry for 'autonomous community'). local capital_cat = export.placetype_to_capital_cat[holonym_placetype] if not capital_cat then capital_cat = export.placetype_to_capital_cat[holonym_placetype:gsub("^.* ", "")] end if capital_cat then capital_cat = ucfirst(capital_cat) local inserted_specific_variant_cat = false if holonym_index then -- Now find the first recognized holonym location. We don't stop when :also is seen because of the common pattern -- where we use :also to specify that a given city is the capital at multiple surrounding levels. local matching_group, matching_key, matching_spec, matching_container_trail, matching_holonym_index for h_index = holonym_index, #place_desc.holonyms do if place_desc.holonyms[h_index].placetype then matching_group, matching_key, matching_spec, matching_container_trail = export.find_matching_holonym_location { holonym_placetype = place_desc.holonyms[h_index].placetype, holonym_placename = place_desc.holonyms[h_index].unlinked_placename, holonym_index = h_index, place_desc = place_desc, } if matching_group then matching_holonym_index = h_index break end end end if matching_holonym_index == holonym_index then if matching_container_trail[1] and not matching_spec.no_container_cat then for _, container in ipairs(matching_container_trail[1]) do insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key, container.spec))) inserted_specific_variant_cat = true end end elseif matching_holonym_index then -- Check to make sure that the holonym placetype we were called on is listed among the -- divtypes of the location we found. local function insert_specific_variant_if_possible(key, spec) return export.get_equiv_placetype_prop(holonym_placetype, function(pt) local plural_holonym_placetype = export.pluralize_placetype(pt) local saw_matching_div if spec.divs then local divs = spec.divs if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) ~= "table" then div = {type = div} end if plural_holonym_placetype == div.type then saw_matching_div = true break end end end if saw_matching_div then insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(key, spec))) return true end return false end) end if insert_specific_variant_if_possible(matching_key, matching_spec) then inserted_specific_variant_cat = true elseif not matching_spec.no_container_cat then for _, containers in ipairs(matching_container_trail) do local saw_no_container_cat = false for _, container in ipairs(containers) do if insert_specific_variant_if_possible(container.key, container.spec) then inserted_specific_variant_cat = true break end saw_no_container_cat = saw_no_container_cat or container.spec.no_container_cat end if inserted_specific_variant_cat or saw_no_container_cat then break end end end end else -- This happens when in an invocation like {{place|en|capital city|s/Haryana,Punjab}} for -- [[Chandigarh]]. We fall back to older code that doesn't depend on the holonym index existing. -- FIXME: This may not be necessary. In the example just given, when processing Haryana we add to -- [[:Category:en:State capitals of India]], and nothing extra gets added when processing Punjab. -- Possibly we can just skip this case entirely. local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group and container_trail[1] and not spec.no_container_cat then for _, container in ipairs(container_trail[1]) do insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key, container.spec))) inserted_specific_variant_cat = true end end end if not inserted_specific_variant_cat then insert(retcats, capital_cat) end else -- We didn't recognize the holonym placetype; just put in 'Capital cities'. insert(retcats, "Capital cities") end return retcats end --[=[ This is invoked specially for all placetypes (see the `*` placetype key at the bottom of `placetype_data`). This is used in two ways: # To add pages to generic holonym categories like [[:Category:en:Places in Merseyside, England]] (and [[:Category:en:Places in England]]) for any pages that have `co/Merseyside` as their holonym. # To categorize demonyms in bare placename categories like [[:Category:en:Merseyside, England]] if the demonym description mentions `co/Merseyside` and doesn't mention a more specific placename that also has a category. (In this case there are none, but we can have demonyms at multiple levels, e.g. in France for individual villages, departments, administrative regions, and for the entire country, and for example we only want to categorize a demonym into [[:Category:France]] if no more specific category applies.) Unlike when invoked from {{tl|place}}, a demonym invocation only adds the most specific holonym category and not the category of any containing polity (hence if we add [[:Category:en:Merseyside, England]] we won't also add [[:Category:England]]). This code also handles cities; e.g. for the first use case above, it would be used to add a page that has `city/Boston` as a holonym to [[:Category:en:Places in Boston]], along with [[:Category:en:Places in Massachusetts, USA]] and [[:Category:en:Places in the United States]]. The city handler tries to deal with the possibility of multiple cities having the same name. For example, the code in [[Module:place/locations]] knows about the city of [[Columbus]], [[Ohio]], which has containing polities `Ohio` (a state) and `the United States` (a country). If either containing polity is mentioned, the handler proceeds to return the key `Columbus` (along with `Ohio, USA` and `the United States`). Otherwise, if any other state or country is mentioned, the handler returns nothing, and otherwise it assumes the mentioned city is the one we're considering and returns `Columbus` etc. This works correctly if the place only mentions Ohio and a holonym for a Columbus in a different country is encountered, because of the function `augment_holonyms_with_container`, which adds the US as a holonym when Ohio is encountered. The single parameter `data` is as in category handlers. The return value is a list of categories (without the preceding language code). ]=] local function generic_place_cat_handler(data) local from_demonym = data.from_demonym local retcats = {} local function insert_retkey(key, spec) if from_demonym then insert(retcats, key) else insert(retcats, ("Địa danh của %s"):format(export.get_prefixed_key(key, spec))) end end local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group then if not spec.no_generic_place_cat then -- This applies to continents and continental regions. insert_retkey(key, spec) end -- Categorize both in key, and in the larger location(s) that the key is part of, e.g. [[Hirakata]] goes in -- both [[Category:Places in Osaka Prefecture, Japan]] and [[Category:Places in Japan]]. But not when -- no_container_cat is set (e.g. for 'United Kingdom'). if not spec.no_container_cat then for _, container_set in ipairs(container_trail) do local stop_adding_containers = false for _, container in ipairs(container_set) do if not container.spec.no_generic_place_cat then insert_retkey(container.key, container.spec) end if container.spec.no_container_cat then stop_adding_containers = true end end if stop_adding_containers then break end end end return retcats end end --[==[ Special category handler run for all placetypes that checks for specified division placetypes of known locations and categorizes appropriately. ]==] function export.political_division_cat_handler(data) if data.from_demonym then return end local group, key, spec, container_trail = export.find_matching_holonym_location(data) if group then local divlists = {} if spec.divs then insert(divlists, spec.divs) end if spec.addl_divs then insert(divlists, spec.addl_divs) end for _, divlist in ipairs(divlists) do if type(divlist) ~= "table" then divlist = {divlist} end for _, div in ipairs(divlist) do if type(div) == "string" then div = {type = div} end local sgdiv = export.maybe_singularize_placetype(div.type) or div.type local prep = div.prep or "of" local cat_as = div.cat_as or div.type if type(cat_as) ~= "table" then cat_as = {cat_as} end if not export.placetype_data[sgdiv] then internal_error("Placetype %s associated with known location key %s and data %s not found in " .. "`placetype_data`", sgdiv, key, spec) end if sgdiv == data.entry_placetype then local retcats = {} for _, pt_cat in ipairs(cat_as) do if type(pt_cat) == "string" then pt_cat = {type = pt_cat} end local pt_prep = pt_cat.prep or prep insert(retcats, ucfirst(pt_cat.type) .. " " .. pt_prep .. " " .. export.get_prefixed_key(key, spec)) end return retcats end end end end end --[==[ This is used to add pages to "bare" categories like [[:Category:en:Georgia, USA]] for `[[Georgia]]` and any foreign-language terms that are translations of the state of Georgia. We look at the page title (or its overridden value in {{para|pagename}}) as well as the glosses in {{para|t}}/{{para|t2}} etc., various extra-info values such as the modern names in {{para|modern}}, and any values specified using a form-of directive. We need to pay attention to the entry placetypes specified so we don't overcategorize; e.g. the US state of Georgia is `[[Джорджия]]` in Russian but the country of Georgia is `[[Грузия]]`, and if we just looked for matching names, we'd get both Russian terms categorized into both [[:Category:ru:Georgia, USA]] and [[:Category:ru:Georgia]]. We also need to check the containing holonyms to make sure there isn't a mismatch (so we don't e.g. categorize Newark, Delaware in [[:Category:en:Newark]], which is intended for Newark, New Jersey). ]==] function export.get_bare_categories(args, overall_place_spec) local bare_cats = {} local place_descs = overall_place_spec.descs local possible_placetypes_by_place_desc = {} for i, place_desc in ipairs(place_descs) do possible_placetypes_by_place_desc[i] = {} for _, placetype in ipairs(place_desc.placetypes) do if not export.placetype_is_ignorable(placetype) then local equivs = export.get_placetype_equivs(placetype, {register_former_as_non_former = true}) for _, equiv in ipairs(equivs) do insert(possible_placetypes_by_place_desc[i], equiv.placetype) end end end end local function check_term(term) -- Treat Wikipedia links like local ones. term = term:gsub("%[%[w:", "[["):gsub("%[%[wikipedia:", "[[") term = export.remove_links_and_html(term) term = term:gsub("^ ", "") 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["Hạt " .. unlinked_placename .. ", Ireland"] or m_locations.northern_ireland_counties["Hạt " .. unlinked_placename .. ", Bắc Ireland"] then return prefix_display_handler("Hạt", holonym_placename) end -- Display handler for Taiwanese counties. Taiwanese counties are displayed as e.g. "[[Chiayi]] County". if m_locations.taiwan_counties[unlinked_placename .. ", Đài Loan"] then return suffix_display_handler("Hạt", holonym_placename) end -- Display handler for Romanian counties. Romanian counties are displayed as e.g. "[[Cluj]] County". if m_locations.romania_counties[unlinked_placename .. ", România"] then return suffix_display_handler("Hạt", 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 .. ", Nhật Bản"] 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 .. ", Bulgaria"] or m_locations.iran_provinces[unlinked_placename .. ", Iran"] or m_locations.laos_provinces[unlinked_placename .. ", Lào"] or m_locations.north_korea_provinces[unlinked_placename .. ", Cộng hòa Dân chủ Nhân dân Triều Tiên"] or m_locations.south_korea_provinces[unlinked_placename .. ", Hàn Quốc"] or m_locations.thailand_provinces[unlinked_placename .. ", Thái Lan"] or m_locations.turkey_provinces[unlinked_placename .. ", Thổ Nhĩ Kỳ"] or m_locations.vietnam_provinces[unlinked_placename .. ", Việt Nam"] 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 .. ", 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 = "của", 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", }, ["quốc gia"] = { link = true, class = "polity", ["continent/*"] = {true, "Quốc gia"}, 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", }, ["đặc điểm tự nhiên!"] = { category_link = "tổng hợp các yếu tố vật chất hình thành tồn tại", bare_category_parent = "địa danh", }, ["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", }, ["địa danh!"] = { generic_before_non_cities = "của", generic_before_cities = "của", 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 = "tên", }, ["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", }, ["tổ chức chính trị"] = { link = true, category_link = "[[independent]] or [[semi-]][[independent]] [[polity|polities]]", class = "polity", bare_category_parent = "địa danh", 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 = true, 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 return export mdlxouz1o885utjgjdk9tg4wa8cvlr4 Mô đun:place/locations 828 282249 2349909 2348610 2026-05-03T13:17:39Z Hiyuune 50834 2349909 Scribunto text/plain local export = {} export.force_cat = false -- set to true to force category generation even on non-mainspace pages local m_table = require("Module:table") local string_utilities_module = "Module:string utilities" local en_utilities_module = "Module:en-utilities" local insert = table.insert local concat = table.concat local dump = mw.dumpObject local unpack = unpack or table.unpack -- Lua 5.2 compatibility --[==[ intro: This module contains data on all known locations, along with some lower-level code to process them (higher-level known-location code is in [[Module:place/placetypes]]). You must load this module using require(), not using mw.loadData(). ===Location data=== '''NOTE: In order to understand the following better, first read the introductory documentation in [[Module:place]], especially the section `More about known locations`.''' The bulk of the code in this module (after some helper functions and placetype tables) describes the known locations and their relationships. Locations are grouped into ''location groups'' that share some common properties (examples are states of the United States and cities in Brazil). Each location group is associated with two tables, a ''data table'' that lists the locations and their individual properties, and a ''metadata table'' that lists group-level properties and defaults for the location properties. Each metadata table points to the associated data table (i.e. contains the data table as its `data` field), and the global `locations` variable holds a list of all group metadata tables. A given location is generally described by three values: (a) the group metadata table for the group the location is part of; (b) the location's canonical ''key'', which is the actual key in the group's data table and is globally unique across all locations; and (c) the location's ''spec'', which is the initialized object describing the properties of the location and comes from the value in the data table corresponding to the canonical key, transformed by the `initialize_spec()` function. These are typically named `group`, `key` and `spec`, respectively and in that order, and are found in the arguments to many functions. In a per-group data table, the keys are either ''canonical keys'' describing locations (which, as mentioned above, must be globally unique) or ''alias keys'' specifying an allowed alias for a given location. There may be multiple aliases for a given location and the alias keys only need to be unique within a particular group data table, not across all groups. It is also possible for the same string to serve as an alias key in one group and a canonical key in another group. (For example, `Newcastle` appears as an alias key in two different groups, referring to two different locations, canonically known as `Newcastle upon Tyne`, for the city in England, and `Newcastle, New South Wales`, for the city in New South Wales, Australia; and `Birmingham` appears both as a canonical key in the group of English cities and an alias key for canonical `Birmingham, Alabama` in the group of US cities.) The corresponding value objects are different for canonical and alias keys. Corresponding to canonical keys are ''location specs'', describing the properies of the location that cannot be derived from default properties of the group or global defaults. Corresponding to alias keys are ''alias specs'', which are highly restricted in the properties they can contain, and whose properties do not have per-group defaults, but only global defaults. The canonical key is always the same as the bare category corresponding to the location, which is one of the reasons it must be globally unique. For example, the country of Georgia uses the canonical key `Georgia` and corresponding bare category [[:Category:Georgia]], while the US state of Georgia uses the canonical key `Georgia, USA` and corresponding bare category [[:Category:Georgia, USA]]. The following conventions are followed in naming keys: * Countries, ''country-like entities'' (which are a mixture of unrecognized de-facto states and dependent territories) and ''former countries'' (which also includes other types of polities, such as the Roman Empire) use their unqualified placename as the canonical key. (See the documentation for [[Module:place]] for the distinction between keys and placenames, which is critical to understand when working with location data.) This also applies to constituent countries (such as England, Aruba and the Faroe Islands) and constituent parts of grouped dependent territories (such as the island of Saint Helena, which is administratively part of the British overseas territory of Saint Helena, Ascension and Tristan da Cunha). * Cities (including prefecture-level cities in China, which behave in most respects more like non-city administrative divisions) also normally use their unqualified placename as the canonical key, but if this causes name conflicts or ambiguities, they use a ''qualified key'' containing either the country name or immediate containing division (if different) following a comma, such as the case of `Newcastle, New South Wales` and `Birmingham, Alabama` above. Examples of name conflicts are the two cities just given; examples of ambiguities are the major cities of León and Mérida in Mexico and city of Cartagena, Colombia, which are given the respective canonical keys of `León, Guanajuato`, `Mérida, Yucatán` and `Cartagena, Colombia` to avoid ambiguity with the well-known respective cities of the same name in Spain, even though none of those cities are large enough to be included as known locations in this module. (The cutoff is generally having a metro area of at least 1,000,000 inhabitants, although there are exceptions.) * Administrative divisions of countries, other than the exceptions noted above for constituent countries and dependent territories, use a qualified key that contains the name of the country or constituent country in it, e.g. `Normandy, France` (a region), `Calvados, France` (a department in the region of Normandy), `Herefordshire, England` (a ceremonial county), `Northwest Territories, Canada` (a territory), `Central Finland, Finland` (a region), `Antalya Province, Turkey` (a province), `Cluj County, Romania` (a county), `County Cork, Ireland` (a county) and `New York, USA` (a state). As shown in these various examples, (a) first and second-level divisions are sometimes both included (as in France, the United Kingdom and China); (b) the qualifier after the comma is sometimes a constituent country (England) instead of a country (United Kingdom), and is sometimes abbreviated (USA rather than United States or Unites States of America); (c) the word `the` is not normally included in the key even if the location is normally preceded by `the` when following a preposition (there is a property in the location and alias specs to indicate this), except in a very few cases (most notably `The Hague`); (d) the country is included as a qualifier even if it creates an apparent redundancy, as with `Central Finland, Finland`; and (e) sometimes the placetype is included in the key, as with provinces in Turkey and several other countries; states in Nigeria; and counties in Ireland, Romania and several other countries. Whether the placetype is included, and whether it follows or precedes the placename, depends on per-country conventions. For example, provinces in Turkey, Iran and several other countries (likewise for states in Nigeria, oblasts in Russia, etc.) conventionally include the word "Province", "State", "Oblast" etc. in their name because they are normally named after the largest city in the division, which would otherwise lead to ambiguity; and counties in Ireland and Northern Ireland (and likewise County Durham, England) normally have the word "County" preceding rather than following them in their conventional name, so we follow this practice. The Wikipedia article naming scheme for a given administrative division is a strong clue as to how the division is normally referred to, and we usually follow this practice. (A minor exception is that the Wikipedia articles for provinces in Iran, Laos and Thailand include the word `province` with an initial lowercase letter while provinces elsewhere, e.g. North and South Korea, Saudi Arabia and Turkey, use uppercase `Province`; we normalize to uppercase `Province` in all cases.) As mentioned above, associated with canonical keys in the group data table are location specs, which are objects containing properties. It is important here to distinguish ''initialized specs'' from ''uninitialized specs''. Unininitialized specs are as directly specified in [[Module:place/locations]], containing only those properties that differ from the per-group or global defaults. Initialized specs result from calling `initialize_spec()` on an uninitialized spec (it is idempotent in that it will do nothing if encountering an already-initialized spec). This copies all group-level defaults that are not overridden in the location spec itself from the group-level metadata table into the location spec, so that in general, no more reference need be made to the group to fetch the correct value of a given location property. (The initialization process also does more transformations in a few cases, noted below.) Note that the default value of a given property is stored under a key in the group metadata table that is preceded by the string `default_`; for example, the default value corresponding to the `placetype` property of a given location is specified in the `default_placetype` key in the group metadata table. The following are the properties of the location spec. * `placetype`: String specifying the placetype of the location (e.g. "country", "state", province"). This can also be a table of such types; in this case, the first listed type is the canonical type that will be used in descriptions, but the location will be recognized (e.g. in a holonym, or for categorizing into the bare category) when tagged with any of the specified types. The placetype '''must''' be either specified on an individual location or defaulted at the group level, or an error occurs. * `container`: Either a string, a ''canonicalized container'' structure or a list of either type, specifying the immediate ''container'' (or containers) of the given location. A container is another location which this location is considered to be directly part of, either politically or (above the country level) geographically. Some locations belong to multiple immediate containers; this applies especially to transcontinental countries such as Russia and Turkey. Containers can themselves have containers, forming a tree (or more correctly, a [[w:directed acyclic graph]]) of locations. The list of immediate container(s), followed by the container(s) of the container(s), etc., is termed the ''container trail'', and some functions compute and return this trail as part of their operation. When a location spec is initialized, the given container spec is canonicalized into ''canonical container form'', which consists of a list of canonicalized container structures, each of which is of the form `{key = "``container_key``", placetype = "``container_placetype``"}`, where ``container_key`` is a canonical location key and ``container_placetype`` should be the listed placetype for the location, or the first listed placetype if there are multiple. (FIXME: Since the key uniquely identifies the container location, we should eliminate the placetype from the container structure.) The list of canonicalized container structures is stored into the `.containers` field of the location spec (this happens even if the container value is unset in its uninitialized spec form, causing it to default to the corresponding group-level value), and the `.container` field is set to {nil}. The canonicalization process is described in more detail below under [[#Container spec canonicalization]]. * `divs`: List of recognized political divisions; e.g. for the Netherlands, a specification of the form `divs = {"provinces", "municipalities"}` will allow categories such as [[:Category:de:Provinces of the Netherlands]] and [[:Category:pt:Municipalities of the Netherlands]] to be created. Any division that appears here must also be found in `placetype_data`, or an error occurs. The entities appearing in the `divs` list can be structures as well as just strings; this is explained more below under [[#Location divisions]]. Additional political divisions that apply to all locations in a group can be specified at the group level using the group-only property `addl_divs`, which has the same format as `divs`. This is intended to be used in the situation where some division types are shared among all locations in the group and others differ from location to location. An example where this is used is the United States, where `census-designated places` is specified in the group-level `addl_divs` so that all 50 states have census-designated places categorized as e.g. [[:Category:Census-designated places in Arizona, USA]], but `counties` and `county seats` are specified in the group-level `default_divs` because not all states have counties and county seats (Alaska has boroughs and borough seats and Louisiana has parishes and parish seats), and some states have additional divisions (New Jersey and Pennsylvania also have boroughs, while Colorado and Connecticut have municipalities). Note that under most circumstances (particularly, if `container_parent_type` is not set as a property associated with the division type), any division type specified on a sub-country-level location must also be specified on all containers up through the country. For example, since French departments specify `communes` and `municipalities` in `default_divs`, the same division types must be (and are) specified on French regions and for France itself. * `keydesc`: String directly specifying a description of the location, for use in generating the contents of category pages related to the location. In place of a string, a function of three arguments (`group`, `key`, `spec`, as is normal for locations) that computes the location description can also be given. This is used, for example, for Russian federal subjects; see `construct_russia_federal_subject_keydesc`. The special string `+++` contained in the keydesc is replaced with the default value of the location description, which specifies the location's placename, placetype, and the corresponding values for each container in the container trail, generally up through (but not beyond) the country level; see `no_include_container_in_desc` below. The location description is used to construct the full description of various categories, such as bare location categories, whose description generally reads `"{{(((}}langname}}} terms related to the people, culture, or territory of ``keydesc``."` where ``keydesc`` is the specified or auto-constructed location description. * `fulldesc`: String overriding the full description for the bare location category (but not for any other category). This is currently used only for the location `Earth`, at the very top of the tree (because the standard `people, culture or territory of ...` text doesn't make sense here), and for `Antarctica` (because it has no permanent inhabitants). FIXME: This should be renamed `bare_category_fulldesc`. * `addl_parents`: Specify additional parents for the bare location category, in addition to the category or categories generated based on the immediate container(s). For example, `Hawaii, USA` specifies `Polynesia` as an additional parent category; both `North Korea` and `South Korea` specify `Korea` (which is a specially handled location category) as an additional parent; and `Earth` specifies `nature` (not a location category, but still a topic category) as an additional parent (which in this case becomes the first parent, as `Earth` has no container). The only restriction on the categories in `addl_parents` is that they must be topic categories, because each language-specific version of the bare location category gets the corresponding language-specific versions of the categories in `addl_parents`. FIXME: This shoudl be renamed `bare_category_addl_parents`. * `wp`: Spec describing how to construct the Wikipedia article for the location. Each spec is either `true` (equivalent to `"%l"`, i.e. use the full location placename directly) or a string containing formatting directives, indicating how to construct the article name. The allowed formatting directives are `%l` (the full location placename), `%e` (the elliptical location placename) and `%c` (the full placename of the first immediate container). For example, the default value of `wp` for the group of United States cities is `"%l, %c"` since the city articles tend to be named e.g. `Austin, Texas` (but with many exceptions, specified using `wp` fields at the city level). Another example is Thai provinces, which specify a group-level default of `"%e province"` as the Wikipedia articles have lowercase `province` in their name but the Thai province keys specified in this module have uppercase `Province`. Here we have to use `%e` to get the placename without the word `Province` in it. The default is `true`, which simply uses the full location placename as the article name. Note that the Wikipedia article, along with the Wikipedia and Commons category pages, are shown in the upper right of bare category pages. * `wpcat`: Spec describing how to construct the Wikipedia category page for the location (i.e. the page listing articles and categories relevant to the location). The format is the same as with `wp`, and it defaults to the value of `wp`. It rarely needs to be specified because the category page and the article page almost always follow the same format. * `commonscat`: Spec describing how to construct the Commons category page for the location (i.e. the page on the MediaWiki Commons site listing articles and categories relevant to the location). It has the same format as `wp` and `wpcat` and defaults to `wpcat`, which is usually (but not always) correct. * `the`: Boolean specifying whether a location should be preceded by `the` when following a preposition, e.g. in category names such as [[:Category:Cities in the Northern Territory, Australia]] and in old-style place descriptions when the location occurs as the first holonym, such as the city [[Darwin]] described using {{tl|place|city|terr/Northern Territory|c/Australia}}. Note that the global default for this and all Boolean properties is {nil}, which amounts to the same as {false}. * `british_spelling`: Boolean indicating whether the location in question uses British spelling. Currently this only affects whether the spelling `neighborhoods` or `neighbourhoods` is used in categories such as [[:Category:Neighborhoods of New York City]] and [[:Category:Neighbourhoods of Sydney]]. This usually needs to be set only at the top level (i.e. country or country-like entity), because lower-level entities look up the container trail for any container that has `british_spelling = true` set, and if found, assume that British spelling applies. The general principle used in setting this is that all countries in Europe, all dependent territories of any such country, all former British colonies, and any dependent territories of these former colonies, are assumed to use British spelling, while all other countries and associated dependent territories are assumed to use American spelling. This can potentially be modified on a case-by-case basis. * `is_city`: Boolean indicating whether the location in question is a city. This is explicitly set to `true` for city-states (e.g. Monaco and Vatican City), dependent territories that are cities (e.g. Hong Kong, Macau, Bonaire, Gibraltar, etc.), certain city-level administrative divisions (such as `City of Belfast, Northern Ireland`) and (through a group-levell setting) New York boroughs. In addition, it is set to `true` in initialize_spec() whenever the group-level `default_placetype == "city"`, so that all cities get it set without explicitly needing to add a group-level setting for this. Note that the condition `default_placetype == "city"` intentionally excludes Chinese prefecture-level cities, which aren't really cities in that (for example) they don't directly contain neighborhoods, but do contain cities within them. This setting is used in various places: (a) to add cities, rivers, etc. to categories like [[:Category:Rivers in Osaka Prefecture, Japan]] and [[:Category:Cities in Wuhan]] for holonyms that are ''not'' cities; (b) to add districts, neighborhoods, and the like to categories like [[:Category:Neighborhoods of Brooklyn]] and [[:Category:Neighborhoods of Monaco]] for holoynms that ''are'' cities; (c) generally, to determine which "generic" placetypes (cities, rivers, neighborhoods, etc.) apply to the location. (Those that can occur with cities have a `generic_before_cities` setting in [[Module:place/placetypes]], and those that can occur with non-cities have a `generic_before_non_cities` setting.) * `is_former_place`: Boolean that should be set on former places such as the Soviet Union and the Roman Empire. For such places, categories such as [[:Category:fr:Rivers in the Soviet Union]] are neither generated nor recognized (more generally, no "generic" placetypes apply except for `places`), and category descriptions include the word `former`. * `overriding_bare_label_parents`: Document me! * `bare_category_parent_type`: Document me! * `no_container_cat`: Document me! * `no_container_parent`: Document me! * `no_generic_place_cat`: Document me! * `no_check_holonym_mismatch`: Document me! * `no_auto_augment_container`: Document me! * `no_include_container_in_desc`: Document me! ====Location divisions==== The `divs` field of a location describes the recognized political division types of that location. Specifying a given division type will cause places defined as being of the specified division type and with the location as a holonym will cause the place to be categorized as ` ``placetypes`` in/of ``location`` `; for example, specifying that the United States has `"states"` as a division will cause anything defined as {{tl|place|fr|state|c/US}} to be categorized under [[:Category:fr:States of the United States]]. Note that you do not have to explicitly specify division types for "generic" placetypes (those that have a `generic_before_non_cities` field if the location is not a city, or that have a `generic_before_cities` field if the location is a city); this includes things like cities, towns, villages, neighbo(u)rhoods and rivers. A given element in the `divs` list is usually a string naming a plural placetype; the placetype is automatically converted to the singular for recognizing the placetype in a {{tl|place}} spec, and irregular plurals such as `kibbutzim` are handled correctly as long as the placetype specifies an appropriate `plural` field (if the `plural` isn't explicitly given, the default singularization algorithm in [[Module:en-utilities]] is run, which gets most things correctly but has problems with `passes` and `fortresses`, which are singularized to `passe` and `fortresse`; for this reason, an explicit plural entry is added to terms in ''-ss''). In place of a string, an object can be given with the plural placetype in the `type` field; this allows additional properties to be specified along with the placetype. An example of this is the `divs` list for Canada: { ["Canada"] = {divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, "counties", "districts", "municipalities", "regional municipalities", "rural municipalities", "parishes", "Indian reserves", "census divisions", {type = "townships", prep = "in"}, }, ...}, } Here, both provinces and territories are set to categorize as `provinces and territories`, meaning that there is a single category [[:Category:Provinces and territories of Canada]] rather than separate categories for provinces and territories. Similar things are done for other countries that have more than one type of first-level administrative division (e.g. Australia, China, India and Pakistan). Note that any placetype listed under `cat_as` must exist in the table of placetypes in [[Module:place/placetypes]], and in fact there is a category-only entry there for `provinces and territories!` (the use of exclamation point following a plural placetype means that the placetype is present only for use in categories and won't be recognized as the placetype field in a {{tl|place}} description). In addition, townships are declared to use `in` rather than `of` as the preposition in the category; hence the category name will be [[:Category:Townships in Canada]] rather than [[:Category:Townships of Canada]]. (The use of `in` vs. `of` is somewhat related to whether a given placetype is an official administrative or statistical division of the location in question and comes in a defined list, in which case `of` should be used, or is more ill-defined, in which case `in` should be used; the default is `of`, and the use of `in` with `townships` is probably by analogy with the use of `in` with cities and towns.) Another more complex example is the divisions given for Quebec: { ["Quebec, Canada"] = {divs = { "counties", {type = "regional county municipalities", container_parent_type = "regional municipalities"}, {type = "regions", container_parent_type = false}, {type = "townships", prep = "in"}, {type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}}, {type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}}, {type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}}, }, ...}, } Here, `container_parent_type` controls the second parent category of the placetype/location category associated with the entry. In this case, for example, [[:Category:Counties of Quebec, Canada]] will have [[:Category:Counties of Canada]] as its second or ''container-level'' parent. However, this doesn't make sense for `regional county municipalities`, which exist only in Quebec (so the parent category [[:Category:Regional county municipalities of Canada]] would have only one subcategory); but they are similar to regional municipalities in British Columbia, Nova Scotia and Ontario, so the `container_parent_type = "regional municipalities"` spec causes the container-level parent of this category to be [[:Category:Regional municipalities of Canada]]. Likewise, `regions` as administrative divisions (as opposed to mere geographic regions) exist only in Quebec; they have no equivalent elsewhere, so we disable the container-level parent using `container_parent_type = false`. The specs for `parish municipalities`, `township municipalities` and `village municipalities` show both that multiple types can be specified under `cat_as` (here, for example, we categorize `parish municipalities` as both `parishes` and `municipalities`) and that these types can themselves have properties, just as for entries directly under `divs`. Specifically, `{type = "parishes", container_parent_type = "counties"}` means that any place defined as a parish municipality in Quebec will be categorized under both [[:Category:Parishes of Quebec, Canada]] and [[:Category:Municipalities of Quebec, Canada]], and that the former will have a container-level parent of [[:Category:Counties of Canada]] (rather than the default of [[:Category:Parishes of Canada]]). Similarly, `township municipalities` will be categorized under both [[:Category:Townships in Quebec, Canada]] (''not'' [[:Category:Townships of Quebec, Canada]]) and [[:Category:Municipalities of Quebec, Canada]]. ====Container spec canonicalization==== A fully canonicalized container spec for a given location consists of a list of ''canonicalized container objects'', each with a `key` and `placetype` field. The `key` field should name the canonical key of some other location at a higher level (e.g. French cities are contained in French departments, which are contained in French regions, which are contained in France, which is contained in Europe, which is contained in Eurasia, which is contained in the Earth). The `placetype` field should correspond to the first (canonical) placetype listed for the key in question. The process of initializing a locaion spec converts the container spec in `.container` into a canonicalized spec in `.containers` and removes the spec from `.container`. It works as follows: # If the `container` field is missing, and there is a group-level `default_container` field, it is used in its place. For example, none of the Brazilian states listed in `brazil_states` specifies a container, but the group specifies `default_container = "Brazil"`. # A single string or canonicalized container object is allowed and made into a one-element list. # If a list element is a string that did ''not'' come from `default_container`, and there is a group-level `canonicalize_key_container` field, it is assumed to be a one-argument function and is called on the string to get a canonicalized container object. # Any remaining strings are assumed to be countries and are used directly as the `key`, with `placetype` set to `"country"`. ====Alias keys==== Aliases can be provided for canonical keys using ''alias keys''. Alias keys have a very different location spec structure from canonical keys. This structure does not, in general, have defaults at the group level and is not initialized using `initialize_spec()`, but is used as-is. The following properties are recognized in an alias location spec: * `alias_of`: The canonical key of which this key is an alias. Required. * `the`: If true, this alias key is preceded by `the` following a preposition. Defaults to the group-level `default_the` but does not pay attention to the value of `the` for the corresponding canonical key. * `display`: This is a display alias, meaning that holonyms using the placename corresponding to this alias will be converted to the placename corresponding to the canonical key when formatting the holonym for display. (Otherwise, the aliasing applies only to categorization.) If the value is true, the display canonicalization is to the placename of the canonical key; otherwise, the value should be a key whose corresponding placename is used when display canonicalizing. * `placetype`: The placetype of the alias. Rarely needs to be specified as it defaults to the canonical key's placetype, and if that is unspecified, to the group-level default placetype. ====Location group metadata tables==== As mentioned above, associated with each location group is a ''metadata table'' listing group-level properties. The metadata table contains two types of keys: group-level defaults (named like the corresponding location-level keys but preceded by `default_`, e.g. `default_placetype` corresponding to the location-level `placetype` key) and group-only keys, which are mostly functions. The following are the possible group-only keys: * `data`: This points to the group data table for the group, as described above. * `key_to_placename`: This is a function of one argument to transform the location's key (whether canonical or alias) into the full and elliptical placenames. The difference between full and elliptical placenames is described in the documentation for [[Module:place]], but in essence, it applies for keys that include the placetype in them (e.g. `Phuket Province, Thailand` or `County Mayo, Ireland`), in which case the full placename includes the placetype and the elliptical placename does not. For keys that do not include the placetype in them (e.g. `Arizona, USA` or `Gloucestershire, England`), the full and elliptical placenames are identical. Note that neither the full nor the elliptical placename includes the container in it; hence, for `Phuket Province, Thailand`, the full placename is `Phuket Province` and the elliptical placename is just `Phuket`. (Note that the full vs. elliptical placename distinction is intended only for handling cases where the placetype follows or precedes the raw placename and there is no difference between the two in whether they are normally preceded by `the`. More complex situations, such as `State of Mexico` (which normally takes `the`) vs. just `Mexico` (which doesn't), or `Islamabad Capital Territory` vs. just `Islamabad`, should be handled instead by aliases.) The `key_to_placename` function takes one argument, the key, and returns two arguments, the full and elliptical placenames, respectively. If left undefined, the default is to chop off anything starting with a comma and return the result as both full and elliptical placename, and if specifically set to `false`, the key is used directly as both full and elliptical placename. If it needs to be defined, it is best to use the helper function `make_key_to_placename`, if possible (or `make_irish_type_key_to_placename` in the case of Ireland and Northern Ireland, where `County` precedes), rather than rolling your own. In addition, you should use the global `key_to_placename` function (which takes care of the default implementation and such) rather than directly calling the function in the `key_to_placename` field. * `placename_to_key`: This is approximately the inverse of `key_to_placename`, transforming a placename (which can be either in full or elliptical form) into the corresponding key. As with `key_to_placename`, if you need to define this (generally, when the full and elliptical placenames are different), prefer using `make_placename_to_key` (or `make_irish_type_placename_to_key` for Ireland and Northern Ireland) to rolling your own. In addition, similarly to `key_to_placename`, use the global `placename_to_key` function to convert placenames to keys rather than directly invoking the function in the `placename_to_key` field. If the field is set to `false`, the placename is used unchanged as the key. Otherwise, the default algorithm works as follows: *# If the group-level `default_placetype == "city"`, use the placename unchanged as the key. *# Otherwise, if the group-level `default_container` exists and is a string, append it to the placename after a comma + space and use the result as the key. *# Otherwise, if the group-level `default_container` is a canonical container object (an object with `key` and `placetype` fields), and the `placetype` field is either `country` or `constituent country`, append the `key` field to the placename after a comma + space and use the result as the key. *# Otherwise, use the placename unchanged as the key. * `canonicalize_key_container`: A function of one argument to convert the specified `container` field, when a string, to canonical form. Described in more detail above under [[#Container spec canonicalization]]. It is preferable to construct the function using `make_canonicalize_key_container`, if possible, rather than rolling your own. * `addl_divs`: Additional political divisions appended, for all locations in the group, to the list of divisions derived from the location-level `divs` or group-level `default_divs` fields to get the final list of divisions for the location. See [[#Location divisions]] for more details. ]==] ----------------------------------------------------------------------------------- -- Helper functions -- ----------------------------------------------------------------------------------- --[==[ Throw an error. `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the format string as if `fmt:format(...)` were called. In general, callers should use `internal_error` unless the error was due to bad user input rather than a logic error (which usually isn't the case in deep back-end code like this). ]==] function export.process_error(fmt, ...) local args = {...} for i = 1, select("#", ...) do args[i] = dump(args[i]) end return error(string.format(fmt, unpack(args))) end --[==[ Throw an internal error (a logic error that should never happen unless there is a bug in the code, as opposed to a user error triggered by bad input or a system error due to something like running out of memory or hitting a time limit). `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the format string as if `fmt:format(...)` were called. ]==] function export.internal_error(fmt, ...) export.process_error("Internal error: " .. fmt, ...) end local internal_error = export.internal_error -- Return whether `list_or_element` (a list of strings, or a single string) "contains" `item` (a string). If -- `list_or_element` is a list, this returns true if `item` is in the list; otherwise it returns true if `item` -- equals `list_or_element`. local function list_or_element_contains(list_or_element, item) if type(list_or_element) == "table" then return m_table.contains(list_or_element, item) and true or false end return list_or_element == item end --[==[ Call the location group's `key_to_placename` function if it exists (see the comment at the top of [[Module:place]] for the distinction between keys and placenames). Two values are returned, the full and elliptical placenames (e.g. full `"County Durham"` vs. elliptical `"Durham"`). If the group does not define `key_to_placename`, both full and elliptical placenames are computed by chopping off anything starting with a comma. ]==] function export.key_to_placename(group, key) if group.key_to_placename == false then return key, key end if group.key_to_placename then local full_placename, elliptical_placename = group.key_to_placename(key) if type(full_placename) ~= "string" then internal_error("Key %s returned a non-string full placename: %s", key, full_placename) end if type(elliptical_placename) ~= "string" then internal_error("Key %s returned a non-string elliptical placename: %s", key, elliptical_placename) end return full_placename, elliptical_placename end key = key:gsub(",.*", "") return key, key end --[==[ Call the location group's `placename_to_key` function if it exists (see the comment at the top of [[Module:place]] for the distinction between keys and placenames) and return the result. If `placename_to_key` exists with the value `false`, return the placename unchanged. If the group does not define `placename_to_key`, and it defines a `default_container` whose placetype is either `country` or `constituent country`, the container name is appended to the placename after a comma and a space. Otherwise the placename is returned unchanged. ]==] function export.placename_to_key(group, placename) if group.placename_to_key == false then return placename elseif group.placename_to_key then local key = group.placename_to_key(placename) if type(key) ~= "string" then internal_error("Placename %s returned a non-string key: %s", placename, key) end return key elseif group.default_placetype == "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 --[==[ Initialize the location spec `spec`, augmenting it with default values taken from `group` if the spec itself doesn't specify values for the properties. This sets `containers` to a canonicalized list of objects, each with `key` and `placetype` keys, describing the immediate containers of the location, and erases (sets to nil) the original non-canonicalized `container` field. (Most locations have only one immediate container but some, e.g. Russia, have more than one. Containers should be carefully distinguished from category parents. Generally the container is the first category parent, or the first ``n`` parents if there are ``n`` containers, but there may be additional category parents, which indicate some sort of relation between the category parent and the location but not necessarily one of containment.) This function is idempotent in that nothing happens if called more than once on the same spec. FIXME: Consider reimplementing this in a more standardly object-oriented way using metatables. ]==] function export.initialize_spec(group, key, spec) if spec.initialized then return end local container = spec.container local containers local container_from_default if not container then container = group.default_container container_from_default = true end if container then if type(container) == "string" or container.key then container = {container} end containers = {} for _, cont in ipairs(container) do if type(cont) == "string" then if group.canonicalize_key_container and not container_from_default then cont = group.canonicalize_key_container(cont) else cont = {key = cont, placetype = "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", "british_spelling", "the", "no_container_cat", "no_container_parent", "no_generic_place_cat", "no_check_holonym_mismatch", "no_auto_augment_container", "no_include_container_in_desc", "is_city", "is_former_place", } do set_or_default(prop) end -- `default_placetype == "city"` is correct; if `default_placetype` has something else like `prefecture-level city` -- as the canonical placetype but also lists `city` (as Chinese prefecture-level cities do), don't mark as -- is_city. spec.is_city = value_with_default(spec.is_city, group.default_placetype == "city") spec.initialized = true end --[=[ Given a location group, key and possible placetypes that the placename must match, check if the key exists in the group with at least one of the group's key's placetypes matching one of the passed-in placetypes. If so, return two values: the group key (which potentially could differ from the passed-in key due to aliases) and the corresponding spec object, which (as with all functions that return spec objects) has been initialized using `initialize_spec()` (i.e. default property values have been copied from the group into the spec, if the spec doesn't itself specify a value for the property in question). `alias_resolution` controls how aliases are resolved. Normally, both display and category aliases are followed, and the returned key will reflect the canonical location key. However, if `alias_resolution` is {"none"}, no alias following happens. In that case, if the key specifies an alias, the spec for the alias rather than the spec for the canonical location is returned, and importantly, it is returned uninitialized, meaning that properties from the group are not copied into the spec. (If the key specifies a canonical location, its spec is returned initialized, as in the normal case where `alias_resolution` is unspecified.) The caller needs to check whether the returned spec is an alias by looking for an `alias_of` property. If `alias_resolution` is {"display"}, the behavior is the same as for {"none"} except that if the alias contains a setting `display = true`, the returned key will reflect the canonical location key, and if the alias contains a setting `display = ``string`` `, the returned key will reflect that string. This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or `find_canonical_key` (for known-canonical locations where the placetype isn't known). ]=] local function find_matching_key_in_group(group, placetypes, key, alias_resolution) if alias_resolution ~= nil and alias_resolution ~= "none" and alias_resolution ~= "display" and alias_resolution ~= "all" then internal_error("Bad value for 'alias_resolution': %s", alias_resolution) end local spec = group.data[key] if not spec then return nil end local function check_correct_placetype(placetype) if type(placetype) == "table" then for _, pt in ipairs(placetype) do if list_or_element_contains(placetypes, pt) then return true end end return false else return list_or_element_contains(placetypes, placetype) end end if spec.alias_of then local resolved_key = spec.alias_of local resolved_spec = group.data[resolved_key] if not resolved_spec then internal_error("Key %s is an alias of %s, which doesn't exist", key, resolved_key) elseif resolved_spec.alias_of then internal_error("Key %s is an alias of %s, which is itself an alias; indirect aliasing not allowed", key, resolved_key) end if alias_resolution == "none" or alias_resolution == "display" then -- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group. local placetype = spec.placetype or resolved_spec.placetype or group.default_placetype if not placetype then internal_error("No placetype found for key %s in any of spec %s, alias-resolved spec %s or in group " .. "`default_placetype`", key, spec, resolved_spec) end if not check_correct_placetype(placetype) then return nil end if alias_resolution == "display" then if spec.display == true then key = resolved_key elseif spec.display then key = spec.display end end return key, spec end key = resolved_key spec = resolved_spec end -- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group. local placetype = spec.placetype or group.default_placetype if not placetype then internal_error("No placetype found for key %s in spec %s or group `default_placetype`", key, spec) end if not check_correct_placetype(placetype) then return nil end export.initialize_spec(group, key, spec) return key, spec end --[=[ Given a location group, placename and possible placetypes that the placename must match, check if the placename exists in the group with at least one of the placetypes of the key in the group that corresponds to the placename matching one of the passed-in placetypes. If so, return two values: the key corrsponding to the passed-in placename and the corresponding spec object. This is similar to `find_matching_key_in_group()` but works with placenames rather than keys. `alias_resolution` is as in `find_matching_key_in_group()`. This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or `find_canonical_key` (for known-canonical locations where the placetype isn't known). ]=] local function find_matching_placename_in_group(group, placetypes, placename, alias_resolution) local key = export.placename_to_key(group, placename) return find_matching_key_in_group(group, placetypes, key, alias_resolution) end --[==[ If `key` is a canonical known location key (i.e. not an alias), return the corresponding group and initialized spec. If no such key exists, return {nil}. This throws an internal error if two locations with the same key are found. ]==] function export.find_canonical_key(key) local found_locations = {} for _, group in ipairs(export.locations) do local spec = group.data[key] if not spec then -- do nothing elseif spec.alias_of then mw.log(("Skipping alias '%s' of canonical '%s'"):format(key, spec.alias_of)) else insert(found_locations, {group, spec}) end end if not found_locations[1] then return nil elseif found_locations[2] then internal_error("Found multiple matching locations for canonical key %s: %s", key, found_locations) else local group, spec = unpack(found_locations[1]) export.initialize_spec(group, key, spec) return group, spec end end --[==[ Iterator that returns all locations matching a given description, where the description consists of either a placename or a key along with a list of possible placetypes. Usually there will be at most one such location. The iterator returns three values at each iteration: the location group, canonical key by which the location is known and the spec object describing the location. `data` contains the following possible fields: * `placetypes`: A list of possible placetypes, one of which must match one of the location's placetypes; or a string specifying a placetype, which must match one of the location's placetypes. This must be specified. * `placename`: The placename of the location. Either this or `key` must be specified. * `key`: The key of the location. Either this or `placename` must be specified. * `alias_resolution`: If specified, it behaves the same as for `find_matching_key_in_group`. The spec is normally initialized using `initialize_spec()` prior to it being returned (but may not be if `alias_resolution` is given and the specified key or placename is an alias; see the documentation for `find_matching_key_in_group`). ]==] function export.iterate_matching_location(data) local i = 0 local n = #export.locations return function() while true do i = i + 1 if i > n then break end local group = export.locations[i] local key, spec if data.placename then key, spec = find_matching_placename_in_group(group, data.placetypes, data.placename, data.alias_resolution) else if not data.key then internal_error("'.placename' or '.key' must be defined: %s", data) end key, spec = find_matching_key_in_group(group, data.placetypes, data.key, data.alias_resolution) end if key then return group, key, spec end end end end --[==[ Return the location matching a given description, where the description consists of either a placename or a key along with a list of possible placetypes. This is similar to `iterate_matching_location()` but throws an internal error if there is not exactly one location found; as such, it is for use with internally specified locations (such as the containers of known locations) rather than externally specified locations, which may not match a known location and in some cases may match multiple known locations. For finding an externally specified location, consider using `find_matching_holonym_location`, which returns {nil} rather than throwing an error if the location isn't found, but also (more importantly) checks to make sure there are no conflicting holonyms among the user-specified holonyms (e.g. {{tl|place|city|s/Delaware|c/USA|t=Newark}} will not match the known location `Newark` (in New Jersey, not Delaware). ]==] function export.get_matching_location(data) local all_found = {} for group, key, spec in export.iterate_matching_location(data) do insert(all_found, {group, key, spec}) end if not all_found[1] then internal_error("Couldn't find matching location for data %s", data) elseif all_found[2] then internal_error("Found multiple matching locations for data %s: %s", data, all_found) else return unpack(all_found[1]) end end --[==[ Successively iterate over a location's containers, and then the containers of those containers, etc. Keep in mind that locations may have multiple containers (e.g. Russia has both Europe and Asia as containers, and both Europe and Asia have Eurasia as their container). A given container will never be returned twice (e.g. in the case where a specific location A has locations B and C as containers, and B has C as its container, C will not be returned twice). An internal error happens if a container loop is detected. The return value is a list of location objects, each of which contains `group`, `key` and `spec` fields. ]==] function export.iterate_containers(group, key, spec) local keys_seen = {} keys_seen[key] = true local iterations = 0 local last_iteration_containers = {{group = group, key = key, spec = spec}} return function() iterations = iterations + 1 if iterations > 10 then internal_error("Probable loop in containers when processing key %s", key) end local next_iteration_containers = {} for _, location in ipairs(last_iteration_containers) do local containers = location.spec.containers if containers then for _, container in ipairs(containers) do local container_group, container_key, container_spec = export.get_matching_location { placetypes = container.placetype, key = container.key, } if not keys_seen[container_key] then insert(next_iteration_containers, { group = container_group, key = container_key, spec = container_spec }) keys_seen[container_key] = true end end end end if not next_iteration_containers[1] then return nil end last_iteration_containers = next_iteration_containers return next_iteration_containers end end --[==[ Given a placename, convert it into a link (two-part if `display_form` is given and differs from `placename`) and add `"the "` to the beginning if called for in `spec`. ]==] function export.construct_linked_placename(spec, placename, display_form) local linked_placename = display_form and placename ~= display_form and ("[[%s|%s]]"):format(placename, display_form) or ("[[%s]]"):format(placename) if spec.the then linked_placename = "the " .. linked_placename end return linked_placename end --[=[ This is typically used to define `key_to_placename`. It generates a function that chops off parts of a string (a location key), typically at the end, in order to get the full and elliptical versions of a placename. (See the documentation above for `key_to_placename` under "Location group tables" for the difference between full and elliptical placenames.) `container_patterns` is a Lua pattern or a list of possible patterns matching the container at the end of the key, which will be used to remove that container. If multiple patterns are specified, each one is tried until one matches. If `container_patterns` is omitted, this part of the process is skipped. The reulting string becomes the full placename. If `divtype_patterns` is specified, it is likewise either a Lua pattern or list of possible patterns to match and remove the political division affixed onto the end (or possibly the beginning) of the key in the keys of certain countries (such as South Korean and North Korean counties, which include the word "County" in the key). The resulting chopped string becomes the elliptical placename. If `divtype_patterns` is omitted, this part of the process is skipped and the full and elliptical placenames are the same. Typical usage is as follows: ``` key_to_placename = make_key_to_placename(", England$"), ``` or (when the political division is part of the key) ``` key_to_placename = make_key_to_placename(", South Korea$", " County$") ``` ]=] local function make_key_to_placename(container_patterns, divtype_patterns) if type(container_patterns) == "string" then container_patterns = {container_patterns} end if type(divtype_patterns) == "string" then divtype_patterns = {divtype_patterns} end return function(key) local full_placename = key if container_patterns then for _, container_pattern in ipairs(container_patterns) do local nsubs full_placename, nsubs = full_placename:gsub(container_pattern, "") if nsubs > 0 then break end end end local elliptical_placename = full_placename if divtype_patterns then for _, divtype_pattern in ipairs(divtype_patterns) do local nsubs elliptical_placename, nsubs = elliptical_placename:gsub(divtype_pattern, "") if nsubs > 0 then break end end end return full_placename, elliptical_placename end end --[=[ This is typically used to define `placename_to_key`. It generates a function that appends a string to the end of a given placename to get the key (see the definition of `placename_to_key` above in the documentation under "Location group tables"). Optional `divtype_suffix` is a raw string (which should not contain hyphens or other characters that have special meaning in Lua patterns) to be appended first to the placename; if already present at the end, it is not appended. `container_suffix` is then added in the same fashion if given. Typical usage is like this: ``` placename_to_key = make_placename_to_key(", England") ``` (which will convert e.g. `"Hampshire"` into `"Hampshire, England"`) or ``` placename_to_key = make_placename_to_key(", South Korea", " County") ``` (which will convert e.g. `"Gangwon"` or `"Gangwon County"` into `"Gangwon County, South Korea"`). ]=] local function make_placename_to_key(container_suffix, divtype_suffix) return function(placename) local key = placename if divtype_suffix then if not key:find(divtype_suffix .. "$") then key = key .. divtype_suffix end end if container_suffix then key = key .. container_suffix end return key end end --[=[ This is typically used to define `canonicalize_key_container`, which converts a container as specified in the location data into the canonical form containing both the full container key and its placetype. It generates a function to do the canonicalization of a given container. If the container is a string, `suffix` is appended onto the string (use {nil} or {""} if there is no suffix to append), and the placetype is set to `placetype`. Otherwise the container is left as-is. Typical usage is like this: ``` canonicalize_key_container = make_canonicalize_key_container(", Canada", "province") ``` which will convert e.g. `"Ontario"` into `{key = "Ontario, Canada", placetype = "province"}`. ]=] local function make_canonicalize_key_container(suffix, placetype) return function(container) if type(container) == "string" then return {key = container .. (suffix or ""), placetype = placetype} else return container end end end ----------------------------------------------------------------------------------- -- Top-level tables -- ----------------------------------------------------------------------------------- export.continents = { ["Trái Đất"] = {placetype = "planet", addl_parents = {"tự nhiên"}, fulldesc = "=là hành tinh thứ ba tính từ Mặt Trời", commonscat = "Earth"}, ["châu Phi"] = {placetype = "continent", commonscat = "Africa", container = {key = "Trái Đất", placetype = "planet"}}, ["châu Mỹ"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"}, keydesc = "[[America]], in the sense of [[North America]] and [[South America]] combined", wp = "Châu Mỹ"}, ["Americas"] = {alias_of = "châu Mỹ", the = true}, ["America"] = {alias_of = "châu Mỹ", the = true}, ["Bắc Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}}, ["Caribe"] = {the = true, placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}}, ["Trung Mỹ"] = {placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}}, ["Nam Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}}, ["châu Nam Cực"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}, fulldesc = "=lục địa nằm xa về phía nam và tây nhất trên Trái Đất, chứa Cực Nam địa lý và nằm trong Vùng Nam Cực của Nam Bán cầu"}, ["Đại lục Á Âu"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"}, keydesc = "một khu vực đất đai rộng lớn, bao gồm châu Âu và châu Á"}, ["châu Á"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}}, ["châu Âu"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}}, ["châu Đại Dương"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}}, ["Melanesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, ["Micronesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, ["Polynesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, } export.continents_group = { default_overriding_bare_label_parents = {}, -- container parents should be used default_divs = {{type = "countries", prep = "của"}}, -- It's enough to mention the first-level continent or continent group. It seems excessive to write e.g. -- "El Salvador, a country in Central America, a continental region in North America, a continent in America, ...". default_no_include_container_in_desc = true, default_no_container_cat = true, default_no_container_parent = true, default_no_auto_augment_container = true, default_no_generic_place_cat = true, -- French Guyana is in France but not in Europe, which should not be an issue, so don't check holonym mismatches at -- this level. We also run into problems with supercontinents, which have "continent" as the fallback and cause -- mismatches. default_no_check_holonym_mismatch = true, data = export.continents, } -- Countries: including those with partial recognition that are normally considered countries (e.g. Kosovo, Taiwan). export.countries = { ["Afghanistan"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Albania"] = {container = "Europe", divs = {"counties", "municipalities", "communes", {type = "administrative units", cat_as = "communes"}, }, british_spelling = true}, ["Algeria"] = {container = "Africa", divs = {"provinces", "communes", "districts", "municipalities"}}, ["Andorra"] = {container = "Europe", divs = {"parishes"}, british_spelling = true}, ["Angola"] = {container = "Africa", divs = {"provinces", "municipalities"}}, ["Antigua and Barbuda"] = {container = "Caribbean", divs = {"provinces"}, british_spelling = true}, ["Argentina"] = {container = "South America", divs = {"provinces", "departments", "municipalities"}}, ["Armenia"] = {container = {"Europe", "Asia"}, divs = {"provinces", "districts", "municipalities"}, british_spelling = true}, ["Republic of Armenia"] = {alias_of = "Armenia", the = true}, -- differs in "the" -- Both a country and continent ["Australia"] = {container = "Oceania", divs = { {type = "states", cat_as = "states and territories"}, {type = "territories", cat_as = "states and territories"}, {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and territories"}, {type = "ABBREVIATION_OF territories", cat_as = "abbreviations of states and territories"}, "local government areas", "dependent territories", }, british_spelling = true}, ["Austria"] = {container = "Europe", divs = {"states", "districts", "municipalities"}, british_spelling = true}, ["Azerbaijan"] = {container = {"Europe", "Asia"}, divs = {"districts", "municipalities"}, british_spelling = true}, ["Bahamas"] = {the = true, container = "Caribbean", divs = {"districts"}, british_spelling = true, wp = "The %l"}, ["Bahrain"] = {container = "Asia", divs = {"governorates"}}, ["Bangladesh"] = {container = "Asia", divs = {"divisions", "districts", "municipalities"}, british_spelling = true}, ["Barbados"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Belarus"] = {container = "Europe", divs = {"regions", "districts"}, british_spelling = true}, ["Belgium"] = {container = "Europe", divs = {"regions", "provinces", "municipalities"}, british_spelling = true}, ["Belize"] = {container = "Central America", divs = {"districts"}, british_spelling = true}, ["Benin"] = {container = "Africa", divs = {"departments", "communes"}}, ["Bhutan"] = {container = "Asia", divs = {"districts", "gewogs"}}, ["Bolivia"] = {container = "South America", divs = {"provinces", "departments", "municipalities"}}, ["Bosnia and Herzegovina"] = {container = "Europe", divs = {"entities", "cantons", "municipalities"}, british_spelling = true}, ["Bosnia and Hercegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia-Herzegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia-Hercegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Botswana"] = {container = "Africa", divs = {"districts", "subdistricts"}, british_spelling = true}, ["Brazil"] = {container = "South America", divs = { "states", "municipalities", "macroregions", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, }}, ["Brunei"] = {container = "Asia", divs = {"districts", "mukims"}, british_spelling = true}, ["Bulgaria"] = {container = "Europe", divs = {"provinces", "municipalities"}, british_spelling = true}, ["Burkina Faso"] = {container = "Africa", divs = {"regions", "departments", "provinces"}}, ["Burundi"] = {container = "Africa", divs = {"provinces", "communes"}}, ["Cambodia"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Cameroon"] = {container = "Africa", divs = {"regions", "departments"}}, ["Canada"] = {container = "North America", divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, {type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces and territories"}, {type = "ABBREVIATION_OF territories", cat_as = "abbreviations of provinces and territories"}, "counties", "districts", "municipalities", "regional municipalities", "rural municipalities", "parishes", -- Don't change the following to something more politically correct (e.g. "First Nations reserves") until/unless -- the Canadian government makes a similar switch (and note that as of Apr 18 2025, the Wikipedia article is -- still at [[w:Indian reserves]]). "Indian reserves", "census divisions", {type = "townships", prep = "in"}, }, british_spelling = true}, ["Cape Verde"] = {container = "Africa", divs = {"municipalities", "parishes"}}, ["Cabo Verde"] = {alias_of = "Cape Verde", display = true}, ["Central African Republic"] = {the = true, container = "Africa", divs = {"prefectures", "subprefectures"}}, ["CAR"] = {alias_of = "Central African Republic", display = true, the = true}, ["C.A.R"] = {alias_of = "Central African Republic", display = true, the = true}, ["Chad"] = {container = "Africa", divs = {"regions", "departments"}}, ["Chile"] = {container = "South America", divs = {"regions", "provinces", "communes"}}, ["China"] = {container = "Asia", divs = { {type = "provinces", cat_as = "provinces and autonomous regions"}, {type = "autonomous regions", cat_as = "provinces and autonomous regions"}, {type = "FORMER provinces", cat_as = "former provinces"}, "special administrative regions", "prefectures", {type = "FORMER prefectures", cat_as = "former prefectures"}, "prefecture-level cities", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, {type = "FORMER counties", cat_as = "former counties and county-level cities"}, {type = "FORMER county-level cities", cat_as = "former counties and county-level cities"}, -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities. "districts", {type = "FORMER districts", cat_as = "former districts"}, "subdistricts", "townships", "municipalities", {type = "direct-administered municipalities", cat_as = "municipalities"}, }}, ["People's Republic of China"] = {alias_of = "China", the = true}, -- differs in "the" ["Colombia"] = {container = "South America", divs = {"departments", "municipalities"}}, ["Comoros"] = {the = true, container = "Africa", divs = {"autonomous islands"}}, ["Costa Rica"] = {container = "Central America", divs = {"provinces", "cantons"}}, ["Croatia"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Cuba"] = {container = "Caribbean", divs = {"provinces", "municipalities"}}, ["Cyprus"] = {container = {"Europe", "Asia"}, divs = {"districts"}, british_spelling = true}, ["Czech Republic"] = {the = true, container = "Europe", divs = {"regions", "districts", "municipalities"}, british_spelling = true}, ["Czechia"] = {alias_of = "Czech Republic"}, -- differs in "the" ["Democratic Republic of the Congo"] = {the = true, container = "Africa", divs = {"provinces", "territories"}}, ["Congo"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["DRC"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["D.R.C"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["Denmark"] = {container = "Europe", divs = {"regions", "municipalities", "dependent territories"}, british_spelling = true, -- Wikipedia separates [[w:Denmark]] (constituent country) from [[w:Danish Realm]] (country) }, ["Djibouti"] = {container = "Africa", divs = {"regions", "districts"}}, ["Dominica"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Dominican Republic"] = {the = true, container = "Caribbean", divs = {"provinces", "municipalities"}, keydesc = "the [[Dominican Republic]], the country that shares the [[Caribbean]] island of [[Hispaniola]] with [[Haiti]]"}, ["East Timor"] = {container = "Asia", divs = {"municipalities"}, wp = "Timor-Leste"}, ["Timor-Leste"] = {alias_of = "East Timor", display = true}, ["Ecuador"] = {container = "South America", divs = {"provinces", "cantons"}}, ["Egypt"] = {container = "Africa", divs = {"governorates", "regions"}, british_spelling = true}, ["El Salvador"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Equatorial Guinea"] = {container = "Africa", divs = {"provinces"}}, ["Eritrea"] = {container = "Africa", divs = {"regions", "subregions"}}, ["Estonia"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Eswatini"] = {container = "Africa", british_spelling = true}, ["Swaziland"] = {alias_of = "Eswatini", display = true}, ["Ethiopia"] = {container = "Africa", divs = {"regions", "zones"}}, ["Federated States of Micronesia"] = {the = true, container = "Micronesia", divs = {"states"}}, ["Micronesia"] = {alias_of = "Federated States of Micronesia"}, ["Fiji"] = {container = "Melanesia", divs = {"divisions", "provinces"}, british_spelling = true}, ["Finland"] = {container = "Europe", divs = {"regions", "municipalities"}, british_spelling = true}, ["France"] = {container = "Europe", divs = {"regions", "cantons", "collectivities", "communes", {type = "municipalities", cat_as = "communes"}, "departments", {type = "prefectures", cat_as = {"prefectures", "departmental capitals"}}, {type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}}, "dependent territories", "territories", "provinces", }, british_spelling = true}, ["Gabon"] = {container = "Africa", divs = {"provinces", "departments"}}, ["Gambia"] = {the = true, container = "Africa", divs = {"divisions", "districts"}, british_spelling = true, wp = "The %l"}, ["Georgia"] = {container = {"Europe", "Asia"}, divs = {"regions", "districts"}, keydesc = "the country of [[Georgia]], in [[Eurasia]]", british_spelling = true, wp = "%l (country)"}, ["Germany"] = {container = "Europe", divs = { "states", -- Bavaria, Baden-Württemberg, Hesse and North Rhine-Westphalia have administrative regions as divisions, but -- there aren't really enough of them to categorize per state. "regions", "municipalities", "districts"}, british_spelling = true}, ["Ghana"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Greece"] = {container = "Europe", divs = {"regions", "regional units", "municipalities", {type = "peripheries", cat_as = {"regions"}}, }, british_spelling = true}, ["Grenada"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Guatemala"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Guinea"] = {container = "Africa", divs = {"regions", "prefectures"}}, ["Guinea-Bissau"] = {container = "Africa", divs = {"regions"}}, ["Guyana"] = {container = "South America", divs = {"regions"}, british_spelling = true}, ["Haiti"] = {container = "Caribbean", divs = {"departments", "arrondissements"}}, ["Honduras"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Hungary"] = {container = "Europe", divs = {"counties", "districts"}, british_spelling = true}, ["Iceland"] = {container = "Europe", divs = {"regions", "municipalities", "counties"}, british_spelling = true}, ["India"] = {container = "Asia", divs = { {type = "states", cat_as = "states and union territories"}, {type = "union territories", cat_as = "states and union territories"}, {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and union territories"}, {type = "ABBREVIATION_OF union territories", cat_as = "abbreviations of states and union territories"}, "divisions", "districts", "municipalities", }, british_spelling = true}, ["Indonesia"] = {container = "Asia", divs = {"regencies", "provinces", {type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces"}, }}, ["Iran"] = {container = "Asia", divs = {"provinces", "counties"}}, ["Iraq"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Ireland"] = {container = "Europe", addl_parents = {"British Isles"}, divs = {"counties", "districts", "provinces"}, british_spelling = true, wp = "Republic of %l"}, ["Republic of Ireland"] = {alias_of = "Ireland", the = true}, -- differs in "the" ["Israel"] = {container = "Asia", divs = {"districts"}}, ["Italy"] = {container = "Europe", divs = { "regions", "provinces", "metropolitan cities", "municipalities", {type = "autonomous regions", cat_as = "regions"}, }, british_spelling = true}, ["Ivory Coast"] = {container = "Africa", divs = {"districts", "regions"}}, -- We should really be using Ivory Coast (common name) but there are political ramifications to the use of -- Côte d'Ivoire so don't make it a display alias. ["Côte d'Ivoire"] = {alias_of = "Ivory Coast"}, ["Jamaica"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Japan"] = {container = "Asia", divs = {"prefectures", "subprefectures", "municipalities"}}, ["Jordan"] = {container = "Asia", divs = {"governorates"}}, ["Kazakhstan"] = {container = {"Asia", "Europe"}, divs = {"regions", "districts"}}, ["Kenya"] = {container = "Africa", divs = {"counties"}, british_spelling = true}, ["Kiribati"] = {container = "Micronesia", british_spelling = true}, ["Kosovo"] = {container = "Europe", divs = {"districts", "municipalities"}, british_spelling = true}, ["Kuwait"] = {container = "Asia", divs = {"governorates", "areas"}}, ["Kyrgyzstan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Laos"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Latvia"] = {container = "Europe", divs = {"municipalities"}, british_spelling = true}, ["Lebanon"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Lesotho"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Liberia"] = {container = "Africa", divs = {"counties", "districts"}}, ["Libya"] = {container = "Africa", divs = {"districts", "municipalities"}}, ["Liechtenstein"] = {container = "Europe", divs = {"municipalities"}, british_spelling = true}, ["Lithuania"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Luxembourg"] = {container = "Europe", divs = {"cantons", "districts"}, british_spelling = true}, ["Madagascar"] = {container = "Africa", divs = {"regions", "districts"}}, ["Malawi"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Malaysia"] = {container = "Asia", divs = {"states", "federal territories", "districts"}, british_spelling = true}, ["Maldives"] = {the = true, container = "Asia", divs = {"provinces", "administrative atolls"}, british_spelling = true}, ["Mali"] = {container = "Africa", divs = {"regions", "cercles"}}, ["Malta"] = {container = "Europe", divs = {"regions", "local councils"}, british_spelling = true}, ["Marshall Islands"] = {the = true, container = "Micronesia", divs = {"municipalities"}}, ["Mauritania"] = {container = "Africa", divs = {"regions", "departments"}}, ["Mauritius"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Mexico"] = {container = "North America", addl_parents = {"Central America"}, divs = { "states", "municipalities", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, }}, ["Moldova"] = {container = "Europe", divs = { {type = "districts", cat_as = "districts and autonomous territorial units"}, {type = "autonomous territorial units", cat_as = "districts and autonomous territorial units"}, "communes", "municipalities", }, british_spelling = true}, ["Monaco"] = {placetype = {"city-state", "country"}, container = "Europe", -- We want the first placetype to be 'city-state' so the description of Monaco says it's a city-state, but we -- want its parent to be "countries in Europe". bare_category_parent_type = {type = "countries", prep = "in"}, is_city = true, british_spelling = true}, ["Mongolia"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Montenegro"] = {container = "Europe", divs = {"municipalities"}}, ["Morocco"] = {container = "Africa", divs = {"regions", "prefectures", "provinces"}}, ["Mozambique"] = {container = "Africa", divs = {"provinces", "districts"}}, ["Myanmar"] = {container = "Asia", divs = {"regions", "states", "union territories", {type = "self-administered zones", cat_as = "self-administered areas"}, {type = "self-administered divisions", cat_as = "self-administered areas"}, "districts"}}, ["Burma"] = {alias_of = "Myanmar"}, -- not display-canonicalizing; has political connotations ["Namibia"] = {container = "Africa", divs = {"regions", "constituencies"}, british_spelling = true}, ["Nauru"] = {container = "Micronesia", divs = {"districts"}, british_spelling = true}, ["Nepal"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Netherlands"] = {the = true, placetype = {"country", "constituent country"}, container = "Europe", divs = {"provinces", "municipalities", {type = "FORMER municipalities", cat_as = "former municipalities"}, "dependent territories", "constituent countries"}, british_spelling = true, -- Wikipedia separates [[w:Netherlands]] (constituent country) from [[w:Kingdom of the Netherlands]] -- (country) }, ["New Zealand"] = {container = "Polynesia", divs = { "regions", "dependent territories", "territorial authorities", {type = "districts", cat_as = "territorial authorities"}, }, british_spelling = true}, ["Nicaragua"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Niger"] = {container = "Africa", divs = {"regions", "departments"}}, ["Nigeria"] = {container = "Africa", divs = { "states", -- Categorize the Federal Capital Territory as a state because there's only one of it; we could categorize -- everything under 'states and territories' but that seems a bit pointless. {type = "federal territories", cat_as = "states"}, "local government areas", }, british_spelling = true}, ["North Korea"] = {container = "Asia", addl_parents = {"Korea"}, divs = {"provinces", "counties"}}, ["North Macedonia"] = {container = "Europe", divs = {"regions", "municipalities"}, british_spelling = true}, ["Macedonia"] = {alias_of = "North Macedonia", display = true}, ["Republic of North Macedonia"] = {alias_of = "North Macedonia", the = true}, -- differs in "the" ["Republic of Macedonia"] = {alias_of = "North Macedonia", the = true}, -- differs in "the" ["Norway"] = {container = "Europe", divs = {"counties", "municipalities", "dependent territories", "districts", "unincorporated areas"}, british_spelling = true}, ["Oman"] = {container = "Asia", divs = {"governorates", "provinces"}}, ["Pakistan"] = {container = "Asia", divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "administrative territories", cat_as = "provinces and territories"}, {type = "federal territories", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, "divisions", "districts", }, british_spelling = true}, ["Palau"] = {container = "Micronesia", divs = {"states"}}, ["Palestine"] = {container = "Asia", divs = {"governorates"}}, ["State of Palestine"] = {alias_of = "Palestine", the = true}, -- differs in "the" ["Panama"] = {container = "Central America", divs = {"provinces", "districts"}}, ["Papua New Guinea"] = {container = "Melanesia", divs = {"provinces", "districts"}, british_spelling = true}, ["Paraguay"] = {container = "South America", divs = {"departments", "districts"}}, ["Peru"] = {container = "South America", divs = {"regions", "provinces", "districts"}}, ["Philippines"] = {the = true, container = "Asia", divs = {"regions", "provinces", "districts", "municipalities", "barangays"}}, ["Poland"] = {divs = {"voivodeships", "counties", {type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}}, }, container = "Europe", british_spelling = true}, ["Portugal"] = {container = "Europe", divs = { {type = "autonomous regions", cat_as = "districts and autonomous regions"}, {type = "districts", cat_as = "districts and autonomous regions"}, "provinces", "municipalities"}, british_spelling = true}, ["Qatar"] = {container = "Asia", divs = {"municipalities", "zones"}}, ["Republic of the Congo"] = {the = true, container = "Africa", divs = {"departments", "districts"}}, ["Congo Republic"] = {alias_of = "Republic of the Congo", display = true, the = true}, ["Romania"] = {container = "Europe", divs = { "regions", "counties", "communes", {type = "ABBREVIATION_OF counties", cat_as = "abbreviations of counties"}, }, british_spelling = true}, ["Russia"] = {container = {"Europe", "Asia"}, divs = { "federal subjects", "republics", "autonomous oblasts", "autonomous okrugs", "oblasts", "krais", "federal cities", "districts", "federal districts"}, british_spelling = true}, ["Rwanda"] = {container = "Africa", divs = {"provinces", "districts"}}, ["Saint Kitts and Nevis"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Saint Kitts"] = {alias_of = "Saint Kitts and Nevis", display = true}, ["Saint Lucia"] = {container = "Caribbean", divs = {"districts"}, british_spelling = true}, ["Saint Vincent and the Grenadines"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Saint Vincent"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["SVG"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["S.V.G"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["Samoa"] = {container = "Polynesia", divs = {"districts"}, british_spelling = true}, ["San Marino"] = {container = "Europe", divs = {"municipalities"}, british_spelling = true}, ["São Tomé and Príncipe"] = {container = "Africa", divs = {"districts"}}, ["São Tome and Principe"] = {alias_of = "São Tomé and Príncipe", display = true}, ["São Tomé"] = {alias_of = "São Tomé and Príncipe", display = true}, ["São Tome"] = {alias_of = "São Tomé and Príncipe", display = true}, ["Saudi Arabia"] = {container = "Asia", divs = {"provinces", "governorates"}}, ["Senegal"] = {container = "Africa", divs = {"regions", "departments"}}, ["Serbia"] = {container = "Europe", divs = {"districts", "municipalities", "autonomous provinces"}}, ["Seychelles"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Sierra Leone"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, ["Singapore"] = {container = "Asia", divs = {"districts", "regions"}, british_spelling = true}, ["Slovakia"] = {container = "Europe", divs = {"regions", "districts"}, british_spelling = true}, ["Slovenia"] = {container = "Europe", divs = {"statistical regions", "municipalities"}, british_spelling = true}, -- Note: While the official name does not include "the" at the beginning, -- it sounds strange in English to leave it out and it's commonly included. ["Solomon Islands"] = {the = true, container = "Melanesia", divs = {"provinces"}, british_spelling = true}, ["Somalia"] = {container = "Africa", divs = {"regions", "districts"}}, ["South Africa"] = {container = "Africa", divs = { "provinces", "districts", {type = "district municipalities", cat_as = "districts"}, {type = "metropolitan municipalities", cat_as = "districts"}, "municipalities", }, british_spelling = true}, ["South Korea"] = {container = "Asia", addl_parents = {"Korea"}, divs = {"provinces", "counties", "districts"}}, ["South Sudan"] = {container = "Africa", divs = {"regions", "states", "counties"}, british_spelling = true}, ["Spain"] = {container = "Europe", divs = {"autonomous communities", "provinces", "municipalities", "comarcas", "autonomous cities"}, british_spelling = true}, ["Sri Lanka"] = {container = "Asia", divs = {"provinces", "districts"}, british_spelling = true}, ["Sudan"] = {container = "Africa", divs = {"states", "districts"}, british_spelling = true}, ["Suriname"] = {container = "South America", divs = {"districts"}}, ["Sweden"] = {container = "Europe", divs = {"provinces", "counties", "municipalities"}, british_spelling = true}, ["Switzerland"] = {container = "Europe", divs = {"cantons", "municipalities", "districts"}, british_spelling = true}, ["Syria"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Taiwan"] = {container = "Asia", divs = {"counties", "districts", "townships", "special municipalities"}}, ["Republic of China"] = {alias_of = "Taiwan", the = true}, -- differs in "the", different political connotations ["Tajikistan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Tanzania"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Thailand"] = {container = "Asia", divs = {"provinces", "districts", "subdistricts"}}, ["Togo"] = {container = "Africa", divs = {"provinces", "prefectures"}}, ["Tonga"] = {container = "Polynesia", divs = {"divisions"}, british_spelling = true}, ["Trinidad and Tobago"] = {container = "Caribbean", divs = {"regions", "municipalities"}, british_spelling = true}, ["Tunisia"] = {container = "Africa", divs = {"governorates", "delegations"}}, ["Turkey"] = {container = {"Europe", "Asia"}, divs = {"provinces", "districts"}}, -- Foreign names generally get display-canonicalized. ["Türkiye"] = {alias_of = "Turkey", display = true}, ["Turkmenistan"] = {container = "Asia", divs = { -- The 5 regions are often also called provinces "regions", {type = "provinces", cat_as = "regions"}, "districts"}, }, ["Tuvalu"] = {container = "Polynesia", divs = {"atolls"}, british_spelling = true}, ["Uganda"] = {container = "Africa", divs = {"districts", "counties"}, british_spelling = true}, ["Ukraine"] = {container = "Europe", divs = { {type = "oblasts", cat_as = "oblasts and autonomous republics"}, {type = "autonomous republics", cat_as = "oblasts and autonomous republics"}, "raions", "hromadas", }, british_spelling = true}, ["United Arab Emirates"] = {the = true, container = "Asia", divs = {"emirates"}}, -- Abbreviations get display-canonicalized. ["UAE"] = {alias_of = "United Arab Emirates", display = true, the = true}, ["U.A.E."] = {alias_of = "United Arab Emirates", display = true, the = true}, ["United Kingdom"] = {the = true, container = "Europe", addl_parents = {"British Isles"}, divs = {"constituent countries", "counties", "districts", "boroughs", "territories", "dependent territories", "traditional counties"}, keydesc = "the [[United Kingdom]] of Great Britain and Northern Ireland", british_spelling = true}, -- Abbreviations get display-canonicalized. ["UK"] = {alias_of = "United Kingdom", display = true, the = true}, ["U.K."] = {alias_of = "United Kingdom", display = true, the = true}, ["United States"] = {the = true, container = "North America", divs = {"counties", "county seats", "states", "territories", "dependent territories", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, {type = "DEROGATORY_NAME_FOR states", cat_as = "derogatory names for states"}, {type = "NICKNAME_FOR states", cat_as = "nicknames for states"}, {type = "OFFICIAL_NICKNAME_FOR states", cat_as = "official nicknames for states"}, {type = "boroughs", prep = "in"}, -- exist in Pennsylvania and New Jersey "municipalities", -- these exist politically at least in Colorado and Connecticut {type = "census-designated places", prep = "in"}, {type = "unincorporated communities", prep = "in"}, -- Don't change the following to something more politically correct until/unless the US government makes a -- similar switch (and note that as of Apr 18 2025, the Wikipedia article is still at -- [[w:Indian reservations]]). "Indian reservations", }}, -- Abbreviations and long forms (when possible) get display-canonicalized. ["US"] = {alias_of = "United States", display = true, the = true}, ["U.S."] = {alias_of = "United States", display = true, the = true}, ["USA"] = {alias_of = "United States", display = true, the = true}, ["U.S.A."] = {alias_of = "United States", display = true, the = true}, ["United States of America"] = {alias_of = "United States", display = true, the = true}, ["Uruguay"] = {container = "South America", divs = {"departments", "municipalities"}}, ["Uzbekistan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Vanuatu"] = {container = "Melanesia", divs = {"provinces"}, british_spelling = true}, ["Vatican City"] = {placetype = {"city-state", "country"}, container = "Europe", -- First placetype should be 'city-state' for to shown up in its description, -- Its parent should still be "countries in Europe". bare_category_parent_type = {type = "countries", prep = "in"}, addl_parents = {"Rome"}, is_city = true, british_spelling = true}, ["Vatican"] = {alias_of = "Vatican City", the = true}, -- differs in "the" ["Venezuela"] = {container = "South America", divs = {"states", "municipalities"}}, ["Vietnam"] = {container = "Asia", divs = {"provinces", "districts", "municipalities"}}, ["Western Sahara"] = {placetype = {"territory", "country"}, container = "Africa", bare_category_parent_type = {type = "countries", prep = "in"}, }, -- Not display-canonicalizable both due to differences in 'the' and the sovereignty dispute over Western Sahara ["Sahrawi Arab Democratic Republic"] = {alias_of = "Western Sahara", the = true}, ["SADR"] = {alias_of = "Sahrawi Arab Democratic Republic", display = true, the = true}, ["Yemen"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Zambia"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, ["Zimbabwe"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, } local function canonicalize_continent_container(key) if type(key) ~= "string" then return key end if export.continents[key] then return {key = key, placetype = export.continents[key].placetype} end internal_error("Unrecognized key %s in `canonicalize_continent_like`", key) end export.countries_group = { canonicalize_key_container = canonicalize_continent_container, default_overriding_bare_label_parents = {"+++", "countries"}, default_placetype = "country", default_no_container_cat = true, default_no_container_parent = true, -- No need to augment country holonyms with continents; not needed for disambiguation. default_no_auto_augment_container = true, data = export.countries, } -- Country-like entities: typically overseas territories or de-facto independent countries, which in both cases -- are not internationally recognized as sovereign nations but which we treat similarly to countries. export.country_like_entities = { -- British Overseas Territory ["Akrotiri and Dhekelia"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Cyprus", "Europe", "Asia"}, british_spelling = true, }, -- Åland: Listed as a region of Finland. Wikipedia lists this under "dependent territories" in -- [[w:List of sovereign states and dependent territories by continent]]. -- unincorporated territory of the United States ["American Samoa"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Polynesia"}, }, -- British Overseas Territory ["Anguilla"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Georgia ["Abkhazia"] = { placetype = {"unrecognized country", "country"}, addl_parents = {"Georgia", "Europe", "Asia"}, divs = {"districts"}, keydesc = "the de-facto independent state of [[Abkhazia]], internationally recognized as part of the country of [[Georgia]]", british_spelling = true, }, -- Australian external territory ["Ashmore and Cartier Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, }, -- constituent country of the Netherlands ["Aruba"] = { placetype = {"constituent country", "country"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- British Overseas Territory ["Bermuda"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"North America"}, british_spelling = true, }, -- special municipality of the Netherlands ["Bonaire"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- British Overseas Territory ["British Indian Ocean Territory"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Asia"}, british_spelling = true, }, -- British Overseas Territory ["British Virgin Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- Norwegian dependent territory ["Bouvet Island"] = { placetype = {"dependent territory", "territory"}, container = "Norway", addl_parents = {"Africa"}, british_spelling = true, }, -- British Overseas Territory ["Cayman Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- Australian external territory ["Christmas Island"] = { placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, british_spelling = true, }, -- Sui generis French "state private property" per Wikipedia; classify as overseas territory like the -- French Southern and Antarctic Lands. ["Clipperton Island"] = { placetype = {"overseas territory", "territory"}, container = "France", addl_parents = {"North America"}, }, -- Australian external territory; also called the Keeling Islands or (officially) the Cocos (Keeling) Islands ["Cocos Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, wp = "Cocos (Keeling) Islands", british_spelling = true, }, ["Cocos (Keeling) Islands"] = {alias_of = "Cocos Islands", display = true, the = true}, ["Keeling Islands"] = {alias_of = "Cocos Islands", display = true, the = true}, -- self-governing but in free association with New Zealand ["Cook Islands"] = { the = true, placetype = {"country"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- constituent country of the Netherlands ["Curaçao"] = { placetype = {"constituent country", "country"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- special territory of Chile ["Easter Island"] = { placetype = {"special territory", "territory"}, container = "Chile", addl_parents = {"Polynesia"}, }, -- British Overseas Territory ["Falkland Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"South America"}, british_spelling = true, }, -- autonomous territory of Denmark ["Faroe Islands"] = { the = true, placetype = {"autonomous territory", "territory"}, container = "Denmark", addl_parents = {"Europe"}, british_spelling = true, }, -- overseas department and region of France ["French Guiana"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"South America"}, british_spelling = true, }, -- overseas collectivity of France ["French Polynesia"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Polynesia"}, british_spelling = true, }, -- French overseas territory ["French Southern and Antarctic Lands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "France", addl_parents = {"Africa"}, }, -- British Overseas Territory ["Gibraltar"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Europe"}, is_city = true, british_spelling = true, }, -- autonomous territory of Denmark ["Greenland"] = { placetype = {"autonomous territory", "territory"}, container = "Denmark", addl_parents = {"North America"}, divs = {"municipalities"}, british_spelling = true, }, -- overseas department and region of France ["Guadeloupe"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", addl_parents = {"Caribbean"}, divs = {"communes"}, british_spelling = true, }, -- unincorporated territory of the United States ["Guam"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- self-governing British Crown dependency; technically called the Bailiwick of Guernsey ["Guernsey"] = { placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, wp = "Bailiwick of %l", }, ["Bailiwick of Guernsey"] = {alias_of = "Guernsey", the = true}, -- Australian external territory ["Heard Island and McDonald Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Africa"}, }, -- special administrative region of China ["Hong Kong"] = { placetype = {"special administrative region", "city"}, container = "China", is_city = true, british_spelling = true, }, -- self-governing British Crown dependency ["Isle of Man"] = { the = true, placetype = {"crown dependency", "dependency", "dependent territory", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, }, -- Norwegian unincorporated area ["Jan Mayen"] = { placetype = {"unincorporated area", "dependent territory", "territory", "island"}, container = "Norway", addl_parents = {"Europe"}, british_spelling = true, }, -- self-governing British Crown dependency; technically called the Bailiwick of Jersey ["Jersey"] = { placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, }, ["Bailiwick of Jersey"] = {alias_of = "Jersey", the = true}, -- special administrative region of China ["Macau"] = { placetype = {"special administrative region", "city"}, container = "China", is_city = true, british_spelling = true, }, -- overseas department and region of France ["Martinique"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Caribbean"}, british_spelling = true, }, -- overseas department and region of France ["Mayotte"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Africa"}, british_spelling = true, }, -- British Overseas Territory ["Montserrat"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- special collectivity of France ["New Caledonia"] = { placetype = {"special collectivity", "collectivity"}, container = "France", addl_parents = {"Melanesia"}, british_spelling = true, }, -- dependent territory of New Zealand ["New Zealand Subantarctic Islands"] = { the = true, placetype = {"dependent territory", "territory"}, container = "New Zealand", addl_parents = {"Antarctica"}, british_spelling = true, }, -- self-governing but in free association with New Zealand ["Niue"] = { placetype = {"country"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- Australian external territory ["Norfolk Island"] = { placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Polynesia"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Cyprus ["Northern Cyprus"] = { placetype = {"unrecognized country", "country"}, addl_parents = {"Cyprus", "Turkey", "Europe", "Asia"}, divs = {"districts"}, keydesc = "the de-facto independent state of [[Northern Cyprus]], internationally recognized as part of the country of [[Cyprus]]", british_spelling = true, }, -- commonwealth, unincorporated territory of the United States ["Northern Mariana Islands"] = { the = true, placetype = {"commonwealth", "unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- British Overseas Territory ["Pitcairn Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Polynesia"}, british_spelling = true, }, -- commonwealth of the United States ["Puerto Rico"] = { placetype = {"commonwealth", "overseas territory", "territory"}, container = "United States", addl_parents = {"Caribbean"}, divs = {"municipalities"}, }, -- overseas department and region of France ["Réunion"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Africa"}, british_spelling = true, }, -- special municipality of the Netherlands ["Saba"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- overseas collectivity of France ["Saint Barthélemy"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Caribbean"}, british_spelling = true, }, -- British Overseas Territory ["Saint Helena, Ascension and Tristan da Cunha"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", divs = {{type = "constituent parts", container_parent_type = false}}, addl_parents = {"Atlantic Ocean", "Africa"}, british_spelling = true, }, -- constituent parts of the combined oveseas territory ["Ascension Island"] = { placetype = {"constituent part", "territory", "island"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, ["Saint Helena"] = { placetype = {"constituent part", "territory", "island"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, ["Tristan da Cunha"] = { placetype = {"constituent part", "territory", "archipelago"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, -- overseas collectivity of France ["Saint Martin"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Caribbean"}, british_spelling = true, }, -- overseas collectivity of France ["Saint Pierre and Miquelon"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", divs = {"communes"}, addl_parents = {"North America"}, british_spelling = true, }, -- special municipality of the Netherlands ["Sint Eustatius"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- constituent country of the Netherlands ["Sint Maarten"] = { placetype = {"constituent country", "country"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Somalia ["Somaliland"] = { placetype = {"unrecognized country", "country"}, addl_parents = {"Somalia", "Africa"}, keydesc = "the de-facto independent state of [[Somaliland]], internationally recognized as part of the country of [[Somalia]]", british_spelling = true, }, -- British Overseas Territory -- FIXME: We should form the group "South Georgia and the South Sandwich Islands" like we did for -- "Saint Helena, Ascension and Tristan da Cunha". ["South Georgia"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Atlantic Ocean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Georgia ["South Ossetia"] = { placetype = {"unrecognized country", "country"}, addl_parents = {"Georgia", "Europe", "Asia"}, keydesc = "the de-facto independent state of [[South Ossetia]], internationally recognized as part of the country of [[Georgia]]", british_spelling = true, }, -- British Overseas Territory ["South Sandwich Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Atlantic Ocean"}, wp = true, wpcat = "South Georgia and the South Sandwich Islands", british_spelling = true, }, -- Norwegian unincorporated area ["Svalbard"] = { placetype = {"unincorporated area", "dependent territory", "territory", "archipelago"}, container = "Norway", addl_parents = {"Europe"}, british_spelling = true, }, -- dependent territory of New Zealand ["Tokelau"] = { placetype = {"dependent territory", "territory"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Moldova ["Transnistria"] = { placetype = {"unrecognized country", "country"}, addl_parents = {"Moldova", "Europe"}, keydesc = "the de-facto independent state of [[Transnistria]], internationally recognized as part of [[Moldova]]", british_spelling = true, }, -- British Overseas Territory ["Turks and Caicos Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- unincorporated territory of the United States ["United States Minor Outlying Islands"] = { the = true, placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Islands", "Micronesia", "Polynesia", "Caribbean"}, }, -- FIXME: We should add entries for the other minor outlying islands. -- Baker Island (Oceania) -- Howland Island (Oceania) -- Jarvis Island (Oceania) -- Johnston Atoll (Oceania) -- Kingman Reef (Oceania) -- Midway Atoll (Oceania) -- Navassa Island (Caribbean) -- Palmyra Atoll (Oceania) -- Wake Island (Oceania) ["Wake Island"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- unincorporated territory of the United States ["United States Virgin Islands"] = { the = true, placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Caribbean"}, }, ["U.S. Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true}, ["US Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true}, -- overseas collectivity of France ["Wallis and Futuna"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Polynesia"}, british_spelling = true, }, } export.country_like_entities_group = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Saint Helena, Ascension and Tristan da Cunha". key_to_placename = false, placename_to_key = false, canonicalize_key_container = make_canonicalize_key_container(nil, "country"), default_overriding_bare_label_parents = {"country-like entities"}, default_no_container_cat = true, default_no_container_parent = true, -- These entities often aren't really part of their container; a village in Wallis and Futuna (an overseas -- collectivity of France in Polynesia), for example, shouldn't be treated as a village in France, nor as a village -- in Europe. default_no_auto_augment_container = true, data = export.country_like_entities, } -- Former countries and such; we don't create "Cities in ..." categories because they don't exist anymore export.former_countries = { -- de-facto independent state of Armenian ethnicity, internationally recognized as part of Azerbaijan -- (also known as Nagorno-Karabakh) -- NOTE: Formerly listed Armenia as a parent; this seems politically non-neutral so I've taken it out. ["Artsakh"] = { placetype = {"unrecognized country", "country"}, addl_parents = {"Azerbaijan", "Europe", "Asia"}, keydesc = "the former de-facto independent state of [[Artsakh]], internationally recognized as part of [[Azerbaijan]]", british_spelling = true, }, ["Nagorno-Karabakh"] = {alias_of = "Artsakh"}, ["Czechoslovakia"] = {container = "Europe", british_spelling = true}, ["East Germany"] = {container = "Europe", addl_parents = {"Germany"}, british_spelling = true}, ["North Vietnam"] = {container = "Asia", addl_parents = {"Vietnam"}}, ["Persia"] = {placetype = {"empire", "country"}, container = "Asia", divs = {"provinces"}}, ["Byzantine Empire"] = { the = true, placetype = {"empire", "country"}, container = {"Europe", "Africa", "Asia"}, addl_parents = {"Ancient Europe", "Ancient Near East"}, divs = { "provinces", "themes", }}, ["Roman Empire"] = { the = true, placetype = {"empire", "country"}, container = {"Europe", "Africa", "Asia"}, addl_parents = {"Rome"}, divs = { "provinces", {type = "FORMER provinces", cat_as = "provinces"}, }}, ["South Vietnam"] = {container = "Asia", addl_parents = {"Vietnam"}}, ["Soviet Union"] = { the = true, container = {"Europe", "Asia"}, divs = {"republics", "autonomous republics"}, british_spelling = true}, ["West Germany"] = {container = "Europe", addl_parents = {"Germany"}, british_spelling = true}, ["Yugoslavia"] = {container = "Europe", divs = {"districts"}, keydesc = "the former [[Kingdom of Yugoslavia]] (1918–1943) or the former [[Socialist Federal Republic of Yugoslavia]] (1943–1992)", british_spelling = true}, } export.former_countries_group = { canonicalize_key_container = canonicalize_continent_container, default_overriding_bare_label_parents = {"former countries and country-like entities"}, default_is_former_place = true, default_placetype = "country", default_no_container_cat = true, default_no_container_parent = true, -- No need to augment country holonyms with continents; not needed for disambiguation. default_no_auto_augment_container = true, data = export.former_countries, } ----------------------------------------------------------------------------------- -- Subpolity tables -- ----------------------------------------------------------------------------------- export.australia_states_and_territories = { ["Australian Capital Territory, Australia"] = {the = true, placetype = "territory"}, ["Jervis Bay Territory, Australia"] = {the = true, placetype = "territory"}, ["New South Wales, Australia"] = {}, ["Northern Territory, Australia"] = {the = true, placetype = "territory"}, ["Queensland, Australia"] = {}, ["South Australia, Australia"] = {}, ["Tasmania, Australia"] = {}, ["Victoria, Australia"] = {}, ["Western Australia, Australia"] = {}, } -- states and territories of Australia export.australia_group = { default_container = "Australia", default_placetype = "state", default_divs = "local government areas", data = export.australia_states_and_territories, } export.austria_states = { ["Vienna, Austria"] = {}, ["Lower Austria, Austria"] = {}, ["Upper Austria, Austria"] = {}, ["Styria, Austria"] = {}, ["Tyrol, Austria"] = {wp = "Tyrol (state)"}, ["Carinthia, Austria"] = {}, ["Salzburg, Austria"] = {wp = "Salzburg (state)"}, ["Vorarlberg, Austria"] = {}, ["Burgenland, Austria"] = {}, } -- states of Austria export.austria_group = { default_container = "Austria", default_placetype = "state", default_divs = "municipalities", data = export.austria_states, } export.bangladesh_divisions = { ["Barisal Division, Bangladesh"] = {}, ["Chittagong Division, Bangladesh"] = {}, ["Dhaka Division, Bangladesh"] = {}, ["Khulna Division, Bangladesh"] = {}, ["Mymensingh Division, Bangladesh"] = {}, ["Rajshahi Division, Bangladesh"] = {}, ["Rangpur Division, Bangladesh"] = {}, ["Sylhet Division, Bangladesh"] = {}, } -- divisions of Bangladesh export.bangladesh_group = { key_to_placename = make_key_to_placename(", Bangladesh$", " Division$"), placename_to_key = make_placename_to_key(", Bangladesh", " Division"), default_container = "Bangladesh", default_placetype = "division", default_divs = "districts", data = export.bangladesh_divisions, } export.brazil_states = { ["Acre, Brazil"] = {wp = "%l (state)"}, ["Alagoas, Brazil"] = {}, ["Amapá, Brazil"] = {}, ["Amazonas, Brazil"] = {wp = "%l (Brazilian state)"}, ["Bahia, Brazil"] = {}, ["Ceará, Brazil"] = {}, ["Distrito Federal, Brazil"] = {wp = "Federal District (Brazil)"}, ["Espírito Santo, Brazil"] = {}, ["Goiás, Brazil"] = {}, ["Maranhão, Brazil"] = {}, ["Mato Grosso, Brazil"] = {}, ["Mato Grosso do Sul, Brazil"] = {}, ["Minas Gerais, Brazil"] = {}, ["Pará, Brazil"] = {}, ["Paraíba, Brazil"] = {}, ["Paraná, Brazil"] = {wp = "%l (state)"}, ["Pernambuco, Brazil"] = {}, ["Piauí, Brazil"] = {}, ["Rio de Janeiro, Brazil"] = {wp = "%l (state)"}, ["Rio Grande do Norte, Brazil"] = {}, ["Rio Grande do Sul, Brazil"] = {}, ["Rondônia, Brazil"] = {}, ["Roraima, Brazil"] = {}, ["Santa Catarina, Brazil"] = {wp = "%l (state)"}, ["São Paulo, Brazil"] = {wp = "%l (state)"}, ["Sergipe, Brazil"] = {}, ["Tocantins, Brazil"] = {}, } -- states of Brazil export.brazil_group = { default_container = "Brazil", default_placetype = "state", default_divs = "municipalities", data = export.brazil_states, } -- provinces (a.k.a. oblasts) of Bulgaria export.bulgaria_provinces = { ["Blagoevgrad Province, Bulgaria"] = {}, ["Burgas Province, Bulgaria"] = {}, ["Dobrich Province, Bulgaria"] = {}, ["Gabrovo Province, Bulgaria"] = {}, ["Haskovo Province, Bulgaria"] = {}, ["Kardzhali Province, Bulgaria"] = {}, ["Kyustendil Province, Bulgaria"] = {}, ["Lovech Province, Bulgaria"] = {}, ["Montana Province, Bulgaria"] = {}, ["Pazardzhik Province, Bulgaria"] = {}, ["Pernik Province, Bulgaria"] = {}, ["Pleven Province, Bulgaria"] = {}, ["Plovdiv Province, Bulgaria"] = {}, ["Razgrad Province, Bulgaria"] = {}, ["Ruse Province, Bulgaria"] = {}, ["Shumen Province, Bulgaria"] = {}, ["Silistra Province, Bulgaria"] = {}, ["Sliven Province, Bulgaria"] = {}, ["Smolyan Province, Bulgaria"] = {}, ["Sofia City Province, Bulgaria"] = {}, ["Sofia Province, Bulgaria"] = {}, ["Stara Zagora Province, Bulgaria"] = {}, ["Targovishte Province, Bulgaria"] = {}, ["Varna Province, Bulgaria"] = {}, ["Veliko Tarnovo Province, Bulgaria"] = {}, ["Vidin Province, Bulgaria"] = {}, ["Vratsa Province, Bulgaria"] = {}, ["Yambol Province, Bulgaria"] = {}, } export.bulgaria_group = { key_to_placename = make_key_to_placename(", Bulgaria$", " Province$"), placename_to_key = make_placename_to_key(", Bulgaria", " Province"), default_container = "Bulgaria", --== source: https://en.wikipedia.org/wiki/NUTS_statistical_regions_of_Bulgaria == divs = {"regions", "planning regions", "provinces", "municipalities", "settlements"}, default_placetype = "province", data = export.bulgaria_provinces, } export.canada_provinces_and_territories = { ["Alberta, Canada"] = {divs = { {type = "municipal districts", container_parent_type = "rural municipalities"}, }}, ["British Columbia, Canada"] = {divs = {type = "regional districts", container_parent_type = false}, "regional municipalities", }, ["Manitoba, Canada"] = {divs = {"rural municipalities"}}, ["New Brunswick, Canada"] = {divs = {"counties", "parishes", {type = "civil parishes", cat_as = "parishes"}}}, ["Newfoundland and Labrador, Canada"] = {}, ["Northwest Territories, Canada"] = {the = true, placetype = "territory"}, ["Nova Scotia, Canada"] = {divs = {"counties", "regional municipalities"}}, ["Nunavut, Canada"] = {placetype = "territory"}, ["Ontario, Canada"] = {divs = {"counties", "regional municipalities", {type = "townships", prep = "in"}}}, ["Prince Edward Island, Canada"] = {divs = {"counties", "parishes", "rural municipalities"}}, ["Saskatchewan, Canada"] = {divs = {"rural municipalities"}}, ["Quebec, Canada"] = {divs = { "counties", {type = "regional county municipalities", container_parent_type = "regional municipalities"}, -- administrative regions have an official (but non-governmental) function but there don't appear to be any -- equivalent regions elsewhere in Canada, so disable the [[Category:Regions of Canada]] grouping {type = "regions", container_parent_type = false}, {type = "townships", prep = "in"}, {type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}}, {type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}}, {type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}}, }}, ["Yukon, Canada"] = {placetype = "territory"}, ["Yukon Territory, Canada"] = {alias_of = "Yukon, Canada", the = true}, } -- provinces and territories of Canada export.canada_group = { default_container = "Canada", default_placetype = "province", data = export.canada_provinces_and_territories, } export.china_provinces_and_autonomous_regions = { -- direct-administered municipalities are not here but below under prefecture-level cities ["Anhui, China"] = {}, ["Fujian, China"] = {}, ["Fuchien, China"] = {alias_of = "Fujian, China", display = true}, ["Gansu, China"] = {}, ["Guangdong, China"] = {}, ["Guangxi, China"] = {placetype = "autonomous region"}, ["Guizhou, China"] = {}, ["Hainan, China"] = {}, ["Hebei, China"] = {}, ["Heilongjiang, China"] = {}, ["Henan, China"] = {}, ["Hubei, China"] = {}, ["Hunan, China"] = {}, ["Inner Mongolia, China"] = {placetype = "autonomous region"}, ["Jiangsu, China"] = {}, ["Jiangxi, China"] = {}, ["Jilin, China"] = {}, ["Liaoning, China"] = {}, ["Ningxia, China"] = {placetype = "autonomous region"}, ["Qinghai, China"] = {}, ["Shaanxi, China"] = {}, ["Shandong, China"] = {}, ["Shanxi, China"] = {}, ["Sichuan, China"] = {}, ["Tibet, China"] = {placetype = "autonomous region", wp = "Tibet Autonomous Region"}, ["Xinjiang, China"] = {placetype = "autonomous region"}, ["Yunnan, China"] = {}, ["Zhejiang, China"] = {}, } -- provinces and autonomous regions of China export.china_group = { default_container = "China", default_placetype = "province", default_divs = { "prefectures", "prefecture-level cities", "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_provinces_and_autonomous_regions, } export.china_prefecture_level_cities = { -- In China, a "prefecture-level city" is not a city in any real sense. It is rather a prefecture, which is an -- administrative unit smaller than a province but bigger than a county, which is administratively controlled by -- the chief city of the prefecture (which bears the same name as the prefecture), in a unified government. Prior -- to the mid-1980's, in fact, prefecture-level cities *were* prefectures, and a few of them (especially in the -- western portion of China) have not yet been converted. Generally a given province is entirely tiled by -- prefecture-level cities, another indication that they should be treated as prefectures and not cities per se. -- Yet another indication is that prefecture-level cities can contain counties and county-level cities (which, much -- like prefecture-level cities, are effectively counties surrounding a chief city of the county, again which bears -- the same name as the county-level city). -- -- For this reason, we treat prefecture-level cities as non-city political divisions, and separately enumerate the -- most populous so we can separately categorize districts and counties under them instead of lumping them at the -- province level. -- -- Note also that China separately distinguishes "urban area" from "metro area". Sometimes the two figures are -- identical but sometimes the metro area is larger (and very occasionally smaller, which I assume is an error). I'm -- guessing that the "urban area" is the contiguous urban area over a certain density while the metro area includes -- all urban areas above a certain density; when the latter is greater, it's because of satellite cities in the -- metro area separated by suburban/exurban or rural land. -- At first I chose all prefecture/province-level cities with a total prefecture/province-level population of at -- least 6,000,000 per the 2020 census with data taken from https://www.citypopulation.de/en/china/admin/ (a total -- of 67, including the four direct-administered municipalities), and also chose all prefecture/province-level -- cities whose "urban population" was at least 2,000,000 per the 2020 census with data taken from Wikipedia -- [[w:List of cities in China by population#Cities and towns by population]] (a total of 61 cities; if we cut off -- at 1.5 million we'd have 84 cities, and if we cut off at 1 million we'd have 105 cities). Merging them produces -- 87 cities. Note that this leaves off a few well-known cities (Guilin, Qiqihar, Kashgar, Lhasa, ...) but includes -- a lot of obscure cities. -- -- At a later date I added all cities from citypopulation.de whose "urban" population per the 2020 China census was -- >= 1 million, and then finally added all urban agglomerations from citypopulation.de whose 2025-01-01 estimate -- was >= 1 million. These are sorted below by the urban agglomeration value (which is generally of the "adm-urb" = -- "administrative area (urban population)" type) and sometimes groups nearby cities into a single agglomeration -- (most notably in the case of the Pearl River Delta, grouped under Guangzhou with an agglomeration population of -- 72,700,000 but including a large number of nearby large cities in the agglomeration (although for some reason not -- Hong Kong, maybe due to the administrative issues involved). In addition, citypopulation.de includes divisions -- under a prefecture-level city if they are city-like and have an agglomeration population of at least 1 million; -- this includes several county-level cities, one county and one district (Wanzhou, a "district" of Chongqing -- despite being 142 miles away). None of the county-level cities or counties have districts under them, only -- subdistricts, towns and townships. ["Guangzhou"] = {container = "Guangdong"}, -- 18.7 prefectural, 18.8 urban; sub-provincial city; 16.097 urban (72.700 adm-urb including Dongguan, Foshan, Huizhou, Jiangmen, Shenzhen, Zhongshan) per citypopulation.de ["Dongguan"] = {container = "Guangdong"}, -- 10.5 prefectural, 10.5 urban; 9.645 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Foshan"] = {container = "Guangdong"}, -- 9.5 prefectural, 9.5 urban; 9.043 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Huizhou"] = {container = "Guangdong"}, -- 6.0 prefectural, 2.5 urban; 2.900 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Jiangmen"] = {container = "Guangdong"}, -- 4.798 prefectural, 2.7 urban; 1.795 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Shenzhen"] = {container = "Guangdong"}, -- 17.5 prefectural, 14.7 urban; sub-provincial city; 17.445 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Zhongshan"] = {container = "Guangdong"}, -- 4.418 prefectural, 4.4 urban; 3.842 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Shanghai"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 24.9 prefectural, 29.9 urban; 21.910 urban (41.600 adm-urb including Changshu, Changzhou, Suzhou, Wuxi) per citypopulation.de ["Changshu"] = {container = "Jiangsu"}, -- 1.231 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration -- NOTE: Not to be confused with Cangzhou in Hebei ["Changzhou"] = {container = "Jiangsu"}, -- 5.278 prefectural, 3.6 urban; 3.187 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration -- NOTE: There is also a prefecture-level city Suzhou in Anhui with 5.3 million prefectural inhabitants ["Suzhou"] = {container = "Jiangsu"}, -- 12.8 prefectural, 4.3 urban; 5.893 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration ["Wuxi"] = {container = "Jiangsu"}, -- 7.5 prefectural, 3.3 urban; 3.957 per citypopulation.de; included by citypopulation.de in Shanghai agglomeration ["Beijing"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 21.9 prefectural, 21.9 urban; 18.961 urban (21.500 adm-urb) per citypopulation.de ["Chengdu"] = {container = "Sichuan"}, -- 20.9 prefectural, 16.9 urban; sub-provincial city; 13.568 urban (18.100 adm-urb) per citypopulation.de ["Xiamen"] = {container = "Fujian"}, -- 5.163 prefectural, 5.2 urban; sub-provincial city; 4.617 urban (15.400 adm-urb including Jinjiang, Quanzhou, Putian) per citypopulation.de ["Jinjiang"] = {container = "Fujian"}, -- 1.416 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Quanzhou"] = {container = "Fujian"}, -- 8.8 prefectural, 1.7 urban (6.7 metro); 1.469 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Putian"] = {container = "Fujian"}, -- 3.210 prefectural, 2.0 urban; 1.539 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Hangzhou"] = {container = "Zhejiang"}, -- 11.9 prefectural, 10.7 urban; sub-provincial city; 9.236 urban (14.600 adm-urb including Shaoxing) per citypopulation.de ["Shaoxing"] = {container = "Zhejiang"}, -- 5.270 prefectural, 2.5 urban; 2.333 urban per citypopulation.de; included by citypopulation.de in Hangzhou agglomeration ["Xi'an"] = {container = "Shaanxi"}, -- 12.1 prefectural, 11.9 urban; sub-provincial city; 9.393 urban (13.400 adm-urb including Xianyang) per citypopulation.de ["Xianyang"] = {container = "Shaanxi"}, -- 1.193 urban per citypopulation.de; included by citypopulation.de in Xi'an agglomeration ["Chongqing"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 32.1 prefectural, 16.9 urban; 9.581 urban (12.900 adm-urb) per citypopulation.de ["Wuhan"] = {container = "Hubei"}, -- 12.4 prefectural, 12.3 urban; sub-provincial city; 10.495 urban (12.600 adm-urb) per citypopulation.de ["Tianjin"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 13.9 prefectural, 13.9 urban; 11.052 urban (11.700 adm-urb) per citypopulation.de ["Changsha"] = {container = "Hunan"}, -- 10.0 prefectural, 6.0 urban; 5.630 urban (11.500 adm-urb including Xiangtan, Zhuzhou) per citypopulation.de -- Changsha County -- 1.024 urban per citypopulation.de ["Zhuzhou"] = {container = "Hunan"}, -- 1.510 urban per citypopulation.de; included by citypopulation.de in Changsha agglomeration ["Zhengzhou"] = {container = "Henan"}, -- 12.6 prefectural, 6.7 urban; 6.461 urban (10.300 adm-urb) per citypopulation.de ["Nanjing"] = {container = "Jiangsu"}, -- 9.3 prefectural, 9.3 urban; sub-provincial city; 7.520 urban (9.500 adm-urb including Ma'anshan) per citypopulation.de ["Shenyang"] = {container = "Liaoning"}, -- 9.1 prefectural, 7.9 urban; sub-provincial city; 7.026 urban (8.800 adm-urb including Fushun) per citypopulation.de ["Fushun"] = {container = "Liaoning"}, -- 1.229 urban per citypopulation.de; included by citypopulation.de in Shenyang agglomeration ["Hefei"] = {container = "Anhui"}, -- 9.4 prefectural, 4.2 urban; 5.056 urban (8.200 adm-urb) per citypopulation.de ["Shantou"] = {container = "Guangdong"}, -- 5.502 prefectural, 4.3 urban; 3.839 urban (8.050 adm-urb including Chaozhou, Jieyang, Puning) per citypopulation.de ["Chaozhou"] = {container = "Guangdong"}, -- 1.254 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration ["Jieyang"] = {container = "Guangdong"}, -- 1.243 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration ["Qingdao"] = {container = "Shandong"}, -- 10.1 prefectural, 7.1 urban; sub-provincial city; 6.165 urban (7.700 adm-urb) per citypopulation.de ["Ningbo"] = {container = "Zhejiang"}, -- 9.4 prefectural, 5.1 urban; sub-provincial city; 3.731 urban (7.600 adm-urb including Cixi, Yuyao) per citypopulation.de ["Cixi"] = {container = "Zhejiang"}, -- 1.458 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration ["Yuyao"] = {container = "Zhejiang"}, -- 1.014 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration -- Hong Kong 7.500 agglomeration per citypopulation.de 2025-01-01 estimate including Kowloon, Victoria ["Wenzhou"] = {container = "Zhejiang"}, -- 9.6 prefectural, 3.6 urban; 2.582 urban (7.000 adm-urb including Rui'an, Cangnan, Pingyang) per citypopulation.de -- Rui'an is a "county-level city" of the "prefecture-level city" of Wenzhou but in fact is 19 miles away from Wenzhou city proper (urban core to urban core). ["Rui'an"] = {placetype = "county-level city", container = {key = "Wenzhou", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 1.013 urban per citypopulation.de; included by citypopulation.de in Wenzhou agglomeration ["Kunming"] = {container = "Yunnan"}, -- 8.5 prefectural, 6.0 urban; 5.273 urban (6.800 adm-urb) per citypopulation.de -- includes Láiwú city ["Jinan"] = {container = "Shandong", wp = "%l, %c"}, -- 9.2 prefectural, 8.4 urban; sub-provincial city; 5.648 urban (6.750 adm-urb) per citypopulation.de -- includes Xīnjí city ["Shijiazhuang"] = {container = "Hebei"}, -- 11.2 prefectural, 4.1 urban; 5.090 urban (6.450 adm-urb) per citypopulation.de ["Taiyuan"] = {container = "Shanxi"}, -- 5.304 prefectural, 4.5 urban; 4.304 urban (6.150 adm-urb) per citypopulation.de ["Harbin"] = {container = "Heilongjiang"}, -- 10.0 prefectural, 7.0 urban; sub-provincial city; 5.243 urban (5.550 adm-urb) per citypopulation.de ["Nanning"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 8.7 prefectural, 3.8 urban; 4.583 urban (5.550 adm-urb) per citypopulation.de ["Dalian"] = {container = "Liaoning"}, -- 7.5 prefectural, 5.7 urban; sub-provincial city; 4.914 urban (5.400 adm-urb) per citypopulation.de ["Guiyang"] = {container = "Guizhou"}, -- 5.987 prefectural, 3.5 urban; 4.021 urban (5.300 adm-urb) per citypopulation.de ["Changchun"] = {container = "Jilin"}, -- 9.1 prefectural, 5.7 urban; sub-provincial city; 4.557 urban (5.200 adm-urb) per citypopulation.de ["Nanchang"] = {container = "Jiangxi"}, -- 6.3 prefectural, 3.6 (3.9?) urban, 5.3 metro; 3.519 urban (5.150 adm-urb) per citypopulation.de ["Ürümqi"] = {container = {key = "Xinjiang, China", placetype = "autonomous region"}}, -- 4.054 prefectural, 4.3 urban; 3.843 urban (5.000 adm-urb) per citypopulation.de ["Urumqi"] = {alias_of = "Ürümqi", display = true}, ["Fuzhou"] = {container = "Fujian"}, -- 8.3 prefectural, 4.1 urban; 3.723 urban (4.775 adm-urb) per citypopulation.de ["Linyi"] = {container = "Shandong"}, -- 11.0 prefectural, 2.3 urban; 2.744 urban (4.650 adm-urb) per citypopulation.de ["Zibo"] = {container = "Shandong"}, -- 4.704 prefectural, 2.6 urban; 2.750 urban (3.975 adm-urb) per citypopulation.de ["Luoyang"] = {container = "Henan"}, -- 7.1 prefectural, 2.4 urban; 2.231 urban (3.750 adm-urb) per citypopulation.de ["Lanzhou"] = {container = "Gansu"}, -- 4.359 prefectural, 3.1 urban; 3.013 urban (3.575 adm-urb) per citypopulation.de ["Nantong"] = {container = "Jiangsu"}, -- 7.7 prefectural, 2.3 urban; 2.988 urban (3.475 adm-urb) citypopulation.de ["Weifang"] = {container = "Shandong"}, -- 9.4 prefectural, 2.7 urban; 1.998 urban (3.325 adm-urb) per citypopulation.de ["Jiangyin"] = {container = "Jiangsu"}, -- 1.331 urban (3.200 adm-urb including Zhangjiagang) per citypopulation.de ["Zhangjiagang"] = {container = "Jiangsu"}, -- 1.056 urban per citypopulation.de; included in Jiangyin figures ["Xuzhou"] = {container = "Jiangsu"}, -- 9.1 prefectural, 2.6 urban; 2.846 urban (3.150 adm-urb) per citypopulation.de ["Handan"] = {container = "Hebei"}, -- 9.4 prefectural, 2.8 urban; 2.095 urban (2.925 adm-urb) per citypopulation.de ["Hohhot"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 3.446 prefectural, 2.7 urban; 2.373 urban (2.850 adm-urb) per citypopulation.de ["Haikou"] = {container = "Hainan"}, -- 2.873 prefectural, 2.3 urban; 2.349 urban (2.800 adm-urb) per citypopulation.de ["Tangshan"] = {container = "Hebei"}, -- 7.7 prefectural, 3.4 urban; 2.550 urban (2.750 adm-urb) per citypopulation.de ["Xinxiang"] = {container = "Henan"}, -- 6.3 prefectural, 1.2 urban, 2.7 metro; 1.271 urban (2.700 adm-urb) per citypopulation.de ["Yiwu"] = {container = "Zhejiang"}, -- 1.481 urban (2.700 adm-urb) per citypopulation.de ["Zhuhai"] = {container = "Guangdong"}, -- 2.439 prefectural, 2.4 urban; 2.207 urban (2.675 adm-urb) per citypopulation.de ["Taizhou, Zhejiang"] = {container = "Zhejiang"}, -- 6.6 prefectural, 1.6 urban; 1.486 urban (2.625 adm-urb) per citypopulation.de ["Taizhou"] = {alias_of = "Taizhou, Zhejiang"}, ["Yantai"] = {container = "Shandong"}, -- 7.1 prefectural, 2.5 urban; 2.312 urban (2.550 adm-urb) per citypopulation.de ["Yinchuan"] = {container = {key = "Ningxia, China", placetype = "autonomous region"}}, -- 1.663 urban (2.525 adm-urb) per citypopulation.de ["Liuzhou"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 4.157 prefectural, 2.2 urban; 2.205 urban (2.500 adm-urb) per citypopulation.de ["Anshan"] = {container = "Liaoning"}, -- 1.480 urban (2.350 adm-urb including Liáoyáng) per citypopulation.de ["Yangzhou"] = {container = "Jiangsu"}, -- 2.067 urban (2.300 adm-urb) per citypopulation.de ["Jiaxing"] = {container = "Zhejiang"}, -- 1.188 urban (2.275 adm-urb) per citypopulation.de ["Xining"] = {container = "Qinghai"}, -- 1.677 urban (2.250 adm-urb) per citypopulation.de -- includes Dìngzhōu city and Xióngān Xīnqū ["Baoding"] = {container = "Hebei"}, -- 11.5 prefectural, 2.0 urban; 1.940 urban (2.225 adm-urb) per citypopulation.de ["Baotou"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 2.709 prefectural, 2.2 urban; 2.104 urban (2.200 adm-urb) per citypopulation.de ["Ganzhou"] = {container = "Jiangxi"}, -- 9.0 prefectural, 1.6 urban; 1.778 urban (2.150 adm-urb) per citypopulation.de ["Pingdingshan"] = {container = "Henan"}, -- 1.046 urban (2.100 adm-urb) per citypopulation.de ["Zunyi"] = {container = "Guizhou"}, -- 6.6 prefectural, 2.4 urban/metro; 1.675 urban (2.025 adm-urb) per citypopulation.de ["Bengbu"] = {container = "Anhui"}, -- 1.078 urban (2.000 adm-urb) per citypopulation.de ["Datong"] = {container = "Shanxi"}, -- 3.105 prefectural, 2.0 urban; 1.810 urban (2.000 adm-urb) per citypopulation.de ["Anyang"] = {container = "Henan"}, -- 1.188 urban (1.960 adm-urb) per citypopulation.de ["Huai'an"] = {container = "Jiangsu"}, -- 4.556 prefectural, 2.6 urban; 1.805 urban (1.940 adm-urb) per citypopulation.de ["Zaozhuang"] = {container = "Shandong"}, -- 1.350 urban (1.900 adm-urb) per citypopulation.de ["Zhanjiang"] = {container = "Guangdong"}, -- 7.0 prefectural, 1.9 urban; 1.401 urban (1.890 adm-urb) per citypopulation.de ["Huainan"] = {container = "Anhui"}, -- 1.256 urban (1.880 adm-urb) per citypopulation.de ["Jining"] = {container = "Shandong"}, -- 8.4 prefectural, 1.5 urban; 1.700 urban (1.880 adm-urb) per citypopulation.de ["Daqing"] = {container = "Heilongjiang"}, -- 1.604 urban (1.860 adm-urb) per citypopulation.de ["Wuhu"] = {container = "Anhui"}, -- 1.598 urban (1.850 adm-urb) per citypopulation.de ["Guilin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 1.361 urban (1.830 adm-urb) per citypopulation.de ["Mianyang"] = {container = "Sichuan"}, -- 1.549 urban (1.800 adm-urb) per citypopulation.de ["Xiangyang"] = {container = "Hubei"}, -- 1.686 urban (1.800 adm-urb) per citypopulation.de ["Huzhou"] = {container = "Zhejiang"}, -- 1.084 urban (1.750 adm-urb) per citypopulation.de ["Puyang"] = {container = "Henan"}, -- 0.824 urban (1.750 adm-urb) per citypopulation.de ["Shangqiu"] = {container = "Henan"}, -- 7.8 prefectural, 1.9 urban (2.8 metro); 1.031 urban (1.750 adm-urb) per citypopulation.de ["Qinhuangdao"] = {container = "Hebei"}, -- 1.520 urban (1.740 adm-urb) per citypopulation.de ["Xingtai"] = {container = "Hebei"}, -- 7.1 prefectural, 971,000 urban; 1.5 urban (1.700 adm-urb) per citypopulation.de ["Nanyang"] = {container = "Henan", wp = "%l, %c"}, -- 9.7 prefectural, 2.1 urban/metro; 1.481 urban (1.680 adm-urb) per citypopulation.de ["Jiaozuo"] = {container = "Henan"}, -- 0.875 urban (1.640 adm-urb) per citypopulation.de ["Jilin City"] = {container = "Jilin"}, -- 1.509 urban (1.610 adm-urb) per citypopulation.de ["Jilin"] = {alias_of = "Jilin City"}, ["Jinhua"] = {container = "Zhejiang"}, -- 7.1 prefectural, 1.5 urban; 1.041 urban (1.590 adm-urb) per citypopulation.de ["Shangrao"] = {container = "Jiangxi"}, -- 6.5 prefectural, 2.1 urban, 1.3 metro [sic]; 1.342 urban (1.580 adm-urb) per citypopulation.de ["Heze"] = {container = "Shandong"}, -- 8.8 prefectural, 1.3 urban; 1.294 urban (1.570 adm-urb) per citypopulation.de ["Yulin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}, wp = "%l, %c"}, -- 0.878 urban (1.570 adm-urb) per citypopulation.de ["Tai'an"] = {container = "Shandong"}, -- 1.417 urban (1.560 adm-urb) per citypopulation.de ["Weihai"] = {container = "Shandong"}, -- 1.340 urban (1.510 adm-urb) per citypopulation.de -- Taizhou, Jiangsu would be here (1.490 adm-urb) but moved to china_prefecture_level_cities_2 to avoid clash ["Yancheng"] = {container = "Jiangsu"}, -- 6.7 prefectural, 1.6 urban; 1.353 urban (1.460 adm-urb) per citypopulation.de ["Zhangjiakou"] = {container = "Hebei"}, -- 1.339 urban (1.450 adm-urb) per citypopulation.de ["Maoming"] = {container = "Guangdong"}, -- 6.2 prefectural, 2.5 urban; 1.308 urban (1.440 adm-urb) per citypopulation.de ["Nanchong"] = {container = "Sichuan"}, -- 1.254 urban (1.440 adm-urb) per citypopulation.de ["Fuyang"] = {container = "Anhui", wp = "%l, %c"}, -- 8.2 prefectural, 2.1 urban; 1.191 urban (1.410 adm-urb) per citypopulation.de ["Xuchang"] = {container = "Henan"}, -- 0.850 urban (1.390 adm-urb) per citypopulation.de ["Yichang"] = {container = "Hubei"}, -- 1.284 urban (1.390 adm-urb) per citypopulation.de ["Dazhou"] = {container = "Sichuan"}, -- 1.136 urban (1.380 adm-urb) per citypopulation.de ["Kaifeng"] = {container = "Henan"}, -- 1.194 urban (1.340 adm-urb) per citypopulation.de ["Luzhou"] = {container = "Sichuan"}, -- 1.128 urban (1.340 adm-urb) per citypopulation.de ["Qingyuan"] = {container = "Guangdong"}, -- 1.198 urban (1.340 adm-urb) per citypopulation.de ["Huaibei"] = {container = "Anhui"}, -- 0.831 urban (1.330 adm-urb) per citypopulation.de ["Yibin"] = {container = "Sichuan"}, -- 1.101 urban (1.310 adm-urb) per citypopulation.de ["Lu'an"] = {container = "Anhui"}, -- 1.070 urban (1.300 adm-urb) per citypopulation.de ["Dezhou"] = {container = "Shandong"}, -- 0.843 urban (1.290 adm-urb) per citypopulation.de ["Rizhao"] = {container = "Shandong"}, -- 1.147 urban (1.270 adm-urb) per citypopulation.de ["Changzhi"] = {container = "Shanxi"}, -- 1.047 urban (1.250 adm-urb) per citypopulation.de ["Hengyang"] = {container = "Hunan"}, -- 6.6 prefectural, 1.5 urban; 1.185 urban (1.250 adm-urb) per citypopulation.de ["Jinzhou"] = {container = "Liaoning"}, -- 1.021 urban (1.240 adm-urb) per citypopulation.de ["Liaocheng"] = {container = "Shandong"}, -- 1.020 urban (1.240 adm-urb) per citypopulation.de ["Changde"] = {container = "Hunan"}, -- 1.101 urban (1.230 adm-urb) per citypopulation.de ["Suqian"] = {container = "Jiangsu"}, -- 1.082 urban (1.230 adm-urb) per citypopulation.de ["Xinyang"] = {container = "Henan"}, -- 6.2 prefectural, 1.4 urban/metro; 1.015 urban (1.230 adm-urb) per citypopulation.de ["Baoji"] = {container = "Shaanxi"}, -- 1.108 urban (1.220 adm-urb) per citypopulation.de ["Yueyang"] = {container = "Hunan"}, -- 1.125 urban (1.220 adm-urb) per citypopulation.de ["Zhenjiang"] = {container = "Jiangsu"}, -- 1.124 urban (1.210 adm-urb) per citypopulation.de -- Wanzhou is a "district" of the "direct-administered municipality" of Chongqing but in fact is 142 miles away from Chongqing city proper. ["Wanzhou"] = {placetype = "district", container = {key = "Chongqing", placetype = "direct-administered municipality"}, divs = {"subdistricts", "townships"}, wp = "%l, %c"}, -- 1.078 urban (1.190 adm-urb) per citypopulation.de ["Ulanhad"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 1.093 urban (1.180 adm-urb) per citypopulation.de ["Chifeng"] = {alias_of = "Ulanhad"}, ["Ulankhad"] = {alias_of = "Ulanhad", display = true}, ["Ezhou"] = {container = "Hubei"}, -- < 0.750 urban (1.180 adm-urb) per citypopulation.de ["Zhaoqing"] = {container = "Guangdong"}, -- 1.036 urban (1.160 adm-urb) per citypopulation.de ["Lianyungang"] = {container = "Jiangsu"}, -- 4.599 prefectural, 2.0 urban; 1.071 urban (1.150 adm-urb) per citypopulation.de ["Qujing"] = {container = "Yunnan"}, -- 0.976 urban (1.150 adm-urb) per citypopulation.de -- Shuyang is a "county" of the "prefecture-level city" of Suqian but in fact is 38 miles away from Suqian city proper (urban core to urban core). -- The county itself is 37 miles by 34 miles. ["Shuyang"] = {placetype = "county", container = {key = "Suqian", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l County"}, -- 0.986 urban (1.120 adm-urb) per citypopulation.de -- Yongkang is a "county-level city" of the "prefecture-level city" of Jinhua but in fact is 32 miles away from Jinhua city proper (urban core to urban core). ["Yongkang"] = {placetype = "county-level city", container = {key = "Jinhua", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l, Zhejiang"}, -- < 0.750 urban (1.110 adm-urb) per citypopulation.de ["Zhoukou"] = {container = "Henan"}, -- 9.0 prefectural, 721,000 urban (1.6 metro); < 0.750 urban (1.100 adm-urb) per citypopulation.de ["Beihai"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- < 1 urban (1.090 adm-urb) per citypopulation.de ["Jiujiang"] = {container = "Jiangxi"}, -- < 0.750 urban (1.080 adm-urb) per citypopulation.de ["Shaoyang"] = {container = "Hunan"}, -- 6.6 prefectural, 802,000 urban, 1.4 metro; < 1 urban (1.080 adm-urb) per citypopulation.de ["Chuzhou"] = {container = "Anhui"}, -- < 0.750 urban (1.070 adm-urb) per citypopulation.de ["Hengshui"] = {container = "Hebei"}, -- 0.885 urban (1.070 adm-urb) per citypopulation.de ["Shiyan"] = {container = "Hubei"}, -- 0.955 urban (1.070 adm-urb) per citypopulation.de ["Huludao"] = {container = "Liaoning"}, -- 0.764 urban (1.060 adm-urb) per citypopulation.de ["Dongying"] = {container = "Shandong"}, -- 0.961 urban (1.050 adm-urb) per citypopulation.de ["Guigang"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 0.921 urban (1.050 adm-urb) per citypopulation.de -- Liuyang is a "county-level city" of the "prefecture-level city" of Changsha but in fact is 47 miles away from Changsha city proper (urban core to urban core). ["Liuyang"] = {placetype = "county-level city", container = {key = "Changsha", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.886 urban (1.040 adm-urb) per citypopulation.de -- NOTE: Not to be confused with Changzhou in Jiangsu ["Cangzhou"] = {container = "Hebei"}, -- 7.3 prefectural, 621,000 urban; 0.759 urban (1.030 adm-urb) per citypopulation.de ["Liupanshui"] = {container = "Guizhou"}, -- < 0.750 urban (1.030 adm-urb) per citypopulation.de ["Panjin"] = {container = "Liaoning"}, -- 0.980 urban (1.030 adm-urb) per citypopulation.de ["Qiqihar"] = {container = "Heilongjiang"}, -- 1.030 urban (1.030 adm-urb) per citypopulation.de ["Linfen"] = {container = "Shanxi"}, -- < 0.750 urban (1.010 adm-urb) per citypopulation.de -- Tengzhou is a "county-level city" of the "prefecture-level city" of Zaozhuang but in fact is 30 miles away from Zaozhuang city proper (urban core to urban core). ["Tengzhou"] = {placetype = "county-level city", container = {key = "Zaozhuang", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.937 urban (1.010 adm-urb) per citypopulation.de -- 3 extra that got added in earlier incarnations and aren't found in the "major agglomerations of the world" page https://citypopulation.de/en/world/agglomerations/ reference date 2025-01-01 ["Kunshan"] = {container = "Jiangsu"}, -- 1.652 urban (2020 China census) per citypopulation.de ["Zhumadian"] = {container = "Henan"}, -- 7.0 prefectural, 722,000 urban per Wikipedia; 0.754 urban per citypopulation.de ["Bijie"] = {container = "Guizhou"}, -- 6.9 prefectural, ? urban, ? metro (not listed in Wikipedia); < 0.750 urban per citypopulation.de } export.china_prefecture_level_cities_group = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Taizhou, Zhejiang" or "Suzhou, Anhui". key_to_placename = false, placename_to_key = false, -- don't add ", China" to make the key default_container = "China", canonicalize_key_container = make_canonicalize_key_container(", China", "province"), -- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people -- don't understand how Chinese administrative divisions work. default_placetype = {"prefecture-level city", "city"}, default_divs = { -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities, -- and prefecture-level cities (as well as county-level cities) are considered non-cities. "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_prefecture_level_cities, } -- Needed to avoid problems with two cities called Taizhou and Suzhou. export.china_prefecture_level_cities_2 = { -- NOTE: There is also a larger and better-known prefecture-level city Taizhou in Zhejiang. ["Taizhou, Jiangsu"] = {container = "Jiangsu"}, -- 1.3 urban (1.490 adm-urb) per citypopulation.de 2020 census ["Taizhou"] = {alias_of = "Taizhou, Jiangsu"}, -- NOTE: There is also a larger and better-known prefecture-level city Suzhou in Jiangsu. ["Suzhou, Anhui"] = {container = "Anhui"}, -- 5.3 prefectural, 1.766 metro and "urban"; < 1 urban (1.010 adm-urb) per citypopulation.de 2020 census -- hopefully this will work because we also have Suzhou as a key by itself for the larger, more-well-known Suzhou in Jiangsu ["Suzhou"] = {alias_of = "Suzhou, Anhui"}, } export.china_prefecture_level_cities_group_2 = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Taizhou, Jiangsu". placename_to_key = false, -- don't add ", China" to make the key default_container = "China", canonicalize_key_container = make_canonicalize_key_container(", China", "province"), -- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people -- don't understand how Chinese administrative divisions work. default_placetype = {"prefecture-level city", "city"}, default_divs = { -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities, -- and prefecture-level cities (as well as county-level cities) are considered non-cities. "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_prefecture_level_cities_2, } export.finland_regions = { ["Lapland, Finland"] = {wp = "%l (%c)"}, ["North Ostrobothnia, Finland"] = {}, ["Northern Ostrobothnia, Finland"] = {alias_of = "North Ostrobothnia, Finland", display = true}, ["Kainuu, Finland"] = {}, ["North Karelia, Finland"] = {}, ["Northern Savonia, Finland"] = {}, ["North Savo, Finland"] = {alias_of = "Northern Savonia, Finland", display = true}, ["Southern Savonia, Finland"] = {}, ["South Savo, Finland"] = {alias_of = "Southern Savonia, Finland", display = true}, ["South Karelia, Finland"] = {}, ["Central Finland, Finland"] = {}, ["South Ostrobothnia, Finland"] = {}, ["Southern Ostrobothnia, Finland"] = {alias_of = "South Ostrobothnia, Finland", display = true}, ["Ostrobothnia, Finland"] = {wp = "%l (region)"}, ["Central Ostrobothnia, Finland"] = {}, ["Pirkanmaa, Finland"] = {}, ["Satakunta, Finland"] = {}, ["Päijänne Tavastia, Finland"] = {}, ["Päijät-Häme, Finland"] = {alias_of = "Päijänne Tavastia, Finland", display = true}, ["Tavastia Proper, Finland"] = {}, ["Kanta-Häme, Finland"] = {alias_of = "Tavastia Proper, Finland", display = true}, ["Kymenlaakso, Finland"] = {}, ["Uusimaa, Finland"] = {}, ["Southwest Finland, Finland"] = {}, ["Åland Islands, Finland"] = {the = true, wp = "Åland"}, ["Åland, Finland"] = {alias_of = "Åland Islands, Finland"}, -- differs in "the" } -- regions of Finland export.finland_group = { default_container = "Finland", default_placetype = "region", default_divs = "municipalities", data = export.finland_regions, } export.france_administrative_regions = { ["Auvergne-Rhône-Alpes, France"] = {}, ["Bourgogne-Franche-Comté, France"] = {}, ["Brittany, France"] = {wp = "%l (administrative region)"}, ["Centre-Val de Loire, France"] = {}, ["Corsica, France"] = {}, -- overseas departments are handled in `export.country_like_entities` -- ["French Guiana"] = {}, ["Grand Est, France"] = {}, -- ["Guadeloupe"] = {}, ["Hauts-de-France, France"] = {}, ["Île-de-France, France"] = {}, -- ["Martinique"] = {}, -- ["Mayotte"] = {}, ["Normandy, France"] = {wp = "%l (administrative region)"}, ["Nouvelle-Aquitaine, France"] = {}, ["Occitania, France"] = {wp = "%l (administrative region)"}, ["Occitanie, France"] = {alias_of = "Occitania, France", display = true}, ["Pays de la Loire, France"] = {}, ["Provence-Alpes-Côte d'Azur, France"] = {}, -- ["Réunion"] = {}, } -- administrative regions of France export.france_group = { default_container = "France", -- Canonically these are 'administrative regions' but also treat as 'region' ('administrative region' falls back -- to 'region'). default_placetype = "region", default_divs = { "communes", {type = "municipalities", cat_as = "communes"}, "departments", {type = "prefectures", cat_as = {"prefectures", "departmental capitals"}}, {type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}}, }, data = export.france_administrative_regions, } export.france_departments = { ["Ain, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 01 ["Aisne, France"] = {container = "Hauts-de-France"}, -- 02 ["Allier, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 03 ["Alpes-de-Haute-Provence, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 04 ["Hautes-Alpes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 05 ["Alpes-Maritimes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 06 ["Ardèche, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 07 ["Ardennes, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 08 ["Ariège, France"] = {container = "Occitania", wp = "%l (department)"}, -- 09 ["Aube, France"] = {container = "Grand Est"}, -- 10 ["Aude, France"] = {container = "Occitania"}, -- 11 ["Aveyron, France"] = {container = "Occitania"}, -- 12 ["Bouches-du-Rhône, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 13 ["Calvados, France"] = {container = "Normandy", wp = "%l (department)"}, -- 14 ["Cantal, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 15 ["Charente, France"] = {container = "Nouvelle-Aquitaine"}, -- 16 ["Charente-Maritime, France"] = {container = "Nouvelle-Aquitaine"}, -- 17 ["Cher, France"] = {container = "Centre-Val de Loire", wp = "%l (department)"}, -- 18 ["Corrèze, France"] = {container = "Nouvelle-Aquitaine"}, -- 19 ["Corse-du-Sud, France"] = {container = "Corsica"}, -- 2A ["Haute-Corse, France"] = {container = "Corsica"}, -- 2B ["Côte-d'Or, France"] = {container = "Bourgogne-Franche-Comté"}, -- 21 ["Côte d'Or, France"] = {alias_of = "Côte-d'Or, France", display = true}, ["Côtes-d'Armor, France"] = {container = "Brittany"}, -- 22 ["Côtes d'Armor, France"] = {alias_of = "Côtes-d'Armor, France", display = true}, ["Creuse, France"] = {container = "Nouvelle-Aquitaine"}, -- 23 ["Dordogne, France"] = {container = "Nouvelle-Aquitaine"}, -- 24 ["Doubs, France"] = {container = "Bourgogne-Franche-Comté"}, -- 25 ["Drôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 26 ["Eure, France"] = {container = "Normandy"}, -- 27 ["Eure-et-Loir, France"] = {container = "Centre-Val de Loire"}, -- 28 ["Finistère, France"] = {container = "Brittany"}, -- 29 ["Gard, France"] = {container = "Occitania"}, -- 30 ["Haute-Garonne, France"] = {container = "Occitania"}, -- 31 ["Gers, France"] = {container = "Occitania"}, -- 32 ["Gironde, France"] = {container = "Nouvelle-Aquitaine"}, -- 33 ["Hérault, France"] = {container = "Occitania"}, -- 34 ["Ille-et-Vilaine, France"] = {container = "Brittany"}, -- 35 ["Indre, France"] = {container = "Centre-Val de Loire"}, -- 36 ["Indre-et-Loire, France"] = {container = "Centre-Val de Loire"}, -- 37 ["Isère, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 38 ["Jura, France"] = {container = "Bourgogne-Franche-Comté", wp = "%l (department)"}, -- 39 ["Landes, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 40 ["Loir-et-Cher, France"] = {container = "Centre-Val de Loire"}, -- 41 ["Loire, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 42 ["Haute-Loire, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 43 ["Loire-Atlantique, France"] = {container = "Pays de la Loire"}, -- 44 ["Loiret, France"] = {container = "Centre-Val de Loire"}, -- 45 ["Lot, France"] = {container = "Occitania", wp = "%l (department)"}, -- 46 ["Lot-et-Garonne, France"] = {container = "Nouvelle-Aquitaine"}, -- 47 ["Lozère, France"] = {container = "Occitania"}, -- 48 ["Maine-et-Loire, France"] = {container = "Pays de la Loire"}, -- 49 ["Manche, France"] = {container = "Normandy"}, -- 50 ["Marne, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 51 ["Haute-Marne, France"] = {container = "Grand Est"}, -- 52 ["Mayenne, France"] = {container = "Pays de la Loire"}, -- 53 ["Meurthe-et-Moselle, France"] = {container = "Grand Est"}, -- 54 ["Meuse, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 55 ["Morbihan, France"] = {container = "Brittany"}, -- 56 ["Moselle, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 57 ["Nièvre, France"] = {container = "Bourgogne-Franche-Comté"}, -- 58 ["Nord, France"] = {container = "Hauts-de-France", wp = "%l (French department)"}, -- 59 ["Oise, France"] = {container = "Hauts-de-France"}, -- 60 ["Orne, France"] = {container = "Normandy"}, -- 61 ["Pas-de-Calais, France"] = {container = "Hauts-de-France"}, -- 62 ["Puy-de-Dôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 63 ["Pyrénées-Atlantiques, France"] = {container = "Nouvelle-Aquitaine"}, -- 64 ["Hautes-Pyrénées, France"] = {container = "Occitania"}, -- 65 ["Pyrénées-Orientales, France"] = {container = "Occitania"}, -- 66 ["Bas-Rhin, France"] = {container = "Grand Est"}, -- 67 ["Haut-Rhin, France"] = {container = "Grand Est"}, -- 68 ["Rhône, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 69D ["Metropolis of Lyon, France"] = {container = "Auvergne-Rhône-Alpes", the = true}, -- 69M ["Lyon Metropolis, France"] = {alias_of = "Metropolis of Lyon, France"}, ["Lyon, France"] = {alias_of = "Metropolis of Lyon, France"}, ["Haute-Saône, France"] = {container = "Bourgogne-Franche-Comté"}, -- 70 ["Saône-et-Loire, France"] = {container = "Bourgogne-Franche-Comté"}, -- 71 ["Sarthe, France"] = {container = "Pays de la Loire"}, -- 72 ["Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 73 ["Haute-Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 74 ["Paris, France"] = {container = "Île-de-France"}, -- 75 ["Seine-Maritime, France"] = {container = "Normandy"}, -- 76 ["Seine-et-Marne, France"] = {container = "Île-de-France"}, -- 77 ["Yvelines, France"] = {container = "Île-de-France"}, -- 78 ["Deux-Sèvres, France"] = {container = "Nouvelle-Aquitaine"}, -- 79 ["Somme, France"] = {container = "Hauts-de-France", wp = "%l (department)"}, -- 80 ["Tarn, France"] = {container = "Occitania", wp = "%l (department)"}, -- 81 ["Tarn-et-Garonne, France"] = {container = "Occitania"}, -- 82 ["Var, France"] = {container = "Provence-Alpes-Côte d'Azur", wp = "%l (department)"}, -- 83 ["Vaucluse, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 84 ["Vendée, France"] = {container = "Pays de la Loire"}, -- 85 ["Vienne, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 86 ["Haute-Vienne, France"] = {container = "Nouvelle-Aquitaine"}, -- 87 ["Vosges, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 88 ["Yonne, France"] = {container = "Bourgogne-Franche-Comté"}, -- 89 ["Territoire de Belfort, France"] = {container = "Bourgogne-Franche-Comté"}, -- 90 ["Essonne, France"] = {container = "Île-de-France"}, -- 91 ["Hauts-de-Seine, France"] = {container = "Île-de-France"}, -- 92 ["Seine-Saint-Denis, France"] = {container = "Île-de-France"}, -- 93 ["Val-de-Marne, France"] = {container = "Île-de-France"}, -- 94 ["Val-d'Oise, France"] = {container = "Île-de-France"}, -- 95 --["Guadeloupe"] = {container = "Guadeloupe"}, -- 971 --["Martinique"] = {container = "Martinique"}, -- 972 --["Guyane"] = {container = "French Guiana", wp = "French Guiana"}, -- 973 --["La Réunion"] = {container = "Réunion", wp = "Réunion"}, -- 974 --["Mayotte"] = {container = "Mayotte"}, -- 976 } export.france_departments_group = { placename_to_key = make_placename_to_key(", France"), canonicalize_key_container = make_canonicalize_key_container(", France", "region"), default_placetype = "department", default_divs = { "communes", {type = "municipalities", cat_as = "communes"}, }, data = export.france_departments, } export.germany_states = { ["Baden-Württemberg, Germany"] = {}, ["Bavaria, Germany"] = {}, -- Berlin, Bremen and Hamburg are effectively city-states and don't have districts ([[Kreise]]), so override -- the default_divs setting. Better not to include them at all since they're included as cities down below. -- ["Berlin"] = {divs = {}}, ["Brandenburg, Germany"] = {}, -- ["Bremen"] = {divs = {}}, -- ["Hamburg"] = {divs = {}}, ["Hesse, Germany"] = {}, ["Lower Saxony, Germany"] = {}, ["Mecklenburg-Vorpommern, Germany"] = {}, ["Mecklenburg-Western Pomerania, Germany"] = {alias_of = "Mecklenburg-Vorpommern, Germany", display = true}, ["North Rhine-Westphalia, Germany"] = {}, ["Rhineland-Palatinate, Germany"] = {}, ["Saarland, Germany"] = {}, ["Saxony, Germany"] = {}, ["Saxony-Anhalt, Germany"] = {}, ["Schleswig-Holstein, Germany"] = {}, ["Thuringia, Germany"] = {}, } -- states of Germany export.germany_group = { default_container = "Germany", default_placetype = "state", default_divs = {"districts", "municipalities"}, data = export.germany_states, } export.greece_regions = { ["Attica, Greece"] = {wp = "%l (region)"}, ["Central Greece, Greece"] = {wp = "%l (administrative region)"}, ["Central Macedonia, Greece"] = {}, ["Crete, Greece"] = {}, ["Eastern Macedonia and Thrace, Greece"] = {}, ["Epirus, Greece"] = {wp = "%l (region)"}, ["Ionian Islands, Greece"] = {the = true, wp = "%l (region)"}, ["North Aegean, Greece"] = {the = true}, -- I would expect 'the Peloponnese' but Wikipedia mostly has categories like [[w:Category:Geography of Peloponnese (region)]] -- and [[w:Category:Buildings and structures in Peloponnese (region)]]; only [[w:Category:People from the Peloponnese (region)]] -- has "the" in it. ["Peloponnese, Greece"] = {wp = "%l (region)"}, ["South Aegean, Greece"] = {the = true}, ["Thessaly, Greece"] = {}, ["Western Greece, Greece"] = {}, ["Western Macedonia, Greece"] = {}, ["Mount Athos, Greece"] = {placetype = {"autonomous region", "region"}, wp = "Monastic community of Mount Athos"}, } -- regions of Greece export.greece_group = { default_container = "Greece", default_placetype = "region", data = export.greece_regions, } local india_polity_with_divisions = {"divisions", "districts"} local india_polity_without_divisions = {"districts"} -- States and union territories of India. Only some of them are divided into divisions. export.india_states_and_union_territories = { ["Andaman and Nicobar Islands, India"] = {the = true, placetype = "union territory", divs = india_polity_without_divisions}, ["Andhra Pradesh, India"] = {divs = india_polity_without_divisions}, ["Arunachal Pradesh, India"] = {divs = india_polity_with_divisions}, ["Assam, India"] = {divs = india_polity_with_divisions}, ["Bihar, India"] = {divs = india_polity_with_divisions}, ["Chandigarh, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Chhattisgarh, India"] = {divs = india_polity_with_divisions}, ["Dadra and Nagar Haveli and Daman and Diu, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Delhi, India"] = {placetype = "union territory", divs = india_polity_with_divisions}, ["Goa, India"] = {divs = india_polity_without_divisions}, ["Gujarat, India"] = {divs = india_polity_without_divisions}, ["Haryana, India"] = {divs = india_polity_with_divisions}, ["Himachal Pradesh, India"] = {divs = india_polity_with_divisions}, ["Jammu and Kashmir, India"] = {placetype = "union territory", divs = india_polity_with_divisions, wp = "%l (union territory)"}, ["Jharkhand, India"] = {divs = india_polity_with_divisions}, ["Karnataka, India"] = {divs = india_polity_with_divisions}, ["Kerala, India"] = {divs = india_polity_without_divisions}, ["Ladakh, India"] = {placetype = "union territory", divs = india_polity_with_divisions}, ["Lakshadweep, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Madhya Pradesh, India"] = {divs = india_polity_with_divisions}, ["Maharashtra, India"] = {divs = india_polity_with_divisions}, ["Manipur, India"] = {divs = india_polity_without_divisions}, ["Meghalaya, India"] = {divs = india_polity_with_divisions}, ["Mizoram, India"] = {divs = india_polity_without_divisions}, ["Nagaland, India"] = {divs = india_polity_with_divisions}, ["Odisha, India"] = {divs = india_polity_with_divisions}, ["Puducherry, India"] = {placetype = "union territory", divs = india_polity_without_divisions, wp = "%l (union territory)"}, ["Pondicherry, India"] = {alias_of = "Puducherry, India", display = true}, ["Punjab, India"] = {divs = india_polity_with_divisions, wp = "%l, %c"}, ["Rajasthan, India"] = {divs = india_polity_with_divisions}, ["Sikkim, India"] = {divs = india_polity_without_divisions}, ["Tamil Nadu, India"] = {divs = india_polity_without_divisions}, ["Telangana, India"] = {divs = india_polity_without_divisions}, ["Tripura, India"] = {divs = india_polity_without_divisions}, ["Uttar Pradesh, India"] = {divs = india_polity_with_divisions}, ["Uttarakhand, India"] = {divs = india_polity_with_divisions}, ["West Bengal, India"] = {divs = india_polity_with_divisions}, } -- states and union territories of India export.india_group = { default_container = "India", default_placetype = "state", data = export.india_states_and_union_territories, } export.indonesia_provinces = { ["Aceh, Indonesia"] = {}, ["Bali, Indonesia"] = {}, ["Bangka Belitung Islands, Indonesia"] = {the = true}, ["Banten, Indonesia"] = {}, ["Bengkulu, Indonesia"] = {}, ["Central Java, Indonesia"] = {}, ["Central Kalimantan, Indonesia"] = {}, ["Central Papua, Indonesia"] = {}, ["Central Sulawesi, Indonesia"] = {}, ["East Java, Indonesia"] = {}, ["East Kalimantan, Indonesia"] = {}, ["East Nusa Tenggara, Indonesia"] = {}, ["Gorontalo, Indonesia"] = {}, ["Highland Papua, Indonesia"] = {wp = "%l"}, ["Special Capital Region of Jakarta, Indonesia"] = {the = true, wp = "Jakarta"}, ["Jakarta, Indonesia"] = {alias_of = "Special Capital Region of Jakarta, Indonesia"}, ["Jambi, Indonesia"] = {}, ["Lampung, Indonesia"] = {}, ["Maluku, Indonesia"] = {}, ["North Kalimantan, Indonesia"] = {}, ["North Maluku, Indonesia"] = {}, ["North Sulawesi, Indonesia"] = {}, ["North Papua, Indonesia"] = {}, ["North Sumatra, Indonesia"] = {}, ["Papua, Indonesia"] = {wp = "%l (province)"}, ["Riau, Indonesia"] = {}, ["Riau Islands, Indonesia"] = {the = true}, ["Southeast Sulawesi, Indonesia"] = {}, ["South Kalimantan, Indonesia"] = {}, ["South Papua, Indonesia"] = {}, ["South Sulawesi, Indonesia"] = {}, ["South Sumatra, Indonesia"] = {}, ["Southwest Papua, Indonesia"] = {}, ["West Java, Indonesia"] = {}, ["West Kalimantan, Indonesia"] = {}, ["West Nusa Tenggara, Indonesia"] = {}, ["West Papua, Indonesia"] = {wp = "%l (province)"}, ["West Sulawesi, Indonesia"] = {}, ["West Sumatra, Indonesia"] = {}, ["Special Region of Yogyakarta, Indonesia"] = {the = true}, ["Yogyakarta, Indonesia"] = {alias_of = "Special Region of Yogyakarta, Indonesia"}, } -- provinces of Indonesia export.indonesia_group = { default_container = "Indonesia", default_placetype = "province", -- per https://www.quora.com/Does-Indonesia-use-British-or-American-English, Indonesia tends to use American -- spellings. data = export.indonesia_provinces, } export.iran_provinces = { ["Alborz Province, Iran"] = {}, -- abbreviation AL, capital [[w:Karaj]] ["Ardabil Province, Iran"] = {}, -- abbreviation AR, capital [[w:Ardabil]] ["Bushehr Province, Iran"] = {}, -- abbreviation BU, capital [[w:Bushehr]] ["Chaharmahal and Bakhtiari Province, Iran"] = {}, -- abbreviation CB, capital [[w:Shahr-e Kord]] ["East Azerbaijan Province, Iran"] = {}, -- abbreviation EA, capital [[w:Tabriz]] ["Fars Province, Iran"] = {}, -- abbreviation FA, capital [[w:Shiraz]] ["Pars Province, Iran"] = {alias_of = "Fars Province, Iran", display = true}, ["Gilan Province, Iran"] = {}, -- abbreviation GN, capital [[w:Rasht]] ["Golestan Province, Iran"] = {}, -- abbreviation GO, capital [[w:Gorgan]] ["Hamadan Province, Iran"] = {}, -- abbreviation HA, capital [[w:Hamadan]] ["Hormozgan Province, Iran"] = {}, -- abbreviation HO, capital [[w:Bandar Abbas]] ["Ilam Province, Iran"] = {}, -- abbreviation IL, capital [[w:Ilam, Iran|Ilam]] ["Isfahan Province, Iran"] = {}, -- abbreviation IS, capital [[w:Isfahan]] ["Kerman Province, Iran"] = {}, -- abbreviation KN, capital [[w:Kerman]] ["Kermanshah Province, Iran"] = {}, -- abbreviation KE, capital [[w:Kermanshah]] ["Khuzestan Province, Iran"] = {}, -- abbreviation KH, capital [[w:Ahvaz]] ["Kohgiluyeh and Boyer-Ahmad Province, Iran"] = {}, -- abbreviation KB, capital [[w:Yasuj]] ["Kurdistan Province, Iran"] = {}, -- abbreviation KU, capital [[w:Sanandaj]] ["Lorestan Province, Iran"] = {}, -- abbreviation LO, capital [[w:Khorramabad]] ["Markazi Province, Iran"] = {}, -- abbreviation MA, capital [[w:Arak, Iran|Arak]] ["Mazandaran Province, Iran"] = {}, -- abbreviation MN, capital [[w:Sari, Iran|Sari]] ["North Khorasan Province, Iran"] = {}, -- abbreviation NK, capital [[w:Bojnord]] ["Qazvin Province, Iran"] = {}, -- abbreviation QA, capital [[w:Qazvin]] ["Qom Province, Iran"] = {}, -- abbreviation QM, capital [[w:Qom]] ["Razavi Khorasan Province, Iran"] = {}, -- abbreviation RK, capital [[w:Mashhad]] ["Semnan Province, Iran"] = {}, -- abbreviation SE, capital [[w:Semnan, Iran|Semnan]] ["Sistan and Baluchestan Province, Iran"] = {}, -- abbreviation SB, capital [[w:Zahedan]] ["South Khorasan Province, Iran"] = {}, -- abbreviation SK, capital [[w:Birjand]] ["Tehran Province, Iran"] = {}, -- abbreviation TE, capital [[w:Tehran]] ["West Azerbaijan Province, Iran"] = {}, -- abbreviation WA, capital [[w:Urmia]] ["Yazd Province, Iran"] = {}, -- abbreviation YA, capital [[w:Yazd]] ["Zanjan Province, Iran"] = {}, -- abbreviation ZA, capital [[w:Zanjan, Iran|Zanjan]] } -- provinces of Iran export.iran_group = { key_to_placename = make_key_to_placename(", Iran", " Province$"), placename_to_key = make_placename_to_key(", Iran", " Province"), default_container = "Iran", default_placetype = "province", -- There aren't nearly enough counties of Iran currently entered in any language to allow for categorizing them -- per-province. (As of 2025-05-09, there are only 6 counties in each of [[Category:en:Counties of Iran]], -- [[Category:fa:Counties of Iran]] and [[Category:ar:Counties of Iran]].) -- default_divs = "counties", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.iran_provinces, } export.ireland_counties = { ["County Carlow, Ireland"] = {}, ["County Cavan, Ireland"] = {}, ["County Clare, Ireland"] = {}, ["County Cork, Ireland"] = {}, ["County Donegal, Ireland"] = {}, ["County Dublin, Ireland"] = {}, ["County Galway, Ireland"] = {}, ["County Kerry, Ireland"] = {}, ["County Kildare, Ireland"] = {}, ["County Kilkenny, Ireland"] = {}, ["County Laois, Ireland"] = {}, ["County Leitrim, Ireland"] = {}, ["County Limerick, Ireland"] = {}, ["County Longford, Ireland"] = {}, ["County Louth, Ireland"] = {}, ["County Mayo, Ireland"] = {}, ["County Meath, Ireland"] = {}, ["County Monaghan, Ireland"] = {}, ["County Offaly, Ireland"] = {}, ["County Roscommon, Ireland"] = {}, ["County Sligo, Ireland"] = {}, ["County Tipperary, Ireland"] = {}, ["County Waterford, Ireland"] = {}, ["County Westmeath, Ireland"] = {}, ["County Wexford, Ireland"] = {}, ["County Wicklow, Ireland"] = {}, } local function make_irish_type_key_to_placename(container_pattern) return function(key) key = key:gsub(container_pattern, "") local elliptical_key = key:gsub("^County ", "") return key, elliptical_key end end local function make_irish_type_placename_to_key(container_suffix) return function(placename) if not placename:find("^County ") and not placename:find("^City ") then placename = "County " .. placename end return placename .. container_suffix end end -- counties of Ireland export.ireland_group = { key_to_placename = make_irish_type_key_to_placename(", Ireland$"), placename_to_key = make_irish_type_placename_to_key(", Ireland"), default_container = "Ireland", default_placetype = "county", data = export.ireland_counties, } export.italy_administrative_regions = { ["Abruzzo, Italy"] = {}, ["Aosta Valley, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Apulia, Italy"] = {}, ["Basilicata, Italy"] = {}, ["Calabria, Italy"] = {}, ["Campania, Italy"] = {}, ["Emilia-Romagna, Italy"] = {}, ["Friuli-Venezia Giulia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Lazio, Italy"] = {}, ["Liguria, Italy"] = {}, ["Lombardy, Italy"] = {}, ["Marche, Italy"] = {}, ["Molise, Italy"] = {}, ["Piedmont, Italy"] = {}, ["Sardinia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Sicily, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Trentino-Alto Adige, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Tuscany, Italy"] = {}, ["Umbria, Italy"] = {}, ["Veneto, Italy"] = {}, } -- administrative regions of Italy export.italy_group = { default_container = "Italy", default_placetype = "region", data = export.italy_administrative_regions, } -- table of Japanese prefectures; interpolated into the main 'places' table, but also needed separately export.japan_prefectures = { ["Aichi Prefecture, Japan"] = {}, ["Akita Prefecture, Japan"] = {}, ["Aomori Prefecture, Japan"] = {}, ["Chiba Prefecture, Japan"] = {}, ["Ehime Prefecture, Japan"] = {}, ["Fukui Prefecture, Japan"] = {}, ["Fukuoka Prefecture, Japan"] = {}, ["Fukushima Prefecture, Japan"] = {}, ["Gifu Prefecture, Japan"] = {}, ["Gunma Prefecture, Japan"] = {}, ["Hiroshima Prefecture, Japan"] = {}, ["Hokkaido Prefecture, Japan"] = {divs = "subprefectures", wp = "Hokkaido"}, ["Hyōgo Prefecture, Japan"] = {}, ["Hyogo Prefecture, Japan"] = {alias_of = "Hyōgo Prefecture, Japan", display = true}, ["Ibaraki Prefecture, Japan"] = {}, ["Ishikawa Prefecture, Japan"] = {}, ["Iwate Prefecture, Japan"] = {}, ["Kagawa Prefecture, Japan"] = {}, ["Kagoshima Prefecture, Japan"] = {}, ["Kanagawa Prefecture, Japan"] = {}, ["Kōchi Prefecture, Japan"] = {}, ["Kochi Prefecture, Japan"] = {alias_of = "Kōchi Prefecture, Japan", display = true}, ["Kumamoto Prefecture, Japan"] = {}, ["Kyoto Prefecture, Japan"] = {}, ["Mie Prefecture, Japan"] = {}, ["Miyagi Prefecture, Japan"] = {}, ["Miyazaki Prefecture, Japan"] = {}, ["Nagano Prefecture, Japan"] = {}, ["Nagasaki Prefecture, Japan"] = {}, ["Nara Prefecture, Japan"] = {}, ["Niigata Prefecture, Japan"] = {}, ["Ōita Prefecture, Japan"] = {}, ["Oita Prefecture, Japan"] = {alias_of = "Ōita Prefecture, Japan", display = true}, ["Okayama Prefecture, Japan"] = {}, ["Okinawa Prefecture, Japan"] = {}, ["Osaka Prefecture, Japan"] = {}, ["Saga Prefecture, Japan"] = {}, ["Saitama Prefecture, Japan"] = {}, ["Shiga Prefecture, Japan"] = {}, ["Shimane Prefecture, Japan"] = {}, ["Shizuoka Prefecture, Japan"] = {}, ["Tochigi Prefecture, Japan"] = {}, ["Tokushima Prefecture, Japan"] = {}, ["Tottori Prefecture, Japan"] = {}, ["Toyama Prefecture, Japan"] = {}, ["Wakayama Prefecture, Japan"] = {}, ["Yamagata Prefecture, Japan"] = {}, ["Yamaguchi Prefecture, Japan"] = {}, ["Yamanashi Prefecture, Japan"] = {}, } -- prefectures of Japan export.japan_group = { key_to_placename = make_key_to_placename(", Japan$", " Prefecture$"), placename_to_key = make_placename_to_key(", Japan", " Prefecture"), default_container = "Japan", default_placetype = "prefecture", data = export.japan_prefectures, } export.laos_provinces = { ["Attapeu Province, Laos"] = {}, ["Bokeo Province, Laos"] = {}, ["Bolikhamxai Province, Laos"] = {}, ["Champasak Province, Laos"] = {}, ["Houaphanh Province, Laos"] = {}, ["Khammouane Province, Laos"] = {}, ["Luang Namtha Province, Laos"] = {}, ["Luang Prabang Province, Laos"] = {}, ["Oudomxay Province, Laos"] = {}, ["Phongsaly Province, Laos"] = {}, ["Salavan Province, Laos"] = {}, ["Savannakhet Province, Laos"] = {}, ["Vientiane Province, Laos"] = {}, ["Vientiane Prefecture, Laos"] = {placetype = "prefecture", wp = "%l"}, ["Sainyabuli Province, Laos"] = {}, ["Sekong Province, Laos"] = {}, ["Xaisomboun Province, Laos"] = {}, ["Xiangkhouang Province, Laos"] = {}, } local function laos_placename_to_key(placename) if placename == "Vientiane Prefecture" then return placename .. ", Laos" end if placename:find(" Province$") then return placename .. ", Laos" end return placename .. " Province, Laos" end -- provinces of Laos export.laos_group = { key_to_placename = make_key_to_placename(", Laos$", {" Province$", " Prefecture$"}), placename_to_key = laos_placename_to_key, default_container = "Laos", default_placetype = "province", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.laos_provinces, } export.lebanon_governorates = { ["Akkar Governorate, Lebanon"] = {}, ["Baalbek-Hermel Governorate, Lebanon"] = {}, ["Beirut Governorate, Lebanon"] = {}, ["Beqaa Governorate, Lebanon"] = {}, ["Keserwan-Jbeil Governorate, Lebanon"] = {}, ["Mount Lebanon Governorate, Lebanon"] = {}, ["Nabatieh Governorate, Lebanon"] = {}, -- These two are generic enough that we don't want to automatically augment a use of `gov/North Governorate` or -- `gov/South Governorate` with `c/Lebanon`. ["North Governorate, Lebanon"] = {no_auto_augment_container = true}, ["South Governorate, Lebanon"] = {no_auto_augment_container = true}, } -- governorates of Lebanon export.lebanon_group = { key_to_placename = make_key_to_placename(", Lebanon$", " Governorate$"), placename_to_key = make_placename_to_key(", Lebanon", " Governorate"), default_container = "Lebanon", default_placetype = "governorate", data = export.lebanon_governorates, } export.malaysia_states = { ["Johor, Malaysia"] = {}, ["Kedah, Malaysia"] = {}, ["Kelantan, Malaysia"] = {}, ["Malacca, Malaysia"] = {}, ["Negeri Sembilan, Malaysia"] = {}, ["Pahang, Malaysia"] = {}, ["Penang, Malaysia"] = {}, ["Perak, Malaysia"] = {}, ["Perlis, Malaysia"] = {}, ["Sabah, Malaysia"] = {}, ["Sarawak, Malaysia"] = {}, ["Selangor, Malaysia"] = {}, ["Terengganu, Malaysia"] = {}, } -- states of Malaysia export.malaysia_group = { default_container = "Malaysia", default_placetype = "state", default_wp = "%l, %c", data = export.malaysia_states, } export.malta_regions = { -- Some of the regions are generic enough that we don't want to automatically augment a use of e.g. -- `r/Northern Region` with `c/Malta`. In particular; -- * "Eastern Region" also occurs at least in Ghana, Uganda, Iceland, Nigeria, Venezuela, North Macedonia and -- El Salvador; -- * "Northern Region" also occurs at least in Ghana, Uganda, Malawi, Nigeria, Canada and South Africa; -- * "Western Region" also occurs at least in Abu Dhabi, Bahrain, South Africa, Ghana, Iceland, Nepal, Nigeria, -- Serbia and Uganda; -- * "Southern Region" also occurs at least in Nigeria, Eritrea, Iceland, Ireland, Malawi and Serbia. ["Eastern Region, Malta"] = {no_auto_augment_container = true}, ["Gozo Region, Malta"] = {wp = "%l"}, ["Northern Region, Malta"] = {no_auto_augment_container = true}, ["Port Region, Malta"] = {}, ["Southern Region, Malta"] = {no_auto_augment_container = true}, ["Western Region, Malta"] = {no_auto_augment_container = true}, } -- regions of Malta export.malta_group = { key_to_placename = make_key_to_placename(", Malta$", " Region"), placename_to_key = make_placename_to_key(", Malta", " Region"), default_container = "Malta", default_placetype = "region", default_wp = "%l, %c", default_the = true, data = export.malta_regions, } export.mexico_states = { ["Aguascalientes, Mexico"] = {}, ["Baja California, Mexico"] = {}, -- not display-canonicalizing because the "Norte" could be for emphasis ["Baja California Norte, Mexico"] = {alias_of = "Baja California, Mexico"}, ["Baja California Sur, Mexico"] = {}, ["Campeche, Mexico"] = {}, ["Chiapas, Mexico"] = {}, ["Chihuahua, Mexico"] = {wp = "%l (state)"}, ["Coahuila, Mexico"] = {}, ["Colima, Mexico"] = {}, ["Durango, Mexico"] = {}, ["Guanajuato, Mexico"] = {}, ["Guerrero, Mexico"] = {}, ["Hidalgo, Mexico"] = {wp = "%l (state)"}, ["Jalisco, Mexico"] = {}, ["State of Mexico, Mexico"] = {the = true}, ["Mexico, Mexico"] = {alias_of = "State of Mexico, Mexico"}, -- differs in "the" -- ["Mexico City, Mexico"] = {}, doesn't belong here because it's a city ["Michoacán, Mexico"] = {}, ["Michoacan, Mexico"] = {alias_of = "Michoacán, Mexico", display = true}, ["Morelos, Mexico"] = {}, ["Nayarit, Mexico"] = {}, ["Nuevo León, Mexico"] = {}, ["Nuevo Leon, Mexico"] = {alias_of = "Nuevo León, Mexico", display = true}, ["Oaxaca, Mexico"] = {}, ["Puebla, Mexico"] = {}, ["Querétaro, Mexico"] = {}, ["Queretaro, Mexico"] = {alias_of = "Querétaro, Mexico", display = true}, ["Quintana Roo, Mexico"] = {}, ["San Luis Potosí, Mexico"] = {}, ["San Luis Potosi, Mexico"] = {alias_of = "San Luis Potosí, Mexico", display = true}, ["Sinaloa, Mexico"] = {}, ["Sonora, Mexico"] = {}, ["Tabasco, Mexico"] = {}, ["Tamaulipas, Mexico"] = {}, ["Tlaxcala, Mexico"] = {}, ["Veracruz, Mexico"] = {}, ["Yucatán, Mexico"] = {}, ["Yucatan, Mexico"] = {alias_of = "Yucatán, Mexico", display = true}, ["Zacatecas, Mexico"] = {}, } -- Mexican states export.mexico_group = { default_container = "Mexico", default_placetype = "state", data = export.mexico_states, } export.moldova_districts_and_autonomous_territorial_units = { ["Anenii Noi District, Moldova"] = {}, -- capital [[Anenii Noi]] ["Basarabeasca District, Moldova"] = {}, -- capital [[Basarabeasca]] ["Briceni District, Moldova"] = {}, -- capital [[Briceni]] ["Cahul District, Moldova"] = {}, -- capital [[Cahul]] ["Cantemir District, Moldova"] = {}, -- capital [[Cantemir, Moldova|Cantemir]] ["Călărași District, Moldova"] = {}, -- capital [[Călărași, Moldova|Călărași]] ["Căușeni District, Moldova"] = {}, -- capital [[Căușeni]] ["Cimișlia District, Moldova"] = {}, -- capital [[Cimișlia]] ["Criuleni District, Moldova"] = {}, -- capital [[Criuleni]] ["Dondușeni District, Moldova"] = {}, -- capital [[Dondușeni]] ["Drochia District, Moldova"] = {}, -- capital [[Drochia]] ["Dubăsari District, Moldova"] = {}, -- capital [[Cocieri]] ["Edineț District, Moldova"] = {}, -- capital [[Edineț]] ["Fălești District, Moldova"] = {}, -- capital [[Fălești]] ["Florești District, Moldova"] = {}, -- capital [[Florești, Moldova|Florești]] ["Glodeni District, Moldova"] = {}, -- capital [[Glodeni]] ["Hîncești District, Moldova"] = {}, -- capital [[Hîncești]] ["Ialoveni District, Moldova"] = {}, -- capital [[Ialoveni]] ["Leova District, Moldova"] = {}, -- capital [[Leova]] ["Nisporeni District, Moldova"] = {}, -- capital [[Nisporeni]] ["Ocnița District, Moldova"] = {}, -- capital [[Ocnița]] ["Orhei District, Moldova"] = {}, -- capital [[Orhei]] ["Rezina District, Moldova"] = {}, -- capital [[Rezina]] ["Rîșcani District, Moldova"] = {}, -- capital [[Rîșcani]] ["Sîngerei District, Moldova"] = {}, -- capital [[Sîngerei]] ["Soroca District, Moldova"] = {}, -- capital [[Soroca]] ["Strășeni District, Moldova"] = {}, -- capital [[Strășeni]] ["Șoldănești District, Moldova"] = {}, -- capital [[Șoldănești]] ["Ștefan Vodă District, Moldova"] = {}, -- capital [[Ștefan Vodă]] ["Taraclia District, Moldova"] = {}, -- capital [[Taraclia]] ["Telenești District, Moldova"] = {}, -- capital [[Telenești]] ["Ungheni District, Moldova"] = {}, -- capital [[Ungheni]] ["Chișinău, Moldova"] = {placetype = "municipality"}, ["Bălți, Moldova"] = {placetype = "municipality"}, ["Gagauzia, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Comrat]] -- the remainder are under the de-facto control of the unrecognized state of Transnistria ["Bender, Moldova"] = {placetype = "municipality"}, ["Tighina, Moldova"] = {alias_of = "Bender, Moldova"}, ["Transnistria, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Tiraspol]] ["Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova", the = true}, ["Administrative-Territorial Units of the Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova", the = true}, } local function moldova_placename_to_key(placename) local elliptical_key = placename .. ", Moldova" if export.moldova_districts_and_autonomous_territorial_units[elliptical_key] then return elliptical_key end if placename:find(" District$") then return placename .. ", Moldova" end return placename .. " District, Moldova" end -- Moldovan districts (raions) and autonomous territorial units export.moldova_group = { key_to_placename = make_key_to_placename(", Moldova$", " District"), placename_to_key = moldova_placename_to_key, default_container = "Moldova", default_placetype = {"district", "raion"}, default_divs = "communes", data = export.moldova_districts_and_autonomous_territorial_units, } export.morocco_regions = { ["Tangier-Tetouan-Al Hoceima, Morocco"] = {}, ["Oriental, Morocco"] = {wp = "%l (%c)"}, ["L'Oriental, Morocco"] = {alias_of = "Oriental, Morocco", display = true}, ["Fez-Meknes, Morocco"] = {}, ["Rabat-Sale-Kenitra, Morocco"] = {wp = "Rabat-Salé-Kénitra"}, ["Rabat-Salé-Kénitra, Morocco"] = {alias_of = "Rabat-Sale-Kenitra, Morocco", display = true}, ["Beni Mellal-Khenifra, Morocco"] = {wp = "Béni Mellal-Khénifra"}, ["Béni Mellal-Khénifra, Morocco"] = {alias_of = "Beni Mellal-Khenifra, Morocco", display = true}, ["Casablanca-Settat, Morocco"] = {}, ["Marrakesh-Safi, Morocco"] = {wp = "Marrakesh–Safi"}, -- WP title has en-dash ["Marrakech-Safi, Morocco"] = {alias_of = "Marrakesh-Safi, Morocco", display = true}, ["Draa-Tafilalet, Morocco"] = {wp = "Drâa-Tafilalet"}, ["Drâa-Tafilalet, Morocco"] = {alias_of = "Draa-Tafilalet, Morocco", display = true}, ["Souss-Massa, Morocco"] = {}, ["Guelmim-Oued Noun, Morocco"] = { keydesc = "+++. '''NOTE:''' This region lies partly within the disputed territory of [[Western Sahara]]" }, ["Laayoune-Sakia El Hamra, Morocco"] = { wp = "Laâyoune-Sakia El Hamra", keydesc = "+++. '''NOTE:''' This region lies almost completely within the disputed territory of [[Western Sahara]]", }, ["Laâyoune-Sakia El Hamra, Morocco"] = {alias_of = "Laayoune-Sakia El Hamra, Morocco", display = true}, ["Dakhla-Oued Ed-Dahab, Morocco"] = { keydesc = "+++. '''NOTE:''' This region lies completely within the disputed territory of [[Western Sahara]]", }, } -- regions of Morocco export.morocco_group = { default_container = "Morocco", default_placetype = "region", data = export.morocco_regions, } export.egypt_governorates = { ["Cairo Governorate, Egypt"] = {}, ["Giza Governorate, Egypt"] = {}, ["Sharqia Governorate, Egypt"] = {}, ["Dakahlia Governorate, Egypt"] = {}, ["Beheira Governorate, Egypt"] = {}, ["Minya Governorate, Egypt"] = {}, ["Qalyubia Governorate, Egypt"] = {}, ["Sohag Governorate, Egypt"] = {}, ["Alexandria Governorate, Egypt"] = {}, ["Gharbia Governorate, Egypt"] = {}, ["Asyut Governorate, Egypt"] = {}, ["Monufia Governorate, Egypt"] = {}, ["Faiyum Governorate, Egypt"] = {}, ["Kafr El Sheikh Governorate, Egypt"] = {}, ["Qena Governorate, Egypt"] = {}, ["Beni Suef Governorate, Egypt"] = {}, ["Damietta Governorate, Egypt"] = {}, ["Aswan Governorate, Egypt"] = {}, ["Ismailia Governorate, Egypt"] = {}, ["Luxor Governorate, Egypt"] = {}, ["Suez Governorate, Egypt"] = {}, ["Port Said Governorate, Egypt"] = {}, ["Matrouh Governorate, Egypt"] = {}, ["North Sinai Governorate, Egypt"] = {}, ["Red Sea Governorate, Egypt"] = {}, ["New Valley Governorate, Egypt"] = {}, ["South Sinai Governorate, Egypt"] = {}, } -- governorates of Egypt export.egypt_group = { key_to_placename = make_key_to_placename(", Egypt$", " Governorate$"), placename_to_key = make_placename_to_key(", Egypt", " Governorate"), default_container = "Egypt", default_placetype = "governorate", data = export.egypt_governorates, } export.netherlands_provinces = { ["Drenthe, Netherlands"] = {}, ["Flevoland, Netherlands"] = {}, ["Friesland, Netherlands"] = {}, ["Gelderland, Netherlands"] = {}, ["Groningen, Netherlands"] = {wp = "%l (province)"}, ["Limburg, Netherlands"] = {wp = "%l (%c)"}, ["North Brabant, Netherlands"] = {}, -- Foreign forms get display-canonicalized. ["Noord-Brabant, Netherlands"] = {alias_of = "North Brabant, Netherlands", display = true}, ["North Holland, Netherlands"] = {}, ["Noord-Holland, Netherlands"] = {alias_of = "North Holland, Netherlands", display = true}, ["Overijssel, Netherlands"] = {}, ["South Holland, Netherlands"] = {}, ["Zuid-Holland, Netherlands"] = {alias_of = "South Holland, Netherlands", display = true}, ["Utrecht, Netherlands"] = {wp = "%l (province)"}, ["Zeeland, Netherlands"] = {}, } -- provinces of the Netherlands export.netherlands_group = { default_container = "Netherlands", default_placetype = "province", default_divs = "municipalities", data = export.netherlands_provinces, } export.new_zealand_regions = { -- North Island regions ["Northland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-NTL, number 1, capital [[Whangārei]] ["Auckland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-AUK, number 2, capital [[Auckland]] ["Waikato, New Zealand"] = {}, -- ISO 3166-2 code NZ-WKO, number 3, capital [[Hamilton, New Zealand|Hamilton]] ["Bay of Plenty, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-BOP, number 4, capital [[Whakatāne]] ["Gisborne, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-GIS, number 5, capital [[Gisborne, New Zealand|Gisborne]] ["Hawke's Bay, New Zealand"] = {}, -- ISO 3166-2 code NZ-HKB, number 6, capital [[Napier, New Zealand|Napier]] ["Taranaki, New Zealand"] = {}, -- ISO 3166-2 code NZ-TKI, number 7, capital [[Stratford, New Zealand|Stratford]] ["Manawatū-Whanganui, New Zealand"] = {}, -- ISO 3166-2 code NZ-MWT, number 8, capital [[Palmerston North]] ["Manawatu-Whanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true}, ["Manawatu-Wanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true}, ["Wellington, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-WGN, number 9, capital [[Wellington]] -- South Island regions ["Tasman, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-TAS, number 10, capital [[Richmond, New Zealand|Richmond]] ["Nelson, New Zealand"] = {placetype = {"region", "city"}, wp = "%l, %c", is_city = true}, -- ISO 3166-2 code NZ-NSN, number 11, capital [[Nelson, New Zealand|Nelson]] ["Marlborough, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-MBH, number 12, capital [[Blenheim, New Zealand|Blenheim]] ["West Coast, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-WTC, number 13, capital [[Greymouth]] ["Canterbury, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-CAN, number 14, capital [[Christchurch]] ["Otago, New Zealand"] = {}, -- ISO 3166-2 code NZ-OTA, number 15, capital [[Dunedin]] ["Southland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-STL, number 16, capital [[Invercargill]] } -- regions of New Zealand export.new_zealand_group = { default_container = "New Zealand", default_placetype = "region", data = export.new_zealand_regions, } export.nigeria_states = { ["Abia State, Nigeria"] = {}, ["Adamawa State, Nigeria"] = {}, ["Akwa Ibom State, Nigeria"] = {}, ["Anambra State, Nigeria"] = {}, ["Bauchi State, Nigeria"] = {}, ["Bayelsa State, Nigeria"] = {}, ["Benue State, Nigeria"] = {}, ["Borno State, Nigeria"] = {}, ["Cross River State, Nigeria"] = {}, ["Delta State, Nigeria"] = {}, ["Ebonyi State, Nigeria"] = {}, ["Edo State, Nigeria"] = {}, ["Ekiti State, Nigeria"] = {}, ["Enugu State, Nigeria"] = {}, ["Federal Capital Territory, Nigeria"] = { -- not a state but allow it to be referenced as one in holonyms placetype = {"federal territory", "territory", "state"}, the = true, wp = "%l (%c)", }, ["Gombe State, Nigeria"] = {}, ["Imo State, Nigeria"] = {}, ["Jigawa State, Nigeria"] = {}, ["Kaduna State, Nigeria"] = {}, ["Kano State, Nigeria"] = {}, ["Katsina State, Nigeria"] = {}, ["Kebbi State, Nigeria"] = {}, ["Kogi State, Nigeria"] = {}, ["Kwara State, Nigeria"] = {}, ["Lagos State, Nigeria"] = {}, ["Nasarawa State, Nigeria"] = {}, ["Niger State, Nigeria"] = {}, ["Ogun State, Nigeria"] = {}, ["Ondo State, Nigeria"] = {}, ["Osun State, Nigeria"] = {}, ["Oyo State, Nigeria"] = {}, ["Plateau State, Nigeria"] = {}, ["Rivers State, Nigeria"] = {}, ["Sokoto State, Nigeria"] = {}, ["Taraba State, Nigeria"] = {}, ["Yobe State, Nigeria"] = {}, ["Zamfara State, Nigeria"] = {}, } -- states of Nigeria export.nigeria_group = { key_to_placename = make_key_to_placename(", Nigeria$", " State$"), placename_to_key = make_placename_to_key(", Nigeria", " State"), default_container = "Nigeria", default_placetype = "state", data = export.nigeria_states, } export.north_korea_provinces = { ["Chagang Province, North Korea"] = {}, ["North Hamgyong Province, North Korea"] = {}, ["South Hamgyong Province, North Korea"] = {}, ["North Hwanghae Province, North Korea"] = {}, ["South Hwanghae Province, North Korea"] = {}, ["Kangwon Province, North Korea"] = {wp = "%l (%c)"}, ["North Pyongan Province, North Korea"] = {}, ["South Pyongan Province, North Korea"] = {}, ["Ryanggang Province, North Korea"] = {}, } -- provinces of North Korea export.north_korea_group = { key_to_placename = make_key_to_placename(", North Korea$", " Province$"), placename_to_key = make_placename_to_key(", North Korea", " Province"), default_container = "North Korea", default_placetype = "province", data = export.north_korea_provinces, } export.norwegian_counties = { ["Oslo, Norway"] = {}, ["Rogaland, Norway"] = {}, ["Møre og Romsdal, Norway"] = {}, ["Nordland, Norway"] = {}, ["Østfold, Norway"] = {}, ["Akershus, Norway"] = {}, ["Buskerud, Norway"] = {}, -- the following two were merged into Innlandet -- ["Hedmark, Norway"] = {}, -- ["Oppland, Norway"] = {}, ["Innlandet, Norway"] = {}, ["Vestfold, Norway"] = {}, ["Telemark, Norway"] = {}, -- the following two were merged into Agder -- ["Aust-Agder, Norway"] = {}, -- ["Vest-Agder, Norway"] = {}, ["Agder, Norway"] = {}, -- the following two were merged into Vestland -- ["Hordaland, Norway"] = {}, -- ["Sogn og Fjordane, Norway"] = {}, ["Vestland, Norway"] = {}, ["Trøndelag, Norway"] = {}, ["Troms, Norway"] = {}, ["Finnmark, Norway"] = {}, } -- counties of Norway export.norway_group = { default_container = "Norway", default_placetype = "county", data = export.norwegian_counties, } export.pakistan_provinces_and_territories = { ["Azad Kashmir, Pakistan"] = { placetype = {"administrative territory", "autonomous territory", "territory"}, }, ["Azad Jammu and Kashmir, Pakistan"] = {alias_of = "Azad Kashmir, Pakistan", display = true}, ["Balochistan, Pakistan"] = {wp = "%l, %c"}, ["Gilgit-Baltistan, Pakistan"] = { placetype = {"administrative territory", "territory"}, }, ["Islamabad Capital Territory, Pakistan"] = { the = true, divs = {}, -- no divisions placetype = {"federal territory", "administrative territory", "territory"}, }, -- Islamabad is an accepted alias for Islamabad Capital Territory given the above placetypes ["Islamabad, Pakistan"] = {alias_of = "Islamabad Capital Territory, Pakistan"}, ["Khyber Pakhtunkhwa, Pakistan"] = {}, ["Punjab, Pakistan"] = {wp = "%l, %c"}, ["Sindh, Pakistan"] = {}, } -- provinces and territories of Pakistan export.pakistan_group = { default_container = "Pakistan", default_placetype = "province", default_divs = "divisions", data = export.pakistan_provinces_and_territories, } export.philippines_provinces = { ["Abra, Philippines"] = {wp = "%l (province)"}, ["Agusan del Norte, Philippines"] = {}, ["Agusan del Sur, Philippines"] = {}, ["Aklan, Philippines"] = {}, ["Albay, Philippines"] = {}, ["Antique, Philippines"] = {wp = "%l (province)"}, ["Apayao, Philippines"] = {}, ["Aurora, Philippines"] = {wp = "%l (province)"}, ["Basilan, Philippines"] = {}, ["Bataan, Philippines"] = {}, ["Batanes, Philippines"] = {}, ["Batangas, Philippines"] = {}, ["Benguet, Philippines"] = {}, ["Biliran, Philippines"] = {}, ["Bohol, Philippines"] = {}, ["Bukidnon, Philippines"] = {}, ["Bulacan, Philippines"] = {}, ["Cagayan, Philippines"] = {}, ["Camarines Norte, Philippines"] = {}, ["Camarines Sur, Philippines"] = {}, ["Camiguin, Philippines"] = {}, ["Capiz, Philippines"] = {}, ["Catanduanes, Philippines"] = {}, ["Cavite, Philippines"] = {}, ["Cebu, Philippines"] = {}, ["Cotabato, Philippines"] = {}, ["Davao de Oro, Philippines"] = {}, ["Davao del Norte, Philippines"] = {}, ["Davao del Sur, Philippines"] = {}, ["Davao Occidental, Philippines"] = {}, ["Davao Oriental, Philippines"] = {}, ["Dinagat Islands, Philippines"] = {the = true}, ["Eastern Samar, Philippines"] = {}, ["Guimaras, Philippines"] = {}, ["Ifugao, Philippines"] = {}, ["Ilocos Norte, Philippines"] = {}, ["Ilocos Sur, Philippines"] = {}, ["Iloilo, Philippines"] = {}, ["Isabela, Philippines"] = {wp = "%l (province)"}, ["Kalinga, Philippines"] = {wp = "%l (province)"}, ["La Union, Philippines"] = {}, ["Laguna, Philippines"] = {wp = "%l (province)"}, ["Lanao del Norte, Philippines"] = {}, ["Lanao del Sur, Philippines"] = {}, ["Leyte, Philippines"] = {wp = "%l (province)"}, ["Maguindanao del Norte, Philippines"] = {}, ["Maguindanao del Sur, Philippines"] = {}, ["Marinduque, Philippines"] = {}, ["Masbate, Philippines"] = {}, ["Misamis Occidental, Philippines"] = {}, ["Misamis Oriental, Philippines"] = {}, ["Mountain Province, Philippines"] = {}, ["Negros Occidental, Philippines"] = {}, ["Negros Oriental, Philippines"] = {}, ["Northern Samar, Philippines"] = {}, ["Nueva Ecija, Philippines"] = {}, ["Nueva Vizcaya, Philippines"] = {}, ["Occidental Mindoro, Philippines"] = {}, ["Oriental Mindoro, Philippines"] = {}, ["Palawan, Philippines"] = {}, ["Pampanga, Philippines"] = {}, ["Pangasinan, Philippines"] = {}, ["Quezon, Philippines"] = {}, ["Quirino, Philippines"] = {}, ["Rizal, Philippines"] = {wp = "%l (province)"}, ["Romblon, Philippines"] = {}, ["Samar, Philippines"] = {wp = "%l (province)"}, ["Sarangani, Philippines"] = {}, ["Siquijor, Philippines"] = {}, ["Sorsogon, Philippines"] = {}, ["South Cotabato, Philippines"] = {}, ["Southern Leyte, Philippines"] = {}, ["Sultan Kudarat, Philippines"] = {}, ["Sulu, Philippines"] = {}, ["Surigao del Norte, Philippines"] = {}, ["Surigao del Sur, Philippines"] = {}, ["Tarlac, Philippines"] = {}, ["Tawi-Tawi, Philippines"] = {}, ["Zambales, Philippines"] = {}, ["Zamboanga del Norte, Philippines"] = {}, ["Zamboanga del Sur, Philippines"] = {}, ["Zamboanga Sibugay, Philippines"] = {}, -- not a province but treated as one; allow it to be referred to as a province in holonyms ["Metro Manila, Philippines"] = {placetype = {"region", "province"}}, } -- provinces of the Philippines export.philippines_group = { default_container = "Philippines", default_placetype = "province", default_divs = {"municipalities", "barangays"}, data = export.philippines_provinces, } export.poland_voivodeships = { ["Lower Silesian Voivodeship, Poland"] = {}, -- abbr DS, code 02, capital Wrocław ["Kuyavian-Pomeranian Voivodeship, Poland"] = {}, -- abbr KP, code 04, capital Bydgoszcz (seat of voivode), Toruń (seat of sejmik and marshal) ["Lublin Voivodeship, Poland"] = {}, -- abbr LU, code 06, capital Lublin ["Lubusz Voivodeship, Poland"] = {}, -- abbr LB, code 08, capital Gorzów Wielkopolski (seat of voivode), Zielona Góra (seat of sejmik and marshal) ["Lodz Voivodeship, Poland"] = {wp = "Łódź Voivodeship"}, -- abbr LD, code 10, capital Łódź ["Łódź Voivodeship, Poland"] = {alias_of = "Lodz Voivodeship, Poland", display = true, display_as_full = true}, ["Lesser Poland Voivodeship, Poland"] = {}, -- abbr MA, code 12, capital Kraków ["Masovian Voivodeship, Poland"] = {}, -- abbr MZ, code 14, capital Warsaw ["Opole Voivodeship, Poland"] = {}, -- abbr OP, code 16, capital Opole ["Subcarpathian Voivodeship, Poland"] = {}, -- abbr PK, code 18, capital Rzeszów ["Podlaskie Voivodeship, Poland"] = {}, -- abbr PD, code 20, capital Białystok ["Pomeranian Voivodeship, Poland"] = {}, -- abbr PM, code 22, capital Gdańsk ["Silesian Voivodeship, Poland"] = {}, -- abbr SL, code 24, capital Katowice ["Holy Cross Voivodeship, Poland"] = {wp = "Świętokrzyskie Voivodeship"}, -- abbr SK, code 26, capital Kielce ["Świętokrzyskie Voivodeship, Poland"] = {alias_of = "Holy Cross Voivodeship, Poland", display = true, display_as_full = true}, ["Warmian-Masurian Voivodeship, Poland"] = {}, -- abbr WN, code 28, capital Olsztyn ["Greater Poland Voivodeship, Poland"] = {}, -- abbr WP, code 30, capital Poznań ["West Pomeranian Voivodeship, Poland"] = {}, -- abbr ZP, code 32, capital Szczecin } -- voivodeships of Poland export.poland_group = { key_to_placename = make_key_to_placename(", Poland$", " Voivodeship$"), placename_to_key = make_placename_to_key(", Poland", " Voivodeship"), default_container = "Poland", default_placetype = "voivodeship", default_divs = { -- "counties", -- not enough of them currently {type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}}, }, data = export.poland_voivodeships, } export.portugal_districts_and_autonomous_regions = { ["Azores, Portugal"] = {the = true, placetype = {"autonomous region", "region"}}, ["Aveiro District, Portugal"] = {}, ["Beja District, Portugal"] = {}, ["Braga District, Portugal"] = {}, ["Bragança District, Portugal"] = {}, ["Castelo Branco District, Portugal"] = {}, ["Coimbra District, Portugal"] = {}, ["Évora District, Portugal"] = {}, ["Faro District, Portugal"] = {}, ["Guarda District, Portugal"] = {}, ["Leiria District, Portugal"] = {}, ["Lisbon District, Portugal"] = {}, ["Lisboa District, Portugal"] = {alias_of = "Lisbon District, Portugal", display = true}, ["Madeira, Portugal"] = {placetype = {"autonomous region", "region"}}, ["Portalegre District, Portugal"] = {}, ["Porto District, Portugal"] = {}, ["Santarém District, Portugal"] = {}, ["Setúbal District, Portugal"] = {}, ["Viana do Castelo District, Portugal"] = {}, ["Vila Real District, Portugal"] = {}, ["Viseu District, Portugal"] = {}, } local function portugal_placename_to_key(placename) if placename == "Azores" or placename == "Madeira" then return placename .. ", Portugal" end if placename:find(" District$") then return placename .. ", Portugal" end return placename .. " District, Portugal" end -- districts and autonomous regions of Portugal export.portugal_group = { key_to_placename = make_key_to_placename(", Portugal$", " District$"), placename_to_key = portugal_placename_to_key, default_container = "Portugal", default_placetype = "district", default_divs = "municipalities", data = export.portugal_districts_and_autonomous_regions, } export.romania_counties = { ["Alba County, Romania"] = {}, ["Arad County, Romania"] = {}, ["Argeș County, Romania"] = {}, ["Bacău County, Romania"] = {}, ["Bihor County, Romania"] = {}, ["Bistrița-Năsăud County, Romania"] = {}, ["Botoșani County, Romania"] = {}, ["Brașov County, Romania"] = {}, ["Brăila County, Romania"] = {}, -- Bucharest: not in a county ["Buzău County, Romania"] = {}, ["Caraș-Severin County, Romania"] = {}, ["Cluj County, Romania"] = {}, ["Constanța County, Romania"] = {}, ["Covasna County, Romania"] = {}, ["Călărași County, Romania"] = {}, ["Dolj County, Romania"] = {}, ["Dâmbovița County, Romania"] = {}, ["Galați County, Romania"] = {}, ["Giurgiu County, Romania"] = {}, ["Gorj County, Romania"] = {}, ["Harghita County, Romania"] = {}, ["Hunedoara County, Romania"] = {}, ["Ialomița County, Romania"] = {}, ["Iași County, Romania"] = {}, ["Ilfov County, Romania"] = {}, ["Maramureș County, Romania"] = {}, ["Mehedinți County, Romania"] = {}, ["Mureș County, Romania"] = {}, ["Neamț County, Romania"] = {}, ["Olt County, Romania"] = {}, ["Prahova County, Romania"] = {}, ["Satu Mare County, Romania"] = {}, ["Sibiu County, Romania"] = {}, ["Suceava County, Romania"] = {}, ["Sălaj County, Romania"] = {}, ["Teleorman County, Romania"] = {}, ["Timiș County, Romania"] = {}, ["Tulcea County, Romania"] = {}, ["Vaslui County, Romania"] = {}, ["Vrancea County, Romania"] = {}, ["Vâlcea County, Romania"] = {}, } -- counties of Romania export.romania_group = { key_to_placename = make_key_to_placename(", Romania$", " County$"), placename_to_key = make_placename_to_key(", Romania", " County"), default_container = "Romania", default_placetype = "county", default_divs = "communes", data = export.romania_counties, } local function make_russia_federal_subject_spec(spectype, use_the, wp) return { placetype = spectype, the = not not use_the, bare_category_parent_type = {"federal subjects", spectype .. "s"}, wp = wp, } end local russia_autonomous_okrug_no_the = {placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}} local russia_autonomous_okrug_the = {placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}, the = true} local russia_krai = make_russia_federal_subject_spec("krai") local russia_oblast = make_russia_federal_subject_spec("oblast") local russia_republic_the = make_russia_federal_subject_spec("republic", "use the") local russia_republic_no_the = make_russia_federal_subject_spec("republic") export.russia_federal_subjects = { -- autonomous oblasts ["Jewish Autonomous Oblast, Russia"] = {the = true, placetype = {"autonomous oblast", "oblast"}, bare_category_parent_type = {"federal subjects", "autonomous oblasts"}}, -- autonomous okrugs ["Chukotka Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Chukotka, Russia"] = {alias_of = "Chukotka Autonomous Okrug, Russia"}, ["Khanty-Mansi Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Khanty-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Khantia-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Yugra, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Nenetsia, Russia"] = {alias_of = "Nenets Autonomous Okrug, Russia"}, ["Yamalo-Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Yamalia, Russia"] = {alias_of = "Yamalo-Nenets Autonomous Okrug, Russia"}, -- krais ["Altai Krai, Russia"] = russia_krai, ["Kamchatka Krai, Russia"] = russia_krai, ["Khabarovsk Krai, Russia"] = russia_krai, ["Krasnodar Krai, Russia"] = russia_krai, ["Krasnoyarsk Krai, Russia"] = russia_krai, ["Perm Krai, Russia"] = russia_krai, ["Primorsky Krai, Russia"] = russia_krai, ["Stavropol Krai, Russia"] = russia_krai, ["Zabaykalsky Krai, Russia"] = russia_krai, -- oblasts ["Amur Oblast, Russia"] = russia_oblast, ["Arkhangelsk Oblast, Russia"] = russia_oblast, ["Astrakhan Oblast, Russia"] = russia_oblast, ["Belgorod Oblast, Russia"] = russia_oblast, ["Bryansk Oblast, Russia"] = russia_oblast, ["Chelyabinsk Oblast, Russia"] = russia_oblast, ["Irkutsk Oblast, Russia"] = russia_oblast, ["Ivanovo Oblast, Russia"] = russia_oblast, ["Kaliningrad Oblast, Russia"] = russia_oblast, ["Kaluga Oblast, Russia"] = russia_oblast, ["Kemerovo Oblast, Russia"] = russia_oblast, ["Kirov Oblast, Russia"] = russia_oblast, ["Kostroma Oblast, Russia"] = russia_oblast, ["Kurgan Oblast, Russia"] = russia_oblast, ["Kursk Oblast, Russia"] = russia_oblast, ["Leningrad Oblast, Russia"] = russia_oblast, ["Lipetsk Oblast, Russia"] = russia_oblast, ["Magadan Oblast, Russia"] = russia_oblast, ["Moscow Oblast, Russia"] = russia_oblast, ["Murmansk Oblast, Russia"] = russia_oblast, ["Nizhny Novgorod Oblast, Russia"] = russia_oblast, ["Novgorod Oblast, Russia"] = russia_oblast, ["Novosibirsk Oblast, Russia"] = russia_oblast, ["Omsk Oblast, Russia"] = russia_oblast, ["Orenburg Oblast, Russia"] = russia_oblast, ["Oryol Oblast, Russia"] = russia_oblast, ["Penza Oblast, Russia"] = russia_oblast, ["Pskov Oblast, Russia"] = russia_oblast, ["Rostov Oblast, Russia"] = russia_oblast, ["Ryazan Oblast, Russia"] = russia_oblast, ["Sakhalin Oblast, Russia"] = russia_oblast, ["Samara Oblast, Russia"] = russia_oblast, ["Saratov Oblast, Russia"] = russia_oblast, ["Smolensk Oblast, Russia"] = russia_oblast, ["Sverdlovsk Oblast, Russia"] = russia_oblast, ["Tambov Oblast, Russia"] = russia_oblast, ["Tomsk Oblast, Russia"] = russia_oblast, ["Tula Oblast, Russia"] = russia_oblast, ["Tver Oblast, Russia"] = russia_oblast, ["Tyumen Oblast, Russia"] = russia_oblast, ["Ulyanovsk Oblast, Russia"] = russia_oblast, ["Vladimir Oblast, Russia"] = russia_oblast, ["Volgograd Oblast, Russia"] = russia_oblast, ["Vologda Oblast, Russia"] = russia_oblast, ["Voronezh Oblast, Russia"] = russia_oblast, ["Yaroslavl Oblast, Russia"] = russia_oblast, -- republics -- -- We only need to include cases that aren't just shortened versions of the full federal subject name (i.e. where -- words like "Republic" and "Oblast" are omitted but the name is not otherwise modified; these are handled by -- key_to_placename). Non-display-canonicalizing aliases are generally due to differences in the presence or absence -- of "the". ["Adygea, Russia"] = russia_republic_no_the, ["Republic of Adygea, Russia"] = {alias_of = "Adygea, Russia", the = true}, ["Bashkortostan, Russia"] = russia_republic_no_the, ["Republic of Bashkortostan, Russia"] = {alias_of = "Bashkortostan, Russia", the = true}, ["Bashkiria, Russia"] = {alias_of = "Bashkortostan, Russia"}, ["Buryatia, Russia"] = russia_republic_no_the, ["Republic of Buryatia, Russia"] = {alias_of = "Buryatia, Russia", the = true}, ["Dagestan, Russia"] = russia_republic_no_the, ["Republic of Dagestan, Russia"] = {alias_of = "Dagestan, Russia", the = true}, ["Ingushetia, Russia"] = russia_republic_no_the, ["Republic of Ingushetia, Russia"] = {alias_of = "Ingushetia, Russia", the = true}, ["Kalmykia, Russia"] = russia_republic_no_the, ["Republic of Kalmykia, Russia"] = {alias_of = "Kalmykia, Russia", the = true}, ["Karelia, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Karelia"), ["Republic of Karelia, Russia"] = {alias_of = "Karelia, Russia", the = true}, ["Khakassia, Russia"] = russia_republic_no_the, ["Republic of Khakassia, Russia"] = {alias_of = "Khakassia, Russia", the = true}, ["Mordovia, Russia"] = russia_republic_no_the, ["Republic of Mordovia, Russia"] = {alias_of = "Mordovia, Russia", the = true}, ["North Ossetia-Alania, Russia"] = make_russia_federal_subject_spec("republic", nil, "North Ossetia–Alania"), -- with en-dash ["Republic of North Ossetia-Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia", the = true}, ["North Ossetia, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true}, ["Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true}, ["Tatarstan, Russia"] = russia_republic_no_the, ["Republic of Tatarstan, Russia"] = {alias_of = "Tatarstan, Russia", the = true}, ["Altai Republic, Russia"] = russia_republic_the, ["Chechnya, Russia"] = russia_republic_no_the, ["Chechen Republic, Russia"] = {alias_of = "Chechnya, Russia", the = true}, ["Chuvashia, Russia"] = russia_republic_no_the, ["Chuvash Republic, Russia"] = {alias_of = "Chuvashia, Russia", the = true}, ["Kabardino-Balkaria, Russia"] = russia_republic_no_the, ["Kabardino-Balkariya, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = true}, ["Kabardino-Balkarian Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", the = true}, ["Kabardino-Balkar Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = "Kabardino-Balkarian Republic, Russia", the = true}, ["Karachay-Cherkessia, Russia"] = russia_republic_no_the, ["Karachay-Cherkess Republic, Russia"] = {alias_of = "Karachay-Cherkessia, Russia"}, ["Komi, Russia"] = make_russia_federal_subject_spec("republic", nil, "Komi Republic"), ["Komi Republic, Russia"] = {alias_of = "Komi, Russia", the = true}, ["Mari El, Russia"] = russia_republic_no_the, ["Mari El Republic, Russia"] = {alias_of = "Mari El, Russia", the = true}, ["Sakha, Russia"] = make_russia_federal_subject_spec("republic", nil, "Sakha Republic"), ["Sakha Republic, Russia"] = {alias_of = "Sakha, Russia", the = true}, ["Yakutia, Russia"] = {alias_of = "Sakha, Russia"}, ["Yakutiya, Russia"] = {alias_of = "Sakha, Russia", display = "Yakutia, Russia"}, ["Republic of Yakutia (Sakha), Russia"] = {alias_of = "Sakha, Russia", display = "Sakha Republic, Russia", the = true}, ["Tuva, Russia"] = russia_republic_no_the, ["Tyva, Russia"] = {alias_of = "Tuva, Russia", display = true}, ["Tuva Republic, Russia"] = {alias_of = "Tuva, Russia", the = true}, ["Tyva Republic, Russia"] = {alias_of = "Tuva, Russia", display= "Tuva Republic, Russia", the = true}, ["Udmurtia, Russia"] = russia_republic_no_the, ["Udmurt Republic, Russia"] = {alias_of = "Udmurtia, Russia", the = true}, -- Not included due to being unrecognized and only partly controlled: -- ["Crimea, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Crimea (Russia)") -- ["Donetsk People's Republic, Russia"] = russia_republic_the, -- ["Luhansk People's Republic, Russia"] = russia_republic_the, -- ["Zaporozhye Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Zaporizhzhia Oblast"), -- ["Kherson Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Kherson Oblast"), -- There are also federal cities (not included because they're cities): -- Moscow, Saint Petersburg; Sevastopol (unrecognized; same status as for "Crimea, Russia" above) } local function russia_key_to_placename(key) key = key:gsub(",.*", "") local full_placename = key if key == "Jewish Autonomous Oblast" then return full_placename, full_placename end local elliptical_placename for _, suffix in ipairs({"Krai", "Oblast"}) do elliptical_placename = key:match("^(.*) " .. suffix .. "$") if elliptical_placename then return full_placename, elliptical_placename end end return full_placename, full_placename end local function russia_placename_to_key(placename) local key = placename .. ", Russia" if export.russia_federal_subjects[key] then return key end -- We allow the user to say e.g. "obl/Samara" in place of "obl/Samara Oblast". for _, suffix in ipairs({"Krai", "Oblast"}) do local suffixed_key = placename .. " " .. suffix .. ", Russia" if export.russia_federal_subjects[suffixed_key] then return suffixed_key end end return placename .. ", Russia" end local function construct_russia_federal_subject_keydesc(group, key, spec) local placename = key:gsub(",.*", "") local linked_placename = export.construct_linked_placename(spec, placename) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if placetype == "oblast" then -- Hack: Oblasts generally don't have entries under "Foo Oblast" -- but just under "Foo", so fix the linked key appropriately; -- doesn't apply to the Jewish Autonomous Oblast linked_placename = linked_placename:gsub(" Oblast%]%]", "%]%] Oblast") end return linked_placename .. ", a [[federal subject]] ([[" .. placetype .. "]]) of [[Russia]]" end -- federal subjects of Russia export.russia_group = { key_to_placename = russia_key_to_placename, placename_to_key = russia_placename_to_key, default_container = "Russia", default_keydesc = construct_russia_federal_subject_keydesc, default_overriding_bare_label_parents = {"federal subjects of Russia", "+++"}, data = export.russia_federal_subjects, } export.saudi_arabia_provinces = { ["Riyadh Province, Saudi Arabia"] = {}, ["Mecca Province, Saudi Arabia"] = {}, -- Name is too generic to assume it's in Saudi Arabia if not specified. ["Eastern Province, Saudi Arabia"] = {no_auto_augment_container = true, wp = "%l, %c"}, ["Medina Province, Saudi Arabia"] = {wp = "%l (%c)"}, ["Aseer Province, Saudi Arabia"] = {wp = "Asir"}, ["Asir Province, Saudi Arabia"] = {alias_of = "Aseer Province, Saudi Arabia", display = true}, ["Jazan Province, Saudi Arabia"] = {}, ["Qassim Province, Saudi Arabia"] = {wp = "Al-Qassim Province"}, ["Al-Qassim Province, Saudi Arabia"] = {alias_of = "Qassim Province, Saudi Arabia", display = true}, ["Tabuk Province, Saudi Arabia"] = {}, ["Hail Province, Saudi Arabia"] = {wp = "Ḥa'il Province"}, ["Ha'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true}, ["Ḥa'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true}, ["Al-Jouf Province, Saudi Arabia"] = {wp = "Al-Jawf Province"}, ["Al-Jawf Province, Saudi Arabia"] = {alias_of = "Al-Jouf Province, Saudi Arabia", display = true}, ["Najran Province, Saudi Arabia"] = {}, ["Northern Borders Province, Saudi Arabia"] = {}, ["Al-Bahah Province, Saudi Arabia"] = {}, } -- provinces of Saudi Arabia export.saudi_arabia_group = { key_to_placename = make_key_to_placename(", Saudi Arabia$", " Province$"), placename_to_key = make_placename_to_key(", Saudi Arabia", " Province"), default_container = "Saudi Arabia", default_placetype = "province", data = export.saudi_arabia_provinces, } export.south_africa_provinces = { ["Eastern Cape, South Africa"] = {the = true}, ["Free State, South Africa"] = {the = true, wp = "%l (province)"}, ["Gauteng, South Africa"] = {}, ["KwaZulu-Natal, South Africa"] = {}, ["Limpopo, South Africa"] = {}, ["Mpumalanga, South Africa"] = {}, -- per Wikipedia and other sources, `North West` doesn't normally have `the` before it ["North West, South Africa"] = {wp = "%l (South African province)"}, ["Northern Cape, South Africa"] = {the = true}, ["Western Cape, South Africa"] = {the = true}, } -- provinces of South Africa export.south_africa_group = { default_container = "South Africa", default_placetype = "province", default_divs = "municipalities", data = export.south_africa_provinces, } export.south_korea_provinces = { ["North Chungcheong Province, South Korea"] = {}, ["South Chungcheong Province, South Korea"] = {}, ["Gangwon Province, South Korea"] = {wp = "%l, %c"}, ["Gyeonggi Province, South Korea"] = {}, ["North Gyeongsang Province, South Korea"] = {}, ["South Gyeongsang Province, South Korea"] = {}, ["North Jeolla Province, South Korea"] = {}, ["South Jeolla Province, South Korea"] = {}, ["Jeju Province, South Korea"] = {}, } -- provinces of South Korea export.south_korea_group = { key_to_placename = make_key_to_placename(", South Korea$", " Province$"), placename_to_key = make_placename_to_key(", South Korea", " Province"), default_container = "South Korea", default_placetype = "province", data = export.south_korea_provinces, } export.spain_autonomous_communities = { ["Andalusia, Spain"] = {}, ["Aragon, Spain"] = {}, ["Asturias, Spain"] = {}, ["Balearic Islands, Spain"] = {the = true}, ["Basque Country, Spain"] = {the = true, wp = "%l (autonomous community)"}, ["Canary Islands, Spain"] = {the = true}, ["Cantabria, Spain"] = {}, ["Castile and León, Spain"] = {}, ["Castilla-La Mancha, Spain"] = {wp = "Castilla–La Mancha"}, -- with en-dash ["Catalonia, Spain"] = {}, ["Community of Madrid, Spain"] = {the = true}, ["Extremadura, Spain"] = {}, ["Galicia, Spain"] = {wp = "%l (Spain)"}, ["La Rioja, Spain"] = {}, ["Murcia, Spain"] = {wp = "Region of %l"}, ["Navarre, Spain"] = {}, ["Valencia, Spain"] = {wp = "Valencian Community"}, ["Valencian Community, Spain"] = {alias_of = "Valencia, Spain", the = true}, } -- autonomous communities of Spain export.spain_group = { default_container = "Spain", default_placetype = "autonomous community", default_divs = {"municipalities", "comarcas"}, data = export.spain_autonomous_communities, } export.taiwan_counties = { ["Changhua County, Taiwan"] = {}, ["Chiayi County, Taiwan"] = {}, ["Hsinchu County, Taiwan"] = {}, ["Hualien County, Taiwan"] = {}, ["Kinmen County, Taiwan"] = {wp = "Kinmen"}, ["Lienchiang County, Taiwan"] = {wp = "Matsu Islands"}, ["Miaoli County, Taiwan"] = {}, ["Nantou County, Taiwan"] = {}, ["Penghu County, Taiwan"] = {wp = "Penghu"}, ["Pingtung County, Taiwan"] = {}, ["Taitung County, Taiwan"] = {}, ["Yilan County, Taiwan"] = {wp = "%l, %c"}, ["Yunlin County, Taiwan"] = {}, } -- counties of Taiwan export.taiwan_group = { key_to_placename = make_key_to_placename(", Taiwan$", " County$"), placename_to_key = make_placename_to_key(", Taiwan", " County"), default_container = "Taiwan", default_placetype = "county", default_divs = {"districts", "townships"}, data = export.taiwan_counties, } export.thailand_provinces = { -- Bangkok (special administrative area) ["Amnat Charoen Province, Thailand"] = {}, ["Ang Thong Province, Thailand"] = {}, ["Bueng Kan Province, Thailand"] = {}, ["Buriram Province, Thailand"] = {}, ["Chachoengsao Province, Thailand"] = {}, ["Chai Nat Province, Thailand"] = {}, ["Chaiyaphum Province, Thailand"] = {}, ["Chanthaburi Province, Thailand"] = {}, ["Chiang Mai Province, Thailand"] = {}, ["Chiang Rai Province, Thailand"] = {}, ["Chonburi Province, Thailand"] = {}, ["Chumphon Province, Thailand"] = {}, ["Kalasin Province, Thailand"] = {}, ["Kamphaeng Phet Province, Thailand"] = {}, ["Kanchanaburi Province, Thailand"] = {}, ["Khon Kaen Province, Thailand"] = {}, ["Krabi Province, Thailand"] = {}, ["Lampang Province, Thailand"] = {}, ["Lamphun Province, Thailand"] = {}, ["Loei Province, Thailand"] = {}, ["Lopburi Province, Thailand"] = {}, ["Mae Hong Son Province, Thailand"] = {}, ["Maha Sarakham Province, Thailand"] = {}, ["Mukdahan Province, Thailand"] = {}, ["Nakhon Nayok Province, Thailand"] = {}, ["Nakhon Pathom Province, Thailand"] = {}, ["Nakhon Phanom Province, Thailand"] = {}, ["Nakhon Ratchasima Province, Thailand"] = {}, ["Nakhon Sawon Province, Thailand"] = {}, ["Nakhon Si Thammarat Province, Thailand"] = {}, ["Nan Province, Thailand"] = {}, ["Narathiwat Province, Thailand"] = {}, ["Nong Bua Lamphu Province, Thailand"] = {}, ["Nong Khai Province, Thailand"] = {}, ["Nonthaburi Province, Thailand"] = {}, ["Pathum Thani Province, Thailand"] = {}, ["Pattani Province, Thailand"] = {}, ["Phang Nga Province, Thailand"] = {}, ["Phatthalung Province, Thailand"] = {}, ["Phayao Province, Thailand"] = {}, ["Phetchabun Province, Thailand"] = {}, ["Phetchaburi Province, Thailand"] = {}, ["Phichit Province, Thailand"] = {}, ["Phitsanulok Province, Thailand"] = {}, ["Phra Nakhon Si Ayutthaya Province, Thailand"] = {}, ["Phrae Province, Thailand"] = {}, ["Phuket Province, Thailand"] = {}, ["Prachinburi Province, Thailand"] = {}, ["Prachuap Khiri Khan Province, Thailand"] = {}, ["Ranong Province, Thailand"] = {}, ["Ratchaburi Province, Thailand"] = {}, ["Rayong Province, Thailand"] = {}, ["Roi Et Province, Thailand"] = {}, ["Sa Kaeo Province, Thailand"] = {}, ["Sakon Nakhon Province, Thailand"] = {}, ["Samut Prakan Province, Thailand"] = {}, ["Samut Sakhon Province, Thailand"] = {}, ["Samut Songkhram Province, Thailand"] = {}, ["Saraburi Province, Thailand"] = {}, ["Satun Province, Thailand"] = {}, ["Sing Buri Province, Thailand"] = {}, ["Sisaket Province, Thailand"] = {}, ["Songkhla Province, Thailand"] = {}, ["Sukhothai Province, Thailand"] = {}, ["Suphan Buri Province, Thailand"] = {}, ["Surat Thani Province, Thailand"] = {}, ["Surin Province, Thailand"] = {}, ["Tak Province, Thailand"] = {}, ["Trang Province, Thailand"] = {}, ["Trat Province, Thailand"] = {}, ["Ubon Ratchathani Province, Thailand"] = {}, ["Udon Thani Province, Thailand"] = {}, ["Uthai Thani Province, Thailand"] = {}, ["Uttaradit Province, Thailand"] = {}, ["Yala Province, Thailand"] = {}, ["Yasothon Province, Thailand"] = {}, } -- provinces of Thailand export.thailand_group = { key_to_placename = make_key_to_placename(", Thailand$", " Province$"), placename_to_key = make_placename_to_key(", Thailand", " Province"), default_container = "Thailand", default_placetype = "province", default_divs = "districts", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.thailand_provinces, } export.turkey_provinces = { ["Adana Province, Turkey"] = {}, -- code 01 ["Adıyaman Province, Turkey"] = {}, -- code 02 ["Afyonkarahisar Province, Turkey"] = {}, -- code 03 ["Ağrı Province, Turkey"] = {}, -- code 04 ["Amasya Province, Turkey"] = {}, -- code 05 ["Ankara Province, Turkey"] = {}, -- code 06 ["Antalya Province, Turkey"] = {}, -- code 07 ["Artvin Province, Turkey"] = {}, -- code 08 ["Aydın Province, Turkey"] = {}, -- code 09 ["Balıkesir Province, Turkey"] = {}, -- code 10 ["Bilecik Province, Turkey"] = {}, -- code 11 ["Bingöl Province, Turkey"] = {}, -- code 12 ["Bitlis Province, Turkey"] = {}, -- code 13 ["Bolu Province, Turkey"] = {}, -- code 14 ["Burdur Province, Turkey"] = {}, -- code 15 ["Bursa Province, Turkey"] = {}, -- code 16 ["Çanakkale Province, Turkey"] = {}, -- code 17 ["Çankırı Province, Turkey"] = {}, -- code 18 ["Çorum Province, Turkey"] = {}, -- code 19 ["Denizli Province, Turkey"] = {}, -- code 20 ["Diyarbakır Province, Turkey"] = {}, -- code 21 ["Edirne Province, Turkey"] = {}, -- code 22 ["Elazığ Province, Turkey"] = {}, -- code 23 ["Elâzığ Province, Turkey"] = {alias_of = "Elazığ Province, Turkey", display = true}, ["Erzincan Province, Turkey"] = {}, -- code 24 ["Erzurum Province, Turkey"] = {}, -- code 25 ["Eskişehir Province, Turkey"] = {}, -- code 26 ["Gaziantep Province, Turkey"] = {}, -- code 27 ["Giresun Province, Turkey"] = {}, -- code 28 ["Gümüşhane Province, Turkey"] = {}, -- code 29 ["Hakkâri Province, Turkey"] = {}, -- code 30 ["Hakkari Province, Turkey"] = {alias_of = "Hakkâri Province, Turkey", display = true}, ["Hatay Province, Turkey"] = {}, -- code 31 ["Isparta Province, Turkey"] = {}, -- code 32 ["Mersin Province, Turkey"] = {}, -- code 33 -- ["Istanbul Province, Turkey"] = {}, -- code 34; this is coextensive with the city itself ["İzmir Province, Turkey"] = {}, -- code 35 ["Izmir Province, Turkey"] = {alias_of = "İzmir Province, Turkey", display = true}, ["Kars Province, Turkey"] = {}, -- code 36 ["Kastamonu Province, Turkey"] = {}, -- code 37 ["Kayseri Province, Turkey"] = {}, -- code 38 ["Kırklareli Province, Turkey"] = {}, -- code 39 ["Kırşehir Province, Turkey"] = {}, -- code 40 ["Kocaeli Province, Turkey"] = {}, -- code 41 ["Konya Province, Turkey"] = {}, -- code 42 ["Kütahya Province, Turkey"] = {}, -- code 43 ["Malatya Province, Turkey"] = {}, -- code 44 ["Manisa Province, Turkey"] = {}, -- code 45 ["Kahramanmaraş Province, Turkey"] = {}, -- code 46 ["Mardin Province, Turkey"] = {}, -- code 47 ["Muğla Province, Turkey"] = {}, -- code 48 ["Muş Province, Turkey"] = {}, -- code 49 ["Nevşehir Province, Turkey"] = {}, -- code 50 ["Niğde Province, Turkey"] = {}, -- code 51 ["Ordu Province, Turkey"] = {}, -- code 52 ["Rize Province, Turkey"] = {}, -- code 53 ["Sakarya Province, Turkey"] = {}, -- code 54 ["Samsun Province, Turkey"] = {}, -- code 55 ["Siirt Province, Turkey"] = {}, -- code 56 ["Sinop Province, Turkey"] = {}, -- code 57 ["Sivas Province, Turkey"] = {}, -- code 58 ["Tekirdağ Province, Turkey"] = {}, -- code 59 ["Tokat Province, Turkey"] = {}, -- code 60 ["Trabzon Province, Turkey"] = {}, -- code 61 ["Tunceli Province, Turkey"] = {}, -- code 62 ["Şanlıurfa Province, Turkey"] = {}, -- code 63 ["Uşak Province, Turkey"] = {}, -- code 64 ["Van Province, Turkey"] = {}, -- code 65 ["Yozgat Province, Turkey"] = {}, -- code 66 ["Zonguldak Province, Turkey"] = {}, -- code 67 ["Aksaray Province, Turkey"] = {}, -- code 68 ["Bayburt Province, Turkey"] = {}, -- code 69 ["Karaman Province, Turkey"] = {}, -- code 70 ["Kırıkkale Province, Turkey"] = {}, -- code 71 ["Batman Province, Turkey"] = {}, -- code 72 ["Şırnak Province, Turkey"] = {}, -- code 73 ["Bartın Province, Turkey"] = {}, -- code 74 ["Ardahan Province, Turkey"] = {}, -- code 75 ["Iğdır Province, Turkey"] = {}, -- code 76 ["Yalova Province, Turkey"] = {}, -- code 77 ["Karabük Province, Turkey"] = {}, -- code 78 ["Kilis Province, Turkey"] = {}, -- code 79 ["Osmaniye Province, Turkey"] = {}, -- code 80 ["Düzce Province, Turkey"] = {}, -- code 81 } -- provinces of Turkey export.turkey_group = { key_to_placename = make_key_to_placename(", Turkey$", " Province$"), placename_to_key = make_placename_to_key(", Turkey", " Province"), default_container = "Turkey", default_placetype = "province", default_divs = "districts", data = export.turkey_provinces, } export.ukraine_oblasts = { ["Cherkasy Oblast, Ukraine"] = {}, -- capital [[Cherkasy]], license plate prefix CA, IA ["Chernihiv Oblast, Ukraine"] = {}, -- capital [[Chernihiv]], license plate prefix CB, IB ["Chernivtsi Oblast, Ukraine"] = {}, -- capital [[Chernivtsi]], license plate prefix CE, IE -- apparently will be renamed to 'Dnipro Oblast' ["Dnipropetrovsk Oblast, Ukraine"] = {}, -- capital [[Dnipro]], license plate prefix AE, KE ["Donetsk Oblast, Ukraine"] = {}, -- capital ''[[Donetsk]] ([[Kramatorsk]])'', license plate prefix AH, KH ["Ivano-Frankivsk Oblast, Ukraine"] = {}, -- capital [[Ivano-Frankivsk]], license plate prefix AT, KT ["Kharkiv Oblast, Ukraine"] = {}, -- capital [[Kharkiv]], license plate prefix AX, KX ["Kherson Oblast, Ukraine"] = {}, -- capital ''[[Kherson]]'', license plate prefix ''BT, HT'' ["Khmelnytskyi Oblast, Ukraine"] = {}, -- capital [[Khmelnytskyi]], license plate prefix BX, HX -- apparently will be renamed to 'Kropyvnytskyi Oblast' ["Kirovohrad Oblast, Ukraine"] = {}, -- capital [[Kropyvnytskyi]], license plate prefix BA, HA ["Kyiv Oblast, Ukraine"] = {}, -- capital [[Kyiv]], license plate prefix AI, KI ["Kiev Oblast, Ukraine"] = {alias_of = "Kyiv Oblast, Ukraine", display = true}, ["Luhansk Oblast, Ukraine"] = {}, -- capital ''[[Luhansk]] ([[Sievierodonetsk]])'', license plate prefix BB, HB ["Lviv Oblast, Ukraine"] = {}, -- capital [[Lviv]], license plate prefix BC, HC ["Mykolaiv Oblast, Ukraine"] = {}, -- capital [[Mykolaiv]], license plate prefix BE, HE ["Odesa Oblast, Ukraine"] = {}, -- capital [[Odesa]], license plate prefix BH, HH ["Odessa Oblast, Ukraine"] = {alias_of = "Odesa Oblast, Ukraine", display = true}, ["Poltava Oblast, Ukraine"] = {}, -- capital [[Poltava]], license plate prefix BI, HI ["Rivne Oblast, Ukraine"] = {}, -- capital [[Rivne]], license plate prefix BK, HK ["Sumy Oblast, Ukraine"] = {}, -- capital [[Sumy]], license plate prefix BM, HM ["Ternopil Oblast, Ukraine"] = {}, -- capital [[Ternopil]], license plate prefix BO, HO ["Vinnytsia Oblast, Ukraine"] = {}, -- capital [[Vinnytsia]], license plate prefix AB, KB ["Volyn Oblast, Ukraine"] = {}, -- capital [[Lutsk]], license plate prefix AC, KC ["Zakarpattia Oblast, Ukraine"] = {}, -- capital [[Uzhhorod]], license plate prefix AO, KO ["Zaporizhzhia Oblast, Ukraine"] = {}, -- capital ''[[Zaporizhzhia]]'', license plate prefix AP, KP ["Zaporizhia Oblast, Ukraine"] = {alias_of = "Zaporizhzhia Oblast, Ukraine", display = true}, ["Zhytomyr Oblast, Ukraine"] = {}, -- capital [[Zhytomyr]], license plate prefix AM, KM } -- oblasts of Ukraine export.ukraine_group = { key_to_placename = make_key_to_placename(", Ukraine$", " Oblast$"), placename_to_key = make_placename_to_key(", Ukraine", " Oblast"), default_container = "Ukraine", default_placetype = "oblast", default_divs = {"raions", "hromadas"}, data = export.ukraine_oblasts, } export.united_kingdom_constituent_countries = { ["England"] = {divs = { "counties", "districts", {type = "local government districts", cat_as = "districts"}, { type = "local government districts with borough status", cat_as = {"districts", "boroughs"}, }, {type = "boroughs", cat_as = {"districts", "boroughs"}}, {type = "civil parishes", container_parent_type = false}, }}, ["Northern Ireland"] = { placetype = {"constituent country", "province", "country"}, divs = {"counties", "districts"}, }, ["Scotland"] = {divs = { {type = "council areas", container_parent_type = false}, "districts", }}, ["Wales"] = {divs = { "counties", {type = "county boroughs", container_parent_type = false}, {type = "communities", container_parent_type = false}, {type = "Welsh communities", cat_as = {{type = "communities", container_parent_type = false}}}, }}, } -- constituent countries and provinces of the United Kingdom export.united_kingdom_group = { placename_to_key = false, default_container = "United Kingdom", default_placetype = {"constituent country", "country"}, addl_divs = { "traditional counties", {type = "historical counties", cat_as = "traditional counties"}, }, -- Don't create categories like 'Category:en:Towns in the United Kingdom' -- or 'Category:en:Places in the United Kingdom'. default_no_container_cat = true, data = export.united_kingdom_constituent_countries, } export.england_counties = { -- NOTE: We used to have various other "no longer" counties commented out, which seems to refer to counties that -- existed officially at some point between 1889 and 1974, which I have removed. I have only kept the three -- ceremonial counties that existed from 1974 (when ceremonial counties were created) to 1996, as well as those -- still considered "historic counties" per [[w:Historic counties of England]]. -- ["Avon, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996) ["Bedfordshire, England"] = {}, ["Berkshire, England"] = {}, -- ["Brighton and Hove, England"] = {}, -- city -- ["Bristol, England"] = {}, -- city ["Buckinghamshire, England"] = {}, ["Cambridgeshire, England"] = {}, ["Cheshire, England"] = {}, -- ["Cleveland, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996) ["Cornwall, England"] = {}, -- ["Cumberland, England"] = {}, -- no longer (historic county) ["Cumbria, England"] = {}, ["Derbyshire, England"] = {}, ["Devon, England"] = {}, ["Dorset, England"] = {}, ["County Durham, England"] = {}, ["East Sussex, England"] = {}, ["Essex, England"] = {}, ["Gloucestershire, England"] = {}, ["Greater London, England"] = {}, ["Greater Manchester, England"] = {}, ["Hampshire, England"] = {}, ["Herefordshire, England"] = {}, ["Hertfordshire, England"] = {}, -- ["Humberside, England"] = {}, -- no longer (1974 to 1996) -- ["Huntingdonshire, England"] = {}, -- no longer (historic county) ["Isle of Wight, England"] = {the = true}, ["Kent, England"] = {}, ["Lancashire, England"] = {}, ["Leicestershire, England"] = {}, ["Lincolnshire, England"] = {}, ["Merseyside, England"] = {}, -- ["Middlesex, England"] = {}, -- no longer (historic county) ["Norfolk, England"] = {}, ["Northamptonshire, England"] = {}, ["Northumberland, England"] = {}, ["North Yorkshire, England"] = {}, ["Nottinghamshire, England"] = {}, ["Oxfordshire, England"] = {}, ["Rutland, England"] = {}, ["Shropshire, England"] = {}, ["Somerset, England"] = {}, ["South Humberside, England"] = {}, ["South Yorkshire, England"] = {}, ["Staffordshire, England"] = {}, ["Suffolk, England"] = {}, ["Surrey, England"] = {}, -- ["Sussex, England"] = {}, -- no longer (historic county) ["Tyne and Wear, England"] = {}, ["Warwickshire, England"] = {}, ["West Midlands, England"] = {the = true, wp = "%l (county)"}, -- ["Westmorland, England"] = {}, -- no longer (historic county) ["West Sussex, England"] = {}, ["West Yorkshire, England"] = {}, ["Wiltshire, England"] = {}, ["Worcestershire, England"] = {}, -- ["Yorkshire, England"] = {}, -- no longer (historic county) ["East Riding of Yorkshire, England"] = {the = true}, } -- counties of England export.england_group = { default_container = {key = "England", placetype = "constituent country"}, default_placetype = "county", default_divs = { "districts", {type = "local government districts", cat_as = "districts"}, { type = "local government districts with borough status", cat_as = {"districts", "boroughs"}, }, {type = "boroughs", cat_as = {"districts", "boroughs"}}, "civil parishes", }, data = export.england_counties, } export.northern_ireland_counties = { ["County Antrim, Northern Ireland"] = {}, ["County Armagh, Northern Ireland"] = {}, ["City of Belfast, Northern Ireland"] = {the = true, is_city = true, wp = "Belfast"}, ["County Down, Northern Ireland"] = {}, ["County Fermanagh, Northern Ireland"] = {}, ["County Londonderry, Northern Ireland"] = {}, ["City of Derry, Northern Ireland"] = {the = true, is_city = true, wp = "Derry"}, ["County Tyrone, Northern Ireland"] = {}, } -- counties of Northern Ireland export.northern_ireland_group = { key_to_placename = make_irish_type_key_to_placename(", Northern Ireland$"), placename_to_key = make_irish_type_placename_to_key(", Northern Ireland"), default_container = {key = "Northern Ireland", placetype = "constituent country"}, default_placetype = "county", data = export.northern_ireland_counties, } export.scotland_council_areas = { ["Aberdeenshire, Scotland"] = {}, ["Angus, Scotland"] = {wp = "%l, %c"}, ["Argyll and Bute, Scotland"] = {}, ["City of Aberdeen, Scotland"] = {the = true, wp = "Aberdeen"}, ["Aberdeen"] = {alias_of = "City of Aberdeen, Scotland"}, ["Aberdeen City"] = {alias_of = "City of Aberdeen, Scotland"}, ["City of Dundee, Scotland"] = {the = true, wp = "Dundee"}, ["Dundee"] = {alias_of = "City of Dundee, Scotland"}, ["Dundee City"] = {alias_of = "City of Dundee, Scotland"}, ["City of Edinburgh, Scotland"] = {the = true, wp = "%l council area"}, ["Edinburgh"] = {alias_of = "City of Edinburgh, Scotland"}, ["City of Glasgow, Scotland"] = {the = true, wp = "Glasgow"}, ["Glasgow"] = {alias_of = "City of Glasgow, Scotland"}, ["Clackmannanshire, Scotland"] = {}, ["Dumfries and Galloway, Scotland"] = {}, ["East Ayrshire, Scotland"] = {}, ["East Dunbartonshire, Scotland"] = {}, ["East Lothian, Scotland"] = {}, ["East Renfrewshire, Scotland"] = {}, ["Falkirk, Scotland"] = {wp = "%l council area"}, ["Fife, Scotland"] = {}, ["Highland, Scotland"] = {wp = "%l council area"}, ["Inverclyde, Scotland"] = {}, ["Midlothian, Scotland"] = {}, ["Moray, Scotland"] = {}, ["North Ayrshire, Scotland"] = {}, ["North Lanarkshire, Scotland"] = {}, ["Orkney Islands, Scotland"] = {the = true}, ["Perth and Kinross, Scotland"] = {}, ["Renfrewshire, Scotland"] = {}, ["Scottish Borders, Scotland"] = {the = true}, ["Shetland Islands, Scotland"] = {the = true}, ["South Ayrshire, Scotland"] = {}, ["South Lanarkshire, Scotland"] = {}, ["Stirling, Scotland"] = {wp = "%l council area"}, ["West Dunbartonshire, Scotland"] = {}, ["West Lothian, Scotland"] = {}, ["Western Isles, Scotland"] = {the = true, wp = "Outer Hebrides"}, ["Na h-Eileanan Siar, Scotland"] = {alias_of = "Western Isles, Scotland"}, } -- council areas of Scotland export.scotland_group = { default_container = {key = "Scotland", placetype = "constituent country"}, default_placetype = "council area", data = export.scotland_council_areas, } export.wales_principal_areas = { ["Blaenau Gwent, Wales"] = {}, ["Bridgend, Wales"] = {wp = "%l County Borough"}, ["Caerphilly, Wales"] = {wp = "%l County Borough"}, -- ["Cardiff, Wales"] = {placetype = "city"}, ["Carmarthenshire, Wales"] = {placetype = "county"}, ["Ceredigion, Wales"] = {placetype = "county"}, ["Conwy, Wales"] = {wp = "%l County Borough"}, ["Denbighshire, Wales"] = {placetype = "county"}, ["Flintshire, Wales"] = {placetype = "county"}, ["Gwynedd, Wales"] = {placetype = "county"}, ["Isle of Anglesey, Wales"] = {the = true, placetype = "county"}, ["Anglesey, Wales"] = {alias_of = "Isle of Anglesey, Wales"}, -- differs in "the" ["Merthyr Tydfil, Wales"] = {wp = "%l County Borough"}, ["Monmouthshire, Wales"] = {placetype = "county"}, ["Neath Port Talbot, Wales"] = {}, -- ["Newport, Wales"] = {placetype = "city", wp = "%l, %c"}, ["Pembrokeshire, Wales"] = {placetype = "county"}, ["Powys, Wales"] = {placetype = "county"}, ["Rhondda Cynon Taf, Wales"] = {}, -- ["Swansea, Wales"] = {placetype = "city"}, ["Torfaen, Wales"] = {}, ["Vale of Glamorgan, Wales"] = {the = true}, ["Wrexham, Wales"] = {wp = "%l County Borough"}, } -- principal areas (cities, counties and county boroughs) of Wales export.wales_group = { default_container = {key = "Wales", placetype = "constituent country"}, default_placetype = "county borough", data = export.wales_principal_areas, } export.united_states_states = { ["Alabama, USA"] = {}, ["Alaska, USA"] = {divs = { {type = "boroughs", container_parent_type = "counties"}, {type = "borough seats", container_parent_type = "county seats"}, }}, ["Arizona, USA"] = {}, ["Arkansas, USA"] = {}, ["California, USA"] = {}, ["Colorado, USA"] = {divs = {"counties", "county seats", "municipalities"}}, ["Connecticut, USA"] = {divs = {"counties", "county seats", "municipalities"}}, ["Delaware, USA"] = {}, ["Florida, USA"] = {}, ["Georgia, USA"] = {wp = "%l (U.S. state)"}, ["Hawaii, USA"] = {addl_parents = {"Polynesia"}}, ["Idaho, USA"] = {}, ["Illinois, USA"] = {}, ["Indiana, USA"] = {}, ["Iowa, USA"] = {}, ["Kansas, USA"] = {}, ["Kentucky, USA"] = {}, ["Louisiana, USA"] = {divs = { {type = "parishes", container_parent_type = "counties"}, {type = "parish seats", container_parent_type = "county seats"}, }}, ["Maine, USA"] = {}, ["Maryland, USA"] = {}, ["Massachusetts, USA"] = {}, ["Michigan, USA"] = {}, ["Minnesota, USA"] = {}, ["Mississippi, USA"] = {}, ["Missouri, USA"] = {}, ["Montana, USA"] = {}, ["Nebraska, USA"] = {}, ["Nevada, USA"] = {}, ["New Hampshire, USA"] = {}, ["New Jersey, USA"] = {divs = { "counties", "county seats", {type = "boroughs", prep = "in"}, }}, ["New Mexico, USA"] = {}, ["New York, USA"] = {wp = "%l (state)"}, ["North Carolina, USA"] = {}, ["North Dakota, USA"] = {}, ["Ohio, USA"] = {}, ["Oklahoma, USA"] = {}, ["Oregon, USA"] = {}, ["Pennsylvania, USA"] = {divs = { "counties", "county seats", {type = "boroughs", prep = "in"}, }}, ["Rhode Island, USA"] = {}, ["South Carolina, USA"] = {}, ["South Dakota, USA"] = {}, ["Tennessee, USA"] = {}, ["Texas, USA"] = {}, ["Utah, USA"] = {}, ["Vermont, USA"] = {}, ["Virginia, USA"] = {}, ["Washington, USA"] = {wp = "%l (state)"}, ["West Virginia, USA"] = {}, ["Wisconsin, USA"] = {}, ["Wyoming, USA"] = {}, } -- states of the United States export.united_states_group = { placename_to_key = make_placename_to_key(", USA"), default_container = "United States", default_placetype = "state", default_divs = {"counties", "county seats"}, addl_divs = { {type = "census-designated places", prep = "in"}, {type = "unincorporated communities", prep = "in"}, }, data = export.united_states_states, } export.vietnam_provinces = { -- [[Northeast (Vietnam)|Northeast]] region ["Bắc Giang Province, Vietnam"] = {}, -- capital [[Bắc Giang]] ["Bắc Kạn Province, Vietnam"] = {}, -- capital [[Bắc Kạn]] ["Cao Bằng Province, Vietnam"] = {}, -- capital [[Cao Bằng]] ["Hà Giang Province, Vietnam"] = {}, -- capital [[Hà Giang]] ["Lạng Sơn Province, Vietnam"] = {}, -- capital [[Lạng Sơn]] ["Phú Thọ Province, Vietnam"] = {}, -- capital [[Việt Trì]] ["Quảng Ninh Province, Vietnam"] = {}, -- capital [[Hạ Long]] ["Thái Nguyên Province, Vietnam"] = {}, -- capital [[Thái Nguyên]] ["Tuyên Quang Province, Vietnam"] = {}, -- capital [[Tuyên Quang]] -- [[Northwest (Vietnam)|Northwest]] region ["Lào Cai Province, Vietnam"] = {}, -- capital [[Lào Cai]] ["Yên Bái Province, Vietnam"] = {}, -- capital [[Yên Bái]] ["Điện Biên Province, Vietnam"] = {}, -- capital [[Điện Biên Phủ]] ["Hoà Bình Province, Vietnam"] = {}, -- capital [[Hoà Bình City|Hoà Bình]] ["Hòa Bình Province, Vietnam"] = {alias_of = "Hoà Bình Province, Vietnam", display = true}, ["Lai Châu Province, Vietnam"] = {}, -- capital [[Lai Châu]] ["Sơn La Province, Vietnam"] = {}, -- capital [[Sơn La]] -- [[Red River Delta]] region ["Bắc Ninh Province, Vietnam"] = {}, -- capital [[Bắc Ninh]] ["Hà Nam Province, Vietnam"] = {}, -- capital [[Phủ Lý]] ["Hải Dương Province, Vietnam"] = {}, -- capital [[Hải Dương]] ["Hưng Yên Province, Vietnam"] = {}, -- capital [[Hưng Yên]] ["Nam Định Province, Vietnam"] = {}, -- capital [[Nam Định]] ["Ninh Bình Province, Vietnam"] = {}, -- capital [[Ninh Bình|Hoa Lư]] ["Thái Bình Province, Vietnam"] = {}, -- capital [[Thái Bình]] ["Vĩnh Phúc Province, Vietnam"] = {}, -- capital [[Vĩnh Yên]] -- ["Hanoi"] = {placetype = {"municipality", "city"}}, -- capital [[Hoàn Kiếm district]] -- ["Haiphong"] = {placetype = {"municipality", "city"}}, -- capital [[Hồng Bàng district]] -- [[North Central Coast]] region ["Hà Tĩnh Province, Vietnam"] = {}, -- capital [[Hà Tĩnh]] ["Nghệ An Province, Vietnam"] = {}, -- capital [[Vinh]] ["Quảng Bình Province, Vietnam"] = {}, -- capital [[Đồng Hới]] ["Quảng Trị Province, Vietnam"] = {}, -- capital [[Đông Hà]] ["Thanh Hoá Province, Vietnam"] = {}, -- capital [[Thanh Hoá]] ["Thanh Hóa Province, Vietnam"] = {alias_of = "Thanh Hoá Province, Vietnam", display = true}, -- ["Hue"] = {placetype = {"municipality", "city"}, wp = "Huế"}, -- capital [[Thuận Hoá district]] -- [[Central Highlands (Vietnam)|Central Highlands]] region ["Đắk Lắk Province, Vietnam"] = {}, -- capital [[Buôn Ma Thuột]] ["Đăk Nông Province, Vietnam"] = {}, -- capital [[Gia Nghĩa]] ["Gia Lai Province, Vietnam"] = {}, -- capital [[Pleiku]] ["Kon Tum Province, Vietnam"] = {}, -- capital [[Kon Tum]] ["Lâm Đồng Province, Vietnam"] = {}, -- capital [[Đà Lạt]] -- [[South Central Coast]] region ["Bình Định Province, Vietnam"] = {}, -- capital [[Quy Nhon]] ["Bình Thuận Province, Vietnam"] = {}, -- capital [[Phan Thiết]] ["Khánh Hoà Province, Vietnam"] = {}, -- capital [[Nha Trang]] ["Khánh Hòa Province, Vietnam"] = {alias_of = "Khánh Hoà Province, Vietnam", display = true}, ["Ninh Thuận Province, Vietnam"] = {}, -- capital [[Phan Rang–Tháp Chàm]] ["Phú Yên Province, Vietnam"] = {}, -- capital [[Tuy Hoà]] ["Quảng Nam Province, Vietnam"] = {}, -- capital [[Tam Kỳ]] ["Quảng Ngãi Province, Vietnam"] = {}, -- capital [[Quảng Ngãi]] -- ["Da Nang"] = {placetype = {"municipality", "city"}}, -- capital [[Hải Châu district]] -- [[Southeast (Vietnam)|Southeast]] region ["Bà Rịa–Vũng Tàu Province, Vietnam"] = {}, -- capital [[Bà Rịa]] ["Bình Dương Province, Vietnam"] = {}, -- capital [[Thủ Dầu Một]] ["Bình Phước Province, Vietnam"] = {}, -- capital [[Đồng Xoài]] ["Đồng Nai Province, Vietnam"] = {}, -- capital [[Biên Hoà]] ["Tây Ninh Province, Vietnam"] = {}, -- capital [[Tây Ninh]] -- ["Ho Chi Minh City"] = {placetype = {"municipality", "city"}}, -- capital [[District 1, Ho Chi Minh City|'''District 1''']] -- [[Mekong Delta]] region ["An Giang Province, Vietnam"] = {}, -- capital [[Long Xuyên]] ["Bạc Liêu Province, Vietnam"] = {}, -- capital [[Bạc Liêu]] ["Bến Tre Province, Vietnam"] = {}, -- capital [[Bến Tre]] ["Cà Mau Province, Vietnam"] = {}, -- capital [[Cà Mau]] ["Đồng Tháp Province, Vietnam"] = {}, -- capital [[Cao Lãnh City|Cao Lãnh]] ["Hậu Giang Province, Vietnam"] = {}, -- capital [[Vị Thanh]] ["Kiên Giang Province, Vietnam"] = {}, -- capital [[Rạch Giá]] ["Long An Province, Vietnam"] = {}, -- capital [[Tân An]] ["Sóc Trăng Province, Vietnam"] = {}, -- capital [[Sóc Trăng]] ["Tiền Giang Province, Vietnam"] = {}, -- capital [[Mỹ Tho]] ["Trà Vinh Province, Vietnam"] = {}, -- capital [[Trà Vinh]] ["Vĩnh Long Province, Vietnam"] = {}, -- capital [[Vĩnh Long]] -- ["Can Tho"] = {placetype = {"municipality", "city"}, wp = "Cần Thơ"}, -- capital [[Ninh Kiều district]] } -- provinces of Vietnam export.vietnam_group = { key_to_placename = make_key_to_placename(", Vietnam$", " Province$"), placename_to_key = make_placename_to_key(", Vietnam", " Province"), default_container = "Vietnam", default_placetype = "province", -- There may not be enough districts to subcategorize like this. -- default_divs = "districts", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.vietnam_provinces, } ----------------------------------------------------------------------------------- -- City data -- ----------------------------------------------------------------------------------- export.australia_cities = { ["Adelaide"] = {container = "South Australia"}, -- 1,450,000 (Agglomeration) ["Brisbane"] = {container = "Queensland"}, -- 3,450,000 (Conglomeration; including the Gold Coast [750,997 2024 estiamte]) ["Canberra"] = {container = {key = "Australian Capital Territory, Australia", placetype = "territory"}}, -- 510,641 (2024 estimate) ["Melbourne"] = {container = "Victoria"}, -- 5,200,000 (Agglomeration) ["Newcastle, New South Wales"] = {container = "New South Wales", wp = "%l, %c"}, -- 534,033 (2024 estimate) ["Newcastle"] = {alias_of = "Newcastle, New South Wales"}, ["Perth"] = {container = "Western Australia"}, -- 2,350,000 (Agglomeration) ["Sydney"] = {container = "New South Wales"}, -- 5,100,000 (Agglomeration) } export.australia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Australia", "state"), default_placetype = "city", data = export.australia_cities, } export.brazil_cities = { -- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01. ["São Paulo"] = {container = "São Paulo"}, -- 22,600,000 (Consolidated Urban Area; including Guarulhos) ["Sao Paulo"] = {alias_of = "São Paulo", display = true}, ["Rio de Janeiro"] = {container = "Rio de Janeiro"}, -- 13,600,000 (Consolidated Urban Area) ["Belo Horizonte"] = {container = "Minas Gerais"}, -- 5,300,000 ["Recife"] = {container = "Pernambuco"}, -- 4,100,000 ["Porto Alegre"] = {container = "Rio Grande do Sul"}, -- 3,950,000 (Consolidated Urban Area) ["Brasília"] = {container = "Distrito Federal"}, -- 3,850,000 ["Brasilia"] = {alias_of = "Brasília", display = true}, ["Fortaleza"] = {container = "Ceará"}, -- 3,825,000 ["Salvador"] = {container = "Bahia", wp = "%l, %c", commonscat = "%l (%c)"}, -- 3,400,000 ["Curitiba"] = {container = "Paraná"}, -- 3,375,000 ["Campinas"] = {container = "São Paulo"}, -- 3,250,000 ["Goiânia"] = {container = "Goiás"}, -- 2,525,000 ["Goiania"] = {alias_of = "Goiânia", display = true}, ["Manaus"] = {container = "Amazonas"}, -- 2,275,000 ["Belém"] = {container = "Pará"}, -- 2,200,000 ["Belem"] = {alias_of = "Belém", display = true}, ["Vitória"] = {container = "Espírito Santo", wp = "%l, %c"}, -- 1,870,000 ["Vitoria"] = {alias_of = "Vitória", display = true}, ["Santos"] = {container = "São Paulo", wp = "%l, %c"}, -- 1,760,000 ["São Luís"] = {container = "Maranhão", wp = "%l, %c"}, -- 1,530,000 ["Sao Luis"] = {alias_of = "São Luís", display = true}, ["Natal"] = {container = "Rio Grande do Norte", wp = "%l, %c"}, -- 1,360,000 ["Florianópolis"] = {container = "Santa Catarina"}, -- 1,260,000 ["Florianopolis"] = {alias_of = "Florianópolis", display = true}, ["Maceió"] = {container = "Alagoas"}, -- 1,220,000 ["Maceio"] = {alias_of = "Maceió", display = true}, ["João Pessoa"] = {container = "Paraíba", wp = "%l, %c"}, -- 1,210,000 ["Joao Pessoa"] = {alias_of = "João Pessoa", display = true}, ["São José dos Campos"] = {container = "São Paulo"}, -- 1,090,000 ["Sao Jose dos Campos"] = {alias_of = "São José dos Campos", display = true}, ["Londrina"] = {container = "Paraná"}, -- 1,050,000 ["Teresina"] = {container = "Piauí"}, -- 1,040,000 } export.brazil_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Brazil", "state"), default_placetype = "city", data = export.brazil_cities, } export.canada_cities = { -- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01. ["Toronto"] = {container = "Ontario"}, -- 7,850,000 (Consolidated Urban Area; including Hamilton) ["Montreal"] = {container = "Quebec"}, -- 4,500,000 (Consolidated Urban Area) ["Vancouver"] = {container = "British Columbia"}, -- 3,175,000 (Consolidated Urban Area) ["Calgary"] = {container = "Alberta"}, -- 1,510,000 (Consolidated Urban Area) ["Edmonton"] = {container = "Alberta"}, -- 1,460,000 (Consolidated Urban Area) ["Ottawa"] = {container = "Ontario"}, -- 1,390,000 (Consolidated Urban Area) ["Quebec City"] = {container = "Quebec"}, -- 839,311 metro per Wikipedia (2021 census) ["Winnipeg"] = {container = "Manitoba"}, -- 834,678 metro per Wikipedia (2021 census) ["Hamilton"] = {container = "Ontario", wp = "%l, %c"}, -- 785,184 metro per Wikipedia (2021 census) ["Kitchener"] = {container = "Ontario", wp = "%l, %c"}, -- 575,847 metro per Wikipedia (2021 census) } export.canada_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Canada", "province"), default_placetype = "city", data = export.canada_cities, } export.france_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. ["Paris"] = {container = "Île-de-France"}, -- 11,500,000 (Conglomeration) ["Lyon"] = {container = "Auvergne-Rhône-Alpes"}, -- 2,050,000 (Conglomeration) ["Lyons"] = {alias_of = "Lyon", display = true}, ["Marseille"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 1,710,000 (Conglomeration) ["Marseilles"] = {alias_of = "Marseille", display = true}, ["Lille"] = {container = "Hauts-de-France"}, -- 1,320,000 (Conglomeration) ["Bordeaux"] = {container = "Nouvelle-Aquitaine"}, -- 1,160,000 (Conglomeration) ["Toulouse"] = {container = "Occitania"}, -- 1,150,000 (Conglomeration) ["Nice"] = {container = "Provence-Alpes-Côte d'Azur"}, ["Nantes"] = {container = "Pays de la Loire"}, ["Strasbourg"] = {container = "Grand Est"}, ["Rennes"] = {container = "Brittany"}, } export.france_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", France", "region"), default_placetype = "city", data = export.france_cities, } export.germany_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. -- listed under Rhein-Ruhr Area, total population 10,900,000 (Consolidated Urban Area) ["Cologne"] = {container = "North Rhine-Westphalia"}, ["Köln"] = {alias_of = "Cologne", display = true}, ["Düsseldorf"] = {container = "North Rhine-Westphalia"}, ["Dusseldorf"] = {alias_of = "Düsseldorf", display = true}, ["Dortmund"] = {container = "North Rhine-Westphalia"}, ["Essen"] = {container = "North Rhine-Westphalia"}, ["Duisberg"] = {container = "North Rhine-Westphalia"}, ["Berlin"] = {}, -- 4,700,000 ["Frankfurt"] = {container = "Hesse"}, -- 3,225,000 ["Frankfurt am Main"] = {alias_of = "Frankfurt"}, -- not a display alias as it's longer ["Hamburg"] = {}, -- 2,900,000 ["Munich"] = {container = "Bavaria"}, -- 2,300,000 ["Stuttgart"] = {container = "Baden-Württemberg"}, -- 2,300,000 ["Mannheim"] = {container = "Baden-Württemberg"}, -- 1,550,000 ["Nuremberg"] = {container = "Bavaria"}, -- 1,120,000 ["Hanover"] = {"Lower Saxony"}, -- 1,090,000 ["Bielefeld"] = {container = "North Rhine-Westphalia"}, -- 1,080,000 ["Leipzig"] = {container = "Saxony"}, -- 1,080,000 ["Aachen"] = {container = "North Rhine-Westphalia"}, -- 1,000,000 ["Aix-la-Chapelle"] = {alias_of = "Aachen"}, -- historical; not a display alias ["Bremen"] = {}, } export.germany_cities_group = { default_container = "Germany", canonicalize_key_container = make_canonicalize_key_container(", Germany", "state"), default_placetype = "city", data = export.germany_cities, } export.india_cities = { -- This lists the 65 metro areas per Demographia's 2023 estimates, as found in -- [[w:List_of_million-plus_urban_agglomerations_in_India]]. The last census in India (as of April 2025) was -- conducted in 2011, and the results are not accurate any more. ["Delhi"] = {container = {key = "Delhi, India", placetype = "union territory"}}, -- 31,190,000 ["Mumbai"] = {container = "Maharashtra"}, -- 25,189,000 ["Kolkata"] = {container = "West Bengal"}, -- 21,747,000 ["Bangalore"] = {container = "Karnataka", wp = "Bengaluru"}, -- 15,257,000 ["Bengaluru"] = {alias_of = "Bangalore"}, ["Chennai"] = {container = "Tamil Nadu"}, -- 11,570,000 ["Hyderabad"] = {container = "Telangana"}, -- 9,797,000 ["Ahmedabad"] = {container = "Gujarat"}, -- 8,006,000 ["Pune"] = {container = "Maharashtra"}, -- 6,819,000 ["Surat"] = {container = "Gujarat"}, -- 6,601,000 ["Lucknow"] = {container = "Uttar Pradesh"}, -- 4,661,000 ["Jaipur"] = {container = "Rajasthan"}, -- 4,360,000 ["Kanpur"] = {container = "Uttar Pradesh"}, -- 4,350,000 ["Indore"] = {container = "Madhya Pradesh"}, -- 3,765,000 ["Nagpur"] = {container = "Maharashtra"}, -- 3,493,000 ["Patna"] = {container = "Bihar"}, -- 3,331,000 ["Varanasi"] = {container = "Uttar Pradesh"}, -- 3,229,000 ["Kozhikode"] = {container = "Kerala"}, -- 3,049,000 ["Thiruvananthapuram"] = {container = "Kerala"}, -- 2,851,000 ["Agra"] = {container = "Uttar Pradesh"}, -- 2,737,000 ["Bhopal"] = {container = "Madhya Pradesh"}, -- 2,562,000 ["Coimbatore"] = {container = "Tamil Nadu"}, -- 2,551,000 ["Allahabad"] = {container = "Uttar Pradesh", wp = "Prayagraj"}, -- 2,438,000 ["Prayagraj"] = {alias_of = "Allahabad"}, ["Kochi"] = {container = "Kerala"}, -- 2,381,000 ["Ludhiana"] = {container = "Punjab"}, -- 2,205,000 ["Vadodara"] = {container = "Gujarat"}, -- 2,182,000 ["Chandigarh"] = {container = {key = "Chandigarh, India", placetype = "union territory"}}, -- 2,168,000 ["Madurai"] = {container = "Tamil Nadu"}, -- 2,048,000 ["Meerut"] = {container = "Uttar Pradesh"}, -- 2,011,000 ["Visakhapatnam"] = {container = "Andhra Pradesh"}, -- 2,005,000 ["Jamshedpur"] = {container = "Jharkhand"}, -- 1,925,000 ["Malappuram"] = {container = "Kerala"}, -- 1,868,000 ["Nashik"] = {container = "Maharashtra"}, -- 1,810,000 ["Asansol"] = {container = "West Bengal"}, -- 1,720,000 ["Aligarh"] = {container = "Uttar Pradesh"}, -- 1,660,000 ["Ranchi"] = {container = "Jharkhand"}, -- 1,638,000 ["Thrissur"] = {container = "Kerala"}, -- 1,578,000 ["Kollam"] = {container = "Kerala"}, -- 1,576,000 ["Jabalpur"] = {container = "Madhya Pradesh"}, -- 1,533,000 ["Dhanbad"] = {container = "Jharkhand"}, -- 1,503,000 ["Jodhpur"] = {container = "Rajasthan"}, -- 1,497,000 ["Aurangabad"] = {container = "Maharashtra"}, -- 1,490,000 ["Chhatrapati Sambhajinagar"] = {alias_of = "Aurangabad"}, ["Rajkot"] = {container = "Gujarat"}, -- 1,487,000 ["Gwalior"] = {container = "Madhya Pradesh"}, -- 1,477,000 ["Raipur"] = {container = "Chhattisgarh"}, -- 1,429,000 ["Gorakhpur"] = {container = "Uttar Pradesh"}, -- 1,410,000 ["Kannur"] = {container = "Kerala"}, -- 1,360,000 ["Bareilly"] = {container = "Uttar Pradesh"}, -- 1,355,000 ["Guwahati"] = {container = "Assam"}, -- 1,355,000 ["Moradabad"] = {container = "Uttar Pradesh"}, -- 1,345,000 ["Amritsar"] = {container = "Punjab"}, -- 1,313,000 ["Mysore"] = {container = "Karnataka"}, -- 1,296,000 ["Bhilai"] = {container = "Chhattisgarh"}, -- 1,293,000 ["Durg-Bhilainagar"] = {alias_of = "Bhilai"}, ["Durg-Bhilai"] = {alias_of = "Bhilai"}, ["Durg"] = {alias_of = "Bhilai"}, ["Bhilainagar"] = {alias_of = "Bhilai"}, ["Vijayawada"] = {container = "Andhra Pradesh"}, -- 1,232,000 ["Srinagar"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,212,000 ["Salem"] = {container = "Tamil Nadu", wp = "%l, %c"}, -- 1,189,000 ["Kota"] = {container = "Rajasthan"}, -- 1,172,000 ["Jalandhar"] = {container = "Punjab"}, -- 1,165,000 ["Saharanpur"] = {container = "Uttar Pradesh"}, -- 1,152,000 ["Dehradun"] = {container = "Uttarakhand"}, -- 1,136,000 ["Tiruchirappalli"] = {container = "Tamil Nadu"}, -- 1,131,000 ["Bhubaneswar"] = {container = "Odisha"}, -- 1,112,000 ["Jammu"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,103,000 ["Solapur"] = {container = "Maharashtra"}, -- 1,082,000 ["Hubli-Dharwad"] = {container = "Karnataka", wp = "Hubli–Dharwad"}, -- 1,062,000; wp with en dash ["Hubli"] = {alias_of = "Hubli-Dharwad"}, ["Dharwad"] = {alias_of = "Hubli-Dharwad"}, ["Puducherry"] = {container = {key = "Puducherry, India", placetype = "union territory"}}, -- 1,024,000 ["Pondicherry"] = {alias_of = "Puducherry", display = true}, -- satellite/secondary cities of metro area (none in citypopulation.de) ["Ghaziabad"] = {container = "Uttar Pradesh"}, -- 1,729,000 city, 2,358,525 urban agglomeration per 2011 census; 3,406,061 2025 estimate from official website; part of Delhi metro area ["Faridabad"] = {container = "Haryana"}, -- 1,414,050 city per 2011 census; part of Delhi metro area ["Thane"] = {container = "Maharashtra"}, -- 1,841,488 city per 2011 census; part of Mumbai metro area ["Kalyan-Dombivli"] = {container = "Maharashtra"}, -- 1,246,381 city per 2011 census; part of Mumbai metro area ["Kalyan-Dombivali"] = {alias_of = "Kalyan-Dombivli", display = true}, ["Kalyan"] = {alias_of = "Kalyan-Dombivli"}, ["Dombivli"] = {alias_of = "Kalyan-Dombivli"}, ["Dombivali"] = {alias_of = "Kalyan-Dombivli"}, ["Vasai-Virar"] = {container = "Maharashtra"}, -- 1,221,233 city per 2011 census; part of Mumbai metro area ["Vasai"] = {alias_of = "Vasai-Virar"}, ["Virar"] = {alias_of = "Vasai-Virar"}, ["Navi Mumbai"] = {container = "Maharashtra"}, -- 1,120,547 city per 2011 census; part of Mumbai metro area ["Howrah"] = {container = "West Bengal"}, -- 1,077,075 city ("metropolis"), 2,811,344 "metro" per 2011 census; part of Kolkata metro area ["Pimpri-Chinchwad"] = {container = "Maharashtra"}, -- 1,727,692 per 2011 census; part of Pune metro area ["Pimpri Chinchwad"] = {alias_of = "Pimpri-Chinchwad", display = true}, } export.india_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", India", "state"), default_placetype = "city", data = export.india_cities, } export.indonesia_cities = { -- cities where the city proper has more than 1,000,000 people as of mid-2023 estimate ["Jakarta"] = {container = "Special Capital Region of Jakarta", divs = { {type = "subdistricts", container_parent_type = false}, }}, ["Surabaya"] = {container = "East Java"}, ["Bekasi"] = {container = "West Java"}, -- part of Jakarta metro area ["Bandung"] = {container = "West Java"}, ["Medan"] = {container = "North Sumatra"}, ["Depok"] = {container = "West Java"}, -- part of Jakarta metro area ["Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area ["Palembang"] = {container = "South Sumatra"}, ["Semarang"] = {container = "Central Java"}, ["Makassar"] = {container = "South Sulawesi"}, ["South Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area ["Batam"] = {container = "Riau Islands"}, ["Bogor"] = {container = "West Java"}, -- part of Jakarta metro area ["Pekanbaru"] = {container = "Riau"}, ["Bandar Lampung"] = {container = "Lampung"}, -- other metro areas over 1,000,000 people ["Padang"] = {container = "West Sumatra"}, ["Samarinda"] = {container = "East Kalimantan"}, ["Malang"] = {container = "East Java"}, ["Yogyakarta"] = {container = "Special Region of Yogyakarta"}, ["Denpasar"] = {container = "Bali"}, ["Cirebon"] = {container = "West Java"}, ["Surakarta"] = {container = "Central Java"}, ["Banjarmasin"] = {container = "South Kalimantan"}, ["Tasikmalaya"] = {container = "West Java"}, } export.indonesia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Indonesia", "province"), default_placetype = "city", data = export.indonesia_cities, } export.italy_cities = { -- Data per [[w:List_of_metropolitan_areas_of_Italy]]. There are several lists given; the most recent one, used -- here, only gives estimates as of Jan 1, 2014. ["Milan"] = {container = "Lombardy"}, -- 6,623,798 ["Naples"] = {container = "Campania"}, -- 5,294,546 ["Rome"] = {container = "Lazio"}, -- 4,447,881 ["Turin"] = {container = "Piedmont"}, -- 1,865,284 ["Venice"] = {container = "Veneto"}, -- 1,645,900 ["Florence"] = {container = "Tuscany"}, -- 1,485,030 ["Bari"] = {container = "Apulia"}, -- 1,257,459 ["Palermo"] = {container = "Sicily"}, -- 1,183,084 -- include a few just below 1,000,000 metro area that may be above it by now (depending on the definition). ["Catania"] = {container = "Sicily"}, -- 988,240 ["Brescia"] = {container = "Lombardy"}, -- 924,090 ["Genoa"] = {container = "Liguria"}, -- 861,318 } export.italy_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Italy", "region"), default_placetype = "city", data = export.italy_cities, } export.japan_cities = { -- Population figures from [[w:List of cities in Japan]]. Metro areas from -- [[w:List of metropolitan areas in Japan]]. ["Tokyo"] = {keydesc = "[[Tokyo]] Metropolis, the [[capital city]] and a [[prefecture]] of [[Japan]] (which is a country in [[Asia]])", placetype = {"city", "prefecture"}, divs = { {type = "special wards", container_parent_type = false}, {type = "cities", prep = "in"}, }, }, ["Yokohama"] = {container = "Kanagawa"}, -- 3,697,894 ["Osaka"] = {container = "Osaka"}, -- 2,668,586 ["Nagoya"] = {container = "Aichi"}, -- 2,283,289 -- FIXME, Hokkaido is handled specially. ["Sapporo"] = {container = "Hokkaido"}, -- 1,918,096 ["Fukuoka"] = {container = "Fukuoka"}, -- 1,581,527 ["Kobe"] = {container = "Hyōgo"}, -- 1,530,847 ["Kyoto"] = {container = "Kyoto"}, -- 1,474,570 ["Kawasaki"] = {container = "Kanagawa", wp = "%l, Kanagawa"}, -- 1,373,630 ["Saitama"] = {container = "Saitama", wp = "%l (city)", commonscat = "%l, %c"}, -- 1,192,418 ["Hiroshima"] = {container = "Hiroshima"}, -- 1,163,806 ["Sendai"] = {container = "Miyagi"}, -- 1,029,552 -- the remaining cities are considered "central cities" in a 1,000,000+ metro area -- (sometimes there is more than one central city in the area). ["Kitakyushu"] = {container = "Fukuoka"}, -- 986,998 ["Chiba"] = {container = "Chiba", wp = "%l (city)", commonscat = "%l, %c"}, -- 938,695 ["Sakai"] = {container = "Osaka"}, -- 835,333 ["Niigata"] = {container = "Niigata", wp = "%l (city)", commonscat = "%l, %c"}, -- 813,053 ["Hamamatsu"] = {container = "Shizuoka"}, -- 811,431 ["Shizuoka"] = {container = "Shizuoka", wp = "%l (city)", commonscat = "%l, %c"}, -- 710,944 ["Sagamihara"] = {container = "Kanagawa"}, -- 706,342 ["Okayama"] = {container = "Okayama"}, -- 701,293 ["Kumamoto"] = {container = "Kumamoto"}, -- 670,348 ["Kagoshima"] = {container = "Kagoshima"}, -- 605,196 -- skipped 6 cities (Funabashi, Hachiōji, Kawaguchi, Himeji, Matsuyama, Higashiōsaka) -- with population in the range 509k - 587k because not central cities in any -- 1,000,000+ metro area. ["Utsunomiya"] = {container = "Tochigi"}, -- 507,833 } export.japan_cities_group = { default_container = "Japan", canonicalize_key_container = make_canonicalize_key_container(" Prefecture, Japan", "prefecture"), default_placetype = "city", data = export.japan_cities, } export.mexico_cities = { ["Mexico City"] = {}, -- its own state ["Monterrey"] = {container = "Nuevo León"}, ["Guadalajara"] = {container = "Jalisco"}, ["Puebla"] = {container = "Puebla", wp = "%l (city)"}, ["Toluca"] = {container = "State of Mexico"}, ["Tijuana"] = {container = "Baja California"}, -- Include the state in the category for León due to possible confusion with León, Spain. ["León, Guanajuato"] = {container = "Guanajuato", wp = "%l, %c"}, ["León"] = {alias_of = "León, Guanajuato"}, ["Leon"] = {alias_of = "León, Guanajuato", display = true}, ["Querétaro"] = {container = "Querétaro", wp = "%l (city)"}, ["Queretaro"] = {alias_of = "Querétaro", display = true}, ["Ciudad Juárez"] = {container = "Chihuahua"}, ["Juárez"] = {alias_of = "Ciudad Juárez"}, ["Juarez"] = {alias_of = "Ciudad Juárez", display = "Juárez"}, ["Torreón"] = {container = "Coahuila"}, ["Torreon"] = {alias_of = "Torreón", display = true}, -- Include the state in the category for Mérida due to possible confusion with Mérida, Spain or -- Mérida, Venezuela. ["Mérida, Yucatán"] = {container = "Yucatán", wp = "%l, %c"}, ["Mérida"] = {alias_of = "Mérida, Yucatán"}, ["Merida"] = {alias_of = "Mérida, Yucatán", display = true}, ["San Luis Potosí"] = {container = "San Luis Potosí", wp = "%l (city)"}, ["San Luis Potosi"] = {alias_of = "San Luis Potosí", display = true}, ["Aguascalientes"] = {container = "Aguascalientes", wp = "%l (city)"}, ["Mexicali"] = {container = "Baja California"}, } export.mexico_cities_group = { default_container = "Mexico", canonicalize_key_container = make_canonicalize_key_container(", Mexico", "state"), default_placetype = "city", data = export.mexico_cities, } export.nigeria_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. ["Lagos"] = {container = "Lagos"}, -- 21,300,000 (unindicated; population of low reliability) ["Kano"] = {container = "Kano", wp = "%l (city)"}, -- 5,350,000 (unindicated; population of low reliability) ["Ibadan"] = {container = "Oyo"}, -- 3,400,000 (unindicated; population of low reliability) ["Abuja"] = {container = {key = "Federal Capital Territory, Nigeria", placetype = "federal territory"}}, -- 3,050,000 (unindicated; population of low reliability) ["Port Harcourt"] = {container = "Rivers"}, -- 2,250,000 (unindicated; population of low reliability) ["Kaduna"] = {container = "Kaduna"}, -- 1,980,000 (unindicated; population of low reliability) ["Benin City"] = {container = "Edo"}, -- 1,790,000 (unindicated; population of low reliability) ["Aba"] = {container = "Abia", wp = "%l, Nigeria"}, -- 1,280,000 (unindicated; population of low reliability) ["Onitsha"] = {container = "Anambra"}, -- 1,230,000 (unindicated; population of low reliability) ["Maiduguri"] = {container = "Borno"}, -- 1,190,000 (unindicated; population of low reliability) ["Ilorin"] = {container = "Kwara"}, -- 1,160,000 (unindicated; population of low reliability) ["Sokoto"] = {container = "Sokoto", wp = "%l (city)"}, -- 1,140,000 (unindicated; population of low reliability) ["Jos"] = {container = "Plateau"}, -- 1,110,000 (unindicated; population of low reliability) ["Zaria"] = {container = "Kaduna"}, -- 1,050,000 (unindicated; population of low reliability) ["Enugu"] = {container = "Enugu", wp = "%l (city)"}, -- 1,010,000 (unindicated; population of low reliability) } export.nigeria_cities_group = { default_container = "Nigeria", canonicalize_key_container = make_canonicalize_key_container(" State, Nigeria", "state"), default_placetype = "city", data = export.nigeria_cities, } export.pakistan_cities = { -- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01. ["Karachi"] = {container = "Sindh"}, -- 21,000,000 (Consolidated Urban Area) ["Lahore"] = {container = "Punjab"}, -- 14,600,000 (Consolidated Urban Area) ["Rawalpindi"] = {container = "Punjab"}, -- 5,600,000 (Consolidated Urban Area; including Islamabad) ["Islamabad"] = {container = {key = "Islamabad Capital Territory, Pakistan", placetype = "federal territory"}}, -- 5,600,000 (Consolidated Urban Area; including Rawalpindi) ["Faisalabad"] = {container = "Punjab"}, -- 4,125,000 (Consolidated Urban Area) ["Gujranwala"] = {container = "Punjab"}, -- 3,450,000 (Consolidated Urban Area) -- there is also Hyderabad in India (very confusing) ["Hyderabad, Pakistan"] = {container = "Sindh", wp = "%l, %c"}, -- 2,475,000 (Consolidated Urban Area) ["Hyderabad"] = {alias_of = "Hyderabad, Pakistan"}, ["Multan"] = {container = "Punjab"}, -- 2,425,000 (Consolidated Urban Area) ["Peshawar"] = {container = "Khyber Pakhtunkhwa"}, -- 2,150,000 (Consolidated Urban Area) ["Quetta"] = {container = "Balochistan"}, -- 1,720,000 (Urban Area) ["Sargodha"] = {container = "Punjab"}, -- 1,080,000 (Urban Area) ["Sialkot"] = {container = "Punjab"}, -- 1,050,000 (Consolidated Urban Area) } export.pakistan_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Pakistan", "province"), default_placetype = "city", data = export.pakistan_cities, } export.philippines_cities = { -- Skipped some cities in Metro Manila (Taguig, Pasig) which don't have districts. -- Other cities outside Metro Manila skipped as not central city in their urban area. ["Quezon City"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, -- Don't display-canonicalize Foo to Foo City as it may make the display weird. ["Quezon"] = {alias_of = "Quezon City"}, ["Manila"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, ["Davao City"] = {container = "Davao del Sur"}, ["Davao"] = {alias_of = "Davao City"}, ["Caloocan"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, ["Zamboanga City"] = {container = "Zamboanga del Sur"}, ["Zamboanga"] = {alias_of = "Zamboanga City"}, ["Cebu City"] = {container = "Cebu"}, ["Cebu"] = {alias_of = "Cebu City"}, ["Antipolo"] = {container = "Rizal"}, ["Cagayan de Oro"] = {container = "Misamis Oriental"}, ["Dasmariñas"] = {container = "Cavite"}, ["Dasmarinas"] = {alias_of = "Dasmariñas", display = true}, ["General Santos"] = {container = "South Cotabato"}, ["San Jose del Monte"] = {container = "Bulacan"}, ["Bacolod"] = {container = "Negros Occidental"}, ["Calamba"] = {container = "Laguna", wp = "%l, %c"}, ["Angeles"] = {container = "Pampanga", wp = "Angeles City"}, ["Angeles City"] = {alias_of = "Angeles"}, ["Iloilo City"] = {container = "Iloilo"}, ["Iloilo"] = {alias_of = "Iloilo City"}, } export.philippines_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Philippines", "province"), default_placetype = "city", data = export.philippines_cities, } export.russia_cities = { -- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01. ["Moscow"] = {}, -- 18,800,000 (Agglomeration) ["Saint Petersburg"] = {}, -- 6,350,000 (Agglomeration) ["Novosibirsk"] = {container = "Novosibirsk Oblast"}, -- 1,820,000 (Agglomeration) ["Yekaterinburg"] = {container = "Sverdlovsk Oblast"}, -- 1,810,000 (Agglomeration) ["Nizhny Novgorod"] = {container = "Nizhny Novgorod Oblast"}, -- 1,620,000 (Agglomeration) ["Kazan"] = {container = {key = "Tatarstan, Russia", placetype = "republic"}}, -- 1,560,000 (Agglomeration) ["Chelyabinsk"] = {container = "Chelyabinsk Oblast"}, -- 1,430,000 (Agglomeration) ["Rostov-on-Don"] = {container = "Rostov Oblast"}, -- 1,390,000 (Agglomeration) ["Rostov-na-Donu"] = {alias_of = "Rostov-on-Don", display = true}, ["Krasnodar"] = {container = {key = "Krasnodar Krai, Russia", placetype = "krai"}}, -- 1,370,000 (Agglomeration) ["Samara"] = {container = "Samara Oblast"}, -- 1,350,000 (Agglomeration) ["Krasnoyarsk"] = {container = {key = "Krasnoyarsk Krai, Russia", placetype = "krai"}}, -- 1,270,000 (Agglomeration) ["Ufa"] = {container = {key = "Bashkortostan, Russia", placetype = "republic"}}, -- 1,230,000 (Agglomeration) ["Saratov"] = {container = "Saratov Oblast"}, -- 1,170,000 (Agglomeration) ["Omsk"] = {container = "Omsk Oblast"}, -- 1,140,000 (Agglomeration) ["Voronezh"] = {container = "Voronezh Oblast"}, -- 1,130,000 (Agglomeration) ["Volgograd"] = {container = "Volgograd Oblast"}, -- 1,080,000 (Agglomeration) ["Perm"] = {container = {key = "Perm Krai, Russia", placetype = "krai"}, wp = "%l, Russia"}, -- 1,070,000 (Agglomeration) } export.russia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Russia", "oblast"), default_container = "Russia", default_placetype = "city", data = export.russia_cities, } export.saudi_arabia_cities = { -- Figures for the first five from [[w:List of cities and towns in Saudi Arabia]] as of 2022. Unclear if these are -- metro, urban or city proper figures. ["Riyadh"] = {container = "Riyadh"}, -- 7,000,100; 7,700,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Jeddah"] = {container = "Mecca"}, -- 3,751,917; 3,950,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Jedda"] = {alias_of = "Jeddah", display = true}, ["Jiddah"] = {alias_of = "Jeddah", display = true}, ["Jidda"] = {alias_of = "Jeddah", display = true}, ["Dammam"] = {container = "Eastern"}, -- 2,638,166; 2,925,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Mecca"] = {container = "Mecca"}, -- 2,385,509; 2,675,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Makkah"] = {alias_of = "Mecca", display = true}, ["Medina"] = {container = "Medina"}, -- 1,477,023; 1,530,000 per citypopulation.de 2025-01-01 (City) ["Hofuf"] = {container = "Eastern"}, -- 1,060,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Khamis Mushait"] = {container = "Aseer"}, -- 1,030,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Khamis Mushayt"] = {alias_of = "Khamis Mushait", display = true}, } export.saudi_arabia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(" Province, Saudi Arabia", "province"), default_placetype = "city", data = export.saudi_arabia_cities, } export.south_korea_cities = { -- All cities listed are not associated with any county. ["Seoul"] = {}, ["Busan"] = {}, ["Incheon"] = {}, ["Daegu"] = {}, ["Daejeon"] = {}, ["Gwangju"] = {}, ["Ulsan"] = {}, } export.south_korea_cities_group = { default_container = "South Korea", canonicalize_key_container = make_canonicalize_key_container(" County, South Korea", "province"), default_placetype = "city", data = export.south_korea_cities, } export.spain_cities = { ["Madrid"] = {container = "Community of Madrid"}, ["Barcelona"] = {container = "Catalonia"}, ["Valencia"] = {container = "Valencia"}, ["Seville"] = {container = "Andalusia"}, ["Bilbao"] = {container = "Basque Country"}, } export.spain_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Spain", "autonomous community"), default_placetype = "city", data = export.spain_cities, } export.taiwan_cities = { ["New Taipei City"] = {}, ["New Taipei"] = {alias_of = "New Taipei City", display = true}, ["Taichung"] = {}, ["Kaohsiung"] = {wp = "%l, Taiwan"}, ["Taipei"] = {}, ["Taoyuan"] = {}, ["Tainan"] = {}, -- these last three are not special municipalities ["Chiayi"] = {placetype = "city"}, ["Hsinchu"] = {placetype = "city"}, ["Keelung"] = {placetype = "city"}, } export.taiwan_cities_group = { placename_to_key = false, -- don't add ", Taiwan" to make the key canonicalize_key_container = make_canonicalize_key_container(", Taiwan", "county"), default_container = "Taiwan", default_placetype = {"special municipality", "municipality", "city"}, default_is_city = true, default_divs = {"districts"}, data = export.taiwan_cities, } -- NOTE: It's OK to mix cities from different constituent countries; as long as the immediate container is correct, -- everything else will be figured out. export.united_kingdom_cities = { ["London"] = {container = "Greater London"}, ["Manchester"] = {container = "Greater Manchester"}, ["Birmingham"] = {container = "West Midlands"}, ["Liverpool"] = {container = "Merseyside"}, ["Glasgow"] = {container = {key = "City of Glasgow, Scotland", placetype = "council area"}}, ["Leeds"] = {container = "West Yorkshire"}, ["Newcastle upon Tyne"] = {container = "Tyne and Wear"}, ["Newcastle"] = {alias_of = "Newcastle upon Tyne"}, ["Bristol"] = {container = {key = "England", placetype = "constituent country"}}, ["Cardiff"] = {container = {key = "Wales", placetype = "constituent country"}}, ["Portsmouth"] = {container = "Hampshire"}, ["Edinburgh"] = {container = {key = "City of Edinburgh, Scotland", placetype = "council area"}}, -- under 1,000,000 people but principal areas of Wales; requested by [[User:Donnanz]] ["Swansea"] = {container = {key = "Wales", placetype = "constituent country"}}, ["Newport"] = {container = {key = "Wales", placetype = "constituent country"}, wp = "Newport, Wales"}, } export.united_kingdom_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", England", "county"), default_placetype = "city", data = export.united_kingdom_cities, } export.united_states_cities = { -- top 50 CSA's by population, with the top and sometimes 2nd or 3rd city listed ["New York City"] = {container = "New York", wp = "%l", divs = { {type = "boroughs", container_parent_type = false}, }}, -- Don't display-canonicalize as it may make the display weird (e.g. in the context New York, New York). ["New York"] = {alias_of = "New York City"}, ["Newark"] = {container = "New Jersey"}, ["Los Angeles"] = {container = "California", wp = "%l"}, ["Long Beach"] = {container = "California"}, ["Riverside"] = {container = "California"}, ["Chicago"] = {container = "Illinois", wp = "%l"}, ["Washington, D.C."] = {wp = "%l"}, ["Washington, DC"] = {alias_of = "Washington, D.C.", display = true}, ["Washington D.C."] = {alias_of = "Washington, D.C.", display = true}, ["Washington DC"] = {alias_of = "Washington, D.C.", display = true}, -- Don't display-canonicalize as it may make the display weird (e.g. if the holonym is followed by a District of -- Columbia holonym). ["Washington"] = {alias_of = "Washington, D.C."}, ["Baltimore"] = {container = "Maryland", wp = "%l"}, -- to avoid conflict with San Jose in Costa Rica ["San Jose, California"] = {container = "California"}, ["San Jose"] = {alias_of = "San Jose, California"}, ["San Francisco"] = {container = "California", wp = "%l"}, ["Oakland"] = {container = "California"}, ["Boston"] = {container = "Massachusetts", wp = "%l"}, ["Providence"] = {container = "Rhode Island"}, ["Dallas"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"}, ["Fort Worth"] = {container = "Texas"}, ["Philadelphia"] = {container = "Pennsylvania", wp = "%l"}, ["Houston"] = {container = "Texas", wp = "%l"}, ["Miami"] = {container = "Florida", wp = "%l", commonscat = "%l, %c"}, ["Atlanta"] = {container = "Georgia", wp = "%l"}, ["Detroit"] = {container = "Michigan", wp = "%l"}, ["Phoenix"] = {container = "Arizona", wp = "%l", commonscat = "%l, %c"}, ["Mesa"] = {container = "Arizona"}, ["Seattle"] = {container = "Washington", wp = "%l"}, ["Orlando"] = {container = "Florida"}, ["Minneapolis"] = {container = "Minnesota", wp = "%l"}, ["Cleveland"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"}, ["Denver"] = {container = "Colorado", wp = "%l", commonscat = "%l, %c"}, ["San Diego"] = {container = "California", wp = "%l", commonscat = "%l, %c"}, ["Portland"] = {container = "Oregon"}, ["Tampa"] = {container = "Florida"}, ["St. Louis"] = {container = "Missouri", wp = "%l", commonscat = "%l, %c"}, ["Saint Louis"] = {alias_of = "St. Louis", display = true}, ["Charlotte"] = {container = "North Carolina"}, ["Sacramento"] = {container = "California"}, ["Pittsburgh"] = {container = "Pennsylvania", wp = "%l"}, ["Salt Lake City"] = {container = "Utah", wp = "%l"}, ["San Antonio"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"}, ["Columbus"] = {container = "Ohio"}, ["Kansas City"] = {container = "Missouri", wp = "%l metropolitan area", commonscat = "%l, %c"}, ["Indianapolis"] = {container = "Indiana", wp = "%l"}, ["Las Vegas"] = {container = "Nevada", wp = "%l"}, ["Cincinnati"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"}, ["Austin"] = {container = "Texas"}, ["Milwaukee"] = {container = "Wisconsin", wp = "%l", commonscat = "%l, %c"}, ["Raleigh"] = {container = "North Carolina"}, ["Nashville"] = {container = "Tennessee"}, ["Virginia Beach"] = {container = "Virginia"}, ["Norfolk"] = {container = "Virginia"}, ["Greensboro"] = {container = "North Carolina"}, ["Winston-Salem"] = {container = "North Carolina"}, ["Jacksonville"] = {container = "Florida"}, ["New Orleans"] = {container = "Louisiana", wp = "%l"}, ["Louisville"] = {container = "Kentucky"}, ["Greenville"] = {container = "South Carolina"}, ["Hartford"] = {container = "Connecticut"}, ["Oklahoma City"] = {container = "Oklahoma", wp = "%l"}, ["Grand Rapids"] = {container = "Michigan"}, ["Memphis"] = {container = "Tennessee"}, ["Birmingham, Alabama"] = {container = "Alabama"}, ["Birmingham"] = {alias_of = "Birmingham, Alabama"}, ["Fresno"] = {container = "California"}, ["Richmond"] = {container = "Virginia"}, ["Harrisburg"] = {container = "Pennsylvania"}, -- any major city of top 50 MSA's that's missed by previous ["Buffalo"] = {container = "New York"}, -- any of the top 50 city by city population that's missed by previous ["El Paso"] = {container = "Texas"}, ["Albuquerque"] = {container = "New Mexico"}, ["Tucson"] = {container = "Arizona"}, ["Colorado Springs"] = {container = "Colorado"}, ["Omaha"] = {container = "Nebraska"}, ["Tulsa"] = {container = "Oklahoma"}, -- skip Arlington, Texas; too obscure and likely to be interpreted as Arlington, Virginia } export.united_states_cities_group = { default_container = "United States", canonicalize_key_container = make_canonicalize_key_container(", USA", "state"), default_placetype = "city", default_wp = "%l, %c", data = export.united_states_cities, } export.new_york_boroughs = { ["Bronx"] = {the = true, wp = "The Bronx"}, ["Brooklyn"] = {}, ["Manhattan"] = {}, ["Queens"] = {}, ["Staten Island"] = {}, } export.new_york_boroughs_group = { default_container = {key = "New York City", placetype = "city"}, default_placetype = "borough", default_is_city = true, data = export.new_york_boroughs, } export.vietnam_cities = { -- Figures from citypopulation.de (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated. ["Ho Chi Minh City"] = {}, -- 14,300,000 (Agglomeration; inclunding Bien Hoa) ["Saigon"] = {alias_of = "Ho Chi Minh City"}, ["Hanoi"] = {}, -- 7,350,000 (Agglomeration) ["Da Nang"] = {}, -- 1,500,000 (Agglomeration) ["Danang"] = {alias_of = "Da Nang", display = true}, ["Haiphong"] = {}, -- 1,450,000 (Agglomeration) ["Hai Phong"] = {alias_of = "Haiphong", display = true}, -- This is the one entry in this list that is not a province-level municipality; instead it's a "provincial city" -- meaning it is directly under its province as opposed to being contained in a district. ["Bien Hoa"] = {placetype = "city", container = "Đồng Nai", wp = "Biên Hòa"}, -- 1,272,235 (2022 city population per Wikipedia) ["Biên Hòa"] = {alias_of = "Bien Hoa", display = true}, ["Biên Hoà"] = {alias_of = "Bien Hoa", display = true}, -- These two not in citypopulation.de because the urban population may be slightly under 1,000,000, but they are -- both province-level municipalities and close to the 1,000,000 mark. ["Can Tho"] = {wp = "Cần Thơ"}, -- 1,456,000 municipality (2019 census), 994,704 urban (2022 General Statistics Office of Vietnam estimate); capital [[Ninh Kiều district]] ["Cần Thơ"] = {alias_of = "Can Tho", display = true}, ["Hue"] = {wp = "Huế"}, -- 1,257,000 municipality (2019 census), 840,000 urban (2022 General Statistics Office of Vietnam estimate); -- capital [[Thuận Hóa district]] ["Huế"] = {alias_of = "Hue", display = true}, } export.vietnam_cities_group = { placename_to_key = false, -- don't add ", Vietnam" to make the key default_container = "Vietnam", canonicalize_key_container = make_canonicalize_key_container(" Province, Vietnam", "province"), -- Most of the cities listed are province-level municipalities in addition, which contain a certain amount of -- rural territory surrounding the city, but not enough to separate the municipality from the city as distinct -- known locations. default_placetype = {"municipality", "city"}, default_is_city = true, -- There may not be enough districts to subcategorize like this. -- default_divs = "districts", data = export.vietnam_cities, } export.misc_cities = { ------------------ Africa ------------------- -- Sorted by country and then within the country, by decreasing population; figures from citypopulation.de -- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated; combined with data from -- [[w:List of urban areas in Africa by population]]. ["Algiers"] = {container = "Algeria"}, -- 4,325,000 (Consolidated Urban Area) ["Oran"] = {container = "Algeria"}, -- 1,640,000 (Consolidated Urban Area) ["Luanda"] = {container = "Angola"}, -- 9,650,000 (Urban Area) ["Benguela"] = {container = "Angola"}, -- 1,420,000 (Urban Area) ["Cotonou"] = {container = "Benin"}, -- 2,150,000 (Agglomeration) ["Ouagadougou"] = {container = "Burkina Faso"}, -- 3,425,000 (Agglomeration) ["Bobo-Dioulasso"] = {container = "Burkina Faso"}, -- 1,100,000 (Agglomeration) ["Bujumbura"] = {container = "Burundi"}, -- 1,143,202 (Urban Area 2023 per PopulationStat, cited in Wikipedia) ["Yaoundé"] = {container = "Cameroon"}, -- 3,975,000 (City) ["Yaounde"] = {alias_of = "Yaoundé", display = true}, ["Douala"] = {container = "Cameroon"}, -- 3,900,000 (City) ["Bangui"] = {container = "Central African Republic"}, -- 1,680,000 (Agglomeration) ["N'Djamena"] = {container = "Chad"}, -- 1,950,000 (City) ["Ndjamena"] = {alias_of = "N'Djamena", display = true}, ["Kinshasa"] = {container = "Democratic Republic of the Congo"}, -- 16,300,000 (City; population of low reliability) ["Lubumbashi"] = {container = "Democratic Republic of the Congo"}, -- 2,875,000 (City; population of low reliability) ["Mbuji-Mayi"] = {container = "Democratic Republic of the Congo"}, -- 2,500,000 (City; population of low reliability) ["Kananga"] = {container = "Democratic Republic of the Congo"}, -- 1,370,000 (City; population of low reliability) ["Kisangani"] = {container = "Democratic Republic of the Congo"}, -- 1,300,000 (City; population of low reliability) ["Bukavu"] = {container = "Democratic Republic of the Congo"}, -- 1,100,000 (City; population of low reliability) ["Goma"] = {container = "Democratic Republic of the Congo"}, -- 1,010,000 (City; population of low reliability) ["Tshikapa"] = {container = "Democratic Republic of the Congo"}, -- 1,020,468 (2023 Wikipedia [[w:List of cities with over one million inhabitants]] from populationstat.com; not in citypopulation.de) ["Cairo"] = {container = "Egypt"}, -- 22,800,000 (Agglomeration, including Giza and Subhra El Kheima) ["Alexandria"] = {container = "Egypt"}, -- 6,250,000 (Agglomeration) ["Giza"] = {container = "Egypt"}, -- 4,458,135 (2023 from citypopulation.de) ["Shubra El Kheima"] = {container = "Egypt"}, -- 1,240,239 (2021 from citypopulation.de) ["Asmara"] = {container = "Eritrea"}, -- 1,090,000 (City; population of low reliability) ["Asmera"] = {alias_of = "Asmara", display = true}, ["Addis Ababa"] = {container = "Ethiopia"}, -- 4,825,000 (Agglomeration) ["Banjul"] = {container = "Gambia"}, -- 1,170,000 (Agglomeration) ["Accra"] = {container = "Ghana"}, -- 6,800,000 (Agglomeration) ["Kumasi"] = {container = "Ghana"}, -- 2,900,000 (Agglomeration) ["Conakry"] = {container = "Guinea"}, -- 2,975,000 (Consolidated Urban Area) ["Abidjan"] = {container = "Ivory Coast"}, -- 7,050,000 (Agglomeration) ["Nairobi"] = {container = "Kenya"}, -- 6,900,000 (unindicated) ["Mombasa"] = {container = "Kenya"}, -- 1,370,000 (City) ["Monrovia"] = {container = "Liberia"}, -- 1,940,000 (Urban Area) ["Tripoli"] = {container = "Libya", wp = "%l, %c"}, -- 1,870,000 (unindicated) ["Antananarivo"] = {container = "Madagascar"}, -- 3,150,000 (Agglomeration) ["Lilongwe"] = {container = "Malawi"}, -- 1,210,000 (City) ["Bamako"] = {container = "Mali"}, -- 5,700,000 (Agglomeration) ["Nouakchott"] = {container = "Mauritania"}, -- 1,500,000 (City) ["Casablanca"] = {container = {key = "Casablanca-Settat, Morocco", placetype = "region"}}, -- 4,450,000 (Municipality (urban population)) ["Rabat"] = {container = {key = "Rabat-Sale-Kenitra, Morocco", placetype = "region"}}, -- 2,125,000 (Municipality (urban population)) ["Tangier"] = {container = {key = "Tangier-Tetouan-Al Hoceima, Morocco", placetype = "region"}}, -- 1,410,000 (Municipality (urban population)) ["Tanger"] = {alias_of = "Tangier", display = true}, ["Tangiers"] = {alias_of = "Tangier", display = true}, ["Fez"] = {container = {key = "Fez-Meknes, Morocco", placetype = "region"}, wp = "%l, Morocco"}, -- 1,310,000 (Municipality (urban population)) ["Fes"] = {alias_of = "Fez", display = true}, ["Fès"] = {alias_of = "Fez", display = true}, ["Agadir"] = {container = {key = "Souss-Massa, Morocco", placetype = "region"}}, -- 1,270,000 (Municipality (urban population)) ["Marrakesh"] = {container = {key = "Marrakesh-Safi, Morocco", placetype = "region"}}, -- 1,140,000 (Municipality (urban population)) ["Marrakech"] = {alias_of = "Marrakesh", display = true}, ["Maputo"] = {container = "Mozambique"}, -- 2,575,000 (Agglomeration) ["Niamey"] = {container = "Niger"}, -- 1,530,000 (City) ["Brazzaville"] = {container = "Republic of the Congo"}, -- 2,475,000 (Agglomeration) ["Pointe-Noire"] = {container = "Republic of the Congo"}, -- 1,480,000 (City) ["Kigali"] = {container = "Rwanda"}, -- 1,960,000 (Municipality (urban population)) ["Dakar"] = {container = "Senegal"}, -- 4,225,000 (Agglomeration) ["Touba"] = {container = "Senegal"}, -- 1,320,000 (Agglomeration) ["Freetown"] = {container = "Sierra Leone"}, -- 1,420,000 (Agglomeration) ["Mogadishu"] = {container = "Somalia"}, -- 2,250,000 (unindicated; population of low reliability) ["Johannesburg"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 14,800,000 (Consolidated Urban Area; including Pretoria, Soweto, etc.) ["Cape Town"] = {container = {key = "Western Cape, South Africa", placetype = "province"}}, -- 5,100,000 (Consolidated Urban Area) ["Durban"] = {container = {key = "KwaZulu-Natal, South Africa", placetype = "province"}}, -- 3,900,000 (Consolidated Urban Area) ["Pretoria"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 2,921,488 (2011 census) ["Port Elizabeth"] = {container = {key = "Eastern Cape, South Africa", placetype = "province"}, wp = "Gqeberha"}, -- 1,200,000 (Consolidated Urban Area) ["Gqeberha"] = {alias_of = "Port Elizabeth"}, -- official name; not a display alias ["Khartoum"] = {container = "Sudan"}, -- 7,200,000 (unindicated; population of low reliability) ["Dar es Salaam"] = {container = "Tanzania"}, -- 6,650,000 (Agglomeration) ["Mwanza"] = {container = "Tanzania"}, -- 1,340,000 (Agglomeration) ["Mwanza City"] = {alias_of = "Mwanza", display = true}, ["Arusha"] = {container = "Tanzania"}, -- 1,190,000 (Agglomeration) ["Zanzibar"] = {container = "Tanzania"}, -- 1,030,000 (Agglomeration) ["Lomé"] = {container = "Togo"}, -- 2,625,000 (unindicated) ["Lome"] = {alias_of = "Lomé", display = true}, ["Tunis"] = {container = "Tunisia"}, -- 2,725,000 (Municipality (urban population)) ["Sousse"] = {container = "Tunisia"}, -- 1,180,000 (Municipality (urban population)) ["Soussa"] = {alias_of = "Sousse", display = true}, ["Kampala"] = {container = "Uganda"}, -- 4,300,000 (unindicated) ["Lusaka"] = {container = "Zambia"}, -- 3,000,000 (Consolidated Urban Area) ["Harare"] = {container = "Zimbabwe"}, -- 2,675,000 (Agglomeration) ------------------ Asia ------------------- -- sorted by country and then within the country, by decreasing population; figures from citypopulation.de -- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated. ["Kabul"] = {container = "Afghanistan"}, -- 5,250,000 (Agglomeration) ["Baku"] = {container = "Azerbaijan"}, -- 3,725,000 (Administrative Area (urban population)) ["Manama"] = {container = "Bahrain"}, -- 1,560,000 (unindicated) ["Dhaka"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 23,100,000 (Agglomeration) ["Dacca"] = {alias_of = "Dhaka", display = true}, ["Chittagong"] = {container = {key = "Chittagong Division, Bangladesh", placetype = "division"}}, -- 5,050,000 (Agglomeration) ["Gazipur"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 2,674,697 (City per 2022; countied in citypopulation.de as part of Dhaka metro area) ["Khulna"] = {container = {key = "Khulna Division, Bangladesh", placetype = "division"}}, -- 1,210,000 (Agglomeration) ["Phnom Penh"] = {container = "Cambodia"}, -- 2,925,000 (Agglomeration) ["Tehran"] = {container = {key = "Tehran Province, Iran", placetype = "province"}}, -- 16,800,000 (Agglomeration) ["Teheran"] = {alias_of = "Tehran", display = true}, ["Mashhad"] = {container = {key = "Razavi Khorasan Province, Iran", placetype = "province"}}, -- 3,475,000 (Agglomeration) ["Mashad"] = {alias_of = "Mashhad", display = true}, ["Meshhed"] = {alias_of = "Mashhad", display = true}, ["Meshed"] = {alias_of = "Mashhad", display = true}, ["Isfahan"] = {container = {key = "Isfahan Province, Iran", placetype = "province"}}, -- 3,425,000 (Agglomeration) ["Esfahan"] = {alias_of = "Isfahan", display = true}, ["Tabriz"] = {container = {key = "East Azerbaijan Province, Iran", placetype = "province"}}, -- 1,970,000 (Agglomeration) ["Shiraz"] = {container = {key = "Fars Province, Iran", placetype = "province"}}, -- 1,950,000 (Agglomeration) ["Ahvaz"] = {container = {key = "Khuzestan Province, Iran", placetype = "province"}}, -- 1,550,000 (Agglomeration) ["Qom"] = {container = {key = "Qom Province, Iran", placetype = "province"}}, -- 1,450,000 (City) ["Kermanshah"] = {container = {key = "Kermanshah Province, Iran", placetype = "province"}}, -- 1,130,000 (City) ["Baghdad"] = {container = "Iraq"}, -- 7,800,000 (Administrative Area (urban population)) ["Basra"] = {container = "Iraq"}, -- 1,710,000 (Administrative Area (urban population)) ["Mosul"] = {container = "Iraq"}, -- 1,550,000 (Administrative Area (urban population)) ["Erbil"] = {container = "Iraq"}, -- 1,220,000 (Administrative Area (urban population)) ["Kirkuk"] = {container = "Iraq"}, -- 1,160,000 (Administrative Area (urban population)) ["Najaf"] = {container = "Iraq"}, -- 1,050,000 (Administrative Area (urban population)) ["Tel Aviv"] = {container = "Israel"}, -- 3,000,000 (Agglomeration) -- Jerusalem is not recognized internationally as part of either Israel or Palestine, but as a -- [[w:corpus separatum]], so put the container as "Asia" and list Israel and Palestine as additional parents for -- categorization purposes. ["Jerusalem"] = {container = {key = "Asia", placetype = "continent"}, addl_parents = {"Israel", "Palestine"}}, -- 1,080,000 (Agglomeration) ["Amman"] = {container = "Jordan"}, -- 6,150,000 (unindicated) ["Irbid"] = {container = "Jordan"}, -- 1,070,000 (unindicated) ["Almaty"] = {container = "Kazakhstan"}, -- 2,700,000 (Agglomeration) ["Alma-Ata"] = {alias_of = "Almaty"}, -- former name, sometimes still used; don't display-canonicalize ["Astana"] = {container = "Kazakhstan"}, -- 1,600,000 (Agglomeration) ["Shymkent"] = {container = "Kazakhstan"}, -- 1,370,000 (Agglomeration) ["Kuwait City"] = {container = "Kuwait"}, -- 5,050,000 (Agglomeration) ["Bishkek"] = {container = "Kyrgyzstan"}, -- 1,540,000 (Agglomeration) ["Beirut"] = {container = "Lebanon"}, -- 1,930,000 (unindicated; population of low reliability) -- Kuala Lumpur is a federal capital city, not in any state ["Kuala Lumpur"] = {container = "Malaysia"}, -- 9,550,000 (Agglomeration) -- there are various George Towns and Georgetowns ["George Town, Malaysia"] = {container = {key = "Penang, Malaysia", placetype = "state"}, wp = "%l, %c"}, -- 2,075,000 (Agglomeration) ["George Town"] = {alias_of = "George Town, Malaysia"}, ["Ulaanbaatar"] = {container = "Mongolia"}, -- 1,610,000 (City) ["Ulan Bator"] = {alias_of = "Ulaanbaatar", display = true}, ["Yangon"] = {container = "Myanmar"}, -- 5,650,000 (Municipality (urban population)) ["Rangoon"] = {alias_of = "Yangon", display = true}, ["Mandalay"] = {container = "Myanmar"}, -- 1,600,000 (Municipality (urban population)) ["Kathmandu"] = {container = "Nepal"}, -- 3,175,000 (Agglomeration) -- Pyongyang is a directly governed city, not in any province ["Pyongyang"] = {container = "North Korea"}, -- 3,025,000 (Administrative Area (urban population)) ["Muscat"] = {container = "Oman"}, -- 1,620,000 (Agglomeration) ["Gaza"] = {container = "Palestine", wp = "Gaza City"}, -- 2,275,000 (unindicated) ["Gaza City"] = {alias_of = "Gaza"}, ["Doha"] = {container = "Qatar"}, -- 2,650,000 (Agglomeration) ["Colombo"] = {container = "Sri Lanka"}, -- 4,975,000 (unindicated) ["Damascus"] = {container = "Syria"}, -- 3,975,000 (unindicated; population of low reliability) ["Aleppo"] = {container = "Syria"}, -- 1,980,000 (unindicated; population of low reliability) ["Dushanbe"] = {container = "Tajikistan"}, -- 1,270,000 (City) ["Bangkok"] = {container = "Thailand"}, -- 21,800,000 (Agglomeration) -- Chiang Mai not in citypopulation.de, but 1,198,000 urban population in 2021 per Wikipedia -- [[w:List_of_municipalities_in_Thailand#Largest_cities_by_urban_population]] ["Chiang Mai"] = {container = {key = "Chiang Mai Province, Thailand", placetype = "province"}}, ["Chonburi"] = {container = {key = "Chonburi Province, Thailand", placetype = "province"}}, -- 1,570,000 (Agglomeration; including Pattaya) -- metro area population stats from https://www.statista.com/statistics/255483/biggest-cities-in-turkey/ as of 2021; -- second source is citypopulation.de reference date 2025-01-01. ["Istanbul"] = {placetype = {"city", "province"}, divs = {"districts"}, container = "Turkey"}, -- 15.2 million; 16,000,000 (Agglomeration) ["İstanbul"] = {alias_of = "Istanbul", display = true}, ["Ankara"] = {container = {key = "Ankara Province, Turkey", placetype = "province"}}, -- 5.15 million; 5,200,000 (Agglomeration) ["Izmir"] = {container = {key = "İzmir Province, Turkey", placetype = "province"}, wp = "İzmir"}, -- 2.95 million; 3,025,000 (Agglomeration) ["İzmir"] = {alias_of = "Izmir", display = true}, ["Bursa"] = {container = {key = "Bursa Province, Turkey", placetype = "province"}}, -- 2.02 million; 2,200,000 (Agglomeration) ["Adana"] = {container = {key = "Adana Province, Turkey", placetype = "province"}}, -- 1.77 million; 1,780,000 (Agglomeration) ["Gaziantep"] = {container = {key = "Gaziantep Province, Turkey", placetype = "province"}}, -- 1.71 million; 1,750,000 (Agglomeration) ["Antalya"] = {container = {key = "Antalya Province, Turkey", placetype = "province"}}, -- 1.3 million; 1,400,000 (Agglomeration) ["Konya"] = {container = {key = "Konya Province, Turkey", placetype = "province"}}, -- 1.35 million; 1,390,000 (Agglomeration) ["Diyarbakır"] = {container = {key = "Diyarbakır Province, Turkey", placetype = "province"}}, -- 1.07 million; 1,100,000 (Agglomeration) -- Diyarbakır is more common per Ngrams and Google Scholar, but Diyarbakir is the Kurdish form, so we should not -- display-canonicalize to the Turkish form Diyarbakır. ["Diyarbakir"] = {alias_of = "Diyarbakır"}, ["Mersin"] = {container = {key = "Mersin Province, Turkey", placetype = "province"}}, -- 1.03 million; 1,060,000 (Agglomeration) ["Ashgabat"] = {container = "Turkmenistan"}, -- 1,150,000 (Agglomeration) ["Dubai"] = {container = "United Arab Emirates"}, -- 6,050,000 (Agglomeration; including Sharjah) ["Abu Dhabi"] = {container = "United Arab Emirates"}, -- 1,850,000 (City) ["Sharjah"] = {container = "United Arab Emirates"}, -- 1,800,000 (Metro area 2022-2023 per Wikipedia; separate from Dubai) ["Tashkent"] = {container = "Uzbekistan"}, -- 3,850,000 (unindicated) ["Sanaa"] = {container = "Yemen"}, -- 3,275,000 (City; population of low reliability) ["Sana'a"] = {alias_of = "Sanaa", display = true}, ["Aden"] = {container = "Yemen"}, -- 1,079,060 (?; 2023 estimate from World Population Review per Wikipedia) ------------------ Europe or Europe-like (Caucasus etc.) --------------------- ["Yerevan"] = {container = "Armenia"}, -- 1,520,000 (Agglomeration) ["Vienna"] = {container = "Austria"}, -- 2,375,000 (Agglomeration) ["Minsk"] = {container = "Belarus"}, -- 2,100,000 (unindicated) ["Brussels"] = {container = "Belgium"}, -- 2,800,000 (Consolidated Urban Area) ["Antwerp"] = {container = "Belgium"}, -- 1,270,000 (Consolidated Urban Area) ["Sofia"] = {container = "Bulgaria"}, -- 1,260,000 (Agglomeration) ["Zagreb"] = {container = "Croatia"}, ["Prague"] = {container = "Czech Republic"}, -- 1,470,000 (Agglomeration) ["Brno"] = {container = "Czech Republic"}, -- 729,405 (metro area per Wikipedia as of 2024-01-01 Czech Statistical Office) ["Olomouc"] = {container = "Czech Republic"}, -- 102,293 (city; included only because someone went crazy creating Olomouc-related terms) ["Copenhagen"] = {container = "Denmark"}, -- 1,800,000 (Consolidated Urban Area) ["Helsinki"] = {container = {key = "Uusimaa, Finland", placetype = "region"}}, -- 1,560,000 (Consolidated Urban Area) ["Tbilisi"] = {container = "Georgia"}, -- 1,430,000 (Agglomeration) ["Athens"] = {container = "Greece"}, ["Thessaloniki"] = {container = "Greece"}, ["Budapest"] = {container = "Hungary"}, -- FIXME, per Wikipedia "County Dublin" is now the "Dublin Region" ["Dublin"] = {container = {key = "County Dublin, Ireland", placetype = "county"}}, ["Riga"] = {container = "Latvia"}, ["Amsterdam"] = {container = {key = "North Holland, Netherlands", placetype = "province"}}, ["Rotterdam"] = {container = {key = "South Holland, Netherlands", placetype = "province"}}, ["The Hague"] = {container = {key = "South Holland, Netherlands", placetype = "province"}}, -- Christchurch (metro 546,600) and Wellington (metro 439,800) are too small to make it. ["Auckland"] = {container = {key = "Auckland, New Zealand", placetype = "region"}}, ["Oslo"] = {container = {key = "Oslo, Norway", placetype = "county"}}, ["Warsaw"] = {container = {key = "Masovian Voivodeship, Poland", placetype = "voivodeship"}}, ["Katowice"] = {container = {key = "Silesian Voivodeship, Poland", placetype = "voivodeship"}}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Krakow" without accent. ["Krakow"] = {container = {key = "Lesser Poland Voivodeship, Poland", placetype = "voivodeship"}, wp = "Kraków"}, ["Kraków"] = {alias_of = "Krakow", display = true}, ["Cracow"] = {alias_of = "Krakow", display = true}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirm "Gdańsk" and "Poznań" with accent. ["Gdańsk"] = {container = {key = "Pomeranian Voivodeship, Poland", placetype = "voivodeship"}}, ["Gdansk"] = {alias_of = "Gdańsk", display = true}, ["Poznań"] = {container = {key = "Greater Poland Voivodeship, Poland", placetype = "voivodeship"}}, ["Poznan"] = {alias_of = "Poznań", display = true}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Lodz" without accents. ["Lodz"] = {container = {key = "Lodz Voivodeship, Poland", placetype = "voivodeship"}, wp = "Łódź"}, ["Łódź"] = {alias_of = "Lodz", display = true}, ["Lisbon"] = {container = {key = "Lisbon District, Portugal", placetype = "district"}}, ["Porto"] = {container = {key = "Porto District, Portugal", placetype = "district"}}, ["Oporto"] = {alias_of = "Porto", display = true}, ["Bucharest"] = {container = "Romania"}, ["Belgrade"] = {container = "Serbia"}, ["Stockholm"] = {container = "Sweden"}, ["Zurich"] = {container = "Switzerland"}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Zurich" without umlaut. --- Even Wikipedia uses the form without umlaut. ["Zürich"] = {alias_of = "Zurich", display = true}, ["Kyiv"] = {container = "Ukraine"}, -- not in Kyiv Oblast -- Don't display-canonicalize Kiev -> Kyiv because in ancient contexts, Kiev is still more common. ["Kiev"] = {alias_of = "Kyiv"}, ["Kharkiv"] = {container = {key = "Kharkiv Oblast, Ukraine", placetype = "oblast"}}, ["Odessa"] = {container = {key = "Odesa Oblast, Ukraine", placetype = "oblast"}, wp = "Odesa"}, -- Don't display-canonicalize Odesa -> Odessa because it may be interpreted as a political statement. ["Odesa"] = {alias_of = "Odessa"}, ------------------ North America, South America --------------------- -- Primary figures from citypopulation.de retrieved on 2025-04-26 (reference date 2025-01-01); -- Wikipedia metropolitan figures from [[w:List of metropolitan areas in the Americas]] based on per-country data; -- Wikipedia city limits figures from [[w:List of largest cities in the Americas]]. ["Buenos Aires"] = {container = "Argentina"}, -- 16,800,000 (Consolidated Urban Area; 13,985,794 metropolitan area per Wikipedia) ["Córdoba, Argentina"] = {container = "Argentina", wp = "%l, %c"}, -- 1,810,000 (Consolidated Urban Area; 1,505,25 city limits per Wikipedia) -- to avoid confusion with Córdoba in Spain ["Córdoba"] = {alias_of = "Córdoba, Argentina"}, ["Cordoba"] = {alias_of = "Córdoba, Argentina", display = "Córdoba"}, ["Rosario"] = {container = "Argentina", wp = "%l, Santa Fe"}, -- 1,510,000 (Consolidated Urban Area; 1,348,725 metropolitan area per Wikipedia) ["Mendoza"] = {container = "Argentina", wp = "%l, %c"}, -- 1,180,000 (Consolidated Urban Area) ["San Miguel de Tucumán"] = {container = "Argentina"}, -- 1,110,000 (Consolidated Urban Area) ["Tucumán"] = {alias_of = "San Miguel de Tucumán"}, ["Tucuman"] = {alias_of = "San Miguel de Tucumán", display = "Tucumán"}, ["Santa Cruz de la Sierra"] = {container = "Bolivia"}, -- 1,960,000 (Consolidated Urban Area); 1,606,671 (city limits per Wikipedia) ["Santa Cruz"] = {alias_of = "Santa Cruz de la Sierra"}, ["La Paz"] = {container = "Bolivia"}, -- 1,870,000 (Consolidated Urban Area; composed of El Alto, now slightly larger, and La Paz) ["El Alto"] = {container = "Bolivia"}, ["Cochabamba"] = {container = "Bolivia"}, -- 1,280,000 (Consolidated Urban Area) ["Santiago"] = {container = "Chile"}, -- 8,400,000 (Consolidated Urban Area; 6,903,479 city limits? per Wikipedia) ["Valparaíso"] = {container = "Chile"}, -- 1,060,000 (Consolidated Urban Area) ["Valparaiso"] = {alias_of = "Valparaíso"}, -- 1,060,000 (Consolidated Urban Area) ["Bogotá"] = {container = "Colombia"}, -- 10,600,000 (Agglomeration; 12,772,828 metropolitan area per Wikipedia) ["Bogota"] = {alias_of = "Bogotá", display = true}, ["Medellín"] = {container = "Colombia"}, -- 4,350,000 (Agglomeration; 4,068,000 metropolitan area per Wikipedia) ["Medellin"] = {alias_of = "Medellín", display = true}, ["Cali"] = {container = "Colombia"}, -- 2,975,000 (Agglomeration; 2,837,000 metropolitan area per Wikipedia) ["Barranquilla"] = {container = "Colombia"}, -- 2,375,000 (Agglomeration; 1,341,160 city limits per Wikipedia) ["Bucaramanga"] = {container = "Colombia"}, -- 1,380,000 (Agglomeration) ["Cartagena, Colombia"] = {container = "Colombia", wp = "%l, %c"}, -- 1,250,000 (Agglomeration) -- to avoid confusion with Cartagena, Spain ["Cartagena"] = {alias_of = "Cartagena, Colombia"}, ["Cúcuta"] = {container = "Colombia"}, -- 1,130,000 (Agglomeration) ["Cucuta"] = {alias_of = "Cúcuta", display = true}, -- to avoid conflict with San Jose, California ["San José, Costa Rica"] = {container = "Costa Rica", wp = "%l, %c"}, -- 2,450,000 (Municipality (urban population); 3,160,000 metropolitan area per Wikipedia) ["San José"] = {alias_of = "San José, Costa Rica"}, ["San Jose"] = {alias_of = "San José, Costa Rica"}, -- display = "San José"; causes error due to San Jose alias for California city; FIXME ["Havana"] = {container = "Cuba"}, -- 2,150,000 (City; 2,137,847 city limits? per Wikipedia) ["Santo Domingo"] = {container = "Dominican Republic"}, -- 3,900,000 (Municipality (urban population); 4,274,651 ??? per Wikipedia) ["Guayaquil"] = {container = "Ecuador"}, -- 3,350,000 (Agglomeration; 3,092,000 metro area? per Wikipedia) ["Quito"] = {container = "Ecuador"}, -- 2,875,000 (Agglomeration; 2,889,703 metro area? per Wikipedia) ["San Salvador"] = {container = "El Salvador"}, -- 1,580,000 (Municipality (urban population)) ["Guatemala City"] = {container = "Guatemala"}, -- 3,375,000 (Municipality (urban population); 3,160,000 metro area? per Wikipedia) ["Port-au-Prince"] = {container = "Haiti"}, -- 3,050,000 (Agglomeration; population of low reliability; 2,915,000 metro area? per Wikipedia) ["San Pedro Sula"] = {container = "Honduras"}, -- 1,330,000 (Consolidated Urban Area) ["Tegucigalpa"] = {container = "Honduras"}, -- 1,220,000 (Urban Area) ["Managua"] = {container = "Nicaragua"}, -- 1,400,000 (Consolidated Urban Area) ["Panama City"] = {container = "Panama"}, -- 1,430,000 (Urban Area) ["Asunción"] = {container = "Paraguay"}, -- 2,350,000 (Municipality (urban population)) ["Lima"] = {container = "Peru"}, -- 12,000,000 (Agglomeration; 11,283,787 ??? per Wikipedia) ["Arequipa"] = {container = "Peru"}, -- 1,210,000 (Agglomeration) ["San Juan"] = {container = {key = "Puerto Rico", placetype = "commonwealth"}, wp = "%l, %c"}, -- 1,910,000 (Consolidated Urban Area) ["Montevideo"] = {container = "Uruguay"}, -- 1,810,000 (Agglomeration; 1,302,954 ??? per Wikipedia) ["Caracas"] = {container = "Venezuela"}, -- 3,850,000 (Consolidated Urban Area; 5,243,301 ??? per Wikipedia) ["Maracaibo"] = {container = "Venezuela"}, -- 2,825,000 (Consolidated Urban Area; 5,278,448 ??? per Wikipedia) -- to avoid confusion with Valencia (city and autonomous community of Spain) ["Valencia, Venezuela"] = {container = "Venezuela", wp = "%l, %c"}, -- 2,100,000 (Consolidated Urban Area) ["Valencia"] = {alias_of = "Valencia, Venezuela"}, ["Maracay"] = {container = "Venezuela"}, -- 1,480,000 (Consolidated Urban Area) ["Barquisimeto"] = {container = "Venezuela"}, -- 1,360,000 (Consolidated Urban Area) } export.misc_cities_group = { canonicalize_key_container = make_canonicalize_key_container(nil, "country"), default_placetype = "city", data = export.misc_cities, } --[==[ var: List of all known locations, in groups. The first group lists continents and continental regions, followed by three groups listing top-level locations: countries, "country-like entities" (de-facto/unrecognized/etc. countries and dependent territories) and former polities (countries, empires, etc.). After that come first-level subpolities (administrative divisions) of several, mostly large, countries, followed by groups of cities. China and the United Kingdom include second-level subpolities (in the case of China, only the largest ones as the full list runs in the hundreds). ]==] export.locations = { export.continents_group, export.countries_group, export.country_like_entities_group, export.former_countries_group, export.australia_group, export.austria_group, export.bangladesh_group, export.brazil_group, export.bulgaria_group, export.canada_group, export.china_group, export.china_prefecture_level_cities_group, export.china_prefecture_level_cities_group_2, export.egypt_group, export.finland_group, export.france_group, export.france_departments_group, export.germany_group, export.greece_group, export.india_group, export.indonesia_group, export.iran_group, export.ireland_group, export.italy_group, export.japan_group, export.laos_group, export.lebanon_group, export.malaysia_group, export.malta_group, export.mexico_group, export.moldova_group, export.morocco_group, export.netherlands_group, export.new_zealand_group, export.nigeria_group, export.north_korea_group, export.norway_group, export.pakistan_group, export.philippines_group, export.poland_group, export.portugal_group, export.romania_group, export.russia_group, export.saudi_arabia_group, export.south_africa_group, export.south_korea_group, export.spain_group, export.taiwan_group, export.thailand_group, export.turkey_group, export.ukraine_group, export.united_kingdom_group, export.united_states_group, export.england_group, export.northern_ireland_group, export.scotland_group, export.wales_group, export.vietnam_group, export.australia_cities_group, export.brazil_cities_group, export.canada_cities_group, export.france_cities_group, export.germany_cities_group, export.india_cities_group, export.indonesia_cities_group, export.italy_cities_group, export.japan_cities_group, export.mexico_cities_group, export.nigeria_cities_group, export.pakistan_cities_group, export.philippines_cities_group, export.russia_cities_group, export.saudi_arabia_cities_group, export.south_korea_cities_group, export.spain_cities_group, export.taiwan_cities_group, export.united_kingdom_cities_group, export.united_states_cities_group, export.new_york_boroughs_group, export.vietnam_cities_group, export.misc_cities_group, } return export q7zgm5ia05hgyefe1narnc9ijh6bh8g 2349928 2349909 2026-05-03T13:52:15Z Hiyuune 50834 2349928 Scribunto text/plain local export = {} export.force_cat = false -- set to true to force category generation even on non-mainspace pages local m_table = require("Module:table") local string_utilities_module = "Module:string utilities" local en_utilities_module = "Module:en-utilities" local insert = table.insert local concat = table.concat local dump = mw.dumpObject local unpack = unpack or table.unpack -- Lua 5.2 compatibility --[==[ intro: This module contains data on all known locations, along with some lower-level code to process them (higher-level known-location code is in [[Module:place/placetypes]]). You must load this module using require(), not using mw.loadData(). ===Location data=== '''NOTE: In order to understand the following better, first read the introductory documentation in [[Module:place]], especially the section `More about known locations`.''' The bulk of the code in this module (after some helper functions and placetype tables) describes the known locations and their relationships. Locations are grouped into ''location groups'' that share some common properties (examples are states of the United States and cities in Brazil). Each location group is associated with two tables, a ''data table'' that lists the locations and their individual properties, and a ''metadata table'' that lists group-level properties and defaults for the location properties. Each metadata table points to the associated data table (i.e. contains the data table as its `data` field), and the global `locations` variable holds a list of all group metadata tables. A given location is generally described by three values: (a) the group metadata table for the group the location is part of; (b) the location's canonical ''key'', which is the actual key in the group's data table and is globally unique across all locations; and (c) the location's ''spec'', which is the initialized object describing the properties of the location and comes from the value in the data table corresponding to the canonical key, transformed by the `initialize_spec()` function. These are typically named `group`, `key` and `spec`, respectively and in that order, and are found in the arguments to many functions. In a per-group data table, the keys are either ''canonical keys'' describing locations (which, as mentioned above, must be globally unique) or ''alias keys'' specifying an allowed alias for a given location. There may be multiple aliases for a given location and the alias keys only need to be unique within a particular group data table, not across all groups. It is also possible for the same string to serve as an alias key in one group and a canonical key in another group. (For example, `Newcastle` appears as an alias key in two different groups, referring to two different locations, canonically known as `Newcastle upon Tyne`, for the city in England, and `Newcastle, New South Wales`, for the city in New South Wales, Australia; and `Birmingham` appears both as a canonical key in the group of English cities and an alias key for canonical `Birmingham, Alabama` in the group of US cities.) The corresponding value objects are different for canonical and alias keys. Corresponding to canonical keys are ''location specs'', describing the properies of the location that cannot be derived from default properties of the group or global defaults. Corresponding to alias keys are ''alias specs'', which are highly restricted in the properties they can contain, and whose properties do not have per-group defaults, but only global defaults. The canonical key is always the same as the bare category corresponding to the location, which is one of the reasons it must be globally unique. For example, the country of Georgia uses the canonical key `Georgia` and corresponding bare category [[:Category:Georgia]], while the US state of Georgia uses the canonical key `Georgia, USA` and corresponding bare category [[:Category:Georgia, USA]]. The following conventions are followed in naming keys: * Countries, ''country-like entities'' (which are a mixture of unrecognized de-facto states and dependent territories) and ''former countries'' (which also includes other types of polities, such as the Roman Empire) use their unqualified placename as the canonical key. (See the documentation for [[Module:place]] for the distinction between keys and placenames, which is critical to understand when working with location data.) This also applies to constituent countries (such as England, Aruba and the Faroe Islands) and constituent parts of grouped dependent territories (such as the island of Saint Helena, which is administratively part of the British overseas territory of Saint Helena, Ascension and Tristan da Cunha). * Cities (including prefecture-level cities in China, which behave in most respects more like non-city administrative divisions) also normally use their unqualified placename as the canonical key, but if this causes name conflicts or ambiguities, they use a ''qualified key'' containing either the country name or immediate containing division (if different) following a comma, such as the case of `Newcastle, New South Wales` and `Birmingham, Alabama` above. Examples of name conflicts are the two cities just given; examples of ambiguities are the major cities of León and Mérida in Mexico and city of Cartagena, Colombia, which are given the respective canonical keys of `León, Guanajuato`, `Mérida, Yucatán` and `Cartagena, Colombia` to avoid ambiguity with the well-known respective cities of the same name in Spain, even though none of those cities are large enough to be included as known locations in this module. (The cutoff is generally having a metro area of at least 1,000,000 inhabitants, although there are exceptions.) * Administrative divisions of countries, other than the exceptions noted above for constituent countries and dependent territories, use a qualified key that contains the name of the country or constituent country in it, e.g. `Normandy, France` (a region), `Calvados, France` (a department in the region of Normandy), `Herefordshire, England` (a ceremonial county), `Northwest Territories, Canada` (a territory), `Central Finland, Finland` (a region), `Antalya Province, Turkey` (a province), `Cluj County, Romania` (a county), `County Cork, Ireland` (a county) and `New York, USA` (a state). As shown in these various examples, (a) first and second-level divisions are sometimes both included (as in France, the United Kingdom and China); (b) the qualifier after the comma is sometimes a constituent country (England) instead of a country (United Kingdom), and is sometimes abbreviated (USA rather than United States or Unites States of America); (c) the word `the` is not normally included in the key even if the location is normally preceded by `the` when following a preposition (there is a property in the location and alias specs to indicate this), except in a very few cases (most notably `The Hague`); (d) the country is included as a qualifier even if it creates an apparent redundancy, as with `Central Finland, Finland`; and (e) sometimes the placetype is included in the key, as with provinces in Turkey and several other countries; states in Nigeria; and counties in Ireland, Romania and several other countries. Whether the placetype is included, and whether it follows or precedes the placename, depends on per-country conventions. For example, provinces in Turkey, Iran and several other countries (likewise for states in Nigeria, oblasts in Russia, etc.) conventionally include the word "Province", "State", "Oblast" etc. in their name because they are normally named after the largest city in the division, which would otherwise lead to ambiguity; and counties in Ireland and Northern Ireland (and likewise County Durham, England) normally have the word "County" preceding rather than following them in their conventional name, so we follow this practice. The Wikipedia article naming scheme for a given administrative division is a strong clue as to how the division is normally referred to, and we usually follow this practice. (A minor exception is that the Wikipedia articles for provinces in Iran, Laos and Thailand include the word `province` with an initial lowercase letter while provinces elsewhere, e.g. North and South Korea, Saudi Arabia and Turkey, use uppercase `Province`; we normalize to uppercase `Province` in all cases.) As mentioned above, associated with canonical keys in the group data table are location specs, which are objects containing properties. It is important here to distinguish ''initialized specs'' from ''uninitialized specs''. Unininitialized specs are as directly specified in [[Module:place/locations]], containing only those properties that differ from the per-group or global defaults. Initialized specs result from calling `initialize_spec()` on an uninitialized spec (it is idempotent in that it will do nothing if encountering an already-initialized spec). This copies all group-level defaults that are not overridden in the location spec itself from the group-level metadata table into the location spec, so that in general, no more reference need be made to the group to fetch the correct value of a given location property. (The initialization process also does more transformations in a few cases, noted below.) Note that the default value of a given property is stored under a key in the group metadata table that is preceded by the string `default_`; for example, the default value corresponding to the `placetype` property of a given location is specified in the `default_placetype` key in the group metadata table. The following are the properties of the location spec. * `placetype`: String specifying the placetype of the location (e.g. "country", "state", province"). This can also be a table of such types; in this case, the first listed type is the canonical type that will be used in descriptions, but the location will be recognized (e.g. in a holonym, or for categorizing into the bare category) when tagged with any of the specified types. The placetype '''must''' be either specified on an individual location or defaulted at the group level, or an error occurs. * `container`: Either a string, a ''canonicalized container'' structure or a list of either type, specifying the immediate ''container'' (or containers) of the given location. A container is another location which this location is considered to be directly part of, either politically or (above the country level) geographically. Some locations belong to multiple immediate containers; this applies especially to transcontinental countries such as Russia and Turkey. Containers can themselves have containers, forming a tree (or more correctly, a [[w:directed acyclic graph]]) of locations. The list of immediate container(s), followed by the container(s) of the container(s), etc., is termed the ''container trail'', and some functions compute and return this trail as part of their operation. When a location spec is initialized, the given container spec is canonicalized into ''canonical container form'', which consists of a list of canonicalized container structures, each of which is of the form `{key = "``container_key``", placetype = "``container_placetype``"}`, where ``container_key`` is a canonical location key and ``container_placetype`` should be the listed placetype for the location, or the first listed placetype if there are multiple. (FIXME: Since the key uniquely identifies the container location, we should eliminate the placetype from the container structure.) The list of canonicalized container structures is stored into the `.containers` field of the location spec (this happens even if the container value is unset in its uninitialized spec form, causing it to default to the corresponding group-level value), and the `.container` field is set to {nil}. The canonicalization process is described in more detail below under [[#Container spec canonicalization]]. * `divs`: List of recognized political divisions; e.g. for the Netherlands, a specification of the form `divs = {"provinces", "municipalities"}` will allow categories such as [[:Category:de:Provinces of the Netherlands]] and [[:Category:pt:Municipalities of the Netherlands]] to be created. Any division that appears here must also be found in `placetype_data`, or an error occurs. The entities appearing in the `divs` list can be structures as well as just strings; this is explained more below under [[#Location divisions]]. Additional political divisions that apply to all locations in a group can be specified at the group level using the group-only property `addl_divs`, which has the same format as `divs`. This is intended to be used in the situation where some division types are shared among all locations in the group and others differ from location to location. An example where this is used is the United States, where `census-designated places` is specified in the group-level `addl_divs` so that all 50 states have census-designated places categorized as e.g. [[:Category:Census-designated places in Arizona, USA]], but `counties` and `county seats` are specified in the group-level `default_divs` because not all states have counties and county seats (Alaska has boroughs and borough seats and Louisiana has parishes and parish seats), and some states have additional divisions (New Jersey and Pennsylvania also have boroughs, while Colorado and Connecticut have municipalities). Note that under most circumstances (particularly, if `container_parent_type` is not set as a property associated with the division type), any division type specified on a sub-country-level location must also be specified on all containers up through the country. For example, since French departments specify `communes` and `municipalities` in `default_divs`, the same division types must be (and are) specified on French regions and for France itself. * `keydesc`: String directly specifying a description of the location, for use in generating the contents of category pages related to the location. In place of a string, a function of three arguments (`group`, `key`, `spec`, as is normal for locations) that computes the location description can also be given. This is used, for example, for Russian federal subjects; see `construct_russia_federal_subject_keydesc`. The special string `+++` contained in the keydesc is replaced with the default value of the location description, which specifies the location's placename, placetype, and the corresponding values for each container in the container trail, generally up through (but not beyond) the country level; see `no_include_container_in_desc` below. The location description is used to construct the full description of various categories, such as bare location categories, whose description generally reads `"{{(((}}langname}}} terms related to the people, culture, or territory of ``keydesc``."` where ``keydesc`` is the specified or auto-constructed location description. * `fulldesc`: String overriding the full description for the bare location category (but not for any other category). This is currently used only for the location `Earth`, at the very top of the tree (because the standard `people, culture or territory of ...` text doesn't make sense here), and for `Antarctica` (because it has no permanent inhabitants). FIXME: This should be renamed `bare_category_fulldesc`. * `addl_parents`: Specify additional parents for the bare location category, in addition to the category or categories generated based on the immediate container(s). For example, `Hawaii, USA` specifies `Polynesia` as an additional parent category; both `North Korea` and `South Korea` specify `Korea` (which is a specially handled location category) as an additional parent; and `Earth` specifies `nature` (not a location category, but still a topic category) as an additional parent (which in this case becomes the first parent, as `Earth` has no container). The only restriction on the categories in `addl_parents` is that they must be topic categories, because each language-specific version of the bare location category gets the corresponding language-specific versions of the categories in `addl_parents`. FIXME: This shoudl be renamed `bare_category_addl_parents`. * `wp`: Spec describing how to construct the Wikipedia article for the location. Each spec is either `true` (equivalent to `"%l"`, i.e. use the full location placename directly) or a string containing formatting directives, indicating how to construct the article name. The allowed formatting directives are `%l` (the full location placename), `%e` (the elliptical location placename) and `%c` (the full placename of the first immediate container). For example, the default value of `wp` for the group of United States cities is `"%l, %c"` since the city articles tend to be named e.g. `Austin, Texas` (but with many exceptions, specified using `wp` fields at the city level). Another example is Thai provinces, which specify a group-level default of `"%e province"` as the Wikipedia articles have lowercase `province` in their name but the Thai province keys specified in this module have uppercase `Province`. Here we have to use `%e` to get the placename without the word `Province` in it. The default is `true`, which simply uses the full location placename as the article name. Note that the Wikipedia article, along with the Wikipedia and Commons category pages, are shown in the upper right of bare category pages. * `wpcat`: Spec describing how to construct the Wikipedia category page for the location (i.e. the page listing articles and categories relevant to the location). The format is the same as with `wp`, and it defaults to the value of `wp`. It rarely needs to be specified because the category page and the article page almost always follow the same format. * `commonscat`: Spec describing how to construct the Commons category page for the location (i.e. the page on the MediaWiki Commons site listing articles and categories relevant to the location). It has the same format as `wp` and `wpcat` and defaults to `wpcat`, which is usually (but not always) correct. * `the`: Boolean specifying whether a location should be preceded by `the` when following a preposition, e.g. in category names such as [[:Category:Cities in the Northern Territory, Australia]] and in old-style place descriptions when the location occurs as the first holonym, such as the city [[Darwin]] described using {{tl|place|city|terr/Northern Territory|c/Australia}}. Note that the global default for this and all Boolean properties is {nil}, which amounts to the same as {false}. * `british_spelling`: Boolean indicating whether the location in question uses British spelling. Currently this only affects whether the spelling `neighborhoods` or `neighbourhoods` is used in categories such as [[:Category:Neighborhoods of New York City]] and [[:Category:Neighbourhoods of Sydney]]. This usually needs to be set only at the top level (i.e. country or country-like entity), because lower-level entities look up the container trail for any container that has `british_spelling = true` set, and if found, assume that British spelling applies. The general principle used in setting this is that all countries in Europe, all dependent territories of any such country, all former British colonies, and any dependent territories of these former colonies, are assumed to use British spelling, while all other countries and associated dependent territories are assumed to use American spelling. This can potentially be modified on a case-by-case basis. * `is_city`: Boolean indicating whether the location in question is a city. This is explicitly set to `true` for city-states (e.g. Monaco and Vatican City), dependent territories that are cities (e.g. Hong Kong, Macau, Bonaire, Gibraltar, etc.), certain city-level administrative divisions (such as `City of Belfast, Northern Ireland`) and (through a group-levell setting) New York boroughs. In addition, it is set to `true` in initialize_spec() whenever the group-level `default_placetype == "city"`, so that all cities get it set without explicitly needing to add a group-level setting for this. Note that the condition `default_placetype == "city"` intentionally excludes Chinese prefecture-level cities, which aren't really cities in that (for example) they don't directly contain neighborhoods, but do contain cities within them. This setting is used in various places: (a) to add cities, rivers, etc. to categories like [[:Category:Rivers in Osaka Prefecture, Japan]] and [[:Category:Cities in Wuhan]] for holonyms that are ''not'' cities; (b) to add districts, neighborhoods, and the like to categories like [[:Category:Neighborhoods of Brooklyn]] and [[:Category:Neighborhoods of Monaco]] for holoynms that ''are'' cities; (c) generally, to determine which "generic" placetypes (cities, rivers, neighborhoods, etc.) apply to the location. (Those that can occur with cities have a `generic_before_cities` setting in [[Module:place/placetypes]], and those that can occur with non-cities have a `generic_before_non_cities` setting.) * `is_former_place`: Boolean that should be set on former places such as the Soviet Union and the Roman Empire. For such places, categories such as [[:Category:fr:Rivers in the Soviet Union]] are neither generated nor recognized (more generally, no "generic" placetypes apply except for `places`), and category descriptions include the word `former`. * `overriding_bare_label_parents`: Document me! * `bare_category_parent_type`: Document me! * `no_container_cat`: Document me! * `no_container_parent`: Document me! * `no_generic_place_cat`: Document me! * `no_check_holonym_mismatch`: Document me! * `no_auto_augment_container`: Document me! * `no_include_container_in_desc`: Document me! ====Location divisions==== The `divs` field of a location describes the recognized political division types of that location. Specifying a given division type will cause places defined as being of the specified division type and with the location as a holonym will cause the place to be categorized as ` ``placetypes`` in/of ``location`` `; for example, specifying that the United States has `"states"` as a division will cause anything defined as {{tl|place|fr|state|c/US}} to be categorized under [[:Category:fr:States of the United States]]. Note that you do not have to explicitly specify division types for "generic" placetypes (those that have a `generic_before_non_cities` field if the location is not a city, or that have a `generic_before_cities` field if the location is a city); this includes things like cities, towns, villages, neighbo(u)rhoods and rivers. A given element in the `divs` list is usually a string naming a plural placetype; the placetype is automatically converted to the singular for recognizing the placetype in a {{tl|place}} spec, and irregular plurals such as `kibbutzim` are handled correctly as long as the placetype specifies an appropriate `plural` field (if the `plural` isn't explicitly given, the default singularization algorithm in [[Module:en-utilities]] is run, which gets most things correctly but has problems with `passes` and `fortresses`, which are singularized to `passe` and `fortresse`; for this reason, an explicit plural entry is added to terms in ''-ss''). In place of a string, an object can be given with the plural placetype in the `type` field; this allows additional properties to be specified along with the placetype. An example of this is the `divs` list for Canada: { ["Canada"] = {divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, "counties", "districts", "municipalities", "regional municipalities", "rural municipalities", "parishes", "Indian reserves", "census divisions", {type = "townships", prep = "in"}, }, ...}, } Here, both provinces and territories are set to categorize as `provinces and territories`, meaning that there is a single category [[:Category:Provinces and territories of Canada]] rather than separate categories for provinces and territories. Similar things are done for other countries that have more than one type of first-level administrative division (e.g. Australia, China, India and Pakistan). Note that any placetype listed under `cat_as` must exist in the table of placetypes in [[Module:place/placetypes]], and in fact there is a category-only entry there for `provinces and territories!` (the use of exclamation point following a plural placetype means that the placetype is present only for use in categories and won't be recognized as the placetype field in a {{tl|place}} description). In addition, townships are declared to use `in` rather than `of` as the preposition in the category; hence the category name will be [[:Category:Townships in Canada]] rather than [[:Category:Townships of Canada]]. (The use of `in` vs. `of` is somewhat related to whether a given placetype is an official administrative or statistical division of the location in question and comes in a defined list, in which case `of` should be used, or is more ill-defined, in which case `in` should be used; the default is `of`, and the use of `in` with `townships` is probably by analogy with the use of `in` with cities and towns.) Another more complex example is the divisions given for Quebec: { ["Quebec, Canada"] = {divs = { "counties", {type = "regional county municipalities", container_parent_type = "regional municipalities"}, {type = "regions", container_parent_type = false}, {type = "townships", prep = "in"}, {type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}}, {type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}}, {type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}}, }, ...}, } Here, `container_parent_type` controls the second parent category of the placetype/location category associated with the entry. In this case, for example, [[:Category:Counties of Quebec, Canada]] will have [[:Category:Counties of Canada]] as its second or ''container-level'' parent. However, this doesn't make sense for `regional county municipalities`, which exist only in Quebec (so the parent category [[:Category:Regional county municipalities of Canada]] would have only one subcategory); but they are similar to regional municipalities in British Columbia, Nova Scotia and Ontario, so the `container_parent_type = "regional municipalities"` spec causes the container-level parent of this category to be [[:Category:Regional municipalities of Canada]]. Likewise, `regions` as administrative divisions (as opposed to mere geographic regions) exist only in Quebec; they have no equivalent elsewhere, so we disable the container-level parent using `container_parent_type = false`. The specs for `parish municipalities`, `township municipalities` and `village municipalities` show both that multiple types can be specified under `cat_as` (here, for example, we categorize `parish municipalities` as both `parishes` and `municipalities`) and that these types can themselves have properties, just as for entries directly under `divs`. Specifically, `{type = "parishes", container_parent_type = "counties"}` means that any place defined as a parish municipality in Quebec will be categorized under both [[:Category:Parishes of Quebec, Canada]] and [[:Category:Municipalities of Quebec, Canada]], and that the former will have a container-level parent of [[:Category:Counties of Canada]] (rather than the default of [[:Category:Parishes of Canada]]). Similarly, `township municipalities` will be categorized under both [[:Category:Townships in Quebec, Canada]] (''not'' [[:Category:Townships of Quebec, Canada]]) and [[:Category:Municipalities of Quebec, Canada]]. ====Container spec canonicalization==== A fully canonicalized container spec for a given location consists of a list of ''canonicalized container objects'', each with a `key` and `placetype` field. The `key` field should name the canonical key of some other location at a higher level (e.g. French cities are contained in French departments, which are contained in French regions, which are contained in France, which is contained in Europe, which is contained in Eurasia, which is contained in the Earth). The `placetype` field should correspond to the first (canonical) placetype listed for the key in question. The process of initializing a locaion spec converts the container spec in `.container` into a canonicalized spec in `.containers` and removes the spec from `.container`. It works as follows: # If the `container` field is missing, and there is a group-level `default_container` field, it is used in its place. For example, none of the Brazilian states listed in `brazil_states` specifies a container, but the group specifies `default_container = "Brazil"`. # A single string or canonicalized container object is allowed and made into a one-element list. # If a list element is a string that did ''not'' come from `default_container`, and there is a group-level `canonicalize_key_container` field, it is assumed to be a one-argument function and is called on the string to get a canonicalized container object. # Any remaining strings are assumed to be countries and are used directly as the `key`, with `placetype` set to `"country"`. ====Alias keys==== Aliases can be provided for canonical keys using ''alias keys''. Alias keys have a very different location spec structure from canonical keys. This structure does not, in general, have defaults at the group level and is not initialized using `initialize_spec()`, but is used as-is. The following properties are recognized in an alias location spec: * `alias_of`: The canonical key of which this key is an alias. Required. * `the`: If true, this alias key is preceded by `the` following a preposition. Defaults to the group-level `default_the` but does not pay attention to the value of `the` for the corresponding canonical key. * `display`: This is a display alias, meaning that holonyms using the placename corresponding to this alias will be converted to the placename corresponding to the canonical key when formatting the holonym for display. (Otherwise, the aliasing applies only to categorization.) If the value is true, the display canonicalization is to the placename of the canonical key; otherwise, the value should be a key whose corresponding placename is used when display canonicalizing. * `placetype`: The placetype of the alias. Rarely needs to be specified as it defaults to the canonical key's placetype, and if that is unspecified, to the group-level default placetype. ====Location group metadata tables==== As mentioned above, associated with each location group is a ''metadata table'' listing group-level properties. The metadata table contains two types of keys: group-level defaults (named like the corresponding location-level keys but preceded by `default_`, e.g. `default_placetype` corresponding to the location-level `placetype` key) and group-only keys, which are mostly functions. The following are the possible group-only keys: * `data`: This points to the group data table for the group, as described above. * `key_to_placename`: This is a function of one argument to transform the location's key (whether canonical or alias) into the full and elliptical placenames. The difference between full and elliptical placenames is described in the documentation for [[Module:place]], but in essence, it applies for keys that include the placetype in them (e.g. `Phuket Province, Thailand` or `County Mayo, Ireland`), in which case the full placename includes the placetype and the elliptical placename does not. For keys that do not include the placetype in them (e.g. `Arizona, USA` or `Gloucestershire, England`), the full and elliptical placenames are identical. Note that neither the full nor the elliptical placename includes the container in it; hence, for `Phuket Province, Thailand`, the full placename is `Phuket Province` and the elliptical placename is just `Phuket`. (Note that the full vs. elliptical placename distinction is intended only for handling cases where the placetype follows or precedes the raw placename and there is no difference between the two in whether they are normally preceded by `the`. More complex situations, such as `State of Mexico` (which normally takes `the`) vs. just `Mexico` (which doesn't), or `Islamabad Capital Territory` vs. just `Islamabad`, should be handled instead by aliases.) The `key_to_placename` function takes one argument, the key, and returns two arguments, the full and elliptical placenames, respectively. If left undefined, the default is to chop off anything starting with a comma and return the result as both full and elliptical placename, and if specifically set to `false`, the key is used directly as both full and elliptical placename. If it needs to be defined, it is best to use the helper function `make_key_to_placename`, if possible (or `make_irish_type_key_to_placename` in the case of Ireland and Northern Ireland, where `County` precedes), rather than rolling your own. In addition, you should use the global `key_to_placename` function (which takes care of the default implementation and such) rather than directly calling the function in the `key_to_placename` field. * `placename_to_key`: This is approximately the inverse of `key_to_placename`, transforming a placename (which can be either in full or elliptical form) into the corresponding key. As with `key_to_placename`, if you need to define this (generally, when the full and elliptical placenames are different), prefer using `make_placename_to_key` (or `make_irish_type_placename_to_key` for Ireland and Northern Ireland) to rolling your own. In addition, similarly to `key_to_placename`, use the global `placename_to_key` function to convert placenames to keys rather than directly invoking the function in the `placename_to_key` field. If the field is set to `false`, the placename is used unchanged as the key. Otherwise, the default algorithm works as follows: *# If the group-level `default_placetype == "city"`, use the placename unchanged as the key. *# Otherwise, if the group-level `default_container` exists and is a string, append it to the placename after a comma + space and use the result as the key. *# Otherwise, if the group-level `default_container` is a canonical container object (an object with `key` and `placetype` fields), and the `placetype` field is either `country` or `constituent country`, append the `key` field to the placename after a comma + space and use the result as the key. *# Otherwise, use the placename unchanged as the key. * `canonicalize_key_container`: A function of one argument to convert the specified `container` field, when a string, to canonical form. Described in more detail above under [[#Container spec canonicalization]]. It is preferable to construct the function using `make_canonicalize_key_container`, if possible, rather than rolling your own. * `addl_divs`: Additional political divisions appended, for all locations in the group, to the list of divisions derived from the location-level `divs` or group-level `default_divs` fields to get the final list of divisions for the location. See [[#Location divisions]] for more details. ]==] ----------------------------------------------------------------------------------- -- Helper functions -- ----------------------------------------------------------------------------------- --[==[ Throw an error. `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the format string as if `fmt:format(...)` were called. In general, callers should use `internal_error` unless the error was due to bad user input rather than a logic error (which usually isn't the case in deep back-end code like this). ]==] function export.process_error(fmt, ...) local args = {...} for i = 1, select("#", ...) do args[i] = dump(args[i]) end return error(string.format(fmt, unpack(args))) end --[==[ Throw an internal error (a logic error that should never happen unless there is a bug in the code, as opposed to a user error triggered by bad input or a system error due to something like running out of memory or hitting a time limit). `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the format string as if `fmt:format(...)` were called. ]==] function export.internal_error(fmt, ...) export.process_error("Internal error: " .. fmt, ...) end local internal_error = export.internal_error -- Return whether `list_or_element` (a list of strings, or a single string) "contains" `item` (a string). If -- `list_or_element` is a list, this returns true if `item` is in the list; otherwise it returns true if `item` -- equals `list_or_element`. local function list_or_element_contains(list_or_element, item) if type(list_or_element) == "table" then return m_table.contains(list_or_element, item) and true or false end return list_or_element == item end --[==[ Call the location group's `key_to_placename` function if it exists (see the comment at the top of [[Module:place]] for the distinction between keys and placenames). Two values are returned, the full and elliptical placenames (e.g. full `"County Durham"` vs. elliptical `"Durham"`). If the group does not define `key_to_placename`, both full and elliptical placenames are computed by chopping off anything starting with a comma. ]==] function export.key_to_placename(group, key) if group.key_to_placename == false then return key, key end if group.key_to_placename then local full_placename, elliptical_placename = group.key_to_placename(key) if type(full_placename) ~= "string" then internal_error("Key %s returned a non-string full placename: %s", key, full_placename) end if type(elliptical_placename) ~= "string" then internal_error("Key %s returned a non-string elliptical placename: %s", key, elliptical_placename) end return full_placename, elliptical_placename end key = key:gsub(",.*", "") return key, key end --[==[ Call the location group's `placename_to_key` function if it exists (see the comment at the top of [[Module:place]] for the distinction between keys and placenames) and return the result. If `placename_to_key` exists with the value `false`, return the placename unchanged. If the group does not define `placename_to_key`, and it defines a `default_container` whose placetype is either `country` or `constituent country`, the container name is appended to the placename after a comma and a space. Otherwise the placename is returned unchanged. ]==] function export.placename_to_key(group, placename) if group.placename_to_key == false then return placename elseif group.placename_to_key then local key = group.placename_to_key(placename) if type(key) ~= "string" then internal_error("Placename %s returned a non-string key: %s", placename, key) end return key elseif group.default_placetype == "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 --[==[ Initialize the location spec `spec`, augmenting it with default values taken from `group` if the spec itself doesn't specify values for the properties. This sets `containers` to a canonicalized list of objects, each with `key` and `placetype` keys, describing the immediate containers of the location, and erases (sets to nil) the original non-canonicalized `container` field. (Most locations have only one immediate container but some, e.g. Russia, have more than one. Containers should be carefully distinguished from category parents. Generally the container is the first category parent, or the first ``n`` parents if there are ``n`` containers, but there may be additional category parents, which indicate some sort of relation between the category parent and the location but not necessarily one of containment.) This function is idempotent in that nothing happens if called more than once on the same spec. FIXME: Consider reimplementing this in a more standardly object-oriented way using metatables. ]==] function export.initialize_spec(group, key, spec) if spec.initialized then return end local container = spec.container local containers local container_from_default if not container then container = group.default_container container_from_default = true end if container then if type(container) == "string" or container.key then container = {container} end containers = {} for _, cont in ipairs(container) do if type(cont) == "string" then if group.canonicalize_key_container and not container_from_default then cont = group.canonicalize_key_container(cont) else cont = {key = cont, placetype = "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", "british_spelling", "the", "no_container_cat", "no_container_parent", "no_generic_place_cat", "no_check_holonym_mismatch", "no_auto_augment_container", "no_include_container_in_desc", "is_city", "is_former_place", } do set_or_default(prop) end -- `default_placetype == "city"` is correct; if `default_placetype` has something else like `prefecture-level city` -- as the canonical placetype but also lists `city` (as Chinese prefecture-level cities do), don't mark as -- is_city. spec.is_city = value_with_default(spec.is_city, group.default_placetype == "city") spec.initialized = true end --[=[ Given a location group, key and possible placetypes that the placename must match, check if the key exists in the group with at least one of the group's key's placetypes matching one of the passed-in placetypes. If so, return two values: the group key (which potentially could differ from the passed-in key due to aliases) and the corresponding spec object, which (as with all functions that return spec objects) has been initialized using `initialize_spec()` (i.e. default property values have been copied from the group into the spec, if the spec doesn't itself specify a value for the property in question). `alias_resolution` controls how aliases are resolved. Normally, both display and category aliases are followed, and the returned key will reflect the canonical location key. However, if `alias_resolution` is {"none"}, no alias following happens. In that case, if the key specifies an alias, the spec for the alias rather than the spec for the canonical location is returned, and importantly, it is returned uninitialized, meaning that properties from the group are not copied into the spec. (If the key specifies a canonical location, its spec is returned initialized, as in the normal case where `alias_resolution` is unspecified.) The caller needs to check whether the returned spec is an alias by looking for an `alias_of` property. If `alias_resolution` is {"display"}, the behavior is the same as for {"none"} except that if the alias contains a setting `display = true`, the returned key will reflect the canonical location key, and if the alias contains a setting `display = ``string`` `, the returned key will reflect that string. This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or `find_canonical_key` (for known-canonical locations where the placetype isn't known). ]=] local function find_matching_key_in_group(group, placetypes, key, alias_resolution) if alias_resolution ~= nil and alias_resolution ~= "none" and alias_resolution ~= "display" and alias_resolution ~= "all" then internal_error("Bad value for 'alias_resolution': %s", alias_resolution) end local spec = group.data[key] if not spec then return nil end local function check_correct_placetype(placetype) if type(placetype) == "table" then for _, pt in ipairs(placetype) do if list_or_element_contains(placetypes, pt) then return true end end return false else return list_or_element_contains(placetypes, placetype) end end if spec.alias_of then local resolved_key = spec.alias_of local resolved_spec = group.data[resolved_key] if not resolved_spec then internal_error("Key %s is an alias of %s, which doesn't exist", key, resolved_key) elseif resolved_spec.alias_of then internal_error("Key %s is an alias of %s, which is itself an alias; indirect aliasing not allowed", key, resolved_key) end if alias_resolution == "none" or alias_resolution == "display" then -- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group. local placetype = spec.placetype or resolved_spec.placetype or group.default_placetype if not placetype then internal_error("No placetype found for key %s in any of spec %s, alias-resolved spec %s or in group " .. "`default_placetype`", key, spec, resolved_spec) end if not check_correct_placetype(placetype) then return nil end if alias_resolution == "display" then if spec.display == true then key = resolved_key elseif spec.display then key = spec.display end end return key, spec end key = resolved_key spec = resolved_spec end -- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group. local placetype = spec.placetype or group.default_placetype if not placetype then internal_error("No placetype found for key %s in spec %s or group `default_placetype`", key, spec) end if not check_correct_placetype(placetype) then return nil end export.initialize_spec(group, key, spec) return key, spec end --[=[ Given a location group, placename and possible placetypes that the placename must match, check if the placename exists in the group with at least one of the placetypes of the key in the group that corresponds to the placename matching one of the passed-in placetypes. If so, return two values: the key corrsponding to the passed-in placename and the corresponding spec object. This is similar to `find_matching_key_in_group()` but works with placenames rather than keys. `alias_resolution` is as in `find_matching_key_in_group()`. This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or `find_canonical_key` (for known-canonical locations where the placetype isn't known). ]=] local function find_matching_placename_in_group(group, placetypes, placename, alias_resolution) local key = export.placename_to_key(group, placename) return find_matching_key_in_group(group, placetypes, key, alias_resolution) end --[==[ If `key` is a canonical known location key (i.e. not an alias), return the corresponding group and initialized spec. If no such key exists, return {nil}. This throws an internal error if two locations with the same key are found. ]==] function export.find_canonical_key(key) local found_locations = {} for _, group in ipairs(export.locations) do local spec = group.data[key] if not spec then -- do nothing elseif spec.alias_of then mw.log(("Skipping alias '%s' of canonical '%s'"):format(key, spec.alias_of)) else insert(found_locations, {group, spec}) end end if not found_locations[1] then return nil elseif found_locations[2] then internal_error("Found multiple matching locations for canonical key %s: %s", key, found_locations) else local group, spec = unpack(found_locations[1]) export.initialize_spec(group, key, spec) return group, spec end end --[==[ Iterator that returns all locations matching a given description, where the description consists of either a placename or a key along with a list of possible placetypes. Usually there will be at most one such location. The iterator returns three values at each iteration: the location group, canonical key by which the location is known and the spec object describing the location. `data` contains the following possible fields: * `placetypes`: A list of possible placetypes, one of which must match one of the location's placetypes; or a string specifying a placetype, which must match one of the location's placetypes. This must be specified. * `placename`: The placename of the location. Either this or `key` must be specified. * `key`: The key of the location. Either this or `placename` must be specified. * `alias_resolution`: If specified, it behaves the same as for `find_matching_key_in_group`. The spec is normally initialized using `initialize_spec()` prior to it being returned (but may not be if `alias_resolution` is given and the specified key or placename is an alias; see the documentation for `find_matching_key_in_group`). ]==] function export.iterate_matching_location(data) local i = 0 local n = #export.locations return function() while true do i = i + 1 if i > n then break end local group = export.locations[i] local key, spec if data.placename then key, spec = find_matching_placename_in_group(group, data.placetypes, data.placename, data.alias_resolution) else if not data.key then internal_error("'.placename' or '.key' must be defined: %s", data) end key, spec = find_matching_key_in_group(group, data.placetypes, data.key, data.alias_resolution) end if key then return group, key, spec end end end end --[==[ Return the location matching a given description, where the description consists of either a placename or a key along with a list of possible placetypes. This is similar to `iterate_matching_location()` but throws an internal error if there is not exactly one location found; as such, it is for use with internally specified locations (such as the containers of known locations) rather than externally specified locations, which may not match a known location and in some cases may match multiple known locations. For finding an externally specified location, consider using `find_matching_holonym_location`, which returns {nil} rather than throwing an error if the location isn't found, but also (more importantly) checks to make sure there are no conflicting holonyms among the user-specified holonyms (e.g. {{tl|place|city|s/Delaware|c/USA|t=Newark}} will not match the known location `Newark` (in New Jersey, not Delaware). ]==] function export.get_matching_location(data) local all_found = {} for group, key, spec in export.iterate_matching_location(data) do insert(all_found, {group, key, spec}) end if not all_found[1] then internal_error("Couldn't find matching location for data %s", data) elseif all_found[2] then internal_error("Found multiple matching locations for data %s: %s", data, all_found) else return unpack(all_found[1]) end end --[==[ Successively iterate over a location's containers, and then the containers of those containers, etc. Keep in mind that locations may have multiple containers (e.g. Russia has both Europe and Asia as containers, and both Europe and Asia have Eurasia as their container). A given container will never be returned twice (e.g. in the case where a specific location A has locations B and C as containers, and B has C as its container, C will not be returned twice). An internal error happens if a container loop is detected. The return value is a list of location objects, each of which contains `group`, `key` and `spec` fields. ]==] function export.iterate_containers(group, key, spec) local keys_seen = {} keys_seen[key] = true local iterations = 0 local last_iteration_containers = {{group = group, key = key, spec = spec}} return function() iterations = iterations + 1 if iterations > 10 then internal_error("Probable loop in containers when processing key %s", key) end local next_iteration_containers = {} for _, location in ipairs(last_iteration_containers) do local containers = location.spec.containers if containers then for _, container in ipairs(containers) do local container_group, container_key, container_spec = export.get_matching_location { placetypes = container.placetype, key = container.key, } if not keys_seen[container_key] then insert(next_iteration_containers, { group = container_group, key = container_key, spec = container_spec }) keys_seen[container_key] = true end end end end if not next_iteration_containers[1] then return nil end last_iteration_containers = next_iteration_containers return next_iteration_containers end end --[==[ Given a placename, convert it into a link (two-part if `display_form` is given and differs from `placename`) and add `"the "` to the beginning if called for in `spec`. ]==] function export.construct_linked_placename(spec, placename, display_form) local linked_placename = display_form and placename ~= display_form and ("[[%s|%s]]"):format(placename, display_form) or ("[[%s]]"):format(placename) if spec.the then linked_placename = "the " .. linked_placename end return linked_placename end --[=[ This is typically used to define `key_to_placename`. It generates a function that chops off parts of a string (a location key), typically at the end, in order to get the full and elliptical versions of a placename. (See the documentation above for `key_to_placename` under "Location group tables" for the difference between full and elliptical placenames.) `container_patterns` is a Lua pattern or a list of possible patterns matching the container at the end of the key, which will be used to remove that container. If multiple patterns are specified, each one is tried until one matches. If `container_patterns` is omitted, this part of the process is skipped. The reulting string becomes the full placename. If `divtype_patterns` is specified, it is likewise either a Lua pattern or list of possible patterns to match and remove the political division affixed onto the end (or possibly the beginning) of the key in the keys of certain countries (such as South Korean and North Korean counties, which include the word "County" in the key). The resulting chopped string becomes the elliptical placename. If `divtype_patterns` is omitted, this part of the process is skipped and the full and elliptical placenames are the same. Typical usage is as follows: ``` key_to_placename = make_key_to_placename(", England$"), ``` or (when the political division is part of the key) ``` key_to_placename = make_key_to_placename(", South Korea$", " County$") ``` ]=] local function make_key_to_placename(container_patterns, divtype_patterns) if type(container_patterns) == "string" then container_patterns = {container_patterns} end if type(divtype_patterns) == "string" then divtype_patterns = {divtype_patterns} end return function(key) local full_placename = key if container_patterns then for _, container_pattern in ipairs(container_patterns) do local nsubs full_placename, nsubs = full_placename:gsub(container_pattern, "") if nsubs > 0 then break end end end local elliptical_placename = full_placename if divtype_patterns then for _, divtype_pattern in ipairs(divtype_patterns) do local nsubs elliptical_placename, nsubs = elliptical_placename:gsub(divtype_pattern, "") if nsubs > 0 then break end end end return full_placename, elliptical_placename end end --[=[ This is typically used to define `placename_to_key`. It generates a function that appends a string to the end of a given placename to get the key (see the definition of `placename_to_key` above in the documentation under "Location group tables"). Optional `divtype_suffix` is a raw string (which should not contain hyphens or other characters that have special meaning in Lua patterns) to be appended first to the placename; if already present at the end, it is not appended. `container_suffix` is then added in the same fashion if given. Typical usage is like this: ``` placename_to_key = make_placename_to_key(", England") ``` (which will convert e.g. `"Hampshire"` into `"Hampshire, England"`) or ``` placename_to_key = make_placename_to_key(", South Korea", " County") ``` (which will convert e.g. `"Gangwon"` or `"Gangwon County"` into `"Gangwon County, South Korea"`). ]=] local function make_placename_to_key(container_suffix, divtype_suffix) return function(placename) local key = placename if divtype_suffix then if not key:find(divtype_suffix .. "$") then key = key .. divtype_suffix end end if container_suffix then key = key .. container_suffix end return key end end --[=[ This is typically used to define `canonicalize_key_container`, which converts a container as specified in the location data into the canonical form containing both the full container key and its placetype. It generates a function to do the canonicalization of a given container. If the container is a string, `suffix` is appended onto the string (use {nil} or {""} if there is no suffix to append), and the placetype is set to `placetype`. Otherwise the container is left as-is. Typical usage is like this: ``` canonicalize_key_container = make_canonicalize_key_container(", Canada", "province") ``` which will convert e.g. `"Ontario"` into `{key = "Ontario, Canada", placetype = "province"}`. ]=] local function make_canonicalize_key_container(suffix, placetype) return function(container) if type(container) == "string" then return {key = container .. (suffix or ""), placetype = placetype} else return container end end end ----------------------------------------------------------------------------------- -- Top-level tables -- ----------------------------------------------------------------------------------- export.continents = { ["Trái Đất"] = {placetype = "planet", addl_parents = {"tự nhiên"}, fulldesc = "=là hành tinh thứ ba tính từ Mặt Trời", commonscat = "Earth"}, ["châu Phi"] = {placetype = "continent", commonscat = "Africa", container = {key = "Trái Đất", placetype = "planet"}}, ["châu Mỹ"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"}, keydesc = "[[America]], in the sense of [[North America]] and [[South America]] combined", wp = "Châu Mỹ"}, ["Americas"] = {alias_of = "châu Mỹ", the = true}, ["America"] = {alias_of = "châu Mỹ", the = true}, ["Bắc Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}}, ["Caribe"] = {the = true, placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}}, ["Trung Mỹ"] = {placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}}, ["Nam Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}}, ["châu Nam Cực"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}, fulldesc = "=lục địa nằm xa về phía nam và tây nhất trên Trái Đất, chứa Cực Nam địa lý và nằm trong Vùng Nam Cực của Nam Bán cầu"}, ["Đại lục Á Âu"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"}, keydesc = "một khu vực đất đai rộng lớn, bao gồm châu Âu và châu Á"}, ["châu Á"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}}, ["châu Âu"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}}, ["châu Đại Dương"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}}, ["Melanesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, ["Micronesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, ["Polynesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, } export.continents_group = { default_overriding_bare_label_parents = {}, -- container parents should be used default_divs = {{type = "countries", prep = "của"}}, -- It's enough to mention the first-level continent or continent group. It seems excessive to write e.g. -- "El Salvador, a country in Central America, a continental region in North America, a continent in America, ...". default_no_include_container_in_desc = true, default_no_container_cat = true, default_no_container_parent = true, default_no_auto_augment_container = true, default_no_generic_place_cat = true, -- French Guyana is in France but not in Europe, which should not be an issue, so don't check holonym mismatches at -- this level. We also run into problems with supercontinents, which have "continent" as the fallback and cause -- mismatches. default_no_check_holonym_mismatch = true, data = export.continents, } -- Countries: including those with partial recognition that are normally considered countries (e.g. Kosovo, Taiwan). export.countries = { ["Afghanistan"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Albania"] = {container = "Europe", divs = {"counties", "municipalities", "communes", {type = "administrative units", cat_as = "communes"}, }, british_spelling = true}, ["Algeria"] = {container = "Africa", divs = {"provinces", "communes", "districts", "municipalities"}}, ["Andorra"] = {container = "Europe", divs = {"parishes"}, british_spelling = true}, ["Angola"] = {container = "Africa", divs = {"provinces", "municipalities"}}, ["Antigua and Barbuda"] = {container = "Caribbean", divs = {"provinces"}, british_spelling = true}, ["Argentina"] = {container = "South America", divs = {"provinces", "departments", "municipalities"}}, ["Armenia"] = {container = {"Europe", "Asia"}, divs = {"provinces", "districts", "municipalities"}, british_spelling = true}, ["Republic of Armenia"] = {alias_of = "Armenia", the = true}, -- differs in "the" -- Both a country and continent ["Australia"] = {container = "Oceania", divs = { {type = "states", cat_as = "states and territories"}, {type = "territories", cat_as = "states and territories"}, {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and territories"}, {type = "ABBREVIATION_OF territories", cat_as = "abbreviations of states and territories"}, "local government areas", "dependent territories", }, british_spelling = true}, ["Austria"] = {container = "Europe", divs = {"states", "districts", "municipalities"}, british_spelling = true}, ["Azerbaijan"] = {container = {"Europe", "Asia"}, divs = {"districts", "municipalities"}, british_spelling = true}, ["Bahamas"] = {the = true, container = "Caribbean", divs = {"districts"}, british_spelling = true, wp = "The %l"}, ["Bahrain"] = {container = "Asia", divs = {"governorates"}}, ["Bangladesh"] = {container = "Asia", divs = {"divisions", "districts", "municipalities"}, british_spelling = true}, ["Barbados"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Belarus"] = {container = "Europe", divs = {"regions", "districts"}, british_spelling = true}, ["Belgium"] = {container = "Europe", divs = {"regions", "provinces", "municipalities"}, british_spelling = true}, ["Belize"] = {container = "Central America", divs = {"districts"}, british_spelling = true}, ["Benin"] = {container = "Africa", divs = {"departments", "communes"}}, ["Bhutan"] = {container = "Asia", divs = {"districts", "gewogs"}}, ["Bolivia"] = {container = "South America", divs = {"provinces", "departments", "municipalities"}}, ["Bosnia and Herzegovina"] = {container = "Europe", divs = {"entities", "cantons", "municipalities"}, british_spelling = true}, ["Bosnia and Hercegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia-Herzegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia-Hercegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Botswana"] = {container = "Africa", divs = {"districts", "subdistricts"}, british_spelling = true}, ["Brazil"] = {container = "South America", divs = { "states", "municipalities", "macroregions", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, }}, ["Brunei"] = {container = "Asia", divs = {"districts", "mukims"}, british_spelling = true}, ["Bulgaria"] = {container = "Europe", divs = {"provinces", "municipalities"}, british_spelling = true}, ["Burkina Faso"] = {container = "Africa", divs = {"regions", "departments", "provinces"}}, ["Burundi"] = {container = "Africa", divs = {"provinces", "communes"}}, ["Cambodia"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Cameroon"] = {container = "Africa", divs = {"regions", "departments"}}, ["Canada"] = {container = "North America", divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, {type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces and territories"}, {type = "ABBREVIATION_OF territories", cat_as = "abbreviations of provinces and territories"}, "counties", "districts", "municipalities", "regional municipalities", "rural municipalities", "parishes", -- Don't change the following to something more politically correct (e.g. "First Nations reserves") until/unless -- the Canadian government makes a similar switch (and note that as of Apr 18 2025, the Wikipedia article is -- still at [[w:Indian reserves]]). "Indian reserves", "census divisions", {type = "townships", prep = "in"}, }, british_spelling = true}, ["Cape Verde"] = {container = "Africa", divs = {"municipalities", "parishes"}}, ["Cabo Verde"] = {alias_of = "Cape Verde", display = true}, ["Central African Republic"] = {the = true, container = "Africa", divs = {"prefectures", "subprefectures"}}, ["CAR"] = {alias_of = "Central African Republic", display = true, the = true}, ["C.A.R"] = {alias_of = "Central African Republic", display = true, the = true}, ["Chad"] = {container = "Africa", divs = {"regions", "departments"}}, ["Chile"] = {container = "South America", divs = {"regions", "provinces", "communes"}}, ["China"] = {container = "Asia", divs = { {type = "provinces", cat_as = "provinces and autonomous regions"}, {type = "autonomous regions", cat_as = "provinces and autonomous regions"}, {type = "FORMER provinces", cat_as = "former provinces"}, "special administrative regions", "prefectures", {type = "FORMER prefectures", cat_as = "former prefectures"}, "prefecture-level cities", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, {type = "FORMER counties", cat_as = "former counties and county-level cities"}, {type = "FORMER county-level cities", cat_as = "former counties and county-level cities"}, -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities. "districts", {type = "FORMER districts", cat_as = "former districts"}, "subdistricts", "townships", "municipalities", {type = "direct-administered municipalities", cat_as = "municipalities"}, }}, ["People's Republic of China"] = {alias_of = "China", the = true}, -- differs in "the" ["Colombia"] = {container = "South America", divs = {"departments", "municipalities"}}, ["Comoros"] = {the = true, container = "Africa", divs = {"autonomous islands"}}, ["Costa Rica"] = {container = "Central America", divs = {"provinces", "cantons"}}, ["Croatia"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Cuba"] = {container = "Caribbean", divs = {"provinces", "municipalities"}}, ["Cyprus"] = {container = {"Europe", "Asia"}, divs = {"districts"}, british_spelling = true}, ["Czech Republic"] = {the = true, container = "Europe", divs = {"regions", "districts", "municipalities"}, british_spelling = true}, ["Czechia"] = {alias_of = "Czech Republic"}, -- differs in "the" ["Democratic Republic of the Congo"] = {the = true, container = "Africa", divs = {"provinces", "territories"}}, ["Congo"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["DRC"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["D.R.C"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["Denmark"] = {container = "Europe", divs = {"regions", "municipalities", "dependent territories"}, british_spelling = true, -- Wikipedia separates [[w:Denmark]] (constituent country) from [[w:Danish Realm]] (country) }, ["Djibouti"] = {container = "Africa", divs = {"regions", "districts"}}, ["Dominica"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Dominican Republic"] = {the = true, container = "Caribbean", divs = {"provinces", "municipalities"}, keydesc = "the [[Dominican Republic]], the country that shares the [[Caribbean]] island of [[Hispaniola]] with [[Haiti]]"}, ["East Timor"] = {container = "Asia", divs = {"municipalities"}, wp = "Timor-Leste"}, ["Timor-Leste"] = {alias_of = "East Timor", display = true}, ["Ecuador"] = {container = "South America", divs = {"provinces", "cantons"}}, ["Egypt"] = {container = "Africa", divs = {"governorates", "regions"}, british_spelling = true}, ["El Salvador"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Equatorial Guinea"] = {container = "Africa", divs = {"provinces"}}, ["Eritrea"] = {container = "Africa", divs = {"regions", "subregions"}}, ["Estonia"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Eswatini"] = {container = "Africa", british_spelling = true}, ["Swaziland"] = {alias_of = "Eswatini", display = true}, ["Ethiopia"] = {container = "Africa", divs = {"regions", "zones"}}, ["Federated States of Micronesia"] = {the = true, container = "Micronesia", divs = {"states"}}, ["Micronesia"] = {alias_of = "Federated States of Micronesia"}, ["Fiji"] = {container = "Melanesia", divs = {"divisions", "provinces"}, british_spelling = true}, ["Finland"] = {container = "Europe", divs = {"regions", "municipalities"}, british_spelling = true}, ["France"] = {container = "Europe", divs = {"regions", "cantons", "collectivities", "communes", {type = "municipalities", cat_as = "communes"}, "departments", {type = "prefectures", cat_as = {"prefectures", "departmental capitals"}}, {type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}}, "dependent territories", "territories", "provinces", }, british_spelling = true}, ["Gabon"] = {container = "Africa", divs = {"provinces", "departments"}}, ["Gambia"] = {the = true, container = "Africa", divs = {"divisions", "districts"}, british_spelling = true, wp = "The %l"}, ["Georgia"] = {container = {"Europe", "Asia"}, divs = {"regions", "districts"}, keydesc = "the country of [[Georgia]], in [[Eurasia]]", british_spelling = true, wp = "%l (country)"}, ["Germany"] = {container = "Europe", divs = { "states", -- Bavaria, Baden-Württemberg, Hesse and North Rhine-Westphalia have administrative regions as divisions, but -- there aren't really enough of them to categorize per state. "regions", "municipalities", "districts"}, british_spelling = true}, ["Ghana"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Greece"] = {container = "Europe", divs = {"regions", "regional units", "municipalities", {type = "peripheries", cat_as = {"regions"}}, }, british_spelling = true}, ["Grenada"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Guatemala"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Guinea"] = {container = "Africa", divs = {"regions", "prefectures"}}, ["Guinea-Bissau"] = {container = "Africa", divs = {"regions"}}, ["Guyana"] = {container = "South America", divs = {"regions"}, british_spelling = true}, ["Haiti"] = {container = "Caribbean", divs = {"departments", "arrondissements"}}, ["Honduras"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Hungary"] = {container = "Europe", divs = {"counties", "districts"}, british_spelling = true}, ["Iceland"] = {container = "Europe", divs = {"regions", "municipalities", "counties"}, british_spelling = true}, ["India"] = {container = "Asia", divs = { {type = "states", cat_as = "states and union territories"}, {type = "union territories", cat_as = "states and union territories"}, {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and union territories"}, {type = "ABBREVIATION_OF union territories", cat_as = "abbreviations of states and union territories"}, "divisions", "districts", "municipalities", }, british_spelling = true}, ["Indonesia"] = {container = "Asia", divs = {"regencies", "provinces", {type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces"}, }}, ["Iran"] = {container = "Asia", divs = {"provinces", "counties"}}, ["Iraq"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Ireland"] = {container = "Europe", addl_parents = {"British Isles"}, divs = {"counties", "districts", "provinces"}, british_spelling = true, wp = "Republic of %l"}, ["Republic of Ireland"] = {alias_of = "Ireland", the = true}, -- differs in "the" ["Israel"] = {container = "Asia", divs = {"districts"}}, ["Italy"] = {container = "Europe", divs = { "regions", "provinces", "metropolitan cities", "municipalities", {type = "autonomous regions", cat_as = "regions"}, }, british_spelling = true}, ["Ivory Coast"] = {container = "Africa", divs = {"districts", "regions"}}, -- We should really be using Ivory Coast (common name) but there are political ramifications to the use of -- Côte d'Ivoire so don't make it a display alias. ["Côte d'Ivoire"] = {alias_of = "Ivory Coast"}, ["Jamaica"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Japan"] = {container = "Asia", divs = {"prefectures", "subprefectures", "municipalities"}}, ["Jordan"] = {container = "Asia", divs = {"governorates"}}, ["Kazakhstan"] = {container = {"Asia", "Europe"}, divs = {"regions", "districts"}}, ["Kenya"] = {container = "Africa", divs = {"counties"}, british_spelling = true}, ["Kiribati"] = {container = "Micronesia", british_spelling = true}, ["Kosovo"] = {container = "Europe", divs = {"districts", "municipalities"}, british_spelling = true}, ["Kuwait"] = {container = "Asia", divs = {"governorates", "areas"}}, ["Kyrgyzstan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Laos"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Latvia"] = {container = "châu Âu", divs = {"municipalities"}, british_spelling = true}, ["Lebanon"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Lesotho"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Liberia"] = {container = "Africa", divs = {"counties", "districts"}}, ["Libya"] = {container = "Africa", divs = {"districts", "municipalities"}}, ["Liechtenstein"] = {container = "Europe", divs = {"municipalities"}, british_spelling = true}, ["Lithuania"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Luxembourg"] = {container = "Europe", divs = {"cantons", "districts"}, british_spelling = true}, ["Madagascar"] = {container = "Africa", divs = {"regions", "districts"}}, ["Malawi"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Malaysia"] = {container = "Asia", divs = {"states", "federal territories", "districts"}, british_spelling = true}, ["Maldives"] = {the = true, container = "Asia", divs = {"provinces", "administrative atolls"}, british_spelling = true}, ["Mali"] = {container = "Africa", divs = {"regions", "cercles"}}, ["Malta"] = {container = "Europe", divs = {"regions", "local councils"}, british_spelling = true}, ["Marshall Islands"] = {the = true, container = "Micronesia", divs = {"municipalities"}}, ["Mauritania"] = {container = "Africa", divs = {"regions", "departments"}}, ["Mauritius"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Mexico"] = {container = "North America", addl_parents = {"Central America"}, divs = { "states", "municipalities", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, }}, ["Moldova"] = {container = "Europe", divs = { {type = "districts", cat_as = "districts and autonomous territorial units"}, {type = "autonomous territorial units", cat_as = "districts and autonomous territorial units"}, "communes", "municipalities", }, british_spelling = true}, ["Monaco"] = {placetype = {"city-state", "country"}, container = "Europe", -- We want the first placetype to be 'city-state' so the description of Monaco says it's a city-state, but we -- want its parent to be "countries in Europe". bare_category_parent_type = {type = "countries", prep = "in"}, is_city = true, british_spelling = true}, ["Mongolia"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Montenegro"] = {container = "Europe", divs = {"municipalities"}}, ["Morocco"] = {container = "Africa", divs = {"regions", "prefectures", "provinces"}}, ["Mozambique"] = {container = "Africa", divs = {"provinces", "districts"}}, ["Myanmar"] = {container = "Asia", divs = {"regions", "states", "union territories", {type = "self-administered zones", cat_as = "self-administered areas"}, {type = "self-administered divisions", cat_as = "self-administered areas"}, "districts"}}, ["Burma"] = {alias_of = "Myanmar"}, -- not display-canonicalizing; has political connotations ["Namibia"] = {container = "Africa", divs = {"regions", "constituencies"}, british_spelling = true}, ["Nauru"] = {container = "Micronesia", divs = {"districts"}, british_spelling = true}, ["Nepal"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Netherlands"] = {the = true, placetype = {"country", "constituent country"}, container = "Europe", divs = {"provinces", "municipalities", {type = "FORMER municipalities", cat_as = "former municipalities"}, "dependent territories", "constituent countries"}, british_spelling = true, -- Wikipedia separates [[w:Netherlands]] (constituent country) from [[w:Kingdom of the Netherlands]] -- (country) }, ["New Zealand"] = {container = "Polynesia", divs = { "regions", "dependent territories", "territorial authorities", {type = "districts", cat_as = "territorial authorities"}, }, british_spelling = true}, ["Nicaragua"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Niger"] = {container = "Africa", divs = {"regions", "departments"}}, ["Nigeria"] = {container = "Africa", divs = { "states", -- Categorize the Federal Capital Territory as a state because there's only one of it; we could categorize -- everything under 'states and territories' but that seems a bit pointless. {type = "federal territories", cat_as = "states"}, "local government areas", }, british_spelling = true}, ["North Korea"] = {container = "Asia", addl_parents = {"Korea"}, divs = {"provinces", "counties"}}, ["North Macedonia"] = {container = "Europe", divs = {"regions", "municipalities"}, british_spelling = true}, ["Macedonia"] = {alias_of = "North Macedonia", display = true}, ["Republic of North Macedonia"] = {alias_of = "North Macedonia", the = true}, -- differs in "the" ["Republic of Macedonia"] = {alias_of = "North Macedonia", the = true}, -- differs in "the" ["Norway"] = {container = "Europe", divs = {"counties", "municipalities", "dependent territories", "districts", "unincorporated areas"}, british_spelling = true}, ["Oman"] = {container = "Asia", divs = {"governorates", "provinces"}}, ["Pakistan"] = {container = "Asia", divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "administrative territories", cat_as = "provinces and territories"}, {type = "federal territories", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, "divisions", "districts", }, british_spelling = true}, ["Palau"] = {container = "Micronesia", divs = {"states"}}, ["Palestine"] = {container = "Asia", divs = {"governorates"}}, ["State of Palestine"] = {alias_of = "Palestine", the = true}, -- differs in "the" ["Panama"] = {container = "Central America", divs = {"provinces", "districts"}}, ["Papua New Guinea"] = {container = "Melanesia", divs = {"provinces", "districts"}, british_spelling = true}, ["Paraguay"] = {container = "South America", divs = {"departments", "districts"}}, ["Peru"] = {container = "South America", divs = {"regions", "provinces", "districts"}}, ["Philippines"] = {the = true, container = "Asia", divs = {"regions", "provinces", "districts", "municipalities", "barangays"}}, ["Poland"] = {divs = {"voivodeships", "counties", {type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}}, }, container = "Europe", british_spelling = true}, ["Portugal"] = {container = "Europe", divs = { {type = "autonomous regions", cat_as = "districts and autonomous regions"}, {type = "districts", cat_as = "districts and autonomous regions"}, "provinces", "municipalities"}, british_spelling = true}, ["Qatar"] = {container = "Asia", divs = {"municipalities", "zones"}}, ["Republic of the Congo"] = {the = true, container = "Africa", divs = {"departments", "districts"}}, ["Congo Republic"] = {alias_of = "Republic of the Congo", display = true, the = true}, ["Romania"] = {container = "Europe", divs = { "regions", "counties", "communes", {type = "ABBREVIATION_OF counties", cat_as = "abbreviations of counties"}, }, british_spelling = true}, ["Russia"] = {container = {"Europe", "Asia"}, divs = { "federal subjects", "republics", "autonomous oblasts", "autonomous okrugs", "oblasts", "krais", "federal cities", "districts", "federal districts"}, british_spelling = true}, ["Rwanda"] = {container = "Africa", divs = {"provinces", "districts"}}, ["Saint Kitts and Nevis"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Saint Kitts"] = {alias_of = "Saint Kitts and Nevis", display = true}, ["Saint Lucia"] = {container = "Caribbean", divs = {"districts"}, british_spelling = true}, ["Saint Vincent and the Grenadines"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Saint Vincent"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["SVG"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["S.V.G"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["Samoa"] = {container = "Polynesia", divs = {"districts"}, british_spelling = true}, ["San Marino"] = {container = "Europe", divs = {"municipalities"}, british_spelling = true}, ["São Tomé and Príncipe"] = {container = "Africa", divs = {"districts"}}, ["São Tome and Principe"] = {alias_of = "São Tomé and Príncipe", display = true}, ["São Tomé"] = {alias_of = "São Tomé and Príncipe", display = true}, ["São Tome"] = {alias_of = "São Tomé and Príncipe", display = true}, ["Saudi Arabia"] = {container = "Asia", divs = {"provinces", "governorates"}}, ["Senegal"] = {container = "Africa", divs = {"regions", "departments"}}, ["Serbia"] = {container = "Europe", divs = {"districts", "municipalities", "autonomous provinces"}}, ["Seychelles"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Sierra Leone"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, ["Singapore"] = {container = "Asia", divs = {"districts", "regions"}, british_spelling = true}, ["Slovakia"] = {container = "Europe", divs = {"regions", "districts"}, british_spelling = true}, ["Slovenia"] = {container = "Europe", divs = {"statistical regions", "municipalities"}, british_spelling = true}, -- Note: While the official name does not include "the" at the beginning, -- it sounds strange in English to leave it out and it's commonly included. ["Solomon Islands"] = {the = true, container = "Melanesia", divs = {"provinces"}, british_spelling = true}, ["Somalia"] = {container = "Africa", divs = {"regions", "districts"}}, ["South Africa"] = {container = "Africa", divs = { "provinces", "districts", {type = "district municipalities", cat_as = "districts"}, {type = "metropolitan municipalities", cat_as = "districts"}, "municipalities", }, british_spelling = true}, ["South Korea"] = {container = "Asia", addl_parents = {"Korea"}, divs = {"provinces", "counties", "districts"}}, ["South Sudan"] = {container = "Africa", divs = {"regions", "states", "counties"}, british_spelling = true}, ["Spain"] = {container = "Europe", divs = {"autonomous communities", "provinces", "municipalities", "comarcas", "autonomous cities"}, british_spelling = true}, ["Sri Lanka"] = {container = "Asia", divs = {"provinces", "districts"}, british_spelling = true}, ["Sudan"] = {container = "Africa", divs = {"states", "districts"}, british_spelling = true}, ["Suriname"] = {container = "South America", divs = {"districts"}}, ["Sweden"] = {container = "Europe", divs = {"provinces", "counties", "municipalities"}, british_spelling = true}, ["Switzerland"] = {container = "Europe", divs = {"cantons", "municipalities", "districts"}, british_spelling = true}, ["Syria"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Taiwan"] = {container = "Asia", divs = {"counties", "districts", "townships", "special municipalities"}}, ["Republic of China"] = {alias_of = "Taiwan", the = true}, -- differs in "the", different political connotations ["Tajikistan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Tanzania"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Thailand"] = {container = "Asia", divs = {"provinces", "districts", "subdistricts"}}, ["Togo"] = {container = "Africa", divs = {"provinces", "prefectures"}}, ["Tonga"] = {container = "Polynesia", divs = {"divisions"}, british_spelling = true}, ["Trinidad and Tobago"] = {container = "Caribbean", divs = {"regions", "municipalities"}, british_spelling = true}, ["Tunisia"] = {container = "Africa", divs = {"governorates", "delegations"}}, ["Turkey"] = {container = {"Europe", "Asia"}, divs = {"provinces", "districts"}}, -- Foreign names generally get display-canonicalized. ["Türkiye"] = {alias_of = "Turkey", display = true}, ["Turkmenistan"] = {container = "Asia", divs = { -- The 5 regions are often also called provinces "regions", {type = "provinces", cat_as = "regions"}, "districts"}, }, ["Tuvalu"] = {container = "Polynesia", divs = {"atolls"}, british_spelling = true}, ["Uganda"] = {container = "Africa", divs = {"districts", "counties"}, british_spelling = true}, ["Ukraine"] = {container = "Europe", divs = { {type = "oblasts", cat_as = "oblasts and autonomous republics"}, {type = "autonomous republics", cat_as = "oblasts and autonomous republics"}, "raions", "hromadas", }, british_spelling = true}, ["United Arab Emirates"] = {the = true, container = "Asia", divs = {"emirates"}}, -- Abbreviations get display-canonicalized. ["UAE"] = {alias_of = "United Arab Emirates", display = true, the = true}, ["U.A.E."] = {alias_of = "United Arab Emirates", display = true, the = true}, ["United Kingdom"] = {the = true, container = "Europe", addl_parents = {"British Isles"}, divs = {"constituent countries", "counties", "districts", "boroughs", "territories", "dependent territories", "traditional counties"}, keydesc = "the [[United Kingdom]] of Great Britain and Northern Ireland", british_spelling = true}, -- Abbreviations get display-canonicalized. ["UK"] = {alias_of = "United Kingdom", display = true, the = true}, ["U.K."] = {alias_of = "United Kingdom", display = true, the = true}, ["United States"] = {the = true, container = "North America", divs = {"counties", "county seats", "states", "territories", "dependent territories", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, {type = "DEROGATORY_NAME_FOR states", cat_as = "derogatory names for states"}, {type = "NICKNAME_FOR states", cat_as = "nicknames for states"}, {type = "OFFICIAL_NICKNAME_FOR states", cat_as = "official nicknames for states"}, {type = "boroughs", prep = "in"}, -- exist in Pennsylvania and New Jersey "municipalities", -- these exist politically at least in Colorado and Connecticut {type = "census-designated places", prep = "in"}, {type = "unincorporated communities", prep = "in"}, -- Don't change the following to something more politically correct until/unless the US government makes a -- similar switch (and note that as of Apr 18 2025, the Wikipedia article is still at -- [[w:Indian reservations]]). "Indian reservations", }}, -- Abbreviations and long forms (when possible) get display-canonicalized. ["US"] = {alias_of = "United States", display = true, the = true}, ["U.S."] = {alias_of = "United States", display = true, the = true}, ["USA"] = {alias_of = "United States", display = true, the = true}, ["U.S.A."] = {alias_of = "United States", display = true, the = true}, ["United States of America"] = {alias_of = "United States", display = true, the = true}, ["Uruguay"] = {container = "South America", divs = {"departments", "municipalities"}}, ["Uzbekistan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Vanuatu"] = {container = "Melanesia", divs = {"provinces"}, british_spelling = true}, ["Vatican City"] = {placetype = {"city-state", "country"}, container = "Europe", -- First placetype should be 'city-state' for to shown up in its description, -- Its parent should still be "countries in Europe". bare_category_parent_type = {type = "countries", prep = "in"}, addl_parents = {"Rome"}, is_city = true, british_spelling = true}, ["Vatican"] = {alias_of = "Vatican City", the = true}, -- differs in "the" ["Venezuela"] = {container = "South America", divs = {"states", "municipalities"}}, ["Vietnam"] = {container = "Asia", divs = {"provinces", "districts", "municipalities"}}, ["Western Sahara"] = {placetype = {"territory", "country"}, container = "Africa", bare_category_parent_type = {type = "countries", prep = "in"}, }, -- Not display-canonicalizable both due to differences in 'the' and the sovereignty dispute over Western Sahara ["Sahrawi Arab Democratic Republic"] = {alias_of = "Western Sahara", the = true}, ["SADR"] = {alias_of = "Sahrawi Arab Democratic Republic", display = true, the = true}, ["Yemen"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Zambia"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, ["Zimbabwe"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, } local function canonicalize_continent_container(key) if type(key) ~= "string" then return key end if export.continents[key] then return {key = key, placetype = export.continents[key].placetype} end internal_error("Unrecognized key %s in `canonicalize_continent_like`", key) end export.countries_group = { canonicalize_key_container = canonicalize_continent_container, default_overriding_bare_label_parents = {"+++", "countries"}, default_placetype = "country", default_no_container_cat = true, default_no_container_parent = true, -- No need to augment country holonyms with continents; not needed for disambiguation. default_no_auto_augment_container = true, data = export.countries, } -- Country-like entities: typically overseas territories or de-facto independent countries, which in both cases -- are not internationally recognized as sovereign nations but which we treat similarly to countries. export.country_like_entities = { -- British Overseas Territory ["Akrotiri and Dhekelia"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Cyprus", "Europe", "Asia"}, british_spelling = true, }, -- Åland: Listed as a region of Finland. Wikipedia lists this under "dependent territories" in -- [[w:List of sovereign states and dependent territories by continent]]. -- unincorporated territory of the United States ["American Samoa"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Polynesia"}, }, -- British Overseas Territory ["Anguilla"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Georgia ["Abkhazia"] = { placetype = {"unrecognized country", "country"}, addl_parents = {"Georgia", "Europe", "Asia"}, divs = {"districts"}, keydesc = "the de-facto independent state of [[Abkhazia]], internationally recognized as part of the country of [[Georgia]]", british_spelling = true, }, -- Australian external territory ["Ashmore and Cartier Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, }, -- constituent country of the Netherlands ["Aruba"] = { placetype = {"constituent country", "country"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- British Overseas Territory ["Bermuda"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"North America"}, british_spelling = true, }, -- special municipality of the Netherlands ["Bonaire"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- British Overseas Territory ["British Indian Ocean Territory"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Asia"}, british_spelling = true, }, -- British Overseas Territory ["British Virgin Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- Norwegian dependent territory ["Bouvet Island"] = { placetype = {"dependent territory", "territory"}, container = "Norway", addl_parents = {"Africa"}, british_spelling = true, }, -- British Overseas Territory ["Cayman Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- Australian external territory ["Christmas Island"] = { placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, british_spelling = true, }, -- Sui generis French "state private property" per Wikipedia; classify as overseas territory like the -- French Southern and Antarctic Lands. ["Clipperton Island"] = { placetype = {"overseas territory", "territory"}, container = "France", addl_parents = {"North America"}, }, -- Australian external territory; also called the Keeling Islands or (officially) the Cocos (Keeling) Islands ["Cocos Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, wp = "Cocos (Keeling) Islands", british_spelling = true, }, ["Cocos (Keeling) Islands"] = {alias_of = "Cocos Islands", display = true, the = true}, ["Keeling Islands"] = {alias_of = "Cocos Islands", display = true, the = true}, -- self-governing but in free association with New Zealand ["Cook Islands"] = { the = true, placetype = {"country"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- constituent country of the Netherlands ["Curaçao"] = { placetype = {"constituent country", "country"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- special territory of Chile ["Easter Island"] = { placetype = {"special territory", "territory"}, container = "Chile", addl_parents = {"Polynesia"}, }, -- British Overseas Territory ["Falkland Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"South America"}, british_spelling = true, }, -- autonomous territory of Denmark ["Faroe Islands"] = { the = true, placetype = {"autonomous territory", "territory"}, container = "Denmark", addl_parents = {"Europe"}, british_spelling = true, }, -- overseas department and region of France ["French Guiana"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"South America"}, british_spelling = true, }, -- overseas collectivity of France ["French Polynesia"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Polynesia"}, british_spelling = true, }, -- French overseas territory ["French Southern and Antarctic Lands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "France", addl_parents = {"Africa"}, }, -- British Overseas Territory ["Gibraltar"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Europe"}, is_city = true, british_spelling = true, }, -- autonomous territory of Denmark ["Greenland"] = { placetype = {"autonomous territory", "territory"}, container = "Denmark", addl_parents = {"North America"}, divs = {"municipalities"}, british_spelling = true, }, -- overseas department and region of France ["Guadeloupe"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", addl_parents = {"Caribbean"}, divs = {"communes"}, british_spelling = true, }, -- unincorporated territory of the United States ["Guam"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- self-governing British Crown dependency; technically called the Bailiwick of Guernsey ["Guernsey"] = { placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, wp = "Bailiwick of %l", }, ["Bailiwick of Guernsey"] = {alias_of = "Guernsey", the = true}, -- Australian external territory ["Heard Island and McDonald Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Africa"}, }, -- special administrative region of China ["Hong Kong"] = { placetype = {"special administrative region", "city"}, container = "China", is_city = true, british_spelling = true, }, -- self-governing British Crown dependency ["Isle of Man"] = { the = true, placetype = {"crown dependency", "dependency", "dependent territory", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, }, -- Norwegian unincorporated area ["Jan Mayen"] = { placetype = {"unincorporated area", "dependent territory", "territory", "island"}, container = "Norway", addl_parents = {"Europe"}, british_spelling = true, }, -- self-governing British Crown dependency; technically called the Bailiwick of Jersey ["Jersey"] = { placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, }, ["Bailiwick of Jersey"] = {alias_of = "Jersey", the = true}, -- special administrative region of China ["Macau"] = { placetype = {"special administrative region", "city"}, container = "China", is_city = true, british_spelling = true, }, -- overseas department and region of France ["Martinique"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Caribbean"}, british_spelling = true, }, -- overseas department and region of France ["Mayotte"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Africa"}, british_spelling = true, }, -- British Overseas Territory ["Montserrat"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- special collectivity of France ["New Caledonia"] = { placetype = {"special collectivity", "collectivity"}, container = "France", addl_parents = {"Melanesia"}, british_spelling = true, }, -- dependent territory of New Zealand ["New Zealand Subantarctic Islands"] = { the = true, placetype = {"dependent territory", "territory"}, container = "New Zealand", addl_parents = {"Antarctica"}, british_spelling = true, }, -- self-governing but in free association with New Zealand ["Niue"] = { placetype = {"country"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- Australian external territory ["Norfolk Island"] = { placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Polynesia"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Cyprus ["Northern Cyprus"] = { placetype = {"unrecognized country", "country"}, addl_parents = {"Cyprus", "Turkey", "Europe", "Asia"}, divs = {"districts"}, keydesc = "the de-facto independent state of [[Northern Cyprus]], internationally recognized as part of the country of [[Cyprus]]", british_spelling = true, }, -- commonwealth, unincorporated territory of the United States ["Northern Mariana Islands"] = { the = true, placetype = {"commonwealth", "unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- British Overseas Territory ["Pitcairn Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Polynesia"}, british_spelling = true, }, -- commonwealth of the United States ["Puerto Rico"] = { placetype = {"commonwealth", "overseas territory", "territory"}, container = "United States", addl_parents = {"Caribbean"}, divs = {"municipalities"}, }, -- overseas department and region of France ["Réunion"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Africa"}, british_spelling = true, }, -- special municipality of the Netherlands ["Saba"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- overseas collectivity of France ["Saint Barthélemy"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Caribbean"}, british_spelling = true, }, -- British Overseas Territory ["Saint Helena, Ascension and Tristan da Cunha"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", divs = {{type = "constituent parts", container_parent_type = false}}, addl_parents = {"Atlantic Ocean", "Africa"}, british_spelling = true, }, -- constituent parts of the combined oveseas territory ["Ascension Island"] = { placetype = {"constituent part", "territory", "island"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, ["Saint Helena"] = { placetype = {"constituent part", "territory", "island"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, ["Tristan da Cunha"] = { placetype = {"constituent part", "territory", "archipelago"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, -- overseas collectivity of France ["Saint Martin"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Caribbean"}, british_spelling = true, }, -- overseas collectivity of France ["Saint Pierre and Miquelon"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", divs = {"communes"}, addl_parents = {"North America"}, british_spelling = true, }, -- special municipality of the Netherlands ["Sint Eustatius"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- constituent country of the Netherlands ["Sint Maarten"] = { placetype = {"constituent country", "country"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Somalia ["Somaliland"] = { placetype = {"unrecognized country", "country"}, addl_parents = {"Somalia", "Africa"}, keydesc = "the de-facto independent state of [[Somaliland]], internationally recognized as part of the country of [[Somalia]]", british_spelling = true, }, -- British Overseas Territory -- FIXME: We should form the group "South Georgia and the South Sandwich Islands" like we did for -- "Saint Helena, Ascension and Tristan da Cunha". ["South Georgia"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Atlantic Ocean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Georgia ["South Ossetia"] = { placetype = {"unrecognized country", "country"}, addl_parents = {"Georgia", "Europe", "Asia"}, keydesc = "the de-facto independent state of [[South Ossetia]], internationally recognized as part of the country of [[Georgia]]", british_spelling = true, }, -- British Overseas Territory ["South Sandwich Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Atlantic Ocean"}, wp = true, wpcat = "South Georgia and the South Sandwich Islands", british_spelling = true, }, -- Norwegian unincorporated area ["Svalbard"] = { placetype = {"unincorporated area", "dependent territory", "territory", "archipelago"}, container = "Norway", addl_parents = {"Europe"}, british_spelling = true, }, -- dependent territory of New Zealand ["Tokelau"] = { placetype = {"dependent territory", "territory"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Moldova ["Transnistria"] = { placetype = {"unrecognized country", "country"}, addl_parents = {"Moldova", "Europe"}, keydesc = "the de-facto independent state of [[Transnistria]], internationally recognized as part of [[Moldova]]", british_spelling = true, }, -- British Overseas Territory ["Turks and Caicos Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- unincorporated territory of the United States ["United States Minor Outlying Islands"] = { the = true, placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Islands", "Micronesia", "Polynesia", "Caribbean"}, }, -- FIXME: We should add entries for the other minor outlying islands. -- Baker Island (Oceania) -- Howland Island (Oceania) -- Jarvis Island (Oceania) -- Johnston Atoll (Oceania) -- Kingman Reef (Oceania) -- Midway Atoll (Oceania) -- Navassa Island (Caribbean) -- Palmyra Atoll (Oceania) -- Wake Island (Oceania) ["Wake Island"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- unincorporated territory of the United States ["United States Virgin Islands"] = { the = true, placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Caribbean"}, }, ["U.S. Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true}, ["US Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true}, -- overseas collectivity of France ["Wallis and Futuna"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Polynesia"}, british_spelling = true, }, } export.country_like_entities_group = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Saint Helena, Ascension and Tristan da Cunha". key_to_placename = false, placename_to_key = false, canonicalize_key_container = make_canonicalize_key_container(nil, "country"), default_overriding_bare_label_parents = {"country-like entities"}, default_no_container_cat = true, default_no_container_parent = true, -- These entities often aren't really part of their container; a village in Wallis and Futuna (an overseas -- collectivity of France in Polynesia), for example, shouldn't be treated as a village in France, nor as a village -- in Europe. default_no_auto_augment_container = true, data = export.country_like_entities, } -- Former countries and such; we don't create "Cities in ..." categories because they don't exist anymore export.former_countries = { -- de-facto independent state of Armenian ethnicity, internationally recognized as part of Azerbaijan -- (also known as Nagorno-Karabakh) -- NOTE: Formerly listed Armenia as a parent; this seems politically non-neutral so I've taken it out. ["Artsakh"] = { placetype = {"unrecognized country", "country"}, addl_parents = {"Azerbaijan", "Europe", "Asia"}, keydesc = "the former de-facto independent state of [[Artsakh]], internationally recognized as part of [[Azerbaijan]]", british_spelling = true, }, ["Nagorno-Karabakh"] = {alias_of = "Artsakh"}, ["Czechoslovakia"] = {container = "Europe", british_spelling = true}, ["East Germany"] = {container = "Europe", addl_parents = {"Germany"}, british_spelling = true}, ["North Vietnam"] = {container = "Asia", addl_parents = {"Vietnam"}}, ["Persia"] = {placetype = {"empire", "country"}, container = "Asia", divs = {"provinces"}}, ["Byzantine Empire"] = { the = true, placetype = {"empire", "country"}, container = {"Europe", "Africa", "Asia"}, addl_parents = {"Ancient Europe", "Ancient Near East"}, divs = { "provinces", "themes", }}, ["Roman Empire"] = { the = true, placetype = {"empire", "country"}, container = {"Europe", "Africa", "Asia"}, addl_parents = {"Rome"}, divs = { "provinces", {type = "FORMER provinces", cat_as = "provinces"}, }}, ["South Vietnam"] = {container = "Asia", addl_parents = {"Vietnam"}}, ["Soviet Union"] = { the = true, container = {"Europe", "Asia"}, divs = {"republics", "autonomous republics"}, british_spelling = true}, ["West Germany"] = {container = "Europe", addl_parents = {"Germany"}, british_spelling = true}, ["Yugoslavia"] = {container = "Europe", divs = {"districts"}, keydesc = "the former [[Kingdom of Yugoslavia]] (1918–1943) or the former [[Socialist Federal Republic of Yugoslavia]] (1943–1992)", british_spelling = true}, } export.former_countries_group = { canonicalize_key_container = canonicalize_continent_container, default_overriding_bare_label_parents = {"former countries and country-like entities"}, default_is_former_place = true, default_placetype = "country", default_no_container_cat = true, default_no_container_parent = true, -- No need to augment country holonyms with continents; not needed for disambiguation. default_no_auto_augment_container = true, data = export.former_countries, } ----------------------------------------------------------------------------------- -- Subpolity tables -- ----------------------------------------------------------------------------------- export.australia_states_and_territories = { ["Australian Capital Territory, Australia"] = {the = true, placetype = "territory"}, ["Jervis Bay Territory, Australia"] = {the = true, placetype = "territory"}, ["New South Wales, Australia"] = {}, ["Northern Territory, Australia"] = {the = true, placetype = "territory"}, ["Queensland, Australia"] = {}, ["South Australia, Australia"] = {}, ["Tasmania, Australia"] = {}, ["Victoria, Australia"] = {}, ["Western Australia, Australia"] = {}, } -- states and territories of Australia export.australia_group = { default_container = "Australia", default_placetype = "state", default_divs = "local government areas", data = export.australia_states_and_territories, } export.austria_states = { ["Vienna, Austria"] = {}, ["Lower Austria, Austria"] = {}, ["Upper Austria, Austria"] = {}, ["Styria, Austria"] = {}, ["Tyrol, Austria"] = {wp = "Tyrol (state)"}, ["Carinthia, Austria"] = {}, ["Salzburg, Austria"] = {wp = "Salzburg (state)"}, ["Vorarlberg, Austria"] = {}, ["Burgenland, Austria"] = {}, } -- states of Austria export.austria_group = { default_container = "Austria", default_placetype = "state", default_divs = "municipalities", data = export.austria_states, } export.bangladesh_divisions = { ["Barisal Division, Bangladesh"] = {}, ["Chittagong Division, Bangladesh"] = {}, ["Dhaka Division, Bangladesh"] = {}, ["Khulna Division, Bangladesh"] = {}, ["Mymensingh Division, Bangladesh"] = {}, ["Rajshahi Division, Bangladesh"] = {}, ["Rangpur Division, Bangladesh"] = {}, ["Sylhet Division, Bangladesh"] = {}, } -- divisions of Bangladesh export.bangladesh_group = { key_to_placename = make_key_to_placename(", Bangladesh$", " Division$"), placename_to_key = make_placename_to_key(", Bangladesh", " Division"), default_container = "Bangladesh", default_placetype = "division", default_divs = "districts", data = export.bangladesh_divisions, } export.brazil_states = { ["Acre, Brazil"] = {wp = "%l (state)"}, ["Alagoas, Brazil"] = {}, ["Amapá, Brazil"] = {}, ["Amazonas, Brazil"] = {wp = "%l (Brazilian state)"}, ["Bahia, Brazil"] = {}, ["Ceará, Brazil"] = {}, ["Distrito Federal, Brazil"] = {wp = "Federal District (Brazil)"}, ["Espírito Santo, Brazil"] = {}, ["Goiás, Brazil"] = {}, ["Maranhão, Brazil"] = {}, ["Mato Grosso, Brazil"] = {}, ["Mato Grosso do Sul, Brazil"] = {}, ["Minas Gerais, Brazil"] = {}, ["Pará, Brazil"] = {}, ["Paraíba, Brazil"] = {}, ["Paraná, Brazil"] = {wp = "%l (state)"}, ["Pernambuco, Brazil"] = {}, ["Piauí, Brazil"] = {}, ["Rio de Janeiro, Brazil"] = {wp = "%l (state)"}, ["Rio Grande do Norte, Brazil"] = {}, ["Rio Grande do Sul, Brazil"] = {}, ["Rondônia, Brazil"] = {}, ["Roraima, Brazil"] = {}, ["Santa Catarina, Brazil"] = {wp = "%l (state)"}, ["São Paulo, Brazil"] = {wp = "%l (state)"}, ["Sergipe, Brazil"] = {}, ["Tocantins, Brazil"] = {}, } -- states of Brazil export.brazil_group = { default_container = "Brazil", default_placetype = "state", default_divs = "municipalities", data = export.brazil_states, } -- provinces (a.k.a. oblasts) of Bulgaria export.bulgaria_provinces = { ["Blagoevgrad Province, Bulgaria"] = {}, ["Burgas Province, Bulgaria"] = {}, ["Dobrich Province, Bulgaria"] = {}, ["Gabrovo Province, Bulgaria"] = {}, ["Haskovo Province, Bulgaria"] = {}, ["Kardzhali Province, Bulgaria"] = {}, ["Kyustendil Province, Bulgaria"] = {}, ["Lovech Province, Bulgaria"] = {}, ["Montana Province, Bulgaria"] = {}, ["Pazardzhik Province, Bulgaria"] = {}, ["Pernik Province, Bulgaria"] = {}, ["Pleven Province, Bulgaria"] = {}, ["Plovdiv Province, Bulgaria"] = {}, ["Razgrad Province, Bulgaria"] = {}, ["Ruse Province, Bulgaria"] = {}, ["Shumen Province, Bulgaria"] = {}, ["Silistra Province, Bulgaria"] = {}, ["Sliven Province, Bulgaria"] = {}, ["Smolyan Province, Bulgaria"] = {}, ["Sofia City Province, Bulgaria"] = {}, ["Sofia Province, Bulgaria"] = {}, ["Stara Zagora Province, Bulgaria"] = {}, ["Targovishte Province, Bulgaria"] = {}, ["Varna Province, Bulgaria"] = {}, ["Veliko Tarnovo Province, Bulgaria"] = {}, ["Vidin Province, Bulgaria"] = {}, ["Vratsa Province, Bulgaria"] = {}, ["Yambol Province, Bulgaria"] = {}, } export.bulgaria_group = { key_to_placename = make_key_to_placename(", Bulgaria$", " Province$"), placename_to_key = make_placename_to_key(", Bulgaria", " Province"), default_container = "Bulgaria", --== source: https://en.wikipedia.org/wiki/NUTS_statistical_regions_of_Bulgaria == divs = {"regions", "planning regions", "provinces", "municipalities", "settlements"}, default_placetype = "province", data = export.bulgaria_provinces, } export.canada_provinces_and_territories = { ["Alberta, Canada"] = {divs = { {type = "municipal districts", container_parent_type = "rural municipalities"}, }}, ["British Columbia, Canada"] = {divs = {type = "regional districts", container_parent_type = false}, "regional municipalities", }, ["Manitoba, Canada"] = {divs = {"rural municipalities"}}, ["New Brunswick, Canada"] = {divs = {"counties", "parishes", {type = "civil parishes", cat_as = "parishes"}}}, ["Newfoundland and Labrador, Canada"] = {}, ["Northwest Territories, Canada"] = {the = true, placetype = "territory"}, ["Nova Scotia, Canada"] = {divs = {"counties", "regional municipalities"}}, ["Nunavut, Canada"] = {placetype = "territory"}, ["Ontario, Canada"] = {divs = {"counties", "regional municipalities", {type = "townships", prep = "in"}}}, ["Prince Edward Island, Canada"] = {divs = {"counties", "parishes", "rural municipalities"}}, ["Saskatchewan, Canada"] = {divs = {"rural municipalities"}}, ["Quebec, Canada"] = {divs = { "counties", {type = "regional county municipalities", container_parent_type = "regional municipalities"}, -- administrative regions have an official (but non-governmental) function but there don't appear to be any -- equivalent regions elsewhere in Canada, so disable the [[Category:Regions of Canada]] grouping {type = "regions", container_parent_type = false}, {type = "townships", prep = "in"}, {type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}}, {type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}}, {type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}}, }}, ["Yukon, Canada"] = {placetype = "territory"}, ["Yukon Territory, Canada"] = {alias_of = "Yukon, Canada", the = true}, } -- provinces and territories of Canada export.canada_group = { default_container = "Canada", default_placetype = "province", data = export.canada_provinces_and_territories, } export.china_provinces_and_autonomous_regions = { -- direct-administered municipalities are not here but below under prefecture-level cities ["Anhui, China"] = {}, ["Fujian, China"] = {}, ["Fuchien, China"] = {alias_of = "Fujian, China", display = true}, ["Gansu, China"] = {}, ["Guangdong, China"] = {}, ["Guangxi, China"] = {placetype = "autonomous region"}, ["Guizhou, China"] = {}, ["Hainan, China"] = {}, ["Hebei, China"] = {}, ["Heilongjiang, China"] = {}, ["Henan, China"] = {}, ["Hubei, China"] = {}, ["Hunan, China"] = {}, ["Inner Mongolia, China"] = {placetype = "autonomous region"}, ["Jiangsu, China"] = {}, ["Jiangxi, China"] = {}, ["Jilin, China"] = {}, ["Liaoning, China"] = {}, ["Ningxia, China"] = {placetype = "autonomous region"}, ["Qinghai, China"] = {}, ["Shaanxi, China"] = {}, ["Shandong, China"] = {}, ["Shanxi, China"] = {}, ["Sichuan, China"] = {}, ["Tibet, China"] = {placetype = "autonomous region", wp = "Tibet Autonomous Region"}, ["Xinjiang, China"] = {placetype = "autonomous region"}, ["Yunnan, China"] = {}, ["Zhejiang, China"] = {}, } -- provinces and autonomous regions of China export.china_group = { default_container = "China", default_placetype = "province", default_divs = { "prefectures", "prefecture-level cities", "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_provinces_and_autonomous_regions, } export.china_prefecture_level_cities = { -- In China, a "prefecture-level city" is not a city in any real sense. It is rather a prefecture, which is an -- administrative unit smaller than a province but bigger than a county, which is administratively controlled by -- the chief city of the prefecture (which bears the same name as the prefecture), in a unified government. Prior -- to the mid-1980's, in fact, prefecture-level cities *were* prefectures, and a few of them (especially in the -- western portion of China) have not yet been converted. Generally a given province is entirely tiled by -- prefecture-level cities, another indication that they should be treated as prefectures and not cities per se. -- Yet another indication is that prefecture-level cities can contain counties and county-level cities (which, much -- like prefecture-level cities, are effectively counties surrounding a chief city of the county, again which bears -- the same name as the county-level city). -- -- For this reason, we treat prefecture-level cities as non-city political divisions, and separately enumerate the -- most populous so we can separately categorize districts and counties under them instead of lumping them at the -- province level. -- -- Note also that China separately distinguishes "urban area" from "metro area". Sometimes the two figures are -- identical but sometimes the metro area is larger (and very occasionally smaller, which I assume is an error). I'm -- guessing that the "urban area" is the contiguous urban area over a certain density while the metro area includes -- all urban areas above a certain density; when the latter is greater, it's because of satellite cities in the -- metro area separated by suburban/exurban or rural land. -- At first I chose all prefecture/province-level cities with a total prefecture/province-level population of at -- least 6,000,000 per the 2020 census with data taken from https://www.citypopulation.de/en/china/admin/ (a total -- of 67, including the four direct-administered municipalities), and also chose all prefecture/province-level -- cities whose "urban population" was at least 2,000,000 per the 2020 census with data taken from Wikipedia -- [[w:List of cities in China by population#Cities and towns by population]] (a total of 61 cities; if we cut off -- at 1.5 million we'd have 84 cities, and if we cut off at 1 million we'd have 105 cities). Merging them produces -- 87 cities. Note that this leaves off a few well-known cities (Guilin, Qiqihar, Kashgar, Lhasa, ...) but includes -- a lot of obscure cities. -- -- At a later date I added all cities from citypopulation.de whose "urban" population per the 2020 China census was -- >= 1 million, and then finally added all urban agglomerations from citypopulation.de whose 2025-01-01 estimate -- was >= 1 million. These are sorted below by the urban agglomeration value (which is generally of the "adm-urb" = -- "administrative area (urban population)" type) and sometimes groups nearby cities into a single agglomeration -- (most notably in the case of the Pearl River Delta, grouped under Guangzhou with an agglomeration population of -- 72,700,000 but including a large number of nearby large cities in the agglomeration (although for some reason not -- Hong Kong, maybe due to the administrative issues involved). In addition, citypopulation.de includes divisions -- under a prefecture-level city if they are city-like and have an agglomeration population of at least 1 million; -- this includes several county-level cities, one county and one district (Wanzhou, a "district" of Chongqing -- despite being 142 miles away). None of the county-level cities or counties have districts under them, only -- subdistricts, towns and townships. ["Guangzhou"] = {container = "Guangdong"}, -- 18.7 prefectural, 18.8 urban; sub-provincial city; 16.097 urban (72.700 adm-urb including Dongguan, Foshan, Huizhou, Jiangmen, Shenzhen, Zhongshan) per citypopulation.de ["Dongguan"] = {container = "Guangdong"}, -- 10.5 prefectural, 10.5 urban; 9.645 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Foshan"] = {container = "Guangdong"}, -- 9.5 prefectural, 9.5 urban; 9.043 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Huizhou"] = {container = "Guangdong"}, -- 6.0 prefectural, 2.5 urban; 2.900 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Jiangmen"] = {container = "Guangdong"}, -- 4.798 prefectural, 2.7 urban; 1.795 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Shenzhen"] = {container = "Guangdong"}, -- 17.5 prefectural, 14.7 urban; sub-provincial city; 17.445 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Zhongshan"] = {container = "Guangdong"}, -- 4.418 prefectural, 4.4 urban; 3.842 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Shanghai"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 24.9 prefectural, 29.9 urban; 21.910 urban (41.600 adm-urb including Changshu, Changzhou, Suzhou, Wuxi) per citypopulation.de ["Changshu"] = {container = "Jiangsu"}, -- 1.231 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration -- NOTE: Not to be confused with Cangzhou in Hebei ["Changzhou"] = {container = "Jiangsu"}, -- 5.278 prefectural, 3.6 urban; 3.187 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration -- NOTE: There is also a prefecture-level city Suzhou in Anhui with 5.3 million prefectural inhabitants ["Suzhou"] = {container = "Jiangsu"}, -- 12.8 prefectural, 4.3 urban; 5.893 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration ["Wuxi"] = {container = "Jiangsu"}, -- 7.5 prefectural, 3.3 urban; 3.957 per citypopulation.de; included by citypopulation.de in Shanghai agglomeration ["Beijing"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 21.9 prefectural, 21.9 urban; 18.961 urban (21.500 adm-urb) per citypopulation.de ["Chengdu"] = {container = "Sichuan"}, -- 20.9 prefectural, 16.9 urban; sub-provincial city; 13.568 urban (18.100 adm-urb) per citypopulation.de ["Xiamen"] = {container = "Fujian"}, -- 5.163 prefectural, 5.2 urban; sub-provincial city; 4.617 urban (15.400 adm-urb including Jinjiang, Quanzhou, Putian) per citypopulation.de ["Jinjiang"] = {container = "Fujian"}, -- 1.416 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Quanzhou"] = {container = "Fujian"}, -- 8.8 prefectural, 1.7 urban (6.7 metro); 1.469 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Putian"] = {container = "Fujian"}, -- 3.210 prefectural, 2.0 urban; 1.539 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Hangzhou"] = {container = "Zhejiang"}, -- 11.9 prefectural, 10.7 urban; sub-provincial city; 9.236 urban (14.600 adm-urb including Shaoxing) per citypopulation.de ["Shaoxing"] = {container = "Zhejiang"}, -- 5.270 prefectural, 2.5 urban; 2.333 urban per citypopulation.de; included by citypopulation.de in Hangzhou agglomeration ["Xi'an"] = {container = "Shaanxi"}, -- 12.1 prefectural, 11.9 urban; sub-provincial city; 9.393 urban (13.400 adm-urb including Xianyang) per citypopulation.de ["Xianyang"] = {container = "Shaanxi"}, -- 1.193 urban per citypopulation.de; included by citypopulation.de in Xi'an agglomeration ["Chongqing"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 32.1 prefectural, 16.9 urban; 9.581 urban (12.900 adm-urb) per citypopulation.de ["Wuhan"] = {container = "Hubei"}, -- 12.4 prefectural, 12.3 urban; sub-provincial city; 10.495 urban (12.600 adm-urb) per citypopulation.de ["Tianjin"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 13.9 prefectural, 13.9 urban; 11.052 urban (11.700 adm-urb) per citypopulation.de ["Changsha"] = {container = "Hunan"}, -- 10.0 prefectural, 6.0 urban; 5.630 urban (11.500 adm-urb including Xiangtan, Zhuzhou) per citypopulation.de -- Changsha County -- 1.024 urban per citypopulation.de ["Zhuzhou"] = {container = "Hunan"}, -- 1.510 urban per citypopulation.de; included by citypopulation.de in Changsha agglomeration ["Zhengzhou"] = {container = "Henan"}, -- 12.6 prefectural, 6.7 urban; 6.461 urban (10.300 adm-urb) per citypopulation.de ["Nanjing"] = {container = "Jiangsu"}, -- 9.3 prefectural, 9.3 urban; sub-provincial city; 7.520 urban (9.500 adm-urb including Ma'anshan) per citypopulation.de ["Shenyang"] = {container = "Liaoning"}, -- 9.1 prefectural, 7.9 urban; sub-provincial city; 7.026 urban (8.800 adm-urb including Fushun) per citypopulation.de ["Fushun"] = {container = "Liaoning"}, -- 1.229 urban per citypopulation.de; included by citypopulation.de in Shenyang agglomeration ["Hefei"] = {container = "Anhui"}, -- 9.4 prefectural, 4.2 urban; 5.056 urban (8.200 adm-urb) per citypopulation.de ["Shantou"] = {container = "Guangdong"}, -- 5.502 prefectural, 4.3 urban; 3.839 urban (8.050 adm-urb including Chaozhou, Jieyang, Puning) per citypopulation.de ["Chaozhou"] = {container = "Guangdong"}, -- 1.254 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration ["Jieyang"] = {container = "Guangdong"}, -- 1.243 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration ["Qingdao"] = {container = "Shandong"}, -- 10.1 prefectural, 7.1 urban; sub-provincial city; 6.165 urban (7.700 adm-urb) per citypopulation.de ["Ningbo"] = {container = "Zhejiang"}, -- 9.4 prefectural, 5.1 urban; sub-provincial city; 3.731 urban (7.600 adm-urb including Cixi, Yuyao) per citypopulation.de ["Cixi"] = {container = "Zhejiang"}, -- 1.458 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration ["Yuyao"] = {container = "Zhejiang"}, -- 1.014 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration -- Hong Kong 7.500 agglomeration per citypopulation.de 2025-01-01 estimate including Kowloon, Victoria ["Wenzhou"] = {container = "Zhejiang"}, -- 9.6 prefectural, 3.6 urban; 2.582 urban (7.000 adm-urb including Rui'an, Cangnan, Pingyang) per citypopulation.de -- Rui'an is a "county-level city" of the "prefecture-level city" of Wenzhou but in fact is 19 miles away from Wenzhou city proper (urban core to urban core). ["Rui'an"] = {placetype = "county-level city", container = {key = "Wenzhou", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 1.013 urban per citypopulation.de; included by citypopulation.de in Wenzhou agglomeration ["Kunming"] = {container = "Yunnan"}, -- 8.5 prefectural, 6.0 urban; 5.273 urban (6.800 adm-urb) per citypopulation.de -- includes Láiwú city ["Jinan"] = {container = "Shandong", wp = "%l, %c"}, -- 9.2 prefectural, 8.4 urban; sub-provincial city; 5.648 urban (6.750 adm-urb) per citypopulation.de -- includes Xīnjí city ["Shijiazhuang"] = {container = "Hebei"}, -- 11.2 prefectural, 4.1 urban; 5.090 urban (6.450 adm-urb) per citypopulation.de ["Taiyuan"] = {container = "Shanxi"}, -- 5.304 prefectural, 4.5 urban; 4.304 urban (6.150 adm-urb) per citypopulation.de ["Harbin"] = {container = "Heilongjiang"}, -- 10.0 prefectural, 7.0 urban; sub-provincial city; 5.243 urban (5.550 adm-urb) per citypopulation.de ["Nanning"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 8.7 prefectural, 3.8 urban; 4.583 urban (5.550 adm-urb) per citypopulation.de ["Dalian"] = {container = "Liaoning"}, -- 7.5 prefectural, 5.7 urban; sub-provincial city; 4.914 urban (5.400 adm-urb) per citypopulation.de ["Guiyang"] = {container = "Guizhou"}, -- 5.987 prefectural, 3.5 urban; 4.021 urban (5.300 adm-urb) per citypopulation.de ["Changchun"] = {container = "Jilin"}, -- 9.1 prefectural, 5.7 urban; sub-provincial city; 4.557 urban (5.200 adm-urb) per citypopulation.de ["Nanchang"] = {container = "Jiangxi"}, -- 6.3 prefectural, 3.6 (3.9?) urban, 5.3 metro; 3.519 urban (5.150 adm-urb) per citypopulation.de ["Ürümqi"] = {container = {key = "Xinjiang, China", placetype = "autonomous region"}}, -- 4.054 prefectural, 4.3 urban; 3.843 urban (5.000 adm-urb) per citypopulation.de ["Urumqi"] = {alias_of = "Ürümqi", display = true}, ["Fuzhou"] = {container = "Fujian"}, -- 8.3 prefectural, 4.1 urban; 3.723 urban (4.775 adm-urb) per citypopulation.de ["Linyi"] = {container = "Shandong"}, -- 11.0 prefectural, 2.3 urban; 2.744 urban (4.650 adm-urb) per citypopulation.de ["Zibo"] = {container = "Shandong"}, -- 4.704 prefectural, 2.6 urban; 2.750 urban (3.975 adm-urb) per citypopulation.de ["Luoyang"] = {container = "Henan"}, -- 7.1 prefectural, 2.4 urban; 2.231 urban (3.750 adm-urb) per citypopulation.de ["Lanzhou"] = {container = "Gansu"}, -- 4.359 prefectural, 3.1 urban; 3.013 urban (3.575 adm-urb) per citypopulation.de ["Nantong"] = {container = "Jiangsu"}, -- 7.7 prefectural, 2.3 urban; 2.988 urban (3.475 adm-urb) citypopulation.de ["Weifang"] = {container = "Shandong"}, -- 9.4 prefectural, 2.7 urban; 1.998 urban (3.325 adm-urb) per citypopulation.de ["Jiangyin"] = {container = "Jiangsu"}, -- 1.331 urban (3.200 adm-urb including Zhangjiagang) per citypopulation.de ["Zhangjiagang"] = {container = "Jiangsu"}, -- 1.056 urban per citypopulation.de; included in Jiangyin figures ["Xuzhou"] = {container = "Jiangsu"}, -- 9.1 prefectural, 2.6 urban; 2.846 urban (3.150 adm-urb) per citypopulation.de ["Handan"] = {container = "Hebei"}, -- 9.4 prefectural, 2.8 urban; 2.095 urban (2.925 adm-urb) per citypopulation.de ["Hohhot"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 3.446 prefectural, 2.7 urban; 2.373 urban (2.850 adm-urb) per citypopulation.de ["Haikou"] = {container = "Hainan"}, -- 2.873 prefectural, 2.3 urban; 2.349 urban (2.800 adm-urb) per citypopulation.de ["Tangshan"] = {container = "Hebei"}, -- 7.7 prefectural, 3.4 urban; 2.550 urban (2.750 adm-urb) per citypopulation.de ["Xinxiang"] = {container = "Henan"}, -- 6.3 prefectural, 1.2 urban, 2.7 metro; 1.271 urban (2.700 adm-urb) per citypopulation.de ["Yiwu"] = {container = "Zhejiang"}, -- 1.481 urban (2.700 adm-urb) per citypopulation.de ["Zhuhai"] = {container = "Guangdong"}, -- 2.439 prefectural, 2.4 urban; 2.207 urban (2.675 adm-urb) per citypopulation.de ["Taizhou, Zhejiang"] = {container = "Zhejiang"}, -- 6.6 prefectural, 1.6 urban; 1.486 urban (2.625 adm-urb) per citypopulation.de ["Taizhou"] = {alias_of = "Taizhou, Zhejiang"}, ["Yantai"] = {container = "Shandong"}, -- 7.1 prefectural, 2.5 urban; 2.312 urban (2.550 adm-urb) per citypopulation.de ["Yinchuan"] = {container = {key = "Ningxia, China", placetype = "autonomous region"}}, -- 1.663 urban (2.525 adm-urb) per citypopulation.de ["Liuzhou"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 4.157 prefectural, 2.2 urban; 2.205 urban (2.500 adm-urb) per citypopulation.de ["Anshan"] = {container = "Liaoning"}, -- 1.480 urban (2.350 adm-urb including Liáoyáng) per citypopulation.de ["Yangzhou"] = {container = "Jiangsu"}, -- 2.067 urban (2.300 adm-urb) per citypopulation.de ["Jiaxing"] = {container = "Zhejiang"}, -- 1.188 urban (2.275 adm-urb) per citypopulation.de ["Xining"] = {container = "Qinghai"}, -- 1.677 urban (2.250 adm-urb) per citypopulation.de -- includes Dìngzhōu city and Xióngān Xīnqū ["Baoding"] = {container = "Hebei"}, -- 11.5 prefectural, 2.0 urban; 1.940 urban (2.225 adm-urb) per citypopulation.de ["Baotou"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 2.709 prefectural, 2.2 urban; 2.104 urban (2.200 adm-urb) per citypopulation.de ["Ganzhou"] = {container = "Jiangxi"}, -- 9.0 prefectural, 1.6 urban; 1.778 urban (2.150 adm-urb) per citypopulation.de ["Pingdingshan"] = {container = "Henan"}, -- 1.046 urban (2.100 adm-urb) per citypopulation.de ["Zunyi"] = {container = "Guizhou"}, -- 6.6 prefectural, 2.4 urban/metro; 1.675 urban (2.025 adm-urb) per citypopulation.de ["Bengbu"] = {container = "Anhui"}, -- 1.078 urban (2.000 adm-urb) per citypopulation.de ["Datong"] = {container = "Shanxi"}, -- 3.105 prefectural, 2.0 urban; 1.810 urban (2.000 adm-urb) per citypopulation.de ["Anyang"] = {container = "Henan"}, -- 1.188 urban (1.960 adm-urb) per citypopulation.de ["Huai'an"] = {container = "Jiangsu"}, -- 4.556 prefectural, 2.6 urban; 1.805 urban (1.940 adm-urb) per citypopulation.de ["Zaozhuang"] = {container = "Shandong"}, -- 1.350 urban (1.900 adm-urb) per citypopulation.de ["Zhanjiang"] = {container = "Guangdong"}, -- 7.0 prefectural, 1.9 urban; 1.401 urban (1.890 adm-urb) per citypopulation.de ["Huainan"] = {container = "Anhui"}, -- 1.256 urban (1.880 adm-urb) per citypopulation.de ["Jining"] = {container = "Shandong"}, -- 8.4 prefectural, 1.5 urban; 1.700 urban (1.880 adm-urb) per citypopulation.de ["Daqing"] = {container = "Heilongjiang"}, -- 1.604 urban (1.860 adm-urb) per citypopulation.de ["Wuhu"] = {container = "Anhui"}, -- 1.598 urban (1.850 adm-urb) per citypopulation.de ["Guilin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 1.361 urban (1.830 adm-urb) per citypopulation.de ["Mianyang"] = {container = "Sichuan"}, -- 1.549 urban (1.800 adm-urb) per citypopulation.de ["Xiangyang"] = {container = "Hubei"}, -- 1.686 urban (1.800 adm-urb) per citypopulation.de ["Huzhou"] = {container = "Zhejiang"}, -- 1.084 urban (1.750 adm-urb) per citypopulation.de ["Puyang"] = {container = "Henan"}, -- 0.824 urban (1.750 adm-urb) per citypopulation.de ["Shangqiu"] = {container = "Henan"}, -- 7.8 prefectural, 1.9 urban (2.8 metro); 1.031 urban (1.750 adm-urb) per citypopulation.de ["Qinhuangdao"] = {container = "Hebei"}, -- 1.520 urban (1.740 adm-urb) per citypopulation.de ["Xingtai"] = {container = "Hebei"}, -- 7.1 prefectural, 971,000 urban; 1.5 urban (1.700 adm-urb) per citypopulation.de ["Nanyang"] = {container = "Henan", wp = "%l, %c"}, -- 9.7 prefectural, 2.1 urban/metro; 1.481 urban (1.680 adm-urb) per citypopulation.de ["Jiaozuo"] = {container = "Henan"}, -- 0.875 urban (1.640 adm-urb) per citypopulation.de ["Jilin City"] = {container = "Jilin"}, -- 1.509 urban (1.610 adm-urb) per citypopulation.de ["Jilin"] = {alias_of = "Jilin City"}, ["Jinhua"] = {container = "Zhejiang"}, -- 7.1 prefectural, 1.5 urban; 1.041 urban (1.590 adm-urb) per citypopulation.de ["Shangrao"] = {container = "Jiangxi"}, -- 6.5 prefectural, 2.1 urban, 1.3 metro [sic]; 1.342 urban (1.580 adm-urb) per citypopulation.de ["Heze"] = {container = "Shandong"}, -- 8.8 prefectural, 1.3 urban; 1.294 urban (1.570 adm-urb) per citypopulation.de ["Yulin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}, wp = "%l, %c"}, -- 0.878 urban (1.570 adm-urb) per citypopulation.de ["Tai'an"] = {container = "Shandong"}, -- 1.417 urban (1.560 adm-urb) per citypopulation.de ["Weihai"] = {container = "Shandong"}, -- 1.340 urban (1.510 adm-urb) per citypopulation.de -- Taizhou, Jiangsu would be here (1.490 adm-urb) but moved to china_prefecture_level_cities_2 to avoid clash ["Yancheng"] = {container = "Jiangsu"}, -- 6.7 prefectural, 1.6 urban; 1.353 urban (1.460 adm-urb) per citypopulation.de ["Zhangjiakou"] = {container = "Hebei"}, -- 1.339 urban (1.450 adm-urb) per citypopulation.de ["Maoming"] = {container = "Guangdong"}, -- 6.2 prefectural, 2.5 urban; 1.308 urban (1.440 adm-urb) per citypopulation.de ["Nanchong"] = {container = "Sichuan"}, -- 1.254 urban (1.440 adm-urb) per citypopulation.de ["Fuyang"] = {container = "Anhui", wp = "%l, %c"}, -- 8.2 prefectural, 2.1 urban; 1.191 urban (1.410 adm-urb) per citypopulation.de ["Xuchang"] = {container = "Henan"}, -- 0.850 urban (1.390 adm-urb) per citypopulation.de ["Yichang"] = {container = "Hubei"}, -- 1.284 urban (1.390 adm-urb) per citypopulation.de ["Dazhou"] = {container = "Sichuan"}, -- 1.136 urban (1.380 adm-urb) per citypopulation.de ["Kaifeng"] = {container = "Henan"}, -- 1.194 urban (1.340 adm-urb) per citypopulation.de ["Luzhou"] = {container = "Sichuan"}, -- 1.128 urban (1.340 adm-urb) per citypopulation.de ["Qingyuan"] = {container = "Guangdong"}, -- 1.198 urban (1.340 adm-urb) per citypopulation.de ["Huaibei"] = {container = "Anhui"}, -- 0.831 urban (1.330 adm-urb) per citypopulation.de ["Yibin"] = {container = "Sichuan"}, -- 1.101 urban (1.310 adm-urb) per citypopulation.de ["Lu'an"] = {container = "Anhui"}, -- 1.070 urban (1.300 adm-urb) per citypopulation.de ["Dezhou"] = {container = "Shandong"}, -- 0.843 urban (1.290 adm-urb) per citypopulation.de ["Rizhao"] = {container = "Shandong"}, -- 1.147 urban (1.270 adm-urb) per citypopulation.de ["Changzhi"] = {container = "Shanxi"}, -- 1.047 urban (1.250 adm-urb) per citypopulation.de ["Hengyang"] = {container = "Hunan"}, -- 6.6 prefectural, 1.5 urban; 1.185 urban (1.250 adm-urb) per citypopulation.de ["Jinzhou"] = {container = "Liaoning"}, -- 1.021 urban (1.240 adm-urb) per citypopulation.de ["Liaocheng"] = {container = "Shandong"}, -- 1.020 urban (1.240 adm-urb) per citypopulation.de ["Changde"] = {container = "Hunan"}, -- 1.101 urban (1.230 adm-urb) per citypopulation.de ["Suqian"] = {container = "Jiangsu"}, -- 1.082 urban (1.230 adm-urb) per citypopulation.de ["Xinyang"] = {container = "Henan"}, -- 6.2 prefectural, 1.4 urban/metro; 1.015 urban (1.230 adm-urb) per citypopulation.de ["Baoji"] = {container = "Shaanxi"}, -- 1.108 urban (1.220 adm-urb) per citypopulation.de ["Yueyang"] = {container = "Hunan"}, -- 1.125 urban (1.220 adm-urb) per citypopulation.de ["Zhenjiang"] = {container = "Jiangsu"}, -- 1.124 urban (1.210 adm-urb) per citypopulation.de -- Wanzhou is a "district" of the "direct-administered municipality" of Chongqing but in fact is 142 miles away from Chongqing city proper. ["Wanzhou"] = {placetype = "district", container = {key = "Chongqing", placetype = "direct-administered municipality"}, divs = {"subdistricts", "townships"}, wp = "%l, %c"}, -- 1.078 urban (1.190 adm-urb) per citypopulation.de ["Ulanhad"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 1.093 urban (1.180 adm-urb) per citypopulation.de ["Chifeng"] = {alias_of = "Ulanhad"}, ["Ulankhad"] = {alias_of = "Ulanhad", display = true}, ["Ezhou"] = {container = "Hubei"}, -- < 0.750 urban (1.180 adm-urb) per citypopulation.de ["Zhaoqing"] = {container = "Guangdong"}, -- 1.036 urban (1.160 adm-urb) per citypopulation.de ["Lianyungang"] = {container = "Jiangsu"}, -- 4.599 prefectural, 2.0 urban; 1.071 urban (1.150 adm-urb) per citypopulation.de ["Qujing"] = {container = "Yunnan"}, -- 0.976 urban (1.150 adm-urb) per citypopulation.de -- Shuyang is a "county" of the "prefecture-level city" of Suqian but in fact is 38 miles away from Suqian city proper (urban core to urban core). -- The county itself is 37 miles by 34 miles. ["Shuyang"] = {placetype = "county", container = {key = "Suqian", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l County"}, -- 0.986 urban (1.120 adm-urb) per citypopulation.de -- Yongkang is a "county-level city" of the "prefecture-level city" of Jinhua but in fact is 32 miles away from Jinhua city proper (urban core to urban core). ["Yongkang"] = {placetype = "county-level city", container = {key = "Jinhua", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l, Zhejiang"}, -- < 0.750 urban (1.110 adm-urb) per citypopulation.de ["Zhoukou"] = {container = "Henan"}, -- 9.0 prefectural, 721,000 urban (1.6 metro); < 0.750 urban (1.100 adm-urb) per citypopulation.de ["Beihai"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- < 1 urban (1.090 adm-urb) per citypopulation.de ["Jiujiang"] = {container = "Jiangxi"}, -- < 0.750 urban (1.080 adm-urb) per citypopulation.de ["Shaoyang"] = {container = "Hunan"}, -- 6.6 prefectural, 802,000 urban, 1.4 metro; < 1 urban (1.080 adm-urb) per citypopulation.de ["Chuzhou"] = {container = "Anhui"}, -- < 0.750 urban (1.070 adm-urb) per citypopulation.de ["Hengshui"] = {container = "Hebei"}, -- 0.885 urban (1.070 adm-urb) per citypopulation.de ["Shiyan"] = {container = "Hubei"}, -- 0.955 urban (1.070 adm-urb) per citypopulation.de ["Huludao"] = {container = "Liaoning"}, -- 0.764 urban (1.060 adm-urb) per citypopulation.de ["Dongying"] = {container = "Shandong"}, -- 0.961 urban (1.050 adm-urb) per citypopulation.de ["Guigang"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 0.921 urban (1.050 adm-urb) per citypopulation.de -- Liuyang is a "county-level city" of the "prefecture-level city" of Changsha but in fact is 47 miles away from Changsha city proper (urban core to urban core). ["Liuyang"] = {placetype = "county-level city", container = {key = "Changsha", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.886 urban (1.040 adm-urb) per citypopulation.de -- NOTE: Not to be confused with Changzhou in Jiangsu ["Cangzhou"] = {container = "Hebei"}, -- 7.3 prefectural, 621,000 urban; 0.759 urban (1.030 adm-urb) per citypopulation.de ["Liupanshui"] = {container = "Guizhou"}, -- < 0.750 urban (1.030 adm-urb) per citypopulation.de ["Panjin"] = {container = "Liaoning"}, -- 0.980 urban (1.030 adm-urb) per citypopulation.de ["Qiqihar"] = {container = "Heilongjiang"}, -- 1.030 urban (1.030 adm-urb) per citypopulation.de ["Linfen"] = {container = "Shanxi"}, -- < 0.750 urban (1.010 adm-urb) per citypopulation.de -- Tengzhou is a "county-level city" of the "prefecture-level city" of Zaozhuang but in fact is 30 miles away from Zaozhuang city proper (urban core to urban core). ["Tengzhou"] = {placetype = "county-level city", container = {key = "Zaozhuang", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.937 urban (1.010 adm-urb) per citypopulation.de -- 3 extra that got added in earlier incarnations and aren't found in the "major agglomerations of the world" page https://citypopulation.de/en/world/agglomerations/ reference date 2025-01-01 ["Kunshan"] = {container = "Jiangsu"}, -- 1.652 urban (2020 China census) per citypopulation.de ["Zhumadian"] = {container = "Henan"}, -- 7.0 prefectural, 722,000 urban per Wikipedia; 0.754 urban per citypopulation.de ["Bijie"] = {container = "Guizhou"}, -- 6.9 prefectural, ? urban, ? metro (not listed in Wikipedia); < 0.750 urban per citypopulation.de } export.china_prefecture_level_cities_group = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Taizhou, Zhejiang" or "Suzhou, Anhui". key_to_placename = false, placename_to_key = false, -- don't add ", China" to make the key default_container = "China", canonicalize_key_container = make_canonicalize_key_container(", China", "province"), -- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people -- don't understand how Chinese administrative divisions work. default_placetype = {"prefecture-level city", "city"}, default_divs = { -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities, -- and prefecture-level cities (as well as county-level cities) are considered non-cities. "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_prefecture_level_cities, } -- Needed to avoid problems with two cities called Taizhou and Suzhou. export.china_prefecture_level_cities_2 = { -- NOTE: There is also a larger and better-known prefecture-level city Taizhou in Zhejiang. ["Taizhou, Jiangsu"] = {container = "Jiangsu"}, -- 1.3 urban (1.490 adm-urb) per citypopulation.de 2020 census ["Taizhou"] = {alias_of = "Taizhou, Jiangsu"}, -- NOTE: There is also a larger and better-known prefecture-level city Suzhou in Jiangsu. ["Suzhou, Anhui"] = {container = "Anhui"}, -- 5.3 prefectural, 1.766 metro and "urban"; < 1 urban (1.010 adm-urb) per citypopulation.de 2020 census -- hopefully this will work because we also have Suzhou as a key by itself for the larger, more-well-known Suzhou in Jiangsu ["Suzhou"] = {alias_of = "Suzhou, Anhui"}, } export.china_prefecture_level_cities_group_2 = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Taizhou, Jiangsu". placename_to_key = false, -- don't add ", China" to make the key default_container = "China", canonicalize_key_container = make_canonicalize_key_container(", China", "province"), -- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people -- don't understand how Chinese administrative divisions work. default_placetype = {"prefecture-level city", "city"}, default_divs = { -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities, -- and prefecture-level cities (as well as county-level cities) are considered non-cities. "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_prefecture_level_cities_2, } export.finland_regions = { ["Lapland, Finland"] = {wp = "%l (%c)"}, ["North Ostrobothnia, Finland"] = {}, ["Northern Ostrobothnia, Finland"] = {alias_of = "North Ostrobothnia, Finland", display = true}, ["Kainuu, Finland"] = {}, ["North Karelia, Finland"] = {}, ["Northern Savonia, Finland"] = {}, ["North Savo, Finland"] = {alias_of = "Northern Savonia, Finland", display = true}, ["Southern Savonia, Finland"] = {}, ["South Savo, Finland"] = {alias_of = "Southern Savonia, Finland", display = true}, ["South Karelia, Finland"] = {}, ["Central Finland, Finland"] = {}, ["South Ostrobothnia, Finland"] = {}, ["Southern Ostrobothnia, Finland"] = {alias_of = "South Ostrobothnia, Finland", display = true}, ["Ostrobothnia, Finland"] = {wp = "%l (region)"}, ["Central Ostrobothnia, Finland"] = {}, ["Pirkanmaa, Finland"] = {}, ["Satakunta, Finland"] = {}, ["Päijänne Tavastia, Finland"] = {}, ["Päijät-Häme, Finland"] = {alias_of = "Päijänne Tavastia, Finland", display = true}, ["Tavastia Proper, Finland"] = {}, ["Kanta-Häme, Finland"] = {alias_of = "Tavastia Proper, Finland", display = true}, ["Kymenlaakso, Finland"] = {}, ["Uusimaa, Finland"] = {}, ["Southwest Finland, Finland"] = {}, ["Åland Islands, Finland"] = {the = true, wp = "Åland"}, ["Åland, Finland"] = {alias_of = "Åland Islands, Finland"}, -- differs in "the" } -- regions of Finland export.finland_group = { default_container = "Finland", default_placetype = "region", default_divs = "municipalities", data = export.finland_regions, } export.france_administrative_regions = { ["Auvergne-Rhône-Alpes, France"] = {}, ["Bourgogne-Franche-Comté, France"] = {}, ["Brittany, France"] = {wp = "%l (administrative region)"}, ["Centre-Val de Loire, France"] = {}, ["Corsica, France"] = {}, -- overseas departments are handled in `export.country_like_entities` -- ["French Guiana"] = {}, ["Grand Est, France"] = {}, -- ["Guadeloupe"] = {}, ["Hauts-de-France, France"] = {}, ["Île-de-France, France"] = {}, -- ["Martinique"] = {}, -- ["Mayotte"] = {}, ["Normandy, France"] = {wp = "%l (administrative region)"}, ["Nouvelle-Aquitaine, France"] = {}, ["Occitania, France"] = {wp = "%l (administrative region)"}, ["Occitanie, France"] = {alias_of = "Occitania, France", display = true}, ["Pays de la Loire, France"] = {}, ["Provence-Alpes-Côte d'Azur, France"] = {}, -- ["Réunion"] = {}, } -- administrative regions of France export.france_group = { default_container = "France", -- Canonically these are 'administrative regions' but also treat as 'region' ('administrative region' falls back -- to 'region'). default_placetype = "region", default_divs = { "communes", {type = "municipalities", cat_as = "communes"}, "departments", {type = "prefectures", cat_as = {"prefectures", "departmental capitals"}}, {type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}}, }, data = export.france_administrative_regions, } export.france_departments = { ["Ain, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 01 ["Aisne, France"] = {container = "Hauts-de-France"}, -- 02 ["Allier, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 03 ["Alpes-de-Haute-Provence, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 04 ["Hautes-Alpes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 05 ["Alpes-Maritimes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 06 ["Ardèche, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 07 ["Ardennes, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 08 ["Ariège, France"] = {container = "Occitania", wp = "%l (department)"}, -- 09 ["Aube, France"] = {container = "Grand Est"}, -- 10 ["Aude, France"] = {container = "Occitania"}, -- 11 ["Aveyron, France"] = {container = "Occitania"}, -- 12 ["Bouches-du-Rhône, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 13 ["Calvados, France"] = {container = "Normandy", wp = "%l (department)"}, -- 14 ["Cantal, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 15 ["Charente, France"] = {container = "Nouvelle-Aquitaine"}, -- 16 ["Charente-Maritime, France"] = {container = "Nouvelle-Aquitaine"}, -- 17 ["Cher, France"] = {container = "Centre-Val de Loire", wp = "%l (department)"}, -- 18 ["Corrèze, France"] = {container = "Nouvelle-Aquitaine"}, -- 19 ["Corse-du-Sud, France"] = {container = "Corsica"}, -- 2A ["Haute-Corse, France"] = {container = "Corsica"}, -- 2B ["Côte-d'Or, France"] = {container = "Bourgogne-Franche-Comté"}, -- 21 ["Côte d'Or, France"] = {alias_of = "Côte-d'Or, France", display = true}, ["Côtes-d'Armor, France"] = {container = "Brittany"}, -- 22 ["Côtes d'Armor, France"] = {alias_of = "Côtes-d'Armor, France", display = true}, ["Creuse, France"] = {container = "Nouvelle-Aquitaine"}, -- 23 ["Dordogne, France"] = {container = "Nouvelle-Aquitaine"}, -- 24 ["Doubs, France"] = {container = "Bourgogne-Franche-Comté"}, -- 25 ["Drôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 26 ["Eure, France"] = {container = "Normandy"}, -- 27 ["Eure-et-Loir, France"] = {container = "Centre-Val de Loire"}, -- 28 ["Finistère, France"] = {container = "Brittany"}, -- 29 ["Gard, France"] = {container = "Occitania"}, -- 30 ["Haute-Garonne, France"] = {container = "Occitania"}, -- 31 ["Gers, France"] = {container = "Occitania"}, -- 32 ["Gironde, France"] = {container = "Nouvelle-Aquitaine"}, -- 33 ["Hérault, France"] = {container = "Occitania"}, -- 34 ["Ille-et-Vilaine, France"] = {container = "Brittany"}, -- 35 ["Indre, France"] = {container = "Centre-Val de Loire"}, -- 36 ["Indre-et-Loire, France"] = {container = "Centre-Val de Loire"}, -- 37 ["Isère, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 38 ["Jura, France"] = {container = "Bourgogne-Franche-Comté", wp = "%l (department)"}, -- 39 ["Landes, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 40 ["Loir-et-Cher, France"] = {container = "Centre-Val de Loire"}, -- 41 ["Loire, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 42 ["Haute-Loire, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 43 ["Loire-Atlantique, France"] = {container = "Pays de la Loire"}, -- 44 ["Loiret, France"] = {container = "Centre-Val de Loire"}, -- 45 ["Lot, France"] = {container = "Occitania", wp = "%l (department)"}, -- 46 ["Lot-et-Garonne, France"] = {container = "Nouvelle-Aquitaine"}, -- 47 ["Lozère, France"] = {container = "Occitania"}, -- 48 ["Maine-et-Loire, France"] = {container = "Pays de la Loire"}, -- 49 ["Manche, France"] = {container = "Normandy"}, -- 50 ["Marne, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 51 ["Haute-Marne, France"] = {container = "Grand Est"}, -- 52 ["Mayenne, France"] = {container = "Pays de la Loire"}, -- 53 ["Meurthe-et-Moselle, France"] = {container = "Grand Est"}, -- 54 ["Meuse, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 55 ["Morbihan, France"] = {container = "Brittany"}, -- 56 ["Moselle, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 57 ["Nièvre, France"] = {container = "Bourgogne-Franche-Comté"}, -- 58 ["Nord, France"] = {container = "Hauts-de-France", wp = "%l (French department)"}, -- 59 ["Oise, France"] = {container = "Hauts-de-France"}, -- 60 ["Orne, France"] = {container = "Normandy"}, -- 61 ["Pas-de-Calais, France"] = {container = "Hauts-de-France"}, -- 62 ["Puy-de-Dôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 63 ["Pyrénées-Atlantiques, France"] = {container = "Nouvelle-Aquitaine"}, -- 64 ["Hautes-Pyrénées, France"] = {container = "Occitania"}, -- 65 ["Pyrénées-Orientales, France"] = {container = "Occitania"}, -- 66 ["Bas-Rhin, France"] = {container = "Grand Est"}, -- 67 ["Haut-Rhin, France"] = {container = "Grand Est"}, -- 68 ["Rhône, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 69D ["Metropolis of Lyon, France"] = {container = "Auvergne-Rhône-Alpes", the = true}, -- 69M ["Lyon Metropolis, France"] = {alias_of = "Metropolis of Lyon, France"}, ["Lyon, France"] = {alias_of = "Metropolis of Lyon, France"}, ["Haute-Saône, France"] = {container = "Bourgogne-Franche-Comté"}, -- 70 ["Saône-et-Loire, France"] = {container = "Bourgogne-Franche-Comté"}, -- 71 ["Sarthe, France"] = {container = "Pays de la Loire"}, -- 72 ["Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 73 ["Haute-Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 74 ["Paris, France"] = {container = "Île-de-France"}, -- 75 ["Seine-Maritime, France"] = {container = "Normandy"}, -- 76 ["Seine-et-Marne, France"] = {container = "Île-de-France"}, -- 77 ["Yvelines, France"] = {container = "Île-de-France"}, -- 78 ["Deux-Sèvres, France"] = {container = "Nouvelle-Aquitaine"}, -- 79 ["Somme, France"] = {container = "Hauts-de-France", wp = "%l (department)"}, -- 80 ["Tarn, France"] = {container = "Occitania", wp = "%l (department)"}, -- 81 ["Tarn-et-Garonne, France"] = {container = "Occitania"}, -- 82 ["Var, France"] = {container = "Provence-Alpes-Côte d'Azur", wp = "%l (department)"}, -- 83 ["Vaucluse, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 84 ["Vendée, France"] = {container = "Pays de la Loire"}, -- 85 ["Vienne, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 86 ["Haute-Vienne, France"] = {container = "Nouvelle-Aquitaine"}, -- 87 ["Vosges, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 88 ["Yonne, France"] = {container = "Bourgogne-Franche-Comté"}, -- 89 ["Territoire de Belfort, France"] = {container = "Bourgogne-Franche-Comté"}, -- 90 ["Essonne, France"] = {container = "Île-de-France"}, -- 91 ["Hauts-de-Seine, France"] = {container = "Île-de-France"}, -- 92 ["Seine-Saint-Denis, France"] = {container = "Île-de-France"}, -- 93 ["Val-de-Marne, France"] = {container = "Île-de-France"}, -- 94 ["Val-d'Oise, France"] = {container = "Île-de-France"}, -- 95 --["Guadeloupe"] = {container = "Guadeloupe"}, -- 971 --["Martinique"] = {container = "Martinique"}, -- 972 --["Guyane"] = {container = "French Guiana", wp = "French Guiana"}, -- 973 --["La Réunion"] = {container = "Réunion", wp = "Réunion"}, -- 974 --["Mayotte"] = {container = "Mayotte"}, -- 976 } export.france_departments_group = { placename_to_key = make_placename_to_key(", France"), canonicalize_key_container = make_canonicalize_key_container(", France", "region"), default_placetype = "department", default_divs = { "communes", {type = "municipalities", cat_as = "communes"}, }, data = export.france_departments, } export.germany_states = { ["Baden-Württemberg, Germany"] = {}, ["Bavaria, Germany"] = {}, -- Berlin, Bremen and Hamburg are effectively city-states and don't have districts ([[Kreise]]), so override -- the default_divs setting. Better not to include them at all since they're included as cities down below. -- ["Berlin"] = {divs = {}}, ["Brandenburg, Germany"] = {}, -- ["Bremen"] = {divs = {}}, -- ["Hamburg"] = {divs = {}}, ["Hesse, Germany"] = {}, ["Lower Saxony, Germany"] = {}, ["Mecklenburg-Vorpommern, Germany"] = {}, ["Mecklenburg-Western Pomerania, Germany"] = {alias_of = "Mecklenburg-Vorpommern, Germany", display = true}, ["North Rhine-Westphalia, Germany"] = {}, ["Rhineland-Palatinate, Germany"] = {}, ["Saarland, Germany"] = {}, ["Saxony, Germany"] = {}, ["Saxony-Anhalt, Germany"] = {}, ["Schleswig-Holstein, Germany"] = {}, ["Thuringia, Germany"] = {}, } -- states of Germany export.germany_group = { default_container = "Germany", default_placetype = "state", default_divs = {"districts", "municipalities"}, data = export.germany_states, } export.greece_regions = { ["Attica, Greece"] = {wp = "%l (region)"}, ["Central Greece, Greece"] = {wp = "%l (administrative region)"}, ["Central Macedonia, Greece"] = {}, ["Crete, Greece"] = {}, ["Eastern Macedonia and Thrace, Greece"] = {}, ["Epirus, Greece"] = {wp = "%l (region)"}, ["Ionian Islands, Greece"] = {the = true, wp = "%l (region)"}, ["North Aegean, Greece"] = {the = true}, -- I would expect 'the Peloponnese' but Wikipedia mostly has categories like [[w:Category:Geography of Peloponnese (region)]] -- and [[w:Category:Buildings and structures in Peloponnese (region)]]; only [[w:Category:People from the Peloponnese (region)]] -- has "the" in it. ["Peloponnese, Greece"] = {wp = "%l (region)"}, ["South Aegean, Greece"] = {the = true}, ["Thessaly, Greece"] = {}, ["Western Greece, Greece"] = {}, ["Western Macedonia, Greece"] = {}, ["Mount Athos, Greece"] = {placetype = {"autonomous region", "region"}, wp = "Monastic community of Mount Athos"}, } -- regions of Greece export.greece_group = { default_container = "Greece", default_placetype = "region", data = export.greece_regions, } local india_polity_with_divisions = {"divisions", "districts"} local india_polity_without_divisions = {"districts"} -- States and union territories of India. Only some of them are divided into divisions. export.india_states_and_union_territories = { ["Andaman and Nicobar Islands, India"] = {the = true, placetype = "union territory", divs = india_polity_without_divisions}, ["Andhra Pradesh, India"] = {divs = india_polity_without_divisions}, ["Arunachal Pradesh, India"] = {divs = india_polity_with_divisions}, ["Assam, India"] = {divs = india_polity_with_divisions}, ["Bihar, India"] = {divs = india_polity_with_divisions}, ["Chandigarh, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Chhattisgarh, India"] = {divs = india_polity_with_divisions}, ["Dadra and Nagar Haveli and Daman and Diu, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Delhi, India"] = {placetype = "union territory", divs = india_polity_with_divisions}, ["Goa, India"] = {divs = india_polity_without_divisions}, ["Gujarat, India"] = {divs = india_polity_without_divisions}, ["Haryana, India"] = {divs = india_polity_with_divisions}, ["Himachal Pradesh, India"] = {divs = india_polity_with_divisions}, ["Jammu and Kashmir, India"] = {placetype = "union territory", divs = india_polity_with_divisions, wp = "%l (union territory)"}, ["Jharkhand, India"] = {divs = india_polity_with_divisions}, ["Karnataka, India"] = {divs = india_polity_with_divisions}, ["Kerala, India"] = {divs = india_polity_without_divisions}, ["Ladakh, India"] = {placetype = "union territory", divs = india_polity_with_divisions}, ["Lakshadweep, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Madhya Pradesh, India"] = {divs = india_polity_with_divisions}, ["Maharashtra, India"] = {divs = india_polity_with_divisions}, ["Manipur, India"] = {divs = india_polity_without_divisions}, ["Meghalaya, India"] = {divs = india_polity_with_divisions}, ["Mizoram, India"] = {divs = india_polity_without_divisions}, ["Nagaland, India"] = {divs = india_polity_with_divisions}, ["Odisha, India"] = {divs = india_polity_with_divisions}, ["Puducherry, India"] = {placetype = "union territory", divs = india_polity_without_divisions, wp = "%l (union territory)"}, ["Pondicherry, India"] = {alias_of = "Puducherry, India", display = true}, ["Punjab, India"] = {divs = india_polity_with_divisions, wp = "%l, %c"}, ["Rajasthan, India"] = {divs = india_polity_with_divisions}, ["Sikkim, India"] = {divs = india_polity_without_divisions}, ["Tamil Nadu, India"] = {divs = india_polity_without_divisions}, ["Telangana, India"] = {divs = india_polity_without_divisions}, ["Tripura, India"] = {divs = india_polity_without_divisions}, ["Uttar Pradesh, India"] = {divs = india_polity_with_divisions}, ["Uttarakhand, India"] = {divs = india_polity_with_divisions}, ["West Bengal, India"] = {divs = india_polity_with_divisions}, } -- states and union territories of India export.india_group = { default_container = "India", default_placetype = "state", data = export.india_states_and_union_territories, } export.indonesia_provinces = { ["Aceh, Indonesia"] = {}, ["Bali, Indonesia"] = {}, ["Bangka Belitung Islands, Indonesia"] = {the = true}, ["Banten, Indonesia"] = {}, ["Bengkulu, Indonesia"] = {}, ["Central Java, Indonesia"] = {}, ["Central Kalimantan, Indonesia"] = {}, ["Central Papua, Indonesia"] = {}, ["Central Sulawesi, Indonesia"] = {}, ["East Java, Indonesia"] = {}, ["East Kalimantan, Indonesia"] = {}, ["East Nusa Tenggara, Indonesia"] = {}, ["Gorontalo, Indonesia"] = {}, ["Highland Papua, Indonesia"] = {wp = "%l"}, ["Special Capital Region of Jakarta, Indonesia"] = {the = true, wp = "Jakarta"}, ["Jakarta, Indonesia"] = {alias_of = "Special Capital Region of Jakarta, Indonesia"}, ["Jambi, Indonesia"] = {}, ["Lampung, Indonesia"] = {}, ["Maluku, Indonesia"] = {}, ["North Kalimantan, Indonesia"] = {}, ["North Maluku, Indonesia"] = {}, ["North Sulawesi, Indonesia"] = {}, ["North Papua, Indonesia"] = {}, ["North Sumatra, Indonesia"] = {}, ["Papua, Indonesia"] = {wp = "%l (province)"}, ["Riau, Indonesia"] = {}, ["Riau Islands, Indonesia"] = {the = true}, ["Southeast Sulawesi, Indonesia"] = {}, ["South Kalimantan, Indonesia"] = {}, ["South Papua, Indonesia"] = {}, ["South Sulawesi, Indonesia"] = {}, ["South Sumatra, Indonesia"] = {}, ["Southwest Papua, Indonesia"] = {}, ["West Java, Indonesia"] = {}, ["West Kalimantan, Indonesia"] = {}, ["West Nusa Tenggara, Indonesia"] = {}, ["West Papua, Indonesia"] = {wp = "%l (province)"}, ["West Sulawesi, Indonesia"] = {}, ["West Sumatra, Indonesia"] = {}, ["Special Region of Yogyakarta, Indonesia"] = {the = true}, ["Yogyakarta, Indonesia"] = {alias_of = "Special Region of Yogyakarta, Indonesia"}, } -- provinces of Indonesia export.indonesia_group = { default_container = "Indonesia", default_placetype = "province", -- per https://www.quora.com/Does-Indonesia-use-British-or-American-English, Indonesia tends to use American -- spellings. data = export.indonesia_provinces, } export.iran_provinces = { ["Alborz Province, Iran"] = {}, -- abbreviation AL, capital [[w:Karaj]] ["Ardabil Province, Iran"] = {}, -- abbreviation AR, capital [[w:Ardabil]] ["Bushehr Province, Iran"] = {}, -- abbreviation BU, capital [[w:Bushehr]] ["Chaharmahal and Bakhtiari Province, Iran"] = {}, -- abbreviation CB, capital [[w:Shahr-e Kord]] ["East Azerbaijan Province, Iran"] = {}, -- abbreviation EA, capital [[w:Tabriz]] ["Fars Province, Iran"] = {}, -- abbreviation FA, capital [[w:Shiraz]] ["Pars Province, Iran"] = {alias_of = "Fars Province, Iran", display = true}, ["Gilan Province, Iran"] = {}, -- abbreviation GN, capital [[w:Rasht]] ["Golestan Province, Iran"] = {}, -- abbreviation GO, capital [[w:Gorgan]] ["Hamadan Province, Iran"] = {}, -- abbreviation HA, capital [[w:Hamadan]] ["Hormozgan Province, Iran"] = {}, -- abbreviation HO, capital [[w:Bandar Abbas]] ["Ilam Province, Iran"] = {}, -- abbreviation IL, capital [[w:Ilam, Iran|Ilam]] ["Isfahan Province, Iran"] = {}, -- abbreviation IS, capital [[w:Isfahan]] ["Kerman Province, Iran"] = {}, -- abbreviation KN, capital [[w:Kerman]] ["Kermanshah Province, Iran"] = {}, -- abbreviation KE, capital [[w:Kermanshah]] ["Khuzestan Province, Iran"] = {}, -- abbreviation KH, capital [[w:Ahvaz]] ["Kohgiluyeh and Boyer-Ahmad Province, Iran"] = {}, -- abbreviation KB, capital [[w:Yasuj]] ["Kurdistan Province, Iran"] = {}, -- abbreviation KU, capital [[w:Sanandaj]] ["Lorestan Province, Iran"] = {}, -- abbreviation LO, capital [[w:Khorramabad]] ["Markazi Province, Iran"] = {}, -- abbreviation MA, capital [[w:Arak, Iran|Arak]] ["Mazandaran Province, Iran"] = {}, -- abbreviation MN, capital [[w:Sari, Iran|Sari]] ["North Khorasan Province, Iran"] = {}, -- abbreviation NK, capital [[w:Bojnord]] ["Qazvin Province, Iran"] = {}, -- abbreviation QA, capital [[w:Qazvin]] ["Qom Province, Iran"] = {}, -- abbreviation QM, capital [[w:Qom]] ["Razavi Khorasan Province, Iran"] = {}, -- abbreviation RK, capital [[w:Mashhad]] ["Semnan Province, Iran"] = {}, -- abbreviation SE, capital [[w:Semnan, Iran|Semnan]] ["Sistan and Baluchestan Province, Iran"] = {}, -- abbreviation SB, capital [[w:Zahedan]] ["South Khorasan Province, Iran"] = {}, -- abbreviation SK, capital [[w:Birjand]] ["Tehran Province, Iran"] = {}, -- abbreviation TE, capital [[w:Tehran]] ["West Azerbaijan Province, Iran"] = {}, -- abbreviation WA, capital [[w:Urmia]] ["Yazd Province, Iran"] = {}, -- abbreviation YA, capital [[w:Yazd]] ["Zanjan Province, Iran"] = {}, -- abbreviation ZA, capital [[w:Zanjan, Iran|Zanjan]] } -- provinces of Iran export.iran_group = { key_to_placename = make_key_to_placename(", Iran", " Province$"), placename_to_key = make_placename_to_key(", Iran", " Province"), default_container = "Iran", default_placetype = "province", -- There aren't nearly enough counties of Iran currently entered in any language to allow for categorizing them -- per-province. (As of 2025-05-09, there are only 6 counties in each of [[Category:en:Counties of Iran]], -- [[Category:fa:Counties of Iran]] and [[Category:ar:Counties of Iran]].) -- default_divs = "counties", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.iran_provinces, } export.ireland_counties = { ["County Carlow, Ireland"] = {}, ["County Cavan, Ireland"] = {}, ["County Clare, Ireland"] = {}, ["County Cork, Ireland"] = {}, ["County Donegal, Ireland"] = {}, ["County Dublin, Ireland"] = {}, ["County Galway, Ireland"] = {}, ["County Kerry, Ireland"] = {}, ["County Kildare, Ireland"] = {}, ["County Kilkenny, Ireland"] = {}, ["County Laois, Ireland"] = {}, ["County Leitrim, Ireland"] = {}, ["County Limerick, Ireland"] = {}, ["County Longford, Ireland"] = {}, ["County Louth, Ireland"] = {}, ["County Mayo, Ireland"] = {}, ["County Meath, Ireland"] = {}, ["County Monaghan, Ireland"] = {}, ["County Offaly, Ireland"] = {}, ["County Roscommon, Ireland"] = {}, ["County Sligo, Ireland"] = {}, ["County Tipperary, Ireland"] = {}, ["County Waterford, Ireland"] = {}, ["County Westmeath, Ireland"] = {}, ["County Wexford, Ireland"] = {}, ["County Wicklow, Ireland"] = {}, } local function make_irish_type_key_to_placename(container_pattern) return function(key) key = key:gsub(container_pattern, "") local elliptical_key = key:gsub("^County ", "") return key, elliptical_key end end local function make_irish_type_placename_to_key(container_suffix) return function(placename) if not placename:find("^County ") and not placename:find("^City ") then placename = "County " .. placename end return placename .. container_suffix end end -- counties of Ireland export.ireland_group = { key_to_placename = make_irish_type_key_to_placename(", Ireland$"), placename_to_key = make_irish_type_placename_to_key(", Ireland"), default_container = "Ireland", default_placetype = "county", data = export.ireland_counties, } export.italy_administrative_regions = { ["Abruzzo, Italy"] = {}, ["Aosta Valley, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Apulia, Italy"] = {}, ["Basilicata, Italy"] = {}, ["Calabria, Italy"] = {}, ["Campania, Italy"] = {}, ["Emilia-Romagna, Italy"] = {}, ["Friuli-Venezia Giulia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Lazio, Italy"] = {}, ["Liguria, Italy"] = {}, ["Lombardy, Italy"] = {}, ["Marche, Italy"] = {}, ["Molise, Italy"] = {}, ["Piedmont, Italy"] = {}, ["Sardinia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Sicily, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Trentino-Alto Adige, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Tuscany, Italy"] = {}, ["Umbria, Italy"] = {}, ["Veneto, Italy"] = {}, } -- administrative regions of Italy export.italy_group = { default_container = "Italy", default_placetype = "region", data = export.italy_administrative_regions, } -- table of Japanese prefectures; interpolated into the main 'places' table, but also needed separately export.japan_prefectures = { ["Aichi Prefecture, Japan"] = {}, ["Akita Prefecture, Japan"] = {}, ["Aomori Prefecture, Japan"] = {}, ["Chiba Prefecture, Japan"] = {}, ["Ehime Prefecture, Japan"] = {}, ["Fukui Prefecture, Japan"] = {}, ["Fukuoka Prefecture, Japan"] = {}, ["Fukushima Prefecture, Japan"] = {}, ["Gifu Prefecture, Japan"] = {}, ["Gunma Prefecture, Japan"] = {}, ["Hiroshima Prefecture, Japan"] = {}, ["Hokkaido Prefecture, Japan"] = {divs = "subprefectures", wp = "Hokkaido"}, ["Hyōgo Prefecture, Japan"] = {}, ["Hyogo Prefecture, Japan"] = {alias_of = "Hyōgo Prefecture, Japan", display = true}, ["Ibaraki Prefecture, Japan"] = {}, ["Ishikawa Prefecture, Japan"] = {}, ["Iwate Prefecture, Japan"] = {}, ["Kagawa Prefecture, Japan"] = {}, ["Kagoshima Prefecture, Japan"] = {}, ["Kanagawa Prefecture, Japan"] = {}, ["Kōchi Prefecture, Japan"] = {}, ["Kochi Prefecture, Japan"] = {alias_of = "Kōchi Prefecture, Japan", display = true}, ["Kumamoto Prefecture, Japan"] = {}, ["Kyoto Prefecture, Japan"] = {}, ["Mie Prefecture, Japan"] = {}, ["Miyagi Prefecture, Japan"] = {}, ["Miyazaki Prefecture, Japan"] = {}, ["Nagano Prefecture, Japan"] = {}, ["Nagasaki Prefecture, Japan"] = {}, ["Nara Prefecture, Japan"] = {}, ["Niigata Prefecture, Japan"] = {}, ["Ōita Prefecture, Japan"] = {}, ["Oita Prefecture, Japan"] = {alias_of = "Ōita Prefecture, Japan", display = true}, ["Okayama Prefecture, Japan"] = {}, ["Okinawa Prefecture, Japan"] = {}, ["Osaka Prefecture, Japan"] = {}, ["Saga Prefecture, Japan"] = {}, ["Saitama Prefecture, Japan"] = {}, ["Shiga Prefecture, Japan"] = {}, ["Shimane Prefecture, Japan"] = {}, ["Shizuoka Prefecture, Japan"] = {}, ["Tochigi Prefecture, Japan"] = {}, ["Tokushima Prefecture, Japan"] = {}, ["Tottori Prefecture, Japan"] = {}, ["Toyama Prefecture, Japan"] = {}, ["Wakayama Prefecture, Japan"] = {}, ["Yamagata Prefecture, Japan"] = {}, ["Yamaguchi Prefecture, Japan"] = {}, ["Yamanashi Prefecture, Japan"] = {}, } -- prefectures of Japan export.japan_group = { key_to_placename = make_key_to_placename(", Japan$", " Prefecture$"), placename_to_key = make_placename_to_key(", Japan", " Prefecture"), default_container = "Japan", default_placetype = "prefecture", data = export.japan_prefectures, } export.laos_provinces = { ["Attapeu Province, Laos"] = {}, ["Bokeo Province, Laos"] = {}, ["Bolikhamxai Province, Laos"] = {}, ["Champasak Province, Laos"] = {}, ["Houaphanh Province, Laos"] = {}, ["Khammouane Province, Laos"] = {}, ["Luang Namtha Province, Laos"] = {}, ["Luang Prabang Province, Laos"] = {}, ["Oudomxay Province, Laos"] = {}, ["Phongsaly Province, Laos"] = {}, ["Salavan Province, Laos"] = {}, ["Savannakhet Province, Laos"] = {}, ["Vientiane Province, Laos"] = {}, ["Vientiane Prefecture, Laos"] = {placetype = "prefecture", wp = "%l"}, ["Sainyabuli Province, Laos"] = {}, ["Sekong Province, Laos"] = {}, ["Xaisomboun Province, Laos"] = {}, ["Xiangkhouang Province, Laos"] = {}, } local function laos_placename_to_key(placename) if placename == "Vientiane Prefecture" then return placename .. ", Laos" end if placename:find(" Province$") then return placename .. ", Laos" end return placename .. " Province, Laos" end -- provinces of Laos export.laos_group = { key_to_placename = make_key_to_placename(", Laos$", {" Province$", " Prefecture$"}), placename_to_key = laos_placename_to_key, default_container = "Laos", default_placetype = "province", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.laos_provinces, } export.lebanon_governorates = { ["Akkar Governorate, Lebanon"] = {}, ["Baalbek-Hermel Governorate, Lebanon"] = {}, ["Beirut Governorate, Lebanon"] = {}, ["Beqaa Governorate, Lebanon"] = {}, ["Keserwan-Jbeil Governorate, Lebanon"] = {}, ["Mount Lebanon Governorate, Lebanon"] = {}, ["Nabatieh Governorate, Lebanon"] = {}, -- These two are generic enough that we don't want to automatically augment a use of `gov/North Governorate` or -- `gov/South Governorate` with `c/Lebanon`. ["North Governorate, Lebanon"] = {no_auto_augment_container = true}, ["South Governorate, Lebanon"] = {no_auto_augment_container = true}, } -- governorates of Lebanon export.lebanon_group = { key_to_placename = make_key_to_placename(", Lebanon$", " Governorate$"), placename_to_key = make_placename_to_key(", Lebanon", " Governorate"), default_container = "Lebanon", default_placetype = "governorate", data = export.lebanon_governorates, } export.malaysia_states = { ["Johor, Malaysia"] = {}, ["Kedah, Malaysia"] = {}, ["Kelantan, Malaysia"] = {}, ["Malacca, Malaysia"] = {}, ["Negeri Sembilan, Malaysia"] = {}, ["Pahang, Malaysia"] = {}, ["Penang, Malaysia"] = {}, ["Perak, Malaysia"] = {}, ["Perlis, Malaysia"] = {}, ["Sabah, Malaysia"] = {}, ["Sarawak, Malaysia"] = {}, ["Selangor, Malaysia"] = {}, ["Terengganu, Malaysia"] = {}, } -- states of Malaysia export.malaysia_group = { default_container = "Malaysia", default_placetype = "state", default_wp = "%l, %c", data = export.malaysia_states, } export.malta_regions = { -- Some of the regions are generic enough that we don't want to automatically augment a use of e.g. -- `r/Northern Region` with `c/Malta`. In particular; -- * "Eastern Region" also occurs at least in Ghana, Uganda, Iceland, Nigeria, Venezuela, North Macedonia and -- El Salvador; -- * "Northern Region" also occurs at least in Ghana, Uganda, Malawi, Nigeria, Canada and South Africa; -- * "Western Region" also occurs at least in Abu Dhabi, Bahrain, South Africa, Ghana, Iceland, Nepal, Nigeria, -- Serbia and Uganda; -- * "Southern Region" also occurs at least in Nigeria, Eritrea, Iceland, Ireland, Malawi and Serbia. ["Eastern Region, Malta"] = {no_auto_augment_container = true}, ["Gozo Region, Malta"] = {wp = "%l"}, ["Northern Region, Malta"] = {no_auto_augment_container = true}, ["Port Region, Malta"] = {}, ["Southern Region, Malta"] = {no_auto_augment_container = true}, ["Western Region, Malta"] = {no_auto_augment_container = true}, } -- regions of Malta export.malta_group = { key_to_placename = make_key_to_placename(", Malta$", " Region"), placename_to_key = make_placename_to_key(", Malta", " Region"), default_container = "Malta", default_placetype = "region", default_wp = "%l, %c", default_the = true, data = export.malta_regions, } export.mexico_states = { ["Aguascalientes, Mexico"] = {}, ["Baja California, Mexico"] = {}, -- not display-canonicalizing because the "Norte" could be for emphasis ["Baja California Norte, Mexico"] = {alias_of = "Baja California, Mexico"}, ["Baja California Sur, Mexico"] = {}, ["Campeche, Mexico"] = {}, ["Chiapas, Mexico"] = {}, ["Chihuahua, Mexico"] = {wp = "%l (state)"}, ["Coahuila, Mexico"] = {}, ["Colima, Mexico"] = {}, ["Durango, Mexico"] = {}, ["Guanajuato, Mexico"] = {}, ["Guerrero, Mexico"] = {}, ["Hidalgo, Mexico"] = {wp = "%l (state)"}, ["Jalisco, Mexico"] = {}, ["State of Mexico, Mexico"] = {the = true}, ["Mexico, Mexico"] = {alias_of = "State of Mexico, Mexico"}, -- differs in "the" -- ["Mexico City, Mexico"] = {}, doesn't belong here because it's a city ["Michoacán, Mexico"] = {}, ["Michoacan, Mexico"] = {alias_of = "Michoacán, Mexico", display = true}, ["Morelos, Mexico"] = {}, ["Nayarit, Mexico"] = {}, ["Nuevo León, Mexico"] = {}, ["Nuevo Leon, Mexico"] = {alias_of = "Nuevo León, Mexico", display = true}, ["Oaxaca, Mexico"] = {}, ["Puebla, Mexico"] = {}, ["Querétaro, Mexico"] = {}, ["Queretaro, Mexico"] = {alias_of = "Querétaro, Mexico", display = true}, ["Quintana Roo, Mexico"] = {}, ["San Luis Potosí, Mexico"] = {}, ["San Luis Potosi, Mexico"] = {alias_of = "San Luis Potosí, Mexico", display = true}, ["Sinaloa, Mexico"] = {}, ["Sonora, Mexico"] = {}, ["Tabasco, Mexico"] = {}, ["Tamaulipas, Mexico"] = {}, ["Tlaxcala, Mexico"] = {}, ["Veracruz, Mexico"] = {}, ["Yucatán, Mexico"] = {}, ["Yucatan, Mexico"] = {alias_of = "Yucatán, Mexico", display = true}, ["Zacatecas, Mexico"] = {}, } -- Mexican states export.mexico_group = { default_container = "Mexico", default_placetype = "state", data = export.mexico_states, } export.moldova_districts_and_autonomous_territorial_units = { ["Anenii Noi District, Moldova"] = {}, -- capital [[Anenii Noi]] ["Basarabeasca District, Moldova"] = {}, -- capital [[Basarabeasca]] ["Briceni District, Moldova"] = {}, -- capital [[Briceni]] ["Cahul District, Moldova"] = {}, -- capital [[Cahul]] ["Cantemir District, Moldova"] = {}, -- capital [[Cantemir, Moldova|Cantemir]] ["Călărași District, Moldova"] = {}, -- capital [[Călărași, Moldova|Călărași]] ["Căușeni District, Moldova"] = {}, -- capital [[Căușeni]] ["Cimișlia District, Moldova"] = {}, -- capital [[Cimișlia]] ["Criuleni District, Moldova"] = {}, -- capital [[Criuleni]] ["Dondușeni District, Moldova"] = {}, -- capital [[Dondușeni]] ["Drochia District, Moldova"] = {}, -- capital [[Drochia]] ["Dubăsari District, Moldova"] = {}, -- capital [[Cocieri]] ["Edineț District, Moldova"] = {}, -- capital [[Edineț]] ["Fălești District, Moldova"] = {}, -- capital [[Fălești]] ["Florești District, Moldova"] = {}, -- capital [[Florești, Moldova|Florești]] ["Glodeni District, Moldova"] = {}, -- capital [[Glodeni]] ["Hîncești District, Moldova"] = {}, -- capital [[Hîncești]] ["Ialoveni District, Moldova"] = {}, -- capital [[Ialoveni]] ["Leova District, Moldova"] = {}, -- capital [[Leova]] ["Nisporeni District, Moldova"] = {}, -- capital [[Nisporeni]] ["Ocnița District, Moldova"] = {}, -- capital [[Ocnița]] ["Orhei District, Moldova"] = {}, -- capital [[Orhei]] ["Rezina District, Moldova"] = {}, -- capital [[Rezina]] ["Rîșcani District, Moldova"] = {}, -- capital [[Rîșcani]] ["Sîngerei District, Moldova"] = {}, -- capital [[Sîngerei]] ["Soroca District, Moldova"] = {}, -- capital [[Soroca]] ["Strășeni District, Moldova"] = {}, -- capital [[Strășeni]] ["Șoldănești District, Moldova"] = {}, -- capital [[Șoldănești]] ["Ștefan Vodă District, Moldova"] = {}, -- capital [[Ștefan Vodă]] ["Taraclia District, Moldova"] = {}, -- capital [[Taraclia]] ["Telenești District, Moldova"] = {}, -- capital [[Telenești]] ["Ungheni District, Moldova"] = {}, -- capital [[Ungheni]] ["Chișinău, Moldova"] = {placetype = "municipality"}, ["Bălți, Moldova"] = {placetype = "municipality"}, ["Gagauzia, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Comrat]] -- the remainder are under the de-facto control of the unrecognized state of Transnistria ["Bender, Moldova"] = {placetype = "municipality"}, ["Tighina, Moldova"] = {alias_of = "Bender, Moldova"}, ["Transnistria, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Tiraspol]] ["Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova", the = true}, ["Administrative-Territorial Units of the Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova", the = true}, } local function moldova_placename_to_key(placename) local elliptical_key = placename .. ", Moldova" if export.moldova_districts_and_autonomous_territorial_units[elliptical_key] then return elliptical_key end if placename:find(" District$") then return placename .. ", Moldova" end return placename .. " District, Moldova" end -- Moldovan districts (raions) and autonomous territorial units export.moldova_group = { key_to_placename = make_key_to_placename(", Moldova$", " District"), placename_to_key = moldova_placename_to_key, default_container = "Moldova", default_placetype = {"district", "raion"}, default_divs = "communes", data = export.moldova_districts_and_autonomous_territorial_units, } export.morocco_regions = { ["Tangier-Tetouan-Al Hoceima, Morocco"] = {}, ["Oriental, Morocco"] = {wp = "%l (%c)"}, ["L'Oriental, Morocco"] = {alias_of = "Oriental, Morocco", display = true}, ["Fez-Meknes, Morocco"] = {}, ["Rabat-Sale-Kenitra, Morocco"] = {wp = "Rabat-Salé-Kénitra"}, ["Rabat-Salé-Kénitra, Morocco"] = {alias_of = "Rabat-Sale-Kenitra, Morocco", display = true}, ["Beni Mellal-Khenifra, Morocco"] = {wp = "Béni Mellal-Khénifra"}, ["Béni Mellal-Khénifra, Morocco"] = {alias_of = "Beni Mellal-Khenifra, Morocco", display = true}, ["Casablanca-Settat, Morocco"] = {}, ["Marrakesh-Safi, Morocco"] = {wp = "Marrakesh–Safi"}, -- WP title has en-dash ["Marrakech-Safi, Morocco"] = {alias_of = "Marrakesh-Safi, Morocco", display = true}, ["Draa-Tafilalet, Morocco"] = {wp = "Drâa-Tafilalet"}, ["Drâa-Tafilalet, Morocco"] = {alias_of = "Draa-Tafilalet, Morocco", display = true}, ["Souss-Massa, Morocco"] = {}, ["Guelmim-Oued Noun, Morocco"] = { keydesc = "+++. '''NOTE:''' This region lies partly within the disputed territory of [[Western Sahara]]" }, ["Laayoune-Sakia El Hamra, Morocco"] = { wp = "Laâyoune-Sakia El Hamra", keydesc = "+++. '''NOTE:''' This region lies almost completely within the disputed territory of [[Western Sahara]]", }, ["Laâyoune-Sakia El Hamra, Morocco"] = {alias_of = "Laayoune-Sakia El Hamra, Morocco", display = true}, ["Dakhla-Oued Ed-Dahab, Morocco"] = { keydesc = "+++. '''NOTE:''' This region lies completely within the disputed territory of [[Western Sahara]]", }, } -- regions of Morocco export.morocco_group = { default_container = "Morocco", default_placetype = "region", data = export.morocco_regions, } export.egypt_governorates = { ["Cairo Governorate, Egypt"] = {}, ["Giza Governorate, Egypt"] = {}, ["Sharqia Governorate, Egypt"] = {}, ["Dakahlia Governorate, Egypt"] = {}, ["Beheira Governorate, Egypt"] = {}, ["Minya Governorate, Egypt"] = {}, ["Qalyubia Governorate, Egypt"] = {}, ["Sohag Governorate, Egypt"] = {}, ["Alexandria Governorate, Egypt"] = {}, ["Gharbia Governorate, Egypt"] = {}, ["Asyut Governorate, Egypt"] = {}, ["Monufia Governorate, Egypt"] = {}, ["Faiyum Governorate, Egypt"] = {}, ["Kafr El Sheikh Governorate, Egypt"] = {}, ["Qena Governorate, Egypt"] = {}, ["Beni Suef Governorate, Egypt"] = {}, ["Damietta Governorate, Egypt"] = {}, ["Aswan Governorate, Egypt"] = {}, ["Ismailia Governorate, Egypt"] = {}, ["Luxor Governorate, Egypt"] = {}, ["Suez Governorate, Egypt"] = {}, ["Port Said Governorate, Egypt"] = {}, ["Matrouh Governorate, Egypt"] = {}, ["North Sinai Governorate, Egypt"] = {}, ["Red Sea Governorate, Egypt"] = {}, ["New Valley Governorate, Egypt"] = {}, ["South Sinai Governorate, Egypt"] = {}, } -- governorates of Egypt export.egypt_group = { key_to_placename = make_key_to_placename(", Egypt$", " Governorate$"), placename_to_key = make_placename_to_key(", Egypt", " Governorate"), default_container = "Egypt", default_placetype = "governorate", data = export.egypt_governorates, } export.netherlands_provinces = { ["Drenthe, Netherlands"] = {}, ["Flevoland, Netherlands"] = {}, ["Friesland, Netherlands"] = {}, ["Gelderland, Netherlands"] = {}, ["Groningen, Netherlands"] = {wp = "%l (province)"}, ["Limburg, Netherlands"] = {wp = "%l (%c)"}, ["North Brabant, Netherlands"] = {}, -- Foreign forms get display-canonicalized. ["Noord-Brabant, Netherlands"] = {alias_of = "North Brabant, Netherlands", display = true}, ["North Holland, Netherlands"] = {}, ["Noord-Holland, Netherlands"] = {alias_of = "North Holland, Netherlands", display = true}, ["Overijssel, Netherlands"] = {}, ["South Holland, Netherlands"] = {}, ["Zuid-Holland, Netherlands"] = {alias_of = "South Holland, Netherlands", display = true}, ["Utrecht, Netherlands"] = {wp = "%l (province)"}, ["Zeeland, Netherlands"] = {}, } -- provinces of the Netherlands export.netherlands_group = { default_container = "Netherlands", default_placetype = "province", default_divs = "municipalities", data = export.netherlands_provinces, } export.new_zealand_regions = { -- North Island regions ["Northland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-NTL, number 1, capital [[Whangārei]] ["Auckland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-AUK, number 2, capital [[Auckland]] ["Waikato, New Zealand"] = {}, -- ISO 3166-2 code NZ-WKO, number 3, capital [[Hamilton, New Zealand|Hamilton]] ["Bay of Plenty, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-BOP, number 4, capital [[Whakatāne]] ["Gisborne, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-GIS, number 5, capital [[Gisborne, New Zealand|Gisborne]] ["Hawke's Bay, New Zealand"] = {}, -- ISO 3166-2 code NZ-HKB, number 6, capital [[Napier, New Zealand|Napier]] ["Taranaki, New Zealand"] = {}, -- ISO 3166-2 code NZ-TKI, number 7, capital [[Stratford, New Zealand|Stratford]] ["Manawatū-Whanganui, New Zealand"] = {}, -- ISO 3166-2 code NZ-MWT, number 8, capital [[Palmerston North]] ["Manawatu-Whanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true}, ["Manawatu-Wanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true}, ["Wellington, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-WGN, number 9, capital [[Wellington]] -- South Island regions ["Tasman, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-TAS, number 10, capital [[Richmond, New Zealand|Richmond]] ["Nelson, New Zealand"] = {placetype = {"region", "city"}, wp = "%l, %c", is_city = true}, -- ISO 3166-2 code NZ-NSN, number 11, capital [[Nelson, New Zealand|Nelson]] ["Marlborough, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-MBH, number 12, capital [[Blenheim, New Zealand|Blenheim]] ["West Coast, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-WTC, number 13, capital [[Greymouth]] ["Canterbury, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-CAN, number 14, capital [[Christchurch]] ["Otago, New Zealand"] = {}, -- ISO 3166-2 code NZ-OTA, number 15, capital [[Dunedin]] ["Southland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-STL, number 16, capital [[Invercargill]] } -- regions of New Zealand export.new_zealand_group = { default_container = "New Zealand", default_placetype = "region", data = export.new_zealand_regions, } export.nigeria_states = { ["Abia State, Nigeria"] = {}, ["Adamawa State, Nigeria"] = {}, ["Akwa Ibom State, Nigeria"] = {}, ["Anambra State, Nigeria"] = {}, ["Bauchi State, Nigeria"] = {}, ["Bayelsa State, Nigeria"] = {}, ["Benue State, Nigeria"] = {}, ["Borno State, Nigeria"] = {}, ["Cross River State, Nigeria"] = {}, ["Delta State, Nigeria"] = {}, ["Ebonyi State, Nigeria"] = {}, ["Edo State, Nigeria"] = {}, ["Ekiti State, Nigeria"] = {}, ["Enugu State, Nigeria"] = {}, ["Federal Capital Territory, Nigeria"] = { -- not a state but allow it to be referenced as one in holonyms placetype = {"federal territory", "territory", "state"}, the = true, wp = "%l (%c)", }, ["Gombe State, Nigeria"] = {}, ["Imo State, Nigeria"] = {}, ["Jigawa State, Nigeria"] = {}, ["Kaduna State, Nigeria"] = {}, ["Kano State, Nigeria"] = {}, ["Katsina State, Nigeria"] = {}, ["Kebbi State, Nigeria"] = {}, ["Kogi State, Nigeria"] = {}, ["Kwara State, Nigeria"] = {}, ["Lagos State, Nigeria"] = {}, ["Nasarawa State, Nigeria"] = {}, ["Niger State, Nigeria"] = {}, ["Ogun State, Nigeria"] = {}, ["Ondo State, Nigeria"] = {}, ["Osun State, Nigeria"] = {}, ["Oyo State, Nigeria"] = {}, ["Plateau State, Nigeria"] = {}, ["Rivers State, Nigeria"] = {}, ["Sokoto State, Nigeria"] = {}, ["Taraba State, Nigeria"] = {}, ["Yobe State, Nigeria"] = {}, ["Zamfara State, Nigeria"] = {}, } -- states of Nigeria export.nigeria_group = { key_to_placename = make_key_to_placename(", Nigeria$", " State$"), placename_to_key = make_placename_to_key(", Nigeria", " State"), default_container = "Nigeria", default_placetype = "state", data = export.nigeria_states, } export.north_korea_provinces = { ["Chagang Province, North Korea"] = {}, ["North Hamgyong Province, North Korea"] = {}, ["South Hamgyong Province, North Korea"] = {}, ["North Hwanghae Province, North Korea"] = {}, ["South Hwanghae Province, North Korea"] = {}, ["Kangwon Province, North Korea"] = {wp = "%l (%c)"}, ["North Pyongan Province, North Korea"] = {}, ["South Pyongan Province, North Korea"] = {}, ["Ryanggang Province, North Korea"] = {}, } -- provinces of North Korea export.north_korea_group = { key_to_placename = make_key_to_placename(", North Korea$", " Province$"), placename_to_key = make_placename_to_key(", North Korea", " Province"), default_container = "North Korea", default_placetype = "province", data = export.north_korea_provinces, } export.norwegian_counties = { ["Oslo, Norway"] = {}, ["Rogaland, Norway"] = {}, ["Møre og Romsdal, Norway"] = {}, ["Nordland, Norway"] = {}, ["Østfold, Norway"] = {}, ["Akershus, Norway"] = {}, ["Buskerud, Norway"] = {}, -- the following two were merged into Innlandet -- ["Hedmark, Norway"] = {}, -- ["Oppland, Norway"] = {}, ["Innlandet, Norway"] = {}, ["Vestfold, Norway"] = {}, ["Telemark, Norway"] = {}, -- the following two were merged into Agder -- ["Aust-Agder, Norway"] = {}, -- ["Vest-Agder, Norway"] = {}, ["Agder, Norway"] = {}, -- the following two were merged into Vestland -- ["Hordaland, Norway"] = {}, -- ["Sogn og Fjordane, Norway"] = {}, ["Vestland, Norway"] = {}, ["Trøndelag, Norway"] = {}, ["Troms, Norway"] = {}, ["Finnmark, Norway"] = {}, } -- counties of Norway export.norway_group = { default_container = "Norway", default_placetype = "county", data = export.norwegian_counties, } export.pakistan_provinces_and_territories = { ["Azad Kashmir, Pakistan"] = { placetype = {"administrative territory", "autonomous territory", "territory"}, }, ["Azad Jammu and Kashmir, Pakistan"] = {alias_of = "Azad Kashmir, Pakistan", display = true}, ["Balochistan, Pakistan"] = {wp = "%l, %c"}, ["Gilgit-Baltistan, Pakistan"] = { placetype = {"administrative territory", "territory"}, }, ["Islamabad Capital Territory, Pakistan"] = { the = true, divs = {}, -- no divisions placetype = {"federal territory", "administrative territory", "territory"}, }, -- Islamabad is an accepted alias for Islamabad Capital Territory given the above placetypes ["Islamabad, Pakistan"] = {alias_of = "Islamabad Capital Territory, Pakistan"}, ["Khyber Pakhtunkhwa, Pakistan"] = {}, ["Punjab, Pakistan"] = {wp = "%l, %c"}, ["Sindh, Pakistan"] = {}, } -- provinces and territories of Pakistan export.pakistan_group = { default_container = "Pakistan", default_placetype = "province", default_divs = "divisions", data = export.pakistan_provinces_and_territories, } export.philippines_provinces = { ["Abra, Philippines"] = {wp = "%l (province)"}, ["Agusan del Norte, Philippines"] = {}, ["Agusan del Sur, Philippines"] = {}, ["Aklan, Philippines"] = {}, ["Albay, Philippines"] = {}, ["Antique, Philippines"] = {wp = "%l (province)"}, ["Apayao, Philippines"] = {}, ["Aurora, Philippines"] = {wp = "%l (province)"}, ["Basilan, Philippines"] = {}, ["Bataan, Philippines"] = {}, ["Batanes, Philippines"] = {}, ["Batangas, Philippines"] = {}, ["Benguet, Philippines"] = {}, ["Biliran, Philippines"] = {}, ["Bohol, Philippines"] = {}, ["Bukidnon, Philippines"] = {}, ["Bulacan, Philippines"] = {}, ["Cagayan, Philippines"] = {}, ["Camarines Norte, Philippines"] = {}, ["Camarines Sur, Philippines"] = {}, ["Camiguin, Philippines"] = {}, ["Capiz, Philippines"] = {}, ["Catanduanes, Philippines"] = {}, ["Cavite, Philippines"] = {}, ["Cebu, Philippines"] = {}, ["Cotabato, Philippines"] = {}, ["Davao de Oro, Philippines"] = {}, ["Davao del Norte, Philippines"] = {}, ["Davao del Sur, Philippines"] = {}, ["Davao Occidental, Philippines"] = {}, ["Davao Oriental, Philippines"] = {}, ["Dinagat Islands, Philippines"] = {the = true}, ["Eastern Samar, Philippines"] = {}, ["Guimaras, Philippines"] = {}, ["Ifugao, Philippines"] = {}, ["Ilocos Norte, Philippines"] = {}, ["Ilocos Sur, Philippines"] = {}, ["Iloilo, Philippines"] = {}, ["Isabela, Philippines"] = {wp = "%l (province)"}, ["Kalinga, Philippines"] = {wp = "%l (province)"}, ["La Union, Philippines"] = {}, ["Laguna, Philippines"] = {wp = "%l (province)"}, ["Lanao del Norte, Philippines"] = {}, ["Lanao del Sur, Philippines"] = {}, ["Leyte, Philippines"] = {wp = "%l (province)"}, ["Maguindanao del Norte, Philippines"] = {}, ["Maguindanao del Sur, Philippines"] = {}, ["Marinduque, Philippines"] = {}, ["Masbate, Philippines"] = {}, ["Misamis Occidental, Philippines"] = {}, ["Misamis Oriental, Philippines"] = {}, ["Mountain Province, Philippines"] = {}, ["Negros Occidental, Philippines"] = {}, ["Negros Oriental, Philippines"] = {}, ["Northern Samar, Philippines"] = {}, ["Nueva Ecija, Philippines"] = {}, ["Nueva Vizcaya, Philippines"] = {}, ["Occidental Mindoro, Philippines"] = {}, ["Oriental Mindoro, Philippines"] = {}, ["Palawan, Philippines"] = {}, ["Pampanga, Philippines"] = {}, ["Pangasinan, Philippines"] = {}, ["Quezon, Philippines"] = {}, ["Quirino, Philippines"] = {}, ["Rizal, Philippines"] = {wp = "%l (province)"}, ["Romblon, Philippines"] = {}, ["Samar, Philippines"] = {wp = "%l (province)"}, ["Sarangani, Philippines"] = {}, ["Siquijor, Philippines"] = {}, ["Sorsogon, Philippines"] = {}, ["South Cotabato, Philippines"] = {}, ["Southern Leyte, Philippines"] = {}, ["Sultan Kudarat, Philippines"] = {}, ["Sulu, Philippines"] = {}, ["Surigao del Norte, Philippines"] = {}, ["Surigao del Sur, Philippines"] = {}, ["Tarlac, Philippines"] = {}, ["Tawi-Tawi, Philippines"] = {}, ["Zambales, Philippines"] = {}, ["Zamboanga del Norte, Philippines"] = {}, ["Zamboanga del Sur, Philippines"] = {}, ["Zamboanga Sibugay, Philippines"] = {}, -- not a province but treated as one; allow it to be referred to as a province in holonyms ["Metro Manila, Philippines"] = {placetype = {"region", "province"}}, } -- provinces of the Philippines export.philippines_group = { default_container = "Philippines", default_placetype = "province", default_divs = {"municipalities", "barangays"}, data = export.philippines_provinces, } export.poland_voivodeships = { ["Lower Silesian Voivodeship, Poland"] = {}, -- abbr DS, code 02, capital Wrocław ["Kuyavian-Pomeranian Voivodeship, Poland"] = {}, -- abbr KP, code 04, capital Bydgoszcz (seat of voivode), Toruń (seat of sejmik and marshal) ["Lublin Voivodeship, Poland"] = {}, -- abbr LU, code 06, capital Lublin ["Lubusz Voivodeship, Poland"] = {}, -- abbr LB, code 08, capital Gorzów Wielkopolski (seat of voivode), Zielona Góra (seat of sejmik and marshal) ["Lodz Voivodeship, Poland"] = {wp = "Łódź Voivodeship"}, -- abbr LD, code 10, capital Łódź ["Łódź Voivodeship, Poland"] = {alias_of = "Lodz Voivodeship, Poland", display = true, display_as_full = true}, ["Lesser Poland Voivodeship, Poland"] = {}, -- abbr MA, code 12, capital Kraków ["Masovian Voivodeship, Poland"] = {}, -- abbr MZ, code 14, capital Warsaw ["Opole Voivodeship, Poland"] = {}, -- abbr OP, code 16, capital Opole ["Subcarpathian Voivodeship, Poland"] = {}, -- abbr PK, code 18, capital Rzeszów ["Podlaskie Voivodeship, Poland"] = {}, -- abbr PD, code 20, capital Białystok ["Pomeranian Voivodeship, Poland"] = {}, -- abbr PM, code 22, capital Gdańsk ["Silesian Voivodeship, Poland"] = {}, -- abbr SL, code 24, capital Katowice ["Holy Cross Voivodeship, Poland"] = {wp = "Świętokrzyskie Voivodeship"}, -- abbr SK, code 26, capital Kielce ["Świętokrzyskie Voivodeship, Poland"] = {alias_of = "Holy Cross Voivodeship, Poland", display = true, display_as_full = true}, ["Warmian-Masurian Voivodeship, Poland"] = {}, -- abbr WN, code 28, capital Olsztyn ["Greater Poland Voivodeship, Poland"] = {}, -- abbr WP, code 30, capital Poznań ["West Pomeranian Voivodeship, Poland"] = {}, -- abbr ZP, code 32, capital Szczecin } -- voivodeships of Poland export.poland_group = { key_to_placename = make_key_to_placename(", Poland$", " Voivodeship$"), placename_to_key = make_placename_to_key(", Poland", " Voivodeship"), default_container = "Poland", default_placetype = "voivodeship", default_divs = { -- "counties", -- not enough of them currently {type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}}, }, data = export.poland_voivodeships, } export.portugal_districts_and_autonomous_regions = { ["Azores, Portugal"] = {the = true, placetype = {"autonomous region", "region"}}, ["Aveiro District, Portugal"] = {}, ["Beja District, Portugal"] = {}, ["Braga District, Portugal"] = {}, ["Bragança District, Portugal"] = {}, ["Castelo Branco District, Portugal"] = {}, ["Coimbra District, Portugal"] = {}, ["Évora District, Portugal"] = {}, ["Faro District, Portugal"] = {}, ["Guarda District, Portugal"] = {}, ["Leiria District, Portugal"] = {}, ["Lisbon District, Portugal"] = {}, ["Lisboa District, Portugal"] = {alias_of = "Lisbon District, Portugal", display = true}, ["Madeira, Portugal"] = {placetype = {"autonomous region", "region"}}, ["Portalegre District, Portugal"] = {}, ["Porto District, Portugal"] = {}, ["Santarém District, Portugal"] = {}, ["Setúbal District, Portugal"] = {}, ["Viana do Castelo District, Portugal"] = {}, ["Vila Real District, Portugal"] = {}, ["Viseu District, Portugal"] = {}, } local function portugal_placename_to_key(placename) if placename == "Azores" or placename == "Madeira" then return placename .. ", Portugal" end if placename:find(" District$") then return placename .. ", Portugal" end return placename .. " District, Portugal" end -- districts and autonomous regions of Portugal export.portugal_group = { key_to_placename = make_key_to_placename(", Portugal$", " District$"), placename_to_key = portugal_placename_to_key, default_container = "Portugal", default_placetype = "district", default_divs = "municipalities", data = export.portugal_districts_and_autonomous_regions, } export.romania_counties = { ["Alba County, Romania"] = {}, ["Arad County, Romania"] = {}, ["Argeș County, Romania"] = {}, ["Bacău County, Romania"] = {}, ["Bihor County, Romania"] = {}, ["Bistrița-Năsăud County, Romania"] = {}, ["Botoșani County, Romania"] = {}, ["Brașov County, Romania"] = {}, ["Brăila County, Romania"] = {}, -- Bucharest: not in a county ["Buzău County, Romania"] = {}, ["Caraș-Severin County, Romania"] = {}, ["Cluj County, Romania"] = {}, ["Constanța County, Romania"] = {}, ["Covasna County, Romania"] = {}, ["Călărași County, Romania"] = {}, ["Dolj County, Romania"] = {}, ["Dâmbovița County, Romania"] = {}, ["Galați County, Romania"] = {}, ["Giurgiu County, Romania"] = {}, ["Gorj County, Romania"] = {}, ["Harghita County, Romania"] = {}, ["Hunedoara County, Romania"] = {}, ["Ialomița County, Romania"] = {}, ["Iași County, Romania"] = {}, ["Ilfov County, Romania"] = {}, ["Maramureș County, Romania"] = {}, ["Mehedinți County, Romania"] = {}, ["Mureș County, Romania"] = {}, ["Neamț County, Romania"] = {}, ["Olt County, Romania"] = {}, ["Prahova County, Romania"] = {}, ["Satu Mare County, Romania"] = {}, ["Sibiu County, Romania"] = {}, ["Suceava County, Romania"] = {}, ["Sălaj County, Romania"] = {}, ["Teleorman County, Romania"] = {}, ["Timiș County, Romania"] = {}, ["Tulcea County, Romania"] = {}, ["Vaslui County, Romania"] = {}, ["Vrancea County, Romania"] = {}, ["Vâlcea County, Romania"] = {}, } -- counties of Romania export.romania_group = { key_to_placename = make_key_to_placename(", Romania$", " County$"), placename_to_key = make_placename_to_key(", Romania", " County"), default_container = "Romania", default_placetype = "county", default_divs = "communes", data = export.romania_counties, } local function make_russia_federal_subject_spec(spectype, use_the, wp) return { placetype = spectype, the = not not use_the, bare_category_parent_type = {"federal subjects", spectype .. "s"}, wp = wp, } end local russia_autonomous_okrug_no_the = {placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}} local russia_autonomous_okrug_the = {placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}, the = true} local russia_krai = make_russia_federal_subject_spec("krai") local russia_oblast = make_russia_federal_subject_spec("oblast") local russia_republic_the = make_russia_federal_subject_spec("republic", "use the") local russia_republic_no_the = make_russia_federal_subject_spec("republic") export.russia_federal_subjects = { -- autonomous oblasts ["Jewish Autonomous Oblast, Russia"] = {the = true, placetype = {"autonomous oblast", "oblast"}, bare_category_parent_type = {"federal subjects", "autonomous oblasts"}}, -- autonomous okrugs ["Chukotka Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Chukotka, Russia"] = {alias_of = "Chukotka Autonomous Okrug, Russia"}, ["Khanty-Mansi Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Khanty-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Khantia-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Yugra, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Nenetsia, Russia"] = {alias_of = "Nenets Autonomous Okrug, Russia"}, ["Yamalo-Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Yamalia, Russia"] = {alias_of = "Yamalo-Nenets Autonomous Okrug, Russia"}, -- krais ["Altai Krai, Russia"] = russia_krai, ["Kamchatka Krai, Russia"] = russia_krai, ["Khabarovsk Krai, Russia"] = russia_krai, ["Krasnodar Krai, Russia"] = russia_krai, ["Krasnoyarsk Krai, Russia"] = russia_krai, ["Perm Krai, Russia"] = russia_krai, ["Primorsky Krai, Russia"] = russia_krai, ["Stavropol Krai, Russia"] = russia_krai, ["Zabaykalsky Krai, Russia"] = russia_krai, -- oblasts ["Amur Oblast, Russia"] = russia_oblast, ["Arkhangelsk Oblast, Russia"] = russia_oblast, ["Astrakhan Oblast, Russia"] = russia_oblast, ["Belgorod Oblast, Russia"] = russia_oblast, ["Bryansk Oblast, Russia"] = russia_oblast, ["Chelyabinsk Oblast, Russia"] = russia_oblast, ["Irkutsk Oblast, Russia"] = russia_oblast, ["Ivanovo Oblast, Russia"] = russia_oblast, ["Kaliningrad Oblast, Russia"] = russia_oblast, ["Kaluga Oblast, Russia"] = russia_oblast, ["Kemerovo Oblast, Russia"] = russia_oblast, ["Kirov Oblast, Russia"] = russia_oblast, ["Kostroma Oblast, Russia"] = russia_oblast, ["Kurgan Oblast, Russia"] = russia_oblast, ["Kursk Oblast, Russia"] = russia_oblast, ["Leningrad Oblast, Russia"] = russia_oblast, ["Lipetsk Oblast, Russia"] = russia_oblast, ["Magadan Oblast, Russia"] = russia_oblast, ["Moscow Oblast, Russia"] = russia_oblast, ["Murmansk Oblast, Russia"] = russia_oblast, ["Nizhny Novgorod Oblast, Russia"] = russia_oblast, ["Novgorod Oblast, Russia"] = russia_oblast, ["Novosibirsk Oblast, Russia"] = russia_oblast, ["Omsk Oblast, Russia"] = russia_oblast, ["Orenburg Oblast, Russia"] = russia_oblast, ["Oryol Oblast, Russia"] = russia_oblast, ["Penza Oblast, Russia"] = russia_oblast, ["Pskov Oblast, Russia"] = russia_oblast, ["Rostov Oblast, Russia"] = russia_oblast, ["Ryazan Oblast, Russia"] = russia_oblast, ["Sakhalin Oblast, Russia"] = russia_oblast, ["Samara Oblast, Russia"] = russia_oblast, ["Saratov Oblast, Russia"] = russia_oblast, ["Smolensk Oblast, Russia"] = russia_oblast, ["Sverdlovsk Oblast, Russia"] = russia_oblast, ["Tambov Oblast, Russia"] = russia_oblast, ["Tomsk Oblast, Russia"] = russia_oblast, ["Tula Oblast, Russia"] = russia_oblast, ["Tver Oblast, Russia"] = russia_oblast, ["Tyumen Oblast, Russia"] = russia_oblast, ["Ulyanovsk Oblast, Russia"] = russia_oblast, ["Vladimir Oblast, Russia"] = russia_oblast, ["Volgograd Oblast, Russia"] = russia_oblast, ["Vologda Oblast, Russia"] = russia_oblast, ["Voronezh Oblast, Russia"] = russia_oblast, ["Yaroslavl Oblast, Russia"] = russia_oblast, -- republics -- -- We only need to include cases that aren't just shortened versions of the full federal subject name (i.e. where -- words like "Republic" and "Oblast" are omitted but the name is not otherwise modified; these are handled by -- key_to_placename). Non-display-canonicalizing aliases are generally due to differences in the presence or absence -- of "the". ["Adygea, Russia"] = russia_republic_no_the, ["Republic of Adygea, Russia"] = {alias_of = "Adygea, Russia", the = true}, ["Bashkortostan, Russia"] = russia_republic_no_the, ["Republic of Bashkortostan, Russia"] = {alias_of = "Bashkortostan, Russia", the = true}, ["Bashkiria, Russia"] = {alias_of = "Bashkortostan, Russia"}, ["Buryatia, Russia"] = russia_republic_no_the, ["Republic of Buryatia, Russia"] = {alias_of = "Buryatia, Russia", the = true}, ["Dagestan, Russia"] = russia_republic_no_the, ["Republic of Dagestan, Russia"] = {alias_of = "Dagestan, Russia", the = true}, ["Ingushetia, Russia"] = russia_republic_no_the, ["Republic of Ingushetia, Russia"] = {alias_of = "Ingushetia, Russia", the = true}, ["Kalmykia, Russia"] = russia_republic_no_the, ["Republic of Kalmykia, Russia"] = {alias_of = "Kalmykia, Russia", the = true}, ["Karelia, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Karelia"), ["Republic of Karelia, Russia"] = {alias_of = "Karelia, Russia", the = true}, ["Khakassia, Russia"] = russia_republic_no_the, ["Republic of Khakassia, Russia"] = {alias_of = "Khakassia, Russia", the = true}, ["Mordovia, Russia"] = russia_republic_no_the, ["Republic of Mordovia, Russia"] = {alias_of = "Mordovia, Russia", the = true}, ["North Ossetia-Alania, Russia"] = make_russia_federal_subject_spec("republic", nil, "North Ossetia–Alania"), -- with en-dash ["Republic of North Ossetia-Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia", the = true}, ["North Ossetia, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true}, ["Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true}, ["Tatarstan, Russia"] = russia_republic_no_the, ["Republic of Tatarstan, Russia"] = {alias_of = "Tatarstan, Russia", the = true}, ["Altai Republic, Russia"] = russia_republic_the, ["Chechnya, Russia"] = russia_republic_no_the, ["Chechen Republic, Russia"] = {alias_of = "Chechnya, Russia", the = true}, ["Chuvashia, Russia"] = russia_republic_no_the, ["Chuvash Republic, Russia"] = {alias_of = "Chuvashia, Russia", the = true}, ["Kabardino-Balkaria, Russia"] = russia_republic_no_the, ["Kabardino-Balkariya, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = true}, ["Kabardino-Balkarian Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", the = true}, ["Kabardino-Balkar Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = "Kabardino-Balkarian Republic, Russia", the = true}, ["Karachay-Cherkessia, Russia"] = russia_republic_no_the, ["Karachay-Cherkess Republic, Russia"] = {alias_of = "Karachay-Cherkessia, Russia"}, ["Komi, Russia"] = make_russia_federal_subject_spec("republic", nil, "Komi Republic"), ["Komi Republic, Russia"] = {alias_of = "Komi, Russia", the = true}, ["Mari El, Russia"] = russia_republic_no_the, ["Mari El Republic, Russia"] = {alias_of = "Mari El, Russia", the = true}, ["Sakha, Russia"] = make_russia_federal_subject_spec("republic", nil, "Sakha Republic"), ["Sakha Republic, Russia"] = {alias_of = "Sakha, Russia", the = true}, ["Yakutia, Russia"] = {alias_of = "Sakha, Russia"}, ["Yakutiya, Russia"] = {alias_of = "Sakha, Russia", display = "Yakutia, Russia"}, ["Republic of Yakutia (Sakha), Russia"] = {alias_of = "Sakha, Russia", display = "Sakha Republic, Russia", the = true}, ["Tuva, Russia"] = russia_republic_no_the, ["Tyva, Russia"] = {alias_of = "Tuva, Russia", display = true}, ["Tuva Republic, Russia"] = {alias_of = "Tuva, Russia", the = true}, ["Tyva Republic, Russia"] = {alias_of = "Tuva, Russia", display= "Tuva Republic, Russia", the = true}, ["Udmurtia, Russia"] = russia_republic_no_the, ["Udmurt Republic, Russia"] = {alias_of = "Udmurtia, Russia", the = true}, -- Not included due to being unrecognized and only partly controlled: -- ["Crimea, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Crimea (Russia)") -- ["Donetsk People's Republic, Russia"] = russia_republic_the, -- ["Luhansk People's Republic, Russia"] = russia_republic_the, -- ["Zaporozhye Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Zaporizhzhia Oblast"), -- ["Kherson Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Kherson Oblast"), -- There are also federal cities (not included because they're cities): -- Moscow, Saint Petersburg; Sevastopol (unrecognized; same status as for "Crimea, Russia" above) } local function russia_key_to_placename(key) key = key:gsub(",.*", "") local full_placename = key if key == "Jewish Autonomous Oblast" then return full_placename, full_placename end local elliptical_placename for _, suffix in ipairs({"Krai", "Oblast"}) do elliptical_placename = key:match("^(.*) " .. suffix .. "$") if elliptical_placename then return full_placename, elliptical_placename end end return full_placename, full_placename end local function russia_placename_to_key(placename) local key = placename .. ", Russia" if export.russia_federal_subjects[key] then return key end -- We allow the user to say e.g. "obl/Samara" in place of "obl/Samara Oblast". for _, suffix in ipairs({"Krai", "Oblast"}) do local suffixed_key = placename .. " " .. suffix .. ", Russia" if export.russia_federal_subjects[suffixed_key] then return suffixed_key end end return placename .. ", Russia" end local function construct_russia_federal_subject_keydesc(group, key, spec) local placename = key:gsub(",.*", "") local linked_placename = export.construct_linked_placename(spec, placename) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if placetype == "oblast" then -- Hack: Oblasts generally don't have entries under "Foo Oblast" -- but just under "Foo", so fix the linked key appropriately; -- doesn't apply to the Jewish Autonomous Oblast linked_placename = linked_placename:gsub(" Oblast%]%]", "%]%] Oblast") end return linked_placename .. ", a [[federal subject]] ([[" .. placetype .. "]]) of [[Russia]]" end -- federal subjects of Russia export.russia_group = { key_to_placename = russia_key_to_placename, placename_to_key = russia_placename_to_key, default_container = "Russia", default_keydesc = construct_russia_federal_subject_keydesc, default_overriding_bare_label_parents = {"federal subjects of Russia", "+++"}, data = export.russia_federal_subjects, } export.saudi_arabia_provinces = { ["Riyadh Province, Saudi Arabia"] = {}, ["Mecca Province, Saudi Arabia"] = {}, -- Name is too generic to assume it's in Saudi Arabia if not specified. ["Eastern Province, Saudi Arabia"] = {no_auto_augment_container = true, wp = "%l, %c"}, ["Medina Province, Saudi Arabia"] = {wp = "%l (%c)"}, ["Aseer Province, Saudi Arabia"] = {wp = "Asir"}, ["Asir Province, Saudi Arabia"] = {alias_of = "Aseer Province, Saudi Arabia", display = true}, ["Jazan Province, Saudi Arabia"] = {}, ["Qassim Province, Saudi Arabia"] = {wp = "Al-Qassim Province"}, ["Al-Qassim Province, Saudi Arabia"] = {alias_of = "Qassim Province, Saudi Arabia", display = true}, ["Tabuk Province, Saudi Arabia"] = {}, ["Hail Province, Saudi Arabia"] = {wp = "Ḥa'il Province"}, ["Ha'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true}, ["Ḥa'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true}, ["Al-Jouf Province, Saudi Arabia"] = {wp = "Al-Jawf Province"}, ["Al-Jawf Province, Saudi Arabia"] = {alias_of = "Al-Jouf Province, Saudi Arabia", display = true}, ["Najran Province, Saudi Arabia"] = {}, ["Northern Borders Province, Saudi Arabia"] = {}, ["Al-Bahah Province, Saudi Arabia"] = {}, } -- provinces of Saudi Arabia export.saudi_arabia_group = { key_to_placename = make_key_to_placename(", Saudi Arabia$", " Province$"), placename_to_key = make_placename_to_key(", Saudi Arabia", " Province"), default_container = "Saudi Arabia", default_placetype = "province", data = export.saudi_arabia_provinces, } export.south_africa_provinces = { ["Eastern Cape, South Africa"] = {the = true}, ["Free State, South Africa"] = {the = true, wp = "%l (province)"}, ["Gauteng, South Africa"] = {}, ["KwaZulu-Natal, South Africa"] = {}, ["Limpopo, South Africa"] = {}, ["Mpumalanga, South Africa"] = {}, -- per Wikipedia and other sources, `North West` doesn't normally have `the` before it ["North West, South Africa"] = {wp = "%l (South African province)"}, ["Northern Cape, South Africa"] = {the = true}, ["Western Cape, South Africa"] = {the = true}, } -- provinces of South Africa export.south_africa_group = { default_container = "South Africa", default_placetype = "province", default_divs = "municipalities", data = export.south_africa_provinces, } export.south_korea_provinces = { ["North Chungcheong Province, South Korea"] = {}, ["South Chungcheong Province, South Korea"] = {}, ["Gangwon Province, South Korea"] = {wp = "%l, %c"}, ["Gyeonggi Province, South Korea"] = {}, ["North Gyeongsang Province, South Korea"] = {}, ["South Gyeongsang Province, South Korea"] = {}, ["North Jeolla Province, South Korea"] = {}, ["South Jeolla Province, South Korea"] = {}, ["Jeju Province, South Korea"] = {}, } -- provinces of South Korea export.south_korea_group = { key_to_placename = make_key_to_placename(", South Korea$", " Province$"), placename_to_key = make_placename_to_key(", South Korea", " Province"), default_container = "South Korea", default_placetype = "province", data = export.south_korea_provinces, } export.spain_autonomous_communities = { ["Andalusia, Spain"] = {}, ["Aragon, Spain"] = {}, ["Asturias, Spain"] = {}, ["Balearic Islands, Spain"] = {the = true}, ["Basque Country, Spain"] = {the = true, wp = "%l (autonomous community)"}, ["Canary Islands, Spain"] = {the = true}, ["Cantabria, Spain"] = {}, ["Castile and León, Spain"] = {}, ["Castilla-La Mancha, Spain"] = {wp = "Castilla–La Mancha"}, -- with en-dash ["Catalonia, Spain"] = {}, ["Community of Madrid, Spain"] = {the = true}, ["Extremadura, Spain"] = {}, ["Galicia, Spain"] = {wp = "%l (Spain)"}, ["La Rioja, Spain"] = {}, ["Murcia, Spain"] = {wp = "Region of %l"}, ["Navarre, Spain"] = {}, ["Valencia, Spain"] = {wp = "Valencian Community"}, ["Valencian Community, Spain"] = {alias_of = "Valencia, Spain", the = true}, } -- autonomous communities of Spain export.spain_group = { default_container = "Spain", default_placetype = "autonomous community", default_divs = {"municipalities", "comarcas"}, data = export.spain_autonomous_communities, } export.taiwan_counties = { ["Changhua County, Taiwan"] = {}, ["Chiayi County, Taiwan"] = {}, ["Hsinchu County, Taiwan"] = {}, ["Hualien County, Taiwan"] = {}, ["Kinmen County, Taiwan"] = {wp = "Kinmen"}, ["Lienchiang County, Taiwan"] = {wp = "Matsu Islands"}, ["Miaoli County, Taiwan"] = {}, ["Nantou County, Taiwan"] = {}, ["Penghu County, Taiwan"] = {wp = "Penghu"}, ["Pingtung County, Taiwan"] = {}, ["Taitung County, Taiwan"] = {}, ["Yilan County, Taiwan"] = {wp = "%l, %c"}, ["Yunlin County, Taiwan"] = {}, } -- counties of Taiwan export.taiwan_group = { key_to_placename = make_key_to_placename(", Taiwan$", " County$"), placename_to_key = make_placename_to_key(", Taiwan", " County"), default_container = "Taiwan", default_placetype = "county", default_divs = {"districts", "townships"}, data = export.taiwan_counties, } export.thailand_provinces = { -- Bangkok (special administrative area) ["Amnat Charoen Province, Thailand"] = {}, ["Ang Thong Province, Thailand"] = {}, ["Bueng Kan Province, Thailand"] = {}, ["Buriram Province, Thailand"] = {}, ["Chachoengsao Province, Thailand"] = {}, ["Chai Nat Province, Thailand"] = {}, ["Chaiyaphum Province, Thailand"] = {}, ["Chanthaburi Province, Thailand"] = {}, ["Chiang Mai Province, Thailand"] = {}, ["Chiang Rai Province, Thailand"] = {}, ["Chonburi Province, Thailand"] = {}, ["Chumphon Province, Thailand"] = {}, ["Kalasin Province, Thailand"] = {}, ["Kamphaeng Phet Province, Thailand"] = {}, ["Kanchanaburi Province, Thailand"] = {}, ["Khon Kaen Province, Thailand"] = {}, ["Krabi Province, Thailand"] = {}, ["Lampang Province, Thailand"] = {}, ["Lamphun Province, Thailand"] = {}, ["Loei Province, Thailand"] = {}, ["Lopburi Province, Thailand"] = {}, ["Mae Hong Son Province, Thailand"] = {}, ["Maha Sarakham Province, Thailand"] = {}, ["Mukdahan Province, Thailand"] = {}, ["Nakhon Nayok Province, Thailand"] = {}, ["Nakhon Pathom Province, Thailand"] = {}, ["Nakhon Phanom Province, Thailand"] = {}, ["Nakhon Ratchasima Province, Thailand"] = {}, ["Nakhon Sawon Province, Thailand"] = {}, ["Nakhon Si Thammarat Province, Thailand"] = {}, ["Nan Province, Thailand"] = {}, ["Narathiwat Province, Thailand"] = {}, ["Nong Bua Lamphu Province, Thailand"] = {}, ["Nong Khai Province, Thailand"] = {}, ["Nonthaburi Province, Thailand"] = {}, ["Pathum Thani Province, Thailand"] = {}, ["Pattani Province, Thailand"] = {}, ["Phang Nga Province, Thailand"] = {}, ["Phatthalung Province, Thailand"] = {}, ["Phayao Province, Thailand"] = {}, ["Phetchabun Province, Thailand"] = {}, ["Phetchaburi Province, Thailand"] = {}, ["Phichit Province, Thailand"] = {}, ["Phitsanulok Province, Thailand"] = {}, ["Phra Nakhon Si Ayutthaya Province, Thailand"] = {}, ["Phrae Province, Thailand"] = {}, ["Phuket Province, Thailand"] = {}, ["Prachinburi Province, Thailand"] = {}, ["Prachuap Khiri Khan Province, Thailand"] = {}, ["Ranong Province, Thailand"] = {}, ["Ratchaburi Province, Thailand"] = {}, ["Rayong Province, Thailand"] = {}, ["Roi Et Province, Thailand"] = {}, ["Sa Kaeo Province, Thailand"] = {}, ["Sakon Nakhon Province, Thailand"] = {}, ["Samut Prakan Province, Thailand"] = {}, ["Samut Sakhon Province, Thailand"] = {}, ["Samut Songkhram Province, Thailand"] = {}, ["Saraburi Province, Thailand"] = {}, ["Satun Province, Thailand"] = {}, ["Sing Buri Province, Thailand"] = {}, ["Sisaket Province, Thailand"] = {}, ["Songkhla Province, Thailand"] = {}, ["Sukhothai Province, Thailand"] = {}, ["Suphan Buri Province, Thailand"] = {}, ["Surat Thani Province, Thailand"] = {}, ["Surin Province, Thailand"] = {}, ["Tak Province, Thailand"] = {}, ["Trang Province, Thailand"] = {}, ["Trat Province, Thailand"] = {}, ["Ubon Ratchathani Province, Thailand"] = {}, ["Udon Thani Province, Thailand"] = {}, ["Uthai Thani Province, Thailand"] = {}, ["Uttaradit Province, Thailand"] = {}, ["Yala Province, Thailand"] = {}, ["Yasothon Province, Thailand"] = {}, } -- provinces of Thailand export.thailand_group = { key_to_placename = make_key_to_placename(", Thailand$", " Province$"), placename_to_key = make_placename_to_key(", Thailand", " Province"), default_container = "Thailand", default_placetype = "province", default_divs = "districts", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.thailand_provinces, } export.turkey_provinces = { ["Adana Province, Turkey"] = {}, -- code 01 ["Adıyaman Province, Turkey"] = {}, -- code 02 ["Afyonkarahisar Province, Turkey"] = {}, -- code 03 ["Ağrı Province, Turkey"] = {}, -- code 04 ["Amasya Province, Turkey"] = {}, -- code 05 ["Ankara Province, Turkey"] = {}, -- code 06 ["Antalya Province, Turkey"] = {}, -- code 07 ["Artvin Province, Turkey"] = {}, -- code 08 ["Aydın Province, Turkey"] = {}, -- code 09 ["Balıkesir Province, Turkey"] = {}, -- code 10 ["Bilecik Province, Turkey"] = {}, -- code 11 ["Bingöl Province, Turkey"] = {}, -- code 12 ["Bitlis Province, Turkey"] = {}, -- code 13 ["Bolu Province, Turkey"] = {}, -- code 14 ["Burdur Province, Turkey"] = {}, -- code 15 ["Bursa Province, Turkey"] = {}, -- code 16 ["Çanakkale Province, Turkey"] = {}, -- code 17 ["Çankırı Province, Turkey"] = {}, -- code 18 ["Çorum Province, Turkey"] = {}, -- code 19 ["Denizli Province, Turkey"] = {}, -- code 20 ["Diyarbakır Province, Turkey"] = {}, -- code 21 ["Edirne Province, Turkey"] = {}, -- code 22 ["Elazığ Province, Turkey"] = {}, -- code 23 ["Elâzığ Province, Turkey"] = {alias_of = "Elazığ Province, Turkey", display = true}, ["Erzincan Province, Turkey"] = {}, -- code 24 ["Erzurum Province, Turkey"] = {}, -- code 25 ["Eskişehir Province, Turkey"] = {}, -- code 26 ["Gaziantep Province, Turkey"] = {}, -- code 27 ["Giresun Province, Turkey"] = {}, -- code 28 ["Gümüşhane Province, Turkey"] = {}, -- code 29 ["Hakkâri Province, Turkey"] = {}, -- code 30 ["Hakkari Province, Turkey"] = {alias_of = "Hakkâri Province, Turkey", display = true}, ["Hatay Province, Turkey"] = {}, -- code 31 ["Isparta Province, Turkey"] = {}, -- code 32 ["Mersin Province, Turkey"] = {}, -- code 33 -- ["Istanbul Province, Turkey"] = {}, -- code 34; this is coextensive with the city itself ["İzmir Province, Turkey"] = {}, -- code 35 ["Izmir Province, Turkey"] = {alias_of = "İzmir Province, Turkey", display = true}, ["Kars Province, Turkey"] = {}, -- code 36 ["Kastamonu Province, Turkey"] = {}, -- code 37 ["Kayseri Province, Turkey"] = {}, -- code 38 ["Kırklareli Province, Turkey"] = {}, -- code 39 ["Kırşehir Province, Turkey"] = {}, -- code 40 ["Kocaeli Province, Turkey"] = {}, -- code 41 ["Konya Province, Turkey"] = {}, -- code 42 ["Kütahya Province, Turkey"] = {}, -- code 43 ["Malatya Province, Turkey"] = {}, -- code 44 ["Manisa Province, Turkey"] = {}, -- code 45 ["Kahramanmaraş Province, Turkey"] = {}, -- code 46 ["Mardin Province, Turkey"] = {}, -- code 47 ["Muğla Province, Turkey"] = {}, -- code 48 ["Muş Province, Turkey"] = {}, -- code 49 ["Nevşehir Province, Turkey"] = {}, -- code 50 ["Niğde Province, Turkey"] = {}, -- code 51 ["Ordu Province, Turkey"] = {}, -- code 52 ["Rize Province, Turkey"] = {}, -- code 53 ["Sakarya Province, Turkey"] = {}, -- code 54 ["Samsun Province, Turkey"] = {}, -- code 55 ["Siirt Province, Turkey"] = {}, -- code 56 ["Sinop Province, Turkey"] = {}, -- code 57 ["Sivas Province, Turkey"] = {}, -- code 58 ["Tekirdağ Province, Turkey"] = {}, -- code 59 ["Tokat Province, Turkey"] = {}, -- code 60 ["Trabzon Province, Turkey"] = {}, -- code 61 ["Tunceli Province, Turkey"] = {}, -- code 62 ["Şanlıurfa Province, Turkey"] = {}, -- code 63 ["Uşak Province, Turkey"] = {}, -- code 64 ["Van Province, Turkey"] = {}, -- code 65 ["Yozgat Province, Turkey"] = {}, -- code 66 ["Zonguldak Province, Turkey"] = {}, -- code 67 ["Aksaray Province, Turkey"] = {}, -- code 68 ["Bayburt Province, Turkey"] = {}, -- code 69 ["Karaman Province, Turkey"] = {}, -- code 70 ["Kırıkkale Province, Turkey"] = {}, -- code 71 ["Batman Province, Turkey"] = {}, -- code 72 ["Şırnak Province, Turkey"] = {}, -- code 73 ["Bartın Province, Turkey"] = {}, -- code 74 ["Ardahan Province, Turkey"] = {}, -- code 75 ["Iğdır Province, Turkey"] = {}, -- code 76 ["Yalova Province, Turkey"] = {}, -- code 77 ["Karabük Province, Turkey"] = {}, -- code 78 ["Kilis Province, Turkey"] = {}, -- code 79 ["Osmaniye Province, Turkey"] = {}, -- code 80 ["Düzce Province, Turkey"] = {}, -- code 81 } -- provinces of Turkey export.turkey_group = { key_to_placename = make_key_to_placename(", Turkey$", " Province$"), placename_to_key = make_placename_to_key(", Turkey", " Province"), default_container = "Turkey", default_placetype = "province", default_divs = "districts", data = export.turkey_provinces, } export.ukraine_oblasts = { ["Cherkasy Oblast, Ukraine"] = {}, -- capital [[Cherkasy]], license plate prefix CA, IA ["Chernihiv Oblast, Ukraine"] = {}, -- capital [[Chernihiv]], license plate prefix CB, IB ["Chernivtsi Oblast, Ukraine"] = {}, -- capital [[Chernivtsi]], license plate prefix CE, IE -- apparently will be renamed to 'Dnipro Oblast' ["Dnipropetrovsk Oblast, Ukraine"] = {}, -- capital [[Dnipro]], license plate prefix AE, KE ["Donetsk Oblast, Ukraine"] = {}, -- capital ''[[Donetsk]] ([[Kramatorsk]])'', license plate prefix AH, KH ["Ivano-Frankivsk Oblast, Ukraine"] = {}, -- capital [[Ivano-Frankivsk]], license plate prefix AT, KT ["Kharkiv Oblast, Ukraine"] = {}, -- capital [[Kharkiv]], license plate prefix AX, KX ["Kherson Oblast, Ukraine"] = {}, -- capital ''[[Kherson]]'', license plate prefix ''BT, HT'' ["Khmelnytskyi Oblast, Ukraine"] = {}, -- capital [[Khmelnytskyi]], license plate prefix BX, HX -- apparently will be renamed to 'Kropyvnytskyi Oblast' ["Kirovohrad Oblast, Ukraine"] = {}, -- capital [[Kropyvnytskyi]], license plate prefix BA, HA ["Kyiv Oblast, Ukraine"] = {}, -- capital [[Kyiv]], license plate prefix AI, KI ["Kiev Oblast, Ukraine"] = {alias_of = "Kyiv Oblast, Ukraine", display = true}, ["Luhansk Oblast, Ukraine"] = {}, -- capital ''[[Luhansk]] ([[Sievierodonetsk]])'', license plate prefix BB, HB ["Lviv Oblast, Ukraine"] = {}, -- capital [[Lviv]], license plate prefix BC, HC ["Mykolaiv Oblast, Ukraine"] = {}, -- capital [[Mykolaiv]], license plate prefix BE, HE ["Odesa Oblast, Ukraine"] = {}, -- capital [[Odesa]], license plate prefix BH, HH ["Odessa Oblast, Ukraine"] = {alias_of = "Odesa Oblast, Ukraine", display = true}, ["Poltava Oblast, Ukraine"] = {}, -- capital [[Poltava]], license plate prefix BI, HI ["Rivne Oblast, Ukraine"] = {}, -- capital [[Rivne]], license plate prefix BK, HK ["Sumy Oblast, Ukraine"] = {}, -- capital [[Sumy]], license plate prefix BM, HM ["Ternopil Oblast, Ukraine"] = {}, -- capital [[Ternopil]], license plate prefix BO, HO ["Vinnytsia Oblast, Ukraine"] = {}, -- capital [[Vinnytsia]], license plate prefix AB, KB ["Volyn Oblast, Ukraine"] = {}, -- capital [[Lutsk]], license plate prefix AC, KC ["Zakarpattia Oblast, Ukraine"] = {}, -- capital [[Uzhhorod]], license plate prefix AO, KO ["Zaporizhzhia Oblast, Ukraine"] = {}, -- capital ''[[Zaporizhzhia]]'', license plate prefix AP, KP ["Zaporizhia Oblast, Ukraine"] = {alias_of = "Zaporizhzhia Oblast, Ukraine", display = true}, ["Zhytomyr Oblast, Ukraine"] = {}, -- capital [[Zhytomyr]], license plate prefix AM, KM } -- oblasts of Ukraine export.ukraine_group = { key_to_placename = make_key_to_placename(", Ukraine$", " Oblast$"), placename_to_key = make_placename_to_key(", Ukraine", " Oblast"), default_container = "Ukraine", default_placetype = "oblast", default_divs = {"raions", "hromadas"}, data = export.ukraine_oblasts, } export.united_kingdom_constituent_countries = { ["England"] = {divs = { "counties", "districts", {type = "local government districts", cat_as = "districts"}, { type = "local government districts with borough status", cat_as = {"districts", "boroughs"}, }, {type = "boroughs", cat_as = {"districts", "boroughs"}}, {type = "civil parishes", container_parent_type = false}, }}, ["Northern Ireland"] = { placetype = {"constituent country", "province", "country"}, divs = {"counties", "districts"}, }, ["Scotland"] = {divs = { {type = "council areas", container_parent_type = false}, "districts", }}, ["Wales"] = {divs = { "counties", {type = "county boroughs", container_parent_type = false}, {type = "communities", container_parent_type = false}, {type = "Welsh communities", cat_as = {{type = "communities", container_parent_type = false}}}, }}, } -- constituent countries and provinces of the United Kingdom export.united_kingdom_group = { placename_to_key = false, default_container = "United Kingdom", default_placetype = {"constituent country", "country"}, addl_divs = { "traditional counties", {type = "historical counties", cat_as = "traditional counties"}, }, -- Don't create categories like 'Category:en:Towns in the United Kingdom' -- or 'Category:en:Places in the United Kingdom'. default_no_container_cat = true, data = export.united_kingdom_constituent_countries, } export.england_counties = { -- NOTE: We used to have various other "no longer" counties commented out, which seems to refer to counties that -- existed officially at some point between 1889 and 1974, which I have removed. I have only kept the three -- ceremonial counties that existed from 1974 (when ceremonial counties were created) to 1996, as well as those -- still considered "historic counties" per [[w:Historic counties of England]]. -- ["Avon, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996) ["Bedfordshire, England"] = {}, ["Berkshire, England"] = {}, -- ["Brighton and Hove, England"] = {}, -- city -- ["Bristol, England"] = {}, -- city ["Buckinghamshire, England"] = {}, ["Cambridgeshire, England"] = {}, ["Cheshire, England"] = {}, -- ["Cleveland, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996) ["Cornwall, England"] = {}, -- ["Cumberland, England"] = {}, -- no longer (historic county) ["Cumbria, England"] = {}, ["Derbyshire, England"] = {}, ["Devon, England"] = {}, ["Dorset, England"] = {}, ["County Durham, England"] = {}, ["East Sussex, England"] = {}, ["Essex, England"] = {}, ["Gloucestershire, England"] = {}, ["Greater London, England"] = {}, ["Greater Manchester, England"] = {}, ["Hampshire, England"] = {}, ["Herefordshire, England"] = {}, ["Hertfordshire, England"] = {}, -- ["Humberside, England"] = {}, -- no longer (1974 to 1996) -- ["Huntingdonshire, England"] = {}, -- no longer (historic county) ["Isle of Wight, England"] = {the = true}, ["Kent, England"] = {}, ["Lancashire, England"] = {}, ["Leicestershire, England"] = {}, ["Lincolnshire, England"] = {}, ["Merseyside, England"] = {}, -- ["Middlesex, England"] = {}, -- no longer (historic county) ["Norfolk, England"] = {}, ["Northamptonshire, England"] = {}, ["Northumberland, England"] = {}, ["North Yorkshire, England"] = {}, ["Nottinghamshire, England"] = {}, ["Oxfordshire, England"] = {}, ["Rutland, England"] = {}, ["Shropshire, England"] = {}, ["Somerset, England"] = {}, ["South Humberside, England"] = {}, ["South Yorkshire, England"] = {}, ["Staffordshire, England"] = {}, ["Suffolk, England"] = {}, ["Surrey, England"] = {}, -- ["Sussex, England"] = {}, -- no longer (historic county) ["Tyne and Wear, England"] = {}, ["Warwickshire, England"] = {}, ["West Midlands, England"] = {the = true, wp = "%l (county)"}, -- ["Westmorland, England"] = {}, -- no longer (historic county) ["West Sussex, England"] = {}, ["West Yorkshire, England"] = {}, ["Wiltshire, England"] = {}, ["Worcestershire, England"] = {}, -- ["Yorkshire, England"] = {}, -- no longer (historic county) ["East Riding of Yorkshire, England"] = {the = true}, } -- counties of England export.england_group = { default_container = {key = "England", placetype = "constituent country"}, default_placetype = "county", default_divs = { "districts", {type = "local government districts", cat_as = "districts"}, { type = "local government districts with borough status", cat_as = {"districts", "boroughs"}, }, {type = "boroughs", cat_as = {"districts", "boroughs"}}, "civil parishes", }, data = export.england_counties, } export.northern_ireland_counties = { ["County Antrim, Northern Ireland"] = {}, ["County Armagh, Northern Ireland"] = {}, ["City of Belfast, Northern Ireland"] = {the = true, is_city = true, wp = "Belfast"}, ["County Down, Northern Ireland"] = {}, ["County Fermanagh, Northern Ireland"] = {}, ["County Londonderry, Northern Ireland"] = {}, ["City of Derry, Northern Ireland"] = {the = true, is_city = true, wp = "Derry"}, ["County Tyrone, Northern Ireland"] = {}, } -- counties of Northern Ireland export.northern_ireland_group = { key_to_placename = make_irish_type_key_to_placename(", Northern Ireland$"), placename_to_key = make_irish_type_placename_to_key(", Northern Ireland"), default_container = {key = "Northern Ireland", placetype = "constituent country"}, default_placetype = "county", data = export.northern_ireland_counties, } export.scotland_council_areas = { ["Aberdeenshire, Scotland"] = {}, ["Angus, Scotland"] = {wp = "%l, %c"}, ["Argyll and Bute, Scotland"] = {}, ["City of Aberdeen, Scotland"] = {the = true, wp = "Aberdeen"}, ["Aberdeen"] = {alias_of = "City of Aberdeen, Scotland"}, ["Aberdeen City"] = {alias_of = "City of Aberdeen, Scotland"}, ["City of Dundee, Scotland"] = {the = true, wp = "Dundee"}, ["Dundee"] = {alias_of = "City of Dundee, Scotland"}, ["Dundee City"] = {alias_of = "City of Dundee, Scotland"}, ["City of Edinburgh, Scotland"] = {the = true, wp = "%l council area"}, ["Edinburgh"] = {alias_of = "City of Edinburgh, Scotland"}, ["City of Glasgow, Scotland"] = {the = true, wp = "Glasgow"}, ["Glasgow"] = {alias_of = "City of Glasgow, Scotland"}, ["Clackmannanshire, Scotland"] = {}, ["Dumfries and Galloway, Scotland"] = {}, ["East Ayrshire, Scotland"] = {}, ["East Dunbartonshire, Scotland"] = {}, ["East Lothian, Scotland"] = {}, ["East Renfrewshire, Scotland"] = {}, ["Falkirk, Scotland"] = {wp = "%l council area"}, ["Fife, Scotland"] = {}, ["Highland, Scotland"] = {wp = "%l council area"}, ["Inverclyde, Scotland"] = {}, ["Midlothian, Scotland"] = {}, ["Moray, Scotland"] = {}, ["North Ayrshire, Scotland"] = {}, ["North Lanarkshire, Scotland"] = {}, ["Orkney Islands, Scotland"] = {the = true}, ["Perth and Kinross, Scotland"] = {}, ["Renfrewshire, Scotland"] = {}, ["Scottish Borders, Scotland"] = {the = true}, ["Shetland Islands, Scotland"] = {the = true}, ["South Ayrshire, Scotland"] = {}, ["South Lanarkshire, Scotland"] = {}, ["Stirling, Scotland"] = {wp = "%l council area"}, ["West Dunbartonshire, Scotland"] = {}, ["West Lothian, Scotland"] = {}, ["Western Isles, Scotland"] = {the = true, wp = "Outer Hebrides"}, ["Na h-Eileanan Siar, Scotland"] = {alias_of = "Western Isles, Scotland"}, } -- council areas of Scotland export.scotland_group = { default_container = {key = "Scotland", placetype = "constituent country"}, default_placetype = "council area", data = export.scotland_council_areas, } export.wales_principal_areas = { ["Blaenau Gwent, Wales"] = {}, ["Bridgend, Wales"] = {wp = "%l County Borough"}, ["Caerphilly, Wales"] = {wp = "%l County Borough"}, -- ["Cardiff, Wales"] = {placetype = "city"}, ["Carmarthenshire, Wales"] = {placetype = "county"}, ["Ceredigion, Wales"] = {placetype = "county"}, ["Conwy, Wales"] = {wp = "%l County Borough"}, ["Denbighshire, Wales"] = {placetype = "county"}, ["Flintshire, Wales"] = {placetype = "county"}, ["Gwynedd, Wales"] = {placetype = "county"}, ["Isle of Anglesey, Wales"] = {the = true, placetype = "county"}, ["Anglesey, Wales"] = {alias_of = "Isle of Anglesey, Wales"}, -- differs in "the" ["Merthyr Tydfil, Wales"] = {wp = "%l County Borough"}, ["Monmouthshire, Wales"] = {placetype = "county"}, ["Neath Port Talbot, Wales"] = {}, -- ["Newport, Wales"] = {placetype = "city", wp = "%l, %c"}, ["Pembrokeshire, Wales"] = {placetype = "county"}, ["Powys, Wales"] = {placetype = "county"}, ["Rhondda Cynon Taf, Wales"] = {}, -- ["Swansea, Wales"] = {placetype = "city"}, ["Torfaen, Wales"] = {}, ["Vale of Glamorgan, Wales"] = {the = true}, ["Wrexham, Wales"] = {wp = "%l County Borough"}, } -- principal areas (cities, counties and county boroughs) of Wales export.wales_group = { default_container = {key = "Wales", placetype = "constituent country"}, default_placetype = "county borough", data = export.wales_principal_areas, } export.united_states_states = { ["Alabama, USA"] = {}, ["Alaska, USA"] = {divs = { {type = "boroughs", container_parent_type = "counties"}, {type = "borough seats", container_parent_type = "county seats"}, }}, ["Arizona, USA"] = {}, ["Arkansas, USA"] = {}, ["California, USA"] = {}, ["Colorado, USA"] = {divs = {"counties", "county seats", "municipalities"}}, ["Connecticut, USA"] = {divs = {"counties", "county seats", "municipalities"}}, ["Delaware, USA"] = {}, ["Florida, USA"] = {}, ["Georgia, USA"] = {wp = "%l (U.S. state)"}, ["Hawaii, USA"] = {addl_parents = {"Polynesia"}}, ["Idaho, USA"] = {}, ["Illinois, USA"] = {}, ["Indiana, USA"] = {}, ["Iowa, USA"] = {}, ["Kansas, USA"] = {}, ["Kentucky, USA"] = {}, ["Louisiana, USA"] = {divs = { {type = "parishes", container_parent_type = "counties"}, {type = "parish seats", container_parent_type = "county seats"}, }}, ["Maine, USA"] = {}, ["Maryland, USA"] = {}, ["Massachusetts, USA"] = {}, ["Michigan, USA"] = {}, ["Minnesota, USA"] = {}, ["Mississippi, USA"] = {}, ["Missouri, USA"] = {}, ["Montana, USA"] = {}, ["Nebraska, USA"] = {}, ["Nevada, USA"] = {}, ["New Hampshire, USA"] = {}, ["New Jersey, USA"] = {divs = { "counties", "county seats", {type = "boroughs", prep = "in"}, }}, ["New Mexico, USA"] = {}, ["New York, USA"] = {wp = "%l (state)"}, ["North Carolina, USA"] = {}, ["North Dakota, USA"] = {}, ["Ohio, USA"] = {}, ["Oklahoma, USA"] = {}, ["Oregon, USA"] = {}, ["Pennsylvania, USA"] = {divs = { "counties", "county seats", {type = "boroughs", prep = "in"}, }}, ["Rhode Island, USA"] = {}, ["South Carolina, USA"] = {}, ["South Dakota, USA"] = {}, ["Tennessee, USA"] = {}, ["Texas, USA"] = {}, ["Utah, USA"] = {}, ["Vermont, USA"] = {}, ["Virginia, USA"] = {}, ["Washington, USA"] = {wp = "%l (state)"}, ["West Virginia, USA"] = {}, ["Wisconsin, USA"] = {}, ["Wyoming, USA"] = {}, } -- states of the United States export.united_states_group = { placename_to_key = make_placename_to_key(", USA"), default_container = "United States", default_placetype = "state", default_divs = {"counties", "county seats"}, addl_divs = { {type = "census-designated places", prep = "in"}, {type = "unincorporated communities", prep = "in"}, }, data = export.united_states_states, } export.vietnam_provinces = { -- [[Northeast (Vietnam)|Northeast]] region ["Bắc Giang Province, Vietnam"] = {}, -- capital [[Bắc Giang]] ["Bắc Kạn Province, Vietnam"] = {}, -- capital [[Bắc Kạn]] ["Cao Bằng Province, Vietnam"] = {}, -- capital [[Cao Bằng]] ["Hà Giang Province, Vietnam"] = {}, -- capital [[Hà Giang]] ["Lạng Sơn Province, Vietnam"] = {}, -- capital [[Lạng Sơn]] ["Phú Thọ Province, Vietnam"] = {}, -- capital [[Việt Trì]] ["Quảng Ninh Province, Vietnam"] = {}, -- capital [[Hạ Long]] ["Thái Nguyên Province, Vietnam"] = {}, -- capital [[Thái Nguyên]] ["Tuyên Quang Province, Vietnam"] = {}, -- capital [[Tuyên Quang]] -- [[Northwest (Vietnam)|Northwest]] region ["Lào Cai Province, Vietnam"] = {}, -- capital [[Lào Cai]] ["Yên Bái Province, Vietnam"] = {}, -- capital [[Yên Bái]] ["Điện Biên Province, Vietnam"] = {}, -- capital [[Điện Biên Phủ]] ["Hoà Bình Province, Vietnam"] = {}, -- capital [[Hoà Bình City|Hoà Bình]] ["Hòa Bình Province, Vietnam"] = {alias_of = "Hoà Bình Province, Vietnam", display = true}, ["Lai Châu Province, Vietnam"] = {}, -- capital [[Lai Châu]] ["Sơn La Province, Vietnam"] = {}, -- capital [[Sơn La]] -- [[Red River Delta]] region ["Bắc Ninh Province, Vietnam"] = {}, -- capital [[Bắc Ninh]] ["Hà Nam Province, Vietnam"] = {}, -- capital [[Phủ Lý]] ["Hải Dương Province, Vietnam"] = {}, -- capital [[Hải Dương]] ["Hưng Yên Province, Vietnam"] = {}, -- capital [[Hưng Yên]] ["Nam Định Province, Vietnam"] = {}, -- capital [[Nam Định]] ["Ninh Bình Province, Vietnam"] = {}, -- capital [[Ninh Bình|Hoa Lư]] ["Thái Bình Province, Vietnam"] = {}, -- capital [[Thái Bình]] ["Vĩnh Phúc Province, Vietnam"] = {}, -- capital [[Vĩnh Yên]] -- ["Hanoi"] = {placetype = {"municipality", "city"}}, -- capital [[Hoàn Kiếm district]] -- ["Haiphong"] = {placetype = {"municipality", "city"}}, -- capital [[Hồng Bàng district]] -- [[North Central Coast]] region ["Hà Tĩnh Province, Vietnam"] = {}, -- capital [[Hà Tĩnh]] ["Nghệ An Province, Vietnam"] = {}, -- capital [[Vinh]] ["Quảng Bình Province, Vietnam"] = {}, -- capital [[Đồng Hới]] ["Quảng Trị Province, Vietnam"] = {}, -- capital [[Đông Hà]] ["Thanh Hoá Province, Vietnam"] = {}, -- capital [[Thanh Hoá]] ["Thanh Hóa Province, Vietnam"] = {alias_of = "Thanh Hoá Province, Vietnam", display = true}, -- ["Hue"] = {placetype = {"municipality", "city"}, wp = "Huế"}, -- capital [[Thuận Hoá district]] -- [[Central Highlands (Vietnam)|Central Highlands]] region ["Đắk Lắk Province, Vietnam"] = {}, -- capital [[Buôn Ma Thuột]] ["Đăk Nông Province, Vietnam"] = {}, -- capital [[Gia Nghĩa]] ["Gia Lai Province, Vietnam"] = {}, -- capital [[Pleiku]] ["Kon Tum Province, Vietnam"] = {}, -- capital [[Kon Tum]] ["Lâm Đồng Province, Vietnam"] = {}, -- capital [[Đà Lạt]] -- [[South Central Coast]] region ["Bình Định Province, Vietnam"] = {}, -- capital [[Quy Nhon]] ["Bình Thuận Province, Vietnam"] = {}, -- capital [[Phan Thiết]] ["Khánh Hoà Province, Vietnam"] = {}, -- capital [[Nha Trang]] ["Khánh Hòa Province, Vietnam"] = {alias_of = "Khánh Hoà Province, Vietnam", display = true}, ["Ninh Thuận Province, Vietnam"] = {}, -- capital [[Phan Rang–Tháp Chàm]] ["Phú Yên Province, Vietnam"] = {}, -- capital [[Tuy Hoà]] ["Quảng Nam Province, Vietnam"] = {}, -- capital [[Tam Kỳ]] ["Quảng Ngãi Province, Vietnam"] = {}, -- capital [[Quảng Ngãi]] -- ["Da Nang"] = {placetype = {"municipality", "city"}}, -- capital [[Hải Châu district]] -- [[Southeast (Vietnam)|Southeast]] region ["Bà Rịa–Vũng Tàu Province, Vietnam"] = {}, -- capital [[Bà Rịa]] ["Bình Dương Province, Vietnam"] = {}, -- capital [[Thủ Dầu Một]] ["Bình Phước Province, Vietnam"] = {}, -- capital [[Đồng Xoài]] ["Đồng Nai Province, Vietnam"] = {}, -- capital [[Biên Hoà]] ["Tây Ninh Province, Vietnam"] = {}, -- capital [[Tây Ninh]] -- ["Ho Chi Minh City"] = {placetype = {"municipality", "city"}}, -- capital [[District 1, Ho Chi Minh City|'''District 1''']] -- [[Mekong Delta]] region ["An Giang Province, Vietnam"] = {}, -- capital [[Long Xuyên]] ["Bạc Liêu Province, Vietnam"] = {}, -- capital [[Bạc Liêu]] ["Bến Tre Province, Vietnam"] = {}, -- capital [[Bến Tre]] ["Cà Mau Province, Vietnam"] = {}, -- capital [[Cà Mau]] ["Đồng Tháp Province, Vietnam"] = {}, -- capital [[Cao Lãnh City|Cao Lãnh]] ["Hậu Giang Province, Vietnam"] = {}, -- capital [[Vị Thanh]] ["Kiên Giang Province, Vietnam"] = {}, -- capital [[Rạch Giá]] ["Long An Province, Vietnam"] = {}, -- capital [[Tân An]] ["Sóc Trăng Province, Vietnam"] = {}, -- capital [[Sóc Trăng]] ["Tiền Giang Province, Vietnam"] = {}, -- capital [[Mỹ Tho]] ["Trà Vinh Province, Vietnam"] = {}, -- capital [[Trà Vinh]] ["Vĩnh Long Province, Vietnam"] = {}, -- capital [[Vĩnh Long]] -- ["Can Tho"] = {placetype = {"municipality", "city"}, wp = "Cần Thơ"}, -- capital [[Ninh Kiều district]] } -- provinces of Vietnam export.vietnam_group = { key_to_placename = make_key_to_placename(", Vietnam$", " Province$"), placename_to_key = make_placename_to_key(", Vietnam", " Province"), default_container = "Vietnam", default_placetype = "province", -- There may not be enough districts to subcategorize like this. -- default_divs = "districts", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.vietnam_provinces, } ----------------------------------------------------------------------------------- -- City data -- ----------------------------------------------------------------------------------- export.australia_cities = { ["Adelaide"] = {container = "South Australia"}, -- 1,450,000 (Agglomeration) ["Brisbane"] = {container = "Queensland"}, -- 3,450,000 (Conglomeration; including the Gold Coast [750,997 2024 estiamte]) ["Canberra"] = {container = {key = "Australian Capital Territory, Australia", placetype = "territory"}}, -- 510,641 (2024 estimate) ["Melbourne"] = {container = "Victoria"}, -- 5,200,000 (Agglomeration) ["Newcastle, New South Wales"] = {container = "New South Wales", wp = "%l, %c"}, -- 534,033 (2024 estimate) ["Newcastle"] = {alias_of = "Newcastle, New South Wales"}, ["Perth"] = {container = "Western Australia"}, -- 2,350,000 (Agglomeration) ["Sydney"] = {container = "New South Wales"}, -- 5,100,000 (Agglomeration) } export.australia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Australia", "state"), default_placetype = "city", data = export.australia_cities, } export.brazil_cities = { -- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01. ["São Paulo"] = {container = "São Paulo"}, -- 22,600,000 (Consolidated Urban Area; including Guarulhos) ["Sao Paulo"] = {alias_of = "São Paulo", display = true}, ["Rio de Janeiro"] = {container = "Rio de Janeiro"}, -- 13,600,000 (Consolidated Urban Area) ["Belo Horizonte"] = {container = "Minas Gerais"}, -- 5,300,000 ["Recife"] = {container = "Pernambuco"}, -- 4,100,000 ["Porto Alegre"] = {container = "Rio Grande do Sul"}, -- 3,950,000 (Consolidated Urban Area) ["Brasília"] = {container = "Distrito Federal"}, -- 3,850,000 ["Brasilia"] = {alias_of = "Brasília", display = true}, ["Fortaleza"] = {container = "Ceará"}, -- 3,825,000 ["Salvador"] = {container = "Bahia", wp = "%l, %c", commonscat = "%l (%c)"}, -- 3,400,000 ["Curitiba"] = {container = "Paraná"}, -- 3,375,000 ["Campinas"] = {container = "São Paulo"}, -- 3,250,000 ["Goiânia"] = {container = "Goiás"}, -- 2,525,000 ["Goiania"] = {alias_of = "Goiânia", display = true}, ["Manaus"] = {container = "Amazonas"}, -- 2,275,000 ["Belém"] = {container = "Pará"}, -- 2,200,000 ["Belem"] = {alias_of = "Belém", display = true}, ["Vitória"] = {container = "Espírito Santo", wp = "%l, %c"}, -- 1,870,000 ["Vitoria"] = {alias_of = "Vitória", display = true}, ["Santos"] = {container = "São Paulo", wp = "%l, %c"}, -- 1,760,000 ["São Luís"] = {container = "Maranhão", wp = "%l, %c"}, -- 1,530,000 ["Sao Luis"] = {alias_of = "São Luís", display = true}, ["Natal"] = {container = "Rio Grande do Norte", wp = "%l, %c"}, -- 1,360,000 ["Florianópolis"] = {container = "Santa Catarina"}, -- 1,260,000 ["Florianopolis"] = {alias_of = "Florianópolis", display = true}, ["Maceió"] = {container = "Alagoas"}, -- 1,220,000 ["Maceio"] = {alias_of = "Maceió", display = true}, ["João Pessoa"] = {container = "Paraíba", wp = "%l, %c"}, -- 1,210,000 ["Joao Pessoa"] = {alias_of = "João Pessoa", display = true}, ["São José dos Campos"] = {container = "São Paulo"}, -- 1,090,000 ["Sao Jose dos Campos"] = {alias_of = "São José dos Campos", display = true}, ["Londrina"] = {container = "Paraná"}, -- 1,050,000 ["Teresina"] = {container = "Piauí"}, -- 1,040,000 } export.brazil_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Brazil", "state"), default_placetype = "city", data = export.brazil_cities, } export.canada_cities = { -- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01. ["Toronto"] = {container = "Ontario"}, -- 7,850,000 (Consolidated Urban Area; including Hamilton) ["Montreal"] = {container = "Quebec"}, -- 4,500,000 (Consolidated Urban Area) ["Vancouver"] = {container = "British Columbia"}, -- 3,175,000 (Consolidated Urban Area) ["Calgary"] = {container = "Alberta"}, -- 1,510,000 (Consolidated Urban Area) ["Edmonton"] = {container = "Alberta"}, -- 1,460,000 (Consolidated Urban Area) ["Ottawa"] = {container = "Ontario"}, -- 1,390,000 (Consolidated Urban Area) ["Quebec City"] = {container = "Quebec"}, -- 839,311 metro per Wikipedia (2021 census) ["Winnipeg"] = {container = "Manitoba"}, -- 834,678 metro per Wikipedia (2021 census) ["Hamilton"] = {container = "Ontario", wp = "%l, %c"}, -- 785,184 metro per Wikipedia (2021 census) ["Kitchener"] = {container = "Ontario", wp = "%l, %c"}, -- 575,847 metro per Wikipedia (2021 census) } export.canada_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Canada", "province"), default_placetype = "city", data = export.canada_cities, } export.france_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. ["Paris"] = {container = "Île-de-France"}, -- 11,500,000 (Conglomeration) ["Lyon"] = {container = "Auvergne-Rhône-Alpes"}, -- 2,050,000 (Conglomeration) ["Lyons"] = {alias_of = "Lyon", display = true}, ["Marseille"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 1,710,000 (Conglomeration) ["Marseilles"] = {alias_of = "Marseille", display = true}, ["Lille"] = {container = "Hauts-de-France"}, -- 1,320,000 (Conglomeration) ["Bordeaux"] = {container = "Nouvelle-Aquitaine"}, -- 1,160,000 (Conglomeration) ["Toulouse"] = {container = "Occitania"}, -- 1,150,000 (Conglomeration) ["Nice"] = {container = "Provence-Alpes-Côte d'Azur"}, ["Nantes"] = {container = "Pays de la Loire"}, ["Strasbourg"] = {container = "Grand Est"}, ["Rennes"] = {container = "Brittany"}, } export.france_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", France", "region"), default_placetype = "city", data = export.france_cities, } export.germany_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. -- listed under Rhein-Ruhr Area, total population 10,900,000 (Consolidated Urban Area) ["Cologne"] = {container = "North Rhine-Westphalia"}, ["Köln"] = {alias_of = "Cologne", display = true}, ["Düsseldorf"] = {container = "North Rhine-Westphalia"}, ["Dusseldorf"] = {alias_of = "Düsseldorf", display = true}, ["Dortmund"] = {container = "North Rhine-Westphalia"}, ["Essen"] = {container = "North Rhine-Westphalia"}, ["Duisberg"] = {container = "North Rhine-Westphalia"}, ["Berlin"] = {}, -- 4,700,000 ["Frankfurt"] = {container = "Hesse"}, -- 3,225,000 ["Frankfurt am Main"] = {alias_of = "Frankfurt"}, -- not a display alias as it's longer ["Hamburg"] = {}, -- 2,900,000 ["Munich"] = {container = "Bavaria"}, -- 2,300,000 ["Stuttgart"] = {container = "Baden-Württemberg"}, -- 2,300,000 ["Mannheim"] = {container = "Baden-Württemberg"}, -- 1,550,000 ["Nuremberg"] = {container = "Bavaria"}, -- 1,120,000 ["Hanover"] = {"Lower Saxony"}, -- 1,090,000 ["Bielefeld"] = {container = "North Rhine-Westphalia"}, -- 1,080,000 ["Leipzig"] = {container = "Saxony"}, -- 1,080,000 ["Aachen"] = {container = "North Rhine-Westphalia"}, -- 1,000,000 ["Aix-la-Chapelle"] = {alias_of = "Aachen"}, -- historical; not a display alias ["Bremen"] = {}, } export.germany_cities_group = { default_container = "Germany", canonicalize_key_container = make_canonicalize_key_container(", Germany", "state"), default_placetype = "city", data = export.germany_cities, } export.india_cities = { -- This lists the 65 metro areas per Demographia's 2023 estimates, as found in -- [[w:List_of_million-plus_urban_agglomerations_in_India]]. The last census in India (as of April 2025) was -- conducted in 2011, and the results are not accurate any more. ["Delhi"] = {container = {key = "Delhi, India", placetype = "union territory"}}, -- 31,190,000 ["Mumbai"] = {container = "Maharashtra"}, -- 25,189,000 ["Kolkata"] = {container = "West Bengal"}, -- 21,747,000 ["Bangalore"] = {container = "Karnataka", wp = "Bengaluru"}, -- 15,257,000 ["Bengaluru"] = {alias_of = "Bangalore"}, ["Chennai"] = {container = "Tamil Nadu"}, -- 11,570,000 ["Hyderabad"] = {container = "Telangana"}, -- 9,797,000 ["Ahmedabad"] = {container = "Gujarat"}, -- 8,006,000 ["Pune"] = {container = "Maharashtra"}, -- 6,819,000 ["Surat"] = {container = "Gujarat"}, -- 6,601,000 ["Lucknow"] = {container = "Uttar Pradesh"}, -- 4,661,000 ["Jaipur"] = {container = "Rajasthan"}, -- 4,360,000 ["Kanpur"] = {container = "Uttar Pradesh"}, -- 4,350,000 ["Indore"] = {container = "Madhya Pradesh"}, -- 3,765,000 ["Nagpur"] = {container = "Maharashtra"}, -- 3,493,000 ["Patna"] = {container = "Bihar"}, -- 3,331,000 ["Varanasi"] = {container = "Uttar Pradesh"}, -- 3,229,000 ["Kozhikode"] = {container = "Kerala"}, -- 3,049,000 ["Thiruvananthapuram"] = {container = "Kerala"}, -- 2,851,000 ["Agra"] = {container = "Uttar Pradesh"}, -- 2,737,000 ["Bhopal"] = {container = "Madhya Pradesh"}, -- 2,562,000 ["Coimbatore"] = {container = "Tamil Nadu"}, -- 2,551,000 ["Allahabad"] = {container = "Uttar Pradesh", wp = "Prayagraj"}, -- 2,438,000 ["Prayagraj"] = {alias_of = "Allahabad"}, ["Kochi"] = {container = "Kerala"}, -- 2,381,000 ["Ludhiana"] = {container = "Punjab"}, -- 2,205,000 ["Vadodara"] = {container = "Gujarat"}, -- 2,182,000 ["Chandigarh"] = {container = {key = "Chandigarh, India", placetype = "union territory"}}, -- 2,168,000 ["Madurai"] = {container = "Tamil Nadu"}, -- 2,048,000 ["Meerut"] = {container = "Uttar Pradesh"}, -- 2,011,000 ["Visakhapatnam"] = {container = "Andhra Pradesh"}, -- 2,005,000 ["Jamshedpur"] = {container = "Jharkhand"}, -- 1,925,000 ["Malappuram"] = {container = "Kerala"}, -- 1,868,000 ["Nashik"] = {container = "Maharashtra"}, -- 1,810,000 ["Asansol"] = {container = "West Bengal"}, -- 1,720,000 ["Aligarh"] = {container = "Uttar Pradesh"}, -- 1,660,000 ["Ranchi"] = {container = "Jharkhand"}, -- 1,638,000 ["Thrissur"] = {container = "Kerala"}, -- 1,578,000 ["Kollam"] = {container = "Kerala"}, -- 1,576,000 ["Jabalpur"] = {container = "Madhya Pradesh"}, -- 1,533,000 ["Dhanbad"] = {container = "Jharkhand"}, -- 1,503,000 ["Jodhpur"] = {container = "Rajasthan"}, -- 1,497,000 ["Aurangabad"] = {container = "Maharashtra"}, -- 1,490,000 ["Chhatrapati Sambhajinagar"] = {alias_of = "Aurangabad"}, ["Rajkot"] = {container = "Gujarat"}, -- 1,487,000 ["Gwalior"] = {container = "Madhya Pradesh"}, -- 1,477,000 ["Raipur"] = {container = "Chhattisgarh"}, -- 1,429,000 ["Gorakhpur"] = {container = "Uttar Pradesh"}, -- 1,410,000 ["Kannur"] = {container = "Kerala"}, -- 1,360,000 ["Bareilly"] = {container = "Uttar Pradesh"}, -- 1,355,000 ["Guwahati"] = {container = "Assam"}, -- 1,355,000 ["Moradabad"] = {container = "Uttar Pradesh"}, -- 1,345,000 ["Amritsar"] = {container = "Punjab"}, -- 1,313,000 ["Mysore"] = {container = "Karnataka"}, -- 1,296,000 ["Bhilai"] = {container = "Chhattisgarh"}, -- 1,293,000 ["Durg-Bhilainagar"] = {alias_of = "Bhilai"}, ["Durg-Bhilai"] = {alias_of = "Bhilai"}, ["Durg"] = {alias_of = "Bhilai"}, ["Bhilainagar"] = {alias_of = "Bhilai"}, ["Vijayawada"] = {container = "Andhra Pradesh"}, -- 1,232,000 ["Srinagar"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,212,000 ["Salem"] = {container = "Tamil Nadu", wp = "%l, %c"}, -- 1,189,000 ["Kota"] = {container = "Rajasthan"}, -- 1,172,000 ["Jalandhar"] = {container = "Punjab"}, -- 1,165,000 ["Saharanpur"] = {container = "Uttar Pradesh"}, -- 1,152,000 ["Dehradun"] = {container = "Uttarakhand"}, -- 1,136,000 ["Tiruchirappalli"] = {container = "Tamil Nadu"}, -- 1,131,000 ["Bhubaneswar"] = {container = "Odisha"}, -- 1,112,000 ["Jammu"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,103,000 ["Solapur"] = {container = "Maharashtra"}, -- 1,082,000 ["Hubli-Dharwad"] = {container = "Karnataka", wp = "Hubli–Dharwad"}, -- 1,062,000; wp with en dash ["Hubli"] = {alias_of = "Hubli-Dharwad"}, ["Dharwad"] = {alias_of = "Hubli-Dharwad"}, ["Puducherry"] = {container = {key = "Puducherry, India", placetype = "union territory"}}, -- 1,024,000 ["Pondicherry"] = {alias_of = "Puducherry", display = true}, -- satellite/secondary cities of metro area (none in citypopulation.de) ["Ghaziabad"] = {container = "Uttar Pradesh"}, -- 1,729,000 city, 2,358,525 urban agglomeration per 2011 census; 3,406,061 2025 estimate from official website; part of Delhi metro area ["Faridabad"] = {container = "Haryana"}, -- 1,414,050 city per 2011 census; part of Delhi metro area ["Thane"] = {container = "Maharashtra"}, -- 1,841,488 city per 2011 census; part of Mumbai metro area ["Kalyan-Dombivli"] = {container = "Maharashtra"}, -- 1,246,381 city per 2011 census; part of Mumbai metro area ["Kalyan-Dombivali"] = {alias_of = "Kalyan-Dombivli", display = true}, ["Kalyan"] = {alias_of = "Kalyan-Dombivli"}, ["Dombivli"] = {alias_of = "Kalyan-Dombivli"}, ["Dombivali"] = {alias_of = "Kalyan-Dombivli"}, ["Vasai-Virar"] = {container = "Maharashtra"}, -- 1,221,233 city per 2011 census; part of Mumbai metro area ["Vasai"] = {alias_of = "Vasai-Virar"}, ["Virar"] = {alias_of = "Vasai-Virar"}, ["Navi Mumbai"] = {container = "Maharashtra"}, -- 1,120,547 city per 2011 census; part of Mumbai metro area ["Howrah"] = {container = "West Bengal"}, -- 1,077,075 city ("metropolis"), 2,811,344 "metro" per 2011 census; part of Kolkata metro area ["Pimpri-Chinchwad"] = {container = "Maharashtra"}, -- 1,727,692 per 2011 census; part of Pune metro area ["Pimpri Chinchwad"] = {alias_of = "Pimpri-Chinchwad", display = true}, } export.india_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", India", "state"), default_placetype = "city", data = export.india_cities, } export.indonesia_cities = { -- cities where the city proper has more than 1,000,000 people as of mid-2023 estimate ["Jakarta"] = {container = "Special Capital Region of Jakarta", divs = { {type = "subdistricts", container_parent_type = false}, }}, ["Surabaya"] = {container = "East Java"}, ["Bekasi"] = {container = "West Java"}, -- part of Jakarta metro area ["Bandung"] = {container = "West Java"}, ["Medan"] = {container = "North Sumatra"}, ["Depok"] = {container = "West Java"}, -- part of Jakarta metro area ["Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area ["Palembang"] = {container = "South Sumatra"}, ["Semarang"] = {container = "Central Java"}, ["Makassar"] = {container = "South Sulawesi"}, ["South Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area ["Batam"] = {container = "Riau Islands"}, ["Bogor"] = {container = "West Java"}, -- part of Jakarta metro area ["Pekanbaru"] = {container = "Riau"}, ["Bandar Lampung"] = {container = "Lampung"}, -- other metro areas over 1,000,000 people ["Padang"] = {container = "West Sumatra"}, ["Samarinda"] = {container = "East Kalimantan"}, ["Malang"] = {container = "East Java"}, ["Yogyakarta"] = {container = "Special Region of Yogyakarta"}, ["Denpasar"] = {container = "Bali"}, ["Cirebon"] = {container = "West Java"}, ["Surakarta"] = {container = "Central Java"}, ["Banjarmasin"] = {container = "South Kalimantan"}, ["Tasikmalaya"] = {container = "West Java"}, } export.indonesia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Indonesia", "province"), default_placetype = "city", data = export.indonesia_cities, } export.italy_cities = { -- Data per [[w:List_of_metropolitan_areas_of_Italy]]. There are several lists given; the most recent one, used -- here, only gives estimates as of Jan 1, 2014. ["Milan"] = {container = "Lombardy"}, -- 6,623,798 ["Naples"] = {container = "Campania"}, -- 5,294,546 ["Rome"] = {container = "Lazio"}, -- 4,447,881 ["Turin"] = {container = "Piedmont"}, -- 1,865,284 ["Venice"] = {container = "Veneto"}, -- 1,645,900 ["Florence"] = {container = "Tuscany"}, -- 1,485,030 ["Bari"] = {container = "Apulia"}, -- 1,257,459 ["Palermo"] = {container = "Sicily"}, -- 1,183,084 -- include a few just below 1,000,000 metro area that may be above it by now (depending on the definition). ["Catania"] = {container = "Sicily"}, -- 988,240 ["Brescia"] = {container = "Lombardy"}, -- 924,090 ["Genoa"] = {container = "Liguria"}, -- 861,318 } export.italy_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Italy", "region"), default_placetype = "city", data = export.italy_cities, } export.japan_cities = { -- Population figures from [[w:List of cities in Japan]]. Metro areas from -- [[w:List of metropolitan areas in Japan]]. ["Tokyo"] = {keydesc = "[[Tokyo]] Metropolis, the [[capital city]] and a [[prefecture]] of [[Japan]] (which is a country in [[Asia]])", placetype = {"city", "prefecture"}, divs = { {type = "special wards", container_parent_type = false}, {type = "cities", prep = "in"}, }, }, ["Yokohama"] = {container = "Kanagawa"}, -- 3,697,894 ["Osaka"] = {container = "Osaka"}, -- 2,668,586 ["Nagoya"] = {container = "Aichi"}, -- 2,283,289 -- FIXME, Hokkaido is handled specially. ["Sapporo"] = {container = "Hokkaido"}, -- 1,918,096 ["Fukuoka"] = {container = "Fukuoka"}, -- 1,581,527 ["Kobe"] = {container = "Hyōgo"}, -- 1,530,847 ["Kyoto"] = {container = "Kyoto"}, -- 1,474,570 ["Kawasaki"] = {container = "Kanagawa", wp = "%l, Kanagawa"}, -- 1,373,630 ["Saitama"] = {container = "Saitama", wp = "%l (city)", commonscat = "%l, %c"}, -- 1,192,418 ["Hiroshima"] = {container = "Hiroshima"}, -- 1,163,806 ["Sendai"] = {container = "Miyagi"}, -- 1,029,552 -- the remaining cities are considered "central cities" in a 1,000,000+ metro area -- (sometimes there is more than one central city in the area). ["Kitakyushu"] = {container = "Fukuoka"}, -- 986,998 ["Chiba"] = {container = "Chiba", wp = "%l (city)", commonscat = "%l, %c"}, -- 938,695 ["Sakai"] = {container = "Osaka"}, -- 835,333 ["Niigata"] = {container = "Niigata", wp = "%l (city)", commonscat = "%l, %c"}, -- 813,053 ["Hamamatsu"] = {container = "Shizuoka"}, -- 811,431 ["Shizuoka"] = {container = "Shizuoka", wp = "%l (city)", commonscat = "%l, %c"}, -- 710,944 ["Sagamihara"] = {container = "Kanagawa"}, -- 706,342 ["Okayama"] = {container = "Okayama"}, -- 701,293 ["Kumamoto"] = {container = "Kumamoto"}, -- 670,348 ["Kagoshima"] = {container = "Kagoshima"}, -- 605,196 -- skipped 6 cities (Funabashi, Hachiōji, Kawaguchi, Himeji, Matsuyama, Higashiōsaka) -- with population in the range 509k - 587k because not central cities in any -- 1,000,000+ metro area. ["Utsunomiya"] = {container = "Tochigi"}, -- 507,833 } export.japan_cities_group = { default_container = "Japan", canonicalize_key_container = make_canonicalize_key_container(" Prefecture, Japan", "prefecture"), default_placetype = "city", data = export.japan_cities, } export.mexico_cities = { ["Mexico City"] = {}, -- its own state ["Monterrey"] = {container = "Nuevo León"}, ["Guadalajara"] = {container = "Jalisco"}, ["Puebla"] = {container = "Puebla", wp = "%l (city)"}, ["Toluca"] = {container = "State of Mexico"}, ["Tijuana"] = {container = "Baja California"}, -- Include the state in the category for León due to possible confusion with León, Spain. ["León, Guanajuato"] = {container = "Guanajuato", wp = "%l, %c"}, ["León"] = {alias_of = "León, Guanajuato"}, ["Leon"] = {alias_of = "León, Guanajuato", display = true}, ["Querétaro"] = {container = "Querétaro", wp = "%l (city)"}, ["Queretaro"] = {alias_of = "Querétaro", display = true}, ["Ciudad Juárez"] = {container = "Chihuahua"}, ["Juárez"] = {alias_of = "Ciudad Juárez"}, ["Juarez"] = {alias_of = "Ciudad Juárez", display = "Juárez"}, ["Torreón"] = {container = "Coahuila"}, ["Torreon"] = {alias_of = "Torreón", display = true}, -- Include the state in the category for Mérida due to possible confusion with Mérida, Spain or -- Mérida, Venezuela. ["Mérida, Yucatán"] = {container = "Yucatán", wp = "%l, %c"}, ["Mérida"] = {alias_of = "Mérida, Yucatán"}, ["Merida"] = {alias_of = "Mérida, Yucatán", display = true}, ["San Luis Potosí"] = {container = "San Luis Potosí", wp = "%l (city)"}, ["San Luis Potosi"] = {alias_of = "San Luis Potosí", display = true}, ["Aguascalientes"] = {container = "Aguascalientes", wp = "%l (city)"}, ["Mexicali"] = {container = "Baja California"}, } export.mexico_cities_group = { default_container = "Mexico", canonicalize_key_container = make_canonicalize_key_container(", Mexico", "state"), default_placetype = "city", data = export.mexico_cities, } export.nigeria_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. ["Lagos"] = {container = "Lagos"}, -- 21,300,000 (unindicated; population of low reliability) ["Kano"] = {container = "Kano", wp = "%l (city)"}, -- 5,350,000 (unindicated; population of low reliability) ["Ibadan"] = {container = "Oyo"}, -- 3,400,000 (unindicated; population of low reliability) ["Abuja"] = {container = {key = "Federal Capital Territory, Nigeria", placetype = "federal territory"}}, -- 3,050,000 (unindicated; population of low reliability) ["Port Harcourt"] = {container = "Rivers"}, -- 2,250,000 (unindicated; population of low reliability) ["Kaduna"] = {container = "Kaduna"}, -- 1,980,000 (unindicated; population of low reliability) ["Benin City"] = {container = "Edo"}, -- 1,790,000 (unindicated; population of low reliability) ["Aba"] = {container = "Abia", wp = "%l, Nigeria"}, -- 1,280,000 (unindicated; population of low reliability) ["Onitsha"] = {container = "Anambra"}, -- 1,230,000 (unindicated; population of low reliability) ["Maiduguri"] = {container = "Borno"}, -- 1,190,000 (unindicated; population of low reliability) ["Ilorin"] = {container = "Kwara"}, -- 1,160,000 (unindicated; population of low reliability) ["Sokoto"] = {container = "Sokoto", wp = "%l (city)"}, -- 1,140,000 (unindicated; population of low reliability) ["Jos"] = {container = "Plateau"}, -- 1,110,000 (unindicated; population of low reliability) ["Zaria"] = {container = "Kaduna"}, -- 1,050,000 (unindicated; population of low reliability) ["Enugu"] = {container = "Enugu", wp = "%l (city)"}, -- 1,010,000 (unindicated; population of low reliability) } export.nigeria_cities_group = { default_container = "Nigeria", canonicalize_key_container = make_canonicalize_key_container(" State, Nigeria", "state"), default_placetype = "city", data = export.nigeria_cities, } export.pakistan_cities = { -- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01. ["Karachi"] = {container = "Sindh"}, -- 21,000,000 (Consolidated Urban Area) ["Lahore"] = {container = "Punjab"}, -- 14,600,000 (Consolidated Urban Area) ["Rawalpindi"] = {container = "Punjab"}, -- 5,600,000 (Consolidated Urban Area; including Islamabad) ["Islamabad"] = {container = {key = "Islamabad Capital Territory, Pakistan", placetype = "federal territory"}}, -- 5,600,000 (Consolidated Urban Area; including Rawalpindi) ["Faisalabad"] = {container = "Punjab"}, -- 4,125,000 (Consolidated Urban Area) ["Gujranwala"] = {container = "Punjab"}, -- 3,450,000 (Consolidated Urban Area) -- there is also Hyderabad in India (very confusing) ["Hyderabad, Pakistan"] = {container = "Sindh", wp = "%l, %c"}, -- 2,475,000 (Consolidated Urban Area) ["Hyderabad"] = {alias_of = "Hyderabad, Pakistan"}, ["Multan"] = {container = "Punjab"}, -- 2,425,000 (Consolidated Urban Area) ["Peshawar"] = {container = "Khyber Pakhtunkhwa"}, -- 2,150,000 (Consolidated Urban Area) ["Quetta"] = {container = "Balochistan"}, -- 1,720,000 (Urban Area) ["Sargodha"] = {container = "Punjab"}, -- 1,080,000 (Urban Area) ["Sialkot"] = {container = "Punjab"}, -- 1,050,000 (Consolidated Urban Area) } export.pakistan_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Pakistan", "province"), default_placetype = "city", data = export.pakistan_cities, } export.philippines_cities = { -- Skipped some cities in Metro Manila (Taguig, Pasig) which don't have districts. -- Other cities outside Metro Manila skipped as not central city in their urban area. ["Quezon City"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, -- Don't display-canonicalize Foo to Foo City as it may make the display weird. ["Quezon"] = {alias_of = "Quezon City"}, ["Manila"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, ["Davao City"] = {container = "Davao del Sur"}, ["Davao"] = {alias_of = "Davao City"}, ["Caloocan"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, ["Zamboanga City"] = {container = "Zamboanga del Sur"}, ["Zamboanga"] = {alias_of = "Zamboanga City"}, ["Cebu City"] = {container = "Cebu"}, ["Cebu"] = {alias_of = "Cebu City"}, ["Antipolo"] = {container = "Rizal"}, ["Cagayan de Oro"] = {container = "Misamis Oriental"}, ["Dasmariñas"] = {container = "Cavite"}, ["Dasmarinas"] = {alias_of = "Dasmariñas", display = true}, ["General Santos"] = {container = "South Cotabato"}, ["San Jose del Monte"] = {container = "Bulacan"}, ["Bacolod"] = {container = "Negros Occidental"}, ["Calamba"] = {container = "Laguna", wp = "%l, %c"}, ["Angeles"] = {container = "Pampanga", wp = "Angeles City"}, ["Angeles City"] = {alias_of = "Angeles"}, ["Iloilo City"] = {container = "Iloilo"}, ["Iloilo"] = {alias_of = "Iloilo City"}, } export.philippines_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Philippines", "province"), default_placetype = "city", data = export.philippines_cities, } export.russia_cities = { -- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01. ["Moscow"] = {}, -- 18,800,000 (Agglomeration) ["Saint Petersburg"] = {}, -- 6,350,000 (Agglomeration) ["Novosibirsk"] = {container = "Novosibirsk Oblast"}, -- 1,820,000 (Agglomeration) ["Yekaterinburg"] = {container = "Sverdlovsk Oblast"}, -- 1,810,000 (Agglomeration) ["Nizhny Novgorod"] = {container = "Nizhny Novgorod Oblast"}, -- 1,620,000 (Agglomeration) ["Kazan"] = {container = {key = "Tatarstan, Russia", placetype = "republic"}}, -- 1,560,000 (Agglomeration) ["Chelyabinsk"] = {container = "Chelyabinsk Oblast"}, -- 1,430,000 (Agglomeration) ["Rostov-on-Don"] = {container = "Rostov Oblast"}, -- 1,390,000 (Agglomeration) ["Rostov-na-Donu"] = {alias_of = "Rostov-on-Don", display = true}, ["Krasnodar"] = {container = {key = "Krasnodar Krai, Russia", placetype = "krai"}}, -- 1,370,000 (Agglomeration) ["Samara"] = {container = "Samara Oblast"}, -- 1,350,000 (Agglomeration) ["Krasnoyarsk"] = {container = {key = "Krasnoyarsk Krai, Russia", placetype = "krai"}}, -- 1,270,000 (Agglomeration) ["Ufa"] = {container = {key = "Bashkortostan, Russia", placetype = "republic"}}, -- 1,230,000 (Agglomeration) ["Saratov"] = {container = "Saratov Oblast"}, -- 1,170,000 (Agglomeration) ["Omsk"] = {container = "Omsk Oblast"}, -- 1,140,000 (Agglomeration) ["Voronezh"] = {container = "Voronezh Oblast"}, -- 1,130,000 (Agglomeration) ["Volgograd"] = {container = "Volgograd Oblast"}, -- 1,080,000 (Agglomeration) ["Perm"] = {container = {key = "Perm Krai, Russia", placetype = "krai"}, wp = "%l, Russia"}, -- 1,070,000 (Agglomeration) } export.russia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Russia", "oblast"), default_container = "Russia", default_placetype = "city", data = export.russia_cities, } export.saudi_arabia_cities = { -- Figures for the first five from [[w:List of cities and towns in Saudi Arabia]] as of 2022. Unclear if these are -- metro, urban or city proper figures. ["Riyadh"] = {container = "Riyadh"}, -- 7,000,100; 7,700,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Jeddah"] = {container = "Mecca"}, -- 3,751,917; 3,950,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Jedda"] = {alias_of = "Jeddah", display = true}, ["Jiddah"] = {alias_of = "Jeddah", display = true}, ["Jidda"] = {alias_of = "Jeddah", display = true}, ["Dammam"] = {container = "Eastern"}, -- 2,638,166; 2,925,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Mecca"] = {container = "Mecca"}, -- 2,385,509; 2,675,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Makkah"] = {alias_of = "Mecca", display = true}, ["Medina"] = {container = "Medina"}, -- 1,477,023; 1,530,000 per citypopulation.de 2025-01-01 (City) ["Hofuf"] = {container = "Eastern"}, -- 1,060,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Khamis Mushait"] = {container = "Aseer"}, -- 1,030,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Khamis Mushayt"] = {alias_of = "Khamis Mushait", display = true}, } export.saudi_arabia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(" Province, Saudi Arabia", "province"), default_placetype = "city", data = export.saudi_arabia_cities, } export.south_korea_cities = { -- All cities listed are not associated with any county. ["Seoul"] = {}, ["Busan"] = {}, ["Incheon"] = {}, ["Daegu"] = {}, ["Daejeon"] = {}, ["Gwangju"] = {}, ["Ulsan"] = {}, } export.south_korea_cities_group = { default_container = "South Korea", canonicalize_key_container = make_canonicalize_key_container(" County, South Korea", "province"), default_placetype = "city", data = export.south_korea_cities, } export.spain_cities = { ["Madrid"] = {container = "Community of Madrid"}, ["Barcelona"] = {container = "Catalonia"}, ["Valencia"] = {container = "Valencia"}, ["Seville"] = {container = "Andalusia"}, ["Bilbao"] = {container = "Basque Country"}, } export.spain_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Spain", "autonomous community"), default_placetype = "city", data = export.spain_cities, } export.taiwan_cities = { ["New Taipei City"] = {}, ["New Taipei"] = {alias_of = "New Taipei City", display = true}, ["Taichung"] = {}, ["Kaohsiung"] = {wp = "%l, Taiwan"}, ["Taipei"] = {}, ["Taoyuan"] = {}, ["Tainan"] = {}, -- these last three are not special municipalities ["Chiayi"] = {placetype = "city"}, ["Hsinchu"] = {placetype = "city"}, ["Keelung"] = {placetype = "city"}, } export.taiwan_cities_group = { placename_to_key = false, -- don't add ", Taiwan" to make the key canonicalize_key_container = make_canonicalize_key_container(", Taiwan", "county"), default_container = "Taiwan", default_placetype = {"special municipality", "municipality", "city"}, default_is_city = true, default_divs = {"districts"}, data = export.taiwan_cities, } -- NOTE: It's OK to mix cities from different constituent countries; as long as the immediate container is correct, -- everything else will be figured out. export.united_kingdom_cities = { ["London"] = {container = "Greater London"}, ["Manchester"] = {container = "Greater Manchester"}, ["Birmingham"] = {container = "West Midlands"}, ["Liverpool"] = {container = "Merseyside"}, ["Glasgow"] = {container = {key = "City of Glasgow, Scotland", placetype = "council area"}}, ["Leeds"] = {container = "West Yorkshire"}, ["Newcastle upon Tyne"] = {container = "Tyne and Wear"}, ["Newcastle"] = {alias_of = "Newcastle upon Tyne"}, ["Bristol"] = {container = {key = "England", placetype = "constituent country"}}, ["Cardiff"] = {container = {key = "Wales", placetype = "constituent country"}}, ["Portsmouth"] = {container = "Hampshire"}, ["Edinburgh"] = {container = {key = "City of Edinburgh, Scotland", placetype = "council area"}}, -- under 1,000,000 people but principal areas of Wales; requested by [[User:Donnanz]] ["Swansea"] = {container = {key = "Wales", placetype = "constituent country"}}, ["Newport"] = {container = {key = "Wales", placetype = "constituent country"}, wp = "Newport, Wales"}, } export.united_kingdom_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", England", "county"), default_placetype = "city", data = export.united_kingdom_cities, } export.united_states_cities = { -- top 50 CSA's by population, with the top and sometimes 2nd or 3rd city listed ["New York City"] = {container = "New York", wp = "%l", divs = { {type = "boroughs", container_parent_type = false}, }}, -- Don't display-canonicalize as it may make the display weird (e.g. in the context New York, New York). ["New York"] = {alias_of = "New York City"}, ["Newark"] = {container = "New Jersey"}, ["Los Angeles"] = {container = "California", wp = "%l"}, ["Long Beach"] = {container = "California"}, ["Riverside"] = {container = "California"}, ["Chicago"] = {container = "Illinois", wp = "%l"}, ["Washington, D.C."] = {wp = "%l"}, ["Washington, DC"] = {alias_of = "Washington, D.C.", display = true}, ["Washington D.C."] = {alias_of = "Washington, D.C.", display = true}, ["Washington DC"] = {alias_of = "Washington, D.C.", display = true}, -- Don't display-canonicalize as it may make the display weird (e.g. if the holonym is followed by a District of -- Columbia holonym). ["Washington"] = {alias_of = "Washington, D.C."}, ["Baltimore"] = {container = "Maryland", wp = "%l"}, -- to avoid conflict with San Jose in Costa Rica ["San Jose, California"] = {container = "California"}, ["San Jose"] = {alias_of = "San Jose, California"}, ["San Francisco"] = {container = "California", wp = "%l"}, ["Oakland"] = {container = "California"}, ["Boston"] = {container = "Massachusetts", wp = "%l"}, ["Providence"] = {container = "Rhode Island"}, ["Dallas"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"}, ["Fort Worth"] = {container = "Texas"}, ["Philadelphia"] = {container = "Pennsylvania", wp = "%l"}, ["Houston"] = {container = "Texas", wp = "%l"}, ["Miami"] = {container = "Florida", wp = "%l", commonscat = "%l, %c"}, ["Atlanta"] = {container = "Georgia", wp = "%l"}, ["Detroit"] = {container = "Michigan", wp = "%l"}, ["Phoenix"] = {container = "Arizona", wp = "%l", commonscat = "%l, %c"}, ["Mesa"] = {container = "Arizona"}, ["Seattle"] = {container = "Washington", wp = "%l"}, ["Orlando"] = {container = "Florida"}, ["Minneapolis"] = {container = "Minnesota", wp = "%l"}, ["Cleveland"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"}, ["Denver"] = {container = "Colorado", wp = "%l", commonscat = "%l, %c"}, ["San Diego"] = {container = "California", wp = "%l", commonscat = "%l, %c"}, ["Portland"] = {container = "Oregon"}, ["Tampa"] = {container = "Florida"}, ["St. Louis"] = {container = "Missouri", wp = "%l", commonscat = "%l, %c"}, ["Saint Louis"] = {alias_of = "St. Louis", display = true}, ["Charlotte"] = {container = "North Carolina"}, ["Sacramento"] = {container = "California"}, ["Pittsburgh"] = {container = "Pennsylvania", wp = "%l"}, ["Salt Lake City"] = {container = "Utah", wp = "%l"}, ["San Antonio"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"}, ["Columbus"] = {container = "Ohio"}, ["Kansas City"] = {container = "Missouri", wp = "%l metropolitan area", commonscat = "%l, %c"}, ["Indianapolis"] = {container = "Indiana", wp = "%l"}, ["Las Vegas"] = {container = "Nevada", wp = "%l"}, ["Cincinnati"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"}, ["Austin"] = {container = "Texas"}, ["Milwaukee"] = {container = "Wisconsin", wp = "%l", commonscat = "%l, %c"}, ["Raleigh"] = {container = "North Carolina"}, ["Nashville"] = {container = "Tennessee"}, ["Virginia Beach"] = {container = "Virginia"}, ["Norfolk"] = {container = "Virginia"}, ["Greensboro"] = {container = "North Carolina"}, ["Winston-Salem"] = {container = "North Carolina"}, ["Jacksonville"] = {container = "Florida"}, ["New Orleans"] = {container = "Louisiana", wp = "%l"}, ["Louisville"] = {container = "Kentucky"}, ["Greenville"] = {container = "South Carolina"}, ["Hartford"] = {container = "Connecticut"}, ["Oklahoma City"] = {container = "Oklahoma", wp = "%l"}, ["Grand Rapids"] = {container = "Michigan"}, ["Memphis"] = {container = "Tennessee"}, ["Birmingham, Alabama"] = {container = "Alabama"}, ["Birmingham"] = {alias_of = "Birmingham, Alabama"}, ["Fresno"] = {container = "California"}, ["Richmond"] = {container = "Virginia"}, ["Harrisburg"] = {container = "Pennsylvania"}, -- any major city of top 50 MSA's that's missed by previous ["Buffalo"] = {container = "New York"}, -- any of the top 50 city by city population that's missed by previous ["El Paso"] = {container = "Texas"}, ["Albuquerque"] = {container = "New Mexico"}, ["Tucson"] = {container = "Arizona"}, ["Colorado Springs"] = {container = "Colorado"}, ["Omaha"] = {container = "Nebraska"}, ["Tulsa"] = {container = "Oklahoma"}, -- skip Arlington, Texas; too obscure and likely to be interpreted as Arlington, Virginia } export.united_states_cities_group = { default_container = "United States", canonicalize_key_container = make_canonicalize_key_container(", USA", "state"), default_placetype = "city", default_wp = "%l, %c", data = export.united_states_cities, } export.new_york_boroughs = { ["Bronx"] = {the = true, wp = "The Bronx"}, ["Brooklyn"] = {}, ["Manhattan"] = {}, ["Queens"] = {}, ["Staten Island"] = {}, } export.new_york_boroughs_group = { default_container = {key = "New York City", placetype = "city"}, default_placetype = "borough", default_is_city = true, data = export.new_york_boroughs, } export.vietnam_cities = { -- Figures from citypopulation.de (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated. ["Ho Chi Minh City"] = {}, -- 14,300,000 (Agglomeration; inclunding Bien Hoa) ["Saigon"] = {alias_of = "Ho Chi Minh City"}, ["Hanoi"] = {}, -- 7,350,000 (Agglomeration) ["Da Nang"] = {}, -- 1,500,000 (Agglomeration) ["Danang"] = {alias_of = "Da Nang", display = true}, ["Haiphong"] = {}, -- 1,450,000 (Agglomeration) ["Hai Phong"] = {alias_of = "Haiphong", display = true}, -- This is the one entry in this list that is not a province-level municipality; instead it's a "provincial city" -- meaning it is directly under its province as opposed to being contained in a district. ["Bien Hoa"] = {placetype = "city", container = "Đồng Nai", wp = "Biên Hòa"}, -- 1,272,235 (2022 city population per Wikipedia) ["Biên Hòa"] = {alias_of = "Bien Hoa", display = true}, ["Biên Hoà"] = {alias_of = "Bien Hoa", display = true}, -- These two not in citypopulation.de because the urban population may be slightly under 1,000,000, but they are -- both province-level municipalities and close to the 1,000,000 mark. ["Can Tho"] = {wp = "Cần Thơ"}, -- 1,456,000 municipality (2019 census), 994,704 urban (2022 General Statistics Office of Vietnam estimate); capital [[Ninh Kiều district]] ["Cần Thơ"] = {alias_of = "Can Tho", display = true}, ["Hue"] = {wp = "Huế"}, -- 1,257,000 municipality (2019 census), 840,000 urban (2022 General Statistics Office of Vietnam estimate); -- capital [[Thuận Hóa district]] ["Huế"] = {alias_of = "Hue", display = true}, } export.vietnam_cities_group = { placename_to_key = false, -- don't add ", Vietnam" to make the key default_container = "Vietnam", canonicalize_key_container = make_canonicalize_key_container(" Province, Vietnam", "province"), -- Most of the cities listed are province-level municipalities in addition, which contain a certain amount of -- rural territory surrounding the city, but not enough to separate the municipality from the city as distinct -- known locations. default_placetype = {"municipality", "city"}, default_is_city = true, -- There may not be enough districts to subcategorize like this. -- default_divs = "districts", data = export.vietnam_cities, } export.misc_cities = { ------------------ Africa ------------------- -- Sorted by country and then within the country, by decreasing population; figures from citypopulation.de -- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated; combined with data from -- [[w:List of urban areas in Africa by population]]. ["Algiers"] = {container = "Algeria"}, -- 4,325,000 (Consolidated Urban Area) ["Oran"] = {container = "Algeria"}, -- 1,640,000 (Consolidated Urban Area) ["Luanda"] = {container = "Angola"}, -- 9,650,000 (Urban Area) ["Benguela"] = {container = "Angola"}, -- 1,420,000 (Urban Area) ["Cotonou"] = {container = "Benin"}, -- 2,150,000 (Agglomeration) ["Ouagadougou"] = {container = "Burkina Faso"}, -- 3,425,000 (Agglomeration) ["Bobo-Dioulasso"] = {container = "Burkina Faso"}, -- 1,100,000 (Agglomeration) ["Bujumbura"] = {container = "Burundi"}, -- 1,143,202 (Urban Area 2023 per PopulationStat, cited in Wikipedia) ["Yaoundé"] = {container = "Cameroon"}, -- 3,975,000 (City) ["Yaounde"] = {alias_of = "Yaoundé", display = true}, ["Douala"] = {container = "Cameroon"}, -- 3,900,000 (City) ["Bangui"] = {container = "Central African Republic"}, -- 1,680,000 (Agglomeration) ["N'Djamena"] = {container = "Chad"}, -- 1,950,000 (City) ["Ndjamena"] = {alias_of = "N'Djamena", display = true}, ["Kinshasa"] = {container = "Democratic Republic of the Congo"}, -- 16,300,000 (City; population of low reliability) ["Lubumbashi"] = {container = "Democratic Republic of the Congo"}, -- 2,875,000 (City; population of low reliability) ["Mbuji-Mayi"] = {container = "Democratic Republic of the Congo"}, -- 2,500,000 (City; population of low reliability) ["Kananga"] = {container = "Democratic Republic of the Congo"}, -- 1,370,000 (City; population of low reliability) ["Kisangani"] = {container = "Democratic Republic of the Congo"}, -- 1,300,000 (City; population of low reliability) ["Bukavu"] = {container = "Democratic Republic of the Congo"}, -- 1,100,000 (City; population of low reliability) ["Goma"] = {container = "Democratic Republic of the Congo"}, -- 1,010,000 (City; population of low reliability) ["Tshikapa"] = {container = "Democratic Republic of the Congo"}, -- 1,020,468 (2023 Wikipedia [[w:List of cities with over one million inhabitants]] from populationstat.com; not in citypopulation.de) ["Cairo"] = {container = "Egypt"}, -- 22,800,000 (Agglomeration, including Giza and Subhra El Kheima) ["Alexandria"] = {container = "Egypt"}, -- 6,250,000 (Agglomeration) ["Giza"] = {container = "Egypt"}, -- 4,458,135 (2023 from citypopulation.de) ["Shubra El Kheima"] = {container = "Egypt"}, -- 1,240,239 (2021 from citypopulation.de) ["Asmara"] = {container = "Eritrea"}, -- 1,090,000 (City; population of low reliability) ["Asmera"] = {alias_of = "Asmara", display = true}, ["Addis Ababa"] = {container = "Ethiopia"}, -- 4,825,000 (Agglomeration) ["Banjul"] = {container = "Gambia"}, -- 1,170,000 (Agglomeration) ["Accra"] = {container = "Ghana"}, -- 6,800,000 (Agglomeration) ["Kumasi"] = {container = "Ghana"}, -- 2,900,000 (Agglomeration) ["Conakry"] = {container = "Guinea"}, -- 2,975,000 (Consolidated Urban Area) ["Abidjan"] = {container = "Ivory Coast"}, -- 7,050,000 (Agglomeration) ["Nairobi"] = {container = "Kenya"}, -- 6,900,000 (unindicated) ["Mombasa"] = {container = "Kenya"}, -- 1,370,000 (City) ["Monrovia"] = {container = "Liberia"}, -- 1,940,000 (Urban Area) ["Tripoli"] = {container = "Libya", wp = "%l, %c"}, -- 1,870,000 (unindicated) ["Antananarivo"] = {container = "Madagascar"}, -- 3,150,000 (Agglomeration) ["Lilongwe"] = {container = "Malawi"}, -- 1,210,000 (City) ["Bamako"] = {container = "Mali"}, -- 5,700,000 (Agglomeration) ["Nouakchott"] = {container = "Mauritania"}, -- 1,500,000 (City) ["Casablanca"] = {container = {key = "Casablanca-Settat, Morocco", placetype = "region"}}, -- 4,450,000 (Municipality (urban population)) ["Rabat"] = {container = {key = "Rabat-Sale-Kenitra, Morocco", placetype = "region"}}, -- 2,125,000 (Municipality (urban population)) ["Tangier"] = {container = {key = "Tangier-Tetouan-Al Hoceima, Morocco", placetype = "region"}}, -- 1,410,000 (Municipality (urban population)) ["Tanger"] = {alias_of = "Tangier", display = true}, ["Tangiers"] = {alias_of = "Tangier", display = true}, ["Fez"] = {container = {key = "Fez-Meknes, Morocco", placetype = "region"}, wp = "%l, Morocco"}, -- 1,310,000 (Municipality (urban population)) ["Fes"] = {alias_of = "Fez", display = true}, ["Fès"] = {alias_of = "Fez", display = true}, ["Agadir"] = {container = {key = "Souss-Massa, Morocco", placetype = "region"}}, -- 1,270,000 (Municipality (urban population)) ["Marrakesh"] = {container = {key = "Marrakesh-Safi, Morocco", placetype = "region"}}, -- 1,140,000 (Municipality (urban population)) ["Marrakech"] = {alias_of = "Marrakesh", display = true}, ["Maputo"] = {container = "Mozambique"}, -- 2,575,000 (Agglomeration) ["Niamey"] = {container = "Niger"}, -- 1,530,000 (City) ["Brazzaville"] = {container = "Republic of the Congo"}, -- 2,475,000 (Agglomeration) ["Pointe-Noire"] = {container = "Republic of the Congo"}, -- 1,480,000 (City) ["Kigali"] = {container = "Rwanda"}, -- 1,960,000 (Municipality (urban population)) ["Dakar"] = {container = "Senegal"}, -- 4,225,000 (Agglomeration) ["Touba"] = {container = "Senegal"}, -- 1,320,000 (Agglomeration) ["Freetown"] = {container = "Sierra Leone"}, -- 1,420,000 (Agglomeration) ["Mogadishu"] = {container = "Somalia"}, -- 2,250,000 (unindicated; population of low reliability) ["Johannesburg"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 14,800,000 (Consolidated Urban Area; including Pretoria, Soweto, etc.) ["Cape Town"] = {container = {key = "Western Cape, South Africa", placetype = "province"}}, -- 5,100,000 (Consolidated Urban Area) ["Durban"] = {container = {key = "KwaZulu-Natal, South Africa", placetype = "province"}}, -- 3,900,000 (Consolidated Urban Area) ["Pretoria"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 2,921,488 (2011 census) ["Port Elizabeth"] = {container = {key = "Eastern Cape, South Africa", placetype = "province"}, wp = "Gqeberha"}, -- 1,200,000 (Consolidated Urban Area) ["Gqeberha"] = {alias_of = "Port Elizabeth"}, -- official name; not a display alias ["Khartoum"] = {container = "Sudan"}, -- 7,200,000 (unindicated; population of low reliability) ["Dar es Salaam"] = {container = "Tanzania"}, -- 6,650,000 (Agglomeration) ["Mwanza"] = {container = "Tanzania"}, -- 1,340,000 (Agglomeration) ["Mwanza City"] = {alias_of = "Mwanza", display = true}, ["Arusha"] = {container = "Tanzania"}, -- 1,190,000 (Agglomeration) ["Zanzibar"] = {container = "Tanzania"}, -- 1,030,000 (Agglomeration) ["Lomé"] = {container = "Togo"}, -- 2,625,000 (unindicated) ["Lome"] = {alias_of = "Lomé", display = true}, ["Tunis"] = {container = "Tunisia"}, -- 2,725,000 (Municipality (urban population)) ["Sousse"] = {container = "Tunisia"}, -- 1,180,000 (Municipality (urban population)) ["Soussa"] = {alias_of = "Sousse", display = true}, ["Kampala"] = {container = "Uganda"}, -- 4,300,000 (unindicated) ["Lusaka"] = {container = "Zambia"}, -- 3,000,000 (Consolidated Urban Area) ["Harare"] = {container = "Zimbabwe"}, -- 2,675,000 (Agglomeration) ------------------ Asia ------------------- -- sorted by country and then within the country, by decreasing population; figures from citypopulation.de -- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated. ["Kabul"] = {container = "Afghanistan"}, -- 5,250,000 (Agglomeration) ["Baku"] = {container = "Azerbaijan"}, -- 3,725,000 (Administrative Area (urban population)) ["Manama"] = {container = "Bahrain"}, -- 1,560,000 (unindicated) ["Dhaka"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 23,100,000 (Agglomeration) ["Dacca"] = {alias_of = "Dhaka", display = true}, ["Chittagong"] = {container = {key = "Chittagong Division, Bangladesh", placetype = "division"}}, -- 5,050,000 (Agglomeration) ["Gazipur"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 2,674,697 (City per 2022; countied in citypopulation.de as part of Dhaka metro area) ["Khulna"] = {container = {key = "Khulna Division, Bangladesh", placetype = "division"}}, -- 1,210,000 (Agglomeration) ["Phnom Penh"] = {container = "Cambodia"}, -- 2,925,000 (Agglomeration) ["Tehran"] = {container = {key = "Tehran Province, Iran", placetype = "province"}}, -- 16,800,000 (Agglomeration) ["Teheran"] = {alias_of = "Tehran", display = true}, ["Mashhad"] = {container = {key = "Razavi Khorasan Province, Iran", placetype = "province"}}, -- 3,475,000 (Agglomeration) ["Mashad"] = {alias_of = "Mashhad", display = true}, ["Meshhed"] = {alias_of = "Mashhad", display = true}, ["Meshed"] = {alias_of = "Mashhad", display = true}, ["Isfahan"] = {container = {key = "Isfahan Province, Iran", placetype = "province"}}, -- 3,425,000 (Agglomeration) ["Esfahan"] = {alias_of = "Isfahan", display = true}, ["Tabriz"] = {container = {key = "East Azerbaijan Province, Iran", placetype = "province"}}, -- 1,970,000 (Agglomeration) ["Shiraz"] = {container = {key = "Fars Province, Iran", placetype = "province"}}, -- 1,950,000 (Agglomeration) ["Ahvaz"] = {container = {key = "Khuzestan Province, Iran", placetype = "province"}}, -- 1,550,000 (Agglomeration) ["Qom"] = {container = {key = "Qom Province, Iran", placetype = "province"}}, -- 1,450,000 (City) ["Kermanshah"] = {container = {key = "Kermanshah Province, Iran", placetype = "province"}}, -- 1,130,000 (City) ["Baghdad"] = {container = "Iraq"}, -- 7,800,000 (Administrative Area (urban population)) ["Basra"] = {container = "Iraq"}, -- 1,710,000 (Administrative Area (urban population)) ["Mosul"] = {container = "Iraq"}, -- 1,550,000 (Administrative Area (urban population)) ["Erbil"] = {container = "Iraq"}, -- 1,220,000 (Administrative Area (urban population)) ["Kirkuk"] = {container = "Iraq"}, -- 1,160,000 (Administrative Area (urban population)) ["Najaf"] = {container = "Iraq"}, -- 1,050,000 (Administrative Area (urban population)) ["Tel Aviv"] = {container = "Israel"}, -- 3,000,000 (Agglomeration) -- Jerusalem is not recognized internationally as part of either Israel or Palestine, but as a -- [[w:corpus separatum]], so put the container as "Asia" and list Israel and Palestine as additional parents for -- categorization purposes. ["Jerusalem"] = {container = {key = "Asia", placetype = "continent"}, addl_parents = {"Israel", "Palestine"}}, -- 1,080,000 (Agglomeration) ["Amman"] = {container = "Jordan"}, -- 6,150,000 (unindicated) ["Irbid"] = {container = "Jordan"}, -- 1,070,000 (unindicated) ["Almaty"] = {container = "Kazakhstan"}, -- 2,700,000 (Agglomeration) ["Alma-Ata"] = {alias_of = "Almaty"}, -- former name, sometimes still used; don't display-canonicalize ["Astana"] = {container = "Kazakhstan"}, -- 1,600,000 (Agglomeration) ["Shymkent"] = {container = "Kazakhstan"}, -- 1,370,000 (Agglomeration) ["Kuwait City"] = {container = "Kuwait"}, -- 5,050,000 (Agglomeration) ["Bishkek"] = {container = "Kyrgyzstan"}, -- 1,540,000 (Agglomeration) ["Beirut"] = {container = "Lebanon"}, -- 1,930,000 (unindicated; population of low reliability) -- Kuala Lumpur is a federal capital city, not in any state ["Kuala Lumpur"] = {container = "Malaysia"}, -- 9,550,000 (Agglomeration) -- there are various George Towns and Georgetowns ["George Town, Malaysia"] = {container = {key = "Penang, Malaysia", placetype = "state"}, wp = "%l, %c"}, -- 2,075,000 (Agglomeration) ["George Town"] = {alias_of = "George Town, Malaysia"}, ["Ulaanbaatar"] = {container = "Mongolia"}, -- 1,610,000 (City) ["Ulan Bator"] = {alias_of = "Ulaanbaatar", display = true}, ["Yangon"] = {container = "Myanmar"}, -- 5,650,000 (Municipality (urban population)) ["Rangoon"] = {alias_of = "Yangon", display = true}, ["Mandalay"] = {container = "Myanmar"}, -- 1,600,000 (Municipality (urban population)) ["Kathmandu"] = {container = "Nepal"}, -- 3,175,000 (Agglomeration) -- Pyongyang is a directly governed city, not in any province ["Pyongyang"] = {container = "North Korea"}, -- 3,025,000 (Administrative Area (urban population)) ["Muscat"] = {container = "Oman"}, -- 1,620,000 (Agglomeration) ["Gaza"] = {container = "Palestine", wp = "Gaza City"}, -- 2,275,000 (unindicated) ["Gaza City"] = {alias_of = "Gaza"}, ["Doha"] = {container = "Qatar"}, -- 2,650,000 (Agglomeration) ["Colombo"] = {container = "Sri Lanka"}, -- 4,975,000 (unindicated) ["Damascus"] = {container = "Syria"}, -- 3,975,000 (unindicated; population of low reliability) ["Aleppo"] = {container = "Syria"}, -- 1,980,000 (unindicated; population of low reliability) ["Dushanbe"] = {container = "Tajikistan"}, -- 1,270,000 (City) ["Bangkok"] = {container = "Thailand"}, -- 21,800,000 (Agglomeration) -- Chiang Mai not in citypopulation.de, but 1,198,000 urban population in 2021 per Wikipedia -- [[w:List_of_municipalities_in_Thailand#Largest_cities_by_urban_population]] ["Chiang Mai"] = {container = {key = "Chiang Mai Province, Thailand", placetype = "province"}}, ["Chonburi"] = {container = {key = "Chonburi Province, Thailand", placetype = "province"}}, -- 1,570,000 (Agglomeration; including Pattaya) -- metro area population stats from https://www.statista.com/statistics/255483/biggest-cities-in-turkey/ as of 2021; -- second source is citypopulation.de reference date 2025-01-01. ["Istanbul"] = {placetype = {"city", "province"}, divs = {"districts"}, container = "Turkey"}, -- 15.2 million; 16,000,000 (Agglomeration) ["İstanbul"] = {alias_of = "Istanbul", display = true}, ["Ankara"] = {container = {key = "Ankara Province, Turkey", placetype = "province"}}, -- 5.15 million; 5,200,000 (Agglomeration) ["Izmir"] = {container = {key = "İzmir Province, Turkey", placetype = "province"}, wp = "İzmir"}, -- 2.95 million; 3,025,000 (Agglomeration) ["İzmir"] = {alias_of = "Izmir", display = true}, ["Bursa"] = {container = {key = "Bursa Province, Turkey", placetype = "province"}}, -- 2.02 million; 2,200,000 (Agglomeration) ["Adana"] = {container = {key = "Adana Province, Turkey", placetype = "province"}}, -- 1.77 million; 1,780,000 (Agglomeration) ["Gaziantep"] = {container = {key = "Gaziantep Province, Turkey", placetype = "province"}}, -- 1.71 million; 1,750,000 (Agglomeration) ["Antalya"] = {container = {key = "Antalya Province, Turkey", placetype = "province"}}, -- 1.3 million; 1,400,000 (Agglomeration) ["Konya"] = {container = {key = "Konya Province, Turkey", placetype = "province"}}, -- 1.35 million; 1,390,000 (Agglomeration) ["Diyarbakır"] = {container = {key = "Diyarbakır Province, Turkey", placetype = "province"}}, -- 1.07 million; 1,100,000 (Agglomeration) -- Diyarbakır is more common per Ngrams and Google Scholar, but Diyarbakir is the Kurdish form, so we should not -- display-canonicalize to the Turkish form Diyarbakır. ["Diyarbakir"] = {alias_of = "Diyarbakır"}, ["Mersin"] = {container = {key = "Mersin Province, Turkey", placetype = "province"}}, -- 1.03 million; 1,060,000 (Agglomeration) ["Ashgabat"] = {container = "Turkmenistan"}, -- 1,150,000 (Agglomeration) ["Dubai"] = {container = "United Arab Emirates"}, -- 6,050,000 (Agglomeration; including Sharjah) ["Abu Dhabi"] = {container = "United Arab Emirates"}, -- 1,850,000 (City) ["Sharjah"] = {container = "United Arab Emirates"}, -- 1,800,000 (Metro area 2022-2023 per Wikipedia; separate from Dubai) ["Tashkent"] = {container = "Uzbekistan"}, -- 3,850,000 (unindicated) ["Sanaa"] = {container = "Yemen"}, -- 3,275,000 (City; population of low reliability) ["Sana'a"] = {alias_of = "Sanaa", display = true}, ["Aden"] = {container = "Yemen"}, -- 1,079,060 (?; 2023 estimate from World Population Review per Wikipedia) ------------------ Europe or Europe-like (Caucasus etc.) --------------------- ["Yerevan"] = {container = "Armenia"}, -- 1,520,000 (Agglomeration) ["Vienna"] = {container = "Austria"}, -- 2,375,000 (Agglomeration) ["Minsk"] = {container = "Belarus"}, -- 2,100,000 (unindicated) ["Brussels"] = {container = "Belgium"}, -- 2,800,000 (Consolidated Urban Area) ["Antwerp"] = {container = "Belgium"}, -- 1,270,000 (Consolidated Urban Area) ["Sofia"] = {container = "Bulgaria"}, -- 1,260,000 (Agglomeration) ["Zagreb"] = {container = "Croatia"}, ["Prague"] = {container = "Czech Republic"}, -- 1,470,000 (Agglomeration) ["Brno"] = {container = "Czech Republic"}, -- 729,405 (metro area per Wikipedia as of 2024-01-01 Czech Statistical Office) ["Olomouc"] = {container = "Czech Republic"}, -- 102,293 (city; included only because someone went crazy creating Olomouc-related terms) ["Copenhagen"] = {container = "Denmark"}, -- 1,800,000 (Consolidated Urban Area) ["Helsinki"] = {container = {key = "Uusimaa, Finland", placetype = "region"}}, -- 1,560,000 (Consolidated Urban Area) ["Tbilisi"] = {container = "Georgia"}, -- 1,430,000 (Agglomeration) ["Athens"] = {container = "Greece"}, ["Thessaloniki"] = {container = "Greece"}, ["Budapest"] = {container = "Hungary"}, -- FIXME, per Wikipedia "County Dublin" is now the "Dublin Region" ["Dublin"] = {container = {key = "County Dublin, Ireland", placetype = "county"}}, ["Riga"] = {container = "Latvia"}, ["Amsterdam"] = {container = {key = "North Holland, Netherlands", placetype = "province"}}, ["Rotterdam"] = {container = {key = "South Holland, Netherlands", placetype = "province"}}, ["The Hague"] = {container = {key = "South Holland, Netherlands", placetype = "province"}}, -- Christchurch (metro 546,600) and Wellington (metro 439,800) are too small to make it. ["Auckland"] = {container = {key = "Auckland, New Zealand", placetype = "region"}}, ["Oslo"] = {container = {key = "Oslo, Norway", placetype = "county"}}, ["Warsaw"] = {container = {key = "Masovian Voivodeship, Poland", placetype = "voivodeship"}}, ["Katowice"] = {container = {key = "Silesian Voivodeship, Poland", placetype = "voivodeship"}}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Krakow" without accent. ["Krakow"] = {container = {key = "Lesser Poland Voivodeship, Poland", placetype = "voivodeship"}, wp = "Kraków"}, ["Kraków"] = {alias_of = "Krakow", display = true}, ["Cracow"] = {alias_of = "Krakow", display = true}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirm "Gdańsk" and "Poznań" with accent. ["Gdańsk"] = {container = {key = "Pomeranian Voivodeship, Poland", placetype = "voivodeship"}}, ["Gdansk"] = {alias_of = "Gdańsk", display = true}, ["Poznań"] = {container = {key = "Greater Poland Voivodeship, Poland", placetype = "voivodeship"}}, ["Poznan"] = {alias_of = "Poznań", display = true}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Lodz" without accents. ["Lodz"] = {container = {key = "Lodz Voivodeship, Poland", placetype = "voivodeship"}, wp = "Łódź"}, ["Łódź"] = {alias_of = "Lodz", display = true}, ["Lisbon"] = {container = {key = "Lisbon District, Portugal", placetype = "district"}}, ["Porto"] = {container = {key = "Porto District, Portugal", placetype = "district"}}, ["Oporto"] = {alias_of = "Porto", display = true}, ["Bucharest"] = {container = "Romania"}, ["Belgrade"] = {container = "Serbia"}, ["Stockholm"] = {container = "Sweden"}, ["Zurich"] = {container = "Switzerland"}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Zurich" without umlaut. --- Even Wikipedia uses the form without umlaut. ["Zürich"] = {alias_of = "Zurich", display = true}, ["Kyiv"] = {container = "Ukraine"}, -- not in Kyiv Oblast -- Don't display-canonicalize Kiev -> Kyiv because in ancient contexts, Kiev is still more common. ["Kiev"] = {alias_of = "Kyiv"}, ["Kharkiv"] = {container = {key = "Kharkiv Oblast, Ukraine", placetype = "oblast"}}, ["Odessa"] = {container = {key = "Odesa Oblast, Ukraine", placetype = "oblast"}, wp = "Odesa"}, -- Don't display-canonicalize Odesa -> Odessa because it may be interpreted as a political statement. ["Odesa"] = {alias_of = "Odessa"}, ------------------ North America, South America --------------------- -- Primary figures from citypopulation.de retrieved on 2025-04-26 (reference date 2025-01-01); -- Wikipedia metropolitan figures from [[w:List of metropolitan areas in the Americas]] based on per-country data; -- Wikipedia city limits figures from [[w:List of largest cities in the Americas]]. ["Buenos Aires"] = {container = "Argentina"}, -- 16,800,000 (Consolidated Urban Area; 13,985,794 metropolitan area per Wikipedia) ["Córdoba, Argentina"] = {container = "Argentina", wp = "%l, %c"}, -- 1,810,000 (Consolidated Urban Area; 1,505,25 city limits per Wikipedia) -- to avoid confusion with Córdoba in Spain ["Córdoba"] = {alias_of = "Córdoba, Argentina"}, ["Cordoba"] = {alias_of = "Córdoba, Argentina", display = "Córdoba"}, ["Rosario"] = {container = "Argentina", wp = "%l, Santa Fe"}, -- 1,510,000 (Consolidated Urban Area; 1,348,725 metropolitan area per Wikipedia) ["Mendoza"] = {container = "Argentina", wp = "%l, %c"}, -- 1,180,000 (Consolidated Urban Area) ["San Miguel de Tucumán"] = {container = "Argentina"}, -- 1,110,000 (Consolidated Urban Area) ["Tucumán"] = {alias_of = "San Miguel de Tucumán"}, ["Tucuman"] = {alias_of = "San Miguel de Tucumán", display = "Tucumán"}, ["Santa Cruz de la Sierra"] = {container = "Bolivia"}, -- 1,960,000 (Consolidated Urban Area); 1,606,671 (city limits per Wikipedia) ["Santa Cruz"] = {alias_of = "Santa Cruz de la Sierra"}, ["La Paz"] = {container = "Bolivia"}, -- 1,870,000 (Consolidated Urban Area; composed of El Alto, now slightly larger, and La Paz) ["El Alto"] = {container = "Bolivia"}, ["Cochabamba"] = {container = "Bolivia"}, -- 1,280,000 (Consolidated Urban Area) ["Santiago"] = {container = "Chile"}, -- 8,400,000 (Consolidated Urban Area; 6,903,479 city limits? per Wikipedia) ["Valparaíso"] = {container = "Chile"}, -- 1,060,000 (Consolidated Urban Area) ["Valparaiso"] = {alias_of = "Valparaíso"}, -- 1,060,000 (Consolidated Urban Area) ["Bogotá"] = {container = "Colombia"}, -- 10,600,000 (Agglomeration; 12,772,828 metropolitan area per Wikipedia) ["Bogota"] = {alias_of = "Bogotá", display = true}, ["Medellín"] = {container = "Colombia"}, -- 4,350,000 (Agglomeration; 4,068,000 metropolitan area per Wikipedia) ["Medellin"] = {alias_of = "Medellín", display = true}, ["Cali"] = {container = "Colombia"}, -- 2,975,000 (Agglomeration; 2,837,000 metropolitan area per Wikipedia) ["Barranquilla"] = {container = "Colombia"}, -- 2,375,000 (Agglomeration; 1,341,160 city limits per Wikipedia) ["Bucaramanga"] = {container = "Colombia"}, -- 1,380,000 (Agglomeration) ["Cartagena, Colombia"] = {container = "Colombia", wp = "%l, %c"}, -- 1,250,000 (Agglomeration) -- to avoid confusion with Cartagena, Spain ["Cartagena"] = {alias_of = "Cartagena, Colombia"}, ["Cúcuta"] = {container = "Colombia"}, -- 1,130,000 (Agglomeration) ["Cucuta"] = {alias_of = "Cúcuta", display = true}, -- to avoid conflict with San Jose, California ["San José, Costa Rica"] = {container = "Costa Rica", wp = "%l, %c"}, -- 2,450,000 (Municipality (urban population); 3,160,000 metropolitan area per Wikipedia) ["San José"] = {alias_of = "San José, Costa Rica"}, ["San Jose"] = {alias_of = "San José, Costa Rica"}, -- display = "San José"; causes error due to San Jose alias for California city; FIXME ["Havana"] = {container = "Cuba"}, -- 2,150,000 (City; 2,137,847 city limits? per Wikipedia) ["Santo Domingo"] = {container = "Dominican Republic"}, -- 3,900,000 (Municipality (urban population); 4,274,651 ??? per Wikipedia) ["Guayaquil"] = {container = "Ecuador"}, -- 3,350,000 (Agglomeration; 3,092,000 metro area? per Wikipedia) ["Quito"] = {container = "Ecuador"}, -- 2,875,000 (Agglomeration; 2,889,703 metro area? per Wikipedia) ["San Salvador"] = {container = "El Salvador"}, -- 1,580,000 (Municipality (urban population)) ["Guatemala City"] = {container = "Guatemala"}, -- 3,375,000 (Municipality (urban population); 3,160,000 metro area? per Wikipedia) ["Port-au-Prince"] = {container = "Haiti"}, -- 3,050,000 (Agglomeration; population of low reliability; 2,915,000 metro area? per Wikipedia) ["San Pedro Sula"] = {container = "Honduras"}, -- 1,330,000 (Consolidated Urban Area) ["Tegucigalpa"] = {container = "Honduras"}, -- 1,220,000 (Urban Area) ["Managua"] = {container = "Nicaragua"}, -- 1,400,000 (Consolidated Urban Area) ["Panama City"] = {container = "Panama"}, -- 1,430,000 (Urban Area) ["Asunción"] = {container = "Paraguay"}, -- 2,350,000 (Municipality (urban population)) ["Lima"] = {container = "Peru"}, -- 12,000,000 (Agglomeration; 11,283,787 ??? per Wikipedia) ["Arequipa"] = {container = "Peru"}, -- 1,210,000 (Agglomeration) ["San Juan"] = {container = {key = "Puerto Rico", placetype = "commonwealth"}, wp = "%l, %c"}, -- 1,910,000 (Consolidated Urban Area) ["Montevideo"] = {container = "Uruguay"}, -- 1,810,000 (Agglomeration; 1,302,954 ??? per Wikipedia) ["Caracas"] = {container = "Venezuela"}, -- 3,850,000 (Consolidated Urban Area; 5,243,301 ??? per Wikipedia) ["Maracaibo"] = {container = "Venezuela"}, -- 2,825,000 (Consolidated Urban Area; 5,278,448 ??? per Wikipedia) -- to avoid confusion with Valencia (city and autonomous community of Spain) ["Valencia, Venezuela"] = {container = "Venezuela", wp = "%l, %c"}, -- 2,100,000 (Consolidated Urban Area) ["Valencia"] = {alias_of = "Valencia, Venezuela"}, ["Maracay"] = {container = "Venezuela"}, -- 1,480,000 (Consolidated Urban Area) ["Barquisimeto"] = {container = "Venezuela"}, -- 1,360,000 (Consolidated Urban Area) } export.misc_cities_group = { canonicalize_key_container = make_canonicalize_key_container(nil, "country"), default_placetype = "city", data = export.misc_cities, } --[==[ var: List of all known locations, in groups. The first group lists continents and continental regions, followed by three groups listing top-level locations: countries, "country-like entities" (de-facto/unrecognized/etc. countries and dependent territories) and former polities (countries, empires, etc.). After that come first-level subpolities (administrative divisions) of several, mostly large, countries, followed by groups of cities. China and the United Kingdom include second-level subpolities (in the case of China, only the largest ones as the full list runs in the hundreds). ]==] export.locations = { export.continents_group, export.countries_group, export.country_like_entities_group, export.former_countries_group, export.australia_group, export.austria_group, export.bangladesh_group, export.brazil_group, export.bulgaria_group, export.canada_group, export.china_group, export.china_prefecture_level_cities_group, export.china_prefecture_level_cities_group_2, export.egypt_group, export.finland_group, export.france_group, export.france_departments_group, export.germany_group, export.greece_group, export.india_group, export.indonesia_group, export.iran_group, export.ireland_group, export.italy_group, export.japan_group, export.laos_group, export.lebanon_group, export.malaysia_group, export.malta_group, export.mexico_group, export.moldova_group, export.morocco_group, export.netherlands_group, export.new_zealand_group, export.nigeria_group, export.north_korea_group, export.norway_group, export.pakistan_group, export.philippines_group, export.poland_group, export.portugal_group, export.romania_group, export.russia_group, export.saudi_arabia_group, export.south_africa_group, export.south_korea_group, export.spain_group, export.taiwan_group, export.thailand_group, export.turkey_group, export.ukraine_group, export.united_kingdom_group, export.united_states_group, export.england_group, export.northern_ireland_group, export.scotland_group, export.wales_group, export.vietnam_group, export.australia_cities_group, export.brazil_cities_group, export.canada_cities_group, export.france_cities_group, export.germany_cities_group, export.india_cities_group, export.indonesia_cities_group, export.italy_cities_group, export.japan_cities_group, export.mexico_cities_group, export.nigeria_cities_group, export.pakistan_cities_group, export.philippines_cities_group, export.russia_cities_group, export.saudi_arabia_cities_group, export.south_korea_cities_group, export.spain_cities_group, export.taiwan_cities_group, export.united_kingdom_cities_group, export.united_states_cities_group, export.new_york_boroughs_group, export.vietnam_cities_group, export.misc_cities_group, } return export hx3ae7zsnm43fuwsn1boleae1l0r4ju 2349932 2349928 2026-05-03T13:56:08Z Hiyuune 50834 2349932 Scribunto text/plain local export = {} export.force_cat = false -- set to true to force category generation even on non-mainspace pages local m_table = require("Module:table") local string_utilities_module = "Module:string utilities" local en_utilities_module = "Module:en-utilities" local insert = table.insert local concat = table.concat local dump = mw.dumpObject local unpack = unpack or table.unpack -- Lua 5.2 compatibility --[==[ intro: This module contains data on all known locations, along with some lower-level code to process them (higher-level known-location code is in [[Module:place/placetypes]]). You must load this module using require(), not using mw.loadData(). ===Location data=== '''NOTE: In order to understand the following better, first read the introductory documentation in [[Module:place]], especially the section `More about known locations`.''' The bulk of the code in this module (after some helper functions and placetype tables) describes the known locations and their relationships. Locations are grouped into ''location groups'' that share some common properties (examples are states of the United States and cities in Brazil). Each location group is associated with two tables, a ''data table'' that lists the locations and their individual properties, and a ''metadata table'' that lists group-level properties and defaults for the location properties. Each metadata table points to the associated data table (i.e. contains the data table as its `data` field), and the global `locations` variable holds a list of all group metadata tables. A given location is generally described by three values: (a) the group metadata table for the group the location is part of; (b) the location's canonical ''key'', which is the actual key in the group's data table and is globally unique across all locations; and (c) the location's ''spec'', which is the initialized object describing the properties of the location and comes from the value in the data table corresponding to the canonical key, transformed by the `initialize_spec()` function. These are typically named `group`, `key` and `spec`, respectively and in that order, and are found in the arguments to many functions. In a per-group data table, the keys are either ''canonical keys'' describing locations (which, as mentioned above, must be globally unique) or ''alias keys'' specifying an allowed alias for a given location. There may be multiple aliases for a given location and the alias keys only need to be unique within a particular group data table, not across all groups. It is also possible for the same string to serve as an alias key in one group and a canonical key in another group. (For example, `Newcastle` appears as an alias key in two different groups, referring to two different locations, canonically known as `Newcastle upon Tyne`, for the city in England, and `Newcastle, New South Wales`, for the city in New South Wales, Australia; and `Birmingham` appears both as a canonical key in the group of English cities and an alias key for canonical `Birmingham, Alabama` in the group of US cities.) The corresponding value objects are different for canonical and alias keys. Corresponding to canonical keys are ''location specs'', describing the properies of the location that cannot be derived from default properties of the group or global defaults. Corresponding to alias keys are ''alias specs'', which are highly restricted in the properties they can contain, and whose properties do not have per-group defaults, but only global defaults. The canonical key is always the same as the bare category corresponding to the location, which is one of the reasons it must be globally unique. For example, the country of Georgia uses the canonical key `Georgia` and corresponding bare category [[:Category:Georgia]], while the US state of Georgia uses the canonical key `Georgia, USA` and corresponding bare category [[:Category:Georgia, USA]]. The following conventions are followed in naming keys: * Countries, ''country-like entities'' (which are a mixture of unrecognized de-facto states and dependent territories) and ''former countries'' (which also includes other types of polities, such as the Roman Empire) use their unqualified placename as the canonical key. (See the documentation for [[Module:place]] for the distinction between keys and placenames, which is critical to understand when working with location data.) This also applies to constituent countries (such as England, Aruba and the Faroe Islands) and constituent parts of grouped dependent territories (such as the island of Saint Helena, which is administratively part of the British overseas territory of Saint Helena, Ascension and Tristan da Cunha). * Cities (including prefecture-level cities in China, which behave in most respects more like non-city administrative divisions) also normally use their unqualified placename as the canonical key, but if this causes name conflicts or ambiguities, they use a ''qualified key'' containing either the country name or immediate containing division (if different) following a comma, such as the case of `Newcastle, New South Wales` and `Birmingham, Alabama` above. Examples of name conflicts are the two cities just given; examples of ambiguities are the major cities of León and Mérida in Mexico and city of Cartagena, Colombia, which are given the respective canonical keys of `León, Guanajuato`, `Mérida, Yucatán` and `Cartagena, Colombia` to avoid ambiguity with the well-known respective cities of the same name in Spain, even though none of those cities are large enough to be included as known locations in this module. (The cutoff is generally having a metro area of at least 1,000,000 inhabitants, although there are exceptions.) * Administrative divisions of countries, other than the exceptions noted above for constituent countries and dependent territories, use a qualified key that contains the name of the country or constituent country in it, e.g. `Normandy, France` (a region), `Calvados, France` (a department in the region of Normandy), `Herefordshire, England` (a ceremonial county), `Northwest Territories, Canada` (a territory), `Central Finland, Finland` (a region), `Antalya Province, Turkey` (a province), `Cluj County, Romania` (a county), `County Cork, Ireland` (a county) and `New York, USA` (a state). As shown in these various examples, (a) first and second-level divisions are sometimes both included (as in France, the United Kingdom and China); (b) the qualifier after the comma is sometimes a constituent country (England) instead of a country (United Kingdom), and is sometimes abbreviated (USA rather than United States or Unites States of America); (c) the word `the` is not normally included in the key even if the location is normally preceded by `the` when following a preposition (there is a property in the location and alias specs to indicate this), except in a very few cases (most notably `The Hague`); (d) the country is included as a qualifier even if it creates an apparent redundancy, as with `Central Finland, Finland`; and (e) sometimes the placetype is included in the key, as with provinces in Turkey and several other countries; states in Nigeria; and counties in Ireland, Romania and several other countries. Whether the placetype is included, and whether it follows or precedes the placename, depends on per-country conventions. For example, provinces in Turkey, Iran and several other countries (likewise for states in Nigeria, oblasts in Russia, etc.) conventionally include the word "Province", "State", "Oblast" etc. in their name because they are normally named after the largest city in the division, which would otherwise lead to ambiguity; and counties in Ireland and Northern Ireland (and likewise County Durham, England) normally have the word "County" preceding rather than following them in their conventional name, so we follow this practice. The Wikipedia article naming scheme for a given administrative division is a strong clue as to how the division is normally referred to, and we usually follow this practice. (A minor exception is that the Wikipedia articles for provinces in Iran, Laos and Thailand include the word `province` with an initial lowercase letter while provinces elsewhere, e.g. North and South Korea, Saudi Arabia and Turkey, use uppercase `Province`; we normalize to uppercase `Province` in all cases.) As mentioned above, associated with canonical keys in the group data table are location specs, which are objects containing properties. It is important here to distinguish ''initialized specs'' from ''uninitialized specs''. Unininitialized specs are as directly specified in [[Module:place/locations]], containing only those properties that differ from the per-group or global defaults. Initialized specs result from calling `initialize_spec()` on an uninitialized spec (it is idempotent in that it will do nothing if encountering an already-initialized spec). This copies all group-level defaults that are not overridden in the location spec itself from the group-level metadata table into the location spec, so that in general, no more reference need be made to the group to fetch the correct value of a given location property. (The initialization process also does more transformations in a few cases, noted below.) Note that the default value of a given property is stored under a key in the group metadata table that is preceded by the string `default_`; for example, the default value corresponding to the `placetype` property of a given location is specified in the `default_placetype` key in the group metadata table. The following are the properties of the location spec. * `placetype`: String specifying the placetype of the location (e.g. "quốc gia", "state", province"). This can also be a table of such types; in this case, the first listed type is the canonical type that will be used in descriptions, but the location will be recognized (e.g. in a holonym, or for categorizing into the bare category) when tagged with any of the specified types. The placetype '''must''' be either specified on an individual location or defaulted at the group level, or an error occurs. * `container`: Either a string, a ''canonicalized container'' structure or a list of either type, specifying the immediate ''container'' (or containers) of the given location. A container is another location which this location is considered to be directly part of, either politically or (above the country level) geographically. Some locations belong to multiple immediate containers; this applies especially to transcontinental countries such as Russia and Turkey. Containers can themselves have containers, forming a tree (or more correctly, a [[w:directed acyclic graph]]) of locations. The list of immediate container(s), followed by the container(s) of the container(s), etc., is termed the ''container trail'', and some functions compute and return this trail as part of their operation. When a location spec is initialized, the given container spec is canonicalized into ''canonical container form'', which consists of a list of canonicalized container structures, each of which is of the form `{key = "``container_key``", placetype = "``container_placetype``"}`, where ``container_key`` is a canonical location key and ``container_placetype`` should be the listed placetype for the location, or the first listed placetype if there are multiple. (FIXME: Since the key uniquely identifies the container location, we should eliminate the placetype from the container structure.) The list of canonicalized container structures is stored into the `.containers` field of the location spec (this happens even if the container value is unset in its uninitialized spec form, causing it to default to the corresponding group-level value), and the `.container` field is set to {nil}. The canonicalization process is described in more detail below under [[#Container spec canonicalization]]. * `divs`: List of recognized political divisions; e.g. for the Netherlands, a specification of the form `divs = {"provinces", "municipalities"}` will allow categories such as [[:Category:de:Provinces of the Netherlands]] and [[:Category:pt:Municipalities of the Netherlands]] to be created. Any division that appears here must also be found in `placetype_data`, or an error occurs. The entities appearing in the `divs` list can be structures as well as just strings; this is explained more below under [[#Location divisions]]. Additional political divisions that apply to all locations in a group can be specified at the group level using the group-only property `addl_divs`, which has the same format as `divs`. This is intended to be used in the situation where some division types are shared among all locations in the group and others differ from location to location. An example where this is used is the United States, where `census-designated places` is specified in the group-level `addl_divs` so that all 50 states have census-designated places categorized as e.g. [[:Category:Census-designated places in Arizona, USA]], but `counties` and `county seats` are specified in the group-level `default_divs` because not all states have counties and county seats (Alaska has boroughs and borough seats and Louisiana has parishes and parish seats), and some states have additional divisions (New Jersey and Pennsylvania also have boroughs, while Colorado and Connecticut have municipalities). Note that under most circumstances (particularly, if `container_parent_type` is not set as a property associated with the division type), any division type specified on a sub-country-level location must also be specified on all containers up through the country. For example, since French departments specify `communes` and `municipalities` in `default_divs`, the same division types must be (and are) specified on French regions and for France itself. * `keydesc`: String directly specifying a description of the location, for use in generating the contents of category pages related to the location. In place of a string, a function of three arguments (`group`, `key`, `spec`, as is normal for locations) that computes the location description can also be given. This is used, for example, for Russian federal subjects; see `construct_russia_federal_subject_keydesc`. The special string `+++` contained in the keydesc is replaced with the default value of the location description, which specifies the location's placename, placetype, and the corresponding values for each container in the container trail, generally up through (but not beyond) the country level; see `no_include_container_in_desc` below. The location description is used to construct the full description of various categories, such as bare location categories, whose description generally reads `"{{(((}}langname}}} terms related to the people, culture, or territory of ``keydesc``."` where ``keydesc`` is the specified or auto-constructed location description. * `fulldesc`: String overriding the full description for the bare location category (but not for any other category). This is currently used only for the location `Earth`, at the very top of the tree (because the standard `people, culture or territory of ...` text doesn't make sense here), and for `Antarctica` (because it has no permanent inhabitants). FIXME: This should be renamed `bare_category_fulldesc`. * `addl_parents`: Specify additional parents for the bare location category, in addition to the category or categories generated based on the immediate container(s). For example, `Hawaii, USA` specifies `Polynesia` as an additional parent category; both `North Korea` and `South Korea` specify `Korea` (which is a specially handled location category) as an additional parent; and `Earth` specifies `nature` (not a location category, but still a topic category) as an additional parent (which in this case becomes the first parent, as `Earth` has no container). The only restriction on the categories in `addl_parents` is that they must be topic categories, because each language-specific version of the bare location category gets the corresponding language-specific versions of the categories in `addl_parents`. FIXME: This shoudl be renamed `bare_category_addl_parents`. * `wp`: Spec describing how to construct the Wikipedia article for the location. Each spec is either `true` (equivalent to `"%l"`, i.e. use the full location placename directly) or a string containing formatting directives, indicating how to construct the article name. The allowed formatting directives are `%l` (the full location placename), `%e` (the elliptical location placename) and `%c` (the full placename of the first immediate container). For example, the default value of `wp` for the group of United States cities is `"%l, %c"` since the city articles tend to be named e.g. `Austin, Texas` (but with many exceptions, specified using `wp` fields at the city level). Another example is Thai provinces, which specify a group-level default of `"%e province"` as the Wikipedia articles have lowercase `province` in their name but the Thai province keys specified in this module have uppercase `Province`. Here we have to use `%e` to get the placename without the word `Province` in it. The default is `true`, which simply uses the full location placename as the article name. Note that the Wikipedia article, along with the Wikipedia and Commons category pages, are shown in the upper right of bare category pages. * `wpcat`: Spec describing how to construct the Wikipedia category page for the location (i.e. the page listing articles and categories relevant to the location). The format is the same as with `wp`, and it defaults to the value of `wp`. It rarely needs to be specified because the category page and the article page almost always follow the same format. * `commonscat`: Spec describing how to construct the Commons category page for the location (i.e. the page on the MediaWiki Commons site listing articles and categories relevant to the location). It has the same format as `wp` and `wpcat` and defaults to `wpcat`, which is usually (but not always) correct. * `the`: Boolean specifying whether a location should be preceded by `the` when following a preposition, e.g. in category names such as [[:Category:Cities in the Northern Territory, Australia]] and in old-style place descriptions when the location occurs as the first holonym, such as the city [[Darwin]] described using {{tl|place|city|terr/Northern Territory|c/Australia}}. Note that the global default for this and all Boolean properties is {nil}, which amounts to the same as {false}. * `british_spelling`: Boolean indicating whether the location in question uses British spelling. Currently this only affects whether the spelling `neighborhoods` or `neighbourhoods` is used in categories such as [[:Category:Neighborhoods of New York City]] and [[:Category:Neighbourhoods of Sydney]]. This usually needs to be set only at the top level (i.e. country or country-like entity), because lower-level entities look up the container trail for any container that has `british_spelling = true` set, and if found, assume that British spelling applies. The general principle used in setting this is that all countries in Europe, all dependent territories of any such country, all former British colonies, and any dependent territories of these former colonies, are assumed to use British spelling, while all other countries and associated dependent territories are assumed to use American spelling. This can potentially be modified on a case-by-case basis. * `is_city`: Boolean indicating whether the location in question is a city. This is explicitly set to `true` for city-states (e.g. Monaco and Vatican City), dependent territories that are cities (e.g. Hong Kong, Macau, Bonaire, Gibraltar, etc.), certain city-level administrative divisions (such as `City of Belfast, Northern Ireland`) and (through a group-levell setting) New York boroughs. In addition, it is set to `true` in initialize_spec() whenever the group-level `default_placetype == "city"`, so that all cities get it set without explicitly needing to add a group-level setting for this. Note that the condition `default_placetype == "city"` intentionally excludes Chinese prefecture-level cities, which aren't really cities in that (for example) they don't directly contain neighborhoods, but do contain cities within them. This setting is used in various places: (a) to add cities, rivers, etc. to categories like [[:Category:Rivers in Osaka Prefecture, Japan]] and [[:Category:Cities in Wuhan]] for holonyms that are ''not'' cities; (b) to add districts, neighborhoods, and the like to categories like [[:Category:Neighborhoods of Brooklyn]] and [[:Category:Neighborhoods of Monaco]] for holoynms that ''are'' cities; (c) generally, to determine which "generic" placetypes (cities, rivers, neighborhoods, etc.) apply to the location. (Those that can occur with cities have a `generic_before_cities` setting in [[Module:place/placetypes]], and those that can occur with non-cities have a `generic_before_non_cities` setting.) * `is_former_place`: Boolean that should be set on former places such as the Soviet Union and the Roman Empire. For such places, categories such as [[:Category:fr:Rivers in the Soviet Union]] are neither generated nor recognized (more generally, no "generic" placetypes apply except for `places`), and category descriptions include the word `former`. * `overriding_bare_label_parents`: Document me! * `bare_category_parent_type`: Document me! * `no_container_cat`: Document me! * `no_container_parent`: Document me! * `no_generic_place_cat`: Document me! * `no_check_holonym_mismatch`: Document me! * `no_auto_augment_container`: Document me! * `no_include_container_in_desc`: Document me! ====Location divisions==== The `divs` field of a location describes the recognized political division types of that location. Specifying a given division type will cause places defined as being of the specified division type and with the location as a holonym will cause the place to be categorized as ` ``placetypes`` in/of ``location`` `; for example, specifying that the United States has `"states"` as a division will cause anything defined as {{tl|place|fr|state|c/US}} to be categorized under [[:Category:fr:States of the United States]]. Note that you do not have to explicitly specify division types for "generic" placetypes (those that have a `generic_before_non_cities` field if the location is not a city, or that have a `generic_before_cities` field if the location is a city); this includes things like cities, towns, villages, neighbo(u)rhoods and rivers. A given element in the `divs` list is usually a string naming a plural placetype; the placetype is automatically converted to the singular for recognizing the placetype in a {{tl|place}} spec, and irregular plurals such as `kibbutzim` are handled correctly as long as the placetype specifies an appropriate `plural` field (if the `plural` isn't explicitly given, the default singularization algorithm in [[Module:en-utilities]] is run, which gets most things correctly but has problems with `passes` and `fortresses`, which are singularized to `passe` and `fortresse`; for this reason, an explicit plural entry is added to terms in ''-ss''). In place of a string, an object can be given with the plural placetype in the `type` field; this allows additional properties to be specified along with the placetype. An example of this is the `divs` list for Canada: { ["Canada"] = {divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, "counties", "districts", "municipalities", "regional municipalities", "rural municipalities", "parishes", "Indian reserves", "census divisions", {type = "townships", prep = "in"}, }, ...}, } Here, both provinces and territories are set to categorize as `provinces and territories`, meaning that there is a single category [[:Category:Provinces and territories of Canada]] rather than separate categories for provinces and territories. Similar things are done for other countries that have more than one type of first-level administrative division (e.g. Australia, China, India and Pakistan). Note that any placetype listed under `cat_as` must exist in the table of placetypes in [[Module:place/placetypes]], and in fact there is a category-only entry there for `provinces and territories!` (the use of exclamation point following a plural placetype means that the placetype is present only for use in categories and won't be recognized as the placetype field in a {{tl|place}} description). In addition, townships are declared to use `in` rather than `of` as the preposition in the category; hence the category name will be [[:Category:Townships in Canada]] rather than [[:Category:Townships of Canada]]. (The use of `in` vs. `of` is somewhat related to whether a given placetype is an official administrative or statistical division of the location in question and comes in a defined list, in which case `of` should be used, or is more ill-defined, in which case `in` should be used; the default is `of`, and the use of `in` with `townships` is probably by analogy with the use of `in` with cities and towns.) Another more complex example is the divisions given for Quebec: { ["Quebec, Canada"] = {divs = { "counties", {type = "regional county municipalities", container_parent_type = "regional municipalities"}, {type = "regions", container_parent_type = false}, {type = "townships", prep = "in"}, {type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}}, {type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}}, {type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}}, }, ...}, } Here, `container_parent_type` controls the second parent category of the placetype/location category associated with the entry. In this case, for example, [[:Category:Counties of Quebec, Canada]] will have [[:Category:Counties of Canada]] as its second or ''container-level'' parent. However, this doesn't make sense for `regional county municipalities`, which exist only in Quebec (so the parent category [[:Category:Regional county municipalities of Canada]] would have only one subcategory); but they are similar to regional municipalities in British Columbia, Nova Scotia and Ontario, so the `container_parent_type = "regional municipalities"` spec causes the container-level parent of this category to be [[:Category:Regional municipalities of Canada]]. Likewise, `regions` as administrative divisions (as opposed to mere geographic regions) exist only in Quebec; they have no equivalent elsewhere, so we disable the container-level parent using `container_parent_type = false`. The specs for `parish municipalities`, `township municipalities` and `village municipalities` show both that multiple types can be specified under `cat_as` (here, for example, we categorize `parish municipalities` as both `parishes` and `municipalities`) and that these types can themselves have properties, just as for entries directly under `divs`. Specifically, `{type = "parishes", container_parent_type = "counties"}` means that any place defined as a parish municipality in Quebec will be categorized under both [[:Category:Parishes of Quebec, Canada]] and [[:Category:Municipalities of Quebec, Canada]], and that the former will have a container-level parent of [[:Category:Counties of Canada]] (rather than the default of [[:Category:Parishes of Canada]]). Similarly, `township municipalities` will be categorized under both [[:Category:Townships in Quebec, Canada]] (''not'' [[:Category:Townships of Quebec, Canada]]) and [[:Category:Municipalities of Quebec, Canada]]. ====Container spec canonicalization==== A fully canonicalized container spec for a given location consists of a list of ''canonicalized container objects'', each with a `key` and `placetype` field. The `key` field should name the canonical key of some other location at a higher level (e.g. French cities are contained in French departments, which are contained in French regions, which are contained in France, which is contained in Europe, which is contained in Eurasia, which is contained in the Earth). The `placetype` field should correspond to the first (canonical) placetype listed for the key in question. The process of initializing a locaion spec converts the container spec in `.container` into a canonicalized spec in `.containers` and removes the spec from `.container`. It works as follows: # If the `container` field is missing, and there is a group-level `default_container` field, it is used in its place. For example, none of the Brazilian states listed in `brazil_states` specifies a container, but the group specifies `default_container = "Brazil"`. # A single string or canonicalized container object is allowed and made into a one-element list. # If a list element is a string that did ''not'' come from `default_container`, and there is a group-level `canonicalize_key_container` field, it is assumed to be a one-argument function and is called on the string to get a canonicalized container object. # Any remaining strings are assumed to be countries and are used directly as the `key`, with `placetype` set to `"quốc gia"`. ====Alias keys==== Aliases can be provided for canonical keys using ''alias keys''. Alias keys have a very different location spec structure from canonical keys. This structure does not, in general, have defaults at the group level and is not initialized using `initialize_spec()`, but is used as-is. The following properties are recognized in an alias location spec: * `alias_of`: The canonical key of which this key is an alias. Required. * `the`: If true, this alias key is preceded by `the` following a preposition. Defaults to the group-level `default_the` but does not pay attention to the value of `the` for the corresponding canonical key. * `display`: This is a display alias, meaning that holonyms using the placename corresponding to this alias will be converted to the placename corresponding to the canonical key when formatting the holonym for display. (Otherwise, the aliasing applies only to categorization.) If the value is true, the display canonicalization is to the placename of the canonical key; otherwise, the value should be a key whose corresponding placename is used when display canonicalizing. * `placetype`: The placetype of the alias. Rarely needs to be specified as it defaults to the canonical key's placetype, and if that is unspecified, to the group-level default placetype. ====Location group metadata tables==== As mentioned above, associated with each location group is a ''metadata table'' listing group-level properties. The metadata table contains two types of keys: group-level defaults (named like the corresponding location-level keys but preceded by `default_`, e.g. `default_placetype` corresponding to the location-level `placetype` key) and group-only keys, which are mostly functions. The following are the possible group-only keys: * `data`: This points to the group data table for the group, as described above. * `key_to_placename`: This is a function of one argument to transform the location's key (whether canonical or alias) into the full and elliptical placenames. The difference between full and elliptical placenames is described in the documentation for [[Module:place]], but in essence, it applies for keys that include the placetype in them (e.g. `Phuket Province, Thailand` or `County Mayo, Ireland`), in which case the full placename includes the placetype and the elliptical placename does not. For keys that do not include the placetype in them (e.g. `Arizona, USA` or `Gloucestershire, England`), the full and elliptical placenames are identical. Note that neither the full nor the elliptical placename includes the container in it; hence, for `Phuket Province, Thailand`, the full placename is `Phuket Province` and the elliptical placename is just `Phuket`. (Note that the full vs. elliptical placename distinction is intended only for handling cases where the placetype follows or precedes the raw placename and there is no difference between the two in whether they are normally preceded by `the`. More complex situations, such as `State of Mexico` (which normally takes `the`) vs. just `Mexico` (which doesn't), or `Islamabad Capital Territory` vs. just `Islamabad`, should be handled instead by aliases.) The `key_to_placename` function takes one argument, the key, and returns two arguments, the full and elliptical placenames, respectively. If left undefined, the default is to chop off anything starting with a comma and return the result as both full and elliptical placename, and if specifically set to `false`, the key is used directly as both full and elliptical placename. If it needs to be defined, it is best to use the helper function `make_key_to_placename`, if possible (or `make_irish_type_key_to_placename` in the case of Ireland and Northern Ireland, where `County` precedes), rather than rolling your own. In addition, you should use the global `key_to_placename` function (which takes care of the default implementation and such) rather than directly calling the function in the `key_to_placename` field. * `placename_to_key`: This is approximately the inverse of `key_to_placename`, transforming a placename (which can be either in full or elliptical form) into the corresponding key. As with `key_to_placename`, if you need to define this (generally, when the full and elliptical placenames are different), prefer using `make_placename_to_key` (or `make_irish_type_placename_to_key` for Ireland and Northern Ireland) to rolling your own. In addition, similarly to `key_to_placename`, use the global `placename_to_key` function to convert placenames to keys rather than directly invoking the function in the `placename_to_key` field. If the field is set to `false`, the placename is used unchanged as the key. Otherwise, the default algorithm works as follows: *# If the group-level `default_placetype == "city"`, use the placename unchanged as the key. *# Otherwise, if the group-level `default_container` exists and is a string, append it to the placename after a comma + space and use the result as the key. *# Otherwise, if the group-level `default_container` is a canonical container object (an object with `key` and `placetype` fields), and the `placetype` field is either `country` or `constituent country`, append the `key` field to the placename after a comma + space and use the result as the key. *# Otherwise, use the placename unchanged as the key. * `canonicalize_key_container`: A function of one argument to convert the specified `container` field, when a string, to canonical form. Described in more detail above under [[#Container spec canonicalization]]. It is preferable to construct the function using `make_canonicalize_key_container`, if possible, rather than rolling your own. * `addl_divs`: Additional political divisions appended, for all locations in the group, to the list of divisions derived from the location-level `divs` or group-level `default_divs` fields to get the final list of divisions for the location. See [[#Location divisions]] for more details. ]==] ----------------------------------------------------------------------------------- -- Helper functions -- ----------------------------------------------------------------------------------- --[==[ Throw an error. `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the format string as if `fmt:format(...)` were called. In general, callers should use `internal_error` unless the error was due to bad user input rather than a logic error (which usually isn't the case in deep back-end code like this). ]==] function export.process_error(fmt, ...) local args = {...} for i = 1, select("#", ...) do args[i] = dump(args[i]) end return error(string.format(fmt, unpack(args))) end --[==[ Throw an internal error (a logic error that should never happen unless there is a bug in the code, as opposed to a user error triggered by bad input or a system error due to something like running out of memory or hitting a time limit). `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the format string as if `fmt:format(...)` were called. ]==] function export.internal_error(fmt, ...) export.process_error("Internal error: " .. fmt, ...) end local internal_error = export.internal_error -- Return whether `list_or_element` (a list of strings, or a single string) "contains" `item` (a string). If -- `list_or_element` is a list, this returns true if `item` is in the list; otherwise it returns true if `item` -- equals `list_or_element`. local function list_or_element_contains(list_or_element, item) if type(list_or_element) == "table" then return m_table.contains(list_or_element, item) and true or false end return list_or_element == item end --[==[ Call the location group's `key_to_placename` function if it exists (see the comment at the top of [[Module:place]] for the distinction between keys and placenames). Two values are returned, the full and elliptical placenames (e.g. full `"County Durham"` vs. elliptical `"Durham"`). If the group does not define `key_to_placename`, both full and elliptical placenames are computed by chopping off anything starting with a comma. ]==] function export.key_to_placename(group, key) if group.key_to_placename == false then return key, key end if group.key_to_placename then local full_placename, elliptical_placename = group.key_to_placename(key) if type(full_placename) ~= "string" then internal_error("Key %s returned a non-string full placename: %s", key, full_placename) end if type(elliptical_placename) ~= "string" then internal_error("Key %s returned a non-string elliptical placename: %s", key, elliptical_placename) end return full_placename, elliptical_placename end key = key:gsub(",.*", "") return key, key end --[==[ Call the location group's `placename_to_key` function if it exists (see the comment at the top of [[Module:place]] for the distinction between keys and placenames) and return the result. If `placename_to_key` exists with the value `false`, return the placename unchanged. If the group does not define `placename_to_key`, and it defines a `default_container` whose placetype is either `country` or `constituent country`, the container name is appended to the placename after a comma and a space. Otherwise the placename is returned unchanged. ]==] function export.placename_to_key(group, placename) if group.placename_to_key == false then return placename elseif group.placename_to_key then local key = group.placename_to_key(placename) if type(key) ~= "string" then internal_error("Placename %s returned a non-string key: %s", placename, key) end return key elseif group.default_placetype == "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 == "quốc gia" or defcon.placetype == "constituent country") then return placename .. ", " .. defcon.key else return placename end end end --[==[ Initialize the location spec `spec`, augmenting it with default values taken from `group` if the spec itself doesn't specify values for the properties. This sets `containers` to a canonicalized list of objects, each with `key` and `placetype` keys, describing the immediate containers of the location, and erases (sets to nil) the original non-canonicalized `container` field. (Most locations have only one immediate container but some, e.g. Russia, have more than one. Containers should be carefully distinguished from category parents. Generally the container is the first category parent, or the first ``n`` parents if there are ``n`` containers, but there may be additional category parents, which indicate some sort of relation between the category parent and the location but not necessarily one of containment.) This function is idempotent in that nothing happens if called more than once on the same spec. FIXME: Consider reimplementing this in a more standardly object-oriented way using metatables. ]==] function export.initialize_spec(group, key, spec) if spec.initialized then return end local container = spec.container local containers local container_from_default if not container then container = group.default_container container_from_default = true end if container then if type(container) == "string" or container.key then container = {container} end containers = {} for _, cont in ipairs(container) do if type(cont) == "string" then if group.canonicalize_key_container and not container_from_default then cont = group.canonicalize_key_container(cont) else cont = {key = cont, placetype = "quốc gia"} end end insert(containers, cont) end end spec.containers = containers spec.container = nil local function value_with_default(val, default_val) if val == nil then return default_val else return val end end local function set_or_default(prop) spec[prop] = value_with_default(spec[prop], group["default_" .. prop]) end set_or_default("placetype") if not spec.placetype then internal_error("No placetype found in key %s for spec %s or in group `default_placetype`", key, spec) end set_or_default("divs") spec.addl_divs = group.addl_divs for _, prop in ipairs { "keydesc", "fulldesc", "addl_parents", "overriding_bare_label_parents", "bare_category_parent_type", "wp", "wpcat", "commonscat", "british_spelling", "the", "no_container_cat", "no_container_parent", "no_generic_place_cat", "no_check_holonym_mismatch", "no_auto_augment_container", "no_include_container_in_desc", "is_city", "is_former_place", } do set_or_default(prop) end -- `default_placetype == "city"` is correct; if `default_placetype` has something else like `prefecture-level city` -- as the canonical placetype but also lists `city` (as Chinese prefecture-level cities do), don't mark as -- is_city. spec.is_city = value_with_default(spec.is_city, group.default_placetype == "city") spec.initialized = true end --[=[ Given a location group, key and possible placetypes that the placename must match, check if the key exists in the group with at least one of the group's key's placetypes matching one of the passed-in placetypes. If so, return two values: the group key (which potentially could differ from the passed-in key due to aliases) and the corresponding spec object, which (as with all functions that return spec objects) has been initialized using `initialize_spec()` (i.e. default property values have been copied from the group into the spec, if the spec doesn't itself specify a value for the property in question). `alias_resolution` controls how aliases are resolved. Normally, both display and category aliases are followed, and the returned key will reflect the canonical location key. However, if `alias_resolution` is {"none"}, no alias following happens. In that case, if the key specifies an alias, the spec for the alias rather than the spec for the canonical location is returned, and importantly, it is returned uninitialized, meaning that properties from the group are not copied into the spec. (If the key specifies a canonical location, its spec is returned initialized, as in the normal case where `alias_resolution` is unspecified.) The caller needs to check whether the returned spec is an alias by looking for an `alias_of` property. If `alias_resolution` is {"display"}, the behavior is the same as for {"none"} except that if the alias contains a setting `display = true`, the returned key will reflect the canonical location key, and if the alias contains a setting `display = ``string`` `, the returned key will reflect that string. This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or `find_canonical_key` (for known-canonical locations where the placetype isn't known). ]=] local function find_matching_key_in_group(group, placetypes, key, alias_resolution) if alias_resolution ~= nil and alias_resolution ~= "none" and alias_resolution ~= "display" and alias_resolution ~= "all" then internal_error("Bad value for 'alias_resolution': %s", alias_resolution) end local spec = group.data[key] if not spec then return nil end local function check_correct_placetype(placetype) if type(placetype) == "table" then for _, pt in ipairs(placetype) do if list_or_element_contains(placetypes, pt) then return true end end return false else return list_or_element_contains(placetypes, placetype) end end if spec.alias_of then local resolved_key = spec.alias_of local resolved_spec = group.data[resolved_key] if not resolved_spec then internal_error("Key %s is an alias of %s, which doesn't exist", key, resolved_key) elseif resolved_spec.alias_of then internal_error("Key %s is an alias of %s, which is itself an alias; indirect aliasing not allowed", key, resolved_key) end if alias_resolution == "none" or alias_resolution == "display" then -- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group. local placetype = spec.placetype or resolved_spec.placetype or group.default_placetype if not placetype then internal_error("No placetype found for key %s in any of spec %s, alias-resolved spec %s or in group " .. "`default_placetype`", key, spec, resolved_spec) end if not check_correct_placetype(placetype) then return nil end if alias_resolution == "display" then if spec.display == true then key = resolved_key elseif spec.display then key = spec.display end end return key, spec end key = resolved_key spec = resolved_spec end -- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group. local placetype = spec.placetype or group.default_placetype if not placetype then internal_error("No placetype found for key %s in spec %s or group `default_placetype`", key, spec) end if not check_correct_placetype(placetype) then return nil end export.initialize_spec(group, key, spec) return key, spec end --[=[ Given a location group, placename and possible placetypes that the placename must match, check if the placename exists in the group with at least one of the placetypes of the key in the group that corresponds to the placename matching one of the passed-in placetypes. If so, return two values: the key corrsponding to the passed-in placename and the corresponding spec object. This is similar to `find_matching_key_in_group()` but works with placenames rather than keys. `alias_resolution` is as in `find_matching_key_in_group()`. This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or `find_canonical_key` (for known-canonical locations where the placetype isn't known). ]=] local function find_matching_placename_in_group(group, placetypes, placename, alias_resolution) local key = export.placename_to_key(group, placename) return find_matching_key_in_group(group, placetypes, key, alias_resolution) end --[==[ If `key` is a canonical known location key (i.e. not an alias), return the corresponding group and initialized spec. If no such key exists, return {nil}. This throws an internal error if two locations with the same key are found. ]==] function export.find_canonical_key(key) local found_locations = {} for _, group in ipairs(export.locations) do local spec = group.data[key] if not spec then -- do nothing elseif spec.alias_of then mw.log(("Skipping alias '%s' of canonical '%s'"):format(key, spec.alias_of)) else insert(found_locations, {group, spec}) end end if not found_locations[1] then return nil elseif found_locations[2] then internal_error("Found multiple matching locations for canonical key %s: %s", key, found_locations) else local group, spec = unpack(found_locations[1]) export.initialize_spec(group, key, spec) return group, spec end end --[==[ Iterator that returns all locations matching a given description, where the description consists of either a placename or a key along with a list of possible placetypes. Usually there will be at most one such location. The iterator returns three values at each iteration: the location group, canonical key by which the location is known and the spec object describing the location. `data` contains the following possible fields: * `placetypes`: A list of possible placetypes, one of which must match one of the location's placetypes; or a string specifying a placetype, which must match one of the location's placetypes. This must be specified. * `placename`: The placename of the location. Either this or `key` must be specified. * `key`: The key of the location. Either this or `placename` must be specified. * `alias_resolution`: If specified, it behaves the same as for `find_matching_key_in_group`. The spec is normally initialized using `initialize_spec()` prior to it being returned (but may not be if `alias_resolution` is given and the specified key or placename is an alias; see the documentation for `find_matching_key_in_group`). ]==] function export.iterate_matching_location(data) local i = 0 local n = #export.locations return function() while true do i = i + 1 if i > n then break end local group = export.locations[i] local key, spec if data.placename then key, spec = find_matching_placename_in_group(group, data.placetypes, data.placename, data.alias_resolution) else if not data.key then internal_error("'.placename' or '.key' must be defined: %s", data) end key, spec = find_matching_key_in_group(group, data.placetypes, data.key, data.alias_resolution) end if key then return group, key, spec end end end end --[==[ Return the location matching a given description, where the description consists of either a placename or a key along with a list of possible placetypes. This is similar to `iterate_matching_location()` but throws an internal error if there is not exactly one location found; as such, it is for use with internally specified locations (such as the containers of known locations) rather than externally specified locations, which may not match a known location and in some cases may match multiple known locations. For finding an externally specified location, consider using `find_matching_holonym_location`, which returns {nil} rather than throwing an error if the location isn't found, but also (more importantly) checks to make sure there are no conflicting holonyms among the user-specified holonyms (e.g. {{tl|place|city|s/Delaware|c/USA|t=Newark}} will not match the known location `Newark` (in New Jersey, not Delaware). ]==] function export.get_matching_location(data) local all_found = {} for group, key, spec in export.iterate_matching_location(data) do insert(all_found, {group, key, spec}) end if not all_found[1] then internal_error("Couldn't find matching location for data %s", data) elseif all_found[2] then internal_error("Found multiple matching locations for data %s: %s", data, all_found) else return unpack(all_found[1]) end end --[==[ Successively iterate over a location's containers, and then the containers of those containers, etc. Keep in mind that locations may have multiple containers (e.g. Russia has both Europe and Asia as containers, and both Europe and Asia have Eurasia as their container). A given container will never be returned twice (e.g. in the case where a specific location A has locations B and C as containers, and B has C as its container, C will not be returned twice). An internal error happens if a container loop is detected. The return value is a list of location objects, each of which contains `group`, `key` and `spec` fields. ]==] function export.iterate_containers(group, key, spec) local keys_seen = {} keys_seen[key] = true local iterations = 0 local last_iteration_containers = {{group = group, key = key, spec = spec}} return function() iterations = iterations + 1 if iterations > 10 then internal_error("Probable loop in containers when processing key %s", key) end local next_iteration_containers = {} for _, location in ipairs(last_iteration_containers) do local containers = location.spec.containers if containers then for _, container in ipairs(containers) do local container_group, container_key, container_spec = export.get_matching_location { placetypes = container.placetype, key = container.key, } if not keys_seen[container_key] then insert(next_iteration_containers, { group = container_group, key = container_key, spec = container_spec }) keys_seen[container_key] = true end end end end if not next_iteration_containers[1] then return nil end last_iteration_containers = next_iteration_containers return next_iteration_containers end end --[==[ Given a placename, convert it into a link (two-part if `display_form` is given and differs from `placename`) and add `"the "` to the beginning if called for in `spec`. ]==] function export.construct_linked_placename(spec, placename, display_form) local linked_placename = display_form and placename ~= display_form and ("[[%s|%s]]"):format(placename, display_form) or ("[[%s]]"):format(placename) if spec.the then linked_placename = "the " .. linked_placename end return linked_placename end --[=[ This is typically used to define `key_to_placename`. It generates a function that chops off parts of a string (a location key), typically at the end, in order to get the full and elliptical versions of a placename. (See the documentation above for `key_to_placename` under "Location group tables" for the difference between full and elliptical placenames.) `container_patterns` is a Lua pattern or a list of possible patterns matching the container at the end of the key, which will be used to remove that container. If multiple patterns are specified, each one is tried until one matches. If `container_patterns` is omitted, this part of the process is skipped. The reulting string becomes the full placename. If `divtype_patterns` is specified, it is likewise either a Lua pattern or list of possible patterns to match and remove the political division affixed onto the end (or possibly the beginning) of the key in the keys of certain countries (such as South Korean and North Korean counties, which include the word "County" in the key). The resulting chopped string becomes the elliptical placename. If `divtype_patterns` is omitted, this part of the process is skipped and the full and elliptical placenames are the same. Typical usage is as follows: ``` key_to_placename = make_key_to_placename(", England$"), ``` or (when the political division is part of the key) ``` key_to_placename = make_key_to_placename(", South Korea$", " County$") ``` ]=] local function make_key_to_placename(container_patterns, divtype_patterns) if type(container_patterns) == "string" then container_patterns = {container_patterns} end if type(divtype_patterns) == "string" then divtype_patterns = {divtype_patterns} end return function(key) local full_placename = key if container_patterns then for _, container_pattern in ipairs(container_patterns) do local nsubs full_placename, nsubs = full_placename:gsub(container_pattern, "") if nsubs > 0 then break end end end local elliptical_placename = full_placename if divtype_patterns then for _, divtype_pattern in ipairs(divtype_patterns) do local nsubs elliptical_placename, nsubs = elliptical_placename:gsub(divtype_pattern, "") if nsubs > 0 then break end end end return full_placename, elliptical_placename end end --[=[ This is typically used to define `placename_to_key`. It generates a function that appends a string to the end of a given placename to get the key (see the definition of `placename_to_key` above in the documentation under "Location group tables"). Optional `divtype_suffix` is a raw string (which should not contain hyphens or other characters that have special meaning in Lua patterns) to be appended first to the placename; if already present at the end, it is not appended. `container_suffix` is then added in the same fashion if given. Typical usage is like this: ``` placename_to_key = make_placename_to_key(", England") ``` (which will convert e.g. `"Hampshire"` into `"Hampshire, England"`) or ``` placename_to_key = make_placename_to_key(", South Korea", " County") ``` (which will convert e.g. `"Gangwon"` or `"Gangwon County"` into `"Gangwon County, South Korea"`). ]=] local function make_placename_to_key(container_suffix, divtype_suffix) return function(placename) local key = placename if divtype_suffix then if not key:find(divtype_suffix .. "$") then key = key .. divtype_suffix end end if container_suffix then key = key .. container_suffix end return key end end --[=[ This is typically used to define `canonicalize_key_container`, which converts a container as specified in the location data into the canonical form containing both the full container key and its placetype. It generates a function to do the canonicalization of a given container. If the container is a string, `suffix` is appended onto the string (use {nil} or {""} if there is no suffix to append), and the placetype is set to `placetype`. Otherwise the container is left as-is. Typical usage is like this: ``` canonicalize_key_container = make_canonicalize_key_container(", Canada", "province") ``` which will convert e.g. `"Ontario"` into `{key = "Ontario, Canada", placetype = "province"}`. ]=] local function make_canonicalize_key_container(suffix, placetype) return function(container) if type(container) == "string" then return {key = container .. (suffix or ""), placetype = placetype} else return container end end end ----------------------------------------------------------------------------------- -- Top-level tables -- ----------------------------------------------------------------------------------- export.continents = { ["Trái Đất"] = {placetype = "planet", addl_parents = {"tự nhiên"}, fulldesc = "=là hành tinh thứ ba tính từ Mặt Trời", commonscat = "Earth"}, ["châu Phi"] = {placetype = "continent", commonscat = "Africa", container = {key = "Trái Đất", placetype = "planet"}}, ["châu Mỹ"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"}, keydesc = "[[America]], in the sense of [[North America]] and [[South America]] combined", wp = "Châu Mỹ"}, ["Americas"] = {alias_of = "châu Mỹ", the = true}, ["America"] = {alias_of = "châu Mỹ", the = true}, ["Bắc Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}}, ["Caribe"] = {the = true, placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}}, ["Trung Mỹ"] = {placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}}, ["Nam Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}}, ["châu Nam Cực"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}, fulldesc = "=lục địa nằm xa về phía nam và tây nhất trên Trái Đất, chứa Cực Nam địa lý và nằm trong Vùng Nam Cực của Nam Bán cầu"}, ["Đại lục Á Âu"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"}, keydesc = "một khu vực đất đai rộng lớn, bao gồm châu Âu và châu Á"}, ["châu Á"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}}, ["châu Âu"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}}, ["châu Đại Dương"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}}, ["Melanesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, ["Micronesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, ["Polynesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, } export.continents_group = { default_overriding_bare_label_parents = {}, -- container parents should be used default_divs = {{type = "countries", prep = "của"}}, -- It's enough to mention the first-level continent or continent group. It seems excessive to write e.g. -- "El Salvador, a country in Central America, a continental region in North America, a continent in America, ...". default_no_include_container_in_desc = true, default_no_container_cat = true, default_no_container_parent = true, default_no_auto_augment_container = true, default_no_generic_place_cat = true, -- French Guyana is in France but not in Europe, which should not be an issue, so don't check holonym mismatches at -- this level. We also run into problems with supercontinents, which have "continent" as the fallback and cause -- mismatches. default_no_check_holonym_mismatch = true, data = export.continents, } -- Countries: including those with partial recognition that are normally considered countries (e.g. Kosovo, Taiwan). export.countries = { ["Afghanistan"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Albania"] = {container = "Europe", divs = {"counties", "municipalities", "communes", {type = "administrative units", cat_as = "communes"}, }, british_spelling = true}, ["Algeria"] = {container = "Africa", divs = {"provinces", "communes", "districts", "municipalities"}}, ["Andorra"] = {container = "Europe", divs = {"parishes"}, british_spelling = true}, ["Angola"] = {container = "Africa", divs = {"provinces", "municipalities"}}, ["Antigua and Barbuda"] = {container = "Caribbean", divs = {"provinces"}, british_spelling = true}, ["Argentina"] = {container = "South America", divs = {"provinces", "departments", "municipalities"}}, ["Armenia"] = {container = {"Europe", "Asia"}, divs = {"provinces", "districts", "municipalities"}, british_spelling = true}, ["Republic of Armenia"] = {alias_of = "Armenia", the = true}, -- differs in "the" -- Both a country and continent ["Australia"] = {container = "Oceania", divs = { {type = "states", cat_as = "states and territories"}, {type = "territories", cat_as = "states and territories"}, {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and territories"}, {type = "ABBREVIATION_OF territories", cat_as = "abbreviations of states and territories"}, "local government areas", "dependent territories", }, british_spelling = true}, ["Austria"] = {container = "Europe", divs = {"states", "districts", "municipalities"}, british_spelling = true}, ["Azerbaijan"] = {container = {"Europe", "Asia"}, divs = {"districts", "municipalities"}, british_spelling = true}, ["Bahamas"] = {the = true, container = "Caribbean", divs = {"districts"}, british_spelling = true, wp = "The %l"}, ["Bahrain"] = {container = "Asia", divs = {"governorates"}}, ["Bangladesh"] = {container = "Asia", divs = {"divisions", "districts", "municipalities"}, british_spelling = true}, ["Barbados"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Belarus"] = {container = "Europe", divs = {"regions", "districts"}, british_spelling = true}, ["Belgium"] = {container = "Europe", divs = {"regions", "provinces", "municipalities"}, british_spelling = true}, ["Belize"] = {container = "Central America", divs = {"districts"}, british_spelling = true}, ["Benin"] = {container = "Africa", divs = {"departments", "communes"}}, ["Bhutan"] = {container = "Asia", divs = {"districts", "gewogs"}}, ["Bolivia"] = {container = "South America", divs = {"provinces", "departments", "municipalities"}}, ["Bosnia and Herzegovina"] = {container = "Europe", divs = {"entities", "cantons", "municipalities"}, british_spelling = true}, ["Bosnia and Hercegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia-Herzegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia-Hercegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Botswana"] = {container = "Africa", divs = {"districts", "subdistricts"}, british_spelling = true}, ["Brazil"] = {container = "South America", divs = { "states", "municipalities", "macroregions", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, }}, ["Brunei"] = {container = "Asia", divs = {"districts", "mukims"}, british_spelling = true}, ["Bulgaria"] = {container = "Europe", divs = {"provinces", "municipalities"}, british_spelling = true}, ["Burkina Faso"] = {container = "Africa", divs = {"regions", "departments", "provinces"}}, ["Burundi"] = {container = "Africa", divs = {"provinces", "communes"}}, ["Cambodia"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Cameroon"] = {container = "Africa", divs = {"regions", "departments"}}, ["Canada"] = {container = "North America", divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, {type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces and territories"}, {type = "ABBREVIATION_OF territories", cat_as = "abbreviations of provinces and territories"}, "counties", "districts", "municipalities", "regional municipalities", "rural municipalities", "parishes", -- Don't change the following to something more politically correct (e.g. "First Nations reserves") until/unless -- the Canadian government makes a similar switch (and note that as of Apr 18 2025, the Wikipedia article is -- still at [[w:Indian reserves]]). "Indian reserves", "census divisions", {type = "townships", prep = "in"}, }, british_spelling = true}, ["Cape Verde"] = {container = "Africa", divs = {"municipalities", "parishes"}}, ["Cabo Verde"] = {alias_of = "Cape Verde", display = true}, ["Central African Republic"] = {the = true, container = "Africa", divs = {"prefectures", "subprefectures"}}, ["CAR"] = {alias_of = "Central African Republic", display = true, the = true}, ["C.A.R"] = {alias_of = "Central African Republic", display = true, the = true}, ["Chad"] = {container = "Africa", divs = {"regions", "departments"}}, ["Chile"] = {container = "South America", divs = {"regions", "provinces", "communes"}}, ["China"] = {container = "Asia", divs = { {type = "provinces", cat_as = "provinces and autonomous regions"}, {type = "autonomous regions", cat_as = "provinces and autonomous regions"}, {type = "FORMER provinces", cat_as = "former provinces"}, "special administrative regions", "prefectures", {type = "FORMER prefectures", cat_as = "former prefectures"}, "prefecture-level cities", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, {type = "FORMER counties", cat_as = "former counties and county-level cities"}, {type = "FORMER county-level cities", cat_as = "former counties and county-level cities"}, -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities. "districts", {type = "FORMER districts", cat_as = "former districts"}, "subdistricts", "townships", "municipalities", {type = "direct-administered municipalities", cat_as = "municipalities"}, }}, ["People's Republic of China"] = {alias_of = "China", the = true}, -- differs in "the" ["Colombia"] = {container = "South America", divs = {"departments", "municipalities"}}, ["Comoros"] = {the = true, container = "Africa", divs = {"autonomous islands"}}, ["Costa Rica"] = {container = "Central America", divs = {"provinces", "cantons"}}, ["Croatia"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Cuba"] = {container = "Caribbean", divs = {"provinces", "municipalities"}}, ["Cyprus"] = {container = {"Europe", "Asia"}, divs = {"districts"}, british_spelling = true}, ["Czech Republic"] = {the = true, container = "Europe", divs = {"regions", "districts", "municipalities"}, british_spelling = true}, ["Czechia"] = {alias_of = "Czech Republic"}, -- differs in "the" ["Democratic Republic of the Congo"] = {the = true, container = "Africa", divs = {"provinces", "territories"}}, ["Congo"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["DRC"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["D.R.C"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["Denmark"] = {container = "Europe", divs = {"regions", "municipalities", "dependent territories"}, british_spelling = true, -- Wikipedia separates [[w:Denmark]] (constituent country) from [[w:Danish Realm]] (country) }, ["Djibouti"] = {container = "Africa", divs = {"regions", "districts"}}, ["Dominica"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Dominican Republic"] = {the = true, container = "Caribbean", divs = {"provinces", "municipalities"}, keydesc = "the [[Dominican Republic]], the country that shares the [[Caribbean]] island of [[Hispaniola]] with [[Haiti]]"}, ["East Timor"] = {container = "Asia", divs = {"municipalities"}, wp = "Timor-Leste"}, ["Timor-Leste"] = {alias_of = "East Timor", display = true}, ["Ecuador"] = {container = "South America", divs = {"provinces", "cantons"}}, ["Egypt"] = {container = "Africa", divs = {"governorates", "regions"}, british_spelling = true}, ["El Salvador"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Equatorial Guinea"] = {container = "Africa", divs = {"provinces"}}, ["Eritrea"] = {container = "Africa", divs = {"regions", "subregions"}}, ["Estonia"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Eswatini"] = {container = "Africa", british_spelling = true}, ["Swaziland"] = {alias_of = "Eswatini", display = true}, ["Ethiopia"] = {container = "Africa", divs = {"regions", "zones"}}, ["Federated States of Micronesia"] = {the = true, container = "Micronesia", divs = {"states"}}, ["Micronesia"] = {alias_of = "Federated States of Micronesia"}, ["Fiji"] = {container = "Melanesia", divs = {"divisions", "provinces"}, british_spelling = true}, ["Finland"] = {container = "Europe", divs = {"regions", "municipalities"}, british_spelling = true}, ["France"] = {container = "Europe", divs = {"regions", "cantons", "collectivities", "communes", {type = "municipalities", cat_as = "communes"}, "departments", {type = "prefectures", cat_as = {"prefectures", "departmental capitals"}}, {type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}}, "dependent territories", "territories", "provinces", }, british_spelling = true}, ["Gabon"] = {container = "Africa", divs = {"provinces", "departments"}}, ["Gambia"] = {the = true, container = "Africa", divs = {"divisions", "districts"}, british_spelling = true, wp = "The %l"}, ["Georgia"] = {container = {"Europe", "Asia"}, divs = {"regions", "districts"}, keydesc = "the country of [[Georgia]], in [[Eurasia]]", british_spelling = true, wp = "%l (country)"}, ["Germany"] = {container = "Europe", divs = { "states", -- Bavaria, Baden-Württemberg, Hesse and North Rhine-Westphalia have administrative regions as divisions, but -- there aren't really enough of them to categorize per state. "regions", "municipalities", "districts"}, british_spelling = true}, ["Ghana"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Greece"] = {container = "Europe", divs = {"regions", "regional units", "municipalities", {type = "peripheries", cat_as = {"regions"}}, }, british_spelling = true}, ["Grenada"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Guatemala"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Guinea"] = {container = "Africa", divs = {"regions", "prefectures"}}, ["Guinea-Bissau"] = {container = "Africa", divs = {"regions"}}, ["Guyana"] = {container = "South America", divs = {"regions"}, british_spelling = true}, ["Haiti"] = {container = "Caribbean", divs = {"departments", "arrondissements"}}, ["Honduras"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Hungary"] = {container = "Europe", divs = {"counties", "districts"}, british_spelling = true}, ["Iceland"] = {container = "Europe", divs = {"regions", "municipalities", "counties"}, british_spelling = true}, ["India"] = {container = "Asia", divs = { {type = "states", cat_as = "states and union territories"}, {type = "union territories", cat_as = "states and union territories"}, {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and union territories"}, {type = "ABBREVIATION_OF union territories", cat_as = "abbreviations of states and union territories"}, "divisions", "districts", "municipalities", }, british_spelling = true}, ["Indonesia"] = {container = "Asia", divs = {"regencies", "provinces", {type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces"}, }}, ["Iran"] = {container = "Asia", divs = {"provinces", "counties"}}, ["Iraq"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Ireland"] = {container = "Europe", addl_parents = {"British Isles"}, divs = {"counties", "districts", "provinces"}, british_spelling = true, wp = "Republic of %l"}, ["Republic of Ireland"] = {alias_of = "Ireland", the = true}, -- differs in "the" ["Israel"] = {container = "Asia", divs = {"districts"}}, ["Italy"] = {container = "Europe", divs = { "regions", "provinces", "metropolitan cities", "municipalities", {type = "autonomous regions", cat_as = "regions"}, }, british_spelling = true}, ["Ivory Coast"] = {container = "Africa", divs = {"districts", "regions"}}, -- We should really be using Ivory Coast (common name) but there are political ramifications to the use of -- Côte d'Ivoire so don't make it a display alias. ["Côte d'Ivoire"] = {alias_of = "Ivory Coast"}, ["Jamaica"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Japan"] = {container = "Asia", divs = {"prefectures", "subprefectures", "municipalities"}}, ["Jordan"] = {container = "Asia", divs = {"governorates"}}, ["Kazakhstan"] = {container = {"Asia", "Europe"}, divs = {"regions", "districts"}}, ["Kenya"] = {container = "Africa", divs = {"counties"}, british_spelling = true}, ["Kiribati"] = {container = "Micronesia", british_spelling = true}, ["Kosovo"] = {container = "Europe", divs = {"districts", "municipalities"}, british_spelling = true}, ["Kuwait"] = {container = "Asia", divs = {"governorates", "areas"}}, ["Kyrgyzstan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Laos"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Latvia"] = {container = "châu Âu", divs = {"municipalities"}, british_spelling = true}, ["Lebanon"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Lesotho"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Liberia"] = {container = "Africa", divs = {"counties", "districts"}}, ["Libya"] = {container = "Africa", divs = {"districts", "municipalities"}}, ["Liechtenstein"] = {container = "Europe", divs = {"municipalities"}, british_spelling = true}, ["Lithuania"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Luxembourg"] = {container = "Europe", divs = {"cantons", "districts"}, british_spelling = true}, ["Madagascar"] = {container = "Africa", divs = {"regions", "districts"}}, ["Malawi"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Malaysia"] = {container = "Asia", divs = {"states", "federal territories", "districts"}, british_spelling = true}, ["Maldives"] = {the = true, container = "Asia", divs = {"provinces", "administrative atolls"}, british_spelling = true}, ["Mali"] = {container = "Africa", divs = {"regions", "cercles"}}, ["Malta"] = {container = "Europe", divs = {"regions", "local councils"}, british_spelling = true}, ["Marshall Islands"] = {the = true, container = "Micronesia", divs = {"municipalities"}}, ["Mauritania"] = {container = "Africa", divs = {"regions", "departments"}}, ["Mauritius"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Mexico"] = {container = "North America", addl_parents = {"Central America"}, divs = { "states", "municipalities", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, }}, ["Moldova"] = {container = "Europe", divs = { {type = "districts", cat_as = "districts and autonomous territorial units"}, {type = "autonomous territorial units", cat_as = "districts and autonomous territorial units"}, "communes", "municipalities", }, british_spelling = true}, ["Monaco"] = {placetype = {"city-state", "quốc gia"}, container = "Europe", -- We want the first placetype to be 'city-state' so the description of Monaco says it's a city-state, but we -- want its parent to be "countries in Europe". bare_category_parent_type = {type = "countries", prep = "in"}, is_city = true, british_spelling = true}, ["Mongolia"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Montenegro"] = {container = "Europe", divs = {"municipalities"}}, ["Morocco"] = {container = "Africa", divs = {"regions", "prefectures", "provinces"}}, ["Mozambique"] = {container = "Africa", divs = {"provinces", "districts"}}, ["Myanmar"] = {container = "Asia", divs = {"regions", "states", "union territories", {type = "self-administered zones", cat_as = "self-administered areas"}, {type = "self-administered divisions", cat_as = "self-administered areas"}, "districts"}}, ["Burma"] = {alias_of = "Myanmar"}, -- not display-canonicalizing; has political connotations ["Namibia"] = {container = "Africa", divs = {"regions", "constituencies"}, british_spelling = true}, ["Nauru"] = {container = "Micronesia", divs = {"districts"}, british_spelling = true}, ["Nepal"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Netherlands"] = {the = true, placetype = {"quốc gia", "constituent country"}, container = "Europe", divs = {"provinces", "municipalities", {type = "FORMER municipalities", cat_as = "former municipalities"}, "dependent territories", "constituent countries"}, british_spelling = true, -- Wikipedia separates [[w:Netherlands]] (constituent country) from [[w:Kingdom of the Netherlands]] -- (country) }, ["New Zealand"] = {container = "Polynesia", divs = { "regions", "dependent territories", "territorial authorities", {type = "districts", cat_as = "territorial authorities"}, }, british_spelling = true}, ["Nicaragua"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Niger"] = {container = "Africa", divs = {"regions", "departments"}}, ["Nigeria"] = {container = "Africa", divs = { "states", -- Categorize the Federal Capital Territory as a state because there's only one of it; we could categorize -- everything under 'states and territories' but that seems a bit pointless. {type = "federal territories", cat_as = "states"}, "local government areas", }, british_spelling = true}, ["North Korea"] = {container = "Asia", addl_parents = {"Korea"}, divs = {"provinces", "counties"}}, ["North Macedonia"] = {container = "Europe", divs = {"regions", "municipalities"}, british_spelling = true}, ["Macedonia"] = {alias_of = "North Macedonia", display = true}, ["Republic of North Macedonia"] = {alias_of = "North Macedonia", the = true}, -- differs in "the" ["Republic of Macedonia"] = {alias_of = "North Macedonia", the = true}, -- differs in "the" ["Norway"] = {container = "Europe", divs = {"counties", "municipalities", "dependent territories", "districts", "unincorporated areas"}, british_spelling = true}, ["Oman"] = {container = "Asia", divs = {"governorates", "provinces"}}, ["Pakistan"] = {container = "Asia", divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "administrative territories", cat_as = "provinces and territories"}, {type = "federal territories", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, "divisions", "districts", }, british_spelling = true}, ["Palau"] = {container = "Micronesia", divs = {"states"}}, ["Palestine"] = {container = "Asia", divs = {"governorates"}}, ["State of Palestine"] = {alias_of = "Palestine", the = true}, -- differs in "the" ["Panama"] = {container = "Central America", divs = {"provinces", "districts"}}, ["Papua New Guinea"] = {container = "Melanesia", divs = {"provinces", "districts"}, british_spelling = true}, ["Paraguay"] = {container = "South America", divs = {"departments", "districts"}}, ["Peru"] = {container = "South America", divs = {"regions", "provinces", "districts"}}, ["Philippines"] = {the = true, container = "Asia", divs = {"regions", "provinces", "districts", "municipalities", "barangays"}}, ["Poland"] = {divs = {"voivodeships", "counties", {type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}}, }, container = "Europe", british_spelling = true}, ["Portugal"] = {container = "Europe", divs = { {type = "autonomous regions", cat_as = "districts and autonomous regions"}, {type = "districts", cat_as = "districts and autonomous regions"}, "provinces", "municipalities"}, british_spelling = true}, ["Qatar"] = {container = "Asia", divs = {"municipalities", "zones"}}, ["Republic of the Congo"] = {the = true, container = "Africa", divs = {"departments", "districts"}}, ["Congo Republic"] = {alias_of = "Republic of the Congo", display = true, the = true}, ["Romania"] = {container = "Europe", divs = { "regions", "counties", "communes", {type = "ABBREVIATION_OF counties", cat_as = "abbreviations of counties"}, }, british_spelling = true}, ["Russia"] = {container = {"Europe", "Asia"}, divs = { "federal subjects", "republics", "autonomous oblasts", "autonomous okrugs", "oblasts", "krais", "federal cities", "districts", "federal districts"}, british_spelling = true}, ["Rwanda"] = {container = "Africa", divs = {"provinces", "districts"}}, ["Saint Kitts and Nevis"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Saint Kitts"] = {alias_of = "Saint Kitts and Nevis", display = true}, ["Saint Lucia"] = {container = "Caribbean", divs = {"districts"}, british_spelling = true}, ["Saint Vincent and the Grenadines"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Saint Vincent"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["SVG"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["S.V.G"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["Samoa"] = {container = "Polynesia", divs = {"districts"}, british_spelling = true}, ["San Marino"] = {container = "Europe", divs = {"municipalities"}, british_spelling = true}, ["São Tomé and Príncipe"] = {container = "Africa", divs = {"districts"}}, ["São Tome and Principe"] = {alias_of = "São Tomé and Príncipe", display = true}, ["São Tomé"] = {alias_of = "São Tomé and Príncipe", display = true}, ["São Tome"] = {alias_of = "São Tomé and Príncipe", display = true}, ["Saudi Arabia"] = {container = "Asia", divs = {"provinces", "governorates"}}, ["Senegal"] = {container = "Africa", divs = {"regions", "departments"}}, ["Serbia"] = {container = "Europe", divs = {"districts", "municipalities", "autonomous provinces"}}, ["Seychelles"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Sierra Leone"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, ["Singapore"] = {container = "Asia", divs = {"districts", "regions"}, british_spelling = true}, ["Slovakia"] = {container = "Europe", divs = {"regions", "districts"}, british_spelling = true}, ["Slovenia"] = {container = "Europe", divs = {"statistical regions", "municipalities"}, british_spelling = true}, -- Note: While the official name does not include "the" at the beginning, -- it sounds strange in English to leave it out and it's commonly included. ["Solomon Islands"] = {the = true, container = "Melanesia", divs = {"provinces"}, british_spelling = true}, ["Somalia"] = {container = "Africa", divs = {"regions", "districts"}}, ["South Africa"] = {container = "Africa", divs = { "provinces", "districts", {type = "district municipalities", cat_as = "districts"}, {type = "metropolitan municipalities", cat_as = "districts"}, "municipalities", }, british_spelling = true}, ["South Korea"] = {container = "Asia", addl_parents = {"Korea"}, divs = {"provinces", "counties", "districts"}}, ["South Sudan"] = {container = "Africa", divs = {"regions", "states", "counties"}, british_spelling = true}, ["Spain"] = {container = "Europe", divs = {"autonomous communities", "provinces", "municipalities", "comarcas", "autonomous cities"}, british_spelling = true}, ["Sri Lanka"] = {container = "Asia", divs = {"provinces", "districts"}, british_spelling = true}, ["Sudan"] = {container = "Africa", divs = {"states", "districts"}, british_spelling = true}, ["Suriname"] = {container = "South America", divs = {"districts"}}, ["Sweden"] = {container = "Europe", divs = {"provinces", "counties", "municipalities"}, british_spelling = true}, ["Switzerland"] = {container = "Europe", divs = {"cantons", "municipalities", "districts"}, british_spelling = true}, ["Syria"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Taiwan"] = {container = "Asia", divs = {"counties", "districts", "townships", "special municipalities"}}, ["Republic of China"] = {alias_of = "Taiwan", the = true}, -- differs in "the", different political connotations ["Tajikistan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Tanzania"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Thailand"] = {container = "Asia", divs = {"provinces", "districts", "subdistricts"}}, ["Togo"] = {container = "Africa", divs = {"provinces", "prefectures"}}, ["Tonga"] = {container = "Polynesia", divs = {"divisions"}, british_spelling = true}, ["Trinidad and Tobago"] = {container = "Caribbean", divs = {"regions", "municipalities"}, british_spelling = true}, ["Tunisia"] = {container = "Africa", divs = {"governorates", "delegations"}}, ["Turkey"] = {container = {"Europe", "Asia"}, divs = {"provinces", "districts"}}, -- Foreign names generally get display-canonicalized. ["Türkiye"] = {alias_of = "Turkey", display = true}, ["Turkmenistan"] = {container = "Asia", divs = { -- The 5 regions are often also called provinces "regions", {type = "provinces", cat_as = "regions"}, "districts"}, }, ["Tuvalu"] = {container = "Polynesia", divs = {"atolls"}, british_spelling = true}, ["Uganda"] = {container = "Africa", divs = {"districts", "counties"}, british_spelling = true}, ["Ukraine"] = {container = "Europe", divs = { {type = "oblasts", cat_as = "oblasts and autonomous republics"}, {type = "autonomous republics", cat_as = "oblasts and autonomous republics"}, "raions", "hromadas", }, british_spelling = true}, ["United Arab Emirates"] = {the = true, container = "Asia", divs = {"emirates"}}, -- Abbreviations get display-canonicalized. ["UAE"] = {alias_of = "United Arab Emirates", display = true, the = true}, ["U.A.E."] = {alias_of = "United Arab Emirates", display = true, the = true}, ["United Kingdom"] = {the = true, container = "Europe", addl_parents = {"British Isles"}, divs = {"constituent countries", "counties", "districts", "boroughs", "territories", "dependent territories", "traditional counties"}, keydesc = "the [[United Kingdom]] of Great Britain and Northern Ireland", british_spelling = true}, -- Abbreviations get display-canonicalized. ["UK"] = {alias_of = "United Kingdom", display = true, the = true}, ["U.K."] = {alias_of = "United Kingdom", display = true, the = true}, ["United States"] = {the = true, container = "North America", divs = {"counties", "county seats", "states", "territories", "dependent territories", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, {type = "DEROGATORY_NAME_FOR states", cat_as = "derogatory names for states"}, {type = "NICKNAME_FOR states", cat_as = "nicknames for states"}, {type = "OFFICIAL_NICKNAME_FOR states", cat_as = "official nicknames for states"}, {type = "boroughs", prep = "in"}, -- exist in Pennsylvania and New Jersey "municipalities", -- these exist politically at least in Colorado and Connecticut {type = "census-designated places", prep = "in"}, {type = "unincorporated communities", prep = "in"}, -- Don't change the following to something more politically correct until/unless the US government makes a -- similar switch (and note that as of Apr 18 2025, the Wikipedia article is still at -- [[w:Indian reservations]]). "Indian reservations", }}, -- Abbreviations and long forms (when possible) get display-canonicalized. ["US"] = {alias_of = "United States", display = true, the = true}, ["U.S."] = {alias_of = "United States", display = true, the = true}, ["USA"] = {alias_of = "United States", display = true, the = true}, ["U.S.A."] = {alias_of = "United States", display = true, the = true}, ["United States of America"] = {alias_of = "United States", display = true, the = true}, ["Uruguay"] = {container = "South America", divs = {"departments", "municipalities"}}, ["Uzbekistan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Vanuatu"] = {container = "Melanesia", divs = {"provinces"}, british_spelling = true}, ["Vatican City"] = {placetype = {"city-state", "quốc gia"}, container = "Europe", -- First placetype should be 'city-state' for to shown up in its description, -- Its parent should still be "countries in Europe". bare_category_parent_type = {type = "countries", prep = "in"}, addl_parents = {"Rome"}, is_city = true, british_spelling = true}, ["Vatican"] = {alias_of = "Vatican City", the = true}, -- differs in "the" ["Venezuela"] = {container = "South America", divs = {"states", "municipalities"}}, ["Vietnam"] = {container = "Asia", divs = {"provinces", "districts", "municipalities"}}, ["Western Sahara"] = {placetype = {"territory", "quốc gia"}, container = "Africa", bare_category_parent_type = {type = "countries", prep = "in"}, }, -- Not display-canonicalizable both due to differences in 'the' and the sovereignty dispute over Western Sahara ["Sahrawi Arab Democratic Republic"] = {alias_of = "Western Sahara", the = true}, ["SADR"] = {alias_of = "Sahrawi Arab Democratic Republic", display = true, the = true}, ["Yemen"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Zambia"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, ["Zimbabwe"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, } local function canonicalize_continent_container(key) if type(key) ~= "string" then return key end if export.continents[key] then return {key = key, placetype = export.continents[key].placetype} end internal_error("Unrecognized key %s in `canonicalize_continent_like`", key) end export.countries_group = { canonicalize_key_container = canonicalize_continent_container, default_overriding_bare_label_parents = {"+++", "countries"}, default_placetype = "quốc gia", default_no_container_cat = true, default_no_container_parent = true, -- No need to augment country holonyms with continents; not needed for disambiguation. default_no_auto_augment_container = true, data = export.countries, } -- Country-like entities: typically overseas territories or de-facto independent countries, which in both cases -- are not internationally recognized as sovereign nations but which we treat similarly to countries. export.country_like_entities = { -- British Overseas Territory ["Akrotiri and Dhekelia"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Cyprus", "Europe", "Asia"}, british_spelling = true, }, -- Åland: Listed as a region of Finland. Wikipedia lists this under "dependent territories" in -- [[w:List of sovereign states and dependent territories by continent]]. -- unincorporated territory of the United States ["American Samoa"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Polynesia"}, }, -- British Overseas Territory ["Anguilla"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Georgia ["Abkhazia"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Georgia", "Europe", "Asia"}, divs = {"districts"}, keydesc = "the de-facto independent state of [[Abkhazia]], internationally recognized as part of the country of [[Georgia]]", british_spelling = true, }, -- Australian external territory ["Ashmore and Cartier Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, }, -- constituent country of the Netherlands ["Aruba"] = { placetype = {"constituent country", "quốc gia"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- British Overseas Territory ["Bermuda"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"North America"}, british_spelling = true, }, -- special municipality of the Netherlands ["Bonaire"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- British Overseas Territory ["British Indian Ocean Territory"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Asia"}, british_spelling = true, }, -- British Overseas Territory ["British Virgin Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- Norwegian dependent territory ["Bouvet Island"] = { placetype = {"dependent territory", "territory"}, container = "Norway", addl_parents = {"Africa"}, british_spelling = true, }, -- British Overseas Territory ["Cayman Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- Australian external territory ["Christmas Island"] = { placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, british_spelling = true, }, -- Sui generis French "state private property" per Wikipedia; classify as overseas territory like the -- French Southern and Antarctic Lands. ["Clipperton Island"] = { placetype = {"overseas territory", "territory"}, container = "France", addl_parents = {"North America"}, }, -- Australian external territory; also called the Keeling Islands or (officially) the Cocos (Keeling) Islands ["Cocos Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, wp = "Cocos (Keeling) Islands", british_spelling = true, }, ["Cocos (Keeling) Islands"] = {alias_of = "Cocos Islands", display = true, the = true}, ["Keeling Islands"] = {alias_of = "Cocos Islands", display = true, the = true}, -- self-governing but in free association with New Zealand ["Cook Islands"] = { the = true, placetype = {"quốc gia"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- constituent country of the Netherlands ["Curaçao"] = { placetype = {"constituent country", "quốc gia"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- special territory of Chile ["Easter Island"] = { placetype = {"special territory", "territory"}, container = "Chile", addl_parents = {"Polynesia"}, }, -- British Overseas Territory ["Falkland Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"South America"}, british_spelling = true, }, -- autonomous territory of Denmark ["Faroe Islands"] = { the = true, placetype = {"autonomous territory", "territory"}, container = "Denmark", addl_parents = {"Europe"}, british_spelling = true, }, -- overseas department and region of France ["French Guiana"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"South America"}, british_spelling = true, }, -- overseas collectivity of France ["French Polynesia"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Polynesia"}, british_spelling = true, }, -- French overseas territory ["French Southern and Antarctic Lands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "France", addl_parents = {"Africa"}, }, -- British Overseas Territory ["Gibraltar"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Europe"}, is_city = true, british_spelling = true, }, -- autonomous territory of Denmark ["Greenland"] = { placetype = {"autonomous territory", "territory"}, container = "Denmark", addl_parents = {"North America"}, divs = {"municipalities"}, british_spelling = true, }, -- overseas department and region of France ["Guadeloupe"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", addl_parents = {"Caribbean"}, divs = {"communes"}, british_spelling = true, }, -- unincorporated territory of the United States ["Guam"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- self-governing British Crown dependency; technically called the Bailiwick of Guernsey ["Guernsey"] = { placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, wp = "Bailiwick of %l", }, ["Bailiwick of Guernsey"] = {alias_of = "Guernsey", the = true}, -- Australian external territory ["Heard Island and McDonald Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Africa"}, }, -- special administrative region of China ["Hong Kong"] = { placetype = {"special administrative region", "city"}, container = "China", is_city = true, british_spelling = true, }, -- self-governing British Crown dependency ["Isle of Man"] = { the = true, placetype = {"crown dependency", "dependency", "dependent territory", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, }, -- Norwegian unincorporated area ["Jan Mayen"] = { placetype = {"unincorporated area", "dependent territory", "territory", "island"}, container = "Norway", addl_parents = {"Europe"}, british_spelling = true, }, -- self-governing British Crown dependency; technically called the Bailiwick of Jersey ["Jersey"] = { placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, }, ["Bailiwick of Jersey"] = {alias_of = "Jersey", the = true}, -- special administrative region of China ["Macau"] = { placetype = {"special administrative region", "city"}, container = "China", is_city = true, british_spelling = true, }, -- overseas department and region of France ["Martinique"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Caribbean"}, british_spelling = true, }, -- overseas department and region of France ["Mayotte"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Africa"}, british_spelling = true, }, -- British Overseas Territory ["Montserrat"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- special collectivity of France ["New Caledonia"] = { placetype = {"special collectivity", "collectivity"}, container = "France", addl_parents = {"Melanesia"}, british_spelling = true, }, -- dependent territory of New Zealand ["New Zealand Subantarctic Islands"] = { the = true, placetype = {"dependent territory", "territory"}, container = "New Zealand", addl_parents = {"Antarctica"}, british_spelling = true, }, -- self-governing but in free association with New Zealand ["Niue"] = { placetype = {"quốc gia"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- Australian external territory ["Norfolk Island"] = { placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Polynesia"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Cyprus ["Northern Cyprus"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Cyprus", "Turkey", "Europe", "Asia"}, divs = {"districts"}, keydesc = "the de-facto independent state of [[Northern Cyprus]], internationally recognized as part of the country of [[Cyprus]]", british_spelling = true, }, -- commonwealth, unincorporated territory of the United States ["Northern Mariana Islands"] = { the = true, placetype = {"commonwealth", "unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- British Overseas Territory ["Pitcairn Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Polynesia"}, british_spelling = true, }, -- commonwealth of the United States ["Puerto Rico"] = { placetype = {"commonwealth", "overseas territory", "territory"}, container = "United States", addl_parents = {"Caribbean"}, divs = {"municipalities"}, }, -- overseas department and region of France ["Réunion"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Africa"}, british_spelling = true, }, -- special municipality of the Netherlands ["Saba"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- overseas collectivity of France ["Saint Barthélemy"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Caribbean"}, british_spelling = true, }, -- British Overseas Territory ["Saint Helena, Ascension and Tristan da Cunha"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", divs = {{type = "constituent parts", container_parent_type = false}}, addl_parents = {"Atlantic Ocean", "Africa"}, british_spelling = true, }, -- constituent parts of the combined oveseas territory ["Ascension Island"] = { placetype = {"constituent part", "territory", "island"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, ["Saint Helena"] = { placetype = {"constituent part", "territory", "island"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, ["Tristan da Cunha"] = { placetype = {"constituent part", "territory", "archipelago"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, -- overseas collectivity of France ["Saint Martin"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Caribbean"}, british_spelling = true, }, -- overseas collectivity of France ["Saint Pierre and Miquelon"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", divs = {"communes"}, addl_parents = {"North America"}, british_spelling = true, }, -- special municipality of the Netherlands ["Sint Eustatius"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- constituent country of the Netherlands ["Sint Maarten"] = { placetype = {"constituent country", "quốc gia"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Somalia ["Somaliland"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Somalia", "Africa"}, keydesc = "the de-facto independent state of [[Somaliland]], internationally recognized as part of the country of [[Somalia]]", british_spelling = true, }, -- British Overseas Territory -- FIXME: We should form the group "South Georgia and the South Sandwich Islands" like we did for -- "Saint Helena, Ascension and Tristan da Cunha". ["South Georgia"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Atlantic Ocean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Georgia ["South Ossetia"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Georgia", "Europe", "Asia"}, keydesc = "the de-facto independent state of [[South Ossetia]], internationally recognized as part of the country of [[Georgia]]", british_spelling = true, }, -- British Overseas Territory ["South Sandwich Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Atlantic Ocean"}, wp = true, wpcat = "South Georgia and the South Sandwich Islands", british_spelling = true, }, -- Norwegian unincorporated area ["Svalbard"] = { placetype = {"unincorporated area", "dependent territory", "territory", "archipelago"}, container = "Norway", addl_parents = {"Europe"}, british_spelling = true, }, -- dependent territory of New Zealand ["Tokelau"] = { placetype = {"dependent territory", "territory"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Moldova ["Transnistria"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Moldova", "Europe"}, keydesc = "the de-facto independent state of [[Transnistria]], internationally recognized as part of [[Moldova]]", british_spelling = true, }, -- British Overseas Territory ["Turks and Caicos Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- unincorporated territory of the United States ["United States Minor Outlying Islands"] = { the = true, placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Islands", "Micronesia", "Polynesia", "Caribbean"}, }, -- FIXME: We should add entries for the other minor outlying islands. -- Baker Island (Oceania) -- Howland Island (Oceania) -- Jarvis Island (Oceania) -- Johnston Atoll (Oceania) -- Kingman Reef (Oceania) -- Midway Atoll (Oceania) -- Navassa Island (Caribbean) -- Palmyra Atoll (Oceania) -- Wake Island (Oceania) ["Wake Island"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- unincorporated territory of the United States ["United States Virgin Islands"] = { the = true, placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Caribbean"}, }, ["U.S. Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true}, ["US Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true}, -- overseas collectivity of France ["Wallis and Futuna"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Polynesia"}, british_spelling = true, }, } export.country_like_entities_group = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Saint Helena, Ascension and Tristan da Cunha". key_to_placename = false, placename_to_key = false, canonicalize_key_container = make_canonicalize_key_container(nil, "quốc gia"), default_overriding_bare_label_parents = {"country-like entities"}, default_no_container_cat = true, default_no_container_parent = true, -- These entities often aren't really part of their container; a village in Wallis and Futuna (an overseas -- collectivity of France in Polynesia), for example, shouldn't be treated as a village in France, nor as a village -- in Europe. default_no_auto_augment_container = true, data = export.country_like_entities, } -- Former countries and such; we don't create "Cities in ..." categories because they don't exist anymore export.former_countries = { -- de-facto independent state of Armenian ethnicity, internationally recognized as part of Azerbaijan -- (also known as Nagorno-Karabakh) -- NOTE: Formerly listed Armenia as a parent; this seems politically non-neutral so I've taken it out. ["Artsakh"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Azerbaijan", "Europe", "Asia"}, keydesc = "the former de-facto independent state of [[Artsakh]], internationally recognized as part of [[Azerbaijan]]", british_spelling = true, }, ["Nagorno-Karabakh"] = {alias_of = "Artsakh"}, ["Czechoslovakia"] = {container = "Europe", british_spelling = true}, ["East Germany"] = {container = "Europe", addl_parents = {"Germany"}, british_spelling = true}, ["North Vietnam"] = {container = "Asia", addl_parents = {"Vietnam"}}, ["Persia"] = {placetype = {"empire", "quốc gia"}, container = "Asia", divs = {"provinces"}}, ["Byzantine Empire"] = { the = true, placetype = {"empire", "quốc gia"}, container = {"Europe", "Africa", "Asia"}, addl_parents = {"Ancient Europe", "Ancient Near East"}, divs = { "provinces", "themes", }}, ["Roman Empire"] = { the = true, placetype = {"empire", "quốc gia"}, container = {"Europe", "Africa", "Asia"}, addl_parents = {"Rome"}, divs = { "provinces", {type = "FORMER provinces", cat_as = "provinces"}, }}, ["South Vietnam"] = {container = "Asia", addl_parents = {"Vietnam"}}, ["Soviet Union"] = { the = true, container = {"Europe", "Asia"}, divs = {"republics", "autonomous republics"}, british_spelling = true}, ["West Germany"] = {container = "Europe", addl_parents = {"Germany"}, british_spelling = true}, ["Yugoslavia"] = {container = "Europe", divs = {"districts"}, keydesc = "the former [[Kingdom of Yugoslavia]] (1918–1943) or the former [[Socialist Federal Republic of Yugoslavia]] (1943–1992)", british_spelling = true}, } export.former_countries_group = { canonicalize_key_container = canonicalize_continent_container, default_overriding_bare_label_parents = {"former countries and country-like entities"}, default_is_former_place = true, default_placetype = "quốc gia", default_no_container_cat = true, default_no_container_parent = true, -- No need to augment country holonyms with continents; not needed for disambiguation. default_no_auto_augment_container = true, data = export.former_countries, } ----------------------------------------------------------------------------------- -- Subpolity tables -- ----------------------------------------------------------------------------------- export.australia_states_and_territories = { ["Australian Capital Territory, Australia"] = {the = true, placetype = "territory"}, ["Jervis Bay Territory, Australia"] = {the = true, placetype = "territory"}, ["New South Wales, Australia"] = {}, ["Northern Territory, Australia"] = {the = true, placetype = "territory"}, ["Queensland, Australia"] = {}, ["South Australia, Australia"] = {}, ["Tasmania, Australia"] = {}, ["Victoria, Australia"] = {}, ["Western Australia, Australia"] = {}, } -- states and territories of Australia export.australia_group = { default_container = "Australia", default_placetype = "state", default_divs = "local government areas", data = export.australia_states_and_territories, } export.austria_states = { ["Vienna, Austria"] = {}, ["Lower Austria, Austria"] = {}, ["Upper Austria, Austria"] = {}, ["Styria, Austria"] = {}, ["Tyrol, Austria"] = {wp = "Tyrol (state)"}, ["Carinthia, Austria"] = {}, ["Salzburg, Austria"] = {wp = "Salzburg (state)"}, ["Vorarlberg, Austria"] = {}, ["Burgenland, Austria"] = {}, } -- states of Austria export.austria_group = { default_container = "Austria", default_placetype = "state", default_divs = "municipalities", data = export.austria_states, } export.bangladesh_divisions = { ["Barisal Division, Bangladesh"] = {}, ["Chittagong Division, Bangladesh"] = {}, ["Dhaka Division, Bangladesh"] = {}, ["Khulna Division, Bangladesh"] = {}, ["Mymensingh Division, Bangladesh"] = {}, ["Rajshahi Division, Bangladesh"] = {}, ["Rangpur Division, Bangladesh"] = {}, ["Sylhet Division, Bangladesh"] = {}, } -- divisions of Bangladesh export.bangladesh_group = { key_to_placename = make_key_to_placename(", Bangladesh$", " Division$"), placename_to_key = make_placename_to_key(", Bangladesh", " Division"), default_container = "Bangladesh", default_placetype = "division", default_divs = "districts", data = export.bangladesh_divisions, } export.brazil_states = { ["Acre, Brazil"] = {wp = "%l (state)"}, ["Alagoas, Brazil"] = {}, ["Amapá, Brazil"] = {}, ["Amazonas, Brazil"] = {wp = "%l (Brazilian state)"}, ["Bahia, Brazil"] = {}, ["Ceará, Brazil"] = {}, ["Distrito Federal, Brazil"] = {wp = "Federal District (Brazil)"}, ["Espírito Santo, Brazil"] = {}, ["Goiás, Brazil"] = {}, ["Maranhão, Brazil"] = {}, ["Mato Grosso, Brazil"] = {}, ["Mato Grosso do Sul, Brazil"] = {}, ["Minas Gerais, Brazil"] = {}, ["Pará, Brazil"] = {}, ["Paraíba, Brazil"] = {}, ["Paraná, Brazil"] = {wp = "%l (state)"}, ["Pernambuco, Brazil"] = {}, ["Piauí, Brazil"] = {}, ["Rio de Janeiro, Brazil"] = {wp = "%l (state)"}, ["Rio Grande do Norte, Brazil"] = {}, ["Rio Grande do Sul, Brazil"] = {}, ["Rondônia, Brazil"] = {}, ["Roraima, Brazil"] = {}, ["Santa Catarina, Brazil"] = {wp = "%l (state)"}, ["São Paulo, Brazil"] = {wp = "%l (state)"}, ["Sergipe, Brazil"] = {}, ["Tocantins, Brazil"] = {}, } -- states of Brazil export.brazil_group = { default_container = "Brazil", default_placetype = "state", default_divs = "municipalities", data = export.brazil_states, } -- provinces (a.k.a. oblasts) of Bulgaria export.bulgaria_provinces = { ["Blagoevgrad Province, Bulgaria"] = {}, ["Burgas Province, Bulgaria"] = {}, ["Dobrich Province, Bulgaria"] = {}, ["Gabrovo Province, Bulgaria"] = {}, ["Haskovo Province, Bulgaria"] = {}, ["Kardzhali Province, Bulgaria"] = {}, ["Kyustendil Province, Bulgaria"] = {}, ["Lovech Province, Bulgaria"] = {}, ["Montana Province, Bulgaria"] = {}, ["Pazardzhik Province, Bulgaria"] = {}, ["Pernik Province, Bulgaria"] = {}, ["Pleven Province, Bulgaria"] = {}, ["Plovdiv Province, Bulgaria"] = {}, ["Razgrad Province, Bulgaria"] = {}, ["Ruse Province, Bulgaria"] = {}, ["Shumen Province, Bulgaria"] = {}, ["Silistra Province, Bulgaria"] = {}, ["Sliven Province, Bulgaria"] = {}, ["Smolyan Province, Bulgaria"] = {}, ["Sofia City Province, Bulgaria"] = {}, ["Sofia Province, Bulgaria"] = {}, ["Stara Zagora Province, Bulgaria"] = {}, ["Targovishte Province, Bulgaria"] = {}, ["Varna Province, Bulgaria"] = {}, ["Veliko Tarnovo Province, Bulgaria"] = {}, ["Vidin Province, Bulgaria"] = {}, ["Vratsa Province, Bulgaria"] = {}, ["Yambol Province, Bulgaria"] = {}, } export.bulgaria_group = { key_to_placename = make_key_to_placename(", Bulgaria$", " Province$"), placename_to_key = make_placename_to_key(", Bulgaria", " Province"), default_container = "Bulgaria", --== source: https://en.wikipedia.org/wiki/NUTS_statistical_regions_of_Bulgaria == divs = {"regions", "planning regions", "provinces", "municipalities", "settlements"}, default_placetype = "province", data = export.bulgaria_provinces, } export.canada_provinces_and_territories = { ["Alberta, Canada"] = {divs = { {type = "municipal districts", container_parent_type = "rural municipalities"}, }}, ["British Columbia, Canada"] = {divs = {type = "regional districts", container_parent_type = false}, "regional municipalities", }, ["Manitoba, Canada"] = {divs = {"rural municipalities"}}, ["New Brunswick, Canada"] = {divs = {"counties", "parishes", {type = "civil parishes", cat_as = "parishes"}}}, ["Newfoundland and Labrador, Canada"] = {}, ["Northwest Territories, Canada"] = {the = true, placetype = "territory"}, ["Nova Scotia, Canada"] = {divs = {"counties", "regional municipalities"}}, ["Nunavut, Canada"] = {placetype = "territory"}, ["Ontario, Canada"] = {divs = {"counties", "regional municipalities", {type = "townships", prep = "in"}}}, ["Prince Edward Island, Canada"] = {divs = {"counties", "parishes", "rural municipalities"}}, ["Saskatchewan, Canada"] = {divs = {"rural municipalities"}}, ["Quebec, Canada"] = {divs = { "counties", {type = "regional county municipalities", container_parent_type = "regional municipalities"}, -- administrative regions have an official (but non-governmental) function but there don't appear to be any -- equivalent regions elsewhere in Canada, so disable the [[Category:Regions of Canada]] grouping {type = "regions", container_parent_type = false}, {type = "townships", prep = "in"}, {type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}}, {type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}}, {type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}}, }}, ["Yukon, Canada"] = {placetype = "territory"}, ["Yukon Territory, Canada"] = {alias_of = "Yukon, Canada", the = true}, } -- provinces and territories of Canada export.canada_group = { default_container = "Canada", default_placetype = "province", data = export.canada_provinces_and_territories, } export.china_provinces_and_autonomous_regions = { -- direct-administered municipalities are not here but below under prefecture-level cities ["Anhui, China"] = {}, ["Fujian, China"] = {}, ["Fuchien, China"] = {alias_of = "Fujian, China", display = true}, ["Gansu, China"] = {}, ["Guangdong, China"] = {}, ["Guangxi, China"] = {placetype = "autonomous region"}, ["Guizhou, China"] = {}, ["Hainan, China"] = {}, ["Hebei, China"] = {}, ["Heilongjiang, China"] = {}, ["Henan, China"] = {}, ["Hubei, China"] = {}, ["Hunan, China"] = {}, ["Inner Mongolia, China"] = {placetype = "autonomous region"}, ["Jiangsu, China"] = {}, ["Jiangxi, China"] = {}, ["Jilin, China"] = {}, ["Liaoning, China"] = {}, ["Ningxia, China"] = {placetype = "autonomous region"}, ["Qinghai, China"] = {}, ["Shaanxi, China"] = {}, ["Shandong, China"] = {}, ["Shanxi, China"] = {}, ["Sichuan, China"] = {}, ["Tibet, China"] = {placetype = "autonomous region", wp = "Tibet Autonomous Region"}, ["Xinjiang, China"] = {placetype = "autonomous region"}, ["Yunnan, China"] = {}, ["Zhejiang, China"] = {}, } -- provinces and autonomous regions of China export.china_group = { default_container = "China", default_placetype = "province", default_divs = { "prefectures", "prefecture-level cities", "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_provinces_and_autonomous_regions, } export.china_prefecture_level_cities = { -- In China, a "prefecture-level city" is not a city in any real sense. It is rather a prefecture, which is an -- administrative unit smaller than a province but bigger than a county, which is administratively controlled by -- the chief city of the prefecture (which bears the same name as the prefecture), in a unified government. Prior -- to the mid-1980's, in fact, prefecture-level cities *were* prefectures, and a few of them (especially in the -- western portion of China) have not yet been converted. Generally a given province is entirely tiled by -- prefecture-level cities, another indication that they should be treated as prefectures and not cities per se. -- Yet another indication is that prefecture-level cities can contain counties and county-level cities (which, much -- like prefecture-level cities, are effectively counties surrounding a chief city of the county, again which bears -- the same name as the county-level city). -- -- For this reason, we treat prefecture-level cities as non-city political divisions, and separately enumerate the -- most populous so we can separately categorize districts and counties under them instead of lumping them at the -- province level. -- -- Note also that China separately distinguishes "urban area" from "metro area". Sometimes the two figures are -- identical but sometimes the metro area is larger (and very occasionally smaller, which I assume is an error). I'm -- guessing that the "urban area" is the contiguous urban area over a certain density while the metro area includes -- all urban areas above a certain density; when the latter is greater, it's because of satellite cities in the -- metro area separated by suburban/exurban or rural land. -- At first I chose all prefecture/province-level cities with a total prefecture/province-level population of at -- least 6,000,000 per the 2020 census with data taken from https://www.citypopulation.de/en/china/admin/ (a total -- of 67, including the four direct-administered municipalities), and also chose all prefecture/province-level -- cities whose "urban population" was at least 2,000,000 per the 2020 census with data taken from Wikipedia -- [[w:List of cities in China by population#Cities and towns by population]] (a total of 61 cities; if we cut off -- at 1.5 million we'd have 84 cities, and if we cut off at 1 million we'd have 105 cities). Merging them produces -- 87 cities. Note that this leaves off a few well-known cities (Guilin, Qiqihar, Kashgar, Lhasa, ...) but includes -- a lot of obscure cities. -- -- At a later date I added all cities from citypopulation.de whose "urban" population per the 2020 China census was -- >= 1 million, and then finally added all urban agglomerations from citypopulation.de whose 2025-01-01 estimate -- was >= 1 million. These are sorted below by the urban agglomeration value (which is generally of the "adm-urb" = -- "administrative area (urban population)" type) and sometimes groups nearby cities into a single agglomeration -- (most notably in the case of the Pearl River Delta, grouped under Guangzhou with an agglomeration population of -- 72,700,000 but including a large number of nearby large cities in the agglomeration (although for some reason not -- Hong Kong, maybe due to the administrative issues involved). In addition, citypopulation.de includes divisions -- under a prefecture-level city if they are city-like and have an agglomeration population of at least 1 million; -- this includes several county-level cities, one county and one district (Wanzhou, a "district" of Chongqing -- despite being 142 miles away). None of the county-level cities or counties have districts under them, only -- subdistricts, towns and townships. ["Guangzhou"] = {container = "Guangdong"}, -- 18.7 prefectural, 18.8 urban; sub-provincial city; 16.097 urban (72.700 adm-urb including Dongguan, Foshan, Huizhou, Jiangmen, Shenzhen, Zhongshan) per citypopulation.de ["Dongguan"] = {container = "Guangdong"}, -- 10.5 prefectural, 10.5 urban; 9.645 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Foshan"] = {container = "Guangdong"}, -- 9.5 prefectural, 9.5 urban; 9.043 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Huizhou"] = {container = "Guangdong"}, -- 6.0 prefectural, 2.5 urban; 2.900 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Jiangmen"] = {container = "Guangdong"}, -- 4.798 prefectural, 2.7 urban; 1.795 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Shenzhen"] = {container = "Guangdong"}, -- 17.5 prefectural, 14.7 urban; sub-provincial city; 17.445 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Zhongshan"] = {container = "Guangdong"}, -- 4.418 prefectural, 4.4 urban; 3.842 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Shanghai"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 24.9 prefectural, 29.9 urban; 21.910 urban (41.600 adm-urb including Changshu, Changzhou, Suzhou, Wuxi) per citypopulation.de ["Changshu"] = {container = "Jiangsu"}, -- 1.231 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration -- NOTE: Not to be confused with Cangzhou in Hebei ["Changzhou"] = {container = "Jiangsu"}, -- 5.278 prefectural, 3.6 urban; 3.187 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration -- NOTE: There is also a prefecture-level city Suzhou in Anhui with 5.3 million prefectural inhabitants ["Suzhou"] = {container = "Jiangsu"}, -- 12.8 prefectural, 4.3 urban; 5.893 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration ["Wuxi"] = {container = "Jiangsu"}, -- 7.5 prefectural, 3.3 urban; 3.957 per citypopulation.de; included by citypopulation.de in Shanghai agglomeration ["Beijing"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 21.9 prefectural, 21.9 urban; 18.961 urban (21.500 adm-urb) per citypopulation.de ["Chengdu"] = {container = "Sichuan"}, -- 20.9 prefectural, 16.9 urban; sub-provincial city; 13.568 urban (18.100 adm-urb) per citypopulation.de ["Xiamen"] = {container = "Fujian"}, -- 5.163 prefectural, 5.2 urban; sub-provincial city; 4.617 urban (15.400 adm-urb including Jinjiang, Quanzhou, Putian) per citypopulation.de ["Jinjiang"] = {container = "Fujian"}, -- 1.416 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Quanzhou"] = {container = "Fujian"}, -- 8.8 prefectural, 1.7 urban (6.7 metro); 1.469 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Putian"] = {container = "Fujian"}, -- 3.210 prefectural, 2.0 urban; 1.539 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Hangzhou"] = {container = "Zhejiang"}, -- 11.9 prefectural, 10.7 urban; sub-provincial city; 9.236 urban (14.600 adm-urb including Shaoxing) per citypopulation.de ["Shaoxing"] = {container = "Zhejiang"}, -- 5.270 prefectural, 2.5 urban; 2.333 urban per citypopulation.de; included by citypopulation.de in Hangzhou agglomeration ["Xi'an"] = {container = "Shaanxi"}, -- 12.1 prefectural, 11.9 urban; sub-provincial city; 9.393 urban (13.400 adm-urb including Xianyang) per citypopulation.de ["Xianyang"] = {container = "Shaanxi"}, -- 1.193 urban per citypopulation.de; included by citypopulation.de in Xi'an agglomeration ["Chongqing"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 32.1 prefectural, 16.9 urban; 9.581 urban (12.900 adm-urb) per citypopulation.de ["Wuhan"] = {container = "Hubei"}, -- 12.4 prefectural, 12.3 urban; sub-provincial city; 10.495 urban (12.600 adm-urb) per citypopulation.de ["Tianjin"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 13.9 prefectural, 13.9 urban; 11.052 urban (11.700 adm-urb) per citypopulation.de ["Changsha"] = {container = "Hunan"}, -- 10.0 prefectural, 6.0 urban; 5.630 urban (11.500 adm-urb including Xiangtan, Zhuzhou) per citypopulation.de -- Changsha County -- 1.024 urban per citypopulation.de ["Zhuzhou"] = {container = "Hunan"}, -- 1.510 urban per citypopulation.de; included by citypopulation.de in Changsha agglomeration ["Zhengzhou"] = {container = "Henan"}, -- 12.6 prefectural, 6.7 urban; 6.461 urban (10.300 adm-urb) per citypopulation.de ["Nanjing"] = {container = "Jiangsu"}, -- 9.3 prefectural, 9.3 urban; sub-provincial city; 7.520 urban (9.500 adm-urb including Ma'anshan) per citypopulation.de ["Shenyang"] = {container = "Liaoning"}, -- 9.1 prefectural, 7.9 urban; sub-provincial city; 7.026 urban (8.800 adm-urb including Fushun) per citypopulation.de ["Fushun"] = {container = "Liaoning"}, -- 1.229 urban per citypopulation.de; included by citypopulation.de in Shenyang agglomeration ["Hefei"] = {container = "Anhui"}, -- 9.4 prefectural, 4.2 urban; 5.056 urban (8.200 adm-urb) per citypopulation.de ["Shantou"] = {container = "Guangdong"}, -- 5.502 prefectural, 4.3 urban; 3.839 urban (8.050 adm-urb including Chaozhou, Jieyang, Puning) per citypopulation.de ["Chaozhou"] = {container = "Guangdong"}, -- 1.254 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration ["Jieyang"] = {container = "Guangdong"}, -- 1.243 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration ["Qingdao"] = {container = "Shandong"}, -- 10.1 prefectural, 7.1 urban; sub-provincial city; 6.165 urban (7.700 adm-urb) per citypopulation.de ["Ningbo"] = {container = "Zhejiang"}, -- 9.4 prefectural, 5.1 urban; sub-provincial city; 3.731 urban (7.600 adm-urb including Cixi, Yuyao) per citypopulation.de ["Cixi"] = {container = "Zhejiang"}, -- 1.458 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration ["Yuyao"] = {container = "Zhejiang"}, -- 1.014 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration -- Hong Kong 7.500 agglomeration per citypopulation.de 2025-01-01 estimate including Kowloon, Victoria ["Wenzhou"] = {container = "Zhejiang"}, -- 9.6 prefectural, 3.6 urban; 2.582 urban (7.000 adm-urb including Rui'an, Cangnan, Pingyang) per citypopulation.de -- Rui'an is a "county-level city" of the "prefecture-level city" of Wenzhou but in fact is 19 miles away from Wenzhou city proper (urban core to urban core). ["Rui'an"] = {placetype = "county-level city", container = {key = "Wenzhou", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 1.013 urban per citypopulation.de; included by citypopulation.de in Wenzhou agglomeration ["Kunming"] = {container = "Yunnan"}, -- 8.5 prefectural, 6.0 urban; 5.273 urban (6.800 adm-urb) per citypopulation.de -- includes Láiwú city ["Jinan"] = {container = "Shandong", wp = "%l, %c"}, -- 9.2 prefectural, 8.4 urban; sub-provincial city; 5.648 urban (6.750 adm-urb) per citypopulation.de -- includes Xīnjí city ["Shijiazhuang"] = {container = "Hebei"}, -- 11.2 prefectural, 4.1 urban; 5.090 urban (6.450 adm-urb) per citypopulation.de ["Taiyuan"] = {container = "Shanxi"}, -- 5.304 prefectural, 4.5 urban; 4.304 urban (6.150 adm-urb) per citypopulation.de ["Harbin"] = {container = "Heilongjiang"}, -- 10.0 prefectural, 7.0 urban; sub-provincial city; 5.243 urban (5.550 adm-urb) per citypopulation.de ["Nanning"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 8.7 prefectural, 3.8 urban; 4.583 urban (5.550 adm-urb) per citypopulation.de ["Dalian"] = {container = "Liaoning"}, -- 7.5 prefectural, 5.7 urban; sub-provincial city; 4.914 urban (5.400 adm-urb) per citypopulation.de ["Guiyang"] = {container = "Guizhou"}, -- 5.987 prefectural, 3.5 urban; 4.021 urban (5.300 adm-urb) per citypopulation.de ["Changchun"] = {container = "Jilin"}, -- 9.1 prefectural, 5.7 urban; sub-provincial city; 4.557 urban (5.200 adm-urb) per citypopulation.de ["Nanchang"] = {container = "Jiangxi"}, -- 6.3 prefectural, 3.6 (3.9?) urban, 5.3 metro; 3.519 urban (5.150 adm-urb) per citypopulation.de ["Ürümqi"] = {container = {key = "Xinjiang, China", placetype = "autonomous region"}}, -- 4.054 prefectural, 4.3 urban; 3.843 urban (5.000 adm-urb) per citypopulation.de ["Urumqi"] = {alias_of = "Ürümqi", display = true}, ["Fuzhou"] = {container = "Fujian"}, -- 8.3 prefectural, 4.1 urban; 3.723 urban (4.775 adm-urb) per citypopulation.de ["Linyi"] = {container = "Shandong"}, -- 11.0 prefectural, 2.3 urban; 2.744 urban (4.650 adm-urb) per citypopulation.de ["Zibo"] = {container = "Shandong"}, -- 4.704 prefectural, 2.6 urban; 2.750 urban (3.975 adm-urb) per citypopulation.de ["Luoyang"] = {container = "Henan"}, -- 7.1 prefectural, 2.4 urban; 2.231 urban (3.750 adm-urb) per citypopulation.de ["Lanzhou"] = {container = "Gansu"}, -- 4.359 prefectural, 3.1 urban; 3.013 urban (3.575 adm-urb) per citypopulation.de ["Nantong"] = {container = "Jiangsu"}, -- 7.7 prefectural, 2.3 urban; 2.988 urban (3.475 adm-urb) citypopulation.de ["Weifang"] = {container = "Shandong"}, -- 9.4 prefectural, 2.7 urban; 1.998 urban (3.325 adm-urb) per citypopulation.de ["Jiangyin"] = {container = "Jiangsu"}, -- 1.331 urban (3.200 adm-urb including Zhangjiagang) per citypopulation.de ["Zhangjiagang"] = {container = "Jiangsu"}, -- 1.056 urban per citypopulation.de; included in Jiangyin figures ["Xuzhou"] = {container = "Jiangsu"}, -- 9.1 prefectural, 2.6 urban; 2.846 urban (3.150 adm-urb) per citypopulation.de ["Handan"] = {container = "Hebei"}, -- 9.4 prefectural, 2.8 urban; 2.095 urban (2.925 adm-urb) per citypopulation.de ["Hohhot"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 3.446 prefectural, 2.7 urban; 2.373 urban (2.850 adm-urb) per citypopulation.de ["Haikou"] = {container = "Hainan"}, -- 2.873 prefectural, 2.3 urban; 2.349 urban (2.800 adm-urb) per citypopulation.de ["Tangshan"] = {container = "Hebei"}, -- 7.7 prefectural, 3.4 urban; 2.550 urban (2.750 adm-urb) per citypopulation.de ["Xinxiang"] = {container = "Henan"}, -- 6.3 prefectural, 1.2 urban, 2.7 metro; 1.271 urban (2.700 adm-urb) per citypopulation.de ["Yiwu"] = {container = "Zhejiang"}, -- 1.481 urban (2.700 adm-urb) per citypopulation.de ["Zhuhai"] = {container = "Guangdong"}, -- 2.439 prefectural, 2.4 urban; 2.207 urban (2.675 adm-urb) per citypopulation.de ["Taizhou, Zhejiang"] = {container = "Zhejiang"}, -- 6.6 prefectural, 1.6 urban; 1.486 urban (2.625 adm-urb) per citypopulation.de ["Taizhou"] = {alias_of = "Taizhou, Zhejiang"}, ["Yantai"] = {container = "Shandong"}, -- 7.1 prefectural, 2.5 urban; 2.312 urban (2.550 adm-urb) per citypopulation.de ["Yinchuan"] = {container = {key = "Ningxia, China", placetype = "autonomous region"}}, -- 1.663 urban (2.525 adm-urb) per citypopulation.de ["Liuzhou"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 4.157 prefectural, 2.2 urban; 2.205 urban (2.500 adm-urb) per citypopulation.de ["Anshan"] = {container = "Liaoning"}, -- 1.480 urban (2.350 adm-urb including Liáoyáng) per citypopulation.de ["Yangzhou"] = {container = "Jiangsu"}, -- 2.067 urban (2.300 adm-urb) per citypopulation.de ["Jiaxing"] = {container = "Zhejiang"}, -- 1.188 urban (2.275 adm-urb) per citypopulation.de ["Xining"] = {container = "Qinghai"}, -- 1.677 urban (2.250 adm-urb) per citypopulation.de -- includes Dìngzhōu city and Xióngān Xīnqū ["Baoding"] = {container = "Hebei"}, -- 11.5 prefectural, 2.0 urban; 1.940 urban (2.225 adm-urb) per citypopulation.de ["Baotou"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 2.709 prefectural, 2.2 urban; 2.104 urban (2.200 adm-urb) per citypopulation.de ["Ganzhou"] = {container = "Jiangxi"}, -- 9.0 prefectural, 1.6 urban; 1.778 urban (2.150 adm-urb) per citypopulation.de ["Pingdingshan"] = {container = "Henan"}, -- 1.046 urban (2.100 adm-urb) per citypopulation.de ["Zunyi"] = {container = "Guizhou"}, -- 6.6 prefectural, 2.4 urban/metro; 1.675 urban (2.025 adm-urb) per citypopulation.de ["Bengbu"] = {container = "Anhui"}, -- 1.078 urban (2.000 adm-urb) per citypopulation.de ["Datong"] = {container = "Shanxi"}, -- 3.105 prefectural, 2.0 urban; 1.810 urban (2.000 adm-urb) per citypopulation.de ["Anyang"] = {container = "Henan"}, -- 1.188 urban (1.960 adm-urb) per citypopulation.de ["Huai'an"] = {container = "Jiangsu"}, -- 4.556 prefectural, 2.6 urban; 1.805 urban (1.940 adm-urb) per citypopulation.de ["Zaozhuang"] = {container = "Shandong"}, -- 1.350 urban (1.900 adm-urb) per citypopulation.de ["Zhanjiang"] = {container = "Guangdong"}, -- 7.0 prefectural, 1.9 urban; 1.401 urban (1.890 adm-urb) per citypopulation.de ["Huainan"] = {container = "Anhui"}, -- 1.256 urban (1.880 adm-urb) per citypopulation.de ["Jining"] = {container = "Shandong"}, -- 8.4 prefectural, 1.5 urban; 1.700 urban (1.880 adm-urb) per citypopulation.de ["Daqing"] = {container = "Heilongjiang"}, -- 1.604 urban (1.860 adm-urb) per citypopulation.de ["Wuhu"] = {container = "Anhui"}, -- 1.598 urban (1.850 adm-urb) per citypopulation.de ["Guilin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 1.361 urban (1.830 adm-urb) per citypopulation.de ["Mianyang"] = {container = "Sichuan"}, -- 1.549 urban (1.800 adm-urb) per citypopulation.de ["Xiangyang"] = {container = "Hubei"}, -- 1.686 urban (1.800 adm-urb) per citypopulation.de ["Huzhou"] = {container = "Zhejiang"}, -- 1.084 urban (1.750 adm-urb) per citypopulation.de ["Puyang"] = {container = "Henan"}, -- 0.824 urban (1.750 adm-urb) per citypopulation.de ["Shangqiu"] = {container = "Henan"}, -- 7.8 prefectural, 1.9 urban (2.8 metro); 1.031 urban (1.750 adm-urb) per citypopulation.de ["Qinhuangdao"] = {container = "Hebei"}, -- 1.520 urban (1.740 adm-urb) per citypopulation.de ["Xingtai"] = {container = "Hebei"}, -- 7.1 prefectural, 971,000 urban; 1.5 urban (1.700 adm-urb) per citypopulation.de ["Nanyang"] = {container = "Henan", wp = "%l, %c"}, -- 9.7 prefectural, 2.1 urban/metro; 1.481 urban (1.680 adm-urb) per citypopulation.de ["Jiaozuo"] = {container = "Henan"}, -- 0.875 urban (1.640 adm-urb) per citypopulation.de ["Jilin City"] = {container = "Jilin"}, -- 1.509 urban (1.610 adm-urb) per citypopulation.de ["Jilin"] = {alias_of = "Jilin City"}, ["Jinhua"] = {container = "Zhejiang"}, -- 7.1 prefectural, 1.5 urban; 1.041 urban (1.590 adm-urb) per citypopulation.de ["Shangrao"] = {container = "Jiangxi"}, -- 6.5 prefectural, 2.1 urban, 1.3 metro [sic]; 1.342 urban (1.580 adm-urb) per citypopulation.de ["Heze"] = {container = "Shandong"}, -- 8.8 prefectural, 1.3 urban; 1.294 urban (1.570 adm-urb) per citypopulation.de ["Yulin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}, wp = "%l, %c"}, -- 0.878 urban (1.570 adm-urb) per citypopulation.de ["Tai'an"] = {container = "Shandong"}, -- 1.417 urban (1.560 adm-urb) per citypopulation.de ["Weihai"] = {container = "Shandong"}, -- 1.340 urban (1.510 adm-urb) per citypopulation.de -- Taizhou, Jiangsu would be here (1.490 adm-urb) but moved to china_prefecture_level_cities_2 to avoid clash ["Yancheng"] = {container = "Jiangsu"}, -- 6.7 prefectural, 1.6 urban; 1.353 urban (1.460 adm-urb) per citypopulation.de ["Zhangjiakou"] = {container = "Hebei"}, -- 1.339 urban (1.450 adm-urb) per citypopulation.de ["Maoming"] = {container = "Guangdong"}, -- 6.2 prefectural, 2.5 urban; 1.308 urban (1.440 adm-urb) per citypopulation.de ["Nanchong"] = {container = "Sichuan"}, -- 1.254 urban (1.440 adm-urb) per citypopulation.de ["Fuyang"] = {container = "Anhui", wp = "%l, %c"}, -- 8.2 prefectural, 2.1 urban; 1.191 urban (1.410 adm-urb) per citypopulation.de ["Xuchang"] = {container = "Henan"}, -- 0.850 urban (1.390 adm-urb) per citypopulation.de ["Yichang"] = {container = "Hubei"}, -- 1.284 urban (1.390 adm-urb) per citypopulation.de ["Dazhou"] = {container = "Sichuan"}, -- 1.136 urban (1.380 adm-urb) per citypopulation.de ["Kaifeng"] = {container = "Henan"}, -- 1.194 urban (1.340 adm-urb) per citypopulation.de ["Luzhou"] = {container = "Sichuan"}, -- 1.128 urban (1.340 adm-urb) per citypopulation.de ["Qingyuan"] = {container = "Guangdong"}, -- 1.198 urban (1.340 adm-urb) per citypopulation.de ["Huaibei"] = {container = "Anhui"}, -- 0.831 urban (1.330 adm-urb) per citypopulation.de ["Yibin"] = {container = "Sichuan"}, -- 1.101 urban (1.310 adm-urb) per citypopulation.de ["Lu'an"] = {container = "Anhui"}, -- 1.070 urban (1.300 adm-urb) per citypopulation.de ["Dezhou"] = {container = "Shandong"}, -- 0.843 urban (1.290 adm-urb) per citypopulation.de ["Rizhao"] = {container = "Shandong"}, -- 1.147 urban (1.270 adm-urb) per citypopulation.de ["Changzhi"] = {container = "Shanxi"}, -- 1.047 urban (1.250 adm-urb) per citypopulation.de ["Hengyang"] = {container = "Hunan"}, -- 6.6 prefectural, 1.5 urban; 1.185 urban (1.250 adm-urb) per citypopulation.de ["Jinzhou"] = {container = "Liaoning"}, -- 1.021 urban (1.240 adm-urb) per citypopulation.de ["Liaocheng"] = {container = "Shandong"}, -- 1.020 urban (1.240 adm-urb) per citypopulation.de ["Changde"] = {container = "Hunan"}, -- 1.101 urban (1.230 adm-urb) per citypopulation.de ["Suqian"] = {container = "Jiangsu"}, -- 1.082 urban (1.230 adm-urb) per citypopulation.de ["Xinyang"] = {container = "Henan"}, -- 6.2 prefectural, 1.4 urban/metro; 1.015 urban (1.230 adm-urb) per citypopulation.de ["Baoji"] = {container = "Shaanxi"}, -- 1.108 urban (1.220 adm-urb) per citypopulation.de ["Yueyang"] = {container = "Hunan"}, -- 1.125 urban (1.220 adm-urb) per citypopulation.de ["Zhenjiang"] = {container = "Jiangsu"}, -- 1.124 urban (1.210 adm-urb) per citypopulation.de -- Wanzhou is a "district" of the "direct-administered municipality" of Chongqing but in fact is 142 miles away from Chongqing city proper. ["Wanzhou"] = {placetype = "district", container = {key = "Chongqing", placetype = "direct-administered municipality"}, divs = {"subdistricts", "townships"}, wp = "%l, %c"}, -- 1.078 urban (1.190 adm-urb) per citypopulation.de ["Ulanhad"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 1.093 urban (1.180 adm-urb) per citypopulation.de ["Chifeng"] = {alias_of = "Ulanhad"}, ["Ulankhad"] = {alias_of = "Ulanhad", display = true}, ["Ezhou"] = {container = "Hubei"}, -- < 0.750 urban (1.180 adm-urb) per citypopulation.de ["Zhaoqing"] = {container = "Guangdong"}, -- 1.036 urban (1.160 adm-urb) per citypopulation.de ["Lianyungang"] = {container = "Jiangsu"}, -- 4.599 prefectural, 2.0 urban; 1.071 urban (1.150 adm-urb) per citypopulation.de ["Qujing"] = {container = "Yunnan"}, -- 0.976 urban (1.150 adm-urb) per citypopulation.de -- Shuyang is a "county" of the "prefecture-level city" of Suqian but in fact is 38 miles away from Suqian city proper (urban core to urban core). -- The county itself is 37 miles by 34 miles. ["Shuyang"] = {placetype = "county", container = {key = "Suqian", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l County"}, -- 0.986 urban (1.120 adm-urb) per citypopulation.de -- Yongkang is a "county-level city" of the "prefecture-level city" of Jinhua but in fact is 32 miles away from Jinhua city proper (urban core to urban core). ["Yongkang"] = {placetype = "county-level city", container = {key = "Jinhua", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l, Zhejiang"}, -- < 0.750 urban (1.110 adm-urb) per citypopulation.de ["Zhoukou"] = {container = "Henan"}, -- 9.0 prefectural, 721,000 urban (1.6 metro); < 0.750 urban (1.100 adm-urb) per citypopulation.de ["Beihai"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- < 1 urban (1.090 adm-urb) per citypopulation.de ["Jiujiang"] = {container = "Jiangxi"}, -- < 0.750 urban (1.080 adm-urb) per citypopulation.de ["Shaoyang"] = {container = "Hunan"}, -- 6.6 prefectural, 802,000 urban, 1.4 metro; < 1 urban (1.080 adm-urb) per citypopulation.de ["Chuzhou"] = {container = "Anhui"}, -- < 0.750 urban (1.070 adm-urb) per citypopulation.de ["Hengshui"] = {container = "Hebei"}, -- 0.885 urban (1.070 adm-urb) per citypopulation.de ["Shiyan"] = {container = "Hubei"}, -- 0.955 urban (1.070 adm-urb) per citypopulation.de ["Huludao"] = {container = "Liaoning"}, -- 0.764 urban (1.060 adm-urb) per citypopulation.de ["Dongying"] = {container = "Shandong"}, -- 0.961 urban (1.050 adm-urb) per citypopulation.de ["Guigang"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 0.921 urban (1.050 adm-urb) per citypopulation.de -- Liuyang is a "county-level city" of the "prefecture-level city" of Changsha but in fact is 47 miles away from Changsha city proper (urban core to urban core). ["Liuyang"] = {placetype = "county-level city", container = {key = "Changsha", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.886 urban (1.040 adm-urb) per citypopulation.de -- NOTE: Not to be confused with Changzhou in Jiangsu ["Cangzhou"] = {container = "Hebei"}, -- 7.3 prefectural, 621,000 urban; 0.759 urban (1.030 adm-urb) per citypopulation.de ["Liupanshui"] = {container = "Guizhou"}, -- < 0.750 urban (1.030 adm-urb) per citypopulation.de ["Panjin"] = {container = "Liaoning"}, -- 0.980 urban (1.030 adm-urb) per citypopulation.de ["Qiqihar"] = {container = "Heilongjiang"}, -- 1.030 urban (1.030 adm-urb) per citypopulation.de ["Linfen"] = {container = "Shanxi"}, -- < 0.750 urban (1.010 adm-urb) per citypopulation.de -- Tengzhou is a "county-level city" of the "prefecture-level city" of Zaozhuang but in fact is 30 miles away from Zaozhuang city proper (urban core to urban core). ["Tengzhou"] = {placetype = "county-level city", container = {key = "Zaozhuang", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.937 urban (1.010 adm-urb) per citypopulation.de -- 3 extra that got added in earlier incarnations and aren't found in the "major agglomerations of the world" page https://citypopulation.de/en/world/agglomerations/ reference date 2025-01-01 ["Kunshan"] = {container = "Jiangsu"}, -- 1.652 urban (2020 China census) per citypopulation.de ["Zhumadian"] = {container = "Henan"}, -- 7.0 prefectural, 722,000 urban per Wikipedia; 0.754 urban per citypopulation.de ["Bijie"] = {container = "Guizhou"}, -- 6.9 prefectural, ? urban, ? metro (not listed in Wikipedia); < 0.750 urban per citypopulation.de } export.china_prefecture_level_cities_group = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Taizhou, Zhejiang" or "Suzhou, Anhui". key_to_placename = false, placename_to_key = false, -- don't add ", China" to make the key default_container = "China", canonicalize_key_container = make_canonicalize_key_container(", China", "province"), -- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people -- don't understand how Chinese administrative divisions work. default_placetype = {"prefecture-level city", "city"}, default_divs = { -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities, -- and prefecture-level cities (as well as county-level cities) are considered non-cities. "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_prefecture_level_cities, } -- Needed to avoid problems with two cities called Taizhou and Suzhou. export.china_prefecture_level_cities_2 = { -- NOTE: There is also a larger and better-known prefecture-level city Taizhou in Zhejiang. ["Taizhou, Jiangsu"] = {container = "Jiangsu"}, -- 1.3 urban (1.490 adm-urb) per citypopulation.de 2020 census ["Taizhou"] = {alias_of = "Taizhou, Jiangsu"}, -- NOTE: There is also a larger and better-known prefecture-level city Suzhou in Jiangsu. ["Suzhou, Anhui"] = {container = "Anhui"}, -- 5.3 prefectural, 1.766 metro and "urban"; < 1 urban (1.010 adm-urb) per citypopulation.de 2020 census -- hopefully this will work because we also have Suzhou as a key by itself for the larger, more-well-known Suzhou in Jiangsu ["Suzhou"] = {alias_of = "Suzhou, Anhui"}, } export.china_prefecture_level_cities_group_2 = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Taizhou, Jiangsu". placename_to_key = false, -- don't add ", China" to make the key default_container = "China", canonicalize_key_container = make_canonicalize_key_container(", China", "province"), -- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people -- don't understand how Chinese administrative divisions work. default_placetype = {"prefecture-level city", "city"}, default_divs = { -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities, -- and prefecture-level cities (as well as county-level cities) are considered non-cities. "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_prefecture_level_cities_2, } export.finland_regions = { ["Lapland, Finland"] = {wp = "%l (%c)"}, ["North Ostrobothnia, Finland"] = {}, ["Northern Ostrobothnia, Finland"] = {alias_of = "North Ostrobothnia, Finland", display = true}, ["Kainuu, Finland"] = {}, ["North Karelia, Finland"] = {}, ["Northern Savonia, Finland"] = {}, ["North Savo, Finland"] = {alias_of = "Northern Savonia, Finland", display = true}, ["Southern Savonia, Finland"] = {}, ["South Savo, Finland"] = {alias_of = "Southern Savonia, Finland", display = true}, ["South Karelia, Finland"] = {}, ["Central Finland, Finland"] = {}, ["South Ostrobothnia, Finland"] = {}, ["Southern Ostrobothnia, Finland"] = {alias_of = "South Ostrobothnia, Finland", display = true}, ["Ostrobothnia, Finland"] = {wp = "%l (region)"}, ["Central Ostrobothnia, Finland"] = {}, ["Pirkanmaa, Finland"] = {}, ["Satakunta, Finland"] = {}, ["Päijänne Tavastia, Finland"] = {}, ["Päijät-Häme, Finland"] = {alias_of = "Päijänne Tavastia, Finland", display = true}, ["Tavastia Proper, Finland"] = {}, ["Kanta-Häme, Finland"] = {alias_of = "Tavastia Proper, Finland", display = true}, ["Kymenlaakso, Finland"] = {}, ["Uusimaa, Finland"] = {}, ["Southwest Finland, Finland"] = {}, ["Åland Islands, Finland"] = {the = true, wp = "Åland"}, ["Åland, Finland"] = {alias_of = "Åland Islands, Finland"}, -- differs in "the" } -- regions of Finland export.finland_group = { default_container = "Finland", default_placetype = "region", default_divs = "municipalities", data = export.finland_regions, } export.france_administrative_regions = { ["Auvergne-Rhône-Alpes, France"] = {}, ["Bourgogne-Franche-Comté, France"] = {}, ["Brittany, France"] = {wp = "%l (administrative region)"}, ["Centre-Val de Loire, France"] = {}, ["Corsica, France"] = {}, -- overseas departments are handled in `export.country_like_entities` -- ["French Guiana"] = {}, ["Grand Est, France"] = {}, -- ["Guadeloupe"] = {}, ["Hauts-de-France, France"] = {}, ["Île-de-France, France"] = {}, -- ["Martinique"] = {}, -- ["Mayotte"] = {}, ["Normandy, France"] = {wp = "%l (administrative region)"}, ["Nouvelle-Aquitaine, France"] = {}, ["Occitania, France"] = {wp = "%l (administrative region)"}, ["Occitanie, France"] = {alias_of = "Occitania, France", display = true}, ["Pays de la Loire, France"] = {}, ["Provence-Alpes-Côte d'Azur, France"] = {}, -- ["Réunion"] = {}, } -- administrative regions of France export.france_group = { default_container = "France", -- Canonically these are 'administrative regions' but also treat as 'region' ('administrative region' falls back -- to 'region'). default_placetype = "region", default_divs = { "communes", {type = "municipalities", cat_as = "communes"}, "departments", {type = "prefectures", cat_as = {"prefectures", "departmental capitals"}}, {type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}}, }, data = export.france_administrative_regions, } export.france_departments = { ["Ain, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 01 ["Aisne, France"] = {container = "Hauts-de-France"}, -- 02 ["Allier, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 03 ["Alpes-de-Haute-Provence, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 04 ["Hautes-Alpes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 05 ["Alpes-Maritimes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 06 ["Ardèche, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 07 ["Ardennes, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 08 ["Ariège, France"] = {container = "Occitania", wp = "%l (department)"}, -- 09 ["Aube, France"] = {container = "Grand Est"}, -- 10 ["Aude, France"] = {container = "Occitania"}, -- 11 ["Aveyron, France"] = {container = "Occitania"}, -- 12 ["Bouches-du-Rhône, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 13 ["Calvados, France"] = {container = "Normandy", wp = "%l (department)"}, -- 14 ["Cantal, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 15 ["Charente, France"] = {container = "Nouvelle-Aquitaine"}, -- 16 ["Charente-Maritime, France"] = {container = "Nouvelle-Aquitaine"}, -- 17 ["Cher, France"] = {container = "Centre-Val de Loire", wp = "%l (department)"}, -- 18 ["Corrèze, France"] = {container = "Nouvelle-Aquitaine"}, -- 19 ["Corse-du-Sud, France"] = {container = "Corsica"}, -- 2A ["Haute-Corse, France"] = {container = "Corsica"}, -- 2B ["Côte-d'Or, France"] = {container = "Bourgogne-Franche-Comté"}, -- 21 ["Côte d'Or, France"] = {alias_of = "Côte-d'Or, France", display = true}, ["Côtes-d'Armor, France"] = {container = "Brittany"}, -- 22 ["Côtes d'Armor, France"] = {alias_of = "Côtes-d'Armor, France", display = true}, ["Creuse, France"] = {container = "Nouvelle-Aquitaine"}, -- 23 ["Dordogne, France"] = {container = "Nouvelle-Aquitaine"}, -- 24 ["Doubs, France"] = {container = "Bourgogne-Franche-Comté"}, -- 25 ["Drôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 26 ["Eure, France"] = {container = "Normandy"}, -- 27 ["Eure-et-Loir, France"] = {container = "Centre-Val de Loire"}, -- 28 ["Finistère, France"] = {container = "Brittany"}, -- 29 ["Gard, France"] = {container = "Occitania"}, -- 30 ["Haute-Garonne, France"] = {container = "Occitania"}, -- 31 ["Gers, France"] = {container = "Occitania"}, -- 32 ["Gironde, France"] = {container = "Nouvelle-Aquitaine"}, -- 33 ["Hérault, France"] = {container = "Occitania"}, -- 34 ["Ille-et-Vilaine, France"] = {container = "Brittany"}, -- 35 ["Indre, France"] = {container = "Centre-Val de Loire"}, -- 36 ["Indre-et-Loire, France"] = {container = "Centre-Val de Loire"}, -- 37 ["Isère, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 38 ["Jura, France"] = {container = "Bourgogne-Franche-Comté", wp = "%l (department)"}, -- 39 ["Landes, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 40 ["Loir-et-Cher, France"] = {container = "Centre-Val de Loire"}, -- 41 ["Loire, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 42 ["Haute-Loire, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 43 ["Loire-Atlantique, France"] = {container = "Pays de la Loire"}, -- 44 ["Loiret, France"] = {container = "Centre-Val de Loire"}, -- 45 ["Lot, France"] = {container = "Occitania", wp = "%l (department)"}, -- 46 ["Lot-et-Garonne, France"] = {container = "Nouvelle-Aquitaine"}, -- 47 ["Lozère, France"] = {container = "Occitania"}, -- 48 ["Maine-et-Loire, France"] = {container = "Pays de la Loire"}, -- 49 ["Manche, France"] = {container = "Normandy"}, -- 50 ["Marne, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 51 ["Haute-Marne, France"] = {container = "Grand Est"}, -- 52 ["Mayenne, France"] = {container = "Pays de la Loire"}, -- 53 ["Meurthe-et-Moselle, France"] = {container = "Grand Est"}, -- 54 ["Meuse, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 55 ["Morbihan, France"] = {container = "Brittany"}, -- 56 ["Moselle, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 57 ["Nièvre, France"] = {container = "Bourgogne-Franche-Comté"}, -- 58 ["Nord, France"] = {container = "Hauts-de-France", wp = "%l (French department)"}, -- 59 ["Oise, France"] = {container = "Hauts-de-France"}, -- 60 ["Orne, France"] = {container = "Normandy"}, -- 61 ["Pas-de-Calais, France"] = {container = "Hauts-de-France"}, -- 62 ["Puy-de-Dôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 63 ["Pyrénées-Atlantiques, France"] = {container = "Nouvelle-Aquitaine"}, -- 64 ["Hautes-Pyrénées, France"] = {container = "Occitania"}, -- 65 ["Pyrénées-Orientales, France"] = {container = "Occitania"}, -- 66 ["Bas-Rhin, France"] = {container = "Grand Est"}, -- 67 ["Haut-Rhin, France"] = {container = "Grand Est"}, -- 68 ["Rhône, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 69D ["Metropolis of Lyon, France"] = {container = "Auvergne-Rhône-Alpes", the = true}, -- 69M ["Lyon Metropolis, France"] = {alias_of = "Metropolis of Lyon, France"}, ["Lyon, France"] = {alias_of = "Metropolis of Lyon, France"}, ["Haute-Saône, France"] = {container = "Bourgogne-Franche-Comté"}, -- 70 ["Saône-et-Loire, France"] = {container = "Bourgogne-Franche-Comté"}, -- 71 ["Sarthe, France"] = {container = "Pays de la Loire"}, -- 72 ["Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 73 ["Haute-Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 74 ["Paris, France"] = {container = "Île-de-France"}, -- 75 ["Seine-Maritime, France"] = {container = "Normandy"}, -- 76 ["Seine-et-Marne, France"] = {container = "Île-de-France"}, -- 77 ["Yvelines, France"] = {container = "Île-de-France"}, -- 78 ["Deux-Sèvres, France"] = {container = "Nouvelle-Aquitaine"}, -- 79 ["Somme, France"] = {container = "Hauts-de-France", wp = "%l (department)"}, -- 80 ["Tarn, France"] = {container = "Occitania", wp = "%l (department)"}, -- 81 ["Tarn-et-Garonne, France"] = {container = "Occitania"}, -- 82 ["Var, France"] = {container = "Provence-Alpes-Côte d'Azur", wp = "%l (department)"}, -- 83 ["Vaucluse, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 84 ["Vendée, France"] = {container = "Pays de la Loire"}, -- 85 ["Vienne, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 86 ["Haute-Vienne, France"] = {container = "Nouvelle-Aquitaine"}, -- 87 ["Vosges, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 88 ["Yonne, France"] = {container = "Bourgogne-Franche-Comté"}, -- 89 ["Territoire de Belfort, France"] = {container = "Bourgogne-Franche-Comté"}, -- 90 ["Essonne, France"] = {container = "Île-de-France"}, -- 91 ["Hauts-de-Seine, France"] = {container = "Île-de-France"}, -- 92 ["Seine-Saint-Denis, France"] = {container = "Île-de-France"}, -- 93 ["Val-de-Marne, France"] = {container = "Île-de-France"}, -- 94 ["Val-d'Oise, France"] = {container = "Île-de-France"}, -- 95 --["Guadeloupe"] = {container = "Guadeloupe"}, -- 971 --["Martinique"] = {container = "Martinique"}, -- 972 --["Guyane"] = {container = "French Guiana", wp = "French Guiana"}, -- 973 --["La Réunion"] = {container = "Réunion", wp = "Réunion"}, -- 974 --["Mayotte"] = {container = "Mayotte"}, -- 976 } export.france_departments_group = { placename_to_key = make_placename_to_key(", France"), canonicalize_key_container = make_canonicalize_key_container(", France", "region"), default_placetype = "department", default_divs = { "communes", {type = "municipalities", cat_as = "communes"}, }, data = export.france_departments, } export.germany_states = { ["Baden-Württemberg, Germany"] = {}, ["Bavaria, Germany"] = {}, -- Berlin, Bremen and Hamburg are effectively city-states and don't have districts ([[Kreise]]), so override -- the default_divs setting. Better not to include them at all since they're included as cities down below. -- ["Berlin"] = {divs = {}}, ["Brandenburg, Germany"] = {}, -- ["Bremen"] = {divs = {}}, -- ["Hamburg"] = {divs = {}}, ["Hesse, Germany"] = {}, ["Lower Saxony, Germany"] = {}, ["Mecklenburg-Vorpommern, Germany"] = {}, ["Mecklenburg-Western Pomerania, Germany"] = {alias_of = "Mecklenburg-Vorpommern, Germany", display = true}, ["North Rhine-Westphalia, Germany"] = {}, ["Rhineland-Palatinate, Germany"] = {}, ["Saarland, Germany"] = {}, ["Saxony, Germany"] = {}, ["Saxony-Anhalt, Germany"] = {}, ["Schleswig-Holstein, Germany"] = {}, ["Thuringia, Germany"] = {}, } -- states of Germany export.germany_group = { default_container = "Germany", default_placetype = "state", default_divs = {"districts", "municipalities"}, data = export.germany_states, } export.greece_regions = { ["Attica, Greece"] = {wp = "%l (region)"}, ["Central Greece, Greece"] = {wp = "%l (administrative region)"}, ["Central Macedonia, Greece"] = {}, ["Crete, Greece"] = {}, ["Eastern Macedonia and Thrace, Greece"] = {}, ["Epirus, Greece"] = {wp = "%l (region)"}, ["Ionian Islands, Greece"] = {the = true, wp = "%l (region)"}, ["North Aegean, Greece"] = {the = true}, -- I would expect 'the Peloponnese' but Wikipedia mostly has categories like [[w:Category:Geography of Peloponnese (region)]] -- and [[w:Category:Buildings and structures in Peloponnese (region)]]; only [[w:Category:People from the Peloponnese (region)]] -- has "the" in it. ["Peloponnese, Greece"] = {wp = "%l (region)"}, ["South Aegean, Greece"] = {the = true}, ["Thessaly, Greece"] = {}, ["Western Greece, Greece"] = {}, ["Western Macedonia, Greece"] = {}, ["Mount Athos, Greece"] = {placetype = {"autonomous region", "region"}, wp = "Monastic community of Mount Athos"}, } -- regions of Greece export.greece_group = { default_container = "Greece", default_placetype = "region", data = export.greece_regions, } local india_polity_with_divisions = {"divisions", "districts"} local india_polity_without_divisions = {"districts"} -- States and union territories of India. Only some of them are divided into divisions. export.india_states_and_union_territories = { ["Andaman and Nicobar Islands, India"] = {the = true, placetype = "union territory", divs = india_polity_without_divisions}, ["Andhra Pradesh, India"] = {divs = india_polity_without_divisions}, ["Arunachal Pradesh, India"] = {divs = india_polity_with_divisions}, ["Assam, India"] = {divs = india_polity_with_divisions}, ["Bihar, India"] = {divs = india_polity_with_divisions}, ["Chandigarh, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Chhattisgarh, India"] = {divs = india_polity_with_divisions}, ["Dadra and Nagar Haveli and Daman and Diu, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Delhi, India"] = {placetype = "union territory", divs = india_polity_with_divisions}, ["Goa, India"] = {divs = india_polity_without_divisions}, ["Gujarat, India"] = {divs = india_polity_without_divisions}, ["Haryana, India"] = {divs = india_polity_with_divisions}, ["Himachal Pradesh, India"] = {divs = india_polity_with_divisions}, ["Jammu and Kashmir, India"] = {placetype = "union territory", divs = india_polity_with_divisions, wp = "%l (union territory)"}, ["Jharkhand, India"] = {divs = india_polity_with_divisions}, ["Karnataka, India"] = {divs = india_polity_with_divisions}, ["Kerala, India"] = {divs = india_polity_without_divisions}, ["Ladakh, India"] = {placetype = "union territory", divs = india_polity_with_divisions}, ["Lakshadweep, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Madhya Pradesh, India"] = {divs = india_polity_with_divisions}, ["Maharashtra, India"] = {divs = india_polity_with_divisions}, ["Manipur, India"] = {divs = india_polity_without_divisions}, ["Meghalaya, India"] = {divs = india_polity_with_divisions}, ["Mizoram, India"] = {divs = india_polity_without_divisions}, ["Nagaland, India"] = {divs = india_polity_with_divisions}, ["Odisha, India"] = {divs = india_polity_with_divisions}, ["Puducherry, India"] = {placetype = "union territory", divs = india_polity_without_divisions, wp = "%l (union territory)"}, ["Pondicherry, India"] = {alias_of = "Puducherry, India", display = true}, ["Punjab, India"] = {divs = india_polity_with_divisions, wp = "%l, %c"}, ["Rajasthan, India"] = {divs = india_polity_with_divisions}, ["Sikkim, India"] = {divs = india_polity_without_divisions}, ["Tamil Nadu, India"] = {divs = india_polity_without_divisions}, ["Telangana, India"] = {divs = india_polity_without_divisions}, ["Tripura, India"] = {divs = india_polity_without_divisions}, ["Uttar Pradesh, India"] = {divs = india_polity_with_divisions}, ["Uttarakhand, India"] = {divs = india_polity_with_divisions}, ["West Bengal, India"] = {divs = india_polity_with_divisions}, } -- states and union territories of India export.india_group = { default_container = "India", default_placetype = "state", data = export.india_states_and_union_territories, } export.indonesia_provinces = { ["Aceh, Indonesia"] = {}, ["Bali, Indonesia"] = {}, ["Bangka Belitung Islands, Indonesia"] = {the = true}, ["Banten, Indonesia"] = {}, ["Bengkulu, Indonesia"] = {}, ["Central Java, Indonesia"] = {}, ["Central Kalimantan, Indonesia"] = {}, ["Central Papua, Indonesia"] = {}, ["Central Sulawesi, Indonesia"] = {}, ["East Java, Indonesia"] = {}, ["East Kalimantan, Indonesia"] = {}, ["East Nusa Tenggara, Indonesia"] = {}, ["Gorontalo, Indonesia"] = {}, ["Highland Papua, Indonesia"] = {wp = "%l"}, ["Special Capital Region of Jakarta, Indonesia"] = {the = true, wp = "Jakarta"}, ["Jakarta, Indonesia"] = {alias_of = "Special Capital Region of Jakarta, Indonesia"}, ["Jambi, Indonesia"] = {}, ["Lampung, Indonesia"] = {}, ["Maluku, Indonesia"] = {}, ["North Kalimantan, Indonesia"] = {}, ["North Maluku, Indonesia"] = {}, ["North Sulawesi, Indonesia"] = {}, ["North Papua, Indonesia"] = {}, ["North Sumatra, Indonesia"] = {}, ["Papua, Indonesia"] = {wp = "%l (province)"}, ["Riau, Indonesia"] = {}, ["Riau Islands, Indonesia"] = {the = true}, ["Southeast Sulawesi, Indonesia"] = {}, ["South Kalimantan, Indonesia"] = {}, ["South Papua, Indonesia"] = {}, ["South Sulawesi, Indonesia"] = {}, ["South Sumatra, Indonesia"] = {}, ["Southwest Papua, Indonesia"] = {}, ["West Java, Indonesia"] = {}, ["West Kalimantan, Indonesia"] = {}, ["West Nusa Tenggara, Indonesia"] = {}, ["West Papua, Indonesia"] = {wp = "%l (province)"}, ["West Sulawesi, Indonesia"] = {}, ["West Sumatra, Indonesia"] = {}, ["Special Region of Yogyakarta, Indonesia"] = {the = true}, ["Yogyakarta, Indonesia"] = {alias_of = "Special Region of Yogyakarta, Indonesia"}, } -- provinces of Indonesia export.indonesia_group = { default_container = "Indonesia", default_placetype = "province", -- per https://www.quora.com/Does-Indonesia-use-British-or-American-English, Indonesia tends to use American -- spellings. data = export.indonesia_provinces, } export.iran_provinces = { ["Alborz Province, Iran"] = {}, -- abbreviation AL, capital [[w:Karaj]] ["Ardabil Province, Iran"] = {}, -- abbreviation AR, capital [[w:Ardabil]] ["Bushehr Province, Iran"] = {}, -- abbreviation BU, capital [[w:Bushehr]] ["Chaharmahal and Bakhtiari Province, Iran"] = {}, -- abbreviation CB, capital [[w:Shahr-e Kord]] ["East Azerbaijan Province, Iran"] = {}, -- abbreviation EA, capital [[w:Tabriz]] ["Fars Province, Iran"] = {}, -- abbreviation FA, capital [[w:Shiraz]] ["Pars Province, Iran"] = {alias_of = "Fars Province, Iran", display = true}, ["Gilan Province, Iran"] = {}, -- abbreviation GN, capital [[w:Rasht]] ["Golestan Province, Iran"] = {}, -- abbreviation GO, capital [[w:Gorgan]] ["Hamadan Province, Iran"] = {}, -- abbreviation HA, capital [[w:Hamadan]] ["Hormozgan Province, Iran"] = {}, -- abbreviation HO, capital [[w:Bandar Abbas]] ["Ilam Province, Iran"] = {}, -- abbreviation IL, capital [[w:Ilam, Iran|Ilam]] ["Isfahan Province, Iran"] = {}, -- abbreviation IS, capital [[w:Isfahan]] ["Kerman Province, Iran"] = {}, -- abbreviation KN, capital [[w:Kerman]] ["Kermanshah Province, Iran"] = {}, -- abbreviation KE, capital [[w:Kermanshah]] ["Khuzestan Province, Iran"] = {}, -- abbreviation KH, capital [[w:Ahvaz]] ["Kohgiluyeh and Boyer-Ahmad Province, Iran"] = {}, -- abbreviation KB, capital [[w:Yasuj]] ["Kurdistan Province, Iran"] = {}, -- abbreviation KU, capital [[w:Sanandaj]] ["Lorestan Province, Iran"] = {}, -- abbreviation LO, capital [[w:Khorramabad]] ["Markazi Province, Iran"] = {}, -- abbreviation MA, capital [[w:Arak, Iran|Arak]] ["Mazandaran Province, Iran"] = {}, -- abbreviation MN, capital [[w:Sari, Iran|Sari]] ["North Khorasan Province, Iran"] = {}, -- abbreviation NK, capital [[w:Bojnord]] ["Qazvin Province, Iran"] = {}, -- abbreviation QA, capital [[w:Qazvin]] ["Qom Province, Iran"] = {}, -- abbreviation QM, capital [[w:Qom]] ["Razavi Khorasan Province, Iran"] = {}, -- abbreviation RK, capital [[w:Mashhad]] ["Semnan Province, Iran"] = {}, -- abbreviation SE, capital [[w:Semnan, Iran|Semnan]] ["Sistan and Baluchestan Province, Iran"] = {}, -- abbreviation SB, capital [[w:Zahedan]] ["South Khorasan Province, Iran"] = {}, -- abbreviation SK, capital [[w:Birjand]] ["Tehran Province, Iran"] = {}, -- abbreviation TE, capital [[w:Tehran]] ["West Azerbaijan Province, Iran"] = {}, -- abbreviation WA, capital [[w:Urmia]] ["Yazd Province, Iran"] = {}, -- abbreviation YA, capital [[w:Yazd]] ["Zanjan Province, Iran"] = {}, -- abbreviation ZA, capital [[w:Zanjan, Iran|Zanjan]] } -- provinces of Iran export.iran_group = { key_to_placename = make_key_to_placename(", Iran", " Province$"), placename_to_key = make_placename_to_key(", Iran", " Province"), default_container = "Iran", default_placetype = "province", -- There aren't nearly enough counties of Iran currently entered in any language to allow for categorizing them -- per-province. (As of 2025-05-09, there are only 6 counties in each of [[Category:en:Counties of Iran]], -- [[Category:fa:Counties of Iran]] and [[Category:ar:Counties of Iran]].) -- default_divs = "counties", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.iran_provinces, } export.ireland_counties = { ["County Carlow, Ireland"] = {}, ["County Cavan, Ireland"] = {}, ["County Clare, Ireland"] = {}, ["County Cork, Ireland"] = {}, ["County Donegal, Ireland"] = {}, ["County Dublin, Ireland"] = {}, ["County Galway, Ireland"] = {}, ["County Kerry, Ireland"] = {}, ["County Kildare, Ireland"] = {}, ["County Kilkenny, Ireland"] = {}, ["County Laois, Ireland"] = {}, ["County Leitrim, Ireland"] = {}, ["County Limerick, Ireland"] = {}, ["County Longford, Ireland"] = {}, ["County Louth, Ireland"] = {}, ["County Mayo, Ireland"] = {}, ["County Meath, Ireland"] = {}, ["County Monaghan, Ireland"] = {}, ["County Offaly, Ireland"] = {}, ["County Roscommon, Ireland"] = {}, ["County Sligo, Ireland"] = {}, ["County Tipperary, Ireland"] = {}, ["County Waterford, Ireland"] = {}, ["County Westmeath, Ireland"] = {}, ["County Wexford, Ireland"] = {}, ["County Wicklow, Ireland"] = {}, } local function make_irish_type_key_to_placename(container_pattern) return function(key) key = key:gsub(container_pattern, "") local elliptical_key = key:gsub("^County ", "") return key, elliptical_key end end local function make_irish_type_placename_to_key(container_suffix) return function(placename) if not placename:find("^County ") and not placename:find("^City ") then placename = "County " .. placename end return placename .. container_suffix end end -- counties of Ireland export.ireland_group = { key_to_placename = make_irish_type_key_to_placename(", Ireland$"), placename_to_key = make_irish_type_placename_to_key(", Ireland"), default_container = "Ireland", default_placetype = "county", data = export.ireland_counties, } export.italy_administrative_regions = { ["Abruzzo, Italy"] = {}, ["Aosta Valley, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Apulia, Italy"] = {}, ["Basilicata, Italy"] = {}, ["Calabria, Italy"] = {}, ["Campania, Italy"] = {}, ["Emilia-Romagna, Italy"] = {}, ["Friuli-Venezia Giulia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Lazio, Italy"] = {}, ["Liguria, Italy"] = {}, ["Lombardy, Italy"] = {}, ["Marche, Italy"] = {}, ["Molise, Italy"] = {}, ["Piedmont, Italy"] = {}, ["Sardinia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Sicily, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Trentino-Alto Adige, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Tuscany, Italy"] = {}, ["Umbria, Italy"] = {}, ["Veneto, Italy"] = {}, } -- administrative regions of Italy export.italy_group = { default_container = "Italy", default_placetype = "region", data = export.italy_administrative_regions, } -- table of Japanese prefectures; interpolated into the main 'places' table, but also needed separately export.japan_prefectures = { ["Aichi Prefecture, Japan"] = {}, ["Akita Prefecture, Japan"] = {}, ["Aomori Prefecture, Japan"] = {}, ["Chiba Prefecture, Japan"] = {}, ["Ehime Prefecture, Japan"] = {}, ["Fukui Prefecture, Japan"] = {}, ["Fukuoka Prefecture, Japan"] = {}, ["Fukushima Prefecture, Japan"] = {}, ["Gifu Prefecture, Japan"] = {}, ["Gunma Prefecture, Japan"] = {}, ["Hiroshima Prefecture, Japan"] = {}, ["Hokkaido Prefecture, Japan"] = {divs = "subprefectures", wp = "Hokkaido"}, ["Hyōgo Prefecture, Japan"] = {}, ["Hyogo Prefecture, Japan"] = {alias_of = "Hyōgo Prefecture, Japan", display = true}, ["Ibaraki Prefecture, Japan"] = {}, ["Ishikawa Prefecture, Japan"] = {}, ["Iwate Prefecture, Japan"] = {}, ["Kagawa Prefecture, Japan"] = {}, ["Kagoshima Prefecture, Japan"] = {}, ["Kanagawa Prefecture, Japan"] = {}, ["Kōchi Prefecture, Japan"] = {}, ["Kochi Prefecture, Japan"] = {alias_of = "Kōchi Prefecture, Japan", display = true}, ["Kumamoto Prefecture, Japan"] = {}, ["Kyoto Prefecture, Japan"] = {}, ["Mie Prefecture, Japan"] = {}, ["Miyagi Prefecture, Japan"] = {}, ["Miyazaki Prefecture, Japan"] = {}, ["Nagano Prefecture, Japan"] = {}, ["Nagasaki Prefecture, Japan"] = {}, ["Nara Prefecture, Japan"] = {}, ["Niigata Prefecture, Japan"] = {}, ["Ōita Prefecture, Japan"] = {}, ["Oita Prefecture, Japan"] = {alias_of = "Ōita Prefecture, Japan", display = true}, ["Okayama Prefecture, Japan"] = {}, ["Okinawa Prefecture, Japan"] = {}, ["Osaka Prefecture, Japan"] = {}, ["Saga Prefecture, Japan"] = {}, ["Saitama Prefecture, Japan"] = {}, ["Shiga Prefecture, Japan"] = {}, ["Shimane Prefecture, Japan"] = {}, ["Shizuoka Prefecture, Japan"] = {}, ["Tochigi Prefecture, Japan"] = {}, ["Tokushima Prefecture, Japan"] = {}, ["Tottori Prefecture, Japan"] = {}, ["Toyama Prefecture, Japan"] = {}, ["Wakayama Prefecture, Japan"] = {}, ["Yamagata Prefecture, Japan"] = {}, ["Yamaguchi Prefecture, Japan"] = {}, ["Yamanashi Prefecture, Japan"] = {}, } -- prefectures of Japan export.japan_group = { key_to_placename = make_key_to_placename(", Japan$", " Prefecture$"), placename_to_key = make_placename_to_key(", Japan", " Prefecture"), default_container = "Japan", default_placetype = "prefecture", data = export.japan_prefectures, } export.laos_provinces = { ["Attapeu Province, Laos"] = {}, ["Bokeo Province, Laos"] = {}, ["Bolikhamxai Province, Laos"] = {}, ["Champasak Province, Laos"] = {}, ["Houaphanh Province, Laos"] = {}, ["Khammouane Province, Laos"] = {}, ["Luang Namtha Province, Laos"] = {}, ["Luang Prabang Province, Laos"] = {}, ["Oudomxay Province, Laos"] = {}, ["Phongsaly Province, Laos"] = {}, ["Salavan Province, Laos"] = {}, ["Savannakhet Province, Laos"] = {}, ["Vientiane Province, Laos"] = {}, ["Vientiane Prefecture, Laos"] = {placetype = "prefecture", wp = "%l"}, ["Sainyabuli Province, Laos"] = {}, ["Sekong Province, Laos"] = {}, ["Xaisomboun Province, Laos"] = {}, ["Xiangkhouang Province, Laos"] = {}, } local function laos_placename_to_key(placename) if placename == "Vientiane Prefecture" then return placename .. ", Laos" end if placename:find(" Province$") then return placename .. ", Laos" end return placename .. " Province, Laos" end -- provinces of Laos export.laos_group = { key_to_placename = make_key_to_placename(", Laos$", {" Province$", " Prefecture$"}), placename_to_key = laos_placename_to_key, default_container = "Laos", default_placetype = "province", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.laos_provinces, } export.lebanon_governorates = { ["Akkar Governorate, Lebanon"] = {}, ["Baalbek-Hermel Governorate, Lebanon"] = {}, ["Beirut Governorate, Lebanon"] = {}, ["Beqaa Governorate, Lebanon"] = {}, ["Keserwan-Jbeil Governorate, Lebanon"] = {}, ["Mount Lebanon Governorate, Lebanon"] = {}, ["Nabatieh Governorate, Lebanon"] = {}, -- These two are generic enough that we don't want to automatically augment a use of `gov/North Governorate` or -- `gov/South Governorate` with `c/Lebanon`. ["North Governorate, Lebanon"] = {no_auto_augment_container = true}, ["South Governorate, Lebanon"] = {no_auto_augment_container = true}, } -- governorates of Lebanon export.lebanon_group = { key_to_placename = make_key_to_placename(", Lebanon$", " Governorate$"), placename_to_key = make_placename_to_key(", Lebanon", " Governorate"), default_container = "Lebanon", default_placetype = "governorate", data = export.lebanon_governorates, } export.malaysia_states = { ["Johor, Malaysia"] = {}, ["Kedah, Malaysia"] = {}, ["Kelantan, Malaysia"] = {}, ["Malacca, Malaysia"] = {}, ["Negeri Sembilan, Malaysia"] = {}, ["Pahang, Malaysia"] = {}, ["Penang, Malaysia"] = {}, ["Perak, Malaysia"] = {}, ["Perlis, Malaysia"] = {}, ["Sabah, Malaysia"] = {}, ["Sarawak, Malaysia"] = {}, ["Selangor, Malaysia"] = {}, ["Terengganu, Malaysia"] = {}, } -- states of Malaysia export.malaysia_group = { default_container = "Malaysia", default_placetype = "state", default_wp = "%l, %c", data = export.malaysia_states, } export.malta_regions = { -- Some of the regions are generic enough that we don't want to automatically augment a use of e.g. -- `r/Northern Region` with `c/Malta`. In particular; -- * "Eastern Region" also occurs at least in Ghana, Uganda, Iceland, Nigeria, Venezuela, North Macedonia and -- El Salvador; -- * "Northern Region" also occurs at least in Ghana, Uganda, Malawi, Nigeria, Canada and South Africa; -- * "Western Region" also occurs at least in Abu Dhabi, Bahrain, South Africa, Ghana, Iceland, Nepal, Nigeria, -- Serbia and Uganda; -- * "Southern Region" also occurs at least in Nigeria, Eritrea, Iceland, Ireland, Malawi and Serbia. ["Eastern Region, Malta"] = {no_auto_augment_container = true}, ["Gozo Region, Malta"] = {wp = "%l"}, ["Northern Region, Malta"] = {no_auto_augment_container = true}, ["Port Region, Malta"] = {}, ["Southern Region, Malta"] = {no_auto_augment_container = true}, ["Western Region, Malta"] = {no_auto_augment_container = true}, } -- regions of Malta export.malta_group = { key_to_placename = make_key_to_placename(", Malta$", " Region"), placename_to_key = make_placename_to_key(", Malta", " Region"), default_container = "Malta", default_placetype = "region", default_wp = "%l, %c", default_the = true, data = export.malta_regions, } export.mexico_states = { ["Aguascalientes, Mexico"] = {}, ["Baja California, Mexico"] = {}, -- not display-canonicalizing because the "Norte" could be for emphasis ["Baja California Norte, Mexico"] = {alias_of = "Baja California, Mexico"}, ["Baja California Sur, Mexico"] = {}, ["Campeche, Mexico"] = {}, ["Chiapas, Mexico"] = {}, ["Chihuahua, Mexico"] = {wp = "%l (state)"}, ["Coahuila, Mexico"] = {}, ["Colima, Mexico"] = {}, ["Durango, Mexico"] = {}, ["Guanajuato, Mexico"] = {}, ["Guerrero, Mexico"] = {}, ["Hidalgo, Mexico"] = {wp = "%l (state)"}, ["Jalisco, Mexico"] = {}, ["State of Mexico, Mexico"] = {the = true}, ["Mexico, Mexico"] = {alias_of = "State of Mexico, Mexico"}, -- differs in "the" -- ["Mexico City, Mexico"] = {}, doesn't belong here because it's a city ["Michoacán, Mexico"] = {}, ["Michoacan, Mexico"] = {alias_of = "Michoacán, Mexico", display = true}, ["Morelos, Mexico"] = {}, ["Nayarit, Mexico"] = {}, ["Nuevo León, Mexico"] = {}, ["Nuevo Leon, Mexico"] = {alias_of = "Nuevo León, Mexico", display = true}, ["Oaxaca, Mexico"] = {}, ["Puebla, Mexico"] = {}, ["Querétaro, Mexico"] = {}, ["Queretaro, Mexico"] = {alias_of = "Querétaro, Mexico", display = true}, ["Quintana Roo, Mexico"] = {}, ["San Luis Potosí, Mexico"] = {}, ["San Luis Potosi, Mexico"] = {alias_of = "San Luis Potosí, Mexico", display = true}, ["Sinaloa, Mexico"] = {}, ["Sonora, Mexico"] = {}, ["Tabasco, Mexico"] = {}, ["Tamaulipas, Mexico"] = {}, ["Tlaxcala, Mexico"] = {}, ["Veracruz, Mexico"] = {}, ["Yucatán, Mexico"] = {}, ["Yucatan, Mexico"] = {alias_of = "Yucatán, Mexico", display = true}, ["Zacatecas, Mexico"] = {}, } -- Mexican states export.mexico_group = { default_container = "Mexico", default_placetype = "state", data = export.mexico_states, } export.moldova_districts_and_autonomous_territorial_units = { ["Anenii Noi District, Moldova"] = {}, -- capital [[Anenii Noi]] ["Basarabeasca District, Moldova"] = {}, -- capital [[Basarabeasca]] ["Briceni District, Moldova"] = {}, -- capital [[Briceni]] ["Cahul District, Moldova"] = {}, -- capital [[Cahul]] ["Cantemir District, Moldova"] = {}, -- capital [[Cantemir, Moldova|Cantemir]] ["Călărași District, Moldova"] = {}, -- capital [[Călărași, Moldova|Călărași]] ["Căușeni District, Moldova"] = {}, -- capital [[Căușeni]] ["Cimișlia District, Moldova"] = {}, -- capital [[Cimișlia]] ["Criuleni District, Moldova"] = {}, -- capital [[Criuleni]] ["Dondușeni District, Moldova"] = {}, -- capital [[Dondușeni]] ["Drochia District, Moldova"] = {}, -- capital [[Drochia]] ["Dubăsari District, Moldova"] = {}, -- capital [[Cocieri]] ["Edineț District, Moldova"] = {}, -- capital [[Edineț]] ["Fălești District, Moldova"] = {}, -- capital [[Fălești]] ["Florești District, Moldova"] = {}, -- capital [[Florești, Moldova|Florești]] ["Glodeni District, Moldova"] = {}, -- capital [[Glodeni]] ["Hîncești District, Moldova"] = {}, -- capital [[Hîncești]] ["Ialoveni District, Moldova"] = {}, -- capital [[Ialoveni]] ["Leova District, Moldova"] = {}, -- capital [[Leova]] ["Nisporeni District, Moldova"] = {}, -- capital [[Nisporeni]] ["Ocnița District, Moldova"] = {}, -- capital [[Ocnița]] ["Orhei District, Moldova"] = {}, -- capital [[Orhei]] ["Rezina District, Moldova"] = {}, -- capital [[Rezina]] ["Rîșcani District, Moldova"] = {}, -- capital [[Rîșcani]] ["Sîngerei District, Moldova"] = {}, -- capital [[Sîngerei]] ["Soroca District, Moldova"] = {}, -- capital [[Soroca]] ["Strășeni District, Moldova"] = {}, -- capital [[Strășeni]] ["Șoldănești District, Moldova"] = {}, -- capital [[Șoldănești]] ["Ștefan Vodă District, Moldova"] = {}, -- capital [[Ștefan Vodă]] ["Taraclia District, Moldova"] = {}, -- capital [[Taraclia]] ["Telenești District, Moldova"] = {}, -- capital [[Telenești]] ["Ungheni District, Moldova"] = {}, -- capital [[Ungheni]] ["Chișinău, Moldova"] = {placetype = "municipality"}, ["Bălți, Moldova"] = {placetype = "municipality"}, ["Gagauzia, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Comrat]] -- the remainder are under the de-facto control of the unrecognized state of Transnistria ["Bender, Moldova"] = {placetype = "municipality"}, ["Tighina, Moldova"] = {alias_of = "Bender, Moldova"}, ["Transnistria, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Tiraspol]] ["Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova", the = true}, ["Administrative-Territorial Units of the Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova", the = true}, } local function moldova_placename_to_key(placename) local elliptical_key = placename .. ", Moldova" if export.moldova_districts_and_autonomous_territorial_units[elliptical_key] then return elliptical_key end if placename:find(" District$") then return placename .. ", Moldova" end return placename .. " District, Moldova" end -- Moldovan districts (raions) and autonomous territorial units export.moldova_group = { key_to_placename = make_key_to_placename(", Moldova$", " District"), placename_to_key = moldova_placename_to_key, default_container = "Moldova", default_placetype = {"district", "raion"}, default_divs = "communes", data = export.moldova_districts_and_autonomous_territorial_units, } export.morocco_regions = { ["Tangier-Tetouan-Al Hoceima, Morocco"] = {}, ["Oriental, Morocco"] = {wp = "%l (%c)"}, ["L'Oriental, Morocco"] = {alias_of = "Oriental, Morocco", display = true}, ["Fez-Meknes, Morocco"] = {}, ["Rabat-Sale-Kenitra, Morocco"] = {wp = "Rabat-Salé-Kénitra"}, ["Rabat-Salé-Kénitra, Morocco"] = {alias_of = "Rabat-Sale-Kenitra, Morocco", display = true}, ["Beni Mellal-Khenifra, Morocco"] = {wp = "Béni Mellal-Khénifra"}, ["Béni Mellal-Khénifra, Morocco"] = {alias_of = "Beni Mellal-Khenifra, Morocco", display = true}, ["Casablanca-Settat, Morocco"] = {}, ["Marrakesh-Safi, Morocco"] = {wp = "Marrakesh–Safi"}, -- WP title has en-dash ["Marrakech-Safi, Morocco"] = {alias_of = "Marrakesh-Safi, Morocco", display = true}, ["Draa-Tafilalet, Morocco"] = {wp = "Drâa-Tafilalet"}, ["Drâa-Tafilalet, Morocco"] = {alias_of = "Draa-Tafilalet, Morocco", display = true}, ["Souss-Massa, Morocco"] = {}, ["Guelmim-Oued Noun, Morocco"] = { keydesc = "+++. '''NOTE:''' This region lies partly within the disputed territory of [[Western Sahara]]" }, ["Laayoune-Sakia El Hamra, Morocco"] = { wp = "Laâyoune-Sakia El Hamra", keydesc = "+++. '''NOTE:''' This region lies almost completely within the disputed territory of [[Western Sahara]]", }, ["Laâyoune-Sakia El Hamra, Morocco"] = {alias_of = "Laayoune-Sakia El Hamra, Morocco", display = true}, ["Dakhla-Oued Ed-Dahab, Morocco"] = { keydesc = "+++. '''NOTE:''' This region lies completely within the disputed territory of [[Western Sahara]]", }, } -- regions of Morocco export.morocco_group = { default_container = "Morocco", default_placetype = "region", data = export.morocco_regions, } export.egypt_governorates = { ["Cairo Governorate, Egypt"] = {}, ["Giza Governorate, Egypt"] = {}, ["Sharqia Governorate, Egypt"] = {}, ["Dakahlia Governorate, Egypt"] = {}, ["Beheira Governorate, Egypt"] = {}, ["Minya Governorate, Egypt"] = {}, ["Qalyubia Governorate, Egypt"] = {}, ["Sohag Governorate, Egypt"] = {}, ["Alexandria Governorate, Egypt"] = {}, ["Gharbia Governorate, Egypt"] = {}, ["Asyut Governorate, Egypt"] = {}, ["Monufia Governorate, Egypt"] = {}, ["Faiyum Governorate, Egypt"] = {}, ["Kafr El Sheikh Governorate, Egypt"] = {}, ["Qena Governorate, Egypt"] = {}, ["Beni Suef Governorate, Egypt"] = {}, ["Damietta Governorate, Egypt"] = {}, ["Aswan Governorate, Egypt"] = {}, ["Ismailia Governorate, Egypt"] = {}, ["Luxor Governorate, Egypt"] = {}, ["Suez Governorate, Egypt"] = {}, ["Port Said Governorate, Egypt"] = {}, ["Matrouh Governorate, Egypt"] = {}, ["North Sinai Governorate, Egypt"] = {}, ["Red Sea Governorate, Egypt"] = {}, ["New Valley Governorate, Egypt"] = {}, ["South Sinai Governorate, Egypt"] = {}, } -- governorates of Egypt export.egypt_group = { key_to_placename = make_key_to_placename(", Egypt$", " Governorate$"), placename_to_key = make_placename_to_key(", Egypt", " Governorate"), default_container = "Egypt", default_placetype = "governorate", data = export.egypt_governorates, } export.netherlands_provinces = { ["Drenthe, Netherlands"] = {}, ["Flevoland, Netherlands"] = {}, ["Friesland, Netherlands"] = {}, ["Gelderland, Netherlands"] = {}, ["Groningen, Netherlands"] = {wp = "%l (province)"}, ["Limburg, Netherlands"] = {wp = "%l (%c)"}, ["North Brabant, Netherlands"] = {}, -- Foreign forms get display-canonicalized. ["Noord-Brabant, Netherlands"] = {alias_of = "North Brabant, Netherlands", display = true}, ["North Holland, Netherlands"] = {}, ["Noord-Holland, Netherlands"] = {alias_of = "North Holland, Netherlands", display = true}, ["Overijssel, Netherlands"] = {}, ["South Holland, Netherlands"] = {}, ["Zuid-Holland, Netherlands"] = {alias_of = "South Holland, Netherlands", display = true}, ["Utrecht, Netherlands"] = {wp = "%l (province)"}, ["Zeeland, Netherlands"] = {}, } -- provinces of the Netherlands export.netherlands_group = { default_container = "Netherlands", default_placetype = "province", default_divs = "municipalities", data = export.netherlands_provinces, } export.new_zealand_regions = { -- North Island regions ["Northland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-NTL, number 1, capital [[Whangārei]] ["Auckland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-AUK, number 2, capital [[Auckland]] ["Waikato, New Zealand"] = {}, -- ISO 3166-2 code NZ-WKO, number 3, capital [[Hamilton, New Zealand|Hamilton]] ["Bay of Plenty, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-BOP, number 4, capital [[Whakatāne]] ["Gisborne, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-GIS, number 5, capital [[Gisborne, New Zealand|Gisborne]] ["Hawke's Bay, New Zealand"] = {}, -- ISO 3166-2 code NZ-HKB, number 6, capital [[Napier, New Zealand|Napier]] ["Taranaki, New Zealand"] = {}, -- ISO 3166-2 code NZ-TKI, number 7, capital [[Stratford, New Zealand|Stratford]] ["Manawatū-Whanganui, New Zealand"] = {}, -- ISO 3166-2 code NZ-MWT, number 8, capital [[Palmerston North]] ["Manawatu-Whanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true}, ["Manawatu-Wanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true}, ["Wellington, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-WGN, number 9, capital [[Wellington]] -- South Island regions ["Tasman, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-TAS, number 10, capital [[Richmond, New Zealand|Richmond]] ["Nelson, New Zealand"] = {placetype = {"region", "city"}, wp = "%l, %c", is_city = true}, -- ISO 3166-2 code NZ-NSN, number 11, capital [[Nelson, New Zealand|Nelson]] ["Marlborough, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-MBH, number 12, capital [[Blenheim, New Zealand|Blenheim]] ["West Coast, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-WTC, number 13, capital [[Greymouth]] ["Canterbury, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-CAN, number 14, capital [[Christchurch]] ["Otago, New Zealand"] = {}, -- ISO 3166-2 code NZ-OTA, number 15, capital [[Dunedin]] ["Southland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-STL, number 16, capital [[Invercargill]] } -- regions of New Zealand export.new_zealand_group = { default_container = "New Zealand", default_placetype = "region", data = export.new_zealand_regions, } export.nigeria_states = { ["Abia State, Nigeria"] = {}, ["Adamawa State, Nigeria"] = {}, ["Akwa Ibom State, Nigeria"] = {}, ["Anambra State, Nigeria"] = {}, ["Bauchi State, Nigeria"] = {}, ["Bayelsa State, Nigeria"] = {}, ["Benue State, Nigeria"] = {}, ["Borno State, Nigeria"] = {}, ["Cross River State, Nigeria"] = {}, ["Delta State, Nigeria"] = {}, ["Ebonyi State, Nigeria"] = {}, ["Edo State, Nigeria"] = {}, ["Ekiti State, Nigeria"] = {}, ["Enugu State, Nigeria"] = {}, ["Federal Capital Territory, Nigeria"] = { -- not a state but allow it to be referenced as one in holonyms placetype = {"federal territory", "territory", "state"}, the = true, wp = "%l (%c)", }, ["Gombe State, Nigeria"] = {}, ["Imo State, Nigeria"] = {}, ["Jigawa State, Nigeria"] = {}, ["Kaduna State, Nigeria"] = {}, ["Kano State, Nigeria"] = {}, ["Katsina State, Nigeria"] = {}, ["Kebbi State, Nigeria"] = {}, ["Kogi State, Nigeria"] = {}, ["Kwara State, Nigeria"] = {}, ["Lagos State, Nigeria"] = {}, ["Nasarawa State, Nigeria"] = {}, ["Niger State, Nigeria"] = {}, ["Ogun State, Nigeria"] = {}, ["Ondo State, Nigeria"] = {}, ["Osun State, Nigeria"] = {}, ["Oyo State, Nigeria"] = {}, ["Plateau State, Nigeria"] = {}, ["Rivers State, Nigeria"] = {}, ["Sokoto State, Nigeria"] = {}, ["Taraba State, Nigeria"] = {}, ["Yobe State, Nigeria"] = {}, ["Zamfara State, Nigeria"] = {}, } -- states of Nigeria export.nigeria_group = { key_to_placename = make_key_to_placename(", Nigeria$", " State$"), placename_to_key = make_placename_to_key(", Nigeria", " State"), default_container = "Nigeria", default_placetype = "state", data = export.nigeria_states, } export.north_korea_provinces = { ["Chagang Province, North Korea"] = {}, ["North Hamgyong Province, North Korea"] = {}, ["South Hamgyong Province, North Korea"] = {}, ["North Hwanghae Province, North Korea"] = {}, ["South Hwanghae Province, North Korea"] = {}, ["Kangwon Province, North Korea"] = {wp = "%l (%c)"}, ["North Pyongan Province, North Korea"] = {}, ["South Pyongan Province, North Korea"] = {}, ["Ryanggang Province, North Korea"] = {}, } -- provinces of North Korea export.north_korea_group = { key_to_placename = make_key_to_placename(", North Korea$", " Province$"), placename_to_key = make_placename_to_key(", North Korea", " Province"), default_container = "North Korea", default_placetype = "province", data = export.north_korea_provinces, } export.norwegian_counties = { ["Oslo, Norway"] = {}, ["Rogaland, Norway"] = {}, ["Møre og Romsdal, Norway"] = {}, ["Nordland, Norway"] = {}, ["Østfold, Norway"] = {}, ["Akershus, Norway"] = {}, ["Buskerud, Norway"] = {}, -- the following two were merged into Innlandet -- ["Hedmark, Norway"] = {}, -- ["Oppland, Norway"] = {}, ["Innlandet, Norway"] = {}, ["Vestfold, Norway"] = {}, ["Telemark, Norway"] = {}, -- the following two were merged into Agder -- ["Aust-Agder, Norway"] = {}, -- ["Vest-Agder, Norway"] = {}, ["Agder, Norway"] = {}, -- the following two were merged into Vestland -- ["Hordaland, Norway"] = {}, -- ["Sogn og Fjordane, Norway"] = {}, ["Vestland, Norway"] = {}, ["Trøndelag, Norway"] = {}, ["Troms, Norway"] = {}, ["Finnmark, Norway"] = {}, } -- counties of Norway export.norway_group = { default_container = "Norway", default_placetype = "county", data = export.norwegian_counties, } export.pakistan_provinces_and_territories = { ["Azad Kashmir, Pakistan"] = { placetype = {"administrative territory", "autonomous territory", "territory"}, }, ["Azad Jammu and Kashmir, Pakistan"] = {alias_of = "Azad Kashmir, Pakistan", display = true}, ["Balochistan, Pakistan"] = {wp = "%l, %c"}, ["Gilgit-Baltistan, Pakistan"] = { placetype = {"administrative territory", "territory"}, }, ["Islamabad Capital Territory, Pakistan"] = { the = true, divs = {}, -- no divisions placetype = {"federal territory", "administrative territory", "territory"}, }, -- Islamabad is an accepted alias for Islamabad Capital Territory given the above placetypes ["Islamabad, Pakistan"] = {alias_of = "Islamabad Capital Territory, Pakistan"}, ["Khyber Pakhtunkhwa, Pakistan"] = {}, ["Punjab, Pakistan"] = {wp = "%l, %c"}, ["Sindh, Pakistan"] = {}, } -- provinces and territories of Pakistan export.pakistan_group = { default_container = "Pakistan", default_placetype = "province", default_divs = "divisions", data = export.pakistan_provinces_and_territories, } export.philippines_provinces = { ["Abra, Philippines"] = {wp = "%l (province)"}, ["Agusan del Norte, Philippines"] = {}, ["Agusan del Sur, Philippines"] = {}, ["Aklan, Philippines"] = {}, ["Albay, Philippines"] = {}, ["Antique, Philippines"] = {wp = "%l (province)"}, ["Apayao, Philippines"] = {}, ["Aurora, Philippines"] = {wp = "%l (province)"}, ["Basilan, Philippines"] = {}, ["Bataan, Philippines"] = {}, ["Batanes, Philippines"] = {}, ["Batangas, Philippines"] = {}, ["Benguet, Philippines"] = {}, ["Biliran, Philippines"] = {}, ["Bohol, Philippines"] = {}, ["Bukidnon, Philippines"] = {}, ["Bulacan, Philippines"] = {}, ["Cagayan, Philippines"] = {}, ["Camarines Norte, Philippines"] = {}, ["Camarines Sur, Philippines"] = {}, ["Camiguin, Philippines"] = {}, ["Capiz, Philippines"] = {}, ["Catanduanes, Philippines"] = {}, ["Cavite, Philippines"] = {}, ["Cebu, Philippines"] = {}, ["Cotabato, Philippines"] = {}, ["Davao de Oro, Philippines"] = {}, ["Davao del Norte, Philippines"] = {}, ["Davao del Sur, Philippines"] = {}, ["Davao Occidental, Philippines"] = {}, ["Davao Oriental, Philippines"] = {}, ["Dinagat Islands, Philippines"] = {the = true}, ["Eastern Samar, Philippines"] = {}, ["Guimaras, Philippines"] = {}, ["Ifugao, Philippines"] = {}, ["Ilocos Norte, Philippines"] = {}, ["Ilocos Sur, Philippines"] = {}, ["Iloilo, Philippines"] = {}, ["Isabela, Philippines"] = {wp = "%l (province)"}, ["Kalinga, Philippines"] = {wp = "%l (province)"}, ["La Union, Philippines"] = {}, ["Laguna, Philippines"] = {wp = "%l (province)"}, ["Lanao del Norte, Philippines"] = {}, ["Lanao del Sur, Philippines"] = {}, ["Leyte, Philippines"] = {wp = "%l (province)"}, ["Maguindanao del Norte, Philippines"] = {}, ["Maguindanao del Sur, Philippines"] = {}, ["Marinduque, Philippines"] = {}, ["Masbate, Philippines"] = {}, ["Misamis Occidental, Philippines"] = {}, ["Misamis Oriental, Philippines"] = {}, ["Mountain Province, Philippines"] = {}, ["Negros Occidental, Philippines"] = {}, ["Negros Oriental, Philippines"] = {}, ["Northern Samar, Philippines"] = {}, ["Nueva Ecija, Philippines"] = {}, ["Nueva Vizcaya, Philippines"] = {}, ["Occidental Mindoro, Philippines"] = {}, ["Oriental Mindoro, Philippines"] = {}, ["Palawan, Philippines"] = {}, ["Pampanga, Philippines"] = {}, ["Pangasinan, Philippines"] = {}, ["Quezon, Philippines"] = {}, ["Quirino, Philippines"] = {}, ["Rizal, Philippines"] = {wp = "%l (province)"}, ["Romblon, Philippines"] = {}, ["Samar, Philippines"] = {wp = "%l (province)"}, ["Sarangani, Philippines"] = {}, ["Siquijor, Philippines"] = {}, ["Sorsogon, Philippines"] = {}, ["South Cotabato, Philippines"] = {}, ["Southern Leyte, Philippines"] = {}, ["Sultan Kudarat, Philippines"] = {}, ["Sulu, Philippines"] = {}, ["Surigao del Norte, Philippines"] = {}, ["Surigao del Sur, Philippines"] = {}, ["Tarlac, Philippines"] = {}, ["Tawi-Tawi, Philippines"] = {}, ["Zambales, Philippines"] = {}, ["Zamboanga del Norte, Philippines"] = {}, ["Zamboanga del Sur, Philippines"] = {}, ["Zamboanga Sibugay, Philippines"] = {}, -- not a province but treated as one; allow it to be referred to as a province in holonyms ["Metro Manila, Philippines"] = {placetype = {"region", "province"}}, } -- provinces of the Philippines export.philippines_group = { default_container = "Philippines", default_placetype = "province", default_divs = {"municipalities", "barangays"}, data = export.philippines_provinces, } export.poland_voivodeships = { ["Lower Silesian Voivodeship, Poland"] = {}, -- abbr DS, code 02, capital Wrocław ["Kuyavian-Pomeranian Voivodeship, Poland"] = {}, -- abbr KP, code 04, capital Bydgoszcz (seat of voivode), Toruń (seat of sejmik and marshal) ["Lublin Voivodeship, Poland"] = {}, -- abbr LU, code 06, capital Lublin ["Lubusz Voivodeship, Poland"] = {}, -- abbr LB, code 08, capital Gorzów Wielkopolski (seat of voivode), Zielona Góra (seat of sejmik and marshal) ["Lodz Voivodeship, Poland"] = {wp = "Łódź Voivodeship"}, -- abbr LD, code 10, capital Łódź ["Łódź Voivodeship, Poland"] = {alias_of = "Lodz Voivodeship, Poland", display = true, display_as_full = true}, ["Lesser Poland Voivodeship, Poland"] = {}, -- abbr MA, code 12, capital Kraków ["Masovian Voivodeship, Poland"] = {}, -- abbr MZ, code 14, capital Warsaw ["Opole Voivodeship, Poland"] = {}, -- abbr OP, code 16, capital Opole ["Subcarpathian Voivodeship, Poland"] = {}, -- abbr PK, code 18, capital Rzeszów ["Podlaskie Voivodeship, Poland"] = {}, -- abbr PD, code 20, capital Białystok ["Pomeranian Voivodeship, Poland"] = {}, -- abbr PM, code 22, capital Gdańsk ["Silesian Voivodeship, Poland"] = {}, -- abbr SL, code 24, capital Katowice ["Holy Cross Voivodeship, Poland"] = {wp = "Świętokrzyskie Voivodeship"}, -- abbr SK, code 26, capital Kielce ["Świętokrzyskie Voivodeship, Poland"] = {alias_of = "Holy Cross Voivodeship, Poland", display = true, display_as_full = true}, ["Warmian-Masurian Voivodeship, Poland"] = {}, -- abbr WN, code 28, capital Olsztyn ["Greater Poland Voivodeship, Poland"] = {}, -- abbr WP, code 30, capital Poznań ["West Pomeranian Voivodeship, Poland"] = {}, -- abbr ZP, code 32, capital Szczecin } -- voivodeships of Poland export.poland_group = { key_to_placename = make_key_to_placename(", Poland$", " Voivodeship$"), placename_to_key = make_placename_to_key(", Poland", " Voivodeship"), default_container = "Poland", default_placetype = "voivodeship", default_divs = { -- "counties", -- not enough of them currently {type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}}, }, data = export.poland_voivodeships, } export.portugal_districts_and_autonomous_regions = { ["Azores, Portugal"] = {the = true, placetype = {"autonomous region", "region"}}, ["Aveiro District, Portugal"] = {}, ["Beja District, Portugal"] = {}, ["Braga District, Portugal"] = {}, ["Bragança District, Portugal"] = {}, ["Castelo Branco District, Portugal"] = {}, ["Coimbra District, Portugal"] = {}, ["Évora District, Portugal"] = {}, ["Faro District, Portugal"] = {}, ["Guarda District, Portugal"] = {}, ["Leiria District, Portugal"] = {}, ["Lisbon District, Portugal"] = {}, ["Lisboa District, Portugal"] = {alias_of = "Lisbon District, Portugal", display = true}, ["Madeira, Portugal"] = {placetype = {"autonomous region", "region"}}, ["Portalegre District, Portugal"] = {}, ["Porto District, Portugal"] = {}, ["Santarém District, Portugal"] = {}, ["Setúbal District, Portugal"] = {}, ["Viana do Castelo District, Portugal"] = {}, ["Vila Real District, Portugal"] = {}, ["Viseu District, Portugal"] = {}, } local function portugal_placename_to_key(placename) if placename == "Azores" or placename == "Madeira" then return placename .. ", Portugal" end if placename:find(" District$") then return placename .. ", Portugal" end return placename .. " District, Portugal" end -- districts and autonomous regions of Portugal export.portugal_group = { key_to_placename = make_key_to_placename(", Portugal$", " District$"), placename_to_key = portugal_placename_to_key, default_container = "Portugal", default_placetype = "district", default_divs = "municipalities", data = export.portugal_districts_and_autonomous_regions, } export.romania_counties = { ["Alba County, Romania"] = {}, ["Arad County, Romania"] = {}, ["Argeș County, Romania"] = {}, ["Bacău County, Romania"] = {}, ["Bihor County, Romania"] = {}, ["Bistrița-Năsăud County, Romania"] = {}, ["Botoșani County, Romania"] = {}, ["Brașov County, Romania"] = {}, ["Brăila County, Romania"] = {}, -- Bucharest: not in a county ["Buzău County, Romania"] = {}, ["Caraș-Severin County, Romania"] = {}, ["Cluj County, Romania"] = {}, ["Constanța County, Romania"] = {}, ["Covasna County, Romania"] = {}, ["Călărași County, Romania"] = {}, ["Dolj County, Romania"] = {}, ["Dâmbovița County, Romania"] = {}, ["Galați County, Romania"] = {}, ["Giurgiu County, Romania"] = {}, ["Gorj County, Romania"] = {}, ["Harghita County, Romania"] = {}, ["Hunedoara County, Romania"] = {}, ["Ialomița County, Romania"] = {}, ["Iași County, Romania"] = {}, ["Ilfov County, Romania"] = {}, ["Maramureș County, Romania"] = {}, ["Mehedinți County, Romania"] = {}, ["Mureș County, Romania"] = {}, ["Neamț County, Romania"] = {}, ["Olt County, Romania"] = {}, ["Prahova County, Romania"] = {}, ["Satu Mare County, Romania"] = {}, ["Sibiu County, Romania"] = {}, ["Suceava County, Romania"] = {}, ["Sălaj County, Romania"] = {}, ["Teleorman County, Romania"] = {}, ["Timiș County, Romania"] = {}, ["Tulcea County, Romania"] = {}, ["Vaslui County, Romania"] = {}, ["Vrancea County, Romania"] = {}, ["Vâlcea County, Romania"] = {}, } -- counties of Romania export.romania_group = { key_to_placename = make_key_to_placename(", Romania$", " County$"), placename_to_key = make_placename_to_key(", Romania", " County"), default_container = "Romania", default_placetype = "county", default_divs = "communes", data = export.romania_counties, } local function make_russia_federal_subject_spec(spectype, use_the, wp) return { placetype = spectype, the = not not use_the, bare_category_parent_type = {"federal subjects", spectype .. "s"}, wp = wp, } end local russia_autonomous_okrug_no_the = {placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}} local russia_autonomous_okrug_the = {placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}, the = true} local russia_krai = make_russia_federal_subject_spec("krai") local russia_oblast = make_russia_federal_subject_spec("oblast") local russia_republic_the = make_russia_federal_subject_spec("republic", "use the") local russia_republic_no_the = make_russia_federal_subject_spec("republic") export.russia_federal_subjects = { -- autonomous oblasts ["Jewish Autonomous Oblast, Russia"] = {the = true, placetype = {"autonomous oblast", "oblast"}, bare_category_parent_type = {"federal subjects", "autonomous oblasts"}}, -- autonomous okrugs ["Chukotka Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Chukotka, Russia"] = {alias_of = "Chukotka Autonomous Okrug, Russia"}, ["Khanty-Mansi Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Khanty-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Khantia-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Yugra, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Nenetsia, Russia"] = {alias_of = "Nenets Autonomous Okrug, Russia"}, ["Yamalo-Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Yamalia, Russia"] = {alias_of = "Yamalo-Nenets Autonomous Okrug, Russia"}, -- krais ["Altai Krai, Russia"] = russia_krai, ["Kamchatka Krai, Russia"] = russia_krai, ["Khabarovsk Krai, Russia"] = russia_krai, ["Krasnodar Krai, Russia"] = russia_krai, ["Krasnoyarsk Krai, Russia"] = russia_krai, ["Perm Krai, Russia"] = russia_krai, ["Primorsky Krai, Russia"] = russia_krai, ["Stavropol Krai, Russia"] = russia_krai, ["Zabaykalsky Krai, Russia"] = russia_krai, -- oblasts ["Amur Oblast, Russia"] = russia_oblast, ["Arkhangelsk Oblast, Russia"] = russia_oblast, ["Astrakhan Oblast, Russia"] = russia_oblast, ["Belgorod Oblast, Russia"] = russia_oblast, ["Bryansk Oblast, Russia"] = russia_oblast, ["Chelyabinsk Oblast, Russia"] = russia_oblast, ["Irkutsk Oblast, Russia"] = russia_oblast, ["Ivanovo Oblast, Russia"] = russia_oblast, ["Kaliningrad Oblast, Russia"] = russia_oblast, ["Kaluga Oblast, Russia"] = russia_oblast, ["Kemerovo Oblast, Russia"] = russia_oblast, ["Kirov Oblast, Russia"] = russia_oblast, ["Kostroma Oblast, Russia"] = russia_oblast, ["Kurgan Oblast, Russia"] = russia_oblast, ["Kursk Oblast, Russia"] = russia_oblast, ["Leningrad Oblast, Russia"] = russia_oblast, ["Lipetsk Oblast, Russia"] = russia_oblast, ["Magadan Oblast, Russia"] = russia_oblast, ["Moscow Oblast, Russia"] = russia_oblast, ["Murmansk Oblast, Russia"] = russia_oblast, ["Nizhny Novgorod Oblast, Russia"] = russia_oblast, ["Novgorod Oblast, Russia"] = russia_oblast, ["Novosibirsk Oblast, Russia"] = russia_oblast, ["Omsk Oblast, Russia"] = russia_oblast, ["Orenburg Oblast, Russia"] = russia_oblast, ["Oryol Oblast, Russia"] = russia_oblast, ["Penza Oblast, Russia"] = russia_oblast, ["Pskov Oblast, Russia"] = russia_oblast, ["Rostov Oblast, Russia"] = russia_oblast, ["Ryazan Oblast, Russia"] = russia_oblast, ["Sakhalin Oblast, Russia"] = russia_oblast, ["Samara Oblast, Russia"] = russia_oblast, ["Saratov Oblast, Russia"] = russia_oblast, ["Smolensk Oblast, Russia"] = russia_oblast, ["Sverdlovsk Oblast, Russia"] = russia_oblast, ["Tambov Oblast, Russia"] = russia_oblast, ["Tomsk Oblast, Russia"] = russia_oblast, ["Tula Oblast, Russia"] = russia_oblast, ["Tver Oblast, Russia"] = russia_oblast, ["Tyumen Oblast, Russia"] = russia_oblast, ["Ulyanovsk Oblast, Russia"] = russia_oblast, ["Vladimir Oblast, Russia"] = russia_oblast, ["Volgograd Oblast, Russia"] = russia_oblast, ["Vologda Oblast, Russia"] = russia_oblast, ["Voronezh Oblast, Russia"] = russia_oblast, ["Yaroslavl Oblast, Russia"] = russia_oblast, -- republics -- -- We only need to include cases that aren't just shortened versions of the full federal subject name (i.e. where -- words like "Republic" and "Oblast" are omitted but the name is not otherwise modified; these are handled by -- key_to_placename). Non-display-canonicalizing aliases are generally due to differences in the presence or absence -- of "the". ["Adygea, Russia"] = russia_republic_no_the, ["Republic of Adygea, Russia"] = {alias_of = "Adygea, Russia", the = true}, ["Bashkortostan, Russia"] = russia_republic_no_the, ["Republic of Bashkortostan, Russia"] = {alias_of = "Bashkortostan, Russia", the = true}, ["Bashkiria, Russia"] = {alias_of = "Bashkortostan, Russia"}, ["Buryatia, Russia"] = russia_republic_no_the, ["Republic of Buryatia, Russia"] = {alias_of = "Buryatia, Russia", the = true}, ["Dagestan, Russia"] = russia_republic_no_the, ["Republic of Dagestan, Russia"] = {alias_of = "Dagestan, Russia", the = true}, ["Ingushetia, Russia"] = russia_republic_no_the, ["Republic of Ingushetia, Russia"] = {alias_of = "Ingushetia, Russia", the = true}, ["Kalmykia, Russia"] = russia_republic_no_the, ["Republic of Kalmykia, Russia"] = {alias_of = "Kalmykia, Russia", the = true}, ["Karelia, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Karelia"), ["Republic of Karelia, Russia"] = {alias_of = "Karelia, Russia", the = true}, ["Khakassia, Russia"] = russia_republic_no_the, ["Republic of Khakassia, Russia"] = {alias_of = "Khakassia, Russia", the = true}, ["Mordovia, Russia"] = russia_republic_no_the, ["Republic of Mordovia, Russia"] = {alias_of = "Mordovia, Russia", the = true}, ["North Ossetia-Alania, Russia"] = make_russia_federal_subject_spec("republic", nil, "North Ossetia–Alania"), -- with en-dash ["Republic of North Ossetia-Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia", the = true}, ["North Ossetia, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true}, ["Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true}, ["Tatarstan, Russia"] = russia_republic_no_the, ["Republic of Tatarstan, Russia"] = {alias_of = "Tatarstan, Russia", the = true}, ["Altai Republic, Russia"] = russia_republic_the, ["Chechnya, Russia"] = russia_republic_no_the, ["Chechen Republic, Russia"] = {alias_of = "Chechnya, Russia", the = true}, ["Chuvashia, Russia"] = russia_republic_no_the, ["Chuvash Republic, Russia"] = {alias_of = "Chuvashia, Russia", the = true}, ["Kabardino-Balkaria, Russia"] = russia_republic_no_the, ["Kabardino-Balkariya, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = true}, ["Kabardino-Balkarian Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", the = true}, ["Kabardino-Balkar Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = "Kabardino-Balkarian Republic, Russia", the = true}, ["Karachay-Cherkessia, Russia"] = russia_republic_no_the, ["Karachay-Cherkess Republic, Russia"] = {alias_of = "Karachay-Cherkessia, Russia"}, ["Komi, Russia"] = make_russia_federal_subject_spec("republic", nil, "Komi Republic"), ["Komi Republic, Russia"] = {alias_of = "Komi, Russia", the = true}, ["Mari El, Russia"] = russia_republic_no_the, ["Mari El Republic, Russia"] = {alias_of = "Mari El, Russia", the = true}, ["Sakha, Russia"] = make_russia_federal_subject_spec("republic", nil, "Sakha Republic"), ["Sakha Republic, Russia"] = {alias_of = "Sakha, Russia", the = true}, ["Yakutia, Russia"] = {alias_of = "Sakha, Russia"}, ["Yakutiya, Russia"] = {alias_of = "Sakha, Russia", display = "Yakutia, Russia"}, ["Republic of Yakutia (Sakha), Russia"] = {alias_of = "Sakha, Russia", display = "Sakha Republic, Russia", the = true}, ["Tuva, Russia"] = russia_republic_no_the, ["Tyva, Russia"] = {alias_of = "Tuva, Russia", display = true}, ["Tuva Republic, Russia"] = {alias_of = "Tuva, Russia", the = true}, ["Tyva Republic, Russia"] = {alias_of = "Tuva, Russia", display= "Tuva Republic, Russia", the = true}, ["Udmurtia, Russia"] = russia_republic_no_the, ["Udmurt Republic, Russia"] = {alias_of = "Udmurtia, Russia", the = true}, -- Not included due to being unrecognized and only partly controlled: -- ["Crimea, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Crimea (Russia)") -- ["Donetsk People's Republic, Russia"] = russia_republic_the, -- ["Luhansk People's Republic, Russia"] = russia_republic_the, -- ["Zaporozhye Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Zaporizhzhia Oblast"), -- ["Kherson Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Kherson Oblast"), -- There are also federal cities (not included because they're cities): -- Moscow, Saint Petersburg; Sevastopol (unrecognized; same status as for "Crimea, Russia" above) } local function russia_key_to_placename(key) key = key:gsub(",.*", "") local full_placename = key if key == "Jewish Autonomous Oblast" then return full_placename, full_placename end local elliptical_placename for _, suffix in ipairs({"Krai", "Oblast"}) do elliptical_placename = key:match("^(.*) " .. suffix .. "$") if elliptical_placename then return full_placename, elliptical_placename end end return full_placename, full_placename end local function russia_placename_to_key(placename) local key = placename .. ", Russia" if export.russia_federal_subjects[key] then return key end -- We allow the user to say e.g. "obl/Samara" in place of "obl/Samara Oblast". for _, suffix in ipairs({"Krai", "Oblast"}) do local suffixed_key = placename .. " " .. suffix .. ", Russia" if export.russia_federal_subjects[suffixed_key] then return suffixed_key end end return placename .. ", Russia" end local function construct_russia_federal_subject_keydesc(group, key, spec) local placename = key:gsub(",.*", "") local linked_placename = export.construct_linked_placename(spec, placename) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if placetype == "oblast" then -- Hack: Oblasts generally don't have entries under "Foo Oblast" -- but just under "Foo", so fix the linked key appropriately; -- doesn't apply to the Jewish Autonomous Oblast linked_placename = linked_placename:gsub(" Oblast%]%]", "%]%] Oblast") end return linked_placename .. ", a [[federal subject]] ([[" .. placetype .. "]]) of [[Russia]]" end -- federal subjects of Russia export.russia_group = { key_to_placename = russia_key_to_placename, placename_to_key = russia_placename_to_key, default_container = "Russia", default_keydesc = construct_russia_federal_subject_keydesc, default_overriding_bare_label_parents = {"federal subjects of Russia", "+++"}, data = export.russia_federal_subjects, } export.saudi_arabia_provinces = { ["Riyadh Province, Saudi Arabia"] = {}, ["Mecca Province, Saudi Arabia"] = {}, -- Name is too generic to assume it's in Saudi Arabia if not specified. ["Eastern Province, Saudi Arabia"] = {no_auto_augment_container = true, wp = "%l, %c"}, ["Medina Province, Saudi Arabia"] = {wp = "%l (%c)"}, ["Aseer Province, Saudi Arabia"] = {wp = "Asir"}, ["Asir Province, Saudi Arabia"] = {alias_of = "Aseer Province, Saudi Arabia", display = true}, ["Jazan Province, Saudi Arabia"] = {}, ["Qassim Province, Saudi Arabia"] = {wp = "Al-Qassim Province"}, ["Al-Qassim Province, Saudi Arabia"] = {alias_of = "Qassim Province, Saudi Arabia", display = true}, ["Tabuk Province, Saudi Arabia"] = {}, ["Hail Province, Saudi Arabia"] = {wp = "Ḥa'il Province"}, ["Ha'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true}, ["Ḥa'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true}, ["Al-Jouf Province, Saudi Arabia"] = {wp = "Al-Jawf Province"}, ["Al-Jawf Province, Saudi Arabia"] = {alias_of = "Al-Jouf Province, Saudi Arabia", display = true}, ["Najran Province, Saudi Arabia"] = {}, ["Northern Borders Province, Saudi Arabia"] = {}, ["Al-Bahah Province, Saudi Arabia"] = {}, } -- provinces of Saudi Arabia export.saudi_arabia_group = { key_to_placename = make_key_to_placename(", Saudi Arabia$", " Province$"), placename_to_key = make_placename_to_key(", Saudi Arabia", " Province"), default_container = "Saudi Arabia", default_placetype = "province", data = export.saudi_arabia_provinces, } export.south_africa_provinces = { ["Eastern Cape, South Africa"] = {the = true}, ["Free State, South Africa"] = {the = true, wp = "%l (province)"}, ["Gauteng, South Africa"] = {}, ["KwaZulu-Natal, South Africa"] = {}, ["Limpopo, South Africa"] = {}, ["Mpumalanga, South Africa"] = {}, -- per Wikipedia and other sources, `North West` doesn't normally have `the` before it ["North West, South Africa"] = {wp = "%l (South African province)"}, ["Northern Cape, South Africa"] = {the = true}, ["Western Cape, South Africa"] = {the = true}, } -- provinces of South Africa export.south_africa_group = { default_container = "South Africa", default_placetype = "province", default_divs = "municipalities", data = export.south_africa_provinces, } export.south_korea_provinces = { ["North Chungcheong Province, South Korea"] = {}, ["South Chungcheong Province, South Korea"] = {}, ["Gangwon Province, South Korea"] = {wp = "%l, %c"}, ["Gyeonggi Province, South Korea"] = {}, ["North Gyeongsang Province, South Korea"] = {}, ["South Gyeongsang Province, South Korea"] = {}, ["North Jeolla Province, South Korea"] = {}, ["South Jeolla Province, South Korea"] = {}, ["Jeju Province, South Korea"] = {}, } -- provinces of South Korea export.south_korea_group = { key_to_placename = make_key_to_placename(", South Korea$", " Province$"), placename_to_key = make_placename_to_key(", South Korea", " Province"), default_container = "South Korea", default_placetype = "province", data = export.south_korea_provinces, } export.spain_autonomous_communities = { ["Andalusia, Spain"] = {}, ["Aragon, Spain"] = {}, ["Asturias, Spain"] = {}, ["Balearic Islands, Spain"] = {the = true}, ["Basque Country, Spain"] = {the = true, wp = "%l (autonomous community)"}, ["Canary Islands, Spain"] = {the = true}, ["Cantabria, Spain"] = {}, ["Castile and León, Spain"] = {}, ["Castilla-La Mancha, Spain"] = {wp = "Castilla–La Mancha"}, -- with en-dash ["Catalonia, Spain"] = {}, ["Community of Madrid, Spain"] = {the = true}, ["Extremadura, Spain"] = {}, ["Galicia, Spain"] = {wp = "%l (Spain)"}, ["La Rioja, Spain"] = {}, ["Murcia, Spain"] = {wp = "Region of %l"}, ["Navarre, Spain"] = {}, ["Valencia, Spain"] = {wp = "Valencian Community"}, ["Valencian Community, Spain"] = {alias_of = "Valencia, Spain", the = true}, } -- autonomous communities of Spain export.spain_group = { default_container = "Spain", default_placetype = "autonomous community", default_divs = {"municipalities", "comarcas"}, data = export.spain_autonomous_communities, } export.taiwan_counties = { ["Changhua County, Taiwan"] = {}, ["Chiayi County, Taiwan"] = {}, ["Hsinchu County, Taiwan"] = {}, ["Hualien County, Taiwan"] = {}, ["Kinmen County, Taiwan"] = {wp = "Kinmen"}, ["Lienchiang County, Taiwan"] = {wp = "Matsu Islands"}, ["Miaoli County, Taiwan"] = {}, ["Nantou County, Taiwan"] = {}, ["Penghu County, Taiwan"] = {wp = "Penghu"}, ["Pingtung County, Taiwan"] = {}, ["Taitung County, Taiwan"] = {}, ["Yilan County, Taiwan"] = {wp = "%l, %c"}, ["Yunlin County, Taiwan"] = {}, } -- counties of Taiwan export.taiwan_group = { key_to_placename = make_key_to_placename(", Taiwan$", " County$"), placename_to_key = make_placename_to_key(", Taiwan", " County"), default_container = "Taiwan", default_placetype = "county", default_divs = {"districts", "townships"}, data = export.taiwan_counties, } export.thailand_provinces = { -- Bangkok (special administrative area) ["Amnat Charoen Province, Thailand"] = {}, ["Ang Thong Province, Thailand"] = {}, ["Bueng Kan Province, Thailand"] = {}, ["Buriram Province, Thailand"] = {}, ["Chachoengsao Province, Thailand"] = {}, ["Chai Nat Province, Thailand"] = {}, ["Chaiyaphum Province, Thailand"] = {}, ["Chanthaburi Province, Thailand"] = {}, ["Chiang Mai Province, Thailand"] = {}, ["Chiang Rai Province, Thailand"] = {}, ["Chonburi Province, Thailand"] = {}, ["Chumphon Province, Thailand"] = {}, ["Kalasin Province, Thailand"] = {}, ["Kamphaeng Phet Province, Thailand"] = {}, ["Kanchanaburi Province, Thailand"] = {}, ["Khon Kaen Province, Thailand"] = {}, ["Krabi Province, Thailand"] = {}, ["Lampang Province, Thailand"] = {}, ["Lamphun Province, Thailand"] = {}, ["Loei Province, Thailand"] = {}, ["Lopburi Province, Thailand"] = {}, ["Mae Hong Son Province, Thailand"] = {}, ["Maha Sarakham Province, Thailand"] = {}, ["Mukdahan Province, Thailand"] = {}, ["Nakhon Nayok Province, Thailand"] = {}, ["Nakhon Pathom Province, Thailand"] = {}, ["Nakhon Phanom Province, Thailand"] = {}, ["Nakhon Ratchasima Province, Thailand"] = {}, ["Nakhon Sawon Province, Thailand"] = {}, ["Nakhon Si Thammarat Province, Thailand"] = {}, ["Nan Province, Thailand"] = {}, ["Narathiwat Province, Thailand"] = {}, ["Nong Bua Lamphu Province, Thailand"] = {}, ["Nong Khai Province, Thailand"] = {}, ["Nonthaburi Province, Thailand"] = {}, ["Pathum Thani Province, Thailand"] = {}, ["Pattani Province, Thailand"] = {}, ["Phang Nga Province, Thailand"] = {}, ["Phatthalung Province, Thailand"] = {}, ["Phayao Province, Thailand"] = {}, ["Phetchabun Province, Thailand"] = {}, ["Phetchaburi Province, Thailand"] = {}, ["Phichit Province, Thailand"] = {}, ["Phitsanulok Province, Thailand"] = {}, ["Phra Nakhon Si Ayutthaya Province, Thailand"] = {}, ["Phrae Province, Thailand"] = {}, ["Phuket Province, Thailand"] = {}, ["Prachinburi Province, Thailand"] = {}, ["Prachuap Khiri Khan Province, Thailand"] = {}, ["Ranong Province, Thailand"] = {}, ["Ratchaburi Province, Thailand"] = {}, ["Rayong Province, Thailand"] = {}, ["Roi Et Province, Thailand"] = {}, ["Sa Kaeo Province, Thailand"] = {}, ["Sakon Nakhon Province, Thailand"] = {}, ["Samut Prakan Province, Thailand"] = {}, ["Samut Sakhon Province, Thailand"] = {}, ["Samut Songkhram Province, Thailand"] = {}, ["Saraburi Province, Thailand"] = {}, ["Satun Province, Thailand"] = {}, ["Sing Buri Province, Thailand"] = {}, ["Sisaket Province, Thailand"] = {}, ["Songkhla Province, Thailand"] = {}, ["Sukhothai Province, Thailand"] = {}, ["Suphan Buri Province, Thailand"] = {}, ["Surat Thani Province, Thailand"] = {}, ["Surin Province, Thailand"] = {}, ["Tak Province, Thailand"] = {}, ["Trang Province, Thailand"] = {}, ["Trat Province, Thailand"] = {}, ["Ubon Ratchathani Province, Thailand"] = {}, ["Udon Thani Province, Thailand"] = {}, ["Uthai Thani Province, Thailand"] = {}, ["Uttaradit Province, Thailand"] = {}, ["Yala Province, Thailand"] = {}, ["Yasothon Province, Thailand"] = {}, } -- provinces of Thailand export.thailand_group = { key_to_placename = make_key_to_placename(", Thailand$", " Province$"), placename_to_key = make_placename_to_key(", Thailand", " Province"), default_container = "Thailand", default_placetype = "province", default_divs = "districts", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.thailand_provinces, } export.turkey_provinces = { ["Adana Province, Turkey"] = {}, -- code 01 ["Adıyaman Province, Turkey"] = {}, -- code 02 ["Afyonkarahisar Province, Turkey"] = {}, -- code 03 ["Ağrı Province, Turkey"] = {}, -- code 04 ["Amasya Province, Turkey"] = {}, -- code 05 ["Ankara Province, Turkey"] = {}, -- code 06 ["Antalya Province, Turkey"] = {}, -- code 07 ["Artvin Province, Turkey"] = {}, -- code 08 ["Aydın Province, Turkey"] = {}, -- code 09 ["Balıkesir Province, Turkey"] = {}, -- code 10 ["Bilecik Province, Turkey"] = {}, -- code 11 ["Bingöl Province, Turkey"] = {}, -- code 12 ["Bitlis Province, Turkey"] = {}, -- code 13 ["Bolu Province, Turkey"] = {}, -- code 14 ["Burdur Province, Turkey"] = {}, -- code 15 ["Bursa Province, Turkey"] = {}, -- code 16 ["Çanakkale Province, Turkey"] = {}, -- code 17 ["Çankırı Province, Turkey"] = {}, -- code 18 ["Çorum Province, Turkey"] = {}, -- code 19 ["Denizli Province, Turkey"] = {}, -- code 20 ["Diyarbakır Province, Turkey"] = {}, -- code 21 ["Edirne Province, Turkey"] = {}, -- code 22 ["Elazığ Province, Turkey"] = {}, -- code 23 ["Elâzığ Province, Turkey"] = {alias_of = "Elazığ Province, Turkey", display = true}, ["Erzincan Province, Turkey"] = {}, -- code 24 ["Erzurum Province, Turkey"] = {}, -- code 25 ["Eskişehir Province, Turkey"] = {}, -- code 26 ["Gaziantep Province, Turkey"] = {}, -- code 27 ["Giresun Province, Turkey"] = {}, -- code 28 ["Gümüşhane Province, Turkey"] = {}, -- code 29 ["Hakkâri Province, Turkey"] = {}, -- code 30 ["Hakkari Province, Turkey"] = {alias_of = "Hakkâri Province, Turkey", display = true}, ["Hatay Province, Turkey"] = {}, -- code 31 ["Isparta Province, Turkey"] = {}, -- code 32 ["Mersin Province, Turkey"] = {}, -- code 33 -- ["Istanbul Province, Turkey"] = {}, -- code 34; this is coextensive with the city itself ["İzmir Province, Turkey"] = {}, -- code 35 ["Izmir Province, Turkey"] = {alias_of = "İzmir Province, Turkey", display = true}, ["Kars Province, Turkey"] = {}, -- code 36 ["Kastamonu Province, Turkey"] = {}, -- code 37 ["Kayseri Province, Turkey"] = {}, -- code 38 ["Kırklareli Province, Turkey"] = {}, -- code 39 ["Kırşehir Province, Turkey"] = {}, -- code 40 ["Kocaeli Province, Turkey"] = {}, -- code 41 ["Konya Province, Turkey"] = {}, -- code 42 ["Kütahya Province, Turkey"] = {}, -- code 43 ["Malatya Province, Turkey"] = {}, -- code 44 ["Manisa Province, Turkey"] = {}, -- code 45 ["Kahramanmaraş Province, Turkey"] = {}, -- code 46 ["Mardin Province, Turkey"] = {}, -- code 47 ["Muğla Province, Turkey"] = {}, -- code 48 ["Muş Province, Turkey"] = {}, -- code 49 ["Nevşehir Province, Turkey"] = {}, -- code 50 ["Niğde Province, Turkey"] = {}, -- code 51 ["Ordu Province, Turkey"] = {}, -- code 52 ["Rize Province, Turkey"] = {}, -- code 53 ["Sakarya Province, Turkey"] = {}, -- code 54 ["Samsun Province, Turkey"] = {}, -- code 55 ["Siirt Province, Turkey"] = {}, -- code 56 ["Sinop Province, Turkey"] = {}, -- code 57 ["Sivas Province, Turkey"] = {}, -- code 58 ["Tekirdağ Province, Turkey"] = {}, -- code 59 ["Tokat Province, Turkey"] = {}, -- code 60 ["Trabzon Province, Turkey"] = {}, -- code 61 ["Tunceli Province, Turkey"] = {}, -- code 62 ["Şanlıurfa Province, Turkey"] = {}, -- code 63 ["Uşak Province, Turkey"] = {}, -- code 64 ["Van Province, Turkey"] = {}, -- code 65 ["Yozgat Province, Turkey"] = {}, -- code 66 ["Zonguldak Province, Turkey"] = {}, -- code 67 ["Aksaray Province, Turkey"] = {}, -- code 68 ["Bayburt Province, Turkey"] = {}, -- code 69 ["Karaman Province, Turkey"] = {}, -- code 70 ["Kırıkkale Province, Turkey"] = {}, -- code 71 ["Batman Province, Turkey"] = {}, -- code 72 ["Şırnak Province, Turkey"] = {}, -- code 73 ["Bartın Province, Turkey"] = {}, -- code 74 ["Ardahan Province, Turkey"] = {}, -- code 75 ["Iğdır Province, Turkey"] = {}, -- code 76 ["Yalova Province, Turkey"] = {}, -- code 77 ["Karabük Province, Turkey"] = {}, -- code 78 ["Kilis Province, Turkey"] = {}, -- code 79 ["Osmaniye Province, Turkey"] = {}, -- code 80 ["Düzce Province, Turkey"] = {}, -- code 81 } -- provinces of Turkey export.turkey_group = { key_to_placename = make_key_to_placename(", Turkey$", " Province$"), placename_to_key = make_placename_to_key(", Turkey", " Province"), default_container = "Turkey", default_placetype = "province", default_divs = "districts", data = export.turkey_provinces, } export.ukraine_oblasts = { ["Cherkasy Oblast, Ukraine"] = {}, -- capital [[Cherkasy]], license plate prefix CA, IA ["Chernihiv Oblast, Ukraine"] = {}, -- capital [[Chernihiv]], license plate prefix CB, IB ["Chernivtsi Oblast, Ukraine"] = {}, -- capital [[Chernivtsi]], license plate prefix CE, IE -- apparently will be renamed to 'Dnipro Oblast' ["Dnipropetrovsk Oblast, Ukraine"] = {}, -- capital [[Dnipro]], license plate prefix AE, KE ["Donetsk Oblast, Ukraine"] = {}, -- capital ''[[Donetsk]] ([[Kramatorsk]])'', license plate prefix AH, KH ["Ivano-Frankivsk Oblast, Ukraine"] = {}, -- capital [[Ivano-Frankivsk]], license plate prefix AT, KT ["Kharkiv Oblast, Ukraine"] = {}, -- capital [[Kharkiv]], license plate prefix AX, KX ["Kherson Oblast, Ukraine"] = {}, -- capital ''[[Kherson]]'', license plate prefix ''BT, HT'' ["Khmelnytskyi Oblast, Ukraine"] = {}, -- capital [[Khmelnytskyi]], license plate prefix BX, HX -- apparently will be renamed to 'Kropyvnytskyi Oblast' ["Kirovohrad Oblast, Ukraine"] = {}, -- capital [[Kropyvnytskyi]], license plate prefix BA, HA ["Kyiv Oblast, Ukraine"] = {}, -- capital [[Kyiv]], license plate prefix AI, KI ["Kiev Oblast, Ukraine"] = {alias_of = "Kyiv Oblast, Ukraine", display = true}, ["Luhansk Oblast, Ukraine"] = {}, -- capital ''[[Luhansk]] ([[Sievierodonetsk]])'', license plate prefix BB, HB ["Lviv Oblast, Ukraine"] = {}, -- capital [[Lviv]], license plate prefix BC, HC ["Mykolaiv Oblast, Ukraine"] = {}, -- capital [[Mykolaiv]], license plate prefix BE, HE ["Odesa Oblast, Ukraine"] = {}, -- capital [[Odesa]], license plate prefix BH, HH ["Odessa Oblast, Ukraine"] = {alias_of = "Odesa Oblast, Ukraine", display = true}, ["Poltava Oblast, Ukraine"] = {}, -- capital [[Poltava]], license plate prefix BI, HI ["Rivne Oblast, Ukraine"] = {}, -- capital [[Rivne]], license plate prefix BK, HK ["Sumy Oblast, Ukraine"] = {}, -- capital [[Sumy]], license plate prefix BM, HM ["Ternopil Oblast, Ukraine"] = {}, -- capital [[Ternopil]], license plate prefix BO, HO ["Vinnytsia Oblast, Ukraine"] = {}, -- capital [[Vinnytsia]], license plate prefix AB, KB ["Volyn Oblast, Ukraine"] = {}, -- capital [[Lutsk]], license plate prefix AC, KC ["Zakarpattia Oblast, Ukraine"] = {}, -- capital [[Uzhhorod]], license plate prefix AO, KO ["Zaporizhzhia Oblast, Ukraine"] = {}, -- capital ''[[Zaporizhzhia]]'', license plate prefix AP, KP ["Zaporizhia Oblast, Ukraine"] = {alias_of = "Zaporizhzhia Oblast, Ukraine", display = true}, ["Zhytomyr Oblast, Ukraine"] = {}, -- capital [[Zhytomyr]], license plate prefix AM, KM } -- oblasts of Ukraine export.ukraine_group = { key_to_placename = make_key_to_placename(", Ukraine$", " Oblast$"), placename_to_key = make_placename_to_key(", Ukraine", " Oblast"), default_container = "Ukraine", default_placetype = "oblast", default_divs = {"raions", "hromadas"}, data = export.ukraine_oblasts, } export.united_kingdom_constituent_countries = { ["England"] = {divs = { "counties", "districts", {type = "local government districts", cat_as = "districts"}, { type = "local government districts with borough status", cat_as = {"districts", "boroughs"}, }, {type = "boroughs", cat_as = {"districts", "boroughs"}}, {type = "civil parishes", container_parent_type = false}, }}, ["Northern Ireland"] = { placetype = {"constituent country", "province", "quốc gia"}, divs = {"counties", "districts"}, }, ["Scotland"] = {divs = { {type = "council areas", container_parent_type = false}, "districts", }}, ["Wales"] = {divs = { "counties", {type = "county boroughs", container_parent_type = false}, {type = "communities", container_parent_type = false}, {type = "Welsh communities", cat_as = {{type = "communities", container_parent_type = false}}}, }}, } -- constituent countries and provinces of the United Kingdom export.united_kingdom_group = { placename_to_key = false, default_container = "United Kingdom", default_placetype = {"constituent country", "quốc gia"}, addl_divs = { "traditional counties", {type = "historical counties", cat_as = "traditional counties"}, }, -- Don't create categories like 'Category:en:Towns in the United Kingdom' -- or 'Category:en:Places in the United Kingdom'. default_no_container_cat = true, data = export.united_kingdom_constituent_countries, } export.england_counties = { -- NOTE: We used to have various other "no longer" counties commented out, which seems to refer to counties that -- existed officially at some point between 1889 and 1974, which I have removed. I have only kept the three -- ceremonial counties that existed from 1974 (when ceremonial counties were created) to 1996, as well as those -- still considered "historic counties" per [[w:Historic counties of England]]. -- ["Avon, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996) ["Bedfordshire, England"] = {}, ["Berkshire, England"] = {}, -- ["Brighton and Hove, England"] = {}, -- city -- ["Bristol, England"] = {}, -- city ["Buckinghamshire, England"] = {}, ["Cambridgeshire, England"] = {}, ["Cheshire, England"] = {}, -- ["Cleveland, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996) ["Cornwall, England"] = {}, -- ["Cumberland, England"] = {}, -- no longer (historic county) ["Cumbria, England"] = {}, ["Derbyshire, England"] = {}, ["Devon, England"] = {}, ["Dorset, England"] = {}, ["County Durham, England"] = {}, ["East Sussex, England"] = {}, ["Essex, England"] = {}, ["Gloucestershire, England"] = {}, ["Greater London, England"] = {}, ["Greater Manchester, England"] = {}, ["Hampshire, England"] = {}, ["Herefordshire, England"] = {}, ["Hertfordshire, England"] = {}, -- ["Humberside, England"] = {}, -- no longer (1974 to 1996) -- ["Huntingdonshire, England"] = {}, -- no longer (historic county) ["Isle of Wight, England"] = {the = true}, ["Kent, England"] = {}, ["Lancashire, England"] = {}, ["Leicestershire, England"] = {}, ["Lincolnshire, England"] = {}, ["Merseyside, England"] = {}, -- ["Middlesex, England"] = {}, -- no longer (historic county) ["Norfolk, England"] = {}, ["Northamptonshire, England"] = {}, ["Northumberland, England"] = {}, ["North Yorkshire, England"] = {}, ["Nottinghamshire, England"] = {}, ["Oxfordshire, England"] = {}, ["Rutland, England"] = {}, ["Shropshire, England"] = {}, ["Somerset, England"] = {}, ["South Humberside, England"] = {}, ["South Yorkshire, England"] = {}, ["Staffordshire, England"] = {}, ["Suffolk, England"] = {}, ["Surrey, England"] = {}, -- ["Sussex, England"] = {}, -- no longer (historic county) ["Tyne and Wear, England"] = {}, ["Warwickshire, England"] = {}, ["West Midlands, England"] = {the = true, wp = "%l (county)"}, -- ["Westmorland, England"] = {}, -- no longer (historic county) ["West Sussex, England"] = {}, ["West Yorkshire, England"] = {}, ["Wiltshire, England"] = {}, ["Worcestershire, England"] = {}, -- ["Yorkshire, England"] = {}, -- no longer (historic county) ["East Riding of Yorkshire, England"] = {the = true}, } -- counties of England export.england_group = { default_container = {key = "England", placetype = "constituent country"}, default_placetype = "county", default_divs = { "districts", {type = "local government districts", cat_as = "districts"}, { type = "local government districts with borough status", cat_as = {"districts", "boroughs"}, }, {type = "boroughs", cat_as = {"districts", "boroughs"}}, "civil parishes", }, data = export.england_counties, } export.northern_ireland_counties = { ["County Antrim, Northern Ireland"] = {}, ["County Armagh, Northern Ireland"] = {}, ["City of Belfast, Northern Ireland"] = {the = true, is_city = true, wp = "Belfast"}, ["County Down, Northern Ireland"] = {}, ["County Fermanagh, Northern Ireland"] = {}, ["County Londonderry, Northern Ireland"] = {}, ["City of Derry, Northern Ireland"] = {the = true, is_city = true, wp = "Derry"}, ["County Tyrone, Northern Ireland"] = {}, } -- counties of Northern Ireland export.northern_ireland_group = { key_to_placename = make_irish_type_key_to_placename(", Northern Ireland$"), placename_to_key = make_irish_type_placename_to_key(", Northern Ireland"), default_container = {key = "Northern Ireland", placetype = "constituent country"}, default_placetype = "county", data = export.northern_ireland_counties, } export.scotland_council_areas = { ["Aberdeenshire, Scotland"] = {}, ["Angus, Scotland"] = {wp = "%l, %c"}, ["Argyll and Bute, Scotland"] = {}, ["City of Aberdeen, Scotland"] = {the = true, wp = "Aberdeen"}, ["Aberdeen"] = {alias_of = "City of Aberdeen, Scotland"}, ["Aberdeen City"] = {alias_of = "City of Aberdeen, Scotland"}, ["City of Dundee, Scotland"] = {the = true, wp = "Dundee"}, ["Dundee"] = {alias_of = "City of Dundee, Scotland"}, ["Dundee City"] = {alias_of = "City of Dundee, Scotland"}, ["City of Edinburgh, Scotland"] = {the = true, wp = "%l council area"}, ["Edinburgh"] = {alias_of = "City of Edinburgh, Scotland"}, ["City of Glasgow, Scotland"] = {the = true, wp = "Glasgow"}, ["Glasgow"] = {alias_of = "City of Glasgow, Scotland"}, ["Clackmannanshire, Scotland"] = {}, ["Dumfries and Galloway, Scotland"] = {}, ["East Ayrshire, Scotland"] = {}, ["East Dunbartonshire, Scotland"] = {}, ["East Lothian, Scotland"] = {}, ["East Renfrewshire, Scotland"] = {}, ["Falkirk, Scotland"] = {wp = "%l council area"}, ["Fife, Scotland"] = {}, ["Highland, Scotland"] = {wp = "%l council area"}, ["Inverclyde, Scotland"] = {}, ["Midlothian, Scotland"] = {}, ["Moray, Scotland"] = {}, ["North Ayrshire, Scotland"] = {}, ["North Lanarkshire, Scotland"] = {}, ["Orkney Islands, Scotland"] = {the = true}, ["Perth and Kinross, Scotland"] = {}, ["Renfrewshire, Scotland"] = {}, ["Scottish Borders, Scotland"] = {the = true}, ["Shetland Islands, Scotland"] = {the = true}, ["South Ayrshire, Scotland"] = {}, ["South Lanarkshire, Scotland"] = {}, ["Stirling, Scotland"] = {wp = "%l council area"}, ["West Dunbartonshire, Scotland"] = {}, ["West Lothian, Scotland"] = {}, ["Western Isles, Scotland"] = {the = true, wp = "Outer Hebrides"}, ["Na h-Eileanan Siar, Scotland"] = {alias_of = "Western Isles, Scotland"}, } -- council areas of Scotland export.scotland_group = { default_container = {key = "Scotland", placetype = "constituent country"}, default_placetype = "council area", data = export.scotland_council_areas, } export.wales_principal_areas = { ["Blaenau Gwent, Wales"] = {}, ["Bridgend, Wales"] = {wp = "%l County Borough"}, ["Caerphilly, Wales"] = {wp = "%l County Borough"}, -- ["Cardiff, Wales"] = {placetype = "city"}, ["Carmarthenshire, Wales"] = {placetype = "county"}, ["Ceredigion, Wales"] = {placetype = "county"}, ["Conwy, Wales"] = {wp = "%l County Borough"}, ["Denbighshire, Wales"] = {placetype = "county"}, ["Flintshire, Wales"] = {placetype = "county"}, ["Gwynedd, Wales"] = {placetype = "county"}, ["Isle of Anglesey, Wales"] = {the = true, placetype = "county"}, ["Anglesey, Wales"] = {alias_of = "Isle of Anglesey, Wales"}, -- differs in "the" ["Merthyr Tydfil, Wales"] = {wp = "%l County Borough"}, ["Monmouthshire, Wales"] = {placetype = "county"}, ["Neath Port Talbot, Wales"] = {}, -- ["Newport, Wales"] = {placetype = "city", wp = "%l, %c"}, ["Pembrokeshire, Wales"] = {placetype = "county"}, ["Powys, Wales"] = {placetype = "county"}, ["Rhondda Cynon Taf, Wales"] = {}, -- ["Swansea, Wales"] = {placetype = "city"}, ["Torfaen, Wales"] = {}, ["Vale of Glamorgan, Wales"] = {the = true}, ["Wrexham, Wales"] = {wp = "%l County Borough"}, } -- principal areas (cities, counties and county boroughs) of Wales export.wales_group = { default_container = {key = "Wales", placetype = "constituent country"}, default_placetype = "county borough", data = export.wales_principal_areas, } export.united_states_states = { ["Alabama, USA"] = {}, ["Alaska, USA"] = {divs = { {type = "boroughs", container_parent_type = "counties"}, {type = "borough seats", container_parent_type = "county seats"}, }}, ["Arizona, USA"] = {}, ["Arkansas, USA"] = {}, ["California, USA"] = {}, ["Colorado, USA"] = {divs = {"counties", "county seats", "municipalities"}}, ["Connecticut, USA"] = {divs = {"counties", "county seats", "municipalities"}}, ["Delaware, USA"] = {}, ["Florida, USA"] = {}, ["Georgia, USA"] = {wp = "%l (U.S. state)"}, ["Hawaii, USA"] = {addl_parents = {"Polynesia"}}, ["Idaho, USA"] = {}, ["Illinois, USA"] = {}, ["Indiana, USA"] = {}, ["Iowa, USA"] = {}, ["Kansas, USA"] = {}, ["Kentucky, USA"] = {}, ["Louisiana, USA"] = {divs = { {type = "parishes", container_parent_type = "counties"}, {type = "parish seats", container_parent_type = "county seats"}, }}, ["Maine, USA"] = {}, ["Maryland, USA"] = {}, ["Massachusetts, USA"] = {}, ["Michigan, USA"] = {}, ["Minnesota, USA"] = {}, ["Mississippi, USA"] = {}, ["Missouri, USA"] = {}, ["Montana, USA"] = {}, ["Nebraska, USA"] = {}, ["Nevada, USA"] = {}, ["New Hampshire, USA"] = {}, ["New Jersey, USA"] = {divs = { "counties", "county seats", {type = "boroughs", prep = "in"}, }}, ["New Mexico, USA"] = {}, ["New York, USA"] = {wp = "%l (state)"}, ["North Carolina, USA"] = {}, ["North Dakota, USA"] = {}, ["Ohio, USA"] = {}, ["Oklahoma, USA"] = {}, ["Oregon, USA"] = {}, ["Pennsylvania, USA"] = {divs = { "counties", "county seats", {type = "boroughs", prep = "in"}, }}, ["Rhode Island, USA"] = {}, ["South Carolina, USA"] = {}, ["South Dakota, USA"] = {}, ["Tennessee, USA"] = {}, ["Texas, USA"] = {}, ["Utah, USA"] = {}, ["Vermont, USA"] = {}, ["Virginia, USA"] = {}, ["Washington, USA"] = {wp = "%l (state)"}, ["West Virginia, USA"] = {}, ["Wisconsin, USA"] = {}, ["Wyoming, USA"] = {}, } -- states of the United States export.united_states_group = { placename_to_key = make_placename_to_key(", USA"), default_container = "United States", default_placetype = "state", default_divs = {"counties", "county seats"}, addl_divs = { {type = "census-designated places", prep = "in"}, {type = "unincorporated communities", prep = "in"}, }, data = export.united_states_states, } export.vietnam_provinces = { -- [[Northeast (Vietnam)|Northeast]] region ["Bắc Giang Province, Vietnam"] = {}, -- capital [[Bắc Giang]] ["Bắc Kạn Province, Vietnam"] = {}, -- capital [[Bắc Kạn]] ["Cao Bằng Province, Vietnam"] = {}, -- capital [[Cao Bằng]] ["Hà Giang Province, Vietnam"] = {}, -- capital [[Hà Giang]] ["Lạng Sơn Province, Vietnam"] = {}, -- capital [[Lạng Sơn]] ["Phú Thọ Province, Vietnam"] = {}, -- capital [[Việt Trì]] ["Quảng Ninh Province, Vietnam"] = {}, -- capital [[Hạ Long]] ["Thái Nguyên Province, Vietnam"] = {}, -- capital [[Thái Nguyên]] ["Tuyên Quang Province, Vietnam"] = {}, -- capital [[Tuyên Quang]] -- [[Northwest (Vietnam)|Northwest]] region ["Lào Cai Province, Vietnam"] = {}, -- capital [[Lào Cai]] ["Yên Bái Province, Vietnam"] = {}, -- capital [[Yên Bái]] ["Điện Biên Province, Vietnam"] = {}, -- capital [[Điện Biên Phủ]] ["Hoà Bình Province, Vietnam"] = {}, -- capital [[Hoà Bình City|Hoà Bình]] ["Hòa Bình Province, Vietnam"] = {alias_of = "Hoà Bình Province, Vietnam", display = true}, ["Lai Châu Province, Vietnam"] = {}, -- capital [[Lai Châu]] ["Sơn La Province, Vietnam"] = {}, -- capital [[Sơn La]] -- [[Red River Delta]] region ["Bắc Ninh Province, Vietnam"] = {}, -- capital [[Bắc Ninh]] ["Hà Nam Province, Vietnam"] = {}, -- capital [[Phủ Lý]] ["Hải Dương Province, Vietnam"] = {}, -- capital [[Hải Dương]] ["Hưng Yên Province, Vietnam"] = {}, -- capital [[Hưng Yên]] ["Nam Định Province, Vietnam"] = {}, -- capital [[Nam Định]] ["Ninh Bình Province, Vietnam"] = {}, -- capital [[Ninh Bình|Hoa Lư]] ["Thái Bình Province, Vietnam"] = {}, -- capital [[Thái Bình]] ["Vĩnh Phúc Province, Vietnam"] = {}, -- capital [[Vĩnh Yên]] -- ["Hanoi"] = {placetype = {"municipality", "city"}}, -- capital [[Hoàn Kiếm district]] -- ["Haiphong"] = {placetype = {"municipality", "city"}}, -- capital [[Hồng Bàng district]] -- [[North Central Coast]] region ["Hà Tĩnh Province, Vietnam"] = {}, -- capital [[Hà Tĩnh]] ["Nghệ An Province, Vietnam"] = {}, -- capital [[Vinh]] ["Quảng Bình Province, Vietnam"] = {}, -- capital [[Đồng Hới]] ["Quảng Trị Province, Vietnam"] = {}, -- capital [[Đông Hà]] ["Thanh Hoá Province, Vietnam"] = {}, -- capital [[Thanh Hoá]] ["Thanh Hóa Province, Vietnam"] = {alias_of = "Thanh Hoá Province, Vietnam", display = true}, -- ["Hue"] = {placetype = {"municipality", "city"}, wp = "Huế"}, -- capital [[Thuận Hoá district]] -- [[Central Highlands (Vietnam)|Central Highlands]] region ["Đắk Lắk Province, Vietnam"] = {}, -- capital [[Buôn Ma Thuột]] ["Đăk Nông Province, Vietnam"] = {}, -- capital [[Gia Nghĩa]] ["Gia Lai Province, Vietnam"] = {}, -- capital [[Pleiku]] ["Kon Tum Province, Vietnam"] = {}, -- capital [[Kon Tum]] ["Lâm Đồng Province, Vietnam"] = {}, -- capital [[Đà Lạt]] -- [[South Central Coast]] region ["Bình Định Province, Vietnam"] = {}, -- capital [[Quy Nhon]] ["Bình Thuận Province, Vietnam"] = {}, -- capital [[Phan Thiết]] ["Khánh Hoà Province, Vietnam"] = {}, -- capital [[Nha Trang]] ["Khánh Hòa Province, Vietnam"] = {alias_of = "Khánh Hoà Province, Vietnam", display = true}, ["Ninh Thuận Province, Vietnam"] = {}, -- capital [[Phan Rang–Tháp Chàm]] ["Phú Yên Province, Vietnam"] = {}, -- capital [[Tuy Hoà]] ["Quảng Nam Province, Vietnam"] = {}, -- capital [[Tam Kỳ]] ["Quảng Ngãi Province, Vietnam"] = {}, -- capital [[Quảng Ngãi]] -- ["Da Nang"] = {placetype = {"municipality", "city"}}, -- capital [[Hải Châu district]] -- [[Southeast (Vietnam)|Southeast]] region ["Bà Rịa–Vũng Tàu Province, Vietnam"] = {}, -- capital [[Bà Rịa]] ["Bình Dương Province, Vietnam"] = {}, -- capital [[Thủ Dầu Một]] ["Bình Phước Province, Vietnam"] = {}, -- capital [[Đồng Xoài]] ["Đồng Nai Province, Vietnam"] = {}, -- capital [[Biên Hoà]] ["Tây Ninh Province, Vietnam"] = {}, -- capital [[Tây Ninh]] -- ["Ho Chi Minh City"] = {placetype = {"municipality", "city"}}, -- capital [[District 1, Ho Chi Minh City|'''District 1''']] -- [[Mekong Delta]] region ["An Giang Province, Vietnam"] = {}, -- capital [[Long Xuyên]] ["Bạc Liêu Province, Vietnam"] = {}, -- capital [[Bạc Liêu]] ["Bến Tre Province, Vietnam"] = {}, -- capital [[Bến Tre]] ["Cà Mau Province, Vietnam"] = {}, -- capital [[Cà Mau]] ["Đồng Tháp Province, Vietnam"] = {}, -- capital [[Cao Lãnh City|Cao Lãnh]] ["Hậu Giang Province, Vietnam"] = {}, -- capital [[Vị Thanh]] ["Kiên Giang Province, Vietnam"] = {}, -- capital [[Rạch Giá]] ["Long An Province, Vietnam"] = {}, -- capital [[Tân An]] ["Sóc Trăng Province, Vietnam"] = {}, -- capital [[Sóc Trăng]] ["Tiền Giang Province, Vietnam"] = {}, -- capital [[Mỹ Tho]] ["Trà Vinh Province, Vietnam"] = {}, -- capital [[Trà Vinh]] ["Vĩnh Long Province, Vietnam"] = {}, -- capital [[Vĩnh Long]] -- ["Can Tho"] = {placetype = {"municipality", "city"}, wp = "Cần Thơ"}, -- capital [[Ninh Kiều district]] } -- provinces of Vietnam export.vietnam_group = { key_to_placename = make_key_to_placename(", Vietnam$", " Province$"), placename_to_key = make_placename_to_key(", Vietnam", " Province"), default_container = "Vietnam", default_placetype = "province", -- There may not be enough districts to subcategorize like this. -- default_divs = "districts", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.vietnam_provinces, } ----------------------------------------------------------------------------------- -- City data -- ----------------------------------------------------------------------------------- export.australia_cities = { ["Adelaide"] = {container = "South Australia"}, -- 1,450,000 (Agglomeration) ["Brisbane"] = {container = "Queensland"}, -- 3,450,000 (Conglomeration; including the Gold Coast [750,997 2024 estiamte]) ["Canberra"] = {container = {key = "Australian Capital Territory, Australia", placetype = "territory"}}, -- 510,641 (2024 estimate) ["Melbourne"] = {container = "Victoria"}, -- 5,200,000 (Agglomeration) ["Newcastle, New South Wales"] = {container = "New South Wales", wp = "%l, %c"}, -- 534,033 (2024 estimate) ["Newcastle"] = {alias_of = "Newcastle, New South Wales"}, ["Perth"] = {container = "Western Australia"}, -- 2,350,000 (Agglomeration) ["Sydney"] = {container = "New South Wales"}, -- 5,100,000 (Agglomeration) } export.australia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Australia", "state"), default_placetype = "city", data = export.australia_cities, } export.brazil_cities = { -- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01. ["São Paulo"] = {container = "São Paulo"}, -- 22,600,000 (Consolidated Urban Area; including Guarulhos) ["Sao Paulo"] = {alias_of = "São Paulo", display = true}, ["Rio de Janeiro"] = {container = "Rio de Janeiro"}, -- 13,600,000 (Consolidated Urban Area) ["Belo Horizonte"] = {container = "Minas Gerais"}, -- 5,300,000 ["Recife"] = {container = "Pernambuco"}, -- 4,100,000 ["Porto Alegre"] = {container = "Rio Grande do Sul"}, -- 3,950,000 (Consolidated Urban Area) ["Brasília"] = {container = "Distrito Federal"}, -- 3,850,000 ["Brasilia"] = {alias_of = "Brasília", display = true}, ["Fortaleza"] = {container = "Ceará"}, -- 3,825,000 ["Salvador"] = {container = "Bahia", wp = "%l, %c", commonscat = "%l (%c)"}, -- 3,400,000 ["Curitiba"] = {container = "Paraná"}, -- 3,375,000 ["Campinas"] = {container = "São Paulo"}, -- 3,250,000 ["Goiânia"] = {container = "Goiás"}, -- 2,525,000 ["Goiania"] = {alias_of = "Goiânia", display = true}, ["Manaus"] = {container = "Amazonas"}, -- 2,275,000 ["Belém"] = {container = "Pará"}, -- 2,200,000 ["Belem"] = {alias_of = "Belém", display = true}, ["Vitória"] = {container = "Espírito Santo", wp = "%l, %c"}, -- 1,870,000 ["Vitoria"] = {alias_of = "Vitória", display = true}, ["Santos"] = {container = "São Paulo", wp = "%l, %c"}, -- 1,760,000 ["São Luís"] = {container = "Maranhão", wp = "%l, %c"}, -- 1,530,000 ["Sao Luis"] = {alias_of = "São Luís", display = true}, ["Natal"] = {container = "Rio Grande do Norte", wp = "%l, %c"}, -- 1,360,000 ["Florianópolis"] = {container = "Santa Catarina"}, -- 1,260,000 ["Florianopolis"] = {alias_of = "Florianópolis", display = true}, ["Maceió"] = {container = "Alagoas"}, -- 1,220,000 ["Maceio"] = {alias_of = "Maceió", display = true}, ["João Pessoa"] = {container = "Paraíba", wp = "%l, %c"}, -- 1,210,000 ["Joao Pessoa"] = {alias_of = "João Pessoa", display = true}, ["São José dos Campos"] = {container = "São Paulo"}, -- 1,090,000 ["Sao Jose dos Campos"] = {alias_of = "São José dos Campos", display = true}, ["Londrina"] = {container = "Paraná"}, -- 1,050,000 ["Teresina"] = {container = "Piauí"}, -- 1,040,000 } export.brazil_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Brazil", "state"), default_placetype = "city", data = export.brazil_cities, } export.canada_cities = { -- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01. ["Toronto"] = {container = "Ontario"}, -- 7,850,000 (Consolidated Urban Area; including Hamilton) ["Montreal"] = {container = "Quebec"}, -- 4,500,000 (Consolidated Urban Area) ["Vancouver"] = {container = "British Columbia"}, -- 3,175,000 (Consolidated Urban Area) ["Calgary"] = {container = "Alberta"}, -- 1,510,000 (Consolidated Urban Area) ["Edmonton"] = {container = "Alberta"}, -- 1,460,000 (Consolidated Urban Area) ["Ottawa"] = {container = "Ontario"}, -- 1,390,000 (Consolidated Urban Area) ["Quebec City"] = {container = "Quebec"}, -- 839,311 metro per Wikipedia (2021 census) ["Winnipeg"] = {container = "Manitoba"}, -- 834,678 metro per Wikipedia (2021 census) ["Hamilton"] = {container = "Ontario", wp = "%l, %c"}, -- 785,184 metro per Wikipedia (2021 census) ["Kitchener"] = {container = "Ontario", wp = "%l, %c"}, -- 575,847 metro per Wikipedia (2021 census) } export.canada_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Canada", "province"), default_placetype = "city", data = export.canada_cities, } export.france_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. ["Paris"] = {container = "Île-de-France"}, -- 11,500,000 (Conglomeration) ["Lyon"] = {container = "Auvergne-Rhône-Alpes"}, -- 2,050,000 (Conglomeration) ["Lyons"] = {alias_of = "Lyon", display = true}, ["Marseille"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 1,710,000 (Conglomeration) ["Marseilles"] = {alias_of = "Marseille", display = true}, ["Lille"] = {container = "Hauts-de-France"}, -- 1,320,000 (Conglomeration) ["Bordeaux"] = {container = "Nouvelle-Aquitaine"}, -- 1,160,000 (Conglomeration) ["Toulouse"] = {container = "Occitania"}, -- 1,150,000 (Conglomeration) ["Nice"] = {container = "Provence-Alpes-Côte d'Azur"}, ["Nantes"] = {container = "Pays de la Loire"}, ["Strasbourg"] = {container = "Grand Est"}, ["Rennes"] = {container = "Brittany"}, } export.france_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", France", "region"), default_placetype = "city", data = export.france_cities, } export.germany_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. -- listed under Rhein-Ruhr Area, total population 10,900,000 (Consolidated Urban Area) ["Cologne"] = {container = "North Rhine-Westphalia"}, ["Köln"] = {alias_of = "Cologne", display = true}, ["Düsseldorf"] = {container = "North Rhine-Westphalia"}, ["Dusseldorf"] = {alias_of = "Düsseldorf", display = true}, ["Dortmund"] = {container = "North Rhine-Westphalia"}, ["Essen"] = {container = "North Rhine-Westphalia"}, ["Duisberg"] = {container = "North Rhine-Westphalia"}, ["Berlin"] = {}, -- 4,700,000 ["Frankfurt"] = {container = "Hesse"}, -- 3,225,000 ["Frankfurt am Main"] = {alias_of = "Frankfurt"}, -- not a display alias as it's longer ["Hamburg"] = {}, -- 2,900,000 ["Munich"] = {container = "Bavaria"}, -- 2,300,000 ["Stuttgart"] = {container = "Baden-Württemberg"}, -- 2,300,000 ["Mannheim"] = {container = "Baden-Württemberg"}, -- 1,550,000 ["Nuremberg"] = {container = "Bavaria"}, -- 1,120,000 ["Hanover"] = {"Lower Saxony"}, -- 1,090,000 ["Bielefeld"] = {container = "North Rhine-Westphalia"}, -- 1,080,000 ["Leipzig"] = {container = "Saxony"}, -- 1,080,000 ["Aachen"] = {container = "North Rhine-Westphalia"}, -- 1,000,000 ["Aix-la-Chapelle"] = {alias_of = "Aachen"}, -- historical; not a display alias ["Bremen"] = {}, } export.germany_cities_group = { default_container = "Germany", canonicalize_key_container = make_canonicalize_key_container(", Germany", "state"), default_placetype = "city", data = export.germany_cities, } export.india_cities = { -- This lists the 65 metro areas per Demographia's 2023 estimates, as found in -- [[w:List_of_million-plus_urban_agglomerations_in_India]]. The last census in India (as of April 2025) was -- conducted in 2011, and the results are not accurate any more. ["Delhi"] = {container = {key = "Delhi, India", placetype = "union territory"}}, -- 31,190,000 ["Mumbai"] = {container = "Maharashtra"}, -- 25,189,000 ["Kolkata"] = {container = "West Bengal"}, -- 21,747,000 ["Bangalore"] = {container = "Karnataka", wp = "Bengaluru"}, -- 15,257,000 ["Bengaluru"] = {alias_of = "Bangalore"}, ["Chennai"] = {container = "Tamil Nadu"}, -- 11,570,000 ["Hyderabad"] = {container = "Telangana"}, -- 9,797,000 ["Ahmedabad"] = {container = "Gujarat"}, -- 8,006,000 ["Pune"] = {container = "Maharashtra"}, -- 6,819,000 ["Surat"] = {container = "Gujarat"}, -- 6,601,000 ["Lucknow"] = {container = "Uttar Pradesh"}, -- 4,661,000 ["Jaipur"] = {container = "Rajasthan"}, -- 4,360,000 ["Kanpur"] = {container = "Uttar Pradesh"}, -- 4,350,000 ["Indore"] = {container = "Madhya Pradesh"}, -- 3,765,000 ["Nagpur"] = {container = "Maharashtra"}, -- 3,493,000 ["Patna"] = {container = "Bihar"}, -- 3,331,000 ["Varanasi"] = {container = "Uttar Pradesh"}, -- 3,229,000 ["Kozhikode"] = {container = "Kerala"}, -- 3,049,000 ["Thiruvananthapuram"] = {container = "Kerala"}, -- 2,851,000 ["Agra"] = {container = "Uttar Pradesh"}, -- 2,737,000 ["Bhopal"] = {container = "Madhya Pradesh"}, -- 2,562,000 ["Coimbatore"] = {container = "Tamil Nadu"}, -- 2,551,000 ["Allahabad"] = {container = "Uttar Pradesh", wp = "Prayagraj"}, -- 2,438,000 ["Prayagraj"] = {alias_of = "Allahabad"}, ["Kochi"] = {container = "Kerala"}, -- 2,381,000 ["Ludhiana"] = {container = "Punjab"}, -- 2,205,000 ["Vadodara"] = {container = "Gujarat"}, -- 2,182,000 ["Chandigarh"] = {container = {key = "Chandigarh, India", placetype = "union territory"}}, -- 2,168,000 ["Madurai"] = {container = "Tamil Nadu"}, -- 2,048,000 ["Meerut"] = {container = "Uttar Pradesh"}, -- 2,011,000 ["Visakhapatnam"] = {container = "Andhra Pradesh"}, -- 2,005,000 ["Jamshedpur"] = {container = "Jharkhand"}, -- 1,925,000 ["Malappuram"] = {container = "Kerala"}, -- 1,868,000 ["Nashik"] = {container = "Maharashtra"}, -- 1,810,000 ["Asansol"] = {container = "West Bengal"}, -- 1,720,000 ["Aligarh"] = {container = "Uttar Pradesh"}, -- 1,660,000 ["Ranchi"] = {container = "Jharkhand"}, -- 1,638,000 ["Thrissur"] = {container = "Kerala"}, -- 1,578,000 ["Kollam"] = {container = "Kerala"}, -- 1,576,000 ["Jabalpur"] = {container = "Madhya Pradesh"}, -- 1,533,000 ["Dhanbad"] = {container = "Jharkhand"}, -- 1,503,000 ["Jodhpur"] = {container = "Rajasthan"}, -- 1,497,000 ["Aurangabad"] = {container = "Maharashtra"}, -- 1,490,000 ["Chhatrapati Sambhajinagar"] = {alias_of = "Aurangabad"}, ["Rajkot"] = {container = "Gujarat"}, -- 1,487,000 ["Gwalior"] = {container = "Madhya Pradesh"}, -- 1,477,000 ["Raipur"] = {container = "Chhattisgarh"}, -- 1,429,000 ["Gorakhpur"] = {container = "Uttar Pradesh"}, -- 1,410,000 ["Kannur"] = {container = "Kerala"}, -- 1,360,000 ["Bareilly"] = {container = "Uttar Pradesh"}, -- 1,355,000 ["Guwahati"] = {container = "Assam"}, -- 1,355,000 ["Moradabad"] = {container = "Uttar Pradesh"}, -- 1,345,000 ["Amritsar"] = {container = "Punjab"}, -- 1,313,000 ["Mysore"] = {container = "Karnataka"}, -- 1,296,000 ["Bhilai"] = {container = "Chhattisgarh"}, -- 1,293,000 ["Durg-Bhilainagar"] = {alias_of = "Bhilai"}, ["Durg-Bhilai"] = {alias_of = "Bhilai"}, ["Durg"] = {alias_of = "Bhilai"}, ["Bhilainagar"] = {alias_of = "Bhilai"}, ["Vijayawada"] = {container = "Andhra Pradesh"}, -- 1,232,000 ["Srinagar"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,212,000 ["Salem"] = {container = "Tamil Nadu", wp = "%l, %c"}, -- 1,189,000 ["Kota"] = {container = "Rajasthan"}, -- 1,172,000 ["Jalandhar"] = {container = "Punjab"}, -- 1,165,000 ["Saharanpur"] = {container = "Uttar Pradesh"}, -- 1,152,000 ["Dehradun"] = {container = "Uttarakhand"}, -- 1,136,000 ["Tiruchirappalli"] = {container = "Tamil Nadu"}, -- 1,131,000 ["Bhubaneswar"] = {container = "Odisha"}, -- 1,112,000 ["Jammu"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,103,000 ["Solapur"] = {container = "Maharashtra"}, -- 1,082,000 ["Hubli-Dharwad"] = {container = "Karnataka", wp = "Hubli–Dharwad"}, -- 1,062,000; wp with en dash ["Hubli"] = {alias_of = "Hubli-Dharwad"}, ["Dharwad"] = {alias_of = "Hubli-Dharwad"}, ["Puducherry"] = {container = {key = "Puducherry, India", placetype = "union territory"}}, -- 1,024,000 ["Pondicherry"] = {alias_of = "Puducherry", display = true}, -- satellite/secondary cities of metro area (none in citypopulation.de) ["Ghaziabad"] = {container = "Uttar Pradesh"}, -- 1,729,000 city, 2,358,525 urban agglomeration per 2011 census; 3,406,061 2025 estimate from official website; part of Delhi metro area ["Faridabad"] = {container = "Haryana"}, -- 1,414,050 city per 2011 census; part of Delhi metro area ["Thane"] = {container = "Maharashtra"}, -- 1,841,488 city per 2011 census; part of Mumbai metro area ["Kalyan-Dombivli"] = {container = "Maharashtra"}, -- 1,246,381 city per 2011 census; part of Mumbai metro area ["Kalyan-Dombivali"] = {alias_of = "Kalyan-Dombivli", display = true}, ["Kalyan"] = {alias_of = "Kalyan-Dombivli"}, ["Dombivli"] = {alias_of = "Kalyan-Dombivli"}, ["Dombivali"] = {alias_of = "Kalyan-Dombivli"}, ["Vasai-Virar"] = {container = "Maharashtra"}, -- 1,221,233 city per 2011 census; part of Mumbai metro area ["Vasai"] = {alias_of = "Vasai-Virar"}, ["Virar"] = {alias_of = "Vasai-Virar"}, ["Navi Mumbai"] = {container = "Maharashtra"}, -- 1,120,547 city per 2011 census; part of Mumbai metro area ["Howrah"] = {container = "West Bengal"}, -- 1,077,075 city ("metropolis"), 2,811,344 "metro" per 2011 census; part of Kolkata metro area ["Pimpri-Chinchwad"] = {container = "Maharashtra"}, -- 1,727,692 per 2011 census; part of Pune metro area ["Pimpri Chinchwad"] = {alias_of = "Pimpri-Chinchwad", display = true}, } export.india_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", India", "state"), default_placetype = "city", data = export.india_cities, } export.indonesia_cities = { -- cities where the city proper has more than 1,000,000 people as of mid-2023 estimate ["Jakarta"] = {container = "Special Capital Region of Jakarta", divs = { {type = "subdistricts", container_parent_type = false}, }}, ["Surabaya"] = {container = "East Java"}, ["Bekasi"] = {container = "West Java"}, -- part of Jakarta metro area ["Bandung"] = {container = "West Java"}, ["Medan"] = {container = "North Sumatra"}, ["Depok"] = {container = "West Java"}, -- part of Jakarta metro area ["Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area ["Palembang"] = {container = "South Sumatra"}, ["Semarang"] = {container = "Central Java"}, ["Makassar"] = {container = "South Sulawesi"}, ["South Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area ["Batam"] = {container = "Riau Islands"}, ["Bogor"] = {container = "West Java"}, -- part of Jakarta metro area ["Pekanbaru"] = {container = "Riau"}, ["Bandar Lampung"] = {container = "Lampung"}, -- other metro areas over 1,000,000 people ["Padang"] = {container = "West Sumatra"}, ["Samarinda"] = {container = "East Kalimantan"}, ["Malang"] = {container = "East Java"}, ["Yogyakarta"] = {container = "Special Region of Yogyakarta"}, ["Denpasar"] = {container = "Bali"}, ["Cirebon"] = {container = "West Java"}, ["Surakarta"] = {container = "Central Java"}, ["Banjarmasin"] = {container = "South Kalimantan"}, ["Tasikmalaya"] = {container = "West Java"}, } export.indonesia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Indonesia", "province"), default_placetype = "city", data = export.indonesia_cities, } export.italy_cities = { -- Data per [[w:List_of_metropolitan_areas_of_Italy]]. There are several lists given; the most recent one, used -- here, only gives estimates as of Jan 1, 2014. ["Milan"] = {container = "Lombardy"}, -- 6,623,798 ["Naples"] = {container = "Campania"}, -- 5,294,546 ["Rome"] = {container = "Lazio"}, -- 4,447,881 ["Turin"] = {container = "Piedmont"}, -- 1,865,284 ["Venice"] = {container = "Veneto"}, -- 1,645,900 ["Florence"] = {container = "Tuscany"}, -- 1,485,030 ["Bari"] = {container = "Apulia"}, -- 1,257,459 ["Palermo"] = {container = "Sicily"}, -- 1,183,084 -- include a few just below 1,000,000 metro area that may be above it by now (depending on the definition). ["Catania"] = {container = "Sicily"}, -- 988,240 ["Brescia"] = {container = "Lombardy"}, -- 924,090 ["Genoa"] = {container = "Liguria"}, -- 861,318 } export.italy_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Italy", "region"), default_placetype = "city", data = export.italy_cities, } export.japan_cities = { -- Population figures from [[w:List of cities in Japan]]. Metro areas from -- [[w:List of metropolitan areas in Japan]]. ["Tokyo"] = {keydesc = "[[Tokyo]] Metropolis, the [[capital city]] and a [[prefecture]] of [[Japan]] (which is a country in [[Asia]])", placetype = {"city", "prefecture"}, divs = { {type = "special wards", container_parent_type = false}, {type = "cities", prep = "in"}, }, }, ["Yokohama"] = {container = "Kanagawa"}, -- 3,697,894 ["Osaka"] = {container = "Osaka"}, -- 2,668,586 ["Nagoya"] = {container = "Aichi"}, -- 2,283,289 -- FIXME, Hokkaido is handled specially. ["Sapporo"] = {container = "Hokkaido"}, -- 1,918,096 ["Fukuoka"] = {container = "Fukuoka"}, -- 1,581,527 ["Kobe"] = {container = "Hyōgo"}, -- 1,530,847 ["Kyoto"] = {container = "Kyoto"}, -- 1,474,570 ["Kawasaki"] = {container = "Kanagawa", wp = "%l, Kanagawa"}, -- 1,373,630 ["Saitama"] = {container = "Saitama", wp = "%l (city)", commonscat = "%l, %c"}, -- 1,192,418 ["Hiroshima"] = {container = "Hiroshima"}, -- 1,163,806 ["Sendai"] = {container = "Miyagi"}, -- 1,029,552 -- the remaining cities are considered "central cities" in a 1,000,000+ metro area -- (sometimes there is more than one central city in the area). ["Kitakyushu"] = {container = "Fukuoka"}, -- 986,998 ["Chiba"] = {container = "Chiba", wp = "%l (city)", commonscat = "%l, %c"}, -- 938,695 ["Sakai"] = {container = "Osaka"}, -- 835,333 ["Niigata"] = {container = "Niigata", wp = "%l (city)", commonscat = "%l, %c"}, -- 813,053 ["Hamamatsu"] = {container = "Shizuoka"}, -- 811,431 ["Shizuoka"] = {container = "Shizuoka", wp = "%l (city)", commonscat = "%l, %c"}, -- 710,944 ["Sagamihara"] = {container = "Kanagawa"}, -- 706,342 ["Okayama"] = {container = "Okayama"}, -- 701,293 ["Kumamoto"] = {container = "Kumamoto"}, -- 670,348 ["Kagoshima"] = {container = "Kagoshima"}, -- 605,196 -- skipped 6 cities (Funabashi, Hachiōji, Kawaguchi, Himeji, Matsuyama, Higashiōsaka) -- with population in the range 509k - 587k because not central cities in any -- 1,000,000+ metro area. ["Utsunomiya"] = {container = "Tochigi"}, -- 507,833 } export.japan_cities_group = { default_container = "Japan", canonicalize_key_container = make_canonicalize_key_container(" Prefecture, Japan", "prefecture"), default_placetype = "city", data = export.japan_cities, } export.mexico_cities = { ["Mexico City"] = {}, -- its own state ["Monterrey"] = {container = "Nuevo León"}, ["Guadalajara"] = {container = "Jalisco"}, ["Puebla"] = {container = "Puebla", wp = "%l (city)"}, ["Toluca"] = {container = "State of Mexico"}, ["Tijuana"] = {container = "Baja California"}, -- Include the state in the category for León due to possible confusion with León, Spain. ["León, Guanajuato"] = {container = "Guanajuato", wp = "%l, %c"}, ["León"] = {alias_of = "León, Guanajuato"}, ["Leon"] = {alias_of = "León, Guanajuato", display = true}, ["Querétaro"] = {container = "Querétaro", wp = "%l (city)"}, ["Queretaro"] = {alias_of = "Querétaro", display = true}, ["Ciudad Juárez"] = {container = "Chihuahua"}, ["Juárez"] = {alias_of = "Ciudad Juárez"}, ["Juarez"] = {alias_of = "Ciudad Juárez", display = "Juárez"}, ["Torreón"] = {container = "Coahuila"}, ["Torreon"] = {alias_of = "Torreón", display = true}, -- Include the state in the category for Mérida due to possible confusion with Mérida, Spain or -- Mérida, Venezuela. ["Mérida, Yucatán"] = {container = "Yucatán", wp = "%l, %c"}, ["Mérida"] = {alias_of = "Mérida, Yucatán"}, ["Merida"] = {alias_of = "Mérida, Yucatán", display = true}, ["San Luis Potosí"] = {container = "San Luis Potosí", wp = "%l (city)"}, ["San Luis Potosi"] = {alias_of = "San Luis Potosí", display = true}, ["Aguascalientes"] = {container = "Aguascalientes", wp = "%l (city)"}, ["Mexicali"] = {container = "Baja California"}, } export.mexico_cities_group = { default_container = "Mexico", canonicalize_key_container = make_canonicalize_key_container(", Mexico", "state"), default_placetype = "city", data = export.mexico_cities, } export.nigeria_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. ["Lagos"] = {container = "Lagos"}, -- 21,300,000 (unindicated; population of low reliability) ["Kano"] = {container = "Kano", wp = "%l (city)"}, -- 5,350,000 (unindicated; population of low reliability) ["Ibadan"] = {container = "Oyo"}, -- 3,400,000 (unindicated; population of low reliability) ["Abuja"] = {container = {key = "Federal Capital Territory, Nigeria", placetype = "federal territory"}}, -- 3,050,000 (unindicated; population of low reliability) ["Port Harcourt"] = {container = "Rivers"}, -- 2,250,000 (unindicated; population of low reliability) ["Kaduna"] = {container = "Kaduna"}, -- 1,980,000 (unindicated; population of low reliability) ["Benin City"] = {container = "Edo"}, -- 1,790,000 (unindicated; population of low reliability) ["Aba"] = {container = "Abia", wp = "%l, Nigeria"}, -- 1,280,000 (unindicated; population of low reliability) ["Onitsha"] = {container = "Anambra"}, -- 1,230,000 (unindicated; population of low reliability) ["Maiduguri"] = {container = "Borno"}, -- 1,190,000 (unindicated; population of low reliability) ["Ilorin"] = {container = "Kwara"}, -- 1,160,000 (unindicated; population of low reliability) ["Sokoto"] = {container = "Sokoto", wp = "%l (city)"}, -- 1,140,000 (unindicated; population of low reliability) ["Jos"] = {container = "Plateau"}, -- 1,110,000 (unindicated; population of low reliability) ["Zaria"] = {container = "Kaduna"}, -- 1,050,000 (unindicated; population of low reliability) ["Enugu"] = {container = "Enugu", wp = "%l (city)"}, -- 1,010,000 (unindicated; population of low reliability) } export.nigeria_cities_group = { default_container = "Nigeria", canonicalize_key_container = make_canonicalize_key_container(" State, Nigeria", "state"), default_placetype = "city", data = export.nigeria_cities, } export.pakistan_cities = { -- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01. ["Karachi"] = {container = "Sindh"}, -- 21,000,000 (Consolidated Urban Area) ["Lahore"] = {container = "Punjab"}, -- 14,600,000 (Consolidated Urban Area) ["Rawalpindi"] = {container = "Punjab"}, -- 5,600,000 (Consolidated Urban Area; including Islamabad) ["Islamabad"] = {container = {key = "Islamabad Capital Territory, Pakistan", placetype = "federal territory"}}, -- 5,600,000 (Consolidated Urban Area; including Rawalpindi) ["Faisalabad"] = {container = "Punjab"}, -- 4,125,000 (Consolidated Urban Area) ["Gujranwala"] = {container = "Punjab"}, -- 3,450,000 (Consolidated Urban Area) -- there is also Hyderabad in India (very confusing) ["Hyderabad, Pakistan"] = {container = "Sindh", wp = "%l, %c"}, -- 2,475,000 (Consolidated Urban Area) ["Hyderabad"] = {alias_of = "Hyderabad, Pakistan"}, ["Multan"] = {container = "Punjab"}, -- 2,425,000 (Consolidated Urban Area) ["Peshawar"] = {container = "Khyber Pakhtunkhwa"}, -- 2,150,000 (Consolidated Urban Area) ["Quetta"] = {container = "Balochistan"}, -- 1,720,000 (Urban Area) ["Sargodha"] = {container = "Punjab"}, -- 1,080,000 (Urban Area) ["Sialkot"] = {container = "Punjab"}, -- 1,050,000 (Consolidated Urban Area) } export.pakistan_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Pakistan", "province"), default_placetype = "city", data = export.pakistan_cities, } export.philippines_cities = { -- Skipped some cities in Metro Manila (Taguig, Pasig) which don't have districts. -- Other cities outside Metro Manila skipped as not central city in their urban area. ["Quezon City"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, -- Don't display-canonicalize Foo to Foo City as it may make the display weird. ["Quezon"] = {alias_of = "Quezon City"}, ["Manila"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, ["Davao City"] = {container = "Davao del Sur"}, ["Davao"] = {alias_of = "Davao City"}, ["Caloocan"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, ["Zamboanga City"] = {container = "Zamboanga del Sur"}, ["Zamboanga"] = {alias_of = "Zamboanga City"}, ["Cebu City"] = {container = "Cebu"}, ["Cebu"] = {alias_of = "Cebu City"}, ["Antipolo"] = {container = "Rizal"}, ["Cagayan de Oro"] = {container = "Misamis Oriental"}, ["Dasmariñas"] = {container = "Cavite"}, ["Dasmarinas"] = {alias_of = "Dasmariñas", display = true}, ["General Santos"] = {container = "South Cotabato"}, ["San Jose del Monte"] = {container = "Bulacan"}, ["Bacolod"] = {container = "Negros Occidental"}, ["Calamba"] = {container = "Laguna", wp = "%l, %c"}, ["Angeles"] = {container = "Pampanga", wp = "Angeles City"}, ["Angeles City"] = {alias_of = "Angeles"}, ["Iloilo City"] = {container = "Iloilo"}, ["Iloilo"] = {alias_of = "Iloilo City"}, } export.philippines_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Philippines", "province"), default_placetype = "city", data = export.philippines_cities, } export.russia_cities = { -- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01. ["Moscow"] = {}, -- 18,800,000 (Agglomeration) ["Saint Petersburg"] = {}, -- 6,350,000 (Agglomeration) ["Novosibirsk"] = {container = "Novosibirsk Oblast"}, -- 1,820,000 (Agglomeration) ["Yekaterinburg"] = {container = "Sverdlovsk Oblast"}, -- 1,810,000 (Agglomeration) ["Nizhny Novgorod"] = {container = "Nizhny Novgorod Oblast"}, -- 1,620,000 (Agglomeration) ["Kazan"] = {container = {key = "Tatarstan, Russia", placetype = "republic"}}, -- 1,560,000 (Agglomeration) ["Chelyabinsk"] = {container = "Chelyabinsk Oblast"}, -- 1,430,000 (Agglomeration) ["Rostov-on-Don"] = {container = "Rostov Oblast"}, -- 1,390,000 (Agglomeration) ["Rostov-na-Donu"] = {alias_of = "Rostov-on-Don", display = true}, ["Krasnodar"] = {container = {key = "Krasnodar Krai, Russia", placetype = "krai"}}, -- 1,370,000 (Agglomeration) ["Samara"] = {container = "Samara Oblast"}, -- 1,350,000 (Agglomeration) ["Krasnoyarsk"] = {container = {key = "Krasnoyarsk Krai, Russia", placetype = "krai"}}, -- 1,270,000 (Agglomeration) ["Ufa"] = {container = {key = "Bashkortostan, Russia", placetype = "republic"}}, -- 1,230,000 (Agglomeration) ["Saratov"] = {container = "Saratov Oblast"}, -- 1,170,000 (Agglomeration) ["Omsk"] = {container = "Omsk Oblast"}, -- 1,140,000 (Agglomeration) ["Voronezh"] = {container = "Voronezh Oblast"}, -- 1,130,000 (Agglomeration) ["Volgograd"] = {container = "Volgograd Oblast"}, -- 1,080,000 (Agglomeration) ["Perm"] = {container = {key = "Perm Krai, Russia", placetype = "krai"}, wp = "%l, Russia"}, -- 1,070,000 (Agglomeration) } export.russia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Russia", "oblast"), default_container = "Russia", default_placetype = "city", data = export.russia_cities, } export.saudi_arabia_cities = { -- Figures for the first five from [[w:List of cities and towns in Saudi Arabia]] as of 2022. Unclear if these are -- metro, urban or city proper figures. ["Riyadh"] = {container = "Riyadh"}, -- 7,000,100; 7,700,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Jeddah"] = {container = "Mecca"}, -- 3,751,917; 3,950,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Jedda"] = {alias_of = "Jeddah", display = true}, ["Jiddah"] = {alias_of = "Jeddah", display = true}, ["Jidda"] = {alias_of = "Jeddah", display = true}, ["Dammam"] = {container = "Eastern"}, -- 2,638,166; 2,925,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Mecca"] = {container = "Mecca"}, -- 2,385,509; 2,675,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Makkah"] = {alias_of = "Mecca", display = true}, ["Medina"] = {container = "Medina"}, -- 1,477,023; 1,530,000 per citypopulation.de 2025-01-01 (City) ["Hofuf"] = {container = "Eastern"}, -- 1,060,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Khamis Mushait"] = {container = "Aseer"}, -- 1,030,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Khamis Mushayt"] = {alias_of = "Khamis Mushait", display = true}, } export.saudi_arabia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(" Province, Saudi Arabia", "province"), default_placetype = "city", data = export.saudi_arabia_cities, } export.south_korea_cities = { -- All cities listed are not associated with any county. ["Seoul"] = {}, ["Busan"] = {}, ["Incheon"] = {}, ["Daegu"] = {}, ["Daejeon"] = {}, ["Gwangju"] = {}, ["Ulsan"] = {}, } export.south_korea_cities_group = { default_container = "South Korea", canonicalize_key_container = make_canonicalize_key_container(" County, South Korea", "province"), default_placetype = "city", data = export.south_korea_cities, } export.spain_cities = { ["Madrid"] = {container = "Community of Madrid"}, ["Barcelona"] = {container = "Catalonia"}, ["Valencia"] = {container = "Valencia"}, ["Seville"] = {container = "Andalusia"}, ["Bilbao"] = {container = "Basque Country"}, } export.spain_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Spain", "autonomous community"), default_placetype = "city", data = export.spain_cities, } export.taiwan_cities = { ["New Taipei City"] = {}, ["New Taipei"] = {alias_of = "New Taipei City", display = true}, ["Taichung"] = {}, ["Kaohsiung"] = {wp = "%l, Taiwan"}, ["Taipei"] = {}, ["Taoyuan"] = {}, ["Tainan"] = {}, -- these last three are not special municipalities ["Chiayi"] = {placetype = "city"}, ["Hsinchu"] = {placetype = "city"}, ["Keelung"] = {placetype = "city"}, } export.taiwan_cities_group = { placename_to_key = false, -- don't add ", Taiwan" to make the key canonicalize_key_container = make_canonicalize_key_container(", Taiwan", "county"), default_container = "Taiwan", default_placetype = {"special municipality", "municipality", "city"}, default_is_city = true, default_divs = {"districts"}, data = export.taiwan_cities, } -- NOTE: It's OK to mix cities from different constituent countries; as long as the immediate container is correct, -- everything else will be figured out. export.united_kingdom_cities = { ["London"] = {container = "Greater London"}, ["Manchester"] = {container = "Greater Manchester"}, ["Birmingham"] = {container = "West Midlands"}, ["Liverpool"] = {container = "Merseyside"}, ["Glasgow"] = {container = {key = "City of Glasgow, Scotland", placetype = "council area"}}, ["Leeds"] = {container = "West Yorkshire"}, ["Newcastle upon Tyne"] = {container = "Tyne and Wear"}, ["Newcastle"] = {alias_of = "Newcastle upon Tyne"}, ["Bristol"] = {container = {key = "England", placetype = "constituent country"}}, ["Cardiff"] = {container = {key = "Wales", placetype = "constituent country"}}, ["Portsmouth"] = {container = "Hampshire"}, ["Edinburgh"] = {container = {key = "City of Edinburgh, Scotland", placetype = "council area"}}, -- under 1,000,000 people but principal areas of Wales; requested by [[User:Donnanz]] ["Swansea"] = {container = {key = "Wales", placetype = "constituent country"}}, ["Newport"] = {container = {key = "Wales", placetype = "constituent country"}, wp = "Newport, Wales"}, } export.united_kingdom_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", England", "county"), default_placetype = "city", data = export.united_kingdom_cities, } export.united_states_cities = { -- top 50 CSA's by population, with the top and sometimes 2nd or 3rd city listed ["New York City"] = {container = "New York", wp = "%l", divs = { {type = "boroughs", container_parent_type = false}, }}, -- Don't display-canonicalize as it may make the display weird (e.g. in the context New York, New York). ["New York"] = {alias_of = "New York City"}, ["Newark"] = {container = "New Jersey"}, ["Los Angeles"] = {container = "California", wp = "%l"}, ["Long Beach"] = {container = "California"}, ["Riverside"] = {container = "California"}, ["Chicago"] = {container = "Illinois", wp = "%l"}, ["Washington, D.C."] = {wp = "%l"}, ["Washington, DC"] = {alias_of = "Washington, D.C.", display = true}, ["Washington D.C."] = {alias_of = "Washington, D.C.", display = true}, ["Washington DC"] = {alias_of = "Washington, D.C.", display = true}, -- Don't display-canonicalize as it may make the display weird (e.g. if the holonym is followed by a District of -- Columbia holonym). ["Washington"] = {alias_of = "Washington, D.C."}, ["Baltimore"] = {container = "Maryland", wp = "%l"}, -- to avoid conflict with San Jose in Costa Rica ["San Jose, California"] = {container = "California"}, ["San Jose"] = {alias_of = "San Jose, California"}, ["San Francisco"] = {container = "California", wp = "%l"}, ["Oakland"] = {container = "California"}, ["Boston"] = {container = "Massachusetts", wp = "%l"}, ["Providence"] = {container = "Rhode Island"}, ["Dallas"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"}, ["Fort Worth"] = {container = "Texas"}, ["Philadelphia"] = {container = "Pennsylvania", wp = "%l"}, ["Houston"] = {container = "Texas", wp = "%l"}, ["Miami"] = {container = "Florida", wp = "%l", commonscat = "%l, %c"}, ["Atlanta"] = {container = "Georgia", wp = "%l"}, ["Detroit"] = {container = "Michigan", wp = "%l"}, ["Phoenix"] = {container = "Arizona", wp = "%l", commonscat = "%l, %c"}, ["Mesa"] = {container = "Arizona"}, ["Seattle"] = {container = "Washington", wp = "%l"}, ["Orlando"] = {container = "Florida"}, ["Minneapolis"] = {container = "Minnesota", wp = "%l"}, ["Cleveland"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"}, ["Denver"] = {container = "Colorado", wp = "%l", commonscat = "%l, %c"}, ["San Diego"] = {container = "California", wp = "%l", commonscat = "%l, %c"}, ["Portland"] = {container = "Oregon"}, ["Tampa"] = {container = "Florida"}, ["St. Louis"] = {container = "Missouri", wp = "%l", commonscat = "%l, %c"}, ["Saint Louis"] = {alias_of = "St. Louis", display = true}, ["Charlotte"] = {container = "North Carolina"}, ["Sacramento"] = {container = "California"}, ["Pittsburgh"] = {container = "Pennsylvania", wp = "%l"}, ["Salt Lake City"] = {container = "Utah", wp = "%l"}, ["San Antonio"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"}, ["Columbus"] = {container = "Ohio"}, ["Kansas City"] = {container = "Missouri", wp = "%l metropolitan area", commonscat = "%l, %c"}, ["Indianapolis"] = {container = "Indiana", wp = "%l"}, ["Las Vegas"] = {container = "Nevada", wp = "%l"}, ["Cincinnati"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"}, ["Austin"] = {container = "Texas"}, ["Milwaukee"] = {container = "Wisconsin", wp = "%l", commonscat = "%l, %c"}, ["Raleigh"] = {container = "North Carolina"}, ["Nashville"] = {container = "Tennessee"}, ["Virginia Beach"] = {container = "Virginia"}, ["Norfolk"] = {container = "Virginia"}, ["Greensboro"] = {container = "North Carolina"}, ["Winston-Salem"] = {container = "North Carolina"}, ["Jacksonville"] = {container = "Florida"}, ["New Orleans"] = {container = "Louisiana", wp = "%l"}, ["Louisville"] = {container = "Kentucky"}, ["Greenville"] = {container = "South Carolina"}, ["Hartford"] = {container = "Connecticut"}, ["Oklahoma City"] = {container = "Oklahoma", wp = "%l"}, ["Grand Rapids"] = {container = "Michigan"}, ["Memphis"] = {container = "Tennessee"}, ["Birmingham, Alabama"] = {container = "Alabama"}, ["Birmingham"] = {alias_of = "Birmingham, Alabama"}, ["Fresno"] = {container = "California"}, ["Richmond"] = {container = "Virginia"}, ["Harrisburg"] = {container = "Pennsylvania"}, -- any major city of top 50 MSA's that's missed by previous ["Buffalo"] = {container = "New York"}, -- any of the top 50 city by city population that's missed by previous ["El Paso"] = {container = "Texas"}, ["Albuquerque"] = {container = "New Mexico"}, ["Tucson"] = {container = "Arizona"}, ["Colorado Springs"] = {container = "Colorado"}, ["Omaha"] = {container = "Nebraska"}, ["Tulsa"] = {container = "Oklahoma"}, -- skip Arlington, Texas; too obscure and likely to be interpreted as Arlington, Virginia } export.united_states_cities_group = { default_container = "United States", canonicalize_key_container = make_canonicalize_key_container(", USA", "state"), default_placetype = "city", default_wp = "%l, %c", data = export.united_states_cities, } export.new_york_boroughs = { ["Bronx"] = {the = true, wp = "The Bronx"}, ["Brooklyn"] = {}, ["Manhattan"] = {}, ["Queens"] = {}, ["Staten Island"] = {}, } export.new_york_boroughs_group = { default_container = {key = "New York City", placetype = "city"}, default_placetype = "borough", default_is_city = true, data = export.new_york_boroughs, } export.vietnam_cities = { -- Figures from citypopulation.de (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated. ["Ho Chi Minh City"] = {}, -- 14,300,000 (Agglomeration; inclunding Bien Hoa) ["Saigon"] = {alias_of = "Ho Chi Minh City"}, ["Hanoi"] = {}, -- 7,350,000 (Agglomeration) ["Da Nang"] = {}, -- 1,500,000 (Agglomeration) ["Danang"] = {alias_of = "Da Nang", display = true}, ["Haiphong"] = {}, -- 1,450,000 (Agglomeration) ["Hai Phong"] = {alias_of = "Haiphong", display = true}, -- This is the one entry in this list that is not a province-level municipality; instead it's a "provincial city" -- meaning it is directly under its province as opposed to being contained in a district. ["Bien Hoa"] = {placetype = "city", container = "Đồng Nai", wp = "Biên Hòa"}, -- 1,272,235 (2022 city population per Wikipedia) ["Biên Hòa"] = {alias_of = "Bien Hoa", display = true}, ["Biên Hoà"] = {alias_of = "Bien Hoa", display = true}, -- These two not in citypopulation.de because the urban population may be slightly under 1,000,000, but they are -- both province-level municipalities and close to the 1,000,000 mark. ["Can Tho"] = {wp = "Cần Thơ"}, -- 1,456,000 municipality (2019 census), 994,704 urban (2022 General Statistics Office of Vietnam estimate); capital [[Ninh Kiều district]] ["Cần Thơ"] = {alias_of = "Can Tho", display = true}, ["Hue"] = {wp = "Huế"}, -- 1,257,000 municipality (2019 census), 840,000 urban (2022 General Statistics Office of Vietnam estimate); -- capital [[Thuận Hóa district]] ["Huế"] = {alias_of = "Hue", display = true}, } export.vietnam_cities_group = { placename_to_key = false, -- don't add ", Vietnam" to make the key default_container = "Vietnam", canonicalize_key_container = make_canonicalize_key_container(" Province, Vietnam", "province"), -- Most of the cities listed are province-level municipalities in addition, which contain a certain amount of -- rural territory surrounding the city, but not enough to separate the municipality from the city as distinct -- known locations. default_placetype = {"municipality", "city"}, default_is_city = true, -- There may not be enough districts to subcategorize like this. -- default_divs = "districts", data = export.vietnam_cities, } export.misc_cities = { ------------------ Africa ------------------- -- Sorted by country and then within the country, by decreasing population; figures from citypopulation.de -- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated; combined with data from -- [[w:List of urban areas in Africa by population]]. ["Algiers"] = {container = "Algeria"}, -- 4,325,000 (Consolidated Urban Area) ["Oran"] = {container = "Algeria"}, -- 1,640,000 (Consolidated Urban Area) ["Luanda"] = {container = "Angola"}, -- 9,650,000 (Urban Area) ["Benguela"] = {container = "Angola"}, -- 1,420,000 (Urban Area) ["Cotonou"] = {container = "Benin"}, -- 2,150,000 (Agglomeration) ["Ouagadougou"] = {container = "Burkina Faso"}, -- 3,425,000 (Agglomeration) ["Bobo-Dioulasso"] = {container = "Burkina Faso"}, -- 1,100,000 (Agglomeration) ["Bujumbura"] = {container = "Burundi"}, -- 1,143,202 (Urban Area 2023 per PopulationStat, cited in Wikipedia) ["Yaoundé"] = {container = "Cameroon"}, -- 3,975,000 (City) ["Yaounde"] = {alias_of = "Yaoundé", display = true}, ["Douala"] = {container = "Cameroon"}, -- 3,900,000 (City) ["Bangui"] = {container = "Central African Republic"}, -- 1,680,000 (Agglomeration) ["N'Djamena"] = {container = "Chad"}, -- 1,950,000 (City) ["Ndjamena"] = {alias_of = "N'Djamena", display = true}, ["Kinshasa"] = {container = "Democratic Republic of the Congo"}, -- 16,300,000 (City; population of low reliability) ["Lubumbashi"] = {container = "Democratic Republic of the Congo"}, -- 2,875,000 (City; population of low reliability) ["Mbuji-Mayi"] = {container = "Democratic Republic of the Congo"}, -- 2,500,000 (City; population of low reliability) ["Kananga"] = {container = "Democratic Republic of the Congo"}, -- 1,370,000 (City; population of low reliability) ["Kisangani"] = {container = "Democratic Republic of the Congo"}, -- 1,300,000 (City; population of low reliability) ["Bukavu"] = {container = "Democratic Republic of the Congo"}, -- 1,100,000 (City; population of low reliability) ["Goma"] = {container = "Democratic Republic of the Congo"}, -- 1,010,000 (City; population of low reliability) ["Tshikapa"] = {container = "Democratic Republic of the Congo"}, -- 1,020,468 (2023 Wikipedia [[w:List of cities with over one million inhabitants]] from populationstat.com; not in citypopulation.de) ["Cairo"] = {container = "Egypt"}, -- 22,800,000 (Agglomeration, including Giza and Subhra El Kheima) ["Alexandria"] = {container = "Egypt"}, -- 6,250,000 (Agglomeration) ["Giza"] = {container = "Egypt"}, -- 4,458,135 (2023 from citypopulation.de) ["Shubra El Kheima"] = {container = "Egypt"}, -- 1,240,239 (2021 from citypopulation.de) ["Asmara"] = {container = "Eritrea"}, -- 1,090,000 (City; population of low reliability) ["Asmera"] = {alias_of = "Asmara", display = true}, ["Addis Ababa"] = {container = "Ethiopia"}, -- 4,825,000 (Agglomeration) ["Banjul"] = {container = "Gambia"}, -- 1,170,000 (Agglomeration) ["Accra"] = {container = "Ghana"}, -- 6,800,000 (Agglomeration) ["Kumasi"] = {container = "Ghana"}, -- 2,900,000 (Agglomeration) ["Conakry"] = {container = "Guinea"}, -- 2,975,000 (Consolidated Urban Area) ["Abidjan"] = {container = "Ivory Coast"}, -- 7,050,000 (Agglomeration) ["Nairobi"] = {container = "Kenya"}, -- 6,900,000 (unindicated) ["Mombasa"] = {container = "Kenya"}, -- 1,370,000 (City) ["Monrovia"] = {container = "Liberia"}, -- 1,940,000 (Urban Area) ["Tripoli"] = {container = "Libya", wp = "%l, %c"}, -- 1,870,000 (unindicated) ["Antananarivo"] = {container = "Madagascar"}, -- 3,150,000 (Agglomeration) ["Lilongwe"] = {container = "Malawi"}, -- 1,210,000 (City) ["Bamako"] = {container = "Mali"}, -- 5,700,000 (Agglomeration) ["Nouakchott"] = {container = "Mauritania"}, -- 1,500,000 (City) ["Casablanca"] = {container = {key = "Casablanca-Settat, Morocco", placetype = "region"}}, -- 4,450,000 (Municipality (urban population)) ["Rabat"] = {container = {key = "Rabat-Sale-Kenitra, Morocco", placetype = "region"}}, -- 2,125,000 (Municipality (urban population)) ["Tangier"] = {container = {key = "Tangier-Tetouan-Al Hoceima, Morocco", placetype = "region"}}, -- 1,410,000 (Municipality (urban population)) ["Tanger"] = {alias_of = "Tangier", display = true}, ["Tangiers"] = {alias_of = "Tangier", display = true}, ["Fez"] = {container = {key = "Fez-Meknes, Morocco", placetype = "region"}, wp = "%l, Morocco"}, -- 1,310,000 (Municipality (urban population)) ["Fes"] = {alias_of = "Fez", display = true}, ["Fès"] = {alias_of = "Fez", display = true}, ["Agadir"] = {container = {key = "Souss-Massa, Morocco", placetype = "region"}}, -- 1,270,000 (Municipality (urban population)) ["Marrakesh"] = {container = {key = "Marrakesh-Safi, Morocco", placetype = "region"}}, -- 1,140,000 (Municipality (urban population)) ["Marrakech"] = {alias_of = "Marrakesh", display = true}, ["Maputo"] = {container = "Mozambique"}, -- 2,575,000 (Agglomeration) ["Niamey"] = {container = "Niger"}, -- 1,530,000 (City) ["Brazzaville"] = {container = "Republic of the Congo"}, -- 2,475,000 (Agglomeration) ["Pointe-Noire"] = {container = "Republic of the Congo"}, -- 1,480,000 (City) ["Kigali"] = {container = "Rwanda"}, -- 1,960,000 (Municipality (urban population)) ["Dakar"] = {container = "Senegal"}, -- 4,225,000 (Agglomeration) ["Touba"] = {container = "Senegal"}, -- 1,320,000 (Agglomeration) ["Freetown"] = {container = "Sierra Leone"}, -- 1,420,000 (Agglomeration) ["Mogadishu"] = {container = "Somalia"}, -- 2,250,000 (unindicated; population of low reliability) ["Johannesburg"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 14,800,000 (Consolidated Urban Area; including Pretoria, Soweto, etc.) ["Cape Town"] = {container = {key = "Western Cape, South Africa", placetype = "province"}}, -- 5,100,000 (Consolidated Urban Area) ["Durban"] = {container = {key = "KwaZulu-Natal, South Africa", placetype = "province"}}, -- 3,900,000 (Consolidated Urban Area) ["Pretoria"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 2,921,488 (2011 census) ["Port Elizabeth"] = {container = {key = "Eastern Cape, South Africa", placetype = "province"}, wp = "Gqeberha"}, -- 1,200,000 (Consolidated Urban Area) ["Gqeberha"] = {alias_of = "Port Elizabeth"}, -- official name; not a display alias ["Khartoum"] = {container = "Sudan"}, -- 7,200,000 (unindicated; population of low reliability) ["Dar es Salaam"] = {container = "Tanzania"}, -- 6,650,000 (Agglomeration) ["Mwanza"] = {container = "Tanzania"}, -- 1,340,000 (Agglomeration) ["Mwanza City"] = {alias_of = "Mwanza", display = true}, ["Arusha"] = {container = "Tanzania"}, -- 1,190,000 (Agglomeration) ["Zanzibar"] = {container = "Tanzania"}, -- 1,030,000 (Agglomeration) ["Lomé"] = {container = "Togo"}, -- 2,625,000 (unindicated) ["Lome"] = {alias_of = "Lomé", display = true}, ["Tunis"] = {container = "Tunisia"}, -- 2,725,000 (Municipality (urban population)) ["Sousse"] = {container = "Tunisia"}, -- 1,180,000 (Municipality (urban population)) ["Soussa"] = {alias_of = "Sousse", display = true}, ["Kampala"] = {container = "Uganda"}, -- 4,300,000 (unindicated) ["Lusaka"] = {container = "Zambia"}, -- 3,000,000 (Consolidated Urban Area) ["Harare"] = {container = "Zimbabwe"}, -- 2,675,000 (Agglomeration) ------------------ Asia ------------------- -- sorted by country and then within the country, by decreasing population; figures from citypopulation.de -- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated. ["Kabul"] = {container = "Afghanistan"}, -- 5,250,000 (Agglomeration) ["Baku"] = {container = "Azerbaijan"}, -- 3,725,000 (Administrative Area (urban population)) ["Manama"] = {container = "Bahrain"}, -- 1,560,000 (unindicated) ["Dhaka"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 23,100,000 (Agglomeration) ["Dacca"] = {alias_of = "Dhaka", display = true}, ["Chittagong"] = {container = {key = "Chittagong Division, Bangladesh", placetype = "division"}}, -- 5,050,000 (Agglomeration) ["Gazipur"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 2,674,697 (City per 2022; countied in citypopulation.de as part of Dhaka metro area) ["Khulna"] = {container = {key = "Khulna Division, Bangladesh", placetype = "division"}}, -- 1,210,000 (Agglomeration) ["Phnom Penh"] = {container = "Cambodia"}, -- 2,925,000 (Agglomeration) ["Tehran"] = {container = {key = "Tehran Province, Iran", placetype = "province"}}, -- 16,800,000 (Agglomeration) ["Teheran"] = {alias_of = "Tehran", display = true}, ["Mashhad"] = {container = {key = "Razavi Khorasan Province, Iran", placetype = "province"}}, -- 3,475,000 (Agglomeration) ["Mashad"] = {alias_of = "Mashhad", display = true}, ["Meshhed"] = {alias_of = "Mashhad", display = true}, ["Meshed"] = {alias_of = "Mashhad", display = true}, ["Isfahan"] = {container = {key = "Isfahan Province, Iran", placetype = "province"}}, -- 3,425,000 (Agglomeration) ["Esfahan"] = {alias_of = "Isfahan", display = true}, ["Tabriz"] = {container = {key = "East Azerbaijan Province, Iran", placetype = "province"}}, -- 1,970,000 (Agglomeration) ["Shiraz"] = {container = {key = "Fars Province, Iran", placetype = "province"}}, -- 1,950,000 (Agglomeration) ["Ahvaz"] = {container = {key = "Khuzestan Province, Iran", placetype = "province"}}, -- 1,550,000 (Agglomeration) ["Qom"] = {container = {key = "Qom Province, Iran", placetype = "province"}}, -- 1,450,000 (City) ["Kermanshah"] = {container = {key = "Kermanshah Province, Iran", placetype = "province"}}, -- 1,130,000 (City) ["Baghdad"] = {container = "Iraq"}, -- 7,800,000 (Administrative Area (urban population)) ["Basra"] = {container = "Iraq"}, -- 1,710,000 (Administrative Area (urban population)) ["Mosul"] = {container = "Iraq"}, -- 1,550,000 (Administrative Area (urban population)) ["Erbil"] = {container = "Iraq"}, -- 1,220,000 (Administrative Area (urban population)) ["Kirkuk"] = {container = "Iraq"}, -- 1,160,000 (Administrative Area (urban population)) ["Najaf"] = {container = "Iraq"}, -- 1,050,000 (Administrative Area (urban population)) ["Tel Aviv"] = {container = "Israel"}, -- 3,000,000 (Agglomeration) -- Jerusalem is not recognized internationally as part of either Israel or Palestine, but as a -- [[w:corpus separatum]], so put the container as "Asia" and list Israel and Palestine as additional parents for -- categorization purposes. ["Jerusalem"] = {container = {key = "Asia", placetype = "continent"}, addl_parents = {"Israel", "Palestine"}}, -- 1,080,000 (Agglomeration) ["Amman"] = {container = "Jordan"}, -- 6,150,000 (unindicated) ["Irbid"] = {container = "Jordan"}, -- 1,070,000 (unindicated) ["Almaty"] = {container = "Kazakhstan"}, -- 2,700,000 (Agglomeration) ["Alma-Ata"] = {alias_of = "Almaty"}, -- former name, sometimes still used; don't display-canonicalize ["Astana"] = {container = "Kazakhstan"}, -- 1,600,000 (Agglomeration) ["Shymkent"] = {container = "Kazakhstan"}, -- 1,370,000 (Agglomeration) ["Kuwait City"] = {container = "Kuwait"}, -- 5,050,000 (Agglomeration) ["Bishkek"] = {container = "Kyrgyzstan"}, -- 1,540,000 (Agglomeration) ["Beirut"] = {container = "Lebanon"}, -- 1,930,000 (unindicated; population of low reliability) -- Kuala Lumpur is a federal capital city, not in any state ["Kuala Lumpur"] = {container = "Malaysia"}, -- 9,550,000 (Agglomeration) -- there are various George Towns and Georgetowns ["George Town, Malaysia"] = {container = {key = "Penang, Malaysia", placetype = "state"}, wp = "%l, %c"}, -- 2,075,000 (Agglomeration) ["George Town"] = {alias_of = "George Town, Malaysia"}, ["Ulaanbaatar"] = {container = "Mongolia"}, -- 1,610,000 (City) ["Ulan Bator"] = {alias_of = "Ulaanbaatar", display = true}, ["Yangon"] = {container = "Myanmar"}, -- 5,650,000 (Municipality (urban population)) ["Rangoon"] = {alias_of = "Yangon", display = true}, ["Mandalay"] = {container = "Myanmar"}, -- 1,600,000 (Municipality (urban population)) ["Kathmandu"] = {container = "Nepal"}, -- 3,175,000 (Agglomeration) -- Pyongyang is a directly governed city, not in any province ["Pyongyang"] = {container = "North Korea"}, -- 3,025,000 (Administrative Area (urban population)) ["Muscat"] = {container = "Oman"}, -- 1,620,000 (Agglomeration) ["Gaza"] = {container = "Palestine", wp = "Gaza City"}, -- 2,275,000 (unindicated) ["Gaza City"] = {alias_of = "Gaza"}, ["Doha"] = {container = "Qatar"}, -- 2,650,000 (Agglomeration) ["Colombo"] = {container = "Sri Lanka"}, -- 4,975,000 (unindicated) ["Damascus"] = {container = "Syria"}, -- 3,975,000 (unindicated; population of low reliability) ["Aleppo"] = {container = "Syria"}, -- 1,980,000 (unindicated; population of low reliability) ["Dushanbe"] = {container = "Tajikistan"}, -- 1,270,000 (City) ["Bangkok"] = {container = "Thailand"}, -- 21,800,000 (Agglomeration) -- Chiang Mai not in citypopulation.de, but 1,198,000 urban population in 2021 per Wikipedia -- [[w:List_of_municipalities_in_Thailand#Largest_cities_by_urban_population]] ["Chiang Mai"] = {container = {key = "Chiang Mai Province, Thailand", placetype = "province"}}, ["Chonburi"] = {container = {key = "Chonburi Province, Thailand", placetype = "province"}}, -- 1,570,000 (Agglomeration; including Pattaya) -- metro area population stats from https://www.statista.com/statistics/255483/biggest-cities-in-turkey/ as of 2021; -- second source is citypopulation.de reference date 2025-01-01. ["Istanbul"] = {placetype = {"city", "province"}, divs = {"districts"}, container = "Turkey"}, -- 15.2 million; 16,000,000 (Agglomeration) ["İstanbul"] = {alias_of = "Istanbul", display = true}, ["Ankara"] = {container = {key = "Ankara Province, Turkey", placetype = "province"}}, -- 5.15 million; 5,200,000 (Agglomeration) ["Izmir"] = {container = {key = "İzmir Province, Turkey", placetype = "province"}, wp = "İzmir"}, -- 2.95 million; 3,025,000 (Agglomeration) ["İzmir"] = {alias_of = "Izmir", display = true}, ["Bursa"] = {container = {key = "Bursa Province, Turkey", placetype = "province"}}, -- 2.02 million; 2,200,000 (Agglomeration) ["Adana"] = {container = {key = "Adana Province, Turkey", placetype = "province"}}, -- 1.77 million; 1,780,000 (Agglomeration) ["Gaziantep"] = {container = {key = "Gaziantep Province, Turkey", placetype = "province"}}, -- 1.71 million; 1,750,000 (Agglomeration) ["Antalya"] = {container = {key = "Antalya Province, Turkey", placetype = "province"}}, -- 1.3 million; 1,400,000 (Agglomeration) ["Konya"] = {container = {key = "Konya Province, Turkey", placetype = "province"}}, -- 1.35 million; 1,390,000 (Agglomeration) ["Diyarbakır"] = {container = {key = "Diyarbakır Province, Turkey", placetype = "province"}}, -- 1.07 million; 1,100,000 (Agglomeration) -- Diyarbakır is more common per Ngrams and Google Scholar, but Diyarbakir is the Kurdish form, so we should not -- display-canonicalize to the Turkish form Diyarbakır. ["Diyarbakir"] = {alias_of = "Diyarbakır"}, ["Mersin"] = {container = {key = "Mersin Province, Turkey", placetype = "province"}}, -- 1.03 million; 1,060,000 (Agglomeration) ["Ashgabat"] = {container = "Turkmenistan"}, -- 1,150,000 (Agglomeration) ["Dubai"] = {container = "United Arab Emirates"}, -- 6,050,000 (Agglomeration; including Sharjah) ["Abu Dhabi"] = {container = "United Arab Emirates"}, -- 1,850,000 (City) ["Sharjah"] = {container = "United Arab Emirates"}, -- 1,800,000 (Metro area 2022-2023 per Wikipedia; separate from Dubai) ["Tashkent"] = {container = "Uzbekistan"}, -- 3,850,000 (unindicated) ["Sanaa"] = {container = "Yemen"}, -- 3,275,000 (City; population of low reliability) ["Sana'a"] = {alias_of = "Sanaa", display = true}, ["Aden"] = {container = "Yemen"}, -- 1,079,060 (?; 2023 estimate from World Population Review per Wikipedia) ------------------ Europe or Europe-like (Caucasus etc.) --------------------- ["Yerevan"] = {container = "Armenia"}, -- 1,520,000 (Agglomeration) ["Vienna"] = {container = "Austria"}, -- 2,375,000 (Agglomeration) ["Minsk"] = {container = "Belarus"}, -- 2,100,000 (unindicated) ["Brussels"] = {container = "Belgium"}, -- 2,800,000 (Consolidated Urban Area) ["Antwerp"] = {container = "Belgium"}, -- 1,270,000 (Consolidated Urban Area) ["Sofia"] = {container = "Bulgaria"}, -- 1,260,000 (Agglomeration) ["Zagreb"] = {container = "Croatia"}, ["Prague"] = {container = "Czech Republic"}, -- 1,470,000 (Agglomeration) ["Brno"] = {container = "Czech Republic"}, -- 729,405 (metro area per Wikipedia as of 2024-01-01 Czech Statistical Office) ["Olomouc"] = {container = "Czech Republic"}, -- 102,293 (city; included only because someone went crazy creating Olomouc-related terms) ["Copenhagen"] = {container = "Denmark"}, -- 1,800,000 (Consolidated Urban Area) ["Helsinki"] = {container = {key = "Uusimaa, Finland", placetype = "region"}}, -- 1,560,000 (Consolidated Urban Area) ["Tbilisi"] = {container = "Georgia"}, -- 1,430,000 (Agglomeration) ["Athens"] = {container = "Greece"}, ["Thessaloniki"] = {container = "Greece"}, ["Budapest"] = {container = "Hungary"}, -- FIXME, per Wikipedia "County Dublin" is now the "Dublin Region" ["Dublin"] = {container = {key = "County Dublin, Ireland", placetype = "county"}}, ["Riga"] = {container = "Latvia"}, ["Amsterdam"] = {container = {key = "North Holland, Netherlands", placetype = "province"}}, ["Rotterdam"] = {container = {key = "South Holland, Netherlands", placetype = "province"}}, ["The Hague"] = {container = {key = "South Holland, Netherlands", placetype = "province"}}, -- Christchurch (metro 546,600) and Wellington (metro 439,800) are too small to make it. ["Auckland"] = {container = {key = "Auckland, New Zealand", placetype = "region"}}, ["Oslo"] = {container = {key = "Oslo, Norway", placetype = "county"}}, ["Warsaw"] = {container = {key = "Masovian Voivodeship, Poland", placetype = "voivodeship"}}, ["Katowice"] = {container = {key = "Silesian Voivodeship, Poland", placetype = "voivodeship"}}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Krakow" without accent. ["Krakow"] = {container = {key = "Lesser Poland Voivodeship, Poland", placetype = "voivodeship"}, wp = "Kraków"}, ["Kraków"] = {alias_of = "Krakow", display = true}, ["Cracow"] = {alias_of = "Krakow", display = true}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirm "Gdańsk" and "Poznań" with accent. ["Gdańsk"] = {container = {key = "Pomeranian Voivodeship, Poland", placetype = "voivodeship"}}, ["Gdansk"] = {alias_of = "Gdańsk", display = true}, ["Poznań"] = {container = {key = "Greater Poland Voivodeship, Poland", placetype = "voivodeship"}}, ["Poznan"] = {alias_of = "Poznań", display = true}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Lodz" without accents. ["Lodz"] = {container = {key = "Lodz Voivodeship, Poland", placetype = "voivodeship"}, wp = "Łódź"}, ["Łódź"] = {alias_of = "Lodz", display = true}, ["Lisbon"] = {container = {key = "Lisbon District, Portugal", placetype = "district"}}, ["Porto"] = {container = {key = "Porto District, Portugal", placetype = "district"}}, ["Oporto"] = {alias_of = "Porto", display = true}, ["Bucharest"] = {container = "Romania"}, ["Belgrade"] = {container = "Serbia"}, ["Stockholm"] = {container = "Sweden"}, ["Zurich"] = {container = "Switzerland"}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Zurich" without umlaut. --- Even Wikipedia uses the form without umlaut. ["Zürich"] = {alias_of = "Zurich", display = true}, ["Kyiv"] = {container = "Ukraine"}, -- not in Kyiv Oblast -- Don't display-canonicalize Kiev -> Kyiv because in ancient contexts, Kiev is still more common. ["Kiev"] = {alias_of = "Kyiv"}, ["Kharkiv"] = {container = {key = "Kharkiv Oblast, Ukraine", placetype = "oblast"}}, ["Odessa"] = {container = {key = "Odesa Oblast, Ukraine", placetype = "oblast"}, wp = "Odesa"}, -- Don't display-canonicalize Odesa -> Odessa because it may be interpreted as a political statement. ["Odesa"] = {alias_of = "Odessa"}, ------------------ North America, South America --------------------- -- Primary figures from citypopulation.de retrieved on 2025-04-26 (reference date 2025-01-01); -- Wikipedia metropolitan figures from [[w:List of metropolitan areas in the Americas]] based on per-country data; -- Wikipedia city limits figures from [[w:List of largest cities in the Americas]]. ["Buenos Aires"] = {container = "Argentina"}, -- 16,800,000 (Consolidated Urban Area; 13,985,794 metropolitan area per Wikipedia) ["Córdoba, Argentina"] = {container = "Argentina", wp = "%l, %c"}, -- 1,810,000 (Consolidated Urban Area; 1,505,25 city limits per Wikipedia) -- to avoid confusion with Córdoba in Spain ["Córdoba"] = {alias_of = "Córdoba, Argentina"}, ["Cordoba"] = {alias_of = "Córdoba, Argentina", display = "Córdoba"}, ["Rosario"] = {container = "Argentina", wp = "%l, Santa Fe"}, -- 1,510,000 (Consolidated Urban Area; 1,348,725 metropolitan area per Wikipedia) ["Mendoza"] = {container = "Argentina", wp = "%l, %c"}, -- 1,180,000 (Consolidated Urban Area) ["San Miguel de Tucumán"] = {container = "Argentina"}, -- 1,110,000 (Consolidated Urban Area) ["Tucumán"] = {alias_of = "San Miguel de Tucumán"}, ["Tucuman"] = {alias_of = "San Miguel de Tucumán", display = "Tucumán"}, ["Santa Cruz de la Sierra"] = {container = "Bolivia"}, -- 1,960,000 (Consolidated Urban Area); 1,606,671 (city limits per Wikipedia) ["Santa Cruz"] = {alias_of = "Santa Cruz de la Sierra"}, ["La Paz"] = {container = "Bolivia"}, -- 1,870,000 (Consolidated Urban Area; composed of El Alto, now slightly larger, and La Paz) ["El Alto"] = {container = "Bolivia"}, ["Cochabamba"] = {container = "Bolivia"}, -- 1,280,000 (Consolidated Urban Area) ["Santiago"] = {container = "Chile"}, -- 8,400,000 (Consolidated Urban Area; 6,903,479 city limits? per Wikipedia) ["Valparaíso"] = {container = "Chile"}, -- 1,060,000 (Consolidated Urban Area) ["Valparaiso"] = {alias_of = "Valparaíso"}, -- 1,060,000 (Consolidated Urban Area) ["Bogotá"] = {container = "Colombia"}, -- 10,600,000 (Agglomeration; 12,772,828 metropolitan area per Wikipedia) ["Bogota"] = {alias_of = "Bogotá", display = true}, ["Medellín"] = {container = "Colombia"}, -- 4,350,000 (Agglomeration; 4,068,000 metropolitan area per Wikipedia) ["Medellin"] = {alias_of = "Medellín", display = true}, ["Cali"] = {container = "Colombia"}, -- 2,975,000 (Agglomeration; 2,837,000 metropolitan area per Wikipedia) ["Barranquilla"] = {container = "Colombia"}, -- 2,375,000 (Agglomeration; 1,341,160 city limits per Wikipedia) ["Bucaramanga"] = {container = "Colombia"}, -- 1,380,000 (Agglomeration) ["Cartagena, Colombia"] = {container = "Colombia", wp = "%l, %c"}, -- 1,250,000 (Agglomeration) -- to avoid confusion with Cartagena, Spain ["Cartagena"] = {alias_of = "Cartagena, Colombia"}, ["Cúcuta"] = {container = "Colombia"}, -- 1,130,000 (Agglomeration) ["Cucuta"] = {alias_of = "Cúcuta", display = true}, -- to avoid conflict with San Jose, California ["San José, Costa Rica"] = {container = "Costa Rica", wp = "%l, %c"}, -- 2,450,000 (Municipality (urban population); 3,160,000 metropolitan area per Wikipedia) ["San José"] = {alias_of = "San José, Costa Rica"}, ["San Jose"] = {alias_of = "San José, Costa Rica"}, -- display = "San José"; causes error due to San Jose alias for California city; FIXME ["Havana"] = {container = "Cuba"}, -- 2,150,000 (City; 2,137,847 city limits? per Wikipedia) ["Santo Domingo"] = {container = "Dominican Republic"}, -- 3,900,000 (Municipality (urban population); 4,274,651 ??? per Wikipedia) ["Guayaquil"] = {container = "Ecuador"}, -- 3,350,000 (Agglomeration; 3,092,000 metro area? per Wikipedia) ["Quito"] = {container = "Ecuador"}, -- 2,875,000 (Agglomeration; 2,889,703 metro area? per Wikipedia) ["San Salvador"] = {container = "El Salvador"}, -- 1,580,000 (Municipality (urban population)) ["Guatemala City"] = {container = "Guatemala"}, -- 3,375,000 (Municipality (urban population); 3,160,000 metro area? per Wikipedia) ["Port-au-Prince"] = {container = "Haiti"}, -- 3,050,000 (Agglomeration; population of low reliability; 2,915,000 metro area? per Wikipedia) ["San Pedro Sula"] = {container = "Honduras"}, -- 1,330,000 (Consolidated Urban Area) ["Tegucigalpa"] = {container = "Honduras"}, -- 1,220,000 (Urban Area) ["Managua"] = {container = "Nicaragua"}, -- 1,400,000 (Consolidated Urban Area) ["Panama City"] = {container = "Panama"}, -- 1,430,000 (Urban Area) ["Asunción"] = {container = "Paraguay"}, -- 2,350,000 (Municipality (urban population)) ["Lima"] = {container = "Peru"}, -- 12,000,000 (Agglomeration; 11,283,787 ??? per Wikipedia) ["Arequipa"] = {container = "Peru"}, -- 1,210,000 (Agglomeration) ["San Juan"] = {container = {key = "Puerto Rico", placetype = "commonwealth"}, wp = "%l, %c"}, -- 1,910,000 (Consolidated Urban Area) ["Montevideo"] = {container = "Uruguay"}, -- 1,810,000 (Agglomeration; 1,302,954 ??? per Wikipedia) ["Caracas"] = {container = "Venezuela"}, -- 3,850,000 (Consolidated Urban Area; 5,243,301 ??? per Wikipedia) ["Maracaibo"] = {container = "Venezuela"}, -- 2,825,000 (Consolidated Urban Area; 5,278,448 ??? per Wikipedia) -- to avoid confusion with Valencia (city and autonomous community of Spain) ["Valencia, Venezuela"] = {container = "Venezuela", wp = "%l, %c"}, -- 2,100,000 (Consolidated Urban Area) ["Valencia"] = {alias_of = "Valencia, Venezuela"}, ["Maracay"] = {container = "Venezuela"}, -- 1,480,000 (Consolidated Urban Area) ["Barquisimeto"] = {container = "Venezuela"}, -- 1,360,000 (Consolidated Urban Area) } export.misc_cities_group = { canonicalize_key_container = make_canonicalize_key_container(nil, "quốc gia"), default_placetype = "city", data = export.misc_cities, } --[==[ var: List of all known locations, in groups. The first group lists continents and continental regions, followed by three groups listing top-level locations: countries, "country-like entities" (de-facto/unrecognized/etc. countries and dependent territories) and former polities (countries, empires, etc.). After that come first-level subpolities (administrative divisions) of several, mostly large, countries, followed by groups of cities. China and the United Kingdom include second-level subpolities (in the case of China, only the largest ones as the full list runs in the hundreds). ]==] export.locations = { export.continents_group, export.countries_group, export.country_like_entities_group, export.former_countries_group, export.australia_group, export.austria_group, export.bangladesh_group, export.brazil_group, export.bulgaria_group, export.canada_group, export.china_group, export.china_prefecture_level_cities_group, export.china_prefecture_level_cities_group_2, export.egypt_group, export.finland_group, export.france_group, export.france_departments_group, export.germany_group, export.greece_group, export.india_group, export.indonesia_group, export.iran_group, export.ireland_group, export.italy_group, export.japan_group, export.laos_group, export.lebanon_group, export.malaysia_group, export.malta_group, export.mexico_group, export.moldova_group, export.morocco_group, export.netherlands_group, export.new_zealand_group, export.nigeria_group, export.north_korea_group, export.norway_group, export.pakistan_group, export.philippines_group, export.poland_group, export.portugal_group, export.romania_group, export.russia_group, export.saudi_arabia_group, export.south_africa_group, export.south_korea_group, export.spain_group, export.taiwan_group, export.thailand_group, export.turkey_group, export.ukraine_group, export.united_kingdom_group, export.united_states_group, export.england_group, export.northern_ireland_group, export.scotland_group, export.wales_group, export.vietnam_group, export.australia_cities_group, export.brazil_cities_group, export.canada_cities_group, export.france_cities_group, export.germany_cities_group, export.india_cities_group, export.indonesia_cities_group, export.italy_cities_group, export.japan_cities_group, export.mexico_cities_group, export.nigeria_cities_group, export.pakistan_cities_group, export.philippines_cities_group, export.russia_cities_group, export.saudi_arabia_cities_group, export.south_korea_cities_group, export.spain_cities_group, export.taiwan_cities_group, export.united_kingdom_cities_group, export.united_states_cities_group, export.new_york_boroughs_group, export.vietnam_cities_group, export.misc_cities_group, } return export d1joguf47l8tje7ve5ykr8u9f97np2o 2350001 2349932 2026-05-03T15:51:12Z TheHighFighter2 42988 2350001 Scribunto text/plain local export = {} export.force_cat = false -- set to true to force category generation even on non-mainspace pages local m_table = require("Module:table") local string_utilities_module = "Module:string utilities" local en_utilities_module = "Module:en-utilities" local insert = table.insert local concat = table.concat local dump = mw.dumpObject local unpack = unpack or table.unpack -- Lua 5.2 compatibility --[==[ intro: This module contains data on all known locations, along with some lower-level code to process them (higher-level known-location code is in [[Module:place/placetypes]]). You must load this module using require(), not using mw.loadData(). ===Location data=== '''NOTE: In order to understand the following better, first read the introductory documentation in [[Module:place]], especially the section `More about known locations`.''' The bulk of the code in this module (after some helper functions and placetype tables) describes the known locations and their relationships. Locations are grouped into ''location groups'' that share some common properties (examples are states of the United States and cities in Brazil). Each location group is associated with two tables, a ''data table'' that lists the locations and their individual properties, and a ''metadata table'' that lists group-level properties and defaults for the location properties. Each metadata table points to the associated data table (i.e. contains the data table as its `data` field), and the global `locations` variable holds a list of all group metadata tables. A given location is generally described by three values: (a) the group metadata table for the group the location is part of; (b) the location's canonical ''key'', which is the actual key in the group's data table and is globally unique across all locations; and (c) the location's ''spec'', which is the initialized object describing the properties of the location and comes from the value in the data table corresponding to the canonical key, transformed by the `initialize_spec()` function. These are typically named `group`, `key` and `spec`, respectively and in that order, and are found in the arguments to many functions. In a per-group data table, the keys are either ''canonical keys'' describing locations (which, as mentioned above, must be globally unique) or ''alias keys'' specifying an allowed alias for a given location. There may be multiple aliases for a given location and the alias keys only need to be unique within a particular group data table, not across all groups. It is also possible for the same string to serve as an alias key in one group and a canonical key in another group. (For example, `Newcastle` appears as an alias key in two different groups, referring to two different locations, canonically known as `Newcastle upon Tyne`, for the city in England, and `Newcastle, New South Wales`, for the city in New South Wales, Australia; and `Birmingham` appears both as a canonical key in the group of English cities and an alias key for canonical `Birmingham, Alabama` in the group of US cities.) The corresponding value objects are different for canonical and alias keys. Corresponding to canonical keys are ''location specs'', describing the properies of the location that cannot be derived from default properties of the group or global defaults. Corresponding to alias keys are ''alias specs'', which are highly restricted in the properties they can contain, and whose properties do not have per-group defaults, but only global defaults. The canonical key is always the same as the bare category corresponding to the location, which is one of the reasons it must be globally unique. For example, the country of Georgia uses the canonical key `Georgia` and corresponding bare category [[:Category:Georgia]], while the US state of Georgia uses the canonical key `Georgia, USA` and corresponding bare category [[:Category:Georgia, USA]]. The following conventions are followed in naming keys: * Countries, ''country-like entities'' (which are a mixture of unrecognized de-facto states and dependent territories) and ''former countries'' (which also includes other types of polities, such as the Roman Empire) use their unqualified placename as the canonical key. (See the documentation for [[Module:place]] for the distinction between keys and placenames, which is critical to understand when working with location data.) This also applies to constituent countries (such as England, Aruba and the Faroe Islands) and constituent parts of grouped dependent territories (such as the island of Saint Helena, which is administratively part of the British overseas territory of Saint Helena, Ascension and Tristan da Cunha). * Cities (including prefecture-level cities in China, which behave in most respects more like non-city administrative divisions) also normally use their unqualified placename as the canonical key, but if this causes name conflicts or ambiguities, they use a ''qualified key'' containing either the country name or immediate containing division (if different) following a comma, such as the case of `Newcastle, New South Wales` and `Birmingham, Alabama` above. Examples of name conflicts are the two cities just given; examples of ambiguities are the major cities of León and Mérida in Mexico and city of Cartagena, Colombia, which are given the respective canonical keys of `León, Guanajuato`, `Mérida, Yucatán` and `Cartagena, Colombia` to avoid ambiguity with the well-known respective cities of the same name in Spain, even though none of those cities are large enough to be included as known locations in this module. (The cutoff is generally having a metro area of at least 1,000,000 inhabitants, although there are exceptions.) * Administrative divisions of countries, other than the exceptions noted above for constituent countries and dependent territories, use a qualified key that contains the name of the country or constituent country in it, e.g. `Normandy, France` (a region), `Calvados, France` (a department in the region of Normandy), `Herefordshire, England` (a ceremonial county), `Northwest Territories, Canada` (a territory), `Central Finland, Finland` (a region), `Antalya Province, Turkey` (a province), `Cluj County, Romania` (a county), `County Cork, Ireland` (a county) and `New York, USA` (a state). As shown in these various examples, (a) first and second-level divisions are sometimes both included (as in France, the United Kingdom and China); (b) the qualifier after the comma is sometimes a constituent country (England) instead of a country (United Kingdom), and is sometimes abbreviated (USA rather than United States or Unites States of America); (c) the word `the` is not normally included in the key even if the location is normally preceded by `the` when following a preposition (there is a property in the location and alias specs to indicate this), except in a very few cases (most notably `The Hague`); (d) the country is included as a qualifier even if it creates an apparent redundancy, as with `Central Finland, Finland`; and (e) sometimes the placetype is included in the key, as with provinces in Turkey and several other countries; states in Nigeria; and counties in Ireland, Romania and several other countries. Whether the placetype is included, and whether it follows or precedes the placename, depends on per-country conventions. For example, provinces in Turkey, Iran and several other countries (likewise for states in Nigeria, oblasts in Russia, etc.) conventionally include the word "Province", "State", "Oblast" etc. in their name because they are normally named after the largest city in the division, which would otherwise lead to ambiguity; and counties in Ireland and Northern Ireland (and likewise County Durham, England) normally have the word "County" preceding rather than following them in their conventional name, so we follow this practice. The Wikipedia article naming scheme for a given administrative division is a strong clue as to how the division is normally referred to, and we usually follow this practice. (A minor exception is that the Wikipedia articles for provinces in Iran, Laos and Thailand include the word `province` with an initial lowercase letter while provinces elsewhere, e.g. North and South Korea, Saudi Arabia and Turkey, use uppercase `Province`; we normalize to uppercase `Province` in all cases.) As mentioned above, associated with canonical keys in the group data table are location specs, which are objects containing properties. It is important here to distinguish ''initialized specs'' from ''uninitialized specs''. Unininitialized specs are as directly specified in [[Module:place/locations]], containing only those properties that differ from the per-group or global defaults. Initialized specs result from calling `initialize_spec()` on an uninitialized spec (it is idempotent in that it will do nothing if encountering an already-initialized spec). This copies all group-level defaults that are not overridden in the location spec itself from the group-level metadata table into the location spec, so that in general, no more reference need be made to the group to fetch the correct value of a given location property. (The initialization process also does more transformations in a few cases, noted below.) Note that the default value of a given property is stored under a key in the group metadata table that is preceded by the string `default_`; for example, the default value corresponding to the `placetype` property of a given location is specified in the `default_placetype` key in the group metadata table. The following are the properties of the location spec. * `placetype`: String specifying the placetype of the location (e.g. "quốc gia", "state", province"). This can also be a table of such types; in this case, the first listed type is the canonical type that will be used in descriptions, but the location will be recognized (e.g. in a holonym, or for categorizing into the bare category) when tagged with any of the specified types. The placetype '''must''' be either specified on an individual location or defaulted at the group level, or an error occurs. * `container`: Either a string, a ''canonicalized container'' structure or a list of either type, specifying the immediate ''container'' (or containers) of the given location. A container is another location which this location is considered to be directly part of, either politically or (above the country level) geographically. Some locations belong to multiple immediate containers; this applies especially to transcontinental countries such as Russia and Turkey. Containers can themselves have containers, forming a tree (or more correctly, a [[w:directed acyclic graph]]) of locations. The list of immediate container(s), followed by the container(s) of the container(s), etc., is termed the ''container trail'', and some functions compute and return this trail as part of their operation. When a location spec is initialized, the given container spec is canonicalized into ''canonical container form'', which consists of a list of canonicalized container structures, each of which is of the form `{key = "``container_key``", placetype = "``container_placetype``"}`, where ``container_key`` is a canonical location key and ``container_placetype`` should be the listed placetype for the location, or the first listed placetype if there are multiple. (FIXME: Since the key uniquely identifies the container location, we should eliminate the placetype from the container structure.) The list of canonicalized container structures is stored into the `.containers` field of the location spec (this happens even if the container value is unset in its uninitialized spec form, causing it to default to the corresponding group-level value), and the `.container` field is set to {nil}. The canonicalization process is described in more detail below under [[#Container spec canonicalization]]. * `divs`: List of recognized political divisions; e.g. for the Netherlands, a specification of the form `divs = {"provinces", "municipalities"}` will allow categories such as [[:Category:de:Provinces of the Netherlands]] and [[:Category:pt:Municipalities of the Netherlands]] to be created. Any division that appears here must also be found in `placetype_data`, or an error occurs. The entities appearing in the `divs` list can be structures as well as just strings; this is explained more below under [[#Location divisions]]. Additional political divisions that apply to all locations in a group can be specified at the group level using the group-only property `addl_divs`, which has the same format as `divs`. This is intended to be used in the situation where some division types are shared among all locations in the group and others differ from location to location. An example where this is used is the United States, where `census-designated places` is specified in the group-level `addl_divs` so that all 50 states have census-designated places categorized as e.g. [[:Category:Census-designated places in Arizona, USA]], but `counties` and `county seats` are specified in the group-level `default_divs` because not all states have counties and county seats (Alaska has boroughs and borough seats and Louisiana has parishes and parish seats), and some states have additional divisions (New Jersey and Pennsylvania also have boroughs, while Colorado and Connecticut have municipalities). Note that under most circumstances (particularly, if `container_parent_type` is not set as a property associated with the division type), any division type specified on a sub-country-level location must also be specified on all containers up through the country. For example, since French departments specify `communes` and `municipalities` in `default_divs`, the same division types must be (and are) specified on French regions and for France itself. * `keydesc`: String directly specifying a description of the location, for use in generating the contents of category pages related to the location. In place of a string, a function of three arguments (`group`, `key`, `spec`, as is normal for locations) that computes the location description can also be given. This is used, for example, for Russian federal subjects; see `construct_russia_federal_subject_keydesc`. The special string `+++` contained in the keydesc is replaced with the default value of the location description, which specifies the location's placename, placetype, and the corresponding values for each container in the container trail, generally up through (but not beyond) the country level; see `no_include_container_in_desc` below. The location description is used to construct the full description of various categories, such as bare location categories, whose description generally reads `"{{(((}}langname}}} terms related to the people, culture, or territory of ``keydesc``."` where ``keydesc`` is the specified or auto-constructed location description. * `fulldesc`: String overriding the full description for the bare location category (but not for any other category). This is currently used only for the location `Earth`, at the very top of the tree (because the standard `people, culture or territory of ...` text doesn't make sense here), and for `Antarctica` (because it has no permanent inhabitants). FIXME: This should be renamed `bare_category_fulldesc`. * `addl_parents`: Specify additional parents for the bare location category, in addition to the category or categories generated based on the immediate container(s). For example, `Hawaii, USA` specifies `Polynesia` as an additional parent category; both `North Korea` and `South Korea` specify `Korea` (which is a specially handled location category) as an additional parent; and `Earth` specifies `nature` (not a location category, but still a topic category) as an additional parent (which in this case becomes the first parent, as `Earth` has no container). The only restriction on the categories in `addl_parents` is that they must be topic categories, because each language-specific version of the bare location category gets the corresponding language-specific versions of the categories in `addl_parents`. FIXME: This shoudl be renamed `bare_category_addl_parents`. * `wp`: Spec describing how to construct the Wikipedia article for the location. Each spec is either `true` (equivalent to `"%l"`, i.e. use the full location placename directly) or a string containing formatting directives, indicating how to construct the article name. The allowed formatting directives are `%l` (the full location placename), `%e` (the elliptical location placename) and `%c` (the full placename of the first immediate container). For example, the default value of `wp` for the group of United States cities is `"%l, %c"` since the city articles tend to be named e.g. `Austin, Texas` (but with many exceptions, specified using `wp` fields at the city level). Another example is Thai provinces, which specify a group-level default of `"%e province"` as the Wikipedia articles have lowercase `province` in their name but the Thai province keys specified in this module have uppercase `Province`. Here we have to use `%e` to get the placename without the word `Province` in it. The default is `true`, which simply uses the full location placename as the article name. Note that the Wikipedia article, along with the Wikipedia and Commons category pages, are shown in the upper right of bare category pages. * `wpcat`: Spec describing how to construct the Wikipedia category page for the location (i.e. the page listing articles and categories relevant to the location). The format is the same as with `wp`, and it defaults to the value of `wp`. It rarely needs to be specified because the category page and the article page almost always follow the same format. * `commonscat`: Spec describing how to construct the Commons category page for the location (i.e. the page on the MediaWiki Commons site listing articles and categories relevant to the location). It has the same format as `wp` and `wpcat` and defaults to `wpcat`, which is usually (but not always) correct. * `the`: Boolean specifying whether a location should be preceded by `the` when following a preposition, e.g. in category names such as [[:Category:Cities in the Northern Territory, Australia]] and in old-style place descriptions when the location occurs as the first holonym, such as the city [[Darwin]] described using {{tl|place|city|terr/Northern Territory|c/Australia}}. Note that the global default for this and all Boolean properties is {nil}, which amounts to the same as {false}. * `british_spelling`: Boolean indicating whether the location in question uses British spelling. Currently this only affects whether the spelling `neighborhoods` or `neighbourhoods` is used in categories such as [[:Category:Neighborhoods of New York City]] and [[:Category:Neighbourhoods of Sydney]]. This usually needs to be set only at the top level (i.e. country or country-like entity), because lower-level entities look up the container trail for any container that has `british_spelling = true` set, and if found, assume that British spelling applies. The general principle used in setting this is that all countries in Europe, all dependent territories of any such country, all former British colonies, and any dependent territories of these former colonies, are assumed to use British spelling, while all other countries and associated dependent territories are assumed to use American spelling. This can potentially be modified on a case-by-case basis. * `is_city`: Boolean indicating whether the location in question is a city. This is explicitly set to `true` for city-states (e.g. Monaco and Vatican City), dependent territories that are cities (e.g. Hong Kong, Macau, Bonaire, Gibraltar, etc.), certain city-level administrative divisions (such as `City of Belfast, Northern Ireland`) and (through a group-levell setting) New York boroughs. In addition, it is set to `true` in initialize_spec() whenever the group-level `default_placetype == "city"`, so that all cities get it set without explicitly needing to add a group-level setting for this. Note that the condition `default_placetype == "city"` intentionally excludes Chinese prefecture-level cities, which aren't really cities in that (for example) they don't directly contain neighborhoods, but do contain cities within them. This setting is used in various places: (a) to add cities, rivers, etc. to categories like [[:Category:Rivers in Osaka Prefecture, Japan]] and [[:Category:Cities in Wuhan]] for holonyms that are ''not'' cities; (b) to add districts, neighborhoods, and the like to categories like [[:Category:Neighborhoods of Brooklyn]] and [[:Category:Neighborhoods of Monaco]] for holoynms that ''are'' cities; (c) generally, to determine which "generic" placetypes (cities, rivers, neighborhoods, etc.) apply to the location. (Those that can occur with cities have a `generic_before_cities` setting in [[Module:place/placetypes]], and those that can occur with non-cities have a `generic_before_non_cities` setting.) * `is_former_place`: Boolean that should be set on former places such as the Soviet Union and the Roman Empire. For such places, categories such as [[:Category:fr:Rivers in the Soviet Union]] are neither generated nor recognized (more generally, no "generic" placetypes apply except for `places`), and category descriptions include the word `former`. * `overriding_bare_label_parents`: Document me! * `bare_category_parent_type`: Document me! * `no_container_cat`: Document me! * `no_container_parent`: Document me! * `no_generic_place_cat`: Document me! * `no_check_holonym_mismatch`: Document me! * `no_auto_augment_container`: Document me! * `no_include_container_in_desc`: Document me! ====Location divisions==== The `divs` field of a location describes the recognized political division types of that location. Specifying a given division type will cause places defined as being of the specified division type and with the location as a holonym will cause the place to be categorized as ` ``placetypes`` in/of ``location`` `; for example, specifying that the United States has `"states"` as a division will cause anything defined as {{tl|place|fr|state|c/US}} to be categorized under [[:Category:fr:States of the United States]]. Note that you do not have to explicitly specify division types for "generic" placetypes (those that have a `generic_before_non_cities` field if the location is not a city, or that have a `generic_before_cities` field if the location is a city); this includes things like cities, towns, villages, neighbo(u)rhoods and rivers. A given element in the `divs` list is usually a string naming a plural placetype; the placetype is automatically converted to the singular for recognizing the placetype in a {{tl|place}} spec, and irregular plurals such as `kibbutzim` are handled correctly as long as the placetype specifies an appropriate `plural` field (if the `plural` isn't explicitly given, the default singularization algorithm in [[Module:en-utilities]] is run, which gets most things correctly but has problems with `passes` and `fortresses`, which are singularized to `passe` and `fortresse`; for this reason, an explicit plural entry is added to terms in ''-ss''). In place of a string, an object can be given with the plural placetype in the `type` field; this allows additional properties to be specified along with the placetype. An example of this is the `divs` list for Canada: { ["Canada"] = {divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, "counties", "districts", "municipalities", "regional municipalities", "rural municipalities", "parishes", "Indian reserves", "census divisions", {type = "townships", prep = "in"}, }, ...}, } Here, both provinces and territories are set to categorize as `provinces and territories`, meaning that there is a single category [[:Category:Provinces and territories of Canada]] rather than separate categories for provinces and territories. Similar things are done for other countries that have more than one type of first-level administrative division (e.g. Australia, China, India and Pakistan). Note that any placetype listed under `cat_as` must exist in the table of placetypes in [[Module:place/placetypes]], and in fact there is a category-only entry there for `provinces and territories!` (the use of exclamation point following a plural placetype means that the placetype is present only for use in categories and won't be recognized as the placetype field in a {{tl|place}} description). In addition, townships are declared to use `in` rather than `of` as the preposition in the category; hence the category name will be [[:Category:Townships in Canada]] rather than [[:Category:Townships of Canada]]. (The use of `in` vs. `of` is somewhat related to whether a given placetype is an official administrative or statistical division of the location in question and comes in a defined list, in which case `of` should be used, or is more ill-defined, in which case `in` should be used; the default is `of`, and the use of `in` with `townships` is probably by analogy with the use of `in` with cities and towns.) Another more complex example is the divisions given for Quebec: { ["Quebec, Canada"] = {divs = { "counties", {type = "regional county municipalities", container_parent_type = "regional municipalities"}, {type = "regions", container_parent_type = false}, {type = "townships", prep = "in"}, {type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}}, {type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}}, {type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}}, }, ...}, } Here, `container_parent_type` controls the second parent category of the placetype/location category associated with the entry. In this case, for example, [[:Category:Counties of Quebec, Canada]] will have [[:Category:Counties of Canada]] as its second or ''container-level'' parent. However, this doesn't make sense for `regional county municipalities`, which exist only in Quebec (so the parent category [[:Category:Regional county municipalities of Canada]] would have only one subcategory); but they are similar to regional municipalities in British Columbia, Nova Scotia and Ontario, so the `container_parent_type = "regional municipalities"` spec causes the container-level parent of this category to be [[:Category:Regional municipalities of Canada]]. Likewise, `regions` as administrative divisions (as opposed to mere geographic regions) exist only in Quebec; they have no equivalent elsewhere, so we disable the container-level parent using `container_parent_type = false`. The specs for `parish municipalities`, `township municipalities` and `village municipalities` show both that multiple types can be specified under `cat_as` (here, for example, we categorize `parish municipalities` as both `parishes` and `municipalities`) and that these types can themselves have properties, just as for entries directly under `divs`. Specifically, `{type = "parishes", container_parent_type = "counties"}` means that any place defined as a parish municipality in Quebec will be categorized under both [[:Category:Parishes of Quebec, Canada]] and [[:Category:Municipalities of Quebec, Canada]], and that the former will have a container-level parent of [[:Category:Counties of Canada]] (rather than the default of [[:Category:Parishes of Canada]]). Similarly, `township municipalities` will be categorized under both [[:Category:Townships in Quebec, Canada]] (''not'' [[:Category:Townships of Quebec, Canada]]) and [[:Category:Municipalities of Quebec, Canada]]. ====Container spec canonicalization==== A fully canonicalized container spec for a given location consists of a list of ''canonicalized container objects'', each with a `key` and `placetype` field. The `key` field should name the canonical key of some other location at a higher level (e.g. French cities are contained in French departments, which are contained in French regions, which are contained in France, which is contained in Europe, which is contained in Eurasia, which is contained in the Earth). The `placetype` field should correspond to the first (canonical) placetype listed for the key in question. The process of initializing a locaion spec converts the container spec in `.container` into a canonicalized spec in `.containers` and removes the spec from `.container`. It works as follows: # If the `container` field is missing, and there is a group-level `default_container` field, it is used in its place. For example, none of the Brazilian states listed in `brazil_states` specifies a container, but the group specifies `default_container = "Brazil"`. # A single string or canonicalized container object is allowed and made into a one-element list. # If a list element is a string that did ''not'' come from `default_container`, and there is a group-level `canonicalize_key_container` field, it is assumed to be a one-argument function and is called on the string to get a canonicalized container object. # Any remaining strings are assumed to be countries and are used directly as the `key`, with `placetype` set to `"quốc gia"`. ====Alias keys==== Aliases can be provided for canonical keys using ''alias keys''. Alias keys have a very different location spec structure from canonical keys. This structure does not, in general, have defaults at the group level and is not initialized using `initialize_spec()`, but is used as-is. The following properties are recognized in an alias location spec: * `alias_of`: The canonical key of which this key is an alias. Required. * `the`: If true, this alias key is preceded by `the` following a preposition. Defaults to the group-level `default_the` but does not pay attention to the value of `the` for the corresponding canonical key. * `display`: This is a display alias, meaning that holonyms using the placename corresponding to this alias will be converted to the placename corresponding to the canonical key when formatting the holonym for display. (Otherwise, the aliasing applies only to categorization.) If the value is true, the display canonicalization is to the placename of the canonical key; otherwise, the value should be a key whose corresponding placename is used when display canonicalizing. * `placetype`: The placetype of the alias. Rarely needs to be specified as it defaults to the canonical key's placetype, and if that is unspecified, to the group-level default placetype. ====Location group metadata tables==== As mentioned above, associated with each location group is a ''metadata table'' listing group-level properties. The metadata table contains two types of keys: group-level defaults (named like the corresponding location-level keys but preceded by `default_`, e.g. `default_placetype` corresponding to the location-level `placetype` key) and group-only keys, which are mostly functions. The following are the possible group-only keys: * `data`: This points to the group data table for the group, as described above. * `key_to_placename`: This is a function of one argument to transform the location's key (whether canonical or alias) into the full and elliptical placenames. The difference between full and elliptical placenames is described in the documentation for [[Module:place]], but in essence, it applies for keys that include the placetype in them (e.g. `Phuket Province, Thailand` or `County Mayo, Ireland`), in which case the full placename includes the placetype and the elliptical placename does not. For keys that do not include the placetype in them (e.g. `Arizona, USA` or `Gloucestershire, England`), the full and elliptical placenames are identical. Note that neither the full nor the elliptical placename includes the container in it; hence, for `Phuket Province, Thailand`, the full placename is `Phuket Province` and the elliptical placename is just `Phuket`. (Note that the full vs. elliptical placename distinction is intended only for handling cases where the placetype follows or precedes the raw placename and there is no difference between the two in whether they are normally preceded by `the`. More complex situations, such as `State of Mexico` (which normally takes `the`) vs. just `Mexico` (which doesn't), or `Islamabad Capital Territory` vs. just `Islamabad`, should be handled instead by aliases.) The `key_to_placename` function takes one argument, the key, and returns two arguments, the full and elliptical placenames, respectively. If left undefined, the default is to chop off anything starting with a comma and return the result as both full and elliptical placename, and if specifically set to `false`, the key is used directly as both full and elliptical placename. If it needs to be defined, it is best to use the helper function `make_key_to_placename`, if possible (or `make_irish_type_key_to_placename` in the case of Ireland and Northern Ireland, where `County` precedes), rather than rolling your own. In addition, you should use the global `key_to_placename` function (which takes care of the default implementation and such) rather than directly calling the function in the `key_to_placename` field. * `placename_to_key`: This is approximately the inverse of `key_to_placename`, transforming a placename (which can be either in full or elliptical form) into the corresponding key. As with `key_to_placename`, if you need to define this (generally, when the full and elliptical placenames are different), prefer using `make_placename_to_key` (or `make_irish_type_placename_to_key` for Ireland and Northern Ireland) to rolling your own. In addition, similarly to `key_to_placename`, use the global `placename_to_key` function to convert placenames to keys rather than directly invoking the function in the `placename_to_key` field. If the field is set to `false`, the placename is used unchanged as the key. Otherwise, the default algorithm works as follows: *# If the group-level `default_placetype == "city"`, use the placename unchanged as the key. *# Otherwise, if the group-level `default_container` exists and is a string, append it to the placename after a comma + space and use the result as the key. *# Otherwise, if the group-level `default_container` is a canonical container object (an object with `key` and `placetype` fields), and the `placetype` field is either `country` or `constituent country`, append the `key` field to the placename after a comma + space and use the result as the key. *# Otherwise, use the placename unchanged as the key. * `canonicalize_key_container`: A function of one argument to convert the specified `container` field, when a string, to canonical form. Described in more detail above under [[#Container spec canonicalization]]. It is preferable to construct the function using `make_canonicalize_key_container`, if possible, rather than rolling your own. * `addl_divs`: Additional political divisions appended, for all locations in the group, to the list of divisions derived from the location-level `divs` or group-level `default_divs` fields to get the final list of divisions for the location. See [[#Location divisions]] for more details. ]==] ----------------------------------------------------------------------------------- -- Helper functions -- ----------------------------------------------------------------------------------- --[==[ Throw an error. `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the format string as if `fmt:format(...)` were called. In general, callers should use `internal_error` unless the error was due to bad user input rather than a logic error (which usually isn't the case in deep back-end code like this). ]==] function export.process_error(fmt, ...) local args = {...} for i = 1, select("#", ...) do args[i] = dump(args[i]) end return error(string.format(fmt, unpack(args))) end --[==[ Throw an internal error (a logic error that should never happen unless there is a bug in the code, as opposed to a user error triggered by bad input or a system error due to something like running out of memory or hitting a time limit). `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the format string as if `fmt:format(...)` were called. ]==] function export.internal_error(fmt, ...) export.process_error("Internal error: " .. fmt, ...) end local internal_error = export.internal_error -- Return whether `list_or_element` (a list of strings, or a single string) "contains" `item` (a string). If -- `list_or_element` is a list, this returns true if `item` is in the list; otherwise it returns true if `item` -- equals `list_or_element`. local function list_or_element_contains(list_or_element, item) if type(list_or_element) == "table" then return m_table.contains(list_or_element, item) and true or false end return list_or_element == item end --[==[ Call the location group's `key_to_placename` function if it exists (see the comment at the top of [[Module:place]] for the distinction between keys and placenames). Two values are returned, the full and elliptical placenames (e.g. full `"County Durham"` vs. elliptical `"Durham"`). If the group does not define `key_to_placename`, both full and elliptical placenames are computed by chopping off anything starting with a comma. ]==] function export.key_to_placename(group, key) if group.key_to_placename == false then return key, key end if group.key_to_placename then local full_placename, elliptical_placename = group.key_to_placename(key) if type(full_placename) ~= "string" then internal_error("Key %s returned a non-string full placename: %s", key, full_placename) end if type(elliptical_placename) ~= "string" then internal_error("Key %s returned a non-string elliptical placename: %s", key, elliptical_placename) end return full_placename, elliptical_placename end key = key:gsub(",.*", "") return key, key end --[==[ Call the location group's `placename_to_key` function if it exists (see the comment at the top of [[Module:place]] for the distinction between keys and placenames) and return the result. If `placename_to_key` exists with the value `false`, return the placename unchanged. If the group does not define `placename_to_key`, and it defines a `default_container` whose placetype is either `country` or `constituent country`, the container name is appended to the placename after a comma and a space. Otherwise the placename is returned unchanged. ]==] function export.placename_to_key(group, placename) if group.placename_to_key == false then return placename elseif group.placename_to_key then local key = group.placename_to_key(placename) if type(key) ~= "string" then internal_error("Placename %s returned a non-string key: %s", placename, key) end return key elseif group.default_placetype == "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 == "quốc gia" or defcon.placetype == "constituent country") then return placename .. ", " .. defcon.key else return placename end end end --[==[ Initialize the location spec `spec`, augmenting it with default values taken from `group` if the spec itself doesn't specify values for the properties. This sets `containers` to a canonicalized list of objects, each with `key` and `placetype` keys, describing the immediate containers of the location, and erases (sets to nil) the original non-canonicalized `container` field. (Most locations have only one immediate container but some, e.g. Russia, have more than one. Containers should be carefully distinguished from category parents. Generally the container is the first category parent, or the first ``n`` parents if there are ``n`` containers, but there may be additional category parents, which indicate some sort of relation between the category parent and the location but not necessarily one of containment.) This function is idempotent in that nothing happens if called more than once on the same spec. FIXME: Consider reimplementing this in a more standardly object-oriented way using metatables. ]==] function export.initialize_spec(group, key, spec) if spec.initialized then return end local container = spec.container local containers local container_from_default if not container then container = group.default_container container_from_default = true end if container then if type(container) == "string" or container.key then container = {container} end containers = {} for _, cont in ipairs(container) do if type(cont) == "string" then if group.canonicalize_key_container and not container_from_default then cont = group.canonicalize_key_container(cont) else cont = {key = cont, placetype = "quốc gia"} end end insert(containers, cont) end end spec.containers = containers spec.container = nil local function value_with_default(val, default_val) if val == nil then return default_val else return val end end local function set_or_default(prop) spec[prop] = value_with_default(spec[prop], group["default_" .. prop]) end set_or_default("placetype") if not spec.placetype then internal_error("No placetype found in key %s for spec %s or in group `default_placetype`", key, spec) end set_or_default("divs") spec.addl_divs = group.addl_divs for _, prop in ipairs { "keydesc", "fulldesc", "addl_parents", "overriding_bare_label_parents", "bare_category_parent_type", "wp", "wpcat", "commonscat", "british_spelling", "the", "no_container_cat", "no_container_parent", "no_generic_place_cat", "no_check_holonym_mismatch", "no_auto_augment_container", "no_include_container_in_desc", "is_city", "is_former_place", } do set_or_default(prop) end -- `default_placetype == "city"` is correct; if `default_placetype` has something else like `prefecture-level city` -- as the canonical placetype but also lists `city` (as Chinese prefecture-level cities do), don't mark as -- is_city. spec.is_city = value_with_default(spec.is_city, group.default_placetype == "city") spec.initialized = true end --[=[ Given a location group, key and possible placetypes that the placename must match, check if the key exists in the group with at least one of the group's key's placetypes matching one of the passed-in placetypes. If so, return two values: the group key (which potentially could differ from the passed-in key due to aliases) and the corresponding spec object, which (as with all functions that return spec objects) has been initialized using `initialize_spec()` (i.e. default property values have been copied from the group into the spec, if the spec doesn't itself specify a value for the property in question). `alias_resolution` controls how aliases are resolved. Normally, both display and category aliases are followed, and the returned key will reflect the canonical location key. However, if `alias_resolution` is {"none"}, no alias following happens. In that case, if the key specifies an alias, the spec for the alias rather than the spec for the canonical location is returned, and importantly, it is returned uninitialized, meaning that properties from the group are not copied into the spec. (If the key specifies a canonical location, its spec is returned initialized, as in the normal case where `alias_resolution` is unspecified.) The caller needs to check whether the returned spec is an alias by looking for an `alias_of` property. If `alias_resolution` is {"display"}, the behavior is the same as for {"none"} except that if the alias contains a setting `display = true`, the returned key will reflect the canonical location key, and if the alias contains a setting `display = ``string`` `, the returned key will reflect that string. This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or `find_canonical_key` (for known-canonical locations where the placetype isn't known). ]=] local function find_matching_key_in_group(group, placetypes, key, alias_resolution) if alias_resolution ~= nil and alias_resolution ~= "none" and alias_resolution ~= "display" and alias_resolution ~= "all" then internal_error("Bad value for 'alias_resolution': %s", alias_resolution) end local spec = group.data[key] if not spec then return nil end local function check_correct_placetype(placetype) if type(placetype) == "table" then for _, pt in ipairs(placetype) do if list_or_element_contains(placetypes, pt) then return true end end return false else return list_or_element_contains(placetypes, placetype) end end if spec.alias_of then local resolved_key = spec.alias_of local resolved_spec = group.data[resolved_key] if not resolved_spec then internal_error("Key %s is an alias of %s, which doesn't exist", key, resolved_key) elseif resolved_spec.alias_of then internal_error("Key %s is an alias of %s, which is itself an alias; indirect aliasing not allowed", key, resolved_key) end if alias_resolution == "none" or alias_resolution == "display" then -- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group. local placetype = spec.placetype or resolved_spec.placetype or group.default_placetype if not placetype then internal_error("No placetype found for key %s in any of spec %s, alias-resolved spec %s or in group " .. "`default_placetype`", key, spec, resolved_spec) end if not check_correct_placetype(placetype) then return nil end if alias_resolution == "display" then if spec.display == true then key = resolved_key elseif spec.display then key = spec.display end end return key, spec end key = resolved_key spec = resolved_spec end -- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group. local placetype = spec.placetype or group.default_placetype if not placetype then internal_error("No placetype found for key %s in spec %s or group `default_placetype`", key, spec) end if not check_correct_placetype(placetype) then return nil end export.initialize_spec(group, key, spec) return key, spec end --[=[ Given a location group, placename and possible placetypes that the placename must match, check if the placename exists in the group with at least one of the placetypes of the key in the group that corresponds to the placename matching one of the passed-in placetypes. If so, return two values: the key corrsponding to the passed-in placename and the corresponding spec object. This is similar to `find_matching_key_in_group()` but works with placenames rather than keys. `alias_resolution` is as in `find_matching_key_in_group()`. This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or `find_canonical_key` (for known-canonical locations where the placetype isn't known). ]=] local function find_matching_placename_in_group(group, placetypes, placename, alias_resolution) local key = export.placename_to_key(group, placename) return find_matching_key_in_group(group, placetypes, key, alias_resolution) end --[==[ If `key` is a canonical known location key (i.e. not an alias), return the corresponding group and initialized spec. If no such key exists, return {nil}. This throws an internal error if two locations with the same key are found. ]==] function export.find_canonical_key(key) local found_locations = {} for _, group in ipairs(export.locations) do local spec = group.data[key] if not spec then -- do nothing elseif spec.alias_of then mw.log(("Skipping alias '%s' of canonical '%s'"):format(key, spec.alias_of)) else insert(found_locations, {group, spec}) end end if not found_locations[1] then return nil elseif found_locations[2] then internal_error("Found multiple matching locations for canonical key %s: %s", key, found_locations) else local group, spec = unpack(found_locations[1]) export.initialize_spec(group, key, spec) return group, spec end end --[==[ Iterator that returns all locations matching a given description, where the description consists of either a placename or a key along with a list of possible placetypes. Usually there will be at most one such location. The iterator returns three values at each iteration: the location group, canonical key by which the location is known and the spec object describing the location. `data` contains the following possible fields: * `placetypes`: A list of possible placetypes, one of which must match one of the location's placetypes; or a string specifying a placetype, which must match one of the location's placetypes. This must be specified. * `placename`: The placename of the location. Either this or `key` must be specified. * `key`: The key of the location. Either this or `placename` must be specified. * `alias_resolution`: If specified, it behaves the same as for `find_matching_key_in_group`. The spec is normally initialized using `initialize_spec()` prior to it being returned (but may not be if `alias_resolution` is given and the specified key or placename is an alias; see the documentation for `find_matching_key_in_group`). ]==] function export.iterate_matching_location(data) local i = 0 local n = #export.locations return function() while true do i = i + 1 if i > n then break end local group = export.locations[i] local key, spec if data.placename then key, spec = find_matching_placename_in_group(group, data.placetypes, data.placename, data.alias_resolution) else if not data.key then internal_error("'.placename' or '.key' must be defined: %s", data) end key, spec = find_matching_key_in_group(group, data.placetypes, data.key, data.alias_resolution) end if key then return group, key, spec end end end end --[==[ Return the location matching a given description, where the description consists of either a placename or a key along with a list of possible placetypes. This is similar to `iterate_matching_location()` but throws an internal error if there is not exactly one location found; as such, it is for use with internally specified locations (such as the containers of known locations) rather than externally specified locations, which may not match a known location and in some cases may match multiple known locations. For finding an externally specified location, consider using `find_matching_holonym_location`, which returns {nil} rather than throwing an error if the location isn't found, but also (more importantly) checks to make sure there are no conflicting holonyms among the user-specified holonyms (e.g. {{tl|place|city|s/Delaware|c/USA|t=Newark}} will not match the known location `Newark` (in New Jersey, not Delaware). ]==] function export.get_matching_location(data) local all_found = {} for group, key, spec in export.iterate_matching_location(data) do insert(all_found, {group, key, spec}) end if not all_found[1] then internal_error("Couldn't find matching location for data %s", data) elseif all_found[2] then internal_error("Found multiple matching locations for data %s: %s", data, all_found) else return unpack(all_found[1]) end end --[==[ Successively iterate over a location's containers, and then the containers of those containers, etc. Keep in mind that locations may have multiple containers (e.g. Russia has both Europe and Asia as containers, and both Europe and Asia have Eurasia as their container). A given container will never be returned twice (e.g. in the case where a specific location A has locations B and C as containers, and B has C as its container, C will not be returned twice). An internal error happens if a container loop is detected. The return value is a list of location objects, each of which contains `group`, `key` and `spec` fields. ]==] function export.iterate_containers(group, key, spec) local keys_seen = {} keys_seen[key] = true local iterations = 0 local last_iteration_containers = {{group = group, key = key, spec = spec}} return function() iterations = iterations + 1 if iterations > 10 then internal_error("Probable loop in containers when processing key %s", key) end local next_iteration_containers = {} for _, location in ipairs(last_iteration_containers) do local containers = location.spec.containers if containers then for _, container in ipairs(containers) do local container_group, container_key, container_spec = export.get_matching_location { placetypes = container.placetype, key = container.key, } if not keys_seen[container_key] then insert(next_iteration_containers, { group = container_group, key = container_key, spec = container_spec }) keys_seen[container_key] = true end end end end if not next_iteration_containers[1] then return nil end last_iteration_containers = next_iteration_containers return next_iteration_containers end end --[==[ Given a placename, convert it into a link (two-part if `display_form` is given and differs from `placename`) and add `"the "` to the beginning if called for in `spec`. ]==] function export.construct_linked_placename(spec, placename, display_form) local linked_placename = display_form and placename ~= display_form and ("[[%s|%s]]"):format(placename, display_form) or ("[[%s]]"):format(placename) if spec.the then linked_placename = "the " .. linked_placename end return linked_placename end --[=[ This is typically used to define `key_to_placename`. It generates a function that chops off parts of a string (a location key), typically at the end, in order to get the full and elliptical versions of a placename. (See the documentation above for `key_to_placename` under "Location group tables" for the difference between full and elliptical placenames.) `container_patterns` is a Lua pattern or a list of possible patterns matching the container at the end of the key, which will be used to remove that container. If multiple patterns are specified, each one is tried until one matches. If `container_patterns` is omitted, this part of the process is skipped. The reulting string becomes the full placename. If `divtype_patterns` is specified, it is likewise either a Lua pattern or list of possible patterns to match and remove the political division affixed onto the end (or possibly the beginning) of the key in the keys of certain countries (such as South Korean and North Korean counties, which include the word "County" in the key). The resulting chopped string becomes the elliptical placename. If `divtype_patterns` is omitted, this part of the process is skipped and the full and elliptical placenames are the same. Typical usage is as follows: ``` key_to_placename = make_key_to_placename(", England$"), ``` or (when the political division is part of the key) ``` key_to_placename = make_key_to_placename(", South Korea$", " County$") ``` ]=] local function make_key_to_placename(container_patterns, divtype_patterns) if type(container_patterns) == "string" then container_patterns = {container_patterns} end if type(divtype_patterns) == "string" then divtype_patterns = {divtype_patterns} end return function(key) local full_placename = key if container_patterns then for _, container_pattern in ipairs(container_patterns) do local nsubs full_placename, nsubs = full_placename:gsub(container_pattern, "") if nsubs > 0 then break end end end local elliptical_placename = full_placename if divtype_patterns then for _, divtype_pattern in ipairs(divtype_patterns) do local nsubs elliptical_placename, nsubs = elliptical_placename:gsub(divtype_pattern, "") if nsubs > 0 then break end end end return full_placename, elliptical_placename end end --[=[ This is typically used to define `placename_to_key`. It generates a function that appends a string to the end of a given placename to get the key (see the definition of `placename_to_key` above in the documentation under "Location group tables"). Optional `divtype_suffix` is a raw string (which should not contain hyphens or other characters that have special meaning in Lua patterns) to be appended first to the placename; if already present at the end, it is not appended. `container_suffix` is then added in the same fashion if given. Typical usage is like this: ``` placename_to_key = make_placename_to_key(", England") ``` (which will convert e.g. `"Hampshire"` into `"Hampshire, England"`) or ``` placename_to_key = make_placename_to_key(", South Korea", " County") ``` (which will convert e.g. `"Gangwon"` or `"Gangwon County"` into `"Gangwon County, South Korea"`). ]=] local function make_placename_to_key(container_suffix, divtype_suffix) return function(placename) local key = placename if divtype_suffix then if not key:find(divtype_suffix .. "$") then key = key .. divtype_suffix end end if container_suffix then key = key .. container_suffix end return key end end --[=[ This is typically used to define `canonicalize_key_container`, which converts a container as specified in the location data into the canonical form containing both the full container key and its placetype. It generates a function to do the canonicalization of a given container. If the container is a string, `suffix` is appended onto the string (use {nil} or {""} if there is no suffix to append), and the placetype is set to `placetype`. Otherwise the container is left as-is. Typical usage is like this: ``` canonicalize_key_container = make_canonicalize_key_container(", Canada", "province") ``` which will convert e.g. `"Ontario"` into `{key = "Ontario, Canada", placetype = "province"}`. ]=] local function make_canonicalize_key_container(suffix, placetype) return function(container) if type(container) == "string" then return {key = container .. (suffix or ""), placetype = placetype} else return container end end end ----------------------------------------------------------------------------------- -- Top-level tables -- ----------------------------------------------------------------------------------- export.continents = { ["Trái Đất"] = {placetype = "planet", addl_parents = {"tự nhiên"}, fulldesc = "=là hành tinh thứ ba tính từ Mặt Trời", commonscat = "Earth"}, ["châu Phi"] = {placetype = "continent", commonscat = "Africa", container = {key = "Trái Đất", placetype = "planet"}}, ["châu Mỹ"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"}, keydesc = "[[America]], in the sense of [[North America]] and [[South America]] combined", wp = "Châu Mỹ"}, ["Americas"] = {alias_of = "châu Mỹ", the = true}, ["America"] = {alias_of = "châu Mỹ", the = true}, ["Bắc Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}}, ["Caribe"] = {the = true, placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}}, ["Trung Mỹ"] = {placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}}, ["Nam Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}}, ["châu Nam Cực"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}, fulldesc = "=lục địa nằm xa về phía nam và tây nhất trên Trái Đất, chứa Cực Nam địa lý và nằm trong Vùng Nam Cực của Nam Bán cầu"}, ["Đại lục Á Âu"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"}, keydesc = "một khu vực đất đai rộng lớn, bao gồm châu Âu và châu Á"}, ["châu Á"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}}, ["châu Âu"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}}, ["châu Đại Dương"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}}, ["Melanesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, ["Micronesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, ["Polynesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, } export.continents_group = { default_overriding_bare_label_parents = {}, -- container parents should be used default_divs = {{type = "countries", prep = "của"}}, -- It's enough to mention the first-level continent or continent group. It seems excessive to write e.g. -- "El Salvador, a country in Central America, a continental region in North America, a continent in America, ...". default_no_include_container_in_desc = true, default_no_container_cat = true, default_no_container_parent = true, default_no_auto_augment_container = true, default_no_generic_place_cat = true, -- French Guyana is in France but not in Europe, which should not be an issue, so don't check holonym mismatches at -- this level. We also run into problems with supercontinents, which have "continent" as the fallback and cause -- mismatches. default_no_check_holonym_mismatch = true, data = export.continents, } -- Countries: including those with partial recognition that are normally considered countries (e.g. Kosovo, Taiwan). export.countries = { ["Afghanistan"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Albania"] = {container = "Europe", divs = {"counties", "municipalities", "communes", {type = "administrative units", cat_as = "communes"}, }, british_spelling = true}, ["Algeria"] = {container = "Africa", divs = {"provinces", "communes", "districts", "municipalities"}}, ["Andorra"] = {container = "Europe", divs = {"parishes"}, british_spelling = true}, ["Angola"] = {container = "Africa", divs = {"provinces", "municipalities"}}, ["Antigua and Barbuda"] = {container = "Caribbean", divs = {"provinces"}, british_spelling = true}, ["Argentina"] = {container = "South America", divs = {"provinces", "departments", "municipalities"}}, ["Armenia"] = {container = {"Europe", "Asia"}, divs = {"provinces", "districts", "municipalities"}, british_spelling = true}, ["Republic of Armenia"] = {alias_of = "Armenia", the = true}, -- differs in "the" -- Both a country and continent ["Australia"] = {container = "Oceania", divs = { {type = "states", cat_as = "states and territories"}, {type = "territories", cat_as = "states and territories"}, {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and territories"}, {type = "ABBREVIATION_OF territories", cat_as = "abbreviations of states and territories"}, "local government areas", "dependent territories", }, british_spelling = true}, ["Austria"] = {container = "Europe", divs = {"states", "districts", "municipalities"}, british_spelling = true}, ["Azerbaijan"] = {container = {"Europe", "Asia"}, divs = {"districts", "municipalities"}, british_spelling = true}, ["Bahamas"] = {the = true, container = "Caribbean", divs = {"districts"}, british_spelling = true, wp = "The %l"}, ["Bahrain"] = {container = "Asia", divs = {"governorates"}}, ["Bangladesh"] = {container = "Asia", divs = {"divisions", "districts", "municipalities"}, british_spelling = true}, ["Barbados"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Belarus"] = {container = "Europe", divs = {"regions", "districts"}, british_spelling = true}, ["Belgium"] = {container = "Europe", divs = {"regions", "provinces", "municipalities"}, british_spelling = true}, ["Belize"] = {container = "Central America", divs = {"districts"}, british_spelling = true}, ["Benin"] = {container = "Africa", divs = {"departments", "communes"}}, ["Bhutan"] = {container = "Asia", divs = {"districts", "gewogs"}}, ["Bolivia"] = {container = "South America", divs = {"provinces", "departments", "municipalities"}}, ["Bosnia and Herzegovina"] = {container = "Europe", divs = {"entities", "cantons", "municipalities"}, british_spelling = true}, ["Bosnia and Hercegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia-Herzegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia-Hercegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Botswana"] = {container = "Africa", divs = {"districts", "subdistricts"}, british_spelling = true}, ["Brazil"] = {container = "South America", divs = { "states", "municipalities", "macroregions", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, }}, ["Brunei"] = {container = "Asia", divs = {"districts", "mukims"}, british_spelling = true}, ["Bulgaria"] = {container = "Europe", divs = {"provinces", "municipalities"}, british_spelling = true}, ["Burkina Faso"] = {container = "Africa", divs = {"regions", "departments", "provinces"}}, ["Burundi"] = {container = "Africa", divs = {"provinces", "communes"}}, ["Cambodia"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Cameroon"] = {container = "Africa", divs = {"regions", "departments"}}, ["Canada"] = {container = "North America", divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, {type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces and territories"}, {type = "ABBREVIATION_OF territories", cat_as = "abbreviations of provinces and territories"}, "counties", "districts", "municipalities", "regional municipalities", "rural municipalities", "parishes", -- Don't change the following to something more politically correct (e.g. "First Nations reserves") until/unless -- the Canadian government makes a similar switch (and note that as of Apr 18 2025, the Wikipedia article is -- still at [[w:Indian reserves]]). "Indian reserves", "census divisions", {type = "townships", prep = "in"}, }, british_spelling = true}, ["Cape Verde"] = {container = "Africa", divs = {"municipalities", "parishes"}}, ["Cabo Verde"] = {alias_of = "Cape Verde", display = true}, ["Central African Republic"] = {the = true, container = "Africa", divs = {"prefectures", "subprefectures"}}, ["CAR"] = {alias_of = "Central African Republic", display = true, the = true}, ["C.A.R"] = {alias_of = "Central African Republic", display = true, the = true}, ["Chad"] = {container = "Africa", divs = {"regions", "departments"}}, ["Chile"] = {container = "South America", divs = {"regions", "provinces", "communes"}}, ["China"] = {container = "Asia", divs = { {type = "provinces", cat_as = "provinces and autonomous regions"}, {type = "autonomous regions", cat_as = "provinces and autonomous regions"}, {type = "FORMER provinces", cat_as = "former provinces"}, "special administrative regions", "prefectures", {type = "FORMER prefectures", cat_as = "former prefectures"}, "prefecture-level cities", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, {type = "FORMER counties", cat_as = "former counties and county-level cities"}, {type = "FORMER county-level cities", cat_as = "former counties and county-level cities"}, -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities. "districts", {type = "FORMER districts", cat_as = "former districts"}, "subdistricts", "townships", "municipalities", {type = "direct-administered municipalities", cat_as = "municipalities"}, }}, ["People's Republic of China"] = {alias_of = "China", the = true}, -- differs in "the" ["Colombia"] = {container = "South America", divs = {"departments", "municipalities"}}, ["Comoros"] = {the = true, container = "Africa", divs = {"autonomous islands"}}, ["Costa Rica"] = {container = "Central America", divs = {"provinces", "cantons"}}, ["Croatia"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Cuba"] = {container = "Caribbean", divs = {"provinces", "municipalities"}}, ["Cyprus"] = {container = {"Europe", "Asia"}, divs = {"districts"}, british_spelling = true}, ["Czech Republic"] = {the = true, container = "Europe", divs = {"regions", "districts", "municipalities"}, british_spelling = true}, ["Czechia"] = {alias_of = "Czech Republic"}, -- differs in "the" ["Democratic Republic of the Congo"] = {the = true, container = "Africa", divs = {"provinces", "territories"}}, ["Congo"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["DRC"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["D.R.C"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["Denmark"] = {container = "Europe", divs = {"regions", "municipalities", "dependent territories"}, british_spelling = true, -- Wikipedia separates [[w:Denmark]] (constituent country) from [[w:Danish Realm]] (country) }, ["Djibouti"] = {container = "Africa", divs = {"regions", "districts"}}, ["Dominica"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Dominican Republic"] = {the = true, container = "Caribbean", divs = {"provinces", "municipalities"}, keydesc = "the [[Dominican Republic]], the country that shares the [[Caribbean]] island of [[Hispaniola]] with [[Haiti]]"}, ["East Timor"] = {container = "Asia", divs = {"municipalities"}, wp = "Timor-Leste"}, ["Timor-Leste"] = {alias_of = "East Timor", display = true}, ["Ecuador"] = {container = "South America", divs = {"provinces", "cantons"}}, ["Egypt"] = {container = "Africa", divs = {"governorates", "regions"}, british_spelling = true}, ["El Salvador"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Equatorial Guinea"] = {container = "Africa", divs = {"provinces"}}, ["Eritrea"] = {container = "Africa", divs = {"regions", "subregions"}}, ["Estonia"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Eswatini"] = {container = "Africa", british_spelling = true}, ["Swaziland"] = {alias_of = "Eswatini", display = true}, ["Ethiopia"] = {container = "Africa", divs = {"regions", "zones"}}, ["Federated States of Micronesia"] = {the = true, container = "Micronesia", divs = {"states"}}, ["Micronesia"] = {alias_of = "Federated States of Micronesia"}, ["Fiji"] = {container = "Melanesia", divs = {"divisions", "provinces"}, british_spelling = true}, ["Finland"] = {container = "Europe", divs = {"regions", "municipalities"}, british_spelling = true}, ["France"] = {container = "Europe", divs = {"regions", "cantons", "collectivities", "communes", {type = "municipalities", cat_as = "communes"}, "departments", {type = "prefectures", cat_as = {"prefectures", "departmental capitals"}}, {type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}}, "dependent territories", "territories", "provinces", }, british_spelling = true}, ["Gabon"] = {container = "Africa", divs = {"provinces", "departments"}}, ["Gambia"] = {the = true, container = "Africa", divs = {"divisions", "districts"}, british_spelling = true, wp = "The %l"}, ["Georgia"] = {container = {"Europe", "Asia"}, divs = {"regions", "districts"}, keydesc = "the country of [[Georgia]], in [[Eurasia]]", british_spelling = true, wp = "%l (country)"}, ["Germany"] = {container = "Europe", divs = { "states", -- Bavaria, Baden-Württemberg, Hesse and North Rhine-Westphalia have administrative regions as divisions, but -- there aren't really enough of them to categorize per state. "regions", "municipalities", "districts"}, british_spelling = true}, ["Ghana"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Greece"] = {container = "Europe", divs = {"regions", "regional units", "municipalities", {type = "peripheries", cat_as = {"regions"}}, }, british_spelling = true}, ["Grenada"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Guatemala"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Guinea"] = {container = "Africa", divs = {"regions", "prefectures"}}, ["Guinea-Bissau"] = {container = "Africa", divs = {"regions"}}, ["Guyana"] = {container = "South America", divs = {"regions"}, british_spelling = true}, ["Haiti"] = {container = "Caribbean", divs = {"departments", "arrondissements"}}, ["Honduras"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Hungary"] = {container = "Europe", divs = {"counties", "districts"}, british_spelling = true}, ["Iceland"] = {container = "Europe", divs = {"regions", "municipalities", "counties"}, british_spelling = true}, ["India"] = {container = "Asia", divs = { {type = "states", cat_as = "states and union territories"}, {type = "union territories", cat_as = "states and union territories"}, {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and union territories"}, {type = "ABBREVIATION_OF union territories", cat_as = "abbreviations of states and union territories"}, "divisions", "districts", "municipalities", }, british_spelling = true}, ["Indonesia"] = {container = "Asia", divs = {"regencies", "provinces", {type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces"}, }}, ["Iran"] = {container = "Asia", divs = {"provinces", "counties"}}, ["Iraq"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Ireland"] = {container = "Europe", addl_parents = {"British Isles"}, divs = {"counties", "districts", "provinces"}, british_spelling = true, wp = "Republic of %l"}, ["Republic of Ireland"] = {alias_of = "Ireland", the = true}, -- differs in "the" ["Israel"] = {container = "Asia", divs = {"districts"}}, ["Italy"] = {container = "Europe", divs = { "regions", "provinces", "metropolitan cities", "municipalities", {type = "autonomous regions", cat_as = "regions"}, }, british_spelling = true}, ["Ivory Coast"] = {container = "Africa", divs = {"districts", "regions"}}, -- We should really be using Ivory Coast (common name) but there are political ramifications to the use of -- Côte d'Ivoire so don't make it a display alias. ["Côte d'Ivoire"] = {alias_of = "Ivory Coast"}, ["Jamaica"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Japan"] = {container = "Asia", divs = {"prefectures", "subprefectures", "municipalities"}}, ["Jordan"] = {container = "Asia", divs = {"governorates"}}, ["Kazakhstan"] = {container = {"Asia", "Europe"}, divs = {"regions", "districts"}}, ["Kenya"] = {container = "Africa", divs = {"counties"}, british_spelling = true}, ["Kiribati"] = {container = "Micronesia", british_spelling = true}, ["Kosovo"] = {container = "Europe", divs = {"districts", "municipalities"}, british_spelling = true}, ["Kuwait"] = {container = "Asia", divs = {"governorates", "areas"}}, ["Kyrgyzstan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Laos"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Latvia"] = {container = "châu Âu", divs = {"municipalities"}, british_spelling = true}, ["Lebanon"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Lesotho"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Liberia"] = {container = "Africa", divs = {"counties", "districts"}}, ["Libya"] = {container = "Africa", divs = {"districts", "municipalities"}}, ["Liechtenstein"] = {container = "Europe", divs = {"municipalities"}, british_spelling = true}, ["Lithuania"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Luxembourg"] = {container = "Europe", divs = {"cantons", "districts"}, british_spelling = true}, ["Madagascar"] = {container = "Africa", divs = {"regions", "districts"}}, ["Malawi"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Malaysia"] = {container = "Asia", divs = {"states", "federal territories", "districts"}, british_spelling = true}, ["Maldives"] = {the = true, container = "Asia", divs = {"provinces", "administrative atolls"}, british_spelling = true}, ["Mali"] = {container = "Africa", divs = {"regions", "cercles"}}, ["Malta"] = {container = "Europe", divs = {"regions", "local councils"}, british_spelling = true}, ["Marshall Islands"] = {the = true, container = "Micronesia", divs = {"municipalities"}}, ["Mauritania"] = {container = "Africa", divs = {"regions", "departments"}}, ["Mauritius"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Mexico"] = {container = "North America", addl_parents = {"Central America"}, divs = { "states", "municipalities", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, }}, ["Moldova"] = {container = "Europe", divs = { {type = "districts", cat_as = "districts and autonomous territorial units"}, {type = "autonomous territorial units", cat_as = "districts and autonomous territorial units"}, "communes", "municipalities", }, british_spelling = true}, ["Monaco"] = {placetype = {"city-state", "quốc gia"}, container = "Europe", -- We want the first placetype to be 'city-state' so the description of Monaco says it's a city-state, but we -- want its parent to be "countries in Europe". bare_category_parent_type = {type = "countries", prep = "in"}, is_city = true, british_spelling = true}, ["Mongolia"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Montenegro"] = {container = "Europe", divs = {"municipalities"}}, ["Morocco"] = {container = "Africa", divs = {"regions", "prefectures", "provinces"}}, ["Mozambique"] = {container = "Africa", divs = {"provinces", "districts"}}, ["Myanmar"] = {container = "Asia", divs = {"regions", "states", "union territories", {type = "self-administered zones", cat_as = "self-administered areas"}, {type = "self-administered divisions", cat_as = "self-administered areas"}, "districts"}}, ["Burma"] = {alias_of = "Myanmar"}, -- not display-canonicalizing; has political connotations ["Namibia"] = {container = "Africa", divs = {"regions", "constituencies"}, british_spelling = true}, ["Nauru"] = {container = "Micronesia", divs = {"districts"}, british_spelling = true}, ["Nepal"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Netherlands"] = {the = true, placetype = {"quốc gia", "constituent country"}, container = "Europe", divs = {"provinces", "municipalities", {type = "FORMER municipalities", cat_as = "former municipalities"}, "dependent territories", "constituent countries"}, british_spelling = true, -- Wikipedia separates [[w:Netherlands]] (constituent country) from [[w:Kingdom of the Netherlands]] -- (country) }, ["New Zealand"] = {container = "Polynesia", divs = { "regions", "dependent territories", "territorial authorities", {type = "districts", cat_as = "territorial authorities"}, }, british_spelling = true}, ["Nicaragua"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Niger"] = {container = "Africa", divs = {"regions", "departments"}}, ["Nigeria"] = {container = "Africa", divs = { "states", -- Categorize the Federal Capital Territory as a state because there's only one of it; we could categorize -- everything under 'states and territories' but that seems a bit pointless. {type = "federal territories", cat_as = "states"}, "local government areas", }, british_spelling = true}, ["North Korea"] = {container = "Asia", addl_parents = {"Korea"}, divs = {"provinces", "counties"}}, ["North Macedonia"] = {container = "Europe", divs = {"regions", "municipalities"}, british_spelling = true}, ["Macedonia"] = {alias_of = "North Macedonia", display = true}, ["Republic of North Macedonia"] = {alias_of = "North Macedonia", the = true}, -- differs in "the" ["Republic of Macedonia"] = {alias_of = "North Macedonia", the = true}, -- differs in "the" ["Norway"] = {container = "Europe", divs = {"counties", "municipalities", "dependent territories", "districts", "unincorporated areas"}, british_spelling = true}, ["Oman"] = {container = "Asia", divs = {"governorates", "provinces"}}, ["Pakistan"] = {container = "Asia", divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "administrative territories", cat_as = "provinces and territories"}, {type = "federal territories", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, "divisions", "districts", }, british_spelling = true}, ["Palau"] = {container = "Micronesia", divs = {"states"}}, ["Palestine"] = {container = "Asia", divs = {"governorates"}}, ["State of Palestine"] = {alias_of = "Palestine", the = true}, -- differs in "the" ["Panama"] = {container = "Central America", divs = {"provinces", "districts"}}, ["Papua New Guinea"] = {container = "Melanesia", divs = {"provinces", "districts"}, british_spelling = true}, ["Paraguay"] = {container = "South America", divs = {"departments", "districts"}}, ["Peru"] = {container = "South America", divs = {"regions", "provinces", "districts"}}, ["Philippines"] = {the = true, container = "Asia", divs = {"regions", "provinces", "districts", "municipalities", "barangays"}}, ["Poland"] = {divs = {"voivodeships", "counties", {type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}}, }, container = "Europe", british_spelling = true}, ["Portugal"] = {container = "Europe", divs = { {type = "autonomous regions", cat_as = "districts and autonomous regions"}, {type = "districts", cat_as = "districts and autonomous regions"}, "provinces", "municipalities"}, british_spelling = true}, ["Qatar"] = {container = "Asia", divs = {"municipalities", "zones"}}, ["Republic of the Congo"] = {the = true, container = "Africa", divs = {"departments", "districts"}}, ["Congo Republic"] = {alias_of = "Republic of the Congo", display = true, the = true}, ["Romania"] = {container = "Europe", divs = { "regions", "counties", "communes", {type = "ABBREVIATION_OF counties", cat_as = "abbreviations of counties"}, }, british_spelling = true}, ["Russia"] = {container = {"Europe", "Asia"}, divs = { "federal subjects", "republics", "autonomous oblasts", "autonomous okrugs", "oblasts", "krais", "federal cities", "districts", "federal districts"}, british_spelling = true}, ["Rwanda"] = {container = "Africa", divs = {"provinces", "districts"}}, ["Saint Kitts and Nevis"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Saint Kitts"] = {alias_of = "Saint Kitts and Nevis", display = true}, ["Saint Lucia"] = {container = "Caribbean", divs = {"districts"}, british_spelling = true}, ["Saint Vincent and the Grenadines"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Saint Vincent"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["SVG"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["S.V.G"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["Samoa"] = {container = "Polynesia", divs = {"districts"}, british_spelling = true}, ["San Marino"] = {container = "Europe", divs = {"municipalities"}, british_spelling = true}, ["São Tomé and Príncipe"] = {container = "Africa", divs = {"districts"}}, ["São Tome and Principe"] = {alias_of = "São Tomé and Príncipe", display = true}, ["São Tomé"] = {alias_of = "São Tomé and Príncipe", display = true}, ["São Tome"] = {alias_of = "São Tomé and Príncipe", display = true}, ["Saudi Arabia"] = {container = "Asia", divs = {"provinces", "governorates"}}, ["Senegal"] = {container = "Africa", divs = {"regions", "departments"}}, ["Serbia"] = {container = "Europe", divs = {"districts", "municipalities", "autonomous provinces"}}, ["Seychelles"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Sierra Leone"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, ["Singapore"] = {container = "Asia", divs = {"districts", "regions"}, british_spelling = true}, ["Slovakia"] = {container = "Europe", divs = {"regions", "districts"}, british_spelling = true}, ["Slovenia"] = {container = "Europe", divs = {"statistical regions", "municipalities"}, british_spelling = true}, -- Note: While the official name does not include "the" at the beginning, -- it sounds strange in English to leave it out and it's commonly included. ["Solomon Islands"] = {the = true, container = "Melanesia", divs = {"provinces"}, british_spelling = true}, ["Somalia"] = {container = "Africa", divs = {"regions", "districts"}}, ["South Africa"] = {container = "Africa", divs = { "provinces", "districts", {type = "district municipalities", cat_as = "districts"}, {type = "metropolitan municipalities", cat_as = "districts"}, "municipalities", }, british_spelling = true}, ["South Korea"] = {container = "Asia", addl_parents = {"Korea"}, divs = {"provinces", "counties", "districts"}}, ["South Sudan"] = {container = "Africa", divs = {"regions", "states", "counties"}, british_spelling = true}, ["Spain"] = {container = "Europe", divs = {"autonomous communities", "provinces", "municipalities", "comarcas", "autonomous cities"}, british_spelling = true}, ["Sri Lanka"] = {container = "Asia", divs = {"provinces", "districts"}, british_spelling = true}, ["Sudan"] = {container = "Africa", divs = {"states", "districts"}, british_spelling = true}, ["Suriname"] = {container = "South America", divs = {"districts"}}, ["Sweden"] = {container = "Europe", divs = {"provinces", "counties", "municipalities"}, british_spelling = true}, ["Switzerland"] = {container = "Europe", divs = {"cantons", "municipalities", "districts"}, british_spelling = true}, ["Syria"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Taiwan"] = {container = "Asia", divs = {"counties", "districts", "townships", "special municipalities"}}, ["Republic of China"] = {alias_of = "Taiwan", the = true}, -- differs in "the", different political connotations ["Tajikistan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Tanzania"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Thailand"] = {container = "Asia", divs = {"provinces", "districts", "subdistricts"}}, ["Togo"] = {container = "Africa", divs = {"provinces", "prefectures"}}, ["Tonga"] = {container = "Polynesia", divs = {"divisions"}, british_spelling = true}, ["Trinidad and Tobago"] = {container = "Caribbean", divs = {"regions", "municipalities"}, british_spelling = true}, ["Tunisia"] = {container = "Africa", divs = {"governorates", "delegations"}}, ["Turkey"] = {container = {"Europe", "Asia"}, divs = {"provinces", "districts"}}, -- Foreign names generally get display-canonicalized. ["Türkiye"] = {alias_of = "Turkey", display = true}, ["Turkmenistan"] = {container = "Asia", divs = { -- The 5 regions are often also called provinces "regions", {type = "provinces", cat_as = "regions"}, "districts"}, }, ["Tuvalu"] = {container = "Polynesia", divs = {"atolls"}, british_spelling = true}, ["Uganda"] = {container = "Africa", divs = {"districts", "counties"}, british_spelling = true}, ["Ukraine"] = {container = "Europe", divs = { {type = "oblasts", cat_as = "oblasts and autonomous republics"}, {type = "autonomous republics", cat_as = "oblasts and autonomous republics"}, "raions", "hromadas", }, british_spelling = true}, ["United Arab Emirates"] = {the = true, container = "Asia", divs = {"emirates"}}, -- Abbreviations get display-canonicalized. ["UAE"] = {alias_of = "United Arab Emirates", display = true, the = true}, ["U.A.E."] = {alias_of = "United Arab Emirates", display = true, the = true}, ["United Kingdom"] = {the = true, container = "Europe", addl_parents = {"British Isles"}, divs = {"constituent countries", "counties", "districts", "boroughs", "territories", "dependent territories", "traditional counties"}, keydesc = "the [[United Kingdom]] of Great Britain and Northern Ireland", british_spelling = true}, -- Abbreviations get display-canonicalized. ["UK"] = {alias_of = "United Kingdom", display = true, the = true}, ["U.K."] = {alias_of = "United Kingdom", display = true, the = true}, ["United States"] = {the = true, container = "North America", divs = {"counties", "county seats", "states", "territories", "dependent territories", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, {type = "DEROGATORY_NAME_FOR states", cat_as = "derogatory names for states"}, {type = "NICKNAME_FOR states", cat_as = "nicknames for states"}, {type = "OFFICIAL_NICKNAME_FOR states", cat_as = "official nicknames for states"}, {type = "boroughs", prep = "in"}, -- exist in Pennsylvania and New Jersey "municipalities", -- these exist politically at least in Colorado and Connecticut {type = "census-designated places", prep = "in"}, {type = "unincorporated communities", prep = "in"}, -- Don't change the following to something more politically correct until/unless the US government makes a -- similar switch (and note that as of Apr 18 2025, the Wikipedia article is still at -- [[w:Indian reservations]]). "Indian reservations", }}, -- Abbreviations and long forms (when possible) get display-canonicalized. ["US"] = {alias_of = "United States", display = true, the = true}, ["U.S."] = {alias_of = "United States", display = true, the = true}, ["USA"] = {alias_of = "United States", display = true, the = true}, ["U.S.A."] = {alias_of = "United States", display = true, the = true}, ["United States of America"] = {alias_of = "United States", display = true, the = true}, ["Uruguay"] = {container = "South America", divs = {"departments", "municipalities"}}, ["Uzbekistan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Vanuatu"] = {container = "Melanesia", divs = {"provinces"}, british_spelling = true}, ["Vatican City"] = {placetype = {"city-state", "quốc gia"}, container = "Europe", -- First placetype should be 'city-state' for to shown up in its description, -- Its parent should still be "countries in Europe". bare_category_parent_type = {type = "countries", prep = "in"}, addl_parents = {"Rome"}, is_city = true, british_spelling = true}, ["Vatican"] = {alias_of = "Vatican City", the = true}, -- differs in "the" ["Venezuela"] = {container = "South America", divs = {"states", "municipalities"}}, ["Việt Nam"] = {container = "châu Á", divs = {"provinces", "districts", "municipalities"}}, ["Western Sahara"] = {placetype = {"territory", "quốc gia"}, container = "Africa", bare_category_parent_type = {type = "countries", prep = "in"}, }, -- Not display-canonicalizable both due to differences in 'the' and the sovereignty dispute over Western Sahara ["Sahrawi Arab Democratic Republic"] = {alias_of = "Western Sahara", the = true}, ["SADR"] = {alias_of = "Sahrawi Arab Democratic Republic", display = true, the = true}, ["Yemen"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Zambia"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, ["Zimbabwe"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, } local function canonicalize_continent_container(key) if type(key) ~= "string" then return key end if export.continents[key] then return {key = key, placetype = export.continents[key].placetype} end internal_error("Unrecognized key %s in `canonicalize_continent_like`", key) end export.countries_group = { canonicalize_key_container = canonicalize_continent_container, default_overriding_bare_label_parents = {"+++", "countries"}, default_placetype = "quốc gia", default_no_container_cat = true, default_no_container_parent = true, -- No need to augment country holonyms with continents; not needed for disambiguation. default_no_auto_augment_container = true, data = export.countries, } -- Country-like entities: typically overseas territories or de-facto independent countries, which in both cases -- are not internationally recognized as sovereign nations but which we treat similarly to countries. export.country_like_entities = { -- British Overseas Territory ["Akrotiri and Dhekelia"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Cyprus", "Europe", "Asia"}, british_spelling = true, }, -- Åland: Listed as a region of Finland. Wikipedia lists this under "dependent territories" in -- [[w:List of sovereign states and dependent territories by continent]]. -- unincorporated territory of the United States ["American Samoa"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Polynesia"}, }, -- British Overseas Territory ["Anguilla"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Georgia ["Abkhazia"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Georgia", "Europe", "Asia"}, divs = {"districts"}, keydesc = "the de-facto independent state of [[Abkhazia]], internationally recognized as part of the country of [[Georgia]]", british_spelling = true, }, -- Australian external territory ["Ashmore and Cartier Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, }, -- constituent country of the Netherlands ["Aruba"] = { placetype = {"constituent country", "quốc gia"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- British Overseas Territory ["Bermuda"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"North America"}, british_spelling = true, }, -- special municipality of the Netherlands ["Bonaire"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- British Overseas Territory ["British Indian Ocean Territory"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Asia"}, british_spelling = true, }, -- British Overseas Territory ["British Virgin Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- Norwegian dependent territory ["Bouvet Island"] = { placetype = {"dependent territory", "territory"}, container = "Norway", addl_parents = {"Africa"}, british_spelling = true, }, -- British Overseas Territory ["Cayman Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- Australian external territory ["Christmas Island"] = { placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, british_spelling = true, }, -- Sui generis French "state private property" per Wikipedia; classify as overseas territory like the -- French Southern and Antarctic Lands. ["Clipperton Island"] = { placetype = {"overseas territory", "territory"}, container = "France", addl_parents = {"North America"}, }, -- Australian external territory; also called the Keeling Islands or (officially) the Cocos (Keeling) Islands ["Cocos Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, wp = "Cocos (Keeling) Islands", british_spelling = true, }, ["Cocos (Keeling) Islands"] = {alias_of = "Cocos Islands", display = true, the = true}, ["Keeling Islands"] = {alias_of = "Cocos Islands", display = true, the = true}, -- self-governing but in free association with New Zealand ["Cook Islands"] = { the = true, placetype = {"quốc gia"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- constituent country of the Netherlands ["Curaçao"] = { placetype = {"constituent country", "quốc gia"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- special territory of Chile ["Easter Island"] = { placetype = {"special territory", "territory"}, container = "Chile", addl_parents = {"Polynesia"}, }, -- British Overseas Territory ["Falkland Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"South America"}, british_spelling = true, }, -- autonomous territory of Denmark ["Faroe Islands"] = { the = true, placetype = {"autonomous territory", "territory"}, container = "Denmark", addl_parents = {"Europe"}, british_spelling = true, }, -- overseas department and region of France ["French Guiana"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"South America"}, british_spelling = true, }, -- overseas collectivity of France ["French Polynesia"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Polynesia"}, british_spelling = true, }, -- French overseas territory ["French Southern and Antarctic Lands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "France", addl_parents = {"Africa"}, }, -- British Overseas Territory ["Gibraltar"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Europe"}, is_city = true, british_spelling = true, }, -- autonomous territory of Denmark ["Greenland"] = { placetype = {"autonomous territory", "territory"}, container = "Denmark", addl_parents = {"North America"}, divs = {"municipalities"}, british_spelling = true, }, -- overseas department and region of France ["Guadeloupe"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", addl_parents = {"Caribbean"}, divs = {"communes"}, british_spelling = true, }, -- unincorporated territory of the United States ["Guam"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- self-governing British Crown dependency; technically called the Bailiwick of Guernsey ["Guernsey"] = { placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, wp = "Bailiwick of %l", }, ["Bailiwick of Guernsey"] = {alias_of = "Guernsey", the = true}, -- Australian external territory ["Heard Island and McDonald Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Africa"}, }, -- special administrative region of China ["Hong Kong"] = { placetype = {"special administrative region", "city"}, container = "China", is_city = true, british_spelling = true, }, -- self-governing British Crown dependency ["Isle of Man"] = { the = true, placetype = {"crown dependency", "dependency", "dependent territory", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, }, -- Norwegian unincorporated area ["Jan Mayen"] = { placetype = {"unincorporated area", "dependent territory", "territory", "island"}, container = "Norway", addl_parents = {"Europe"}, british_spelling = true, }, -- self-governing British Crown dependency; technically called the Bailiwick of Jersey ["Jersey"] = { placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, }, ["Bailiwick of Jersey"] = {alias_of = "Jersey", the = true}, -- special administrative region of China ["Macau"] = { placetype = {"special administrative region", "city"}, container = "China", is_city = true, british_spelling = true, }, -- overseas department and region of France ["Martinique"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Caribbean"}, british_spelling = true, }, -- overseas department and region of France ["Mayotte"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Africa"}, british_spelling = true, }, -- British Overseas Territory ["Montserrat"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- special collectivity of France ["New Caledonia"] = { placetype = {"special collectivity", "collectivity"}, container = "France", addl_parents = {"Melanesia"}, british_spelling = true, }, -- dependent territory of New Zealand ["New Zealand Subantarctic Islands"] = { the = true, placetype = {"dependent territory", "territory"}, container = "New Zealand", addl_parents = {"Antarctica"}, british_spelling = true, }, -- self-governing but in free association with New Zealand ["Niue"] = { placetype = {"quốc gia"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- Australian external territory ["Norfolk Island"] = { placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Polynesia"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Cyprus ["Northern Cyprus"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Cyprus", "Turkey", "Europe", "Asia"}, divs = {"districts"}, keydesc = "the de-facto independent state of [[Northern Cyprus]], internationally recognized as part of the country of [[Cyprus]]", british_spelling = true, }, -- commonwealth, unincorporated territory of the United States ["Northern Mariana Islands"] = { the = true, placetype = {"commonwealth", "unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- British Overseas Territory ["Pitcairn Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Polynesia"}, british_spelling = true, }, -- commonwealth of the United States ["Puerto Rico"] = { placetype = {"commonwealth", "overseas territory", "territory"}, container = "United States", addl_parents = {"Caribbean"}, divs = {"municipalities"}, }, -- overseas department and region of France ["Réunion"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Africa"}, british_spelling = true, }, -- special municipality of the Netherlands ["Saba"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- overseas collectivity of France ["Saint Barthélemy"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Caribbean"}, british_spelling = true, }, -- British Overseas Territory ["Saint Helena, Ascension and Tristan da Cunha"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", divs = {{type = "constituent parts", container_parent_type = false}}, addl_parents = {"Atlantic Ocean", "Africa"}, british_spelling = true, }, -- constituent parts of the combined oveseas territory ["Ascension Island"] = { placetype = {"constituent part", "territory", "island"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, ["Saint Helena"] = { placetype = {"constituent part", "territory", "island"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, ["Tristan da Cunha"] = { placetype = {"constituent part", "territory", "archipelago"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, -- overseas collectivity of France ["Saint Martin"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Caribbean"}, british_spelling = true, }, -- overseas collectivity of France ["Saint Pierre and Miquelon"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", divs = {"communes"}, addl_parents = {"North America"}, british_spelling = true, }, -- special municipality of the Netherlands ["Sint Eustatius"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- constituent country of the Netherlands ["Sint Maarten"] = { placetype = {"constituent country", "quốc gia"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Somalia ["Somaliland"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Somalia", "Africa"}, keydesc = "the de-facto independent state of [[Somaliland]], internationally recognized as part of the country of [[Somalia]]", british_spelling = true, }, -- British Overseas Territory -- FIXME: We should form the group "South Georgia and the South Sandwich Islands" like we did for -- "Saint Helena, Ascension and Tristan da Cunha". ["South Georgia"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Atlantic Ocean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Georgia ["South Ossetia"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Georgia", "Europe", "Asia"}, keydesc = "the de-facto independent state of [[South Ossetia]], internationally recognized as part of the country of [[Georgia]]", british_spelling = true, }, -- British Overseas Territory ["South Sandwich Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Atlantic Ocean"}, wp = true, wpcat = "South Georgia and the South Sandwich Islands", british_spelling = true, }, -- Norwegian unincorporated area ["Svalbard"] = { placetype = {"unincorporated area", "dependent territory", "territory", "archipelago"}, container = "Norway", addl_parents = {"Europe"}, british_spelling = true, }, -- dependent territory of New Zealand ["Tokelau"] = { placetype = {"dependent territory", "territory"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Moldova ["Transnistria"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Moldova", "Europe"}, keydesc = "the de-facto independent state of [[Transnistria]], internationally recognized as part of [[Moldova]]", british_spelling = true, }, -- British Overseas Territory ["Turks and Caicos Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- unincorporated territory of the United States ["United States Minor Outlying Islands"] = { the = true, placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Islands", "Micronesia", "Polynesia", "Caribbean"}, }, -- FIXME: We should add entries for the other minor outlying islands. -- Baker Island (Oceania) -- Howland Island (Oceania) -- Jarvis Island (Oceania) -- Johnston Atoll (Oceania) -- Kingman Reef (Oceania) -- Midway Atoll (Oceania) -- Navassa Island (Caribbean) -- Palmyra Atoll (Oceania) -- Wake Island (Oceania) ["Wake Island"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- unincorporated territory of the United States ["United States Virgin Islands"] = { the = true, placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Caribbean"}, }, ["U.S. Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true}, ["US Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true}, -- overseas collectivity of France ["Wallis and Futuna"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Polynesia"}, british_spelling = true, }, } export.country_like_entities_group = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Saint Helena, Ascension and Tristan da Cunha". key_to_placename = false, placename_to_key = false, canonicalize_key_container = make_canonicalize_key_container(nil, "quốc gia"), default_overriding_bare_label_parents = {"country-like entities"}, default_no_container_cat = true, default_no_container_parent = true, -- These entities often aren't really part of their container; a village in Wallis and Futuna (an overseas -- collectivity of France in Polynesia), for example, shouldn't be treated as a village in France, nor as a village -- in Europe. default_no_auto_augment_container = true, data = export.country_like_entities, } -- Former countries and such; we don't create "Cities in ..." categories because they don't exist anymore export.former_countries = { -- de-facto independent state of Armenian ethnicity, internationally recognized as part of Azerbaijan -- (also known as Nagorno-Karabakh) -- NOTE: Formerly listed Armenia as a parent; this seems politically non-neutral so I've taken it out. ["Artsakh"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Azerbaijan", "Europe", "Asia"}, keydesc = "the former de-facto independent state of [[Artsakh]], internationally recognized as part of [[Azerbaijan]]", british_spelling = true, }, ["Nagorno-Karabakh"] = {alias_of = "Artsakh"}, ["Czechoslovakia"] = {container = "Europe", british_spelling = true}, ["East Germany"] = {container = "Europe", addl_parents = {"Germany"}, british_spelling = true}, ["North Vietnam"] = {container = "Asia", addl_parents = {"Vietnam"}}, ["Persia"] = {placetype = {"empire", "quốc gia"}, container = "Asia", divs = {"provinces"}}, ["Byzantine Empire"] = { the = true, placetype = {"empire", "quốc gia"}, container = {"Europe", "Africa", "Asia"}, addl_parents = {"Ancient Europe", "Ancient Near East"}, divs = { "provinces", "themes", }}, ["Roman Empire"] = { the = true, placetype = {"empire", "quốc gia"}, container = {"Europe", "Africa", "Asia"}, addl_parents = {"Rome"}, divs = { "provinces", {type = "FORMER provinces", cat_as = "provinces"}, }}, ["South Vietnam"] = {container = "Asia", addl_parents = {"Vietnam"}}, ["Soviet Union"] = { the = true, container = {"Europe", "Asia"}, divs = {"republics", "autonomous republics"}, british_spelling = true}, ["West Germany"] = {container = "Europe", addl_parents = {"Germany"}, british_spelling = true}, ["Yugoslavia"] = {container = "Europe", divs = {"districts"}, keydesc = "the former [[Kingdom of Yugoslavia]] (1918–1943) or the former [[Socialist Federal Republic of Yugoslavia]] (1943–1992)", british_spelling = true}, } export.former_countries_group = { canonicalize_key_container = canonicalize_continent_container, default_overriding_bare_label_parents = {"former countries and country-like entities"}, default_is_former_place = true, default_placetype = "quốc gia", default_no_container_cat = true, default_no_container_parent = true, -- No need to augment country holonyms with continents; not needed for disambiguation. default_no_auto_augment_container = true, data = export.former_countries, } ----------------------------------------------------------------------------------- -- Subpolity tables -- ----------------------------------------------------------------------------------- export.australia_states_and_territories = { ["Australian Capital Territory, Australia"] = {the = true, placetype = "territory"}, ["Jervis Bay Territory, Australia"] = {the = true, placetype = "territory"}, ["New South Wales, Australia"] = {}, ["Northern Territory, Australia"] = {the = true, placetype = "territory"}, ["Queensland, Australia"] = {}, ["South Australia, Australia"] = {}, ["Tasmania, Australia"] = {}, ["Victoria, Australia"] = {}, ["Western Australia, Australia"] = {}, } -- states and territories of Australia export.australia_group = { default_container = "Australia", default_placetype = "state", default_divs = "local government areas", data = export.australia_states_and_territories, } export.austria_states = { ["Vienna, Austria"] = {}, ["Lower Austria, Austria"] = {}, ["Upper Austria, Austria"] = {}, ["Styria, Austria"] = {}, ["Tyrol, Austria"] = {wp = "Tyrol (state)"}, ["Carinthia, Austria"] = {}, ["Salzburg, Austria"] = {wp = "Salzburg (state)"}, ["Vorarlberg, Austria"] = {}, ["Burgenland, Austria"] = {}, } -- states of Austria export.austria_group = { default_container = "Austria", default_placetype = "state", default_divs = "municipalities", data = export.austria_states, } export.bangladesh_divisions = { ["Barisal Division, Bangladesh"] = {}, ["Chittagong Division, Bangladesh"] = {}, ["Dhaka Division, Bangladesh"] = {}, ["Khulna Division, Bangladesh"] = {}, ["Mymensingh Division, Bangladesh"] = {}, ["Rajshahi Division, Bangladesh"] = {}, ["Rangpur Division, Bangladesh"] = {}, ["Sylhet Division, Bangladesh"] = {}, } -- divisions of Bangladesh export.bangladesh_group = { key_to_placename = make_key_to_placename(", Bangladesh$", " Division$"), placename_to_key = make_placename_to_key(", Bangladesh", " Division"), default_container = "Bangladesh", default_placetype = "division", default_divs = "districts", data = export.bangladesh_divisions, } export.brazil_states = { ["Acre, Brazil"] = {wp = "%l (state)"}, ["Alagoas, Brazil"] = {}, ["Amapá, Brazil"] = {}, ["Amazonas, Brazil"] = {wp = "%l (Brazilian state)"}, ["Bahia, Brazil"] = {}, ["Ceará, Brazil"] = {}, ["Distrito Federal, Brazil"] = {wp = "Federal District (Brazil)"}, ["Espírito Santo, Brazil"] = {}, ["Goiás, Brazil"] = {}, ["Maranhão, Brazil"] = {}, ["Mato Grosso, Brazil"] = {}, ["Mato Grosso do Sul, Brazil"] = {}, ["Minas Gerais, Brazil"] = {}, ["Pará, Brazil"] = {}, ["Paraíba, Brazil"] = {}, ["Paraná, Brazil"] = {wp = "%l (state)"}, ["Pernambuco, Brazil"] = {}, ["Piauí, Brazil"] = {}, ["Rio de Janeiro, Brazil"] = {wp = "%l (state)"}, ["Rio Grande do Norte, Brazil"] = {}, ["Rio Grande do Sul, Brazil"] = {}, ["Rondônia, Brazil"] = {}, ["Roraima, Brazil"] = {}, ["Santa Catarina, Brazil"] = {wp = "%l (state)"}, ["São Paulo, Brazil"] = {wp = "%l (state)"}, ["Sergipe, Brazil"] = {}, ["Tocantins, Brazil"] = {}, } -- states of Brazil export.brazil_group = { default_container = "Brazil", default_placetype = "state", default_divs = "municipalities", data = export.brazil_states, } -- provinces (a.k.a. oblasts) of Bulgaria export.bulgaria_provinces = { ["Blagoevgrad Province, Bulgaria"] = {}, ["Burgas Province, Bulgaria"] = {}, ["Dobrich Province, Bulgaria"] = {}, ["Gabrovo Province, Bulgaria"] = {}, ["Haskovo Province, Bulgaria"] = {}, ["Kardzhali Province, Bulgaria"] = {}, ["Kyustendil Province, Bulgaria"] = {}, ["Lovech Province, Bulgaria"] = {}, ["Montana Province, Bulgaria"] = {}, ["Pazardzhik Province, Bulgaria"] = {}, ["Pernik Province, Bulgaria"] = {}, ["Pleven Province, Bulgaria"] = {}, ["Plovdiv Province, Bulgaria"] = {}, ["Razgrad Province, Bulgaria"] = {}, ["Ruse Province, Bulgaria"] = {}, ["Shumen Province, Bulgaria"] = {}, ["Silistra Province, Bulgaria"] = {}, ["Sliven Province, Bulgaria"] = {}, ["Smolyan Province, Bulgaria"] = {}, ["Sofia City Province, Bulgaria"] = {}, ["Sofia Province, Bulgaria"] = {}, ["Stara Zagora Province, Bulgaria"] = {}, ["Targovishte Province, Bulgaria"] = {}, ["Varna Province, Bulgaria"] = {}, ["Veliko Tarnovo Province, Bulgaria"] = {}, ["Vidin Province, Bulgaria"] = {}, ["Vratsa Province, Bulgaria"] = {}, ["Yambol Province, Bulgaria"] = {}, } export.bulgaria_group = { key_to_placename = make_key_to_placename(", Bulgaria$", " Province$"), placename_to_key = make_placename_to_key(", Bulgaria", " Province"), default_container = "Bulgaria", --== source: https://en.wikipedia.org/wiki/NUTS_statistical_regions_of_Bulgaria == divs = {"regions", "planning regions", "provinces", "municipalities", "settlements"}, default_placetype = "province", data = export.bulgaria_provinces, } export.canada_provinces_and_territories = { ["Alberta, Canada"] = {divs = { {type = "municipal districts", container_parent_type = "rural municipalities"}, }}, ["British Columbia, Canada"] = {divs = {type = "regional districts", container_parent_type = false}, "regional municipalities", }, ["Manitoba, Canada"] = {divs = {"rural municipalities"}}, ["New Brunswick, Canada"] = {divs = {"counties", "parishes", {type = "civil parishes", cat_as = "parishes"}}}, ["Newfoundland and Labrador, Canada"] = {}, ["Northwest Territories, Canada"] = {the = true, placetype = "territory"}, ["Nova Scotia, Canada"] = {divs = {"counties", "regional municipalities"}}, ["Nunavut, Canada"] = {placetype = "territory"}, ["Ontario, Canada"] = {divs = {"counties", "regional municipalities", {type = "townships", prep = "in"}}}, ["Prince Edward Island, Canada"] = {divs = {"counties", "parishes", "rural municipalities"}}, ["Saskatchewan, Canada"] = {divs = {"rural municipalities"}}, ["Quebec, Canada"] = {divs = { "counties", {type = "regional county municipalities", container_parent_type = "regional municipalities"}, -- administrative regions have an official (but non-governmental) function but there don't appear to be any -- equivalent regions elsewhere in Canada, so disable the [[Category:Regions of Canada]] grouping {type = "regions", container_parent_type = false}, {type = "townships", prep = "in"}, {type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}}, {type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}}, {type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}}, }}, ["Yukon, Canada"] = {placetype = "territory"}, ["Yukon Territory, Canada"] = {alias_of = "Yukon, Canada", the = true}, } -- provinces and territories of Canada export.canada_group = { default_container = "Canada", default_placetype = "province", data = export.canada_provinces_and_territories, } export.china_provinces_and_autonomous_regions = { -- direct-administered municipalities are not here but below under prefecture-level cities ["Anhui, China"] = {}, ["Fujian, China"] = {}, ["Fuchien, China"] = {alias_of = "Fujian, China", display = true}, ["Gansu, China"] = {}, ["Guangdong, China"] = {}, ["Guangxi, China"] = {placetype = "autonomous region"}, ["Guizhou, China"] = {}, ["Hainan, China"] = {}, ["Hebei, China"] = {}, ["Heilongjiang, China"] = {}, ["Henan, China"] = {}, ["Hubei, China"] = {}, ["Hunan, China"] = {}, ["Inner Mongolia, China"] = {placetype = "autonomous region"}, ["Jiangsu, China"] = {}, ["Jiangxi, China"] = {}, ["Jilin, China"] = {}, ["Liaoning, China"] = {}, ["Ningxia, China"] = {placetype = "autonomous region"}, ["Qinghai, China"] = {}, ["Shaanxi, China"] = {}, ["Shandong, China"] = {}, ["Shanxi, China"] = {}, ["Sichuan, China"] = {}, ["Tibet, China"] = {placetype = "autonomous region", wp = "Tibet Autonomous Region"}, ["Xinjiang, China"] = {placetype = "autonomous region"}, ["Yunnan, China"] = {}, ["Zhejiang, China"] = {}, } -- provinces and autonomous regions of China export.china_group = { default_container = "China", default_placetype = "province", default_divs = { "prefectures", "prefecture-level cities", "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_provinces_and_autonomous_regions, } export.china_prefecture_level_cities = { -- In China, a "prefecture-level city" is not a city in any real sense. It is rather a prefecture, which is an -- administrative unit smaller than a province but bigger than a county, which is administratively controlled by -- the chief city of the prefecture (which bears the same name as the prefecture), in a unified government. Prior -- to the mid-1980's, in fact, prefecture-level cities *were* prefectures, and a few of them (especially in the -- western portion of China) have not yet been converted. Generally a given province is entirely tiled by -- prefecture-level cities, another indication that they should be treated as prefectures and not cities per se. -- Yet another indication is that prefecture-level cities can contain counties and county-level cities (which, much -- like prefecture-level cities, are effectively counties surrounding a chief city of the county, again which bears -- the same name as the county-level city). -- -- For this reason, we treat prefecture-level cities as non-city political divisions, and separately enumerate the -- most populous so we can separately categorize districts and counties under them instead of lumping them at the -- province level. -- -- Note also that China separately distinguishes "urban area" from "metro area". Sometimes the two figures are -- identical but sometimes the metro area is larger (and very occasionally smaller, which I assume is an error). I'm -- guessing that the "urban area" is the contiguous urban area over a certain density while the metro area includes -- all urban areas above a certain density; when the latter is greater, it's because of satellite cities in the -- metro area separated by suburban/exurban or rural land. -- At first I chose all prefecture/province-level cities with a total prefecture/province-level population of at -- least 6,000,000 per the 2020 census with data taken from https://www.citypopulation.de/en/china/admin/ (a total -- of 67, including the four direct-administered municipalities), and also chose all prefecture/province-level -- cities whose "urban population" was at least 2,000,000 per the 2020 census with data taken from Wikipedia -- [[w:List of cities in China by population#Cities and towns by population]] (a total of 61 cities; if we cut off -- at 1.5 million we'd have 84 cities, and if we cut off at 1 million we'd have 105 cities). Merging them produces -- 87 cities. Note that this leaves off a few well-known cities (Guilin, Qiqihar, Kashgar, Lhasa, ...) but includes -- a lot of obscure cities. -- -- At a later date I added all cities from citypopulation.de whose "urban" population per the 2020 China census was -- >= 1 million, and then finally added all urban agglomerations from citypopulation.de whose 2025-01-01 estimate -- was >= 1 million. These are sorted below by the urban agglomeration value (which is generally of the "adm-urb" = -- "administrative area (urban population)" type) and sometimes groups nearby cities into a single agglomeration -- (most notably in the case of the Pearl River Delta, grouped under Guangzhou with an agglomeration population of -- 72,700,000 but including a large number of nearby large cities in the agglomeration (although for some reason not -- Hong Kong, maybe due to the administrative issues involved). In addition, citypopulation.de includes divisions -- under a prefecture-level city if they are city-like and have an agglomeration population of at least 1 million; -- this includes several county-level cities, one county and one district (Wanzhou, a "district" of Chongqing -- despite being 142 miles away). None of the county-level cities or counties have districts under them, only -- subdistricts, towns and townships. ["Guangzhou"] = {container = "Guangdong"}, -- 18.7 prefectural, 18.8 urban; sub-provincial city; 16.097 urban (72.700 adm-urb including Dongguan, Foshan, Huizhou, Jiangmen, Shenzhen, Zhongshan) per citypopulation.de ["Dongguan"] = {container = "Guangdong"}, -- 10.5 prefectural, 10.5 urban; 9.645 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Foshan"] = {container = "Guangdong"}, -- 9.5 prefectural, 9.5 urban; 9.043 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Huizhou"] = {container = "Guangdong"}, -- 6.0 prefectural, 2.5 urban; 2.900 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Jiangmen"] = {container = "Guangdong"}, -- 4.798 prefectural, 2.7 urban; 1.795 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Shenzhen"] = {container = "Guangdong"}, -- 17.5 prefectural, 14.7 urban; sub-provincial city; 17.445 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Zhongshan"] = {container = "Guangdong"}, -- 4.418 prefectural, 4.4 urban; 3.842 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Shanghai"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 24.9 prefectural, 29.9 urban; 21.910 urban (41.600 adm-urb including Changshu, Changzhou, Suzhou, Wuxi) per citypopulation.de ["Changshu"] = {container = "Jiangsu"}, -- 1.231 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration -- NOTE: Not to be confused with Cangzhou in Hebei ["Changzhou"] = {container = "Jiangsu"}, -- 5.278 prefectural, 3.6 urban; 3.187 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration -- NOTE: There is also a prefecture-level city Suzhou in Anhui with 5.3 million prefectural inhabitants ["Suzhou"] = {container = "Jiangsu"}, -- 12.8 prefectural, 4.3 urban; 5.893 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration ["Wuxi"] = {container = "Jiangsu"}, -- 7.5 prefectural, 3.3 urban; 3.957 per citypopulation.de; included by citypopulation.de in Shanghai agglomeration ["Beijing"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 21.9 prefectural, 21.9 urban; 18.961 urban (21.500 adm-urb) per citypopulation.de ["Chengdu"] = {container = "Sichuan"}, -- 20.9 prefectural, 16.9 urban; sub-provincial city; 13.568 urban (18.100 adm-urb) per citypopulation.de ["Xiamen"] = {container = "Fujian"}, -- 5.163 prefectural, 5.2 urban; sub-provincial city; 4.617 urban (15.400 adm-urb including Jinjiang, Quanzhou, Putian) per citypopulation.de ["Jinjiang"] = {container = "Fujian"}, -- 1.416 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Quanzhou"] = {container = "Fujian"}, -- 8.8 prefectural, 1.7 urban (6.7 metro); 1.469 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Putian"] = {container = "Fujian"}, -- 3.210 prefectural, 2.0 urban; 1.539 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Hangzhou"] = {container = "Zhejiang"}, -- 11.9 prefectural, 10.7 urban; sub-provincial city; 9.236 urban (14.600 adm-urb including Shaoxing) per citypopulation.de ["Shaoxing"] = {container = "Zhejiang"}, -- 5.270 prefectural, 2.5 urban; 2.333 urban per citypopulation.de; included by citypopulation.de in Hangzhou agglomeration ["Xi'an"] = {container = "Shaanxi"}, -- 12.1 prefectural, 11.9 urban; sub-provincial city; 9.393 urban (13.400 adm-urb including Xianyang) per citypopulation.de ["Xianyang"] = {container = "Shaanxi"}, -- 1.193 urban per citypopulation.de; included by citypopulation.de in Xi'an agglomeration ["Chongqing"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 32.1 prefectural, 16.9 urban; 9.581 urban (12.900 adm-urb) per citypopulation.de ["Wuhan"] = {container = "Hubei"}, -- 12.4 prefectural, 12.3 urban; sub-provincial city; 10.495 urban (12.600 adm-urb) per citypopulation.de ["Tianjin"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 13.9 prefectural, 13.9 urban; 11.052 urban (11.700 adm-urb) per citypopulation.de ["Changsha"] = {container = "Hunan"}, -- 10.0 prefectural, 6.0 urban; 5.630 urban (11.500 adm-urb including Xiangtan, Zhuzhou) per citypopulation.de -- Changsha County -- 1.024 urban per citypopulation.de ["Zhuzhou"] = {container = "Hunan"}, -- 1.510 urban per citypopulation.de; included by citypopulation.de in Changsha agglomeration ["Zhengzhou"] = {container = "Henan"}, -- 12.6 prefectural, 6.7 urban; 6.461 urban (10.300 adm-urb) per citypopulation.de ["Nanjing"] = {container = "Jiangsu"}, -- 9.3 prefectural, 9.3 urban; sub-provincial city; 7.520 urban (9.500 adm-urb including Ma'anshan) per citypopulation.de ["Shenyang"] = {container = "Liaoning"}, -- 9.1 prefectural, 7.9 urban; sub-provincial city; 7.026 urban (8.800 adm-urb including Fushun) per citypopulation.de ["Fushun"] = {container = "Liaoning"}, -- 1.229 urban per citypopulation.de; included by citypopulation.de in Shenyang agglomeration ["Hefei"] = {container = "Anhui"}, -- 9.4 prefectural, 4.2 urban; 5.056 urban (8.200 adm-urb) per citypopulation.de ["Shantou"] = {container = "Guangdong"}, -- 5.502 prefectural, 4.3 urban; 3.839 urban (8.050 adm-urb including Chaozhou, Jieyang, Puning) per citypopulation.de ["Chaozhou"] = {container = "Guangdong"}, -- 1.254 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration ["Jieyang"] = {container = "Guangdong"}, -- 1.243 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration ["Qingdao"] = {container = "Shandong"}, -- 10.1 prefectural, 7.1 urban; sub-provincial city; 6.165 urban (7.700 adm-urb) per citypopulation.de ["Ningbo"] = {container = "Zhejiang"}, -- 9.4 prefectural, 5.1 urban; sub-provincial city; 3.731 urban (7.600 adm-urb including Cixi, Yuyao) per citypopulation.de ["Cixi"] = {container = "Zhejiang"}, -- 1.458 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration ["Yuyao"] = {container = "Zhejiang"}, -- 1.014 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration -- Hong Kong 7.500 agglomeration per citypopulation.de 2025-01-01 estimate including Kowloon, Victoria ["Wenzhou"] = {container = "Zhejiang"}, -- 9.6 prefectural, 3.6 urban; 2.582 urban (7.000 adm-urb including Rui'an, Cangnan, Pingyang) per citypopulation.de -- Rui'an is a "county-level city" of the "prefecture-level city" of Wenzhou but in fact is 19 miles away from Wenzhou city proper (urban core to urban core). ["Rui'an"] = {placetype = "county-level city", container = {key = "Wenzhou", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 1.013 urban per citypopulation.de; included by citypopulation.de in Wenzhou agglomeration ["Kunming"] = {container = "Yunnan"}, -- 8.5 prefectural, 6.0 urban; 5.273 urban (6.800 adm-urb) per citypopulation.de -- includes Láiwú city ["Jinan"] = {container = "Shandong", wp = "%l, %c"}, -- 9.2 prefectural, 8.4 urban; sub-provincial city; 5.648 urban (6.750 adm-urb) per citypopulation.de -- includes Xīnjí city ["Shijiazhuang"] = {container = "Hebei"}, -- 11.2 prefectural, 4.1 urban; 5.090 urban (6.450 adm-urb) per citypopulation.de ["Taiyuan"] = {container = "Shanxi"}, -- 5.304 prefectural, 4.5 urban; 4.304 urban (6.150 adm-urb) per citypopulation.de ["Harbin"] = {container = "Heilongjiang"}, -- 10.0 prefectural, 7.0 urban; sub-provincial city; 5.243 urban (5.550 adm-urb) per citypopulation.de ["Nanning"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 8.7 prefectural, 3.8 urban; 4.583 urban (5.550 adm-urb) per citypopulation.de ["Dalian"] = {container = "Liaoning"}, -- 7.5 prefectural, 5.7 urban; sub-provincial city; 4.914 urban (5.400 adm-urb) per citypopulation.de ["Guiyang"] = {container = "Guizhou"}, -- 5.987 prefectural, 3.5 urban; 4.021 urban (5.300 adm-urb) per citypopulation.de ["Changchun"] = {container = "Jilin"}, -- 9.1 prefectural, 5.7 urban; sub-provincial city; 4.557 urban (5.200 adm-urb) per citypopulation.de ["Nanchang"] = {container = "Jiangxi"}, -- 6.3 prefectural, 3.6 (3.9?) urban, 5.3 metro; 3.519 urban (5.150 adm-urb) per citypopulation.de ["Ürümqi"] = {container = {key = "Xinjiang, China", placetype = "autonomous region"}}, -- 4.054 prefectural, 4.3 urban; 3.843 urban (5.000 adm-urb) per citypopulation.de ["Urumqi"] = {alias_of = "Ürümqi", display = true}, ["Fuzhou"] = {container = "Fujian"}, -- 8.3 prefectural, 4.1 urban; 3.723 urban (4.775 adm-urb) per citypopulation.de ["Linyi"] = {container = "Shandong"}, -- 11.0 prefectural, 2.3 urban; 2.744 urban (4.650 adm-urb) per citypopulation.de ["Zibo"] = {container = "Shandong"}, -- 4.704 prefectural, 2.6 urban; 2.750 urban (3.975 adm-urb) per citypopulation.de ["Luoyang"] = {container = "Henan"}, -- 7.1 prefectural, 2.4 urban; 2.231 urban (3.750 adm-urb) per citypopulation.de ["Lanzhou"] = {container = "Gansu"}, -- 4.359 prefectural, 3.1 urban; 3.013 urban (3.575 adm-urb) per citypopulation.de ["Nantong"] = {container = "Jiangsu"}, -- 7.7 prefectural, 2.3 urban; 2.988 urban (3.475 adm-urb) citypopulation.de ["Weifang"] = {container = "Shandong"}, -- 9.4 prefectural, 2.7 urban; 1.998 urban (3.325 adm-urb) per citypopulation.de ["Jiangyin"] = {container = "Jiangsu"}, -- 1.331 urban (3.200 adm-urb including Zhangjiagang) per citypopulation.de ["Zhangjiagang"] = {container = "Jiangsu"}, -- 1.056 urban per citypopulation.de; included in Jiangyin figures ["Xuzhou"] = {container = "Jiangsu"}, -- 9.1 prefectural, 2.6 urban; 2.846 urban (3.150 adm-urb) per citypopulation.de ["Handan"] = {container = "Hebei"}, -- 9.4 prefectural, 2.8 urban; 2.095 urban (2.925 adm-urb) per citypopulation.de ["Hohhot"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 3.446 prefectural, 2.7 urban; 2.373 urban (2.850 adm-urb) per citypopulation.de ["Haikou"] = {container = "Hainan"}, -- 2.873 prefectural, 2.3 urban; 2.349 urban (2.800 adm-urb) per citypopulation.de ["Tangshan"] = {container = "Hebei"}, -- 7.7 prefectural, 3.4 urban; 2.550 urban (2.750 adm-urb) per citypopulation.de ["Xinxiang"] = {container = "Henan"}, -- 6.3 prefectural, 1.2 urban, 2.7 metro; 1.271 urban (2.700 adm-urb) per citypopulation.de ["Yiwu"] = {container = "Zhejiang"}, -- 1.481 urban (2.700 adm-urb) per citypopulation.de ["Zhuhai"] = {container = "Guangdong"}, -- 2.439 prefectural, 2.4 urban; 2.207 urban (2.675 adm-urb) per citypopulation.de ["Taizhou, Zhejiang"] = {container = "Zhejiang"}, -- 6.6 prefectural, 1.6 urban; 1.486 urban (2.625 adm-urb) per citypopulation.de ["Taizhou"] = {alias_of = "Taizhou, Zhejiang"}, ["Yantai"] = {container = "Shandong"}, -- 7.1 prefectural, 2.5 urban; 2.312 urban (2.550 adm-urb) per citypopulation.de ["Yinchuan"] = {container = {key = "Ningxia, China", placetype = "autonomous region"}}, -- 1.663 urban (2.525 adm-urb) per citypopulation.de ["Liuzhou"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 4.157 prefectural, 2.2 urban; 2.205 urban (2.500 adm-urb) per citypopulation.de ["Anshan"] = {container = "Liaoning"}, -- 1.480 urban (2.350 adm-urb including Liáoyáng) per citypopulation.de ["Yangzhou"] = {container = "Jiangsu"}, -- 2.067 urban (2.300 adm-urb) per citypopulation.de ["Jiaxing"] = {container = "Zhejiang"}, -- 1.188 urban (2.275 adm-urb) per citypopulation.de ["Xining"] = {container = "Qinghai"}, -- 1.677 urban (2.250 adm-urb) per citypopulation.de -- includes Dìngzhōu city and Xióngān Xīnqū ["Baoding"] = {container = "Hebei"}, -- 11.5 prefectural, 2.0 urban; 1.940 urban (2.225 adm-urb) per citypopulation.de ["Baotou"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 2.709 prefectural, 2.2 urban; 2.104 urban (2.200 adm-urb) per citypopulation.de ["Ganzhou"] = {container = "Jiangxi"}, -- 9.0 prefectural, 1.6 urban; 1.778 urban (2.150 adm-urb) per citypopulation.de ["Pingdingshan"] = {container = "Henan"}, -- 1.046 urban (2.100 adm-urb) per citypopulation.de ["Zunyi"] = {container = "Guizhou"}, -- 6.6 prefectural, 2.4 urban/metro; 1.675 urban (2.025 adm-urb) per citypopulation.de ["Bengbu"] = {container = "Anhui"}, -- 1.078 urban (2.000 adm-urb) per citypopulation.de ["Datong"] = {container = "Shanxi"}, -- 3.105 prefectural, 2.0 urban; 1.810 urban (2.000 adm-urb) per citypopulation.de ["Anyang"] = {container = "Henan"}, -- 1.188 urban (1.960 adm-urb) per citypopulation.de ["Huai'an"] = {container = "Jiangsu"}, -- 4.556 prefectural, 2.6 urban; 1.805 urban (1.940 adm-urb) per citypopulation.de ["Zaozhuang"] = {container = "Shandong"}, -- 1.350 urban (1.900 adm-urb) per citypopulation.de ["Zhanjiang"] = {container = "Guangdong"}, -- 7.0 prefectural, 1.9 urban; 1.401 urban (1.890 adm-urb) per citypopulation.de ["Huainan"] = {container = "Anhui"}, -- 1.256 urban (1.880 adm-urb) per citypopulation.de ["Jining"] = {container = "Shandong"}, -- 8.4 prefectural, 1.5 urban; 1.700 urban (1.880 adm-urb) per citypopulation.de ["Daqing"] = {container = "Heilongjiang"}, -- 1.604 urban (1.860 adm-urb) per citypopulation.de ["Wuhu"] = {container = "Anhui"}, -- 1.598 urban (1.850 adm-urb) per citypopulation.de ["Guilin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 1.361 urban (1.830 adm-urb) per citypopulation.de ["Mianyang"] = {container = "Sichuan"}, -- 1.549 urban (1.800 adm-urb) per citypopulation.de ["Xiangyang"] = {container = "Hubei"}, -- 1.686 urban (1.800 adm-urb) per citypopulation.de ["Huzhou"] = {container = "Zhejiang"}, -- 1.084 urban (1.750 adm-urb) per citypopulation.de ["Puyang"] = {container = "Henan"}, -- 0.824 urban (1.750 adm-urb) per citypopulation.de ["Shangqiu"] = {container = "Henan"}, -- 7.8 prefectural, 1.9 urban (2.8 metro); 1.031 urban (1.750 adm-urb) per citypopulation.de ["Qinhuangdao"] = {container = "Hebei"}, -- 1.520 urban (1.740 adm-urb) per citypopulation.de ["Xingtai"] = {container = "Hebei"}, -- 7.1 prefectural, 971,000 urban; 1.5 urban (1.700 adm-urb) per citypopulation.de ["Nanyang"] = {container = "Henan", wp = "%l, %c"}, -- 9.7 prefectural, 2.1 urban/metro; 1.481 urban (1.680 adm-urb) per citypopulation.de ["Jiaozuo"] = {container = "Henan"}, -- 0.875 urban (1.640 adm-urb) per citypopulation.de ["Jilin City"] = {container = "Jilin"}, -- 1.509 urban (1.610 adm-urb) per citypopulation.de ["Jilin"] = {alias_of = "Jilin City"}, ["Jinhua"] = {container = "Zhejiang"}, -- 7.1 prefectural, 1.5 urban; 1.041 urban (1.590 adm-urb) per citypopulation.de ["Shangrao"] = {container = "Jiangxi"}, -- 6.5 prefectural, 2.1 urban, 1.3 metro [sic]; 1.342 urban (1.580 adm-urb) per citypopulation.de ["Heze"] = {container = "Shandong"}, -- 8.8 prefectural, 1.3 urban; 1.294 urban (1.570 adm-urb) per citypopulation.de ["Yulin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}, wp = "%l, %c"}, -- 0.878 urban (1.570 adm-urb) per citypopulation.de ["Tai'an"] = {container = "Shandong"}, -- 1.417 urban (1.560 adm-urb) per citypopulation.de ["Weihai"] = {container = "Shandong"}, -- 1.340 urban (1.510 adm-urb) per citypopulation.de -- Taizhou, Jiangsu would be here (1.490 adm-urb) but moved to china_prefecture_level_cities_2 to avoid clash ["Yancheng"] = {container = "Jiangsu"}, -- 6.7 prefectural, 1.6 urban; 1.353 urban (1.460 adm-urb) per citypopulation.de ["Zhangjiakou"] = {container = "Hebei"}, -- 1.339 urban (1.450 adm-urb) per citypopulation.de ["Maoming"] = {container = "Guangdong"}, -- 6.2 prefectural, 2.5 urban; 1.308 urban (1.440 adm-urb) per citypopulation.de ["Nanchong"] = {container = "Sichuan"}, -- 1.254 urban (1.440 adm-urb) per citypopulation.de ["Fuyang"] = {container = "Anhui", wp = "%l, %c"}, -- 8.2 prefectural, 2.1 urban; 1.191 urban (1.410 adm-urb) per citypopulation.de ["Xuchang"] = {container = "Henan"}, -- 0.850 urban (1.390 adm-urb) per citypopulation.de ["Yichang"] = {container = "Hubei"}, -- 1.284 urban (1.390 adm-urb) per citypopulation.de ["Dazhou"] = {container = "Sichuan"}, -- 1.136 urban (1.380 adm-urb) per citypopulation.de ["Kaifeng"] = {container = "Henan"}, -- 1.194 urban (1.340 adm-urb) per citypopulation.de ["Luzhou"] = {container = "Sichuan"}, -- 1.128 urban (1.340 adm-urb) per citypopulation.de ["Qingyuan"] = {container = "Guangdong"}, -- 1.198 urban (1.340 adm-urb) per citypopulation.de ["Huaibei"] = {container = "Anhui"}, -- 0.831 urban (1.330 adm-urb) per citypopulation.de ["Yibin"] = {container = "Sichuan"}, -- 1.101 urban (1.310 adm-urb) per citypopulation.de ["Lu'an"] = {container = "Anhui"}, -- 1.070 urban (1.300 adm-urb) per citypopulation.de ["Dezhou"] = {container = "Shandong"}, -- 0.843 urban (1.290 adm-urb) per citypopulation.de ["Rizhao"] = {container = "Shandong"}, -- 1.147 urban (1.270 adm-urb) per citypopulation.de ["Changzhi"] = {container = "Shanxi"}, -- 1.047 urban (1.250 adm-urb) per citypopulation.de ["Hengyang"] = {container = "Hunan"}, -- 6.6 prefectural, 1.5 urban; 1.185 urban (1.250 adm-urb) per citypopulation.de ["Jinzhou"] = {container = "Liaoning"}, -- 1.021 urban (1.240 adm-urb) per citypopulation.de ["Liaocheng"] = {container = "Shandong"}, -- 1.020 urban (1.240 adm-urb) per citypopulation.de ["Changde"] = {container = "Hunan"}, -- 1.101 urban (1.230 adm-urb) per citypopulation.de ["Suqian"] = {container = "Jiangsu"}, -- 1.082 urban (1.230 adm-urb) per citypopulation.de ["Xinyang"] = {container = "Henan"}, -- 6.2 prefectural, 1.4 urban/metro; 1.015 urban (1.230 adm-urb) per citypopulation.de ["Baoji"] = {container = "Shaanxi"}, -- 1.108 urban (1.220 adm-urb) per citypopulation.de ["Yueyang"] = {container = "Hunan"}, -- 1.125 urban (1.220 adm-urb) per citypopulation.de ["Zhenjiang"] = {container = "Jiangsu"}, -- 1.124 urban (1.210 adm-urb) per citypopulation.de -- Wanzhou is a "district" of the "direct-administered municipality" of Chongqing but in fact is 142 miles away from Chongqing city proper. ["Wanzhou"] = {placetype = "district", container = {key = "Chongqing", placetype = "direct-administered municipality"}, divs = {"subdistricts", "townships"}, wp = "%l, %c"}, -- 1.078 urban (1.190 adm-urb) per citypopulation.de ["Ulanhad"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 1.093 urban (1.180 adm-urb) per citypopulation.de ["Chifeng"] = {alias_of = "Ulanhad"}, ["Ulankhad"] = {alias_of = "Ulanhad", display = true}, ["Ezhou"] = {container = "Hubei"}, -- < 0.750 urban (1.180 adm-urb) per citypopulation.de ["Zhaoqing"] = {container = "Guangdong"}, -- 1.036 urban (1.160 adm-urb) per citypopulation.de ["Lianyungang"] = {container = "Jiangsu"}, -- 4.599 prefectural, 2.0 urban; 1.071 urban (1.150 adm-urb) per citypopulation.de ["Qujing"] = {container = "Yunnan"}, -- 0.976 urban (1.150 adm-urb) per citypopulation.de -- Shuyang is a "county" of the "prefecture-level city" of Suqian but in fact is 38 miles away from Suqian city proper (urban core to urban core). -- The county itself is 37 miles by 34 miles. ["Shuyang"] = {placetype = "county", container = {key = "Suqian", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l County"}, -- 0.986 urban (1.120 adm-urb) per citypopulation.de -- Yongkang is a "county-level city" of the "prefecture-level city" of Jinhua but in fact is 32 miles away from Jinhua city proper (urban core to urban core). ["Yongkang"] = {placetype = "county-level city", container = {key = "Jinhua", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l, Zhejiang"}, -- < 0.750 urban (1.110 adm-urb) per citypopulation.de ["Zhoukou"] = {container = "Henan"}, -- 9.0 prefectural, 721,000 urban (1.6 metro); < 0.750 urban (1.100 adm-urb) per citypopulation.de ["Beihai"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- < 1 urban (1.090 adm-urb) per citypopulation.de ["Jiujiang"] = {container = "Jiangxi"}, -- < 0.750 urban (1.080 adm-urb) per citypopulation.de ["Shaoyang"] = {container = "Hunan"}, -- 6.6 prefectural, 802,000 urban, 1.4 metro; < 1 urban (1.080 adm-urb) per citypopulation.de ["Chuzhou"] = {container = "Anhui"}, -- < 0.750 urban (1.070 adm-urb) per citypopulation.de ["Hengshui"] = {container = "Hebei"}, -- 0.885 urban (1.070 adm-urb) per citypopulation.de ["Shiyan"] = {container = "Hubei"}, -- 0.955 urban (1.070 adm-urb) per citypopulation.de ["Huludao"] = {container = "Liaoning"}, -- 0.764 urban (1.060 adm-urb) per citypopulation.de ["Dongying"] = {container = "Shandong"}, -- 0.961 urban (1.050 adm-urb) per citypopulation.de ["Guigang"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 0.921 urban (1.050 adm-urb) per citypopulation.de -- Liuyang is a "county-level city" of the "prefecture-level city" of Changsha but in fact is 47 miles away from Changsha city proper (urban core to urban core). ["Liuyang"] = {placetype = "county-level city", container = {key = "Changsha", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.886 urban (1.040 adm-urb) per citypopulation.de -- NOTE: Not to be confused with Changzhou in Jiangsu ["Cangzhou"] = {container = "Hebei"}, -- 7.3 prefectural, 621,000 urban; 0.759 urban (1.030 adm-urb) per citypopulation.de ["Liupanshui"] = {container = "Guizhou"}, -- < 0.750 urban (1.030 adm-urb) per citypopulation.de ["Panjin"] = {container = "Liaoning"}, -- 0.980 urban (1.030 adm-urb) per citypopulation.de ["Qiqihar"] = {container = "Heilongjiang"}, -- 1.030 urban (1.030 adm-urb) per citypopulation.de ["Linfen"] = {container = "Shanxi"}, -- < 0.750 urban (1.010 adm-urb) per citypopulation.de -- Tengzhou is a "county-level city" of the "prefecture-level city" of Zaozhuang but in fact is 30 miles away from Zaozhuang city proper (urban core to urban core). ["Tengzhou"] = {placetype = "county-level city", container = {key = "Zaozhuang", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.937 urban (1.010 adm-urb) per citypopulation.de -- 3 extra that got added in earlier incarnations and aren't found in the "major agglomerations of the world" page https://citypopulation.de/en/world/agglomerations/ reference date 2025-01-01 ["Kunshan"] = {container = "Jiangsu"}, -- 1.652 urban (2020 China census) per citypopulation.de ["Zhumadian"] = {container = "Henan"}, -- 7.0 prefectural, 722,000 urban per Wikipedia; 0.754 urban per citypopulation.de ["Bijie"] = {container = "Guizhou"}, -- 6.9 prefectural, ? urban, ? metro (not listed in Wikipedia); < 0.750 urban per citypopulation.de } export.china_prefecture_level_cities_group = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Taizhou, Zhejiang" or "Suzhou, Anhui". key_to_placename = false, placename_to_key = false, -- don't add ", China" to make the key default_container = "China", canonicalize_key_container = make_canonicalize_key_container(", China", "province"), -- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people -- don't understand how Chinese administrative divisions work. default_placetype = {"prefecture-level city", "city"}, default_divs = { -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities, -- and prefecture-level cities (as well as county-level cities) are considered non-cities. "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_prefecture_level_cities, } -- Needed to avoid problems with two cities called Taizhou and Suzhou. export.china_prefecture_level_cities_2 = { -- NOTE: There is also a larger and better-known prefecture-level city Taizhou in Zhejiang. ["Taizhou, Jiangsu"] = {container = "Jiangsu"}, -- 1.3 urban (1.490 adm-urb) per citypopulation.de 2020 census ["Taizhou"] = {alias_of = "Taizhou, Jiangsu"}, -- NOTE: There is also a larger and better-known prefecture-level city Suzhou in Jiangsu. ["Suzhou, Anhui"] = {container = "Anhui"}, -- 5.3 prefectural, 1.766 metro and "urban"; < 1 urban (1.010 adm-urb) per citypopulation.de 2020 census -- hopefully this will work because we also have Suzhou as a key by itself for the larger, more-well-known Suzhou in Jiangsu ["Suzhou"] = {alias_of = "Suzhou, Anhui"}, } export.china_prefecture_level_cities_group_2 = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Taizhou, Jiangsu". placename_to_key = false, -- don't add ", China" to make the key default_container = "China", canonicalize_key_container = make_canonicalize_key_container(", China", "province"), -- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people -- don't understand how Chinese administrative divisions work. default_placetype = {"prefecture-level city", "city"}, default_divs = { -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities, -- and prefecture-level cities (as well as county-level cities) are considered non-cities. "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_prefecture_level_cities_2, } export.finland_regions = { ["Lapland, Finland"] = {wp = "%l (%c)"}, ["North Ostrobothnia, Finland"] = {}, ["Northern Ostrobothnia, Finland"] = {alias_of = "North Ostrobothnia, Finland", display = true}, ["Kainuu, Finland"] = {}, ["North Karelia, Finland"] = {}, ["Northern Savonia, Finland"] = {}, ["North Savo, Finland"] = {alias_of = "Northern Savonia, Finland", display = true}, ["Southern Savonia, Finland"] = {}, ["South Savo, Finland"] = {alias_of = "Southern Savonia, Finland", display = true}, ["South Karelia, Finland"] = {}, ["Central Finland, Finland"] = {}, ["South Ostrobothnia, Finland"] = {}, ["Southern Ostrobothnia, Finland"] = {alias_of = "South Ostrobothnia, Finland", display = true}, ["Ostrobothnia, Finland"] = {wp = "%l (region)"}, ["Central Ostrobothnia, Finland"] = {}, ["Pirkanmaa, Finland"] = {}, ["Satakunta, Finland"] = {}, ["Päijänne Tavastia, Finland"] = {}, ["Päijät-Häme, Finland"] = {alias_of = "Päijänne Tavastia, Finland", display = true}, ["Tavastia Proper, Finland"] = {}, ["Kanta-Häme, Finland"] = {alias_of = "Tavastia Proper, Finland", display = true}, ["Kymenlaakso, Finland"] = {}, ["Uusimaa, Finland"] = {}, ["Southwest Finland, Finland"] = {}, ["Åland Islands, Finland"] = {the = true, wp = "Åland"}, ["Åland, Finland"] = {alias_of = "Åland Islands, Finland"}, -- differs in "the" } -- regions of Finland export.finland_group = { default_container = "Finland", default_placetype = "region", default_divs = "municipalities", data = export.finland_regions, } export.france_administrative_regions = { ["Auvergne-Rhône-Alpes, France"] = {}, ["Bourgogne-Franche-Comté, France"] = {}, ["Brittany, France"] = {wp = "%l (administrative region)"}, ["Centre-Val de Loire, France"] = {}, ["Corsica, France"] = {}, -- overseas departments are handled in `export.country_like_entities` -- ["French Guiana"] = {}, ["Grand Est, France"] = {}, -- ["Guadeloupe"] = {}, ["Hauts-de-France, France"] = {}, ["Île-de-France, France"] = {}, -- ["Martinique"] = {}, -- ["Mayotte"] = {}, ["Normandy, France"] = {wp = "%l (administrative region)"}, ["Nouvelle-Aquitaine, France"] = {}, ["Occitania, France"] = {wp = "%l (administrative region)"}, ["Occitanie, France"] = {alias_of = "Occitania, France", display = true}, ["Pays de la Loire, France"] = {}, ["Provence-Alpes-Côte d'Azur, France"] = {}, -- ["Réunion"] = {}, } -- administrative regions of France export.france_group = { default_container = "France", -- Canonically these are 'administrative regions' but also treat as 'region' ('administrative region' falls back -- to 'region'). default_placetype = "region", default_divs = { "communes", {type = "municipalities", cat_as = "communes"}, "departments", {type = "prefectures", cat_as = {"prefectures", "departmental capitals"}}, {type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}}, }, data = export.france_administrative_regions, } export.france_departments = { ["Ain, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 01 ["Aisne, France"] = {container = "Hauts-de-France"}, -- 02 ["Allier, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 03 ["Alpes-de-Haute-Provence, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 04 ["Hautes-Alpes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 05 ["Alpes-Maritimes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 06 ["Ardèche, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 07 ["Ardennes, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 08 ["Ariège, France"] = {container = "Occitania", wp = "%l (department)"}, -- 09 ["Aube, France"] = {container = "Grand Est"}, -- 10 ["Aude, France"] = {container = "Occitania"}, -- 11 ["Aveyron, France"] = {container = "Occitania"}, -- 12 ["Bouches-du-Rhône, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 13 ["Calvados, France"] = {container = "Normandy", wp = "%l (department)"}, -- 14 ["Cantal, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 15 ["Charente, France"] = {container = "Nouvelle-Aquitaine"}, -- 16 ["Charente-Maritime, France"] = {container = "Nouvelle-Aquitaine"}, -- 17 ["Cher, France"] = {container = "Centre-Val de Loire", wp = "%l (department)"}, -- 18 ["Corrèze, France"] = {container = "Nouvelle-Aquitaine"}, -- 19 ["Corse-du-Sud, France"] = {container = "Corsica"}, -- 2A ["Haute-Corse, France"] = {container = "Corsica"}, -- 2B ["Côte-d'Or, France"] = {container = "Bourgogne-Franche-Comté"}, -- 21 ["Côte d'Or, France"] = {alias_of = "Côte-d'Or, France", display = true}, ["Côtes-d'Armor, France"] = {container = "Brittany"}, -- 22 ["Côtes d'Armor, France"] = {alias_of = "Côtes-d'Armor, France", display = true}, ["Creuse, France"] = {container = "Nouvelle-Aquitaine"}, -- 23 ["Dordogne, France"] = {container = "Nouvelle-Aquitaine"}, -- 24 ["Doubs, France"] = {container = "Bourgogne-Franche-Comté"}, -- 25 ["Drôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 26 ["Eure, France"] = {container = "Normandy"}, -- 27 ["Eure-et-Loir, France"] = {container = "Centre-Val de Loire"}, -- 28 ["Finistère, France"] = {container = "Brittany"}, -- 29 ["Gard, France"] = {container = "Occitania"}, -- 30 ["Haute-Garonne, France"] = {container = "Occitania"}, -- 31 ["Gers, France"] = {container = "Occitania"}, -- 32 ["Gironde, France"] = {container = "Nouvelle-Aquitaine"}, -- 33 ["Hérault, France"] = {container = "Occitania"}, -- 34 ["Ille-et-Vilaine, France"] = {container = "Brittany"}, -- 35 ["Indre, France"] = {container = "Centre-Val de Loire"}, -- 36 ["Indre-et-Loire, France"] = {container = "Centre-Val de Loire"}, -- 37 ["Isère, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 38 ["Jura, France"] = {container = "Bourgogne-Franche-Comté", wp = "%l (department)"}, -- 39 ["Landes, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 40 ["Loir-et-Cher, France"] = {container = "Centre-Val de Loire"}, -- 41 ["Loire, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 42 ["Haute-Loire, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 43 ["Loire-Atlantique, France"] = {container = "Pays de la Loire"}, -- 44 ["Loiret, France"] = {container = "Centre-Val de Loire"}, -- 45 ["Lot, France"] = {container = "Occitania", wp = "%l (department)"}, -- 46 ["Lot-et-Garonne, France"] = {container = "Nouvelle-Aquitaine"}, -- 47 ["Lozère, France"] = {container = "Occitania"}, -- 48 ["Maine-et-Loire, France"] = {container = "Pays de la Loire"}, -- 49 ["Manche, France"] = {container = "Normandy"}, -- 50 ["Marne, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 51 ["Haute-Marne, France"] = {container = "Grand Est"}, -- 52 ["Mayenne, France"] = {container = "Pays de la Loire"}, -- 53 ["Meurthe-et-Moselle, France"] = {container = "Grand Est"}, -- 54 ["Meuse, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 55 ["Morbihan, France"] = {container = "Brittany"}, -- 56 ["Moselle, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 57 ["Nièvre, France"] = {container = "Bourgogne-Franche-Comté"}, -- 58 ["Nord, France"] = {container = "Hauts-de-France", wp = "%l (French department)"}, -- 59 ["Oise, France"] = {container = "Hauts-de-France"}, -- 60 ["Orne, France"] = {container = "Normandy"}, -- 61 ["Pas-de-Calais, France"] = {container = "Hauts-de-France"}, -- 62 ["Puy-de-Dôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 63 ["Pyrénées-Atlantiques, France"] = {container = "Nouvelle-Aquitaine"}, -- 64 ["Hautes-Pyrénées, France"] = {container = "Occitania"}, -- 65 ["Pyrénées-Orientales, France"] = {container = "Occitania"}, -- 66 ["Bas-Rhin, France"] = {container = "Grand Est"}, -- 67 ["Haut-Rhin, France"] = {container = "Grand Est"}, -- 68 ["Rhône, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 69D ["Metropolis of Lyon, France"] = {container = "Auvergne-Rhône-Alpes", the = true}, -- 69M ["Lyon Metropolis, France"] = {alias_of = "Metropolis of Lyon, France"}, ["Lyon, France"] = {alias_of = "Metropolis of Lyon, France"}, ["Haute-Saône, France"] = {container = "Bourgogne-Franche-Comté"}, -- 70 ["Saône-et-Loire, France"] = {container = "Bourgogne-Franche-Comté"}, -- 71 ["Sarthe, France"] = {container = "Pays de la Loire"}, -- 72 ["Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 73 ["Haute-Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 74 ["Paris, France"] = {container = "Île-de-France"}, -- 75 ["Seine-Maritime, France"] = {container = "Normandy"}, -- 76 ["Seine-et-Marne, France"] = {container = "Île-de-France"}, -- 77 ["Yvelines, France"] = {container = "Île-de-France"}, -- 78 ["Deux-Sèvres, France"] = {container = "Nouvelle-Aquitaine"}, -- 79 ["Somme, France"] = {container = "Hauts-de-France", wp = "%l (department)"}, -- 80 ["Tarn, France"] = {container = "Occitania", wp = "%l (department)"}, -- 81 ["Tarn-et-Garonne, France"] = {container = "Occitania"}, -- 82 ["Var, France"] = {container = "Provence-Alpes-Côte d'Azur", wp = "%l (department)"}, -- 83 ["Vaucluse, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 84 ["Vendée, France"] = {container = "Pays de la Loire"}, -- 85 ["Vienne, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 86 ["Haute-Vienne, France"] = {container = "Nouvelle-Aquitaine"}, -- 87 ["Vosges, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 88 ["Yonne, France"] = {container = "Bourgogne-Franche-Comté"}, -- 89 ["Territoire de Belfort, France"] = {container = "Bourgogne-Franche-Comté"}, -- 90 ["Essonne, France"] = {container = "Île-de-France"}, -- 91 ["Hauts-de-Seine, France"] = {container = "Île-de-France"}, -- 92 ["Seine-Saint-Denis, France"] = {container = "Île-de-France"}, -- 93 ["Val-de-Marne, France"] = {container = "Île-de-France"}, -- 94 ["Val-d'Oise, France"] = {container = "Île-de-France"}, -- 95 --["Guadeloupe"] = {container = "Guadeloupe"}, -- 971 --["Martinique"] = {container = "Martinique"}, -- 972 --["Guyane"] = {container = "French Guiana", wp = "French Guiana"}, -- 973 --["La Réunion"] = {container = "Réunion", wp = "Réunion"}, -- 974 --["Mayotte"] = {container = "Mayotte"}, -- 976 } export.france_departments_group = { placename_to_key = make_placename_to_key(", France"), canonicalize_key_container = make_canonicalize_key_container(", France", "region"), default_placetype = "department", default_divs = { "communes", {type = "municipalities", cat_as = "communes"}, }, data = export.france_departments, } export.germany_states = { ["Baden-Württemberg, Germany"] = {}, ["Bavaria, Germany"] = {}, -- Berlin, Bremen and Hamburg are effectively city-states and don't have districts ([[Kreise]]), so override -- the default_divs setting. Better not to include them at all since they're included as cities down below. -- ["Berlin"] = {divs = {}}, ["Brandenburg, Germany"] = {}, -- ["Bremen"] = {divs = {}}, -- ["Hamburg"] = {divs = {}}, ["Hesse, Germany"] = {}, ["Lower Saxony, Germany"] = {}, ["Mecklenburg-Vorpommern, Germany"] = {}, ["Mecklenburg-Western Pomerania, Germany"] = {alias_of = "Mecklenburg-Vorpommern, Germany", display = true}, ["North Rhine-Westphalia, Germany"] = {}, ["Rhineland-Palatinate, Germany"] = {}, ["Saarland, Germany"] = {}, ["Saxony, Germany"] = {}, ["Saxony-Anhalt, Germany"] = {}, ["Schleswig-Holstein, Germany"] = {}, ["Thuringia, Germany"] = {}, } -- states of Germany export.germany_group = { default_container = "Germany", default_placetype = "state", default_divs = {"districts", "municipalities"}, data = export.germany_states, } export.greece_regions = { ["Attica, Greece"] = {wp = "%l (region)"}, ["Central Greece, Greece"] = {wp = "%l (administrative region)"}, ["Central Macedonia, Greece"] = {}, ["Crete, Greece"] = {}, ["Eastern Macedonia and Thrace, Greece"] = {}, ["Epirus, Greece"] = {wp = "%l (region)"}, ["Ionian Islands, Greece"] = {the = true, wp = "%l (region)"}, ["North Aegean, Greece"] = {the = true}, -- I would expect 'the Peloponnese' but Wikipedia mostly has categories like [[w:Category:Geography of Peloponnese (region)]] -- and [[w:Category:Buildings and structures in Peloponnese (region)]]; only [[w:Category:People from the Peloponnese (region)]] -- has "the" in it. ["Peloponnese, Greece"] = {wp = "%l (region)"}, ["South Aegean, Greece"] = {the = true}, ["Thessaly, Greece"] = {}, ["Western Greece, Greece"] = {}, ["Western Macedonia, Greece"] = {}, ["Mount Athos, Greece"] = {placetype = {"autonomous region", "region"}, wp = "Monastic community of Mount Athos"}, } -- regions of Greece export.greece_group = { default_container = "Greece", default_placetype = "region", data = export.greece_regions, } local india_polity_with_divisions = {"divisions", "districts"} local india_polity_without_divisions = {"districts"} -- States and union territories of India. Only some of them are divided into divisions. export.india_states_and_union_territories = { ["Andaman and Nicobar Islands, India"] = {the = true, placetype = "union territory", divs = india_polity_without_divisions}, ["Andhra Pradesh, India"] = {divs = india_polity_without_divisions}, ["Arunachal Pradesh, India"] = {divs = india_polity_with_divisions}, ["Assam, India"] = {divs = india_polity_with_divisions}, ["Bihar, India"] = {divs = india_polity_with_divisions}, ["Chandigarh, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Chhattisgarh, India"] = {divs = india_polity_with_divisions}, ["Dadra and Nagar Haveli and Daman and Diu, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Delhi, India"] = {placetype = "union territory", divs = india_polity_with_divisions}, ["Goa, India"] = {divs = india_polity_without_divisions}, ["Gujarat, India"] = {divs = india_polity_without_divisions}, ["Haryana, India"] = {divs = india_polity_with_divisions}, ["Himachal Pradesh, India"] = {divs = india_polity_with_divisions}, ["Jammu and Kashmir, India"] = {placetype = "union territory", divs = india_polity_with_divisions, wp = "%l (union territory)"}, ["Jharkhand, India"] = {divs = india_polity_with_divisions}, ["Karnataka, India"] = {divs = india_polity_with_divisions}, ["Kerala, India"] = {divs = india_polity_without_divisions}, ["Ladakh, India"] = {placetype = "union territory", divs = india_polity_with_divisions}, ["Lakshadweep, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Madhya Pradesh, India"] = {divs = india_polity_with_divisions}, ["Maharashtra, India"] = {divs = india_polity_with_divisions}, ["Manipur, India"] = {divs = india_polity_without_divisions}, ["Meghalaya, India"] = {divs = india_polity_with_divisions}, ["Mizoram, India"] = {divs = india_polity_without_divisions}, ["Nagaland, India"] = {divs = india_polity_with_divisions}, ["Odisha, India"] = {divs = india_polity_with_divisions}, ["Puducherry, India"] = {placetype = "union territory", divs = india_polity_without_divisions, wp = "%l (union territory)"}, ["Pondicherry, India"] = {alias_of = "Puducherry, India", display = true}, ["Punjab, India"] = {divs = india_polity_with_divisions, wp = "%l, %c"}, ["Rajasthan, India"] = {divs = india_polity_with_divisions}, ["Sikkim, India"] = {divs = india_polity_without_divisions}, ["Tamil Nadu, India"] = {divs = india_polity_without_divisions}, ["Telangana, India"] = {divs = india_polity_without_divisions}, ["Tripura, India"] = {divs = india_polity_without_divisions}, ["Uttar Pradesh, India"] = {divs = india_polity_with_divisions}, ["Uttarakhand, India"] = {divs = india_polity_with_divisions}, ["West Bengal, India"] = {divs = india_polity_with_divisions}, } -- states and union territories of India export.india_group = { default_container = "India", default_placetype = "state", data = export.india_states_and_union_territories, } export.indonesia_provinces = { ["Aceh, Indonesia"] = {}, ["Bali, Indonesia"] = {}, ["Bangka Belitung Islands, Indonesia"] = {the = true}, ["Banten, Indonesia"] = {}, ["Bengkulu, Indonesia"] = {}, ["Central Java, Indonesia"] = {}, ["Central Kalimantan, Indonesia"] = {}, ["Central Papua, Indonesia"] = {}, ["Central Sulawesi, Indonesia"] = {}, ["East Java, Indonesia"] = {}, ["East Kalimantan, Indonesia"] = {}, ["East Nusa Tenggara, Indonesia"] = {}, ["Gorontalo, Indonesia"] = {}, ["Highland Papua, Indonesia"] = {wp = "%l"}, ["Special Capital Region of Jakarta, Indonesia"] = {the = true, wp = "Jakarta"}, ["Jakarta, Indonesia"] = {alias_of = "Special Capital Region of Jakarta, Indonesia"}, ["Jambi, Indonesia"] = {}, ["Lampung, Indonesia"] = {}, ["Maluku, Indonesia"] = {}, ["North Kalimantan, Indonesia"] = {}, ["North Maluku, Indonesia"] = {}, ["North Sulawesi, Indonesia"] = {}, ["North Papua, Indonesia"] = {}, ["North Sumatra, Indonesia"] = {}, ["Papua, Indonesia"] = {wp = "%l (province)"}, ["Riau, Indonesia"] = {}, ["Riau Islands, Indonesia"] = {the = true}, ["Southeast Sulawesi, Indonesia"] = {}, ["South Kalimantan, Indonesia"] = {}, ["South Papua, Indonesia"] = {}, ["South Sulawesi, Indonesia"] = {}, ["South Sumatra, Indonesia"] = {}, ["Southwest Papua, Indonesia"] = {}, ["West Java, Indonesia"] = {}, ["West Kalimantan, Indonesia"] = {}, ["West Nusa Tenggara, Indonesia"] = {}, ["West Papua, Indonesia"] = {wp = "%l (province)"}, ["West Sulawesi, Indonesia"] = {}, ["West Sumatra, Indonesia"] = {}, ["Special Region of Yogyakarta, Indonesia"] = {the = true}, ["Yogyakarta, Indonesia"] = {alias_of = "Special Region of Yogyakarta, Indonesia"}, } -- provinces of Indonesia export.indonesia_group = { default_container = "Indonesia", default_placetype = "province", -- per https://www.quora.com/Does-Indonesia-use-British-or-American-English, Indonesia tends to use American -- spellings. data = export.indonesia_provinces, } export.iran_provinces = { ["Alborz Province, Iran"] = {}, -- abbreviation AL, capital [[w:Karaj]] ["Ardabil Province, Iran"] = {}, -- abbreviation AR, capital [[w:Ardabil]] ["Bushehr Province, Iran"] = {}, -- abbreviation BU, capital [[w:Bushehr]] ["Chaharmahal and Bakhtiari Province, Iran"] = {}, -- abbreviation CB, capital [[w:Shahr-e Kord]] ["East Azerbaijan Province, Iran"] = {}, -- abbreviation EA, capital [[w:Tabriz]] ["Fars Province, Iran"] = {}, -- abbreviation FA, capital [[w:Shiraz]] ["Pars Province, Iran"] = {alias_of = "Fars Province, Iran", display = true}, ["Gilan Province, Iran"] = {}, -- abbreviation GN, capital [[w:Rasht]] ["Golestan Province, Iran"] = {}, -- abbreviation GO, capital [[w:Gorgan]] ["Hamadan Province, Iran"] = {}, -- abbreviation HA, capital [[w:Hamadan]] ["Hormozgan Province, Iran"] = {}, -- abbreviation HO, capital [[w:Bandar Abbas]] ["Ilam Province, Iran"] = {}, -- abbreviation IL, capital [[w:Ilam, Iran|Ilam]] ["Isfahan Province, Iran"] = {}, -- abbreviation IS, capital [[w:Isfahan]] ["Kerman Province, Iran"] = {}, -- abbreviation KN, capital [[w:Kerman]] ["Kermanshah Province, Iran"] = {}, -- abbreviation KE, capital [[w:Kermanshah]] ["Khuzestan Province, Iran"] = {}, -- abbreviation KH, capital [[w:Ahvaz]] ["Kohgiluyeh and Boyer-Ahmad Province, Iran"] = {}, -- abbreviation KB, capital [[w:Yasuj]] ["Kurdistan Province, Iran"] = {}, -- abbreviation KU, capital [[w:Sanandaj]] ["Lorestan Province, Iran"] = {}, -- abbreviation LO, capital [[w:Khorramabad]] ["Markazi Province, Iran"] = {}, -- abbreviation MA, capital [[w:Arak, Iran|Arak]] ["Mazandaran Province, Iran"] = {}, -- abbreviation MN, capital [[w:Sari, Iran|Sari]] ["North Khorasan Province, Iran"] = {}, -- abbreviation NK, capital [[w:Bojnord]] ["Qazvin Province, Iran"] = {}, -- abbreviation QA, capital [[w:Qazvin]] ["Qom Province, Iran"] = {}, -- abbreviation QM, capital [[w:Qom]] ["Razavi Khorasan Province, Iran"] = {}, -- abbreviation RK, capital [[w:Mashhad]] ["Semnan Province, Iran"] = {}, -- abbreviation SE, capital [[w:Semnan, Iran|Semnan]] ["Sistan and Baluchestan Province, Iran"] = {}, -- abbreviation SB, capital [[w:Zahedan]] ["South Khorasan Province, Iran"] = {}, -- abbreviation SK, capital [[w:Birjand]] ["Tehran Province, Iran"] = {}, -- abbreviation TE, capital [[w:Tehran]] ["West Azerbaijan Province, Iran"] = {}, -- abbreviation WA, capital [[w:Urmia]] ["Yazd Province, Iran"] = {}, -- abbreviation YA, capital [[w:Yazd]] ["Zanjan Province, Iran"] = {}, -- abbreviation ZA, capital [[w:Zanjan, Iran|Zanjan]] } -- provinces of Iran export.iran_group = { key_to_placename = make_key_to_placename(", Iran", " Province$"), placename_to_key = make_placename_to_key(", Iran", " Province"), default_container = "Iran", default_placetype = "province", -- There aren't nearly enough counties of Iran currently entered in any language to allow for categorizing them -- per-province. (As of 2025-05-09, there are only 6 counties in each of [[Category:en:Counties of Iran]], -- [[Category:fa:Counties of Iran]] and [[Category:ar:Counties of Iran]].) -- default_divs = "counties", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.iran_provinces, } export.ireland_counties = { ["County Carlow, Ireland"] = {}, ["County Cavan, Ireland"] = {}, ["County Clare, Ireland"] = {}, ["County Cork, Ireland"] = {}, ["County Donegal, Ireland"] = {}, ["County Dublin, Ireland"] = {}, ["County Galway, Ireland"] = {}, ["County Kerry, Ireland"] = {}, ["County Kildare, Ireland"] = {}, ["County Kilkenny, Ireland"] = {}, ["County Laois, Ireland"] = {}, ["County Leitrim, Ireland"] = {}, ["County Limerick, Ireland"] = {}, ["County Longford, Ireland"] = {}, ["County Louth, Ireland"] = {}, ["County Mayo, Ireland"] = {}, ["County Meath, Ireland"] = {}, ["County Monaghan, Ireland"] = {}, ["County Offaly, Ireland"] = {}, ["County Roscommon, Ireland"] = {}, ["County Sligo, Ireland"] = {}, ["County Tipperary, Ireland"] = {}, ["County Waterford, Ireland"] = {}, ["County Westmeath, Ireland"] = {}, ["County Wexford, Ireland"] = {}, ["County Wicklow, Ireland"] = {}, } local function make_irish_type_key_to_placename(container_pattern) return function(key) key = key:gsub(container_pattern, "") local elliptical_key = key:gsub("^County ", "") return key, elliptical_key end end local function make_irish_type_placename_to_key(container_suffix) return function(placename) if not placename:find("^County ") and not placename:find("^City ") then placename = "County " .. placename end return placename .. container_suffix end end -- counties of Ireland export.ireland_group = { key_to_placename = make_irish_type_key_to_placename(", Ireland$"), placename_to_key = make_irish_type_placename_to_key(", Ireland"), default_container = "Ireland", default_placetype = "county", data = export.ireland_counties, } export.italy_administrative_regions = { ["Abruzzo, Italy"] = {}, ["Aosta Valley, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Apulia, Italy"] = {}, ["Basilicata, Italy"] = {}, ["Calabria, Italy"] = {}, ["Campania, Italy"] = {}, ["Emilia-Romagna, Italy"] = {}, ["Friuli-Venezia Giulia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Lazio, Italy"] = {}, ["Liguria, Italy"] = {}, ["Lombardy, Italy"] = {}, ["Marche, Italy"] = {}, ["Molise, Italy"] = {}, ["Piedmont, Italy"] = {}, ["Sardinia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Sicily, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Trentino-Alto Adige, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Tuscany, Italy"] = {}, ["Umbria, Italy"] = {}, ["Veneto, Italy"] = {}, } -- administrative regions of Italy export.italy_group = { default_container = "Italy", default_placetype = "region", data = export.italy_administrative_regions, } -- table of Japanese prefectures; interpolated into the main 'places' table, but also needed separately export.japan_prefectures = { ["Aichi Prefecture, Japan"] = {}, ["Akita Prefecture, Japan"] = {}, ["Aomori Prefecture, Japan"] = {}, ["Chiba Prefecture, Japan"] = {}, ["Ehime Prefecture, Japan"] = {}, ["Fukui Prefecture, Japan"] = {}, ["Fukuoka Prefecture, Japan"] = {}, ["Fukushima Prefecture, Japan"] = {}, ["Gifu Prefecture, Japan"] = {}, ["Gunma Prefecture, Japan"] = {}, ["Hiroshima Prefecture, Japan"] = {}, ["Hokkaido Prefecture, Japan"] = {divs = "subprefectures", wp = "Hokkaido"}, ["Hyōgo Prefecture, Japan"] = {}, ["Hyogo Prefecture, Japan"] = {alias_of = "Hyōgo Prefecture, Japan", display = true}, ["Ibaraki Prefecture, Japan"] = {}, ["Ishikawa Prefecture, Japan"] = {}, ["Iwate Prefecture, Japan"] = {}, ["Kagawa Prefecture, Japan"] = {}, ["Kagoshima Prefecture, Japan"] = {}, ["Kanagawa Prefecture, Japan"] = {}, ["Kōchi Prefecture, Japan"] = {}, ["Kochi Prefecture, Japan"] = {alias_of = "Kōchi Prefecture, Japan", display = true}, ["Kumamoto Prefecture, Japan"] = {}, ["Kyoto Prefecture, Japan"] = {}, ["Mie Prefecture, Japan"] = {}, ["Miyagi Prefecture, Japan"] = {}, ["Miyazaki Prefecture, Japan"] = {}, ["Nagano Prefecture, Japan"] = {}, ["Nagasaki Prefecture, Japan"] = {}, ["Nara Prefecture, Japan"] = {}, ["Niigata Prefecture, Japan"] = {}, ["Ōita Prefecture, Japan"] = {}, ["Oita Prefecture, Japan"] = {alias_of = "Ōita Prefecture, Japan", display = true}, ["Okayama Prefecture, Japan"] = {}, ["Okinawa Prefecture, Japan"] = {}, ["Osaka Prefecture, Japan"] = {}, ["Saga Prefecture, Japan"] = {}, ["Saitama Prefecture, Japan"] = {}, ["Shiga Prefecture, Japan"] = {}, ["Shimane Prefecture, Japan"] = {}, ["Shizuoka Prefecture, Japan"] = {}, ["Tochigi Prefecture, Japan"] = {}, ["Tokushima Prefecture, Japan"] = {}, ["Tottori Prefecture, Japan"] = {}, ["Toyama Prefecture, Japan"] = {}, ["Wakayama Prefecture, Japan"] = {}, ["Yamagata Prefecture, Japan"] = {}, ["Yamaguchi Prefecture, Japan"] = {}, ["Yamanashi Prefecture, Japan"] = {}, } -- prefectures of Japan export.japan_group = { key_to_placename = make_key_to_placename(", Japan$", " Prefecture$"), placename_to_key = make_placename_to_key(", Japan", " Prefecture"), default_container = "Japan", default_placetype = "prefecture", data = export.japan_prefectures, } export.laos_provinces = { ["Attapeu Province, Laos"] = {}, ["Bokeo Province, Laos"] = {}, ["Bolikhamxai Province, Laos"] = {}, ["Champasak Province, Laos"] = {}, ["Houaphanh Province, Laos"] = {}, ["Khammouane Province, Laos"] = {}, ["Luang Namtha Province, Laos"] = {}, ["Luang Prabang Province, Laos"] = {}, ["Oudomxay Province, Laos"] = {}, ["Phongsaly Province, Laos"] = {}, ["Salavan Province, Laos"] = {}, ["Savannakhet Province, Laos"] = {}, ["Vientiane Province, Laos"] = {}, ["Vientiane Prefecture, Laos"] = {placetype = "prefecture", wp = "%l"}, ["Sainyabuli Province, Laos"] = {}, ["Sekong Province, Laos"] = {}, ["Xaisomboun Province, Laos"] = {}, ["Xiangkhouang Province, Laos"] = {}, } local function laos_placename_to_key(placename) if placename == "Vientiane Prefecture" then return placename .. ", Laos" end if placename:find(" Province$") then return placename .. ", Laos" end return placename .. " Province, Laos" end -- provinces of Laos export.laos_group = { key_to_placename = make_key_to_placename(", Laos$", {" Province$", " Prefecture$"}), placename_to_key = laos_placename_to_key, default_container = "Laos", default_placetype = "province", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.laos_provinces, } export.lebanon_governorates = { ["Akkar Governorate, Lebanon"] = {}, ["Baalbek-Hermel Governorate, Lebanon"] = {}, ["Beirut Governorate, Lebanon"] = {}, ["Beqaa Governorate, Lebanon"] = {}, ["Keserwan-Jbeil Governorate, Lebanon"] = {}, ["Mount Lebanon Governorate, Lebanon"] = {}, ["Nabatieh Governorate, Lebanon"] = {}, -- These two are generic enough that we don't want to automatically augment a use of `gov/North Governorate` or -- `gov/South Governorate` with `c/Lebanon`. ["North Governorate, Lebanon"] = {no_auto_augment_container = true}, ["South Governorate, Lebanon"] = {no_auto_augment_container = true}, } -- governorates of Lebanon export.lebanon_group = { key_to_placename = make_key_to_placename(", Lebanon$", " Governorate$"), placename_to_key = make_placename_to_key(", Lebanon", " Governorate"), default_container = "Lebanon", default_placetype = "governorate", data = export.lebanon_governorates, } export.malaysia_states = { ["Johor, Malaysia"] = {}, ["Kedah, Malaysia"] = {}, ["Kelantan, Malaysia"] = {}, ["Malacca, Malaysia"] = {}, ["Negeri Sembilan, Malaysia"] = {}, ["Pahang, Malaysia"] = {}, ["Penang, Malaysia"] = {}, ["Perak, Malaysia"] = {}, ["Perlis, Malaysia"] = {}, ["Sabah, Malaysia"] = {}, ["Sarawak, Malaysia"] = {}, ["Selangor, Malaysia"] = {}, ["Terengganu, Malaysia"] = {}, } -- states of Malaysia export.malaysia_group = { default_container = "Malaysia", default_placetype = "state", default_wp = "%l, %c", data = export.malaysia_states, } export.malta_regions = { -- Some of the regions are generic enough that we don't want to automatically augment a use of e.g. -- `r/Northern Region` with `c/Malta`. In particular; -- * "Eastern Region" also occurs at least in Ghana, Uganda, Iceland, Nigeria, Venezuela, North Macedonia and -- El Salvador; -- * "Northern Region" also occurs at least in Ghana, Uganda, Malawi, Nigeria, Canada and South Africa; -- * "Western Region" also occurs at least in Abu Dhabi, Bahrain, South Africa, Ghana, Iceland, Nepal, Nigeria, -- Serbia and Uganda; -- * "Southern Region" also occurs at least in Nigeria, Eritrea, Iceland, Ireland, Malawi and Serbia. ["Eastern Region, Malta"] = {no_auto_augment_container = true}, ["Gozo Region, Malta"] = {wp = "%l"}, ["Northern Region, Malta"] = {no_auto_augment_container = true}, ["Port Region, Malta"] = {}, ["Southern Region, Malta"] = {no_auto_augment_container = true}, ["Western Region, Malta"] = {no_auto_augment_container = true}, } -- regions of Malta export.malta_group = { key_to_placename = make_key_to_placename(", Malta$", " Region"), placename_to_key = make_placename_to_key(", Malta", " Region"), default_container = "Malta", default_placetype = "region", default_wp = "%l, %c", default_the = true, data = export.malta_regions, } export.mexico_states = { ["Aguascalientes, Mexico"] = {}, ["Baja California, Mexico"] = {}, -- not display-canonicalizing because the "Norte" could be for emphasis ["Baja California Norte, Mexico"] = {alias_of = "Baja California, Mexico"}, ["Baja California Sur, Mexico"] = {}, ["Campeche, Mexico"] = {}, ["Chiapas, Mexico"] = {}, ["Chihuahua, Mexico"] = {wp = "%l (state)"}, ["Coahuila, Mexico"] = {}, ["Colima, Mexico"] = {}, ["Durango, Mexico"] = {}, ["Guanajuato, Mexico"] = {}, ["Guerrero, Mexico"] = {}, ["Hidalgo, Mexico"] = {wp = "%l (state)"}, ["Jalisco, Mexico"] = {}, ["State of Mexico, Mexico"] = {the = true}, ["Mexico, Mexico"] = {alias_of = "State of Mexico, Mexico"}, -- differs in "the" -- ["Mexico City, Mexico"] = {}, doesn't belong here because it's a city ["Michoacán, Mexico"] = {}, ["Michoacan, Mexico"] = {alias_of = "Michoacán, Mexico", display = true}, ["Morelos, Mexico"] = {}, ["Nayarit, Mexico"] = {}, ["Nuevo León, Mexico"] = {}, ["Nuevo Leon, Mexico"] = {alias_of = "Nuevo León, Mexico", display = true}, ["Oaxaca, Mexico"] = {}, ["Puebla, Mexico"] = {}, ["Querétaro, Mexico"] = {}, ["Queretaro, Mexico"] = {alias_of = "Querétaro, Mexico", display = true}, ["Quintana Roo, Mexico"] = {}, ["San Luis Potosí, Mexico"] = {}, ["San Luis Potosi, Mexico"] = {alias_of = "San Luis Potosí, Mexico", display = true}, ["Sinaloa, Mexico"] = {}, ["Sonora, Mexico"] = {}, ["Tabasco, Mexico"] = {}, ["Tamaulipas, Mexico"] = {}, ["Tlaxcala, Mexico"] = {}, ["Veracruz, Mexico"] = {}, ["Yucatán, Mexico"] = {}, ["Yucatan, Mexico"] = {alias_of = "Yucatán, Mexico", display = true}, ["Zacatecas, Mexico"] = {}, } -- Mexican states export.mexico_group = { default_container = "Mexico", default_placetype = "state", data = export.mexico_states, } export.moldova_districts_and_autonomous_territorial_units = { ["Anenii Noi District, Moldova"] = {}, -- capital [[Anenii Noi]] ["Basarabeasca District, Moldova"] = {}, -- capital [[Basarabeasca]] ["Briceni District, Moldova"] = {}, -- capital [[Briceni]] ["Cahul District, Moldova"] = {}, -- capital [[Cahul]] ["Cantemir District, Moldova"] = {}, -- capital [[Cantemir, Moldova|Cantemir]] ["Călărași District, Moldova"] = {}, -- capital [[Călărași, Moldova|Călărași]] ["Căușeni District, Moldova"] = {}, -- capital [[Căușeni]] ["Cimișlia District, Moldova"] = {}, -- capital [[Cimișlia]] ["Criuleni District, Moldova"] = {}, -- capital [[Criuleni]] ["Dondușeni District, Moldova"] = {}, -- capital [[Dondușeni]] ["Drochia District, Moldova"] = {}, -- capital [[Drochia]] ["Dubăsari District, Moldova"] = {}, -- capital [[Cocieri]] ["Edineț District, Moldova"] = {}, -- capital [[Edineț]] ["Fălești District, Moldova"] = {}, -- capital [[Fălești]] ["Florești District, Moldova"] = {}, -- capital [[Florești, Moldova|Florești]] ["Glodeni District, Moldova"] = {}, -- capital [[Glodeni]] ["Hîncești District, Moldova"] = {}, -- capital [[Hîncești]] ["Ialoveni District, Moldova"] = {}, -- capital [[Ialoveni]] ["Leova District, Moldova"] = {}, -- capital [[Leova]] ["Nisporeni District, Moldova"] = {}, -- capital [[Nisporeni]] ["Ocnița District, Moldova"] = {}, -- capital [[Ocnița]] ["Orhei District, Moldova"] = {}, -- capital [[Orhei]] ["Rezina District, Moldova"] = {}, -- capital [[Rezina]] ["Rîșcani District, Moldova"] = {}, -- capital [[Rîșcani]] ["Sîngerei District, Moldova"] = {}, -- capital [[Sîngerei]] ["Soroca District, Moldova"] = {}, -- capital [[Soroca]] ["Strășeni District, Moldova"] = {}, -- capital [[Strășeni]] ["Șoldănești District, Moldova"] = {}, -- capital [[Șoldănești]] ["Ștefan Vodă District, Moldova"] = {}, -- capital [[Ștefan Vodă]] ["Taraclia District, Moldova"] = {}, -- capital [[Taraclia]] ["Telenești District, Moldova"] = {}, -- capital [[Telenești]] ["Ungheni District, Moldova"] = {}, -- capital [[Ungheni]] ["Chișinău, Moldova"] = {placetype = "municipality"}, ["Bălți, Moldova"] = {placetype = "municipality"}, ["Gagauzia, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Comrat]] -- the remainder are under the de-facto control of the unrecognized state of Transnistria ["Bender, Moldova"] = {placetype = "municipality"}, ["Tighina, Moldova"] = {alias_of = "Bender, Moldova"}, ["Transnistria, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Tiraspol]] ["Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova", the = true}, ["Administrative-Territorial Units of the Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova", the = true}, } local function moldova_placename_to_key(placename) local elliptical_key = placename .. ", Moldova" if export.moldova_districts_and_autonomous_territorial_units[elliptical_key] then return elliptical_key end if placename:find(" District$") then return placename .. ", Moldova" end return placename .. " District, Moldova" end -- Moldovan districts (raions) and autonomous territorial units export.moldova_group = { key_to_placename = make_key_to_placename(", Moldova$", " District"), placename_to_key = moldova_placename_to_key, default_container = "Moldova", default_placetype = {"district", "raion"}, default_divs = "communes", data = export.moldova_districts_and_autonomous_territorial_units, } export.morocco_regions = { ["Tangier-Tetouan-Al Hoceima, Morocco"] = {}, ["Oriental, Morocco"] = {wp = "%l (%c)"}, ["L'Oriental, Morocco"] = {alias_of = "Oriental, Morocco", display = true}, ["Fez-Meknes, Morocco"] = {}, ["Rabat-Sale-Kenitra, Morocco"] = {wp = "Rabat-Salé-Kénitra"}, ["Rabat-Salé-Kénitra, Morocco"] = {alias_of = "Rabat-Sale-Kenitra, Morocco", display = true}, ["Beni Mellal-Khenifra, Morocco"] = {wp = "Béni Mellal-Khénifra"}, ["Béni Mellal-Khénifra, Morocco"] = {alias_of = "Beni Mellal-Khenifra, Morocco", display = true}, ["Casablanca-Settat, Morocco"] = {}, ["Marrakesh-Safi, Morocco"] = {wp = "Marrakesh–Safi"}, -- WP title has en-dash ["Marrakech-Safi, Morocco"] = {alias_of = "Marrakesh-Safi, Morocco", display = true}, ["Draa-Tafilalet, Morocco"] = {wp = "Drâa-Tafilalet"}, ["Drâa-Tafilalet, Morocco"] = {alias_of = "Draa-Tafilalet, Morocco", display = true}, ["Souss-Massa, Morocco"] = {}, ["Guelmim-Oued Noun, Morocco"] = { keydesc = "+++. '''NOTE:''' This region lies partly within the disputed territory of [[Western Sahara]]" }, ["Laayoune-Sakia El Hamra, Morocco"] = { wp = "Laâyoune-Sakia El Hamra", keydesc = "+++. '''NOTE:''' This region lies almost completely within the disputed territory of [[Western Sahara]]", }, ["Laâyoune-Sakia El Hamra, Morocco"] = {alias_of = "Laayoune-Sakia El Hamra, Morocco", display = true}, ["Dakhla-Oued Ed-Dahab, Morocco"] = { keydesc = "+++. '''NOTE:''' This region lies completely within the disputed territory of [[Western Sahara]]", }, } -- regions of Morocco export.morocco_group = { default_container = "Morocco", default_placetype = "region", data = export.morocco_regions, } export.egypt_governorates = { ["Cairo Governorate, Egypt"] = {}, ["Giza Governorate, Egypt"] = {}, ["Sharqia Governorate, Egypt"] = {}, ["Dakahlia Governorate, Egypt"] = {}, ["Beheira Governorate, Egypt"] = {}, ["Minya Governorate, Egypt"] = {}, ["Qalyubia Governorate, Egypt"] = {}, ["Sohag Governorate, Egypt"] = {}, ["Alexandria Governorate, Egypt"] = {}, ["Gharbia Governorate, Egypt"] = {}, ["Asyut Governorate, Egypt"] = {}, ["Monufia Governorate, Egypt"] = {}, ["Faiyum Governorate, Egypt"] = {}, ["Kafr El Sheikh Governorate, Egypt"] = {}, ["Qena Governorate, Egypt"] = {}, ["Beni Suef Governorate, Egypt"] = {}, ["Damietta Governorate, Egypt"] = {}, ["Aswan Governorate, Egypt"] = {}, ["Ismailia Governorate, Egypt"] = {}, ["Luxor Governorate, Egypt"] = {}, ["Suez Governorate, Egypt"] = {}, ["Port Said Governorate, Egypt"] = {}, ["Matrouh Governorate, Egypt"] = {}, ["North Sinai Governorate, Egypt"] = {}, ["Red Sea Governorate, Egypt"] = {}, ["New Valley Governorate, Egypt"] = {}, ["South Sinai Governorate, Egypt"] = {}, } -- governorates of Egypt export.egypt_group = { key_to_placename = make_key_to_placename(", Egypt$", " Governorate$"), placename_to_key = make_placename_to_key(", Egypt", " Governorate"), default_container = "Egypt", default_placetype = "governorate", data = export.egypt_governorates, } export.netherlands_provinces = { ["Drenthe, Netherlands"] = {}, ["Flevoland, Netherlands"] = {}, ["Friesland, Netherlands"] = {}, ["Gelderland, Netherlands"] = {}, ["Groningen, Netherlands"] = {wp = "%l (province)"}, ["Limburg, Netherlands"] = {wp = "%l (%c)"}, ["North Brabant, Netherlands"] = {}, -- Foreign forms get display-canonicalized. ["Noord-Brabant, Netherlands"] = {alias_of = "North Brabant, Netherlands", display = true}, ["North Holland, Netherlands"] = {}, ["Noord-Holland, Netherlands"] = {alias_of = "North Holland, Netherlands", display = true}, ["Overijssel, Netherlands"] = {}, ["South Holland, Netherlands"] = {}, ["Zuid-Holland, Netherlands"] = {alias_of = "South Holland, Netherlands", display = true}, ["Utrecht, Netherlands"] = {wp = "%l (province)"}, ["Zeeland, Netherlands"] = {}, } -- provinces of the Netherlands export.netherlands_group = { default_container = "Netherlands", default_placetype = "province", default_divs = "municipalities", data = export.netherlands_provinces, } export.new_zealand_regions = { -- North Island regions ["Northland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-NTL, number 1, capital [[Whangārei]] ["Auckland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-AUK, number 2, capital [[Auckland]] ["Waikato, New Zealand"] = {}, -- ISO 3166-2 code NZ-WKO, number 3, capital [[Hamilton, New Zealand|Hamilton]] ["Bay of Plenty, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-BOP, number 4, capital [[Whakatāne]] ["Gisborne, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-GIS, number 5, capital [[Gisborne, New Zealand|Gisborne]] ["Hawke's Bay, New Zealand"] = {}, -- ISO 3166-2 code NZ-HKB, number 6, capital [[Napier, New Zealand|Napier]] ["Taranaki, New Zealand"] = {}, -- ISO 3166-2 code NZ-TKI, number 7, capital [[Stratford, New Zealand|Stratford]] ["Manawatū-Whanganui, New Zealand"] = {}, -- ISO 3166-2 code NZ-MWT, number 8, capital [[Palmerston North]] ["Manawatu-Whanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true}, ["Manawatu-Wanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true}, ["Wellington, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-WGN, number 9, capital [[Wellington]] -- South Island regions ["Tasman, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-TAS, number 10, capital [[Richmond, New Zealand|Richmond]] ["Nelson, New Zealand"] = {placetype = {"region", "city"}, wp = "%l, %c", is_city = true}, -- ISO 3166-2 code NZ-NSN, number 11, capital [[Nelson, New Zealand|Nelson]] ["Marlborough, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-MBH, number 12, capital [[Blenheim, New Zealand|Blenheim]] ["West Coast, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-WTC, number 13, capital [[Greymouth]] ["Canterbury, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-CAN, number 14, capital [[Christchurch]] ["Otago, New Zealand"] = {}, -- ISO 3166-2 code NZ-OTA, number 15, capital [[Dunedin]] ["Southland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-STL, number 16, capital [[Invercargill]] } -- regions of New Zealand export.new_zealand_group = { default_container = "New Zealand", default_placetype = "region", data = export.new_zealand_regions, } export.nigeria_states = { ["Abia State, Nigeria"] = {}, ["Adamawa State, Nigeria"] = {}, ["Akwa Ibom State, Nigeria"] = {}, ["Anambra State, Nigeria"] = {}, ["Bauchi State, Nigeria"] = {}, ["Bayelsa State, Nigeria"] = {}, ["Benue State, Nigeria"] = {}, ["Borno State, Nigeria"] = {}, ["Cross River State, Nigeria"] = {}, ["Delta State, Nigeria"] = {}, ["Ebonyi State, Nigeria"] = {}, ["Edo State, Nigeria"] = {}, ["Ekiti State, Nigeria"] = {}, ["Enugu State, Nigeria"] = {}, ["Federal Capital Territory, Nigeria"] = { -- not a state but allow it to be referenced as one in holonyms placetype = {"federal territory", "territory", "state"}, the = true, wp = "%l (%c)", }, ["Gombe State, Nigeria"] = {}, ["Imo State, Nigeria"] = {}, ["Jigawa State, Nigeria"] = {}, ["Kaduna State, Nigeria"] = {}, ["Kano State, Nigeria"] = {}, ["Katsina State, Nigeria"] = {}, ["Kebbi State, Nigeria"] = {}, ["Kogi State, Nigeria"] = {}, ["Kwara State, Nigeria"] = {}, ["Lagos State, Nigeria"] = {}, ["Nasarawa State, Nigeria"] = {}, ["Niger State, Nigeria"] = {}, ["Ogun State, Nigeria"] = {}, ["Ondo State, Nigeria"] = {}, ["Osun State, Nigeria"] = {}, ["Oyo State, Nigeria"] = {}, ["Plateau State, Nigeria"] = {}, ["Rivers State, Nigeria"] = {}, ["Sokoto State, Nigeria"] = {}, ["Taraba State, Nigeria"] = {}, ["Yobe State, Nigeria"] = {}, ["Zamfara State, Nigeria"] = {}, } -- states of Nigeria export.nigeria_group = { key_to_placename = make_key_to_placename(", Nigeria$", " State$"), placename_to_key = make_placename_to_key(", Nigeria", " State"), default_container = "Nigeria", default_placetype = "state", data = export.nigeria_states, } export.north_korea_provinces = { ["Chagang Province, North Korea"] = {}, ["North Hamgyong Province, North Korea"] = {}, ["South Hamgyong Province, North Korea"] = {}, ["North Hwanghae Province, North Korea"] = {}, ["South Hwanghae Province, North Korea"] = {}, ["Kangwon Province, North Korea"] = {wp = "%l (%c)"}, ["North Pyongan Province, North Korea"] = {}, ["South Pyongan Province, North Korea"] = {}, ["Ryanggang Province, North Korea"] = {}, } -- provinces of North Korea export.north_korea_group = { key_to_placename = make_key_to_placename(", North Korea$", " Province$"), placename_to_key = make_placename_to_key(", North Korea", " Province"), default_container = "North Korea", default_placetype = "province", data = export.north_korea_provinces, } export.norwegian_counties = { ["Oslo, Norway"] = {}, ["Rogaland, Norway"] = {}, ["Møre og Romsdal, Norway"] = {}, ["Nordland, Norway"] = {}, ["Østfold, Norway"] = {}, ["Akershus, Norway"] = {}, ["Buskerud, Norway"] = {}, -- the following two were merged into Innlandet -- ["Hedmark, Norway"] = {}, -- ["Oppland, Norway"] = {}, ["Innlandet, Norway"] = {}, ["Vestfold, Norway"] = {}, ["Telemark, Norway"] = {}, -- the following two were merged into Agder -- ["Aust-Agder, Norway"] = {}, -- ["Vest-Agder, Norway"] = {}, ["Agder, Norway"] = {}, -- the following two were merged into Vestland -- ["Hordaland, Norway"] = {}, -- ["Sogn og Fjordane, Norway"] = {}, ["Vestland, Norway"] = {}, ["Trøndelag, Norway"] = {}, ["Troms, Norway"] = {}, ["Finnmark, Norway"] = {}, } -- counties of Norway export.norway_group = { default_container = "Norway", default_placetype = "county", data = export.norwegian_counties, } export.pakistan_provinces_and_territories = { ["Azad Kashmir, Pakistan"] = { placetype = {"administrative territory", "autonomous territory", "territory"}, }, ["Azad Jammu and Kashmir, Pakistan"] = {alias_of = "Azad Kashmir, Pakistan", display = true}, ["Balochistan, Pakistan"] = {wp = "%l, %c"}, ["Gilgit-Baltistan, Pakistan"] = { placetype = {"administrative territory", "territory"}, }, ["Islamabad Capital Territory, Pakistan"] = { the = true, divs = {}, -- no divisions placetype = {"federal territory", "administrative territory", "territory"}, }, -- Islamabad is an accepted alias for Islamabad Capital Territory given the above placetypes ["Islamabad, Pakistan"] = {alias_of = "Islamabad Capital Territory, Pakistan"}, ["Khyber Pakhtunkhwa, Pakistan"] = {}, ["Punjab, Pakistan"] = {wp = "%l, %c"}, ["Sindh, Pakistan"] = {}, } -- provinces and territories of Pakistan export.pakistan_group = { default_container = "Pakistan", default_placetype = "province", default_divs = "divisions", data = export.pakistan_provinces_and_territories, } export.philippines_provinces = { ["Abra, Philippines"] = {wp = "%l (province)"}, ["Agusan del Norte, Philippines"] = {}, ["Agusan del Sur, Philippines"] = {}, ["Aklan, Philippines"] = {}, ["Albay, Philippines"] = {}, ["Antique, Philippines"] = {wp = "%l (province)"}, ["Apayao, Philippines"] = {}, ["Aurora, Philippines"] = {wp = "%l (province)"}, ["Basilan, Philippines"] = {}, ["Bataan, Philippines"] = {}, ["Batanes, Philippines"] = {}, ["Batangas, Philippines"] = {}, ["Benguet, Philippines"] = {}, ["Biliran, Philippines"] = {}, ["Bohol, Philippines"] = {}, ["Bukidnon, Philippines"] = {}, ["Bulacan, Philippines"] = {}, ["Cagayan, Philippines"] = {}, ["Camarines Norte, Philippines"] = {}, ["Camarines Sur, Philippines"] = {}, ["Camiguin, Philippines"] = {}, ["Capiz, Philippines"] = {}, ["Catanduanes, Philippines"] = {}, ["Cavite, Philippines"] = {}, ["Cebu, Philippines"] = {}, ["Cotabato, Philippines"] = {}, ["Davao de Oro, Philippines"] = {}, ["Davao del Norte, Philippines"] = {}, ["Davao del Sur, Philippines"] = {}, ["Davao Occidental, Philippines"] = {}, ["Davao Oriental, Philippines"] = {}, ["Dinagat Islands, Philippines"] = {the = true}, ["Eastern Samar, Philippines"] = {}, ["Guimaras, Philippines"] = {}, ["Ifugao, Philippines"] = {}, ["Ilocos Norte, Philippines"] = {}, ["Ilocos Sur, Philippines"] = {}, ["Iloilo, Philippines"] = {}, ["Isabela, Philippines"] = {wp = "%l (province)"}, ["Kalinga, Philippines"] = {wp = "%l (province)"}, ["La Union, Philippines"] = {}, ["Laguna, Philippines"] = {wp = "%l (province)"}, ["Lanao del Norte, Philippines"] = {}, ["Lanao del Sur, Philippines"] = {}, ["Leyte, Philippines"] = {wp = "%l (province)"}, ["Maguindanao del Norte, Philippines"] = {}, ["Maguindanao del Sur, Philippines"] = {}, ["Marinduque, Philippines"] = {}, ["Masbate, Philippines"] = {}, ["Misamis Occidental, Philippines"] = {}, ["Misamis Oriental, Philippines"] = {}, ["Mountain Province, Philippines"] = {}, ["Negros Occidental, Philippines"] = {}, ["Negros Oriental, Philippines"] = {}, ["Northern Samar, Philippines"] = {}, ["Nueva Ecija, Philippines"] = {}, ["Nueva Vizcaya, Philippines"] = {}, ["Occidental Mindoro, Philippines"] = {}, ["Oriental Mindoro, Philippines"] = {}, ["Palawan, Philippines"] = {}, ["Pampanga, Philippines"] = {}, ["Pangasinan, Philippines"] = {}, ["Quezon, Philippines"] = {}, ["Quirino, Philippines"] = {}, ["Rizal, Philippines"] = {wp = "%l (province)"}, ["Romblon, Philippines"] = {}, ["Samar, Philippines"] = {wp = "%l (province)"}, ["Sarangani, Philippines"] = {}, ["Siquijor, Philippines"] = {}, ["Sorsogon, Philippines"] = {}, ["South Cotabato, Philippines"] = {}, ["Southern Leyte, Philippines"] = {}, ["Sultan Kudarat, Philippines"] = {}, ["Sulu, Philippines"] = {}, ["Surigao del Norte, Philippines"] = {}, ["Surigao del Sur, Philippines"] = {}, ["Tarlac, Philippines"] = {}, ["Tawi-Tawi, Philippines"] = {}, ["Zambales, Philippines"] = {}, ["Zamboanga del Norte, Philippines"] = {}, ["Zamboanga del Sur, Philippines"] = {}, ["Zamboanga Sibugay, Philippines"] = {}, -- not a province but treated as one; allow it to be referred to as a province in holonyms ["Metro Manila, Philippines"] = {placetype = {"region", "province"}}, } -- provinces of the Philippines export.philippines_group = { default_container = "Philippines", default_placetype = "province", default_divs = {"municipalities", "barangays"}, data = export.philippines_provinces, } export.poland_voivodeships = { ["Lower Silesian Voivodeship, Poland"] = {}, -- abbr DS, code 02, capital Wrocław ["Kuyavian-Pomeranian Voivodeship, Poland"] = {}, -- abbr KP, code 04, capital Bydgoszcz (seat of voivode), Toruń (seat of sejmik and marshal) ["Lublin Voivodeship, Poland"] = {}, -- abbr LU, code 06, capital Lublin ["Lubusz Voivodeship, Poland"] = {}, -- abbr LB, code 08, capital Gorzów Wielkopolski (seat of voivode), Zielona Góra (seat of sejmik and marshal) ["Lodz Voivodeship, Poland"] = {wp = "Łódź Voivodeship"}, -- abbr LD, code 10, capital Łódź ["Łódź Voivodeship, Poland"] = {alias_of = "Lodz Voivodeship, Poland", display = true, display_as_full = true}, ["Lesser Poland Voivodeship, Poland"] = {}, -- abbr MA, code 12, capital Kraków ["Masovian Voivodeship, Poland"] = {}, -- abbr MZ, code 14, capital Warsaw ["Opole Voivodeship, Poland"] = {}, -- abbr OP, code 16, capital Opole ["Subcarpathian Voivodeship, Poland"] = {}, -- abbr PK, code 18, capital Rzeszów ["Podlaskie Voivodeship, Poland"] = {}, -- abbr PD, code 20, capital Białystok ["Pomeranian Voivodeship, Poland"] = {}, -- abbr PM, code 22, capital Gdańsk ["Silesian Voivodeship, Poland"] = {}, -- abbr SL, code 24, capital Katowice ["Holy Cross Voivodeship, Poland"] = {wp = "Świętokrzyskie Voivodeship"}, -- abbr SK, code 26, capital Kielce ["Świętokrzyskie Voivodeship, Poland"] = {alias_of = "Holy Cross Voivodeship, Poland", display = true, display_as_full = true}, ["Warmian-Masurian Voivodeship, Poland"] = {}, -- abbr WN, code 28, capital Olsztyn ["Greater Poland Voivodeship, Poland"] = {}, -- abbr WP, code 30, capital Poznań ["West Pomeranian Voivodeship, Poland"] = {}, -- abbr ZP, code 32, capital Szczecin } -- voivodeships of Poland export.poland_group = { key_to_placename = make_key_to_placename(", Poland$", " Voivodeship$"), placename_to_key = make_placename_to_key(", Poland", " Voivodeship"), default_container = "Poland", default_placetype = "voivodeship", default_divs = { -- "counties", -- not enough of them currently {type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}}, }, data = export.poland_voivodeships, } export.portugal_districts_and_autonomous_regions = { ["Azores, Portugal"] = {the = true, placetype = {"autonomous region", "region"}}, ["Aveiro District, Portugal"] = {}, ["Beja District, Portugal"] = {}, ["Braga District, Portugal"] = {}, ["Bragança District, Portugal"] = {}, ["Castelo Branco District, Portugal"] = {}, ["Coimbra District, Portugal"] = {}, ["Évora District, Portugal"] = {}, ["Faro District, Portugal"] = {}, ["Guarda District, Portugal"] = {}, ["Leiria District, Portugal"] = {}, ["Lisbon District, Portugal"] = {}, ["Lisboa District, Portugal"] = {alias_of = "Lisbon District, Portugal", display = true}, ["Madeira, Portugal"] = {placetype = {"autonomous region", "region"}}, ["Portalegre District, Portugal"] = {}, ["Porto District, Portugal"] = {}, ["Santarém District, Portugal"] = {}, ["Setúbal District, Portugal"] = {}, ["Viana do Castelo District, Portugal"] = {}, ["Vila Real District, Portugal"] = {}, ["Viseu District, Portugal"] = {}, } local function portugal_placename_to_key(placename) if placename == "Azores" or placename == "Madeira" then return placename .. ", Portugal" end if placename:find(" District$") then return placename .. ", Portugal" end return placename .. " District, Portugal" end -- districts and autonomous regions of Portugal export.portugal_group = { key_to_placename = make_key_to_placename(", Portugal$", " District$"), placename_to_key = portugal_placename_to_key, default_container = "Portugal", default_placetype = "district", default_divs = "municipalities", data = export.portugal_districts_and_autonomous_regions, } export.romania_counties = { ["Alba County, Romania"] = {}, ["Arad County, Romania"] = {}, ["Argeș County, Romania"] = {}, ["Bacău County, Romania"] = {}, ["Bihor County, Romania"] = {}, ["Bistrița-Năsăud County, Romania"] = {}, ["Botoșani County, Romania"] = {}, ["Brașov County, Romania"] = {}, ["Brăila County, Romania"] = {}, -- Bucharest: not in a county ["Buzău County, Romania"] = {}, ["Caraș-Severin County, Romania"] = {}, ["Cluj County, Romania"] = {}, ["Constanța County, Romania"] = {}, ["Covasna County, Romania"] = {}, ["Călărași County, Romania"] = {}, ["Dolj County, Romania"] = {}, ["Dâmbovița County, Romania"] = {}, ["Galați County, Romania"] = {}, ["Giurgiu County, Romania"] = {}, ["Gorj County, Romania"] = {}, ["Harghita County, Romania"] = {}, ["Hunedoara County, Romania"] = {}, ["Ialomița County, Romania"] = {}, ["Iași County, Romania"] = {}, ["Ilfov County, Romania"] = {}, ["Maramureș County, Romania"] = {}, ["Mehedinți County, Romania"] = {}, ["Mureș County, Romania"] = {}, ["Neamț County, Romania"] = {}, ["Olt County, Romania"] = {}, ["Prahova County, Romania"] = {}, ["Satu Mare County, Romania"] = {}, ["Sibiu County, Romania"] = {}, ["Suceava County, Romania"] = {}, ["Sălaj County, Romania"] = {}, ["Teleorman County, Romania"] = {}, ["Timiș County, Romania"] = {}, ["Tulcea County, Romania"] = {}, ["Vaslui County, Romania"] = {}, ["Vrancea County, Romania"] = {}, ["Vâlcea County, Romania"] = {}, } -- counties of Romania export.romania_group = { key_to_placename = make_key_to_placename(", Romania$", " County$"), placename_to_key = make_placename_to_key(", Romania", " County"), default_container = "Romania", default_placetype = "county", default_divs = "communes", data = export.romania_counties, } local function make_russia_federal_subject_spec(spectype, use_the, wp) return { placetype = spectype, the = not not use_the, bare_category_parent_type = {"federal subjects", spectype .. "s"}, wp = wp, } end local russia_autonomous_okrug_no_the = {placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}} local russia_autonomous_okrug_the = {placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}, the = true} local russia_krai = make_russia_federal_subject_spec("krai") local russia_oblast = make_russia_federal_subject_spec("oblast") local russia_republic_the = make_russia_federal_subject_spec("republic", "use the") local russia_republic_no_the = make_russia_federal_subject_spec("republic") export.russia_federal_subjects = { -- autonomous oblasts ["Jewish Autonomous Oblast, Russia"] = {the = true, placetype = {"autonomous oblast", "oblast"}, bare_category_parent_type = {"federal subjects", "autonomous oblasts"}}, -- autonomous okrugs ["Chukotka Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Chukotka, Russia"] = {alias_of = "Chukotka Autonomous Okrug, Russia"}, ["Khanty-Mansi Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Khanty-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Khantia-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Yugra, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Nenetsia, Russia"] = {alias_of = "Nenets Autonomous Okrug, Russia"}, ["Yamalo-Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Yamalia, Russia"] = {alias_of = "Yamalo-Nenets Autonomous Okrug, Russia"}, -- krais ["Altai Krai, Russia"] = russia_krai, ["Kamchatka Krai, Russia"] = russia_krai, ["Khabarovsk Krai, Russia"] = russia_krai, ["Krasnodar Krai, Russia"] = russia_krai, ["Krasnoyarsk Krai, Russia"] = russia_krai, ["Perm Krai, Russia"] = russia_krai, ["Primorsky Krai, Russia"] = russia_krai, ["Stavropol Krai, Russia"] = russia_krai, ["Zabaykalsky Krai, Russia"] = russia_krai, -- oblasts ["Amur Oblast, Russia"] = russia_oblast, ["Arkhangelsk Oblast, Russia"] = russia_oblast, ["Astrakhan Oblast, Russia"] = russia_oblast, ["Belgorod Oblast, Russia"] = russia_oblast, ["Bryansk Oblast, Russia"] = russia_oblast, ["Chelyabinsk Oblast, Russia"] = russia_oblast, ["Irkutsk Oblast, Russia"] = russia_oblast, ["Ivanovo Oblast, Russia"] = russia_oblast, ["Kaliningrad Oblast, Russia"] = russia_oblast, ["Kaluga Oblast, Russia"] = russia_oblast, ["Kemerovo Oblast, Russia"] = russia_oblast, ["Kirov Oblast, Russia"] = russia_oblast, ["Kostroma Oblast, Russia"] = russia_oblast, ["Kurgan Oblast, Russia"] = russia_oblast, ["Kursk Oblast, Russia"] = russia_oblast, ["Leningrad Oblast, Russia"] = russia_oblast, ["Lipetsk Oblast, Russia"] = russia_oblast, ["Magadan Oblast, Russia"] = russia_oblast, ["Moscow Oblast, Russia"] = russia_oblast, ["Murmansk Oblast, Russia"] = russia_oblast, ["Nizhny Novgorod Oblast, Russia"] = russia_oblast, ["Novgorod Oblast, Russia"] = russia_oblast, ["Novosibirsk Oblast, Russia"] = russia_oblast, ["Omsk Oblast, Russia"] = russia_oblast, ["Orenburg Oblast, Russia"] = russia_oblast, ["Oryol Oblast, Russia"] = russia_oblast, ["Penza Oblast, Russia"] = russia_oblast, ["Pskov Oblast, Russia"] = russia_oblast, ["Rostov Oblast, Russia"] = russia_oblast, ["Ryazan Oblast, Russia"] = russia_oblast, ["Sakhalin Oblast, Russia"] = russia_oblast, ["Samara Oblast, Russia"] = russia_oblast, ["Saratov Oblast, Russia"] = russia_oblast, ["Smolensk Oblast, Russia"] = russia_oblast, ["Sverdlovsk Oblast, Russia"] = russia_oblast, ["Tambov Oblast, Russia"] = russia_oblast, ["Tomsk Oblast, Russia"] = russia_oblast, ["Tula Oblast, Russia"] = russia_oblast, ["Tver Oblast, Russia"] = russia_oblast, ["Tyumen Oblast, Russia"] = russia_oblast, ["Ulyanovsk Oblast, Russia"] = russia_oblast, ["Vladimir Oblast, Russia"] = russia_oblast, ["Volgograd Oblast, Russia"] = russia_oblast, ["Vologda Oblast, Russia"] = russia_oblast, ["Voronezh Oblast, Russia"] = russia_oblast, ["Yaroslavl Oblast, Russia"] = russia_oblast, -- republics -- -- We only need to include cases that aren't just shortened versions of the full federal subject name (i.e. where -- words like "Republic" and "Oblast" are omitted but the name is not otherwise modified; these are handled by -- key_to_placename). Non-display-canonicalizing aliases are generally due to differences in the presence or absence -- of "the". ["Adygea, Russia"] = russia_republic_no_the, ["Republic of Adygea, Russia"] = {alias_of = "Adygea, Russia", the = true}, ["Bashkortostan, Russia"] = russia_republic_no_the, ["Republic of Bashkortostan, Russia"] = {alias_of = "Bashkortostan, Russia", the = true}, ["Bashkiria, Russia"] = {alias_of = "Bashkortostan, Russia"}, ["Buryatia, Russia"] = russia_republic_no_the, ["Republic of Buryatia, Russia"] = {alias_of = "Buryatia, Russia", the = true}, ["Dagestan, Russia"] = russia_republic_no_the, ["Republic of Dagestan, Russia"] = {alias_of = "Dagestan, Russia", the = true}, ["Ingushetia, Russia"] = russia_republic_no_the, ["Republic of Ingushetia, Russia"] = {alias_of = "Ingushetia, Russia", the = true}, ["Kalmykia, Russia"] = russia_republic_no_the, ["Republic of Kalmykia, Russia"] = {alias_of = "Kalmykia, Russia", the = true}, ["Karelia, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Karelia"), ["Republic of Karelia, Russia"] = {alias_of = "Karelia, Russia", the = true}, ["Khakassia, Russia"] = russia_republic_no_the, ["Republic of Khakassia, Russia"] = {alias_of = "Khakassia, Russia", the = true}, ["Mordovia, Russia"] = russia_republic_no_the, ["Republic of Mordovia, Russia"] = {alias_of = "Mordovia, Russia", the = true}, ["North Ossetia-Alania, Russia"] = make_russia_federal_subject_spec("republic", nil, "North Ossetia–Alania"), -- with en-dash ["Republic of North Ossetia-Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia", the = true}, ["North Ossetia, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true}, ["Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true}, ["Tatarstan, Russia"] = russia_republic_no_the, ["Republic of Tatarstan, Russia"] = {alias_of = "Tatarstan, Russia", the = true}, ["Altai Republic, Russia"] = russia_republic_the, ["Chechnya, Russia"] = russia_republic_no_the, ["Chechen Republic, Russia"] = {alias_of = "Chechnya, Russia", the = true}, ["Chuvashia, Russia"] = russia_republic_no_the, ["Chuvash Republic, Russia"] = {alias_of = "Chuvashia, Russia", the = true}, ["Kabardino-Balkaria, Russia"] = russia_republic_no_the, ["Kabardino-Balkariya, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = true}, ["Kabardino-Balkarian Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", the = true}, ["Kabardino-Balkar Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = "Kabardino-Balkarian Republic, Russia", the = true}, ["Karachay-Cherkessia, Russia"] = russia_republic_no_the, ["Karachay-Cherkess Republic, Russia"] = {alias_of = "Karachay-Cherkessia, Russia"}, ["Komi, Russia"] = make_russia_federal_subject_spec("republic", nil, "Komi Republic"), ["Komi Republic, Russia"] = {alias_of = "Komi, Russia", the = true}, ["Mari El, Russia"] = russia_republic_no_the, ["Mari El Republic, Russia"] = {alias_of = "Mari El, Russia", the = true}, ["Sakha, Russia"] = make_russia_federal_subject_spec("republic", nil, "Sakha Republic"), ["Sakha Republic, Russia"] = {alias_of = "Sakha, Russia", the = true}, ["Yakutia, Russia"] = {alias_of = "Sakha, Russia"}, ["Yakutiya, Russia"] = {alias_of = "Sakha, Russia", display = "Yakutia, Russia"}, ["Republic of Yakutia (Sakha), Russia"] = {alias_of = "Sakha, Russia", display = "Sakha Republic, Russia", the = true}, ["Tuva, Russia"] = russia_republic_no_the, ["Tyva, Russia"] = {alias_of = "Tuva, Russia", display = true}, ["Tuva Republic, Russia"] = {alias_of = "Tuva, Russia", the = true}, ["Tyva Republic, Russia"] = {alias_of = "Tuva, Russia", display= "Tuva Republic, Russia", the = true}, ["Udmurtia, Russia"] = russia_republic_no_the, ["Udmurt Republic, Russia"] = {alias_of = "Udmurtia, Russia", the = true}, -- Not included due to being unrecognized and only partly controlled: -- ["Crimea, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Crimea (Russia)") -- ["Donetsk People's Republic, Russia"] = russia_republic_the, -- ["Luhansk People's Republic, Russia"] = russia_republic_the, -- ["Zaporozhye Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Zaporizhzhia Oblast"), -- ["Kherson Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Kherson Oblast"), -- There are also federal cities (not included because they're cities): -- Moscow, Saint Petersburg; Sevastopol (unrecognized; same status as for "Crimea, Russia" above) } local function russia_key_to_placename(key) key = key:gsub(",.*", "") local full_placename = key if key == "Jewish Autonomous Oblast" then return full_placename, full_placename end local elliptical_placename for _, suffix in ipairs({"Krai", "Oblast"}) do elliptical_placename = key:match("^(.*) " .. suffix .. "$") if elliptical_placename then return full_placename, elliptical_placename end end return full_placename, full_placename end local function russia_placename_to_key(placename) local key = placename .. ", Russia" if export.russia_federal_subjects[key] then return key end -- We allow the user to say e.g. "obl/Samara" in place of "obl/Samara Oblast". for _, suffix in ipairs({"Krai", "Oblast"}) do local suffixed_key = placename .. " " .. suffix .. ", Russia" if export.russia_federal_subjects[suffixed_key] then return suffixed_key end end return placename .. ", Russia" end local function construct_russia_federal_subject_keydesc(group, key, spec) local placename = key:gsub(",.*", "") local linked_placename = export.construct_linked_placename(spec, placename) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if placetype == "oblast" then -- Hack: Oblasts generally don't have entries under "Foo Oblast" -- but just under "Foo", so fix the linked key appropriately; -- doesn't apply to the Jewish Autonomous Oblast linked_placename = linked_placename:gsub(" Oblast%]%]", "%]%] Oblast") end return linked_placename .. ", a [[federal subject]] ([[" .. placetype .. "]]) of [[Russia]]" end -- federal subjects of Russia export.russia_group = { key_to_placename = russia_key_to_placename, placename_to_key = russia_placename_to_key, default_container = "Russia", default_keydesc = construct_russia_federal_subject_keydesc, default_overriding_bare_label_parents = {"federal subjects of Russia", "+++"}, data = export.russia_federal_subjects, } export.saudi_arabia_provinces = { ["Riyadh Province, Saudi Arabia"] = {}, ["Mecca Province, Saudi Arabia"] = {}, -- Name is too generic to assume it's in Saudi Arabia if not specified. ["Eastern Province, Saudi Arabia"] = {no_auto_augment_container = true, wp = "%l, %c"}, ["Medina Province, Saudi Arabia"] = {wp = "%l (%c)"}, ["Aseer Province, Saudi Arabia"] = {wp = "Asir"}, ["Asir Province, Saudi Arabia"] = {alias_of = "Aseer Province, Saudi Arabia", display = true}, ["Jazan Province, Saudi Arabia"] = {}, ["Qassim Province, Saudi Arabia"] = {wp = "Al-Qassim Province"}, ["Al-Qassim Province, Saudi Arabia"] = {alias_of = "Qassim Province, Saudi Arabia", display = true}, ["Tabuk Province, Saudi Arabia"] = {}, ["Hail Province, Saudi Arabia"] = {wp = "Ḥa'il Province"}, ["Ha'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true}, ["Ḥa'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true}, ["Al-Jouf Province, Saudi Arabia"] = {wp = "Al-Jawf Province"}, ["Al-Jawf Province, Saudi Arabia"] = {alias_of = "Al-Jouf Province, Saudi Arabia", display = true}, ["Najran Province, Saudi Arabia"] = {}, ["Northern Borders Province, Saudi Arabia"] = {}, ["Al-Bahah Province, Saudi Arabia"] = {}, } -- provinces of Saudi Arabia export.saudi_arabia_group = { key_to_placename = make_key_to_placename(", Saudi Arabia$", " Province$"), placename_to_key = make_placename_to_key(", Saudi Arabia", " Province"), default_container = "Saudi Arabia", default_placetype = "province", data = export.saudi_arabia_provinces, } export.south_africa_provinces = { ["Eastern Cape, South Africa"] = {the = true}, ["Free State, South Africa"] = {the = true, wp = "%l (province)"}, ["Gauteng, South Africa"] = {}, ["KwaZulu-Natal, South Africa"] = {}, ["Limpopo, South Africa"] = {}, ["Mpumalanga, South Africa"] = {}, -- per Wikipedia and other sources, `North West` doesn't normally have `the` before it ["North West, South Africa"] = {wp = "%l (South African province)"}, ["Northern Cape, South Africa"] = {the = true}, ["Western Cape, South Africa"] = {the = true}, } -- provinces of South Africa export.south_africa_group = { default_container = "South Africa", default_placetype = "province", default_divs = "municipalities", data = export.south_africa_provinces, } export.south_korea_provinces = { ["North Chungcheong Province, South Korea"] = {}, ["South Chungcheong Province, South Korea"] = {}, ["Gangwon Province, South Korea"] = {wp = "%l, %c"}, ["Gyeonggi Province, South Korea"] = {}, ["North Gyeongsang Province, South Korea"] = {}, ["South Gyeongsang Province, South Korea"] = {}, ["North Jeolla Province, South Korea"] = {}, ["South Jeolla Province, South Korea"] = {}, ["Jeju Province, South Korea"] = {}, } -- provinces of South Korea export.south_korea_group = { key_to_placename = make_key_to_placename(", South Korea$", " Province$"), placename_to_key = make_placename_to_key(", South Korea", " Province"), default_container = "South Korea", default_placetype = "province", data = export.south_korea_provinces, } export.spain_autonomous_communities = { ["Andalusia, Spain"] = {}, ["Aragon, Spain"] = {}, ["Asturias, Spain"] = {}, ["Balearic Islands, Spain"] = {the = true}, ["Basque Country, Spain"] = {the = true, wp = "%l (autonomous community)"}, ["Canary Islands, Spain"] = {the = true}, ["Cantabria, Spain"] = {}, ["Castile and León, Spain"] = {}, ["Castilla-La Mancha, Spain"] = {wp = "Castilla–La Mancha"}, -- with en-dash ["Catalonia, Spain"] = {}, ["Community of Madrid, Spain"] = {the = true}, ["Extremadura, Spain"] = {}, ["Galicia, Spain"] = {wp = "%l (Spain)"}, ["La Rioja, Spain"] = {}, ["Murcia, Spain"] = {wp = "Region of %l"}, ["Navarre, Spain"] = {}, ["Valencia, Spain"] = {wp = "Valencian Community"}, ["Valencian Community, Spain"] = {alias_of = "Valencia, Spain", the = true}, } -- autonomous communities of Spain export.spain_group = { default_container = "Spain", default_placetype = "autonomous community", default_divs = {"municipalities", "comarcas"}, data = export.spain_autonomous_communities, } export.taiwan_counties = { ["Changhua County, Taiwan"] = {}, ["Chiayi County, Taiwan"] = {}, ["Hsinchu County, Taiwan"] = {}, ["Hualien County, Taiwan"] = {}, ["Kinmen County, Taiwan"] = {wp = "Kinmen"}, ["Lienchiang County, Taiwan"] = {wp = "Matsu Islands"}, ["Miaoli County, Taiwan"] = {}, ["Nantou County, Taiwan"] = {}, ["Penghu County, Taiwan"] = {wp = "Penghu"}, ["Pingtung County, Taiwan"] = {}, ["Taitung County, Taiwan"] = {}, ["Yilan County, Taiwan"] = {wp = "%l, %c"}, ["Yunlin County, Taiwan"] = {}, } -- counties of Taiwan export.taiwan_group = { key_to_placename = make_key_to_placename(", Taiwan$", " County$"), placename_to_key = make_placename_to_key(", Taiwan", " County"), default_container = "Taiwan", default_placetype = "county", default_divs = {"districts", "townships"}, data = export.taiwan_counties, } export.thailand_provinces = { -- Bangkok (special administrative area) ["Amnat Charoen Province, Thailand"] = {}, ["Ang Thong Province, Thailand"] = {}, ["Bueng Kan Province, Thailand"] = {}, ["Buriram Province, Thailand"] = {}, ["Chachoengsao Province, Thailand"] = {}, ["Chai Nat Province, Thailand"] = {}, ["Chaiyaphum Province, Thailand"] = {}, ["Chanthaburi Province, Thailand"] = {}, ["Chiang Mai Province, Thailand"] = {}, ["Chiang Rai Province, Thailand"] = {}, ["Chonburi Province, Thailand"] = {}, ["Chumphon Province, Thailand"] = {}, ["Kalasin Province, Thailand"] = {}, ["Kamphaeng Phet Province, Thailand"] = {}, ["Kanchanaburi Province, Thailand"] = {}, ["Khon Kaen Province, Thailand"] = {}, ["Krabi Province, Thailand"] = {}, ["Lampang Province, Thailand"] = {}, ["Lamphun Province, Thailand"] = {}, ["Loei Province, Thailand"] = {}, ["Lopburi Province, Thailand"] = {}, ["Mae Hong Son Province, Thailand"] = {}, ["Maha Sarakham Province, Thailand"] = {}, ["Mukdahan Province, Thailand"] = {}, ["Nakhon Nayok Province, Thailand"] = {}, ["Nakhon Pathom Province, Thailand"] = {}, ["Nakhon Phanom Province, Thailand"] = {}, ["Nakhon Ratchasima Province, Thailand"] = {}, ["Nakhon Sawon Province, Thailand"] = {}, ["Nakhon Si Thammarat Province, Thailand"] = {}, ["Nan Province, Thailand"] = {}, ["Narathiwat Province, Thailand"] = {}, ["Nong Bua Lamphu Province, Thailand"] = {}, ["Nong Khai Province, Thailand"] = {}, ["Nonthaburi Province, Thailand"] = {}, ["Pathum Thani Province, Thailand"] = {}, ["Pattani Province, Thailand"] = {}, ["Phang Nga Province, Thailand"] = {}, ["Phatthalung Province, Thailand"] = {}, ["Phayao Province, Thailand"] = {}, ["Phetchabun Province, Thailand"] = {}, ["Phetchaburi Province, Thailand"] = {}, ["Phichit Province, Thailand"] = {}, ["Phitsanulok Province, Thailand"] = {}, ["Phra Nakhon Si Ayutthaya Province, Thailand"] = {}, ["Phrae Province, Thailand"] = {}, ["Phuket Province, Thailand"] = {}, ["Prachinburi Province, Thailand"] = {}, ["Prachuap Khiri Khan Province, Thailand"] = {}, ["Ranong Province, Thailand"] = {}, ["Ratchaburi Province, Thailand"] = {}, ["Rayong Province, Thailand"] = {}, ["Roi Et Province, Thailand"] = {}, ["Sa Kaeo Province, Thailand"] = {}, ["Sakon Nakhon Province, Thailand"] = {}, ["Samut Prakan Province, Thailand"] = {}, ["Samut Sakhon Province, Thailand"] = {}, ["Samut Songkhram Province, Thailand"] = {}, ["Saraburi Province, Thailand"] = {}, ["Satun Province, Thailand"] = {}, ["Sing Buri Province, Thailand"] = {}, ["Sisaket Province, Thailand"] = {}, ["Songkhla Province, Thailand"] = {}, ["Sukhothai Province, Thailand"] = {}, ["Suphan Buri Province, Thailand"] = {}, ["Surat Thani Province, Thailand"] = {}, ["Surin Province, Thailand"] = {}, ["Tak Province, Thailand"] = {}, ["Trang Province, Thailand"] = {}, ["Trat Province, Thailand"] = {}, ["Ubon Ratchathani Province, Thailand"] = {}, ["Udon Thani Province, Thailand"] = {}, ["Uthai Thani Province, Thailand"] = {}, ["Uttaradit Province, Thailand"] = {}, ["Yala Province, Thailand"] = {}, ["Yasothon Province, Thailand"] = {}, } -- provinces of Thailand export.thailand_group = { key_to_placename = make_key_to_placename(", Thailand$", " Province$"), placename_to_key = make_placename_to_key(", Thailand", " Province"), default_container = "Thailand", default_placetype = "province", default_divs = "districts", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.thailand_provinces, } export.turkey_provinces = { ["Adana Province, Turkey"] = {}, -- code 01 ["Adıyaman Province, Turkey"] = {}, -- code 02 ["Afyonkarahisar Province, Turkey"] = {}, -- code 03 ["Ağrı Province, Turkey"] = {}, -- code 04 ["Amasya Province, Turkey"] = {}, -- code 05 ["Ankara Province, Turkey"] = {}, -- code 06 ["Antalya Province, Turkey"] = {}, -- code 07 ["Artvin Province, Turkey"] = {}, -- code 08 ["Aydın Province, Turkey"] = {}, -- code 09 ["Balıkesir Province, Turkey"] = {}, -- code 10 ["Bilecik Province, Turkey"] = {}, -- code 11 ["Bingöl Province, Turkey"] = {}, -- code 12 ["Bitlis Province, Turkey"] = {}, -- code 13 ["Bolu Province, Turkey"] = {}, -- code 14 ["Burdur Province, Turkey"] = {}, -- code 15 ["Bursa Province, Turkey"] = {}, -- code 16 ["Çanakkale Province, Turkey"] = {}, -- code 17 ["Çankırı Province, Turkey"] = {}, -- code 18 ["Çorum Province, Turkey"] = {}, -- code 19 ["Denizli Province, Turkey"] = {}, -- code 20 ["Diyarbakır Province, Turkey"] = {}, -- code 21 ["Edirne Province, Turkey"] = {}, -- code 22 ["Elazığ Province, Turkey"] = {}, -- code 23 ["Elâzığ Province, Turkey"] = {alias_of = "Elazığ Province, Turkey", display = true}, ["Erzincan Province, Turkey"] = {}, -- code 24 ["Erzurum Province, Turkey"] = {}, -- code 25 ["Eskişehir Province, Turkey"] = {}, -- code 26 ["Gaziantep Province, Turkey"] = {}, -- code 27 ["Giresun Province, Turkey"] = {}, -- code 28 ["Gümüşhane Province, Turkey"] = {}, -- code 29 ["Hakkâri Province, Turkey"] = {}, -- code 30 ["Hakkari Province, Turkey"] = {alias_of = "Hakkâri Province, Turkey", display = true}, ["Hatay Province, Turkey"] = {}, -- code 31 ["Isparta Province, Turkey"] = {}, -- code 32 ["Mersin Province, Turkey"] = {}, -- code 33 -- ["Istanbul Province, Turkey"] = {}, -- code 34; this is coextensive with the city itself ["İzmir Province, Turkey"] = {}, -- code 35 ["Izmir Province, Turkey"] = {alias_of = "İzmir Province, Turkey", display = true}, ["Kars Province, Turkey"] = {}, -- code 36 ["Kastamonu Province, Turkey"] = {}, -- code 37 ["Kayseri Province, Turkey"] = {}, -- code 38 ["Kırklareli Province, Turkey"] = {}, -- code 39 ["Kırşehir Province, Turkey"] = {}, -- code 40 ["Kocaeli Province, Turkey"] = {}, -- code 41 ["Konya Province, Turkey"] = {}, -- code 42 ["Kütahya Province, Turkey"] = {}, -- code 43 ["Malatya Province, Turkey"] = {}, -- code 44 ["Manisa Province, Turkey"] = {}, -- code 45 ["Kahramanmaraş Province, Turkey"] = {}, -- code 46 ["Mardin Province, Turkey"] = {}, -- code 47 ["Muğla Province, Turkey"] = {}, -- code 48 ["Muş Province, Turkey"] = {}, -- code 49 ["Nevşehir Province, Turkey"] = {}, -- code 50 ["Niğde Province, Turkey"] = {}, -- code 51 ["Ordu Province, Turkey"] = {}, -- code 52 ["Rize Province, Turkey"] = {}, -- code 53 ["Sakarya Province, Turkey"] = {}, -- code 54 ["Samsun Province, Turkey"] = {}, -- code 55 ["Siirt Province, Turkey"] = {}, -- code 56 ["Sinop Province, Turkey"] = {}, -- code 57 ["Sivas Province, Turkey"] = {}, -- code 58 ["Tekirdağ Province, Turkey"] = {}, -- code 59 ["Tokat Province, Turkey"] = {}, -- code 60 ["Trabzon Province, Turkey"] = {}, -- code 61 ["Tunceli Province, Turkey"] = {}, -- code 62 ["Şanlıurfa Province, Turkey"] = {}, -- code 63 ["Uşak Province, Turkey"] = {}, -- code 64 ["Van Province, Turkey"] = {}, -- code 65 ["Yozgat Province, Turkey"] = {}, -- code 66 ["Zonguldak Province, Turkey"] = {}, -- code 67 ["Aksaray Province, Turkey"] = {}, -- code 68 ["Bayburt Province, Turkey"] = {}, -- code 69 ["Karaman Province, Turkey"] = {}, -- code 70 ["Kırıkkale Province, Turkey"] = {}, -- code 71 ["Batman Province, Turkey"] = {}, -- code 72 ["Şırnak Province, Turkey"] = {}, -- code 73 ["Bartın Province, Turkey"] = {}, -- code 74 ["Ardahan Province, Turkey"] = {}, -- code 75 ["Iğdır Province, Turkey"] = {}, -- code 76 ["Yalova Province, Turkey"] = {}, -- code 77 ["Karabük Province, Turkey"] = {}, -- code 78 ["Kilis Province, Turkey"] = {}, -- code 79 ["Osmaniye Province, Turkey"] = {}, -- code 80 ["Düzce Province, Turkey"] = {}, -- code 81 } -- provinces of Turkey export.turkey_group = { key_to_placename = make_key_to_placename(", Turkey$", " Province$"), placename_to_key = make_placename_to_key(", Turkey", " Province"), default_container = "Turkey", default_placetype = "province", default_divs = "districts", data = export.turkey_provinces, } export.ukraine_oblasts = { ["Cherkasy Oblast, Ukraine"] = {}, -- capital [[Cherkasy]], license plate prefix CA, IA ["Chernihiv Oblast, Ukraine"] = {}, -- capital [[Chernihiv]], license plate prefix CB, IB ["Chernivtsi Oblast, Ukraine"] = {}, -- capital [[Chernivtsi]], license plate prefix CE, IE -- apparently will be renamed to 'Dnipro Oblast' ["Dnipropetrovsk Oblast, Ukraine"] = {}, -- capital [[Dnipro]], license plate prefix AE, KE ["Donetsk Oblast, Ukraine"] = {}, -- capital ''[[Donetsk]] ([[Kramatorsk]])'', license plate prefix AH, KH ["Ivano-Frankivsk Oblast, Ukraine"] = {}, -- capital [[Ivano-Frankivsk]], license plate prefix AT, KT ["Kharkiv Oblast, Ukraine"] = {}, -- capital [[Kharkiv]], license plate prefix AX, KX ["Kherson Oblast, Ukraine"] = {}, -- capital ''[[Kherson]]'', license plate prefix ''BT, HT'' ["Khmelnytskyi Oblast, Ukraine"] = {}, -- capital [[Khmelnytskyi]], license plate prefix BX, HX -- apparently will be renamed to 'Kropyvnytskyi Oblast' ["Kirovohrad Oblast, Ukraine"] = {}, -- capital [[Kropyvnytskyi]], license plate prefix BA, HA ["Kyiv Oblast, Ukraine"] = {}, -- capital [[Kyiv]], license plate prefix AI, KI ["Kiev Oblast, Ukraine"] = {alias_of = "Kyiv Oblast, Ukraine", display = true}, ["Luhansk Oblast, Ukraine"] = {}, -- capital ''[[Luhansk]] ([[Sievierodonetsk]])'', license plate prefix BB, HB ["Lviv Oblast, Ukraine"] = {}, -- capital [[Lviv]], license plate prefix BC, HC ["Mykolaiv Oblast, Ukraine"] = {}, -- capital [[Mykolaiv]], license plate prefix BE, HE ["Odesa Oblast, Ukraine"] = {}, -- capital [[Odesa]], license plate prefix BH, HH ["Odessa Oblast, Ukraine"] = {alias_of = "Odesa Oblast, Ukraine", display = true}, ["Poltava Oblast, Ukraine"] = {}, -- capital [[Poltava]], license plate prefix BI, HI ["Rivne Oblast, Ukraine"] = {}, -- capital [[Rivne]], license plate prefix BK, HK ["Sumy Oblast, Ukraine"] = {}, -- capital [[Sumy]], license plate prefix BM, HM ["Ternopil Oblast, Ukraine"] = {}, -- capital [[Ternopil]], license plate prefix BO, HO ["Vinnytsia Oblast, Ukraine"] = {}, -- capital [[Vinnytsia]], license plate prefix AB, KB ["Volyn Oblast, Ukraine"] = {}, -- capital [[Lutsk]], license plate prefix AC, KC ["Zakarpattia Oblast, Ukraine"] = {}, -- capital [[Uzhhorod]], license plate prefix AO, KO ["Zaporizhzhia Oblast, Ukraine"] = {}, -- capital ''[[Zaporizhzhia]]'', license plate prefix AP, KP ["Zaporizhia Oblast, Ukraine"] = {alias_of = "Zaporizhzhia Oblast, Ukraine", display = true}, ["Zhytomyr Oblast, Ukraine"] = {}, -- capital [[Zhytomyr]], license plate prefix AM, KM } -- oblasts of Ukraine export.ukraine_group = { key_to_placename = make_key_to_placename(", Ukraine$", " Oblast$"), placename_to_key = make_placename_to_key(", Ukraine", " Oblast"), default_container = "Ukraine", default_placetype = "oblast", default_divs = {"raions", "hromadas"}, data = export.ukraine_oblasts, } export.united_kingdom_constituent_countries = { ["England"] = {divs = { "counties", "districts", {type = "local government districts", cat_as = "districts"}, { type = "local government districts with borough status", cat_as = {"districts", "boroughs"}, }, {type = "boroughs", cat_as = {"districts", "boroughs"}}, {type = "civil parishes", container_parent_type = false}, }}, ["Northern Ireland"] = { placetype = {"constituent country", "province", "quốc gia"}, divs = {"counties", "districts"}, }, ["Scotland"] = {divs = { {type = "council areas", container_parent_type = false}, "districts", }}, ["Wales"] = {divs = { "counties", {type = "county boroughs", container_parent_type = false}, {type = "communities", container_parent_type = false}, {type = "Welsh communities", cat_as = {{type = "communities", container_parent_type = false}}}, }}, } -- constituent countries and provinces of the United Kingdom export.united_kingdom_group = { placename_to_key = false, default_container = "United Kingdom", default_placetype = {"constituent country", "quốc gia"}, addl_divs = { "traditional counties", {type = "historical counties", cat_as = "traditional counties"}, }, -- Don't create categories like 'Category:en:Towns in the United Kingdom' -- or 'Category:en:Places in the United Kingdom'. default_no_container_cat = true, data = export.united_kingdom_constituent_countries, } export.england_counties = { -- NOTE: We used to have various other "no longer" counties commented out, which seems to refer to counties that -- existed officially at some point between 1889 and 1974, which I have removed. I have only kept the three -- ceremonial counties that existed from 1974 (when ceremonial counties were created) to 1996, as well as those -- still considered "historic counties" per [[w:Historic counties of England]]. -- ["Avon, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996) ["Bedfordshire, England"] = {}, ["Berkshire, England"] = {}, -- ["Brighton and Hove, England"] = {}, -- city -- ["Bristol, England"] = {}, -- city ["Buckinghamshire, England"] = {}, ["Cambridgeshire, England"] = {}, ["Cheshire, England"] = {}, -- ["Cleveland, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996) ["Cornwall, England"] = {}, -- ["Cumberland, England"] = {}, -- no longer (historic county) ["Cumbria, England"] = {}, ["Derbyshire, England"] = {}, ["Devon, England"] = {}, ["Dorset, England"] = {}, ["County Durham, England"] = {}, ["East Sussex, England"] = {}, ["Essex, England"] = {}, ["Gloucestershire, England"] = {}, ["Greater London, England"] = {}, ["Greater Manchester, England"] = {}, ["Hampshire, England"] = {}, ["Herefordshire, England"] = {}, ["Hertfordshire, England"] = {}, -- ["Humberside, England"] = {}, -- no longer (1974 to 1996) -- ["Huntingdonshire, England"] = {}, -- no longer (historic county) ["Isle of Wight, England"] = {the = true}, ["Kent, England"] = {}, ["Lancashire, England"] = {}, ["Leicestershire, England"] = {}, ["Lincolnshire, England"] = {}, ["Merseyside, England"] = {}, -- ["Middlesex, England"] = {}, -- no longer (historic county) ["Norfolk, England"] = {}, ["Northamptonshire, England"] = {}, ["Northumberland, England"] = {}, ["North Yorkshire, England"] = {}, ["Nottinghamshire, England"] = {}, ["Oxfordshire, England"] = {}, ["Rutland, England"] = {}, ["Shropshire, England"] = {}, ["Somerset, England"] = {}, ["South Humberside, England"] = {}, ["South Yorkshire, England"] = {}, ["Staffordshire, England"] = {}, ["Suffolk, England"] = {}, ["Surrey, England"] = {}, -- ["Sussex, England"] = {}, -- no longer (historic county) ["Tyne and Wear, England"] = {}, ["Warwickshire, England"] = {}, ["West Midlands, England"] = {the = true, wp = "%l (county)"}, -- ["Westmorland, England"] = {}, -- no longer (historic county) ["West Sussex, England"] = {}, ["West Yorkshire, England"] = {}, ["Wiltshire, England"] = {}, ["Worcestershire, England"] = {}, -- ["Yorkshire, England"] = {}, -- no longer (historic county) ["East Riding of Yorkshire, England"] = {the = true}, } -- counties of England export.england_group = { default_container = {key = "England", placetype = "constituent country"}, default_placetype = "county", default_divs = { "districts", {type = "local government districts", cat_as = "districts"}, { type = "local government districts with borough status", cat_as = {"districts", "boroughs"}, }, {type = "boroughs", cat_as = {"districts", "boroughs"}}, "civil parishes", }, data = export.england_counties, } export.northern_ireland_counties = { ["County Antrim, Northern Ireland"] = {}, ["County Armagh, Northern Ireland"] = {}, ["City of Belfast, Northern Ireland"] = {the = true, is_city = true, wp = "Belfast"}, ["County Down, Northern Ireland"] = {}, ["County Fermanagh, Northern Ireland"] = {}, ["County Londonderry, Northern Ireland"] = {}, ["City of Derry, Northern Ireland"] = {the = true, is_city = true, wp = "Derry"}, ["County Tyrone, Northern Ireland"] = {}, } -- counties of Northern Ireland export.northern_ireland_group = { key_to_placename = make_irish_type_key_to_placename(", Northern Ireland$"), placename_to_key = make_irish_type_placename_to_key(", Northern Ireland"), default_container = {key = "Northern Ireland", placetype = "constituent country"}, default_placetype = "county", data = export.northern_ireland_counties, } export.scotland_council_areas = { ["Aberdeenshire, Scotland"] = {}, ["Angus, Scotland"] = {wp = "%l, %c"}, ["Argyll and Bute, Scotland"] = {}, ["City of Aberdeen, Scotland"] = {the = true, wp = "Aberdeen"}, ["Aberdeen"] = {alias_of = "City of Aberdeen, Scotland"}, ["Aberdeen City"] = {alias_of = "City of Aberdeen, Scotland"}, ["City of Dundee, Scotland"] = {the = true, wp = "Dundee"}, ["Dundee"] = {alias_of = "City of Dundee, Scotland"}, ["Dundee City"] = {alias_of = "City of Dundee, Scotland"}, ["City of Edinburgh, Scotland"] = {the = true, wp = "%l council area"}, ["Edinburgh"] = {alias_of = "City of Edinburgh, Scotland"}, ["City of Glasgow, Scotland"] = {the = true, wp = "Glasgow"}, ["Glasgow"] = {alias_of = "City of Glasgow, Scotland"}, ["Clackmannanshire, Scotland"] = {}, ["Dumfries and Galloway, Scotland"] = {}, ["East Ayrshire, Scotland"] = {}, ["East Dunbartonshire, Scotland"] = {}, ["East Lothian, Scotland"] = {}, ["East Renfrewshire, Scotland"] = {}, ["Falkirk, Scotland"] = {wp = "%l council area"}, ["Fife, Scotland"] = {}, ["Highland, Scotland"] = {wp = "%l council area"}, ["Inverclyde, Scotland"] = {}, ["Midlothian, Scotland"] = {}, ["Moray, Scotland"] = {}, ["North Ayrshire, Scotland"] = {}, ["North Lanarkshire, Scotland"] = {}, ["Orkney Islands, Scotland"] = {the = true}, ["Perth and Kinross, Scotland"] = {}, ["Renfrewshire, Scotland"] = {}, ["Scottish Borders, Scotland"] = {the = true}, ["Shetland Islands, Scotland"] = {the = true}, ["South Ayrshire, Scotland"] = {}, ["South Lanarkshire, Scotland"] = {}, ["Stirling, Scotland"] = {wp = "%l council area"}, ["West Dunbartonshire, Scotland"] = {}, ["West Lothian, Scotland"] = {}, ["Western Isles, Scotland"] = {the = true, wp = "Outer Hebrides"}, ["Na h-Eileanan Siar, Scotland"] = {alias_of = "Western Isles, Scotland"}, } -- council areas of Scotland export.scotland_group = { default_container = {key = "Scotland", placetype = "constituent country"}, default_placetype = "council area", data = export.scotland_council_areas, } export.wales_principal_areas = { ["Blaenau Gwent, Wales"] = {}, ["Bridgend, Wales"] = {wp = "%l County Borough"}, ["Caerphilly, Wales"] = {wp = "%l County Borough"}, -- ["Cardiff, Wales"] = {placetype = "city"}, ["Carmarthenshire, Wales"] = {placetype = "county"}, ["Ceredigion, Wales"] = {placetype = "county"}, ["Conwy, Wales"] = {wp = "%l County Borough"}, ["Denbighshire, Wales"] = {placetype = "county"}, ["Flintshire, Wales"] = {placetype = "county"}, ["Gwynedd, Wales"] = {placetype = "county"}, ["Isle of Anglesey, Wales"] = {the = true, placetype = "county"}, ["Anglesey, Wales"] = {alias_of = "Isle of Anglesey, Wales"}, -- differs in "the" ["Merthyr Tydfil, Wales"] = {wp = "%l County Borough"}, ["Monmouthshire, Wales"] = {placetype = "county"}, ["Neath Port Talbot, Wales"] = {}, -- ["Newport, Wales"] = {placetype = "city", wp = "%l, %c"}, ["Pembrokeshire, Wales"] = {placetype = "county"}, ["Powys, Wales"] = {placetype = "county"}, ["Rhondda Cynon Taf, Wales"] = {}, -- ["Swansea, Wales"] = {placetype = "city"}, ["Torfaen, Wales"] = {}, ["Vale of Glamorgan, Wales"] = {the = true}, ["Wrexham, Wales"] = {wp = "%l County Borough"}, } -- principal areas (cities, counties and county boroughs) of Wales export.wales_group = { default_container = {key = "Wales", placetype = "constituent country"}, default_placetype = "county borough", data = export.wales_principal_areas, } export.united_states_states = { ["Alabama, USA"] = {}, ["Alaska, USA"] = {divs = { {type = "boroughs", container_parent_type = "counties"}, {type = "borough seats", container_parent_type = "county seats"}, }}, ["Arizona, USA"] = {}, ["Arkansas, USA"] = {}, ["California, USA"] = {}, ["Colorado, USA"] = {divs = {"counties", "county seats", "municipalities"}}, ["Connecticut, USA"] = {divs = {"counties", "county seats", "municipalities"}}, ["Delaware, USA"] = {}, ["Florida, USA"] = {}, ["Georgia, USA"] = {wp = "%l (U.S. state)"}, ["Hawaii, USA"] = {addl_parents = {"Polynesia"}}, ["Idaho, USA"] = {}, ["Illinois, USA"] = {}, ["Indiana, USA"] = {}, ["Iowa, USA"] = {}, ["Kansas, USA"] = {}, ["Kentucky, USA"] = {}, ["Louisiana, USA"] = {divs = { {type = "parishes", container_parent_type = "counties"}, {type = "parish seats", container_parent_type = "county seats"}, }}, ["Maine, USA"] = {}, ["Maryland, USA"] = {}, ["Massachusetts, USA"] = {}, ["Michigan, USA"] = {}, ["Minnesota, USA"] = {}, ["Mississippi, USA"] = {}, ["Missouri, USA"] = {}, ["Montana, USA"] = {}, ["Nebraska, USA"] = {}, ["Nevada, USA"] = {}, ["New Hampshire, USA"] = {}, ["New Jersey, USA"] = {divs = { "counties", "county seats", {type = "boroughs", prep = "in"}, }}, ["New Mexico, USA"] = {}, ["New York, USA"] = {wp = "%l (state)"}, ["North Carolina, USA"] = {}, ["North Dakota, USA"] = {}, ["Ohio, USA"] = {}, ["Oklahoma, USA"] = {}, ["Oregon, USA"] = {}, ["Pennsylvania, USA"] = {divs = { "counties", "county seats", {type = "boroughs", prep = "in"}, }}, ["Rhode Island, USA"] = {}, ["South Carolina, USA"] = {}, ["South Dakota, USA"] = {}, ["Tennessee, USA"] = {}, ["Texas, USA"] = {}, ["Utah, USA"] = {}, ["Vermont, USA"] = {}, ["Virginia, USA"] = {}, ["Washington, USA"] = {wp = "%l (state)"}, ["West Virginia, USA"] = {}, ["Wisconsin, USA"] = {}, ["Wyoming, USA"] = {}, } -- states of the United States export.united_states_group = { placename_to_key = make_placename_to_key(", USA"), default_container = "United States", default_placetype = "state", default_divs = {"counties", "county seats"}, addl_divs = { {type = "census-designated places", prep = "in"}, {type = "unincorporated communities", prep = "in"}, }, data = export.united_states_states, } export.vietnam_provinces = { -- [[Northeast (Vietnam)|Northeast]] region ["Bắc Giang Province, Vietnam"] = {}, -- capital [[Bắc Giang]] ["Bắc Kạn Province, Vietnam"] = {}, -- capital [[Bắc Kạn]] ["Cao Bằng Province, Vietnam"] = {}, -- capital [[Cao Bằng]] ["Hà Giang Province, Vietnam"] = {}, -- capital [[Hà Giang]] ["Lạng Sơn Province, Vietnam"] = {}, -- capital [[Lạng Sơn]] ["Phú Thọ Province, Vietnam"] = {}, -- capital [[Việt Trì]] ["Quảng Ninh Province, Vietnam"] = {}, -- capital [[Hạ Long]] ["Thái Nguyên Province, Vietnam"] = {}, -- capital [[Thái Nguyên]] ["Tuyên Quang Province, Vietnam"] = {}, -- capital [[Tuyên Quang]] -- [[Northwest (Vietnam)|Northwest]] region ["Lào Cai Province, Vietnam"] = {}, -- capital [[Lào Cai]] ["Yên Bái Province, Vietnam"] = {}, -- capital [[Yên Bái]] ["Điện Biên Province, Vietnam"] = {}, -- capital [[Điện Biên Phủ]] ["Hoà Bình Province, Vietnam"] = {}, -- capital [[Hoà Bình City|Hoà Bình]] ["Hòa Bình Province, Vietnam"] = {alias_of = "Hoà Bình Province, Vietnam", display = true}, ["Lai Châu Province, Vietnam"] = {}, -- capital [[Lai Châu]] ["Sơn La Province, Vietnam"] = {}, -- capital [[Sơn La]] -- [[Red River Delta]] region ["Bắc Ninh Province, Vietnam"] = {}, -- capital [[Bắc Ninh]] ["Hà Nam Province, Vietnam"] = {}, -- capital [[Phủ Lý]] ["Hải Dương Province, Vietnam"] = {}, -- capital [[Hải Dương]] ["Hưng Yên Province, Vietnam"] = {}, -- capital [[Hưng Yên]] ["Nam Định Province, Vietnam"] = {}, -- capital [[Nam Định]] ["Ninh Bình Province, Vietnam"] = {}, -- capital [[Ninh Bình|Hoa Lư]] ["Thái Bình Province, Vietnam"] = {}, -- capital [[Thái Bình]] ["Vĩnh Phúc Province, Vietnam"] = {}, -- capital [[Vĩnh Yên]] -- ["Hanoi"] = {placetype = {"municipality", "city"}}, -- capital [[Hoàn Kiếm district]] -- ["Haiphong"] = {placetype = {"municipality", "city"}}, -- capital [[Hồng Bàng district]] -- [[North Central Coast]] region ["Hà Tĩnh Province, Vietnam"] = {}, -- capital [[Hà Tĩnh]] ["Nghệ An Province, Vietnam"] = {}, -- capital [[Vinh]] ["Quảng Bình Province, Vietnam"] = {}, -- capital [[Đồng Hới]] ["Quảng Trị Province, Vietnam"] = {}, -- capital [[Đông Hà]] ["Thanh Hoá Province, Vietnam"] = {}, -- capital [[Thanh Hoá]] ["Thanh Hóa Province, Vietnam"] = {alias_of = "Thanh Hoá Province, Vietnam", display = true}, -- ["Hue"] = {placetype = {"municipality", "city"}, wp = "Huế"}, -- capital [[Thuận Hoá district]] -- [[Central Highlands (Vietnam)|Central Highlands]] region ["Đắk Lắk Province, Vietnam"] = {}, -- capital [[Buôn Ma Thuột]] ["Đăk Nông Province, Vietnam"] = {}, -- capital [[Gia Nghĩa]] ["Gia Lai Province, Vietnam"] = {}, -- capital [[Pleiku]] ["Kon Tum Province, Vietnam"] = {}, -- capital [[Kon Tum]] ["Lâm Đồng Province, Vietnam"] = {}, -- capital [[Đà Lạt]] -- [[South Central Coast]] region ["Bình Định Province, Vietnam"] = {}, -- capital [[Quy Nhon]] ["Bình Thuận Province, Vietnam"] = {}, -- capital [[Phan Thiết]] ["Khánh Hoà Province, Vietnam"] = {}, -- capital [[Nha Trang]] ["Khánh Hòa Province, Vietnam"] = {alias_of = "Khánh Hoà Province, Vietnam", display = true}, ["Ninh Thuận Province, Vietnam"] = {}, -- capital [[Phan Rang–Tháp Chàm]] ["Phú Yên Province, Vietnam"] = {}, -- capital [[Tuy Hoà]] ["Quảng Nam Province, Vietnam"] = {}, -- capital [[Tam Kỳ]] ["Quảng Ngãi Province, Vietnam"] = {}, -- capital [[Quảng Ngãi]] -- ["Da Nang"] = {placetype = {"municipality", "city"}}, -- capital [[Hải Châu district]] -- [[Southeast (Vietnam)|Southeast]] region ["Bà Rịa–Vũng Tàu Province, Vietnam"] = {}, -- capital [[Bà Rịa]] ["Bình Dương Province, Vietnam"] = {}, -- capital [[Thủ Dầu Một]] ["Bình Phước Province, Vietnam"] = {}, -- capital [[Đồng Xoài]] ["Đồng Nai Province, Vietnam"] = {}, -- capital [[Biên Hoà]] ["Tây Ninh Province, Vietnam"] = {}, -- capital [[Tây Ninh]] -- ["Ho Chi Minh City"] = {placetype = {"municipality", "city"}}, -- capital [[District 1, Ho Chi Minh City|'''District 1''']] -- [[Mekong Delta]] region ["An Giang Province, Vietnam"] = {}, -- capital [[Long Xuyên]] ["Bạc Liêu Province, Vietnam"] = {}, -- capital [[Bạc Liêu]] ["Bến Tre Province, Vietnam"] = {}, -- capital [[Bến Tre]] ["Cà Mau Province, Vietnam"] = {}, -- capital [[Cà Mau]] ["Đồng Tháp Province, Vietnam"] = {}, -- capital [[Cao Lãnh City|Cao Lãnh]] ["Hậu Giang Province, Vietnam"] = {}, -- capital [[Vị Thanh]] ["Kiên Giang Province, Vietnam"] = {}, -- capital [[Rạch Giá]] ["Long An Province, Vietnam"] = {}, -- capital [[Tân An]] ["Sóc Trăng Province, Vietnam"] = {}, -- capital [[Sóc Trăng]] ["Tiền Giang Province, Vietnam"] = {}, -- capital [[Mỹ Tho]] ["Trà Vinh Province, Vietnam"] = {}, -- capital [[Trà Vinh]] ["Vĩnh Long Province, Vietnam"] = {}, -- capital [[Vĩnh Long]] -- ["Can Tho"] = {placetype = {"municipality", "city"}, wp = "Cần Thơ"}, -- capital [[Ninh Kiều district]] } -- provinces of Vietnam export.vietnam_group = { key_to_placename = make_key_to_placename(", Vietnam$", " Province$"), placename_to_key = make_placename_to_key(", Vietnam", " Province"), default_container = "Việt Nam", default_placetype = "province", -- There may not be enough districts to subcategorize like this. -- default_divs = "districts", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.vietnam_provinces, } ----------------------------------------------------------------------------------- -- City data -- ----------------------------------------------------------------------------------- export.australia_cities = { ["Adelaide"] = {container = "South Australia"}, -- 1,450,000 (Agglomeration) ["Brisbane"] = {container = "Queensland"}, -- 3,450,000 (Conglomeration; including the Gold Coast [750,997 2024 estiamte]) ["Canberra"] = {container = {key = "Australian Capital Territory, Australia", placetype = "territory"}}, -- 510,641 (2024 estimate) ["Melbourne"] = {container = "Victoria"}, -- 5,200,000 (Agglomeration) ["Newcastle, New South Wales"] = {container = "New South Wales", wp = "%l, %c"}, -- 534,033 (2024 estimate) ["Newcastle"] = {alias_of = "Newcastle, New South Wales"}, ["Perth"] = {container = "Western Australia"}, -- 2,350,000 (Agglomeration) ["Sydney"] = {container = "New South Wales"}, -- 5,100,000 (Agglomeration) } export.australia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Australia", "state"), default_placetype = "city", data = export.australia_cities, } export.brazil_cities = { -- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01. ["São Paulo"] = {container = "São Paulo"}, -- 22,600,000 (Consolidated Urban Area; including Guarulhos) ["Sao Paulo"] = {alias_of = "São Paulo", display = true}, ["Rio de Janeiro"] = {container = "Rio de Janeiro"}, -- 13,600,000 (Consolidated Urban Area) ["Belo Horizonte"] = {container = "Minas Gerais"}, -- 5,300,000 ["Recife"] = {container = "Pernambuco"}, -- 4,100,000 ["Porto Alegre"] = {container = "Rio Grande do Sul"}, -- 3,950,000 (Consolidated Urban Area) ["Brasília"] = {container = "Distrito Federal"}, -- 3,850,000 ["Brasilia"] = {alias_of = "Brasília", display = true}, ["Fortaleza"] = {container = "Ceará"}, -- 3,825,000 ["Salvador"] = {container = "Bahia", wp = "%l, %c", commonscat = "%l (%c)"}, -- 3,400,000 ["Curitiba"] = {container = "Paraná"}, -- 3,375,000 ["Campinas"] = {container = "São Paulo"}, -- 3,250,000 ["Goiânia"] = {container = "Goiás"}, -- 2,525,000 ["Goiania"] = {alias_of = "Goiânia", display = true}, ["Manaus"] = {container = "Amazonas"}, -- 2,275,000 ["Belém"] = {container = "Pará"}, -- 2,200,000 ["Belem"] = {alias_of = "Belém", display = true}, ["Vitória"] = {container = "Espírito Santo", wp = "%l, %c"}, -- 1,870,000 ["Vitoria"] = {alias_of = "Vitória", display = true}, ["Santos"] = {container = "São Paulo", wp = "%l, %c"}, -- 1,760,000 ["São Luís"] = {container = "Maranhão", wp = "%l, %c"}, -- 1,530,000 ["Sao Luis"] = {alias_of = "São Luís", display = true}, ["Natal"] = {container = "Rio Grande do Norte", wp = "%l, %c"}, -- 1,360,000 ["Florianópolis"] = {container = "Santa Catarina"}, -- 1,260,000 ["Florianopolis"] = {alias_of = "Florianópolis", display = true}, ["Maceió"] = {container = "Alagoas"}, -- 1,220,000 ["Maceio"] = {alias_of = "Maceió", display = true}, ["João Pessoa"] = {container = "Paraíba", wp = "%l, %c"}, -- 1,210,000 ["Joao Pessoa"] = {alias_of = "João Pessoa", display = true}, ["São José dos Campos"] = {container = "São Paulo"}, -- 1,090,000 ["Sao Jose dos Campos"] = {alias_of = "São José dos Campos", display = true}, ["Londrina"] = {container = "Paraná"}, -- 1,050,000 ["Teresina"] = {container = "Piauí"}, -- 1,040,000 } export.brazil_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Brazil", "state"), default_placetype = "city", data = export.brazil_cities, } export.canada_cities = { -- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01. ["Toronto"] = {container = "Ontario"}, -- 7,850,000 (Consolidated Urban Area; including Hamilton) ["Montreal"] = {container = "Quebec"}, -- 4,500,000 (Consolidated Urban Area) ["Vancouver"] = {container = "British Columbia"}, -- 3,175,000 (Consolidated Urban Area) ["Calgary"] = {container = "Alberta"}, -- 1,510,000 (Consolidated Urban Area) ["Edmonton"] = {container = "Alberta"}, -- 1,460,000 (Consolidated Urban Area) ["Ottawa"] = {container = "Ontario"}, -- 1,390,000 (Consolidated Urban Area) ["Quebec City"] = {container = "Quebec"}, -- 839,311 metro per Wikipedia (2021 census) ["Winnipeg"] = {container = "Manitoba"}, -- 834,678 metro per Wikipedia (2021 census) ["Hamilton"] = {container = "Ontario", wp = "%l, %c"}, -- 785,184 metro per Wikipedia (2021 census) ["Kitchener"] = {container = "Ontario", wp = "%l, %c"}, -- 575,847 metro per Wikipedia (2021 census) } export.canada_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Canada", "province"), default_placetype = "city", data = export.canada_cities, } export.france_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. ["Paris"] = {container = "Île-de-France"}, -- 11,500,000 (Conglomeration) ["Lyon"] = {container = "Auvergne-Rhône-Alpes"}, -- 2,050,000 (Conglomeration) ["Lyons"] = {alias_of = "Lyon", display = true}, ["Marseille"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 1,710,000 (Conglomeration) ["Marseilles"] = {alias_of = "Marseille", display = true}, ["Lille"] = {container = "Hauts-de-France"}, -- 1,320,000 (Conglomeration) ["Bordeaux"] = {container = "Nouvelle-Aquitaine"}, -- 1,160,000 (Conglomeration) ["Toulouse"] = {container = "Occitania"}, -- 1,150,000 (Conglomeration) ["Nice"] = {container = "Provence-Alpes-Côte d'Azur"}, ["Nantes"] = {container = "Pays de la Loire"}, ["Strasbourg"] = {container = "Grand Est"}, ["Rennes"] = {container = "Brittany"}, } export.france_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", France", "region"), default_placetype = "city", data = export.france_cities, } export.germany_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. -- listed under Rhein-Ruhr Area, total population 10,900,000 (Consolidated Urban Area) ["Cologne"] = {container = "North Rhine-Westphalia"}, ["Köln"] = {alias_of = "Cologne", display = true}, ["Düsseldorf"] = {container = "North Rhine-Westphalia"}, ["Dusseldorf"] = {alias_of = "Düsseldorf", display = true}, ["Dortmund"] = {container = "North Rhine-Westphalia"}, ["Essen"] = {container = "North Rhine-Westphalia"}, ["Duisberg"] = {container = "North Rhine-Westphalia"}, ["Berlin"] = {}, -- 4,700,000 ["Frankfurt"] = {container = "Hesse"}, -- 3,225,000 ["Frankfurt am Main"] = {alias_of = "Frankfurt"}, -- not a display alias as it's longer ["Hamburg"] = {}, -- 2,900,000 ["Munich"] = {container = "Bavaria"}, -- 2,300,000 ["Stuttgart"] = {container = "Baden-Württemberg"}, -- 2,300,000 ["Mannheim"] = {container = "Baden-Württemberg"}, -- 1,550,000 ["Nuremberg"] = {container = "Bavaria"}, -- 1,120,000 ["Hanover"] = {"Lower Saxony"}, -- 1,090,000 ["Bielefeld"] = {container = "North Rhine-Westphalia"}, -- 1,080,000 ["Leipzig"] = {container = "Saxony"}, -- 1,080,000 ["Aachen"] = {container = "North Rhine-Westphalia"}, -- 1,000,000 ["Aix-la-Chapelle"] = {alias_of = "Aachen"}, -- historical; not a display alias ["Bremen"] = {}, } export.germany_cities_group = { default_container = "Germany", canonicalize_key_container = make_canonicalize_key_container(", Germany", "state"), default_placetype = "city", data = export.germany_cities, } export.india_cities = { -- This lists the 65 metro areas per Demographia's 2023 estimates, as found in -- [[w:List_of_million-plus_urban_agglomerations_in_India]]. The last census in India (as of April 2025) was -- conducted in 2011, and the results are not accurate any more. ["Delhi"] = {container = {key = "Delhi, India", placetype = "union territory"}}, -- 31,190,000 ["Mumbai"] = {container = "Maharashtra"}, -- 25,189,000 ["Kolkata"] = {container = "West Bengal"}, -- 21,747,000 ["Bangalore"] = {container = "Karnataka", wp = "Bengaluru"}, -- 15,257,000 ["Bengaluru"] = {alias_of = "Bangalore"}, ["Chennai"] = {container = "Tamil Nadu"}, -- 11,570,000 ["Hyderabad"] = {container = "Telangana"}, -- 9,797,000 ["Ahmedabad"] = {container = "Gujarat"}, -- 8,006,000 ["Pune"] = {container = "Maharashtra"}, -- 6,819,000 ["Surat"] = {container = "Gujarat"}, -- 6,601,000 ["Lucknow"] = {container = "Uttar Pradesh"}, -- 4,661,000 ["Jaipur"] = {container = "Rajasthan"}, -- 4,360,000 ["Kanpur"] = {container = "Uttar Pradesh"}, -- 4,350,000 ["Indore"] = {container = "Madhya Pradesh"}, -- 3,765,000 ["Nagpur"] = {container = "Maharashtra"}, -- 3,493,000 ["Patna"] = {container = "Bihar"}, -- 3,331,000 ["Varanasi"] = {container = "Uttar Pradesh"}, -- 3,229,000 ["Kozhikode"] = {container = "Kerala"}, -- 3,049,000 ["Thiruvananthapuram"] = {container = "Kerala"}, -- 2,851,000 ["Agra"] = {container = "Uttar Pradesh"}, -- 2,737,000 ["Bhopal"] = {container = "Madhya Pradesh"}, -- 2,562,000 ["Coimbatore"] = {container = "Tamil Nadu"}, -- 2,551,000 ["Allahabad"] = {container = "Uttar Pradesh", wp = "Prayagraj"}, -- 2,438,000 ["Prayagraj"] = {alias_of = "Allahabad"}, ["Kochi"] = {container = "Kerala"}, -- 2,381,000 ["Ludhiana"] = {container = "Punjab"}, -- 2,205,000 ["Vadodara"] = {container = "Gujarat"}, -- 2,182,000 ["Chandigarh"] = {container = {key = "Chandigarh, India", placetype = "union territory"}}, -- 2,168,000 ["Madurai"] = {container = "Tamil Nadu"}, -- 2,048,000 ["Meerut"] = {container = "Uttar Pradesh"}, -- 2,011,000 ["Visakhapatnam"] = {container = "Andhra Pradesh"}, -- 2,005,000 ["Jamshedpur"] = {container = "Jharkhand"}, -- 1,925,000 ["Malappuram"] = {container = "Kerala"}, -- 1,868,000 ["Nashik"] = {container = "Maharashtra"}, -- 1,810,000 ["Asansol"] = {container = "West Bengal"}, -- 1,720,000 ["Aligarh"] = {container = "Uttar Pradesh"}, -- 1,660,000 ["Ranchi"] = {container = "Jharkhand"}, -- 1,638,000 ["Thrissur"] = {container = "Kerala"}, -- 1,578,000 ["Kollam"] = {container = "Kerala"}, -- 1,576,000 ["Jabalpur"] = {container = "Madhya Pradesh"}, -- 1,533,000 ["Dhanbad"] = {container = "Jharkhand"}, -- 1,503,000 ["Jodhpur"] = {container = "Rajasthan"}, -- 1,497,000 ["Aurangabad"] = {container = "Maharashtra"}, -- 1,490,000 ["Chhatrapati Sambhajinagar"] = {alias_of = "Aurangabad"}, ["Rajkot"] = {container = "Gujarat"}, -- 1,487,000 ["Gwalior"] = {container = "Madhya Pradesh"}, -- 1,477,000 ["Raipur"] = {container = "Chhattisgarh"}, -- 1,429,000 ["Gorakhpur"] = {container = "Uttar Pradesh"}, -- 1,410,000 ["Kannur"] = {container = "Kerala"}, -- 1,360,000 ["Bareilly"] = {container = "Uttar Pradesh"}, -- 1,355,000 ["Guwahati"] = {container = "Assam"}, -- 1,355,000 ["Moradabad"] = {container = "Uttar Pradesh"}, -- 1,345,000 ["Amritsar"] = {container = "Punjab"}, -- 1,313,000 ["Mysore"] = {container = "Karnataka"}, -- 1,296,000 ["Bhilai"] = {container = "Chhattisgarh"}, -- 1,293,000 ["Durg-Bhilainagar"] = {alias_of = "Bhilai"}, ["Durg-Bhilai"] = {alias_of = "Bhilai"}, ["Durg"] = {alias_of = "Bhilai"}, ["Bhilainagar"] = {alias_of = "Bhilai"}, ["Vijayawada"] = {container = "Andhra Pradesh"}, -- 1,232,000 ["Srinagar"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,212,000 ["Salem"] = {container = "Tamil Nadu", wp = "%l, %c"}, -- 1,189,000 ["Kota"] = {container = "Rajasthan"}, -- 1,172,000 ["Jalandhar"] = {container = "Punjab"}, -- 1,165,000 ["Saharanpur"] = {container = "Uttar Pradesh"}, -- 1,152,000 ["Dehradun"] = {container = "Uttarakhand"}, -- 1,136,000 ["Tiruchirappalli"] = {container = "Tamil Nadu"}, -- 1,131,000 ["Bhubaneswar"] = {container = "Odisha"}, -- 1,112,000 ["Jammu"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,103,000 ["Solapur"] = {container = "Maharashtra"}, -- 1,082,000 ["Hubli-Dharwad"] = {container = "Karnataka", wp = "Hubli–Dharwad"}, -- 1,062,000; wp with en dash ["Hubli"] = {alias_of = "Hubli-Dharwad"}, ["Dharwad"] = {alias_of = "Hubli-Dharwad"}, ["Puducherry"] = {container = {key = "Puducherry, India", placetype = "union territory"}}, -- 1,024,000 ["Pondicherry"] = {alias_of = "Puducherry", display = true}, -- satellite/secondary cities of metro area (none in citypopulation.de) ["Ghaziabad"] = {container = "Uttar Pradesh"}, -- 1,729,000 city, 2,358,525 urban agglomeration per 2011 census; 3,406,061 2025 estimate from official website; part of Delhi metro area ["Faridabad"] = {container = "Haryana"}, -- 1,414,050 city per 2011 census; part of Delhi metro area ["Thane"] = {container = "Maharashtra"}, -- 1,841,488 city per 2011 census; part of Mumbai metro area ["Kalyan-Dombivli"] = {container = "Maharashtra"}, -- 1,246,381 city per 2011 census; part of Mumbai metro area ["Kalyan-Dombivali"] = {alias_of = "Kalyan-Dombivli", display = true}, ["Kalyan"] = {alias_of = "Kalyan-Dombivli"}, ["Dombivli"] = {alias_of = "Kalyan-Dombivli"}, ["Dombivali"] = {alias_of = "Kalyan-Dombivli"}, ["Vasai-Virar"] = {container = "Maharashtra"}, -- 1,221,233 city per 2011 census; part of Mumbai metro area ["Vasai"] = {alias_of = "Vasai-Virar"}, ["Virar"] = {alias_of = "Vasai-Virar"}, ["Navi Mumbai"] = {container = "Maharashtra"}, -- 1,120,547 city per 2011 census; part of Mumbai metro area ["Howrah"] = {container = "West Bengal"}, -- 1,077,075 city ("metropolis"), 2,811,344 "metro" per 2011 census; part of Kolkata metro area ["Pimpri-Chinchwad"] = {container = "Maharashtra"}, -- 1,727,692 per 2011 census; part of Pune metro area ["Pimpri Chinchwad"] = {alias_of = "Pimpri-Chinchwad", display = true}, } export.india_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", India", "state"), default_placetype = "city", data = export.india_cities, } export.indonesia_cities = { -- cities where the city proper has more than 1,000,000 people as of mid-2023 estimate ["Jakarta"] = {container = "Special Capital Region of Jakarta", divs = { {type = "subdistricts", container_parent_type = false}, }}, ["Surabaya"] = {container = "East Java"}, ["Bekasi"] = {container = "West Java"}, -- part of Jakarta metro area ["Bandung"] = {container = "West Java"}, ["Medan"] = {container = "North Sumatra"}, ["Depok"] = {container = "West Java"}, -- part of Jakarta metro area ["Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area ["Palembang"] = {container = "South Sumatra"}, ["Semarang"] = {container = "Central Java"}, ["Makassar"] = {container = "South Sulawesi"}, ["South Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area ["Batam"] = {container = "Riau Islands"}, ["Bogor"] = {container = "West Java"}, -- part of Jakarta metro area ["Pekanbaru"] = {container = "Riau"}, ["Bandar Lampung"] = {container = "Lampung"}, -- other metro areas over 1,000,000 people ["Padang"] = {container = "West Sumatra"}, ["Samarinda"] = {container = "East Kalimantan"}, ["Malang"] = {container = "East Java"}, ["Yogyakarta"] = {container = "Special Region of Yogyakarta"}, ["Denpasar"] = {container = "Bali"}, ["Cirebon"] = {container = "West Java"}, ["Surakarta"] = {container = "Central Java"}, ["Banjarmasin"] = {container = "South Kalimantan"}, ["Tasikmalaya"] = {container = "West Java"}, } export.indonesia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Indonesia", "province"), default_placetype = "city", data = export.indonesia_cities, } export.italy_cities = { -- Data per [[w:List_of_metropolitan_areas_of_Italy]]. There are several lists given; the most recent one, used -- here, only gives estimates as of Jan 1, 2014. ["Milan"] = {container = "Lombardy"}, -- 6,623,798 ["Naples"] = {container = "Campania"}, -- 5,294,546 ["Rome"] = {container = "Lazio"}, -- 4,447,881 ["Turin"] = {container = "Piedmont"}, -- 1,865,284 ["Venice"] = {container = "Veneto"}, -- 1,645,900 ["Florence"] = {container = "Tuscany"}, -- 1,485,030 ["Bari"] = {container = "Apulia"}, -- 1,257,459 ["Palermo"] = {container = "Sicily"}, -- 1,183,084 -- include a few just below 1,000,000 metro area that may be above it by now (depending on the definition). ["Catania"] = {container = "Sicily"}, -- 988,240 ["Brescia"] = {container = "Lombardy"}, -- 924,090 ["Genoa"] = {container = "Liguria"}, -- 861,318 } export.italy_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Italy", "region"), default_placetype = "city", data = export.italy_cities, } export.japan_cities = { -- Population figures from [[w:List of cities in Japan]]. Metro areas from -- [[w:List of metropolitan areas in Japan]]. ["Tokyo"] = {keydesc = "[[Tokyo]] Metropolis, the [[capital city]] and a [[prefecture]] of [[Japan]] (which is a country in [[Asia]])", placetype = {"city", "prefecture"}, divs = { {type = "special wards", container_parent_type = false}, {type = "cities", prep = "in"}, }, }, ["Yokohama"] = {container = "Kanagawa"}, -- 3,697,894 ["Osaka"] = {container = "Osaka"}, -- 2,668,586 ["Nagoya"] = {container = "Aichi"}, -- 2,283,289 -- FIXME, Hokkaido is handled specially. ["Sapporo"] = {container = "Hokkaido"}, -- 1,918,096 ["Fukuoka"] = {container = "Fukuoka"}, -- 1,581,527 ["Kobe"] = {container = "Hyōgo"}, -- 1,530,847 ["Kyoto"] = {container = "Kyoto"}, -- 1,474,570 ["Kawasaki"] = {container = "Kanagawa", wp = "%l, Kanagawa"}, -- 1,373,630 ["Saitama"] = {container = "Saitama", wp = "%l (city)", commonscat = "%l, %c"}, -- 1,192,418 ["Hiroshima"] = {container = "Hiroshima"}, -- 1,163,806 ["Sendai"] = {container = "Miyagi"}, -- 1,029,552 -- the remaining cities are considered "central cities" in a 1,000,000+ metro area -- (sometimes there is more than one central city in the area). ["Kitakyushu"] = {container = "Fukuoka"}, -- 986,998 ["Chiba"] = {container = "Chiba", wp = "%l (city)", commonscat = "%l, %c"}, -- 938,695 ["Sakai"] = {container = "Osaka"}, -- 835,333 ["Niigata"] = {container = "Niigata", wp = "%l (city)", commonscat = "%l, %c"}, -- 813,053 ["Hamamatsu"] = {container = "Shizuoka"}, -- 811,431 ["Shizuoka"] = {container = "Shizuoka", wp = "%l (city)", commonscat = "%l, %c"}, -- 710,944 ["Sagamihara"] = {container = "Kanagawa"}, -- 706,342 ["Okayama"] = {container = "Okayama"}, -- 701,293 ["Kumamoto"] = {container = "Kumamoto"}, -- 670,348 ["Kagoshima"] = {container = "Kagoshima"}, -- 605,196 -- skipped 6 cities (Funabashi, Hachiōji, Kawaguchi, Himeji, Matsuyama, Higashiōsaka) -- with population in the range 509k - 587k because not central cities in any -- 1,000,000+ metro area. ["Utsunomiya"] = {container = "Tochigi"}, -- 507,833 } export.japan_cities_group = { default_container = "Japan", canonicalize_key_container = make_canonicalize_key_container(" Prefecture, Japan", "prefecture"), default_placetype = "city", data = export.japan_cities, } export.mexico_cities = { ["Mexico City"] = {}, -- its own state ["Monterrey"] = {container = "Nuevo León"}, ["Guadalajara"] = {container = "Jalisco"}, ["Puebla"] = {container = "Puebla", wp = "%l (city)"}, ["Toluca"] = {container = "State of Mexico"}, ["Tijuana"] = {container = "Baja California"}, -- Include the state in the category for León due to possible confusion with León, Spain. ["León, Guanajuato"] = {container = "Guanajuato", wp = "%l, %c"}, ["León"] = {alias_of = "León, Guanajuato"}, ["Leon"] = {alias_of = "León, Guanajuato", display = true}, ["Querétaro"] = {container = "Querétaro", wp = "%l (city)"}, ["Queretaro"] = {alias_of = "Querétaro", display = true}, ["Ciudad Juárez"] = {container = "Chihuahua"}, ["Juárez"] = {alias_of = "Ciudad Juárez"}, ["Juarez"] = {alias_of = "Ciudad Juárez", display = "Juárez"}, ["Torreón"] = {container = "Coahuila"}, ["Torreon"] = {alias_of = "Torreón", display = true}, -- Include the state in the category for Mérida due to possible confusion with Mérida, Spain or -- Mérida, Venezuela. ["Mérida, Yucatán"] = {container = "Yucatán", wp = "%l, %c"}, ["Mérida"] = {alias_of = "Mérida, Yucatán"}, ["Merida"] = {alias_of = "Mérida, Yucatán", display = true}, ["San Luis Potosí"] = {container = "San Luis Potosí", wp = "%l (city)"}, ["San Luis Potosi"] = {alias_of = "San Luis Potosí", display = true}, ["Aguascalientes"] = {container = "Aguascalientes", wp = "%l (city)"}, ["Mexicali"] = {container = "Baja California"}, } export.mexico_cities_group = { default_container = "Mexico", canonicalize_key_container = make_canonicalize_key_container(", Mexico", "state"), default_placetype = "city", data = export.mexico_cities, } export.nigeria_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. ["Lagos"] = {container = "Lagos"}, -- 21,300,000 (unindicated; population of low reliability) ["Kano"] = {container = "Kano", wp = "%l (city)"}, -- 5,350,000 (unindicated; population of low reliability) ["Ibadan"] = {container = "Oyo"}, -- 3,400,000 (unindicated; population of low reliability) ["Abuja"] = {container = {key = "Federal Capital Territory, Nigeria", placetype = "federal territory"}}, -- 3,050,000 (unindicated; population of low reliability) ["Port Harcourt"] = {container = "Rivers"}, -- 2,250,000 (unindicated; population of low reliability) ["Kaduna"] = {container = "Kaduna"}, -- 1,980,000 (unindicated; population of low reliability) ["Benin City"] = {container = "Edo"}, -- 1,790,000 (unindicated; population of low reliability) ["Aba"] = {container = "Abia", wp = "%l, Nigeria"}, -- 1,280,000 (unindicated; population of low reliability) ["Onitsha"] = {container = "Anambra"}, -- 1,230,000 (unindicated; population of low reliability) ["Maiduguri"] = {container = "Borno"}, -- 1,190,000 (unindicated; population of low reliability) ["Ilorin"] = {container = "Kwara"}, -- 1,160,000 (unindicated; population of low reliability) ["Sokoto"] = {container = "Sokoto", wp = "%l (city)"}, -- 1,140,000 (unindicated; population of low reliability) ["Jos"] = {container = "Plateau"}, -- 1,110,000 (unindicated; population of low reliability) ["Zaria"] = {container = "Kaduna"}, -- 1,050,000 (unindicated; population of low reliability) ["Enugu"] = {container = "Enugu", wp = "%l (city)"}, -- 1,010,000 (unindicated; population of low reliability) } export.nigeria_cities_group = { default_container = "Nigeria", canonicalize_key_container = make_canonicalize_key_container(" State, Nigeria", "state"), default_placetype = "city", data = export.nigeria_cities, } export.pakistan_cities = { -- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01. ["Karachi"] = {container = "Sindh"}, -- 21,000,000 (Consolidated Urban Area) ["Lahore"] = {container = "Punjab"}, -- 14,600,000 (Consolidated Urban Area) ["Rawalpindi"] = {container = "Punjab"}, -- 5,600,000 (Consolidated Urban Area; including Islamabad) ["Islamabad"] = {container = {key = "Islamabad Capital Territory, Pakistan", placetype = "federal territory"}}, -- 5,600,000 (Consolidated Urban Area; including Rawalpindi) ["Faisalabad"] = {container = "Punjab"}, -- 4,125,000 (Consolidated Urban Area) ["Gujranwala"] = {container = "Punjab"}, -- 3,450,000 (Consolidated Urban Area) -- there is also Hyderabad in India (very confusing) ["Hyderabad, Pakistan"] = {container = "Sindh", wp = "%l, %c"}, -- 2,475,000 (Consolidated Urban Area) ["Hyderabad"] = {alias_of = "Hyderabad, Pakistan"}, ["Multan"] = {container = "Punjab"}, -- 2,425,000 (Consolidated Urban Area) ["Peshawar"] = {container = "Khyber Pakhtunkhwa"}, -- 2,150,000 (Consolidated Urban Area) ["Quetta"] = {container = "Balochistan"}, -- 1,720,000 (Urban Area) ["Sargodha"] = {container = "Punjab"}, -- 1,080,000 (Urban Area) ["Sialkot"] = {container = "Punjab"}, -- 1,050,000 (Consolidated Urban Area) } export.pakistan_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Pakistan", "province"), default_placetype = "city", data = export.pakistan_cities, } export.philippines_cities = { -- Skipped some cities in Metro Manila (Taguig, Pasig) which don't have districts. -- Other cities outside Metro Manila skipped as not central city in their urban area. ["Quezon City"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, -- Don't display-canonicalize Foo to Foo City as it may make the display weird. ["Quezon"] = {alias_of = "Quezon City"}, ["Manila"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, ["Davao City"] = {container = "Davao del Sur"}, ["Davao"] = {alias_of = "Davao City"}, ["Caloocan"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, ["Zamboanga City"] = {container = "Zamboanga del Sur"}, ["Zamboanga"] = {alias_of = "Zamboanga City"}, ["Cebu City"] = {container = "Cebu"}, ["Cebu"] = {alias_of = "Cebu City"}, ["Antipolo"] = {container = "Rizal"}, ["Cagayan de Oro"] = {container = "Misamis Oriental"}, ["Dasmariñas"] = {container = "Cavite"}, ["Dasmarinas"] = {alias_of = "Dasmariñas", display = true}, ["General Santos"] = {container = "South Cotabato"}, ["San Jose del Monte"] = {container = "Bulacan"}, ["Bacolod"] = {container = "Negros Occidental"}, ["Calamba"] = {container = "Laguna", wp = "%l, %c"}, ["Angeles"] = {container = "Pampanga", wp = "Angeles City"}, ["Angeles City"] = {alias_of = "Angeles"}, ["Iloilo City"] = {container = "Iloilo"}, ["Iloilo"] = {alias_of = "Iloilo City"}, } export.philippines_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Philippines", "province"), default_placetype = "city", data = export.philippines_cities, } export.russia_cities = { -- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01. ["Moscow"] = {}, -- 18,800,000 (Agglomeration) ["Saint Petersburg"] = {}, -- 6,350,000 (Agglomeration) ["Novosibirsk"] = {container = "Novosibirsk Oblast"}, -- 1,820,000 (Agglomeration) ["Yekaterinburg"] = {container = "Sverdlovsk Oblast"}, -- 1,810,000 (Agglomeration) ["Nizhny Novgorod"] = {container = "Nizhny Novgorod Oblast"}, -- 1,620,000 (Agglomeration) ["Kazan"] = {container = {key = "Tatarstan, Russia", placetype = "republic"}}, -- 1,560,000 (Agglomeration) ["Chelyabinsk"] = {container = "Chelyabinsk Oblast"}, -- 1,430,000 (Agglomeration) ["Rostov-on-Don"] = {container = "Rostov Oblast"}, -- 1,390,000 (Agglomeration) ["Rostov-na-Donu"] = {alias_of = "Rostov-on-Don", display = true}, ["Krasnodar"] = {container = {key = "Krasnodar Krai, Russia", placetype = "krai"}}, -- 1,370,000 (Agglomeration) ["Samara"] = {container = "Samara Oblast"}, -- 1,350,000 (Agglomeration) ["Krasnoyarsk"] = {container = {key = "Krasnoyarsk Krai, Russia", placetype = "krai"}}, -- 1,270,000 (Agglomeration) ["Ufa"] = {container = {key = "Bashkortostan, Russia", placetype = "republic"}}, -- 1,230,000 (Agglomeration) ["Saratov"] = {container = "Saratov Oblast"}, -- 1,170,000 (Agglomeration) ["Omsk"] = {container = "Omsk Oblast"}, -- 1,140,000 (Agglomeration) ["Voronezh"] = {container = "Voronezh Oblast"}, -- 1,130,000 (Agglomeration) ["Volgograd"] = {container = "Volgograd Oblast"}, -- 1,080,000 (Agglomeration) ["Perm"] = {container = {key = "Perm Krai, Russia", placetype = "krai"}, wp = "%l, Russia"}, -- 1,070,000 (Agglomeration) } export.russia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Russia", "oblast"), default_container = "Russia", default_placetype = "city", data = export.russia_cities, } export.saudi_arabia_cities = { -- Figures for the first five from [[w:List of cities and towns in Saudi Arabia]] as of 2022. Unclear if these are -- metro, urban or city proper figures. ["Riyadh"] = {container = "Riyadh"}, -- 7,000,100; 7,700,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Jeddah"] = {container = "Mecca"}, -- 3,751,917; 3,950,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Jedda"] = {alias_of = "Jeddah", display = true}, ["Jiddah"] = {alias_of = "Jeddah", display = true}, ["Jidda"] = {alias_of = "Jeddah", display = true}, ["Dammam"] = {container = "Eastern"}, -- 2,638,166; 2,925,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Mecca"] = {container = "Mecca"}, -- 2,385,509; 2,675,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Makkah"] = {alias_of = "Mecca", display = true}, ["Medina"] = {container = "Medina"}, -- 1,477,023; 1,530,000 per citypopulation.de 2025-01-01 (City) ["Hofuf"] = {container = "Eastern"}, -- 1,060,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Khamis Mushait"] = {container = "Aseer"}, -- 1,030,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Khamis Mushayt"] = {alias_of = "Khamis Mushait", display = true}, } export.saudi_arabia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(" Province, Saudi Arabia", "province"), default_placetype = "city", data = export.saudi_arabia_cities, } export.south_korea_cities = { -- All cities listed are not associated with any county. ["Seoul"] = {}, ["Busan"] = {}, ["Incheon"] = {}, ["Daegu"] = {}, ["Daejeon"] = {}, ["Gwangju"] = {}, ["Ulsan"] = {}, } export.south_korea_cities_group = { default_container = "South Korea", canonicalize_key_container = make_canonicalize_key_container(" County, South Korea", "province"), default_placetype = "city", data = export.south_korea_cities, } export.spain_cities = { ["Madrid"] = {container = "Community of Madrid"}, ["Barcelona"] = {container = "Catalonia"}, ["Valencia"] = {container = "Valencia"}, ["Seville"] = {container = "Andalusia"}, ["Bilbao"] = {container = "Basque Country"}, } export.spain_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Spain", "autonomous community"), default_placetype = "city", data = export.spain_cities, } export.taiwan_cities = { ["New Taipei City"] = {}, ["New Taipei"] = {alias_of = "New Taipei City", display = true}, ["Taichung"] = {}, ["Kaohsiung"] = {wp = "%l, Taiwan"}, ["Taipei"] = {}, ["Taoyuan"] = {}, ["Tainan"] = {}, -- these last three are not special municipalities ["Chiayi"] = {placetype = "city"}, ["Hsinchu"] = {placetype = "city"}, ["Keelung"] = {placetype = "city"}, } export.taiwan_cities_group = { placename_to_key = false, -- don't add ", Taiwan" to make the key canonicalize_key_container = make_canonicalize_key_container(", Taiwan", "county"), default_container = "Taiwan", default_placetype = {"special municipality", "municipality", "city"}, default_is_city = true, default_divs = {"districts"}, data = export.taiwan_cities, } -- NOTE: It's OK to mix cities from different constituent countries; as long as the immediate container is correct, -- everything else will be figured out. export.united_kingdom_cities = { ["London"] = {container = "Greater London"}, ["Manchester"] = {container = "Greater Manchester"}, ["Birmingham"] = {container = "West Midlands"}, ["Liverpool"] = {container = "Merseyside"}, ["Glasgow"] = {container = {key = "City of Glasgow, Scotland", placetype = "council area"}}, ["Leeds"] = {container = "West Yorkshire"}, ["Newcastle upon Tyne"] = {container = "Tyne and Wear"}, ["Newcastle"] = {alias_of = "Newcastle upon Tyne"}, ["Bristol"] = {container = {key = "England", placetype = "constituent country"}}, ["Cardiff"] = {container = {key = "Wales", placetype = "constituent country"}}, ["Portsmouth"] = {container = "Hampshire"}, ["Edinburgh"] = {container = {key = "City of Edinburgh, Scotland", placetype = "council area"}}, -- under 1,000,000 people but principal areas of Wales; requested by [[User:Donnanz]] ["Swansea"] = {container = {key = "Wales", placetype = "constituent country"}}, ["Newport"] = {container = {key = "Wales", placetype = "constituent country"}, wp = "Newport, Wales"}, } export.united_kingdom_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", England", "county"), default_placetype = "city", data = export.united_kingdom_cities, } export.united_states_cities = { -- top 50 CSA's by population, with the top and sometimes 2nd or 3rd city listed ["New York City"] = {container = "New York", wp = "%l", divs = { {type = "boroughs", container_parent_type = false}, }}, -- Don't display-canonicalize as it may make the display weird (e.g. in the context New York, New York). ["New York"] = {alias_of = "New York City"}, ["Newark"] = {container = "New Jersey"}, ["Los Angeles"] = {container = "California", wp = "%l"}, ["Long Beach"] = {container = "California"}, ["Riverside"] = {container = "California"}, ["Chicago"] = {container = "Illinois", wp = "%l"}, ["Washington, D.C."] = {wp = "%l"}, ["Washington, DC"] = {alias_of = "Washington, D.C.", display = true}, ["Washington D.C."] = {alias_of = "Washington, D.C.", display = true}, ["Washington DC"] = {alias_of = "Washington, D.C.", display = true}, -- Don't display-canonicalize as it may make the display weird (e.g. if the holonym is followed by a District of -- Columbia holonym). ["Washington"] = {alias_of = "Washington, D.C."}, ["Baltimore"] = {container = "Maryland", wp = "%l"}, -- to avoid conflict with San Jose in Costa Rica ["San Jose, California"] = {container = "California"}, ["San Jose"] = {alias_of = "San Jose, California"}, ["San Francisco"] = {container = "California", wp = "%l"}, ["Oakland"] = {container = "California"}, ["Boston"] = {container = "Massachusetts", wp = "%l"}, ["Providence"] = {container = "Rhode Island"}, ["Dallas"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"}, ["Fort Worth"] = {container = "Texas"}, ["Philadelphia"] = {container = "Pennsylvania", wp = "%l"}, ["Houston"] = {container = "Texas", wp = "%l"}, ["Miami"] = {container = "Florida", wp = "%l", commonscat = "%l, %c"}, ["Atlanta"] = {container = "Georgia", wp = "%l"}, ["Detroit"] = {container = "Michigan", wp = "%l"}, ["Phoenix"] = {container = "Arizona", wp = "%l", commonscat = "%l, %c"}, ["Mesa"] = {container = "Arizona"}, ["Seattle"] = {container = "Washington", wp = "%l"}, ["Orlando"] = {container = "Florida"}, ["Minneapolis"] = {container = "Minnesota", wp = "%l"}, ["Cleveland"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"}, ["Denver"] = {container = "Colorado", wp = "%l", commonscat = "%l, %c"}, ["San Diego"] = {container = "California", wp = "%l", commonscat = "%l, %c"}, ["Portland"] = {container = "Oregon"}, ["Tampa"] = {container = "Florida"}, ["St. Louis"] = {container = "Missouri", wp = "%l", commonscat = "%l, %c"}, ["Saint Louis"] = {alias_of = "St. Louis", display = true}, ["Charlotte"] = {container = "North Carolina"}, ["Sacramento"] = {container = "California"}, ["Pittsburgh"] = {container = "Pennsylvania", wp = "%l"}, ["Salt Lake City"] = {container = "Utah", wp = "%l"}, ["San Antonio"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"}, ["Columbus"] = {container = "Ohio"}, ["Kansas City"] = {container = "Missouri", wp = "%l metropolitan area", commonscat = "%l, %c"}, ["Indianapolis"] = {container = "Indiana", wp = "%l"}, ["Las Vegas"] = {container = "Nevada", wp = "%l"}, ["Cincinnati"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"}, ["Austin"] = {container = "Texas"}, ["Milwaukee"] = {container = "Wisconsin", wp = "%l", commonscat = "%l, %c"}, ["Raleigh"] = {container = "North Carolina"}, ["Nashville"] = {container = "Tennessee"}, ["Virginia Beach"] = {container = "Virginia"}, ["Norfolk"] = {container = "Virginia"}, ["Greensboro"] = {container = "North Carolina"}, ["Winston-Salem"] = {container = "North Carolina"}, ["Jacksonville"] = {container = "Florida"}, ["New Orleans"] = {container = "Louisiana", wp = "%l"}, ["Louisville"] = {container = "Kentucky"}, ["Greenville"] = {container = "South Carolina"}, ["Hartford"] = {container = "Connecticut"}, ["Oklahoma City"] = {container = "Oklahoma", wp = "%l"}, ["Grand Rapids"] = {container = "Michigan"}, ["Memphis"] = {container = "Tennessee"}, ["Birmingham, Alabama"] = {container = "Alabama"}, ["Birmingham"] = {alias_of = "Birmingham, Alabama"}, ["Fresno"] = {container = "California"}, ["Richmond"] = {container = "Virginia"}, ["Harrisburg"] = {container = "Pennsylvania"}, -- any major city of top 50 MSA's that's missed by previous ["Buffalo"] = {container = "New York"}, -- any of the top 50 city by city population that's missed by previous ["El Paso"] = {container = "Texas"}, ["Albuquerque"] = {container = "New Mexico"}, ["Tucson"] = {container = "Arizona"}, ["Colorado Springs"] = {container = "Colorado"}, ["Omaha"] = {container = "Nebraska"}, ["Tulsa"] = {container = "Oklahoma"}, -- skip Arlington, Texas; too obscure and likely to be interpreted as Arlington, Virginia } export.united_states_cities_group = { default_container = "United States", canonicalize_key_container = make_canonicalize_key_container(", USA", "state"), default_placetype = "city", default_wp = "%l, %c", data = export.united_states_cities, } export.new_york_boroughs = { ["Bronx"] = {the = true, wp = "The Bronx"}, ["Brooklyn"] = {}, ["Manhattan"] = {}, ["Queens"] = {}, ["Staten Island"] = {}, } export.new_york_boroughs_group = { default_container = {key = "New York City", placetype = "city"}, default_placetype = "borough", default_is_city = true, data = export.new_york_boroughs, } export.vietnam_cities = { -- Figures from citypopulation.de (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated. ["Ho Chi Minh City"] = {}, -- 14,300,000 (Agglomeration; inclunding Bien Hoa) ["Saigon"] = {alias_of = "Ho Chi Minh City"}, ["Hanoi"] = {}, -- 7,350,000 (Agglomeration) ["Da Nang"] = {}, -- 1,500,000 (Agglomeration) ["Danang"] = {alias_of = "Da Nang", display = true}, ["Haiphong"] = {}, -- 1,450,000 (Agglomeration) ["Hai Phong"] = {alias_of = "Haiphong", display = true}, -- This is the one entry in this list that is not a province-level municipality; instead it's a "provincial city" -- meaning it is directly under its province as opposed to being contained in a district. ["Bien Hoa"] = {placetype = "city", container = "Đồng Nai", wp = "Biên Hòa"}, -- 1,272,235 (2022 city population per Wikipedia) ["Biên Hòa"] = {alias_of = "Bien Hoa", display = true}, ["Biên Hoà"] = {alias_of = "Bien Hoa", display = true}, -- These two not in citypopulation.de because the urban population may be slightly under 1,000,000, but they are -- both province-level municipalities and close to the 1,000,000 mark. ["Can Tho"] = {wp = "Cần Thơ"}, -- 1,456,000 municipality (2019 census), 994,704 urban (2022 General Statistics Office of Vietnam estimate); capital [[Ninh Kiều district]] ["Cần Thơ"] = {alias_of = "Can Tho", display = true}, ["Hue"] = {wp = "Huế"}, -- 1,257,000 municipality (2019 census), 840,000 urban (2022 General Statistics Office of Vietnam estimate); -- capital [[Thuận Hóa district]] ["Huế"] = {alias_of = "Hue", display = true}, } export.vietnam_cities_group = { placename_to_key = false, -- don't add ", Vietnam" to make the key default_container = "Vietnam", canonicalize_key_container = make_canonicalize_key_container(" Province, Vietnam", "province"), -- Most of the cities listed are province-level municipalities in addition, which contain a certain amount of -- rural territory surrounding the city, but not enough to separate the municipality from the city as distinct -- known locations. default_placetype = {"municipality", "city"}, default_is_city = true, -- There may not be enough districts to subcategorize like this. -- default_divs = "districts", data = export.vietnam_cities, } export.misc_cities = { ------------------ Africa ------------------- -- Sorted by country and then within the country, by decreasing population; figures from citypopulation.de -- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated; combined with data from -- [[w:List of urban areas in Africa by population]]. ["Algiers"] = {container = "Algeria"}, -- 4,325,000 (Consolidated Urban Area) ["Oran"] = {container = "Algeria"}, -- 1,640,000 (Consolidated Urban Area) ["Luanda"] = {container = "Angola"}, -- 9,650,000 (Urban Area) ["Benguela"] = {container = "Angola"}, -- 1,420,000 (Urban Area) ["Cotonou"] = {container = "Benin"}, -- 2,150,000 (Agglomeration) ["Ouagadougou"] = {container = "Burkina Faso"}, -- 3,425,000 (Agglomeration) ["Bobo-Dioulasso"] = {container = "Burkina Faso"}, -- 1,100,000 (Agglomeration) ["Bujumbura"] = {container = "Burundi"}, -- 1,143,202 (Urban Area 2023 per PopulationStat, cited in Wikipedia) ["Yaoundé"] = {container = "Cameroon"}, -- 3,975,000 (City) ["Yaounde"] = {alias_of = "Yaoundé", display = true}, ["Douala"] = {container = "Cameroon"}, -- 3,900,000 (City) ["Bangui"] = {container = "Central African Republic"}, -- 1,680,000 (Agglomeration) ["N'Djamena"] = {container = "Chad"}, -- 1,950,000 (City) ["Ndjamena"] = {alias_of = "N'Djamena", display = true}, ["Kinshasa"] = {container = "Democratic Republic of the Congo"}, -- 16,300,000 (City; population of low reliability) ["Lubumbashi"] = {container = "Democratic Republic of the Congo"}, -- 2,875,000 (City; population of low reliability) ["Mbuji-Mayi"] = {container = "Democratic Republic of the Congo"}, -- 2,500,000 (City; population of low reliability) ["Kananga"] = {container = "Democratic Republic of the Congo"}, -- 1,370,000 (City; population of low reliability) ["Kisangani"] = {container = "Democratic Republic of the Congo"}, -- 1,300,000 (City; population of low reliability) ["Bukavu"] = {container = "Democratic Republic of the Congo"}, -- 1,100,000 (City; population of low reliability) ["Goma"] = {container = "Democratic Republic of the Congo"}, -- 1,010,000 (City; population of low reliability) ["Tshikapa"] = {container = "Democratic Republic of the Congo"}, -- 1,020,468 (2023 Wikipedia [[w:List of cities with over one million inhabitants]] from populationstat.com; not in citypopulation.de) ["Cairo"] = {container = "Egypt"}, -- 22,800,000 (Agglomeration, including Giza and Subhra El Kheima) ["Alexandria"] = {container = "Egypt"}, -- 6,250,000 (Agglomeration) ["Giza"] = {container = "Egypt"}, -- 4,458,135 (2023 from citypopulation.de) ["Shubra El Kheima"] = {container = "Egypt"}, -- 1,240,239 (2021 from citypopulation.de) ["Asmara"] = {container = "Eritrea"}, -- 1,090,000 (City; population of low reliability) ["Asmera"] = {alias_of = "Asmara", display = true}, ["Addis Ababa"] = {container = "Ethiopia"}, -- 4,825,000 (Agglomeration) ["Banjul"] = {container = "Gambia"}, -- 1,170,000 (Agglomeration) ["Accra"] = {container = "Ghana"}, -- 6,800,000 (Agglomeration) ["Kumasi"] = {container = "Ghana"}, -- 2,900,000 (Agglomeration) ["Conakry"] = {container = "Guinea"}, -- 2,975,000 (Consolidated Urban Area) ["Abidjan"] = {container = "Ivory Coast"}, -- 7,050,000 (Agglomeration) ["Nairobi"] = {container = "Kenya"}, -- 6,900,000 (unindicated) ["Mombasa"] = {container = "Kenya"}, -- 1,370,000 (City) ["Monrovia"] = {container = "Liberia"}, -- 1,940,000 (Urban Area) ["Tripoli"] = {container = "Libya", wp = "%l, %c"}, -- 1,870,000 (unindicated) ["Antananarivo"] = {container = "Madagascar"}, -- 3,150,000 (Agglomeration) ["Lilongwe"] = {container = "Malawi"}, -- 1,210,000 (City) ["Bamako"] = {container = "Mali"}, -- 5,700,000 (Agglomeration) ["Nouakchott"] = {container = "Mauritania"}, -- 1,500,000 (City) ["Casablanca"] = {container = {key = "Casablanca-Settat, Morocco", placetype = "region"}}, -- 4,450,000 (Municipality (urban population)) ["Rabat"] = {container = {key = "Rabat-Sale-Kenitra, Morocco", placetype = "region"}}, -- 2,125,000 (Municipality (urban population)) ["Tangier"] = {container = {key = "Tangier-Tetouan-Al Hoceima, Morocco", placetype = "region"}}, -- 1,410,000 (Municipality (urban population)) ["Tanger"] = {alias_of = "Tangier", display = true}, ["Tangiers"] = {alias_of = "Tangier", display = true}, ["Fez"] = {container = {key = "Fez-Meknes, Morocco", placetype = "region"}, wp = "%l, Morocco"}, -- 1,310,000 (Municipality (urban population)) ["Fes"] = {alias_of = "Fez", display = true}, ["Fès"] = {alias_of = "Fez", display = true}, ["Agadir"] = {container = {key = "Souss-Massa, Morocco", placetype = "region"}}, -- 1,270,000 (Municipality (urban population)) ["Marrakesh"] = {container = {key = "Marrakesh-Safi, Morocco", placetype = "region"}}, -- 1,140,000 (Municipality (urban population)) ["Marrakech"] = {alias_of = "Marrakesh", display = true}, ["Maputo"] = {container = "Mozambique"}, -- 2,575,000 (Agglomeration) ["Niamey"] = {container = "Niger"}, -- 1,530,000 (City) ["Brazzaville"] = {container = "Republic of the Congo"}, -- 2,475,000 (Agglomeration) ["Pointe-Noire"] = {container = "Republic of the Congo"}, -- 1,480,000 (City) ["Kigali"] = {container = "Rwanda"}, -- 1,960,000 (Municipality (urban population)) ["Dakar"] = {container = "Senegal"}, -- 4,225,000 (Agglomeration) ["Touba"] = {container = "Senegal"}, -- 1,320,000 (Agglomeration) ["Freetown"] = {container = "Sierra Leone"}, -- 1,420,000 (Agglomeration) ["Mogadishu"] = {container = "Somalia"}, -- 2,250,000 (unindicated; population of low reliability) ["Johannesburg"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 14,800,000 (Consolidated Urban Area; including Pretoria, Soweto, etc.) ["Cape Town"] = {container = {key = "Western Cape, South Africa", placetype = "province"}}, -- 5,100,000 (Consolidated Urban Area) ["Durban"] = {container = {key = "KwaZulu-Natal, South Africa", placetype = "province"}}, -- 3,900,000 (Consolidated Urban Area) ["Pretoria"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 2,921,488 (2011 census) ["Port Elizabeth"] = {container = {key = "Eastern Cape, South Africa", placetype = "province"}, wp = "Gqeberha"}, -- 1,200,000 (Consolidated Urban Area) ["Gqeberha"] = {alias_of = "Port Elizabeth"}, -- official name; not a display alias ["Khartoum"] = {container = "Sudan"}, -- 7,200,000 (unindicated; population of low reliability) ["Dar es Salaam"] = {container = "Tanzania"}, -- 6,650,000 (Agglomeration) ["Mwanza"] = {container = "Tanzania"}, -- 1,340,000 (Agglomeration) ["Mwanza City"] = {alias_of = "Mwanza", display = true}, ["Arusha"] = {container = "Tanzania"}, -- 1,190,000 (Agglomeration) ["Zanzibar"] = {container = "Tanzania"}, -- 1,030,000 (Agglomeration) ["Lomé"] = {container = "Togo"}, -- 2,625,000 (unindicated) ["Lome"] = {alias_of = "Lomé", display = true}, ["Tunis"] = {container = "Tunisia"}, -- 2,725,000 (Municipality (urban population)) ["Sousse"] = {container = "Tunisia"}, -- 1,180,000 (Municipality (urban population)) ["Soussa"] = {alias_of = "Sousse", display = true}, ["Kampala"] = {container = "Uganda"}, -- 4,300,000 (unindicated) ["Lusaka"] = {container = "Zambia"}, -- 3,000,000 (Consolidated Urban Area) ["Harare"] = {container = "Zimbabwe"}, -- 2,675,000 (Agglomeration) ------------------ Asia ------------------- -- sorted by country and then within the country, by decreasing population; figures from citypopulation.de -- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated. ["Kabul"] = {container = "Afghanistan"}, -- 5,250,000 (Agglomeration) ["Baku"] = {container = "Azerbaijan"}, -- 3,725,000 (Administrative Area (urban population)) ["Manama"] = {container = "Bahrain"}, -- 1,560,000 (unindicated) ["Dhaka"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 23,100,000 (Agglomeration) ["Dacca"] = {alias_of = "Dhaka", display = true}, ["Chittagong"] = {container = {key = "Chittagong Division, Bangladesh", placetype = "division"}}, -- 5,050,000 (Agglomeration) ["Gazipur"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 2,674,697 (City per 2022; countied in citypopulation.de as part of Dhaka metro area) ["Khulna"] = {container = {key = "Khulna Division, Bangladesh", placetype = "division"}}, -- 1,210,000 (Agglomeration) ["Phnom Penh"] = {container = "Cambodia"}, -- 2,925,000 (Agglomeration) ["Tehran"] = {container = {key = "Tehran Province, Iran", placetype = "province"}}, -- 16,800,000 (Agglomeration) ["Teheran"] = {alias_of = "Tehran", display = true}, ["Mashhad"] = {container = {key = "Razavi Khorasan Province, Iran", placetype = "province"}}, -- 3,475,000 (Agglomeration) ["Mashad"] = {alias_of = "Mashhad", display = true}, ["Meshhed"] = {alias_of = "Mashhad", display = true}, ["Meshed"] = {alias_of = "Mashhad", display = true}, ["Isfahan"] = {container = {key = "Isfahan Province, Iran", placetype = "province"}}, -- 3,425,000 (Agglomeration) ["Esfahan"] = {alias_of = "Isfahan", display = true}, ["Tabriz"] = {container = {key = "East Azerbaijan Province, Iran", placetype = "province"}}, -- 1,970,000 (Agglomeration) ["Shiraz"] = {container = {key = "Fars Province, Iran", placetype = "province"}}, -- 1,950,000 (Agglomeration) ["Ahvaz"] = {container = {key = "Khuzestan Province, Iran", placetype = "province"}}, -- 1,550,000 (Agglomeration) ["Qom"] = {container = {key = "Qom Province, Iran", placetype = "province"}}, -- 1,450,000 (City) ["Kermanshah"] = {container = {key = "Kermanshah Province, Iran", placetype = "province"}}, -- 1,130,000 (City) ["Baghdad"] = {container = "Iraq"}, -- 7,800,000 (Administrative Area (urban population)) ["Basra"] = {container = "Iraq"}, -- 1,710,000 (Administrative Area (urban population)) ["Mosul"] = {container = "Iraq"}, -- 1,550,000 (Administrative Area (urban population)) ["Erbil"] = {container = "Iraq"}, -- 1,220,000 (Administrative Area (urban population)) ["Kirkuk"] = {container = "Iraq"}, -- 1,160,000 (Administrative Area (urban population)) ["Najaf"] = {container = "Iraq"}, -- 1,050,000 (Administrative Area (urban population)) ["Tel Aviv"] = {container = "Israel"}, -- 3,000,000 (Agglomeration) -- Jerusalem is not recognized internationally as part of either Israel or Palestine, but as a -- [[w:corpus separatum]], so put the container as "Asia" and list Israel and Palestine as additional parents for -- categorization purposes. ["Jerusalem"] = {container = {key = "Asia", placetype = "continent"}, addl_parents = {"Israel", "Palestine"}}, -- 1,080,000 (Agglomeration) ["Amman"] = {container = "Jordan"}, -- 6,150,000 (unindicated) ["Irbid"] = {container = "Jordan"}, -- 1,070,000 (unindicated) ["Almaty"] = {container = "Kazakhstan"}, -- 2,700,000 (Agglomeration) ["Alma-Ata"] = {alias_of = "Almaty"}, -- former name, sometimes still used; don't display-canonicalize ["Astana"] = {container = "Kazakhstan"}, -- 1,600,000 (Agglomeration) ["Shymkent"] = {container = "Kazakhstan"}, -- 1,370,000 (Agglomeration) ["Kuwait City"] = {container = "Kuwait"}, -- 5,050,000 (Agglomeration) ["Bishkek"] = {container = "Kyrgyzstan"}, -- 1,540,000 (Agglomeration) ["Beirut"] = {container = "Lebanon"}, -- 1,930,000 (unindicated; population of low reliability) -- Kuala Lumpur is a federal capital city, not in any state ["Kuala Lumpur"] = {container = "Malaysia"}, -- 9,550,000 (Agglomeration) -- there are various George Towns and Georgetowns ["George Town, Malaysia"] = {container = {key = "Penang, Malaysia", placetype = "state"}, wp = "%l, %c"}, -- 2,075,000 (Agglomeration) ["George Town"] = {alias_of = "George Town, Malaysia"}, ["Ulaanbaatar"] = {container = "Mongolia"}, -- 1,610,000 (City) ["Ulan Bator"] = {alias_of = "Ulaanbaatar", display = true}, ["Yangon"] = {container = "Myanmar"}, -- 5,650,000 (Municipality (urban population)) ["Rangoon"] = {alias_of = "Yangon", display = true}, ["Mandalay"] = {container = "Myanmar"}, -- 1,600,000 (Municipality (urban population)) ["Kathmandu"] = {container = "Nepal"}, -- 3,175,000 (Agglomeration) -- Pyongyang is a directly governed city, not in any province ["Pyongyang"] = {container = "North Korea"}, -- 3,025,000 (Administrative Area (urban population)) ["Muscat"] = {container = "Oman"}, -- 1,620,000 (Agglomeration) ["Gaza"] = {container = "Palestine", wp = "Gaza City"}, -- 2,275,000 (unindicated) ["Gaza City"] = {alias_of = "Gaza"}, ["Doha"] = {container = "Qatar"}, -- 2,650,000 (Agglomeration) ["Colombo"] = {container = "Sri Lanka"}, -- 4,975,000 (unindicated) ["Damascus"] = {container = "Syria"}, -- 3,975,000 (unindicated; population of low reliability) ["Aleppo"] = {container = "Syria"}, -- 1,980,000 (unindicated; population of low reliability) ["Dushanbe"] = {container = "Tajikistan"}, -- 1,270,000 (City) ["Bangkok"] = {container = "Thailand"}, -- 21,800,000 (Agglomeration) -- Chiang Mai not in citypopulation.de, but 1,198,000 urban population in 2021 per Wikipedia -- [[w:List_of_municipalities_in_Thailand#Largest_cities_by_urban_population]] ["Chiang Mai"] = {container = {key = "Chiang Mai Province, Thailand", placetype = "province"}}, ["Chonburi"] = {container = {key = "Chonburi Province, Thailand", placetype = "province"}}, -- 1,570,000 (Agglomeration; including Pattaya) -- metro area population stats from https://www.statista.com/statistics/255483/biggest-cities-in-turkey/ as of 2021; -- second source is citypopulation.de reference date 2025-01-01. ["Istanbul"] = {placetype = {"city", "province"}, divs = {"districts"}, container = "Turkey"}, -- 15.2 million; 16,000,000 (Agglomeration) ["İstanbul"] = {alias_of = "Istanbul", display = true}, ["Ankara"] = {container = {key = "Ankara Province, Turkey", placetype = "province"}}, -- 5.15 million; 5,200,000 (Agglomeration) ["Izmir"] = {container = {key = "İzmir Province, Turkey", placetype = "province"}, wp = "İzmir"}, -- 2.95 million; 3,025,000 (Agglomeration) ["İzmir"] = {alias_of = "Izmir", display = true}, ["Bursa"] = {container = {key = "Bursa Province, Turkey", placetype = "province"}}, -- 2.02 million; 2,200,000 (Agglomeration) ["Adana"] = {container = {key = "Adana Province, Turkey", placetype = "province"}}, -- 1.77 million; 1,780,000 (Agglomeration) ["Gaziantep"] = {container = {key = "Gaziantep Province, Turkey", placetype = "province"}}, -- 1.71 million; 1,750,000 (Agglomeration) ["Antalya"] = {container = {key = "Antalya Province, Turkey", placetype = "province"}}, -- 1.3 million; 1,400,000 (Agglomeration) ["Konya"] = {container = {key = "Konya Province, Turkey", placetype = "province"}}, -- 1.35 million; 1,390,000 (Agglomeration) ["Diyarbakır"] = {container = {key = "Diyarbakır Province, Turkey", placetype = "province"}}, -- 1.07 million; 1,100,000 (Agglomeration) -- Diyarbakır is more common per Ngrams and Google Scholar, but Diyarbakir is the Kurdish form, so we should not -- display-canonicalize to the Turkish form Diyarbakır. ["Diyarbakir"] = {alias_of = "Diyarbakır"}, ["Mersin"] = {container = {key = "Mersin Province, Turkey", placetype = "province"}}, -- 1.03 million; 1,060,000 (Agglomeration) ["Ashgabat"] = {container = "Turkmenistan"}, -- 1,150,000 (Agglomeration) ["Dubai"] = {container = "United Arab Emirates"}, -- 6,050,000 (Agglomeration; including Sharjah) ["Abu Dhabi"] = {container = "United Arab Emirates"}, -- 1,850,000 (City) ["Sharjah"] = {container = "United Arab Emirates"}, -- 1,800,000 (Metro area 2022-2023 per Wikipedia; separate from Dubai) ["Tashkent"] = {container = "Uzbekistan"}, -- 3,850,000 (unindicated) ["Sanaa"] = {container = "Yemen"}, -- 3,275,000 (City; population of low reliability) ["Sana'a"] = {alias_of = "Sanaa", display = true}, ["Aden"] = {container = "Yemen"}, -- 1,079,060 (?; 2023 estimate from World Population Review per Wikipedia) ------------------ Europe or Europe-like (Caucasus etc.) --------------------- ["Yerevan"] = {container = "Armenia"}, -- 1,520,000 (Agglomeration) ["Vienna"] = {container = "Austria"}, -- 2,375,000 (Agglomeration) ["Minsk"] = {container = "Belarus"}, -- 2,100,000 (unindicated) ["Brussels"] = {container = "Belgium"}, -- 2,800,000 (Consolidated Urban Area) ["Antwerp"] = {container = "Belgium"}, -- 1,270,000 (Consolidated Urban Area) ["Sofia"] = {container = "Bulgaria"}, -- 1,260,000 (Agglomeration) ["Zagreb"] = {container = "Croatia"}, ["Prague"] = {container = "Czech Republic"}, -- 1,470,000 (Agglomeration) ["Brno"] = {container = "Czech Republic"}, -- 729,405 (metro area per Wikipedia as of 2024-01-01 Czech Statistical Office) ["Olomouc"] = {container = "Czech Republic"}, -- 102,293 (city; included only because someone went crazy creating Olomouc-related terms) ["Copenhagen"] = {container = "Denmark"}, -- 1,800,000 (Consolidated Urban Area) ["Helsinki"] = {container = {key = "Uusimaa, Finland", placetype = "region"}}, -- 1,560,000 (Consolidated Urban Area) ["Tbilisi"] = {container = "Georgia"}, -- 1,430,000 (Agglomeration) ["Athens"] = {container = "Greece"}, ["Thessaloniki"] = {container = "Greece"}, ["Budapest"] = {container = "Hungary"}, -- FIXME, per Wikipedia "County Dublin" is now the "Dublin Region" ["Dublin"] = {container = {key = "County Dublin, Ireland", placetype = "county"}}, ["Riga"] = {container = "Latvia"}, ["Amsterdam"] = {container = {key = "North Holland, Netherlands", placetype = "province"}}, ["Rotterdam"] = {container = {key = "South Holland, Netherlands", placetype = "province"}}, ["The Hague"] = {container = {key = "South Holland, Netherlands", placetype = "province"}}, -- Christchurch (metro 546,600) and Wellington (metro 439,800) are too small to make it. ["Auckland"] = {container = {key = "Auckland, New Zealand", placetype = "region"}}, ["Oslo"] = {container = {key = "Oslo, Norway", placetype = "county"}}, ["Warsaw"] = {container = {key = "Masovian Voivodeship, Poland", placetype = "voivodeship"}}, ["Katowice"] = {container = {key = "Silesian Voivodeship, Poland", placetype = "voivodeship"}}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Krakow" without accent. ["Krakow"] = {container = {key = "Lesser Poland Voivodeship, Poland", placetype = "voivodeship"}, wp = "Kraków"}, ["Kraków"] = {alias_of = "Krakow", display = true}, ["Cracow"] = {alias_of = "Krakow", display = true}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirm "Gdańsk" and "Poznań" with accent. ["Gdańsk"] = {container = {key = "Pomeranian Voivodeship, Poland", placetype = "voivodeship"}}, ["Gdansk"] = {alias_of = "Gdańsk", display = true}, ["Poznań"] = {container = {key = "Greater Poland Voivodeship, Poland", placetype = "voivodeship"}}, ["Poznan"] = {alias_of = "Poznań", display = true}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Lodz" without accents. ["Lodz"] = {container = {key = "Lodz Voivodeship, Poland", placetype = "voivodeship"}, wp = "Łódź"}, ["Łódź"] = {alias_of = "Lodz", display = true}, ["Lisbon"] = {container = {key = "Lisbon District, Portugal", placetype = "district"}}, ["Porto"] = {container = {key = "Porto District, Portugal", placetype = "district"}}, ["Oporto"] = {alias_of = "Porto", display = true}, ["Bucharest"] = {container = "Romania"}, ["Belgrade"] = {container = "Serbia"}, ["Stockholm"] = {container = "Sweden"}, ["Zurich"] = {container = "Switzerland"}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Zurich" without umlaut. --- Even Wikipedia uses the form without umlaut. ["Zürich"] = {alias_of = "Zurich", display = true}, ["Kyiv"] = {container = "Ukraine"}, -- not in Kyiv Oblast -- Don't display-canonicalize Kiev -> Kyiv because in ancient contexts, Kiev is still more common. ["Kiev"] = {alias_of = "Kyiv"}, ["Kharkiv"] = {container = {key = "Kharkiv Oblast, Ukraine", placetype = "oblast"}}, ["Odessa"] = {container = {key = "Odesa Oblast, Ukraine", placetype = "oblast"}, wp = "Odesa"}, -- Don't display-canonicalize Odesa -> Odessa because it may be interpreted as a political statement. ["Odesa"] = {alias_of = "Odessa"}, ------------------ North America, South America --------------------- -- Primary figures from citypopulation.de retrieved on 2025-04-26 (reference date 2025-01-01); -- Wikipedia metropolitan figures from [[w:List of metropolitan areas in the Americas]] based on per-country data; -- Wikipedia city limits figures from [[w:List of largest cities in the Americas]]. ["Buenos Aires"] = {container = "Argentina"}, -- 16,800,000 (Consolidated Urban Area; 13,985,794 metropolitan area per Wikipedia) ["Córdoba, Argentina"] = {container = "Argentina", wp = "%l, %c"}, -- 1,810,000 (Consolidated Urban Area; 1,505,25 city limits per Wikipedia) -- to avoid confusion with Córdoba in Spain ["Córdoba"] = {alias_of = "Córdoba, Argentina"}, ["Cordoba"] = {alias_of = "Córdoba, Argentina", display = "Córdoba"}, ["Rosario"] = {container = "Argentina", wp = "%l, Santa Fe"}, -- 1,510,000 (Consolidated Urban Area; 1,348,725 metropolitan area per Wikipedia) ["Mendoza"] = {container = "Argentina", wp = "%l, %c"}, -- 1,180,000 (Consolidated Urban Area) ["San Miguel de Tucumán"] = {container = "Argentina"}, -- 1,110,000 (Consolidated Urban Area) ["Tucumán"] = {alias_of = "San Miguel de Tucumán"}, ["Tucuman"] = {alias_of = "San Miguel de Tucumán", display = "Tucumán"}, ["Santa Cruz de la Sierra"] = {container = "Bolivia"}, -- 1,960,000 (Consolidated Urban Area); 1,606,671 (city limits per Wikipedia) ["Santa Cruz"] = {alias_of = "Santa Cruz de la Sierra"}, ["La Paz"] = {container = "Bolivia"}, -- 1,870,000 (Consolidated Urban Area; composed of El Alto, now slightly larger, and La Paz) ["El Alto"] = {container = "Bolivia"}, ["Cochabamba"] = {container = "Bolivia"}, -- 1,280,000 (Consolidated Urban Area) ["Santiago"] = {container = "Chile"}, -- 8,400,000 (Consolidated Urban Area; 6,903,479 city limits? per Wikipedia) ["Valparaíso"] = {container = "Chile"}, -- 1,060,000 (Consolidated Urban Area) ["Valparaiso"] = {alias_of = "Valparaíso"}, -- 1,060,000 (Consolidated Urban Area) ["Bogotá"] = {container = "Colombia"}, -- 10,600,000 (Agglomeration; 12,772,828 metropolitan area per Wikipedia) ["Bogota"] = {alias_of = "Bogotá", display = true}, ["Medellín"] = {container = "Colombia"}, -- 4,350,000 (Agglomeration; 4,068,000 metropolitan area per Wikipedia) ["Medellin"] = {alias_of = "Medellín", display = true}, ["Cali"] = {container = "Colombia"}, -- 2,975,000 (Agglomeration; 2,837,000 metropolitan area per Wikipedia) ["Barranquilla"] = {container = "Colombia"}, -- 2,375,000 (Agglomeration; 1,341,160 city limits per Wikipedia) ["Bucaramanga"] = {container = "Colombia"}, -- 1,380,000 (Agglomeration) ["Cartagena, Colombia"] = {container = "Colombia", wp = "%l, %c"}, -- 1,250,000 (Agglomeration) -- to avoid confusion with Cartagena, Spain ["Cartagena"] = {alias_of = "Cartagena, Colombia"}, ["Cúcuta"] = {container = "Colombia"}, -- 1,130,000 (Agglomeration) ["Cucuta"] = {alias_of = "Cúcuta", display = true}, -- to avoid conflict with San Jose, California ["San José, Costa Rica"] = {container = "Costa Rica", wp = "%l, %c"}, -- 2,450,000 (Municipality (urban population); 3,160,000 metropolitan area per Wikipedia) ["San José"] = {alias_of = "San José, Costa Rica"}, ["San Jose"] = {alias_of = "San José, Costa Rica"}, -- display = "San José"; causes error due to San Jose alias for California city; FIXME ["Havana"] = {container = "Cuba"}, -- 2,150,000 (City; 2,137,847 city limits? per Wikipedia) ["Santo Domingo"] = {container = "Dominican Republic"}, -- 3,900,000 (Municipality (urban population); 4,274,651 ??? per Wikipedia) ["Guayaquil"] = {container = "Ecuador"}, -- 3,350,000 (Agglomeration; 3,092,000 metro area? per Wikipedia) ["Quito"] = {container = "Ecuador"}, -- 2,875,000 (Agglomeration; 2,889,703 metro area? per Wikipedia) ["San Salvador"] = {container = "El Salvador"}, -- 1,580,000 (Municipality (urban population)) ["Guatemala City"] = {container = "Guatemala"}, -- 3,375,000 (Municipality (urban population); 3,160,000 metro area? per Wikipedia) ["Port-au-Prince"] = {container = "Haiti"}, -- 3,050,000 (Agglomeration; population of low reliability; 2,915,000 metro area? per Wikipedia) ["San Pedro Sula"] = {container = "Honduras"}, -- 1,330,000 (Consolidated Urban Area) ["Tegucigalpa"] = {container = "Honduras"}, -- 1,220,000 (Urban Area) ["Managua"] = {container = "Nicaragua"}, -- 1,400,000 (Consolidated Urban Area) ["Panama City"] = {container = "Panama"}, -- 1,430,000 (Urban Area) ["Asunción"] = {container = "Paraguay"}, -- 2,350,000 (Municipality (urban population)) ["Lima"] = {container = "Peru"}, -- 12,000,000 (Agglomeration; 11,283,787 ??? per Wikipedia) ["Arequipa"] = {container = "Peru"}, -- 1,210,000 (Agglomeration) ["San Juan"] = {container = {key = "Puerto Rico", placetype = "commonwealth"}, wp = "%l, %c"}, -- 1,910,000 (Consolidated Urban Area) ["Montevideo"] = {container = "Uruguay"}, -- 1,810,000 (Agglomeration; 1,302,954 ??? per Wikipedia) ["Caracas"] = {container = "Venezuela"}, -- 3,850,000 (Consolidated Urban Area; 5,243,301 ??? per Wikipedia) ["Maracaibo"] = {container = "Venezuela"}, -- 2,825,000 (Consolidated Urban Area; 5,278,448 ??? per Wikipedia) -- to avoid confusion with Valencia (city and autonomous community of Spain) ["Valencia, Venezuela"] = {container = "Venezuela", wp = "%l, %c"}, -- 2,100,000 (Consolidated Urban Area) ["Valencia"] = {alias_of = "Valencia, Venezuela"}, ["Maracay"] = {container = "Venezuela"}, -- 1,480,000 (Consolidated Urban Area) ["Barquisimeto"] = {container = "Venezuela"}, -- 1,360,000 (Consolidated Urban Area) } export.misc_cities_group = { canonicalize_key_container = make_canonicalize_key_container(nil, "quốc gia"), default_placetype = "city", data = export.misc_cities, } --[==[ var: List of all known locations, in groups. The first group lists continents and continental regions, followed by three groups listing top-level locations: countries, "country-like entities" (de-facto/unrecognized/etc. countries and dependent territories) and former polities (countries, empires, etc.). After that come first-level subpolities (administrative divisions) of several, mostly large, countries, followed by groups of cities. China and the United Kingdom include second-level subpolities (in the case of China, only the largest ones as the full list runs in the hundreds). ]==] export.locations = { export.continents_group, export.countries_group, export.country_like_entities_group, export.former_countries_group, export.australia_group, export.austria_group, export.bangladesh_group, export.brazil_group, export.bulgaria_group, export.canada_group, export.china_group, export.china_prefecture_level_cities_group, export.china_prefecture_level_cities_group_2, export.egypt_group, export.finland_group, export.france_group, export.france_departments_group, export.germany_group, export.greece_group, export.india_group, export.indonesia_group, export.iran_group, export.ireland_group, export.italy_group, export.japan_group, export.laos_group, export.lebanon_group, export.malaysia_group, export.malta_group, export.mexico_group, export.moldova_group, export.morocco_group, export.netherlands_group, export.new_zealand_group, export.nigeria_group, export.north_korea_group, export.norway_group, export.pakistan_group, export.philippines_group, export.poland_group, export.portugal_group, export.romania_group, export.russia_group, export.saudi_arabia_group, export.south_africa_group, export.south_korea_group, export.spain_group, export.taiwan_group, export.thailand_group, export.turkey_group, export.ukraine_group, export.united_kingdom_group, export.united_states_group, export.england_group, export.northern_ireland_group, export.scotland_group, export.wales_group, export.vietnam_group, export.australia_cities_group, export.brazil_cities_group, export.canada_cities_group, export.france_cities_group, export.germany_cities_group, export.india_cities_group, export.indonesia_cities_group, export.italy_cities_group, export.japan_cities_group, export.mexico_cities_group, export.nigeria_cities_group, export.pakistan_cities_group, export.philippines_cities_group, export.russia_cities_group, export.saudi_arabia_cities_group, export.south_korea_cities_group, export.spain_cities_group, export.taiwan_cities_group, export.united_kingdom_cities_group, export.united_states_cities_group, export.new_york_boroughs_group, export.vietnam_cities_group, export.misc_cities_group, } return export sgkcqrsgv5htftilro7tusk3le3az9g 2350128 2350001 2026-05-04T09:47:49Z TheHighFighter2 42988 2350128 Scribunto text/plain local export = {} export.force_cat = false -- set to true to force category generation even on non-mainspace pages local m_table = require("Module:table") local string_utilities_module = "Module:string utilities" local en_utilities_module = "Module:en-utilities" local insert = table.insert local concat = table.concat local dump = mw.dumpObject local unpack = unpack or table.unpack -- Lua 5.2 compatibility --[==[ intro: This module contains data on all known locations, along with some lower-level code to process them (higher-level known-location code is in [[Module:place/placetypes]]). You must load this module using require(), not using mw.loadData(). ===Location data=== '''NOTE: In order to understand the following better, first read the introductory documentation in [[Module:place]], especially the section `More about known locations`.''' The bulk of the code in this module (after some helper functions and placetype tables) describes the known locations and their relationships. Locations are grouped into ''location groups'' that share some common properties (examples are states of the United States and cities in Brazil). Each location group is associated with two tables, a ''data table'' that lists the locations and their individual properties, and a ''metadata table'' that lists group-level properties and defaults for the location properties. Each metadata table points to the associated data table (i.e. contains the data table as its `data` field), and the global `locations` variable holds a list of all group metadata tables. A given location is generally described by three values: (a) the group metadata table for the group the location is part of; (b) the location's canonical ''key'', which is the actual key in the group's data table and is globally unique across all locations; and (c) the location's ''spec'', which is the initialized object describing the properties of the location and comes from the value in the data table corresponding to the canonical key, transformed by the `initialize_spec()` function. These are typically named `group`, `key` and `spec`, respectively and in that order, and are found in the arguments to many functions. In a per-group data table, the keys are either ''canonical keys'' describing locations (which, as mentioned above, must be globally unique) or ''alias keys'' specifying an allowed alias for a given location. There may be multiple aliases for a given location and the alias keys only need to be unique within a particular group data table, not across all groups. It is also possible for the same string to serve as an alias key in one group and a canonical key in another group. (For example, `Newcastle` appears as an alias key in two different groups, referring to two different locations, canonically known as `Newcastle upon Tyne`, for the city in England, and `Newcastle, New South Wales`, for the city in New South Wales, Australia; and `Birmingham` appears both as a canonical key in the group of English cities and an alias key for canonical `Birmingham, Alabama` in the group of US cities.) The corresponding value objects are different for canonical and alias keys. Corresponding to canonical keys are ''location specs'', describing the properies of the location that cannot be derived from default properties of the group or global defaults. Corresponding to alias keys are ''alias specs'', which are highly restricted in the properties they can contain, and whose properties do not have per-group defaults, but only global defaults. The canonical key is always the same as the bare category corresponding to the location, which is one of the reasons it must be globally unique. For example, the country of Georgia uses the canonical key `Georgia` and corresponding bare category [[:Category:Georgia]], while the US state of Georgia uses the canonical key `Georgia, USA` and corresponding bare category [[:Category:Georgia, USA]]. The following conventions are followed in naming keys: * Countries, ''country-like entities'' (which are a mixture of unrecognized de-facto states and dependent territories) and ''former countries'' (which also includes other types of polities, such as the Roman Empire) use their unqualified placename as the canonical key. (See the documentation for [[Module:place]] for the distinction between keys and placenames, which is critical to understand when working with location data.) This also applies to constituent countries (such as England, Aruba and the Faroe Islands) and constituent parts of grouped dependent territories (such as the island of Saint Helena, which is administratively part of the British overseas territory of Saint Helena, Ascension and Tristan da Cunha). * Cities (including prefecture-level cities in China, which behave in most respects more like non-city administrative divisions) also normally use their unqualified placename as the canonical key, but if this causes name conflicts or ambiguities, they use a ''qualified key'' containing either the country name or immediate containing division (if different) following a comma, such as the case of `Newcastle, New South Wales` and `Birmingham, Alabama` above. Examples of name conflicts are the two cities just given; examples of ambiguities are the major cities of León and Mérida in Mexico and city of Cartagena, Colombia, which are given the respective canonical keys of `León, Guanajuato`, `Mérida, Yucatán` and `Cartagena, Colombia` to avoid ambiguity with the well-known respective cities of the same name in Spain, even though none of those cities are large enough to be included as known locations in this module. (The cutoff is generally having a metro area of at least 1,000,000 inhabitants, although there are exceptions.) * Administrative divisions of countries, other than the exceptions noted above for constituent countries and dependent territories, use a qualified key that contains the name of the country or constituent country in it, e.g. `Normandy, France` (a region), `Calvados, France` (a department in the region of Normandy), `Herefordshire, England` (a ceremonial county), `Northwest Territories, Canada` (a territory), `Central Finland, Finland` (a region), `Antalya Province, Turkey` (a province), `Cluj County, Romania` (a county), `County Cork, Ireland` (a county) and `New York, USA` (a state). As shown in these various examples, (a) first and second-level divisions are sometimes both included (as in France, the United Kingdom and China); (b) the qualifier after the comma is sometimes a constituent country (England) instead of a country (United Kingdom), and is sometimes abbreviated (USA rather than United States or Unites States of America); (c) the word `the` is not normally included in the key even if the location is normally preceded by `the` when following a preposition (there is a property in the location and alias specs to indicate this), except in a very few cases (most notably `The Hague`); (d) the country is included as a qualifier even if it creates an apparent redundancy, as with `Central Finland, Finland`; and (e) sometimes the placetype is included in the key, as with provinces in Turkey and several other countries; states in Nigeria; and counties in Ireland, Romania and several other countries. Whether the placetype is included, and whether it follows or precedes the placename, depends on per-country conventions. For example, provinces in Turkey, Iran and several other countries (likewise for states in Nigeria, oblasts in Russia, etc.) conventionally include the word "Province", "State", "Oblast" etc. in their name because they are normally named after the largest city in the division, which would otherwise lead to ambiguity; and counties in Ireland and Northern Ireland (and likewise County Durham, England) normally have the word "County" preceding rather than following them in their conventional name, so we follow this practice. The Wikipedia article naming scheme for a given administrative division is a strong clue as to how the division is normally referred to, and we usually follow this practice. (A minor exception is that the Wikipedia articles for provinces in Iran, Laos and Thailand include the word `province` with an initial lowercase letter while provinces elsewhere, e.g. North and South Korea, Saudi Arabia and Turkey, use uppercase `Province`; we normalize to uppercase `Province` in all cases.) As mentioned above, associated with canonical keys in the group data table are location specs, which are objects containing properties. It is important here to distinguish ''initialized specs'' from ''uninitialized specs''. Unininitialized specs are as directly specified in [[Module:place/locations]], containing only those properties that differ from the per-group or global defaults. Initialized specs result from calling `initialize_spec()` on an uninitialized spec (it is idempotent in that it will do nothing if encountering an already-initialized spec). This copies all group-level defaults that are not overridden in the location spec itself from the group-level metadata table into the location spec, so that in general, no more reference need be made to the group to fetch the correct value of a given location property. (The initialization process also does more transformations in a few cases, noted below.) Note that the default value of a given property is stored under a key in the group metadata table that is preceded by the string `default_`; for example, the default value corresponding to the `placetype` property of a given location is specified in the `default_placetype` key in the group metadata table. The following are the properties of the location spec. * `placetype`: String specifying the placetype of the location (e.g. "quốc gia", "state", province"). This can also be a table of such types; in this case, the first listed type is the canonical type that will be used in descriptions, but the location will be recognized (e.g. in a holonym, or for categorizing into the bare category) when tagged with any of the specified types. The placetype '''must''' be either specified on an individual location or defaulted at the group level, or an error occurs. * `container`: Either a string, a ''canonicalized container'' structure or a list of either type, specifying the immediate ''container'' (or containers) of the given location. A container is another location which this location is considered to be directly part of, either politically or (above the country level) geographically. Some locations belong to multiple immediate containers; this applies especially to transcontinental countries such as Russia and Turkey. Containers can themselves have containers, forming a tree (or more correctly, a [[w:directed acyclic graph]]) of locations. The list of immediate container(s), followed by the container(s) of the container(s), etc., is termed the ''container trail'', and some functions compute and return this trail as part of their operation. When a location spec is initialized, the given container spec is canonicalized into ''canonical container form'', which consists of a list of canonicalized container structures, each of which is of the form `{key = "``container_key``", placetype = "``container_placetype``"}`, where ``container_key`` is a canonical location key and ``container_placetype`` should be the listed placetype for the location, or the first listed placetype if there are multiple. (FIXME: Since the key uniquely identifies the container location, we should eliminate the placetype from the container structure.) The list of canonicalized container structures is stored into the `.containers` field of the location spec (this happens even if the container value is unset in its uninitialized spec form, causing it to default to the corresponding group-level value), and the `.container` field is set to {nil}. The canonicalization process is described in more detail below under [[#Container spec canonicalization]]. * `divs`: List of recognized political divisions; e.g. for the Netherlands, a specification of the form `divs = {"provinces", "municipalities"}` will allow categories such as [[:Category:de:Provinces of the Netherlands]] and [[:Category:pt:Municipalities of the Netherlands]] to be created. Any division that appears here must also be found in `placetype_data`, or an error occurs. The entities appearing in the `divs` list can be structures as well as just strings; this is explained more below under [[#Location divisions]]. Additional political divisions that apply to all locations in a group can be specified at the group level using the group-only property `addl_divs`, which has the same format as `divs`. This is intended to be used in the situation where some division types are shared among all locations in the group and others differ from location to location. An example where this is used is the United States, where `census-designated places` is specified in the group-level `addl_divs` so that all 50 states have census-designated places categorized as e.g. [[:Category:Census-designated places in Arizona, USA]], but `counties` and `county seats` are specified in the group-level `default_divs` because not all states have counties and county seats (Alaska has boroughs and borough seats and Louisiana has parishes and parish seats), and some states have additional divisions (New Jersey and Pennsylvania also have boroughs, while Colorado and Connecticut have municipalities). Note that under most circumstances (particularly, if `container_parent_type` is not set as a property associated with the division type), any division type specified on a sub-country-level location must also be specified on all containers up through the country. For example, since French departments specify `communes` and `municipalities` in `default_divs`, the same division types must be (and are) specified on French regions and for France itself. * `keydesc`: String directly specifying a description of the location, for use in generating the contents of category pages related to the location. In place of a string, a function of three arguments (`group`, `key`, `spec`, as is normal for locations) that computes the location description can also be given. This is used, for example, for Russian federal subjects; see `construct_russia_federal_subject_keydesc`. The special string `+++` contained in the keydesc is replaced with the default value of the location description, which specifies the location's placename, placetype, and the corresponding values for each container in the container trail, generally up through (but not beyond) the country level; see `no_include_container_in_desc` below. The location description is used to construct the full description of various categories, such as bare location categories, whose description generally reads `"{{(((}}langname}}} terms related to the people, culture, or territory of ``keydesc``."` where ``keydesc`` is the specified or auto-constructed location description. * `fulldesc`: String overriding the full description for the bare location category (but not for any other category). This is currently used only for the location `Earth`, at the very top of the tree (because the standard `people, culture or territory of ...` text doesn't make sense here), and for `Antarctica` (because it has no permanent inhabitants). FIXME: This should be renamed `bare_category_fulldesc`. * `addl_parents`: Specify additional parents for the bare location category, in addition to the category or categories generated based on the immediate container(s). For example, `Hawaii, USA` specifies `Polynesia` as an additional parent category; both `North Korea` and `South Korea` specify `Korea` (which is a specially handled location category) as an additional parent; and `Earth` specifies `nature` (not a location category, but still a topic category) as an additional parent (which in this case becomes the first parent, as `Earth` has no container). The only restriction on the categories in `addl_parents` is that they must be topic categories, because each language-specific version of the bare location category gets the corresponding language-specific versions of the categories in `addl_parents`. FIXME: This shoudl be renamed `bare_category_addl_parents`. * `wp`: Spec describing how to construct the Wikipedia article for the location. Each spec is either `true` (equivalent to `"%l"`, i.e. use the full location placename directly) or a string containing formatting directives, indicating how to construct the article name. The allowed formatting directives are `%l` (the full location placename), `%e` (the elliptical location placename) and `%c` (the full placename of the first immediate container). For example, the default value of `wp` for the group of United States cities is `"%l, %c"` since the city articles tend to be named e.g. `Austin, Texas` (but with many exceptions, specified using `wp` fields at the city level). Another example is Thai provinces, which specify a group-level default of `"%e province"` as the Wikipedia articles have lowercase `province` in their name but the Thai province keys specified in this module have uppercase `Province`. Here we have to use `%e` to get the placename without the word `Province` in it. The default is `true`, which simply uses the full location placename as the article name. Note that the Wikipedia article, along with the Wikipedia and Commons category pages, are shown in the upper right of bare category pages. * `wpcat`: Spec describing how to construct the Wikipedia category page for the location (i.e. the page listing articles and categories relevant to the location). The format is the same as with `wp`, and it defaults to the value of `wp`. It rarely needs to be specified because the category page and the article page almost always follow the same format. * `commonscat`: Spec describing how to construct the Commons category page for the location (i.e. the page on the MediaWiki Commons site listing articles and categories relevant to the location). It has the same format as `wp` and `wpcat` and defaults to `wpcat`, which is usually (but not always) correct. * `the`: Boolean specifying whether a location should be preceded by `the` when following a preposition, e.g. in category names such as [[:Category:Cities in the Northern Territory, Australia]] and in old-style place descriptions when the location occurs as the first holonym, such as the city [[Darwin]] described using {{tl|place|city|terr/Northern Territory|c/Australia}}. Note that the global default for this and all Boolean properties is {nil}, which amounts to the same as {false}. * `british_spelling`: Boolean indicating whether the location in question uses British spelling. Currently this only affects whether the spelling `neighborhoods` or `neighbourhoods` is used in categories such as [[:Category:Neighborhoods of New York City]] and [[:Category:Neighbourhoods of Sydney]]. This usually needs to be set only at the top level (i.e. country or country-like entity), because lower-level entities look up the container trail for any container that has `british_spelling = true` set, and if found, assume that British spelling applies. The general principle used in setting this is that all countries in Europe, all dependent territories of any such country, all former British colonies, and any dependent territories of these former colonies, are assumed to use British spelling, while all other countries and associated dependent territories are assumed to use American spelling. This can potentially be modified on a case-by-case basis. * `is_city`: Boolean indicating whether the location in question is a city. This is explicitly set to `true` for city-states (e.g. Monaco and Vatican City), dependent territories that are cities (e.g. Hong Kong, Macau, Bonaire, Gibraltar, etc.), certain city-level administrative divisions (such as `City of Belfast, Northern Ireland`) and (through a group-levell setting) New York boroughs. In addition, it is set to `true` in initialize_spec() whenever the group-level `default_placetype == "city"`, so that all cities get it set without explicitly needing to add a group-level setting for this. Note that the condition `default_placetype == "city"` intentionally excludes Chinese prefecture-level cities, which aren't really cities in that (for example) they don't directly contain neighborhoods, but do contain cities within them. This setting is used in various places: (a) to add cities, rivers, etc. to categories like [[:Category:Rivers in Osaka Prefecture, Japan]] and [[:Category:Cities in Wuhan]] for holonyms that are ''not'' cities; (b) to add districts, neighborhoods, and the like to categories like [[:Category:Neighborhoods of Brooklyn]] and [[:Category:Neighborhoods of Monaco]] for holoynms that ''are'' cities; (c) generally, to determine which "generic" placetypes (cities, rivers, neighborhoods, etc.) apply to the location. (Those that can occur with cities have a `generic_before_cities` setting in [[Module:place/placetypes]], and those that can occur with non-cities have a `generic_before_non_cities` setting.) * `is_former_place`: Boolean that should be set on former places such as the Soviet Union and the Roman Empire. For such places, categories such as [[:Category:fr:Rivers in the Soviet Union]] are neither generated nor recognized (more generally, no "generic" placetypes apply except for `places`), and category descriptions include the word `former`. * `overriding_bare_label_parents`: Document me! * `bare_category_parent_type`: Document me! * `no_container_cat`: Document me! * `no_container_parent`: Document me! * `no_generic_place_cat`: Document me! * `no_check_holonym_mismatch`: Document me! * `no_auto_augment_container`: Document me! * `no_include_container_in_desc`: Document me! ====Location divisions==== The `divs` field of a location describes the recognized political division types of that location. Specifying a given division type will cause places defined as being of the specified division type and with the location as a holonym will cause the place to be categorized as ` ``placetypes`` in/of ``location`` `; for example, specifying that the United States has `"states"` as a division will cause anything defined as {{tl|place|fr|state|c/US}} to be categorized under [[:Category:fr:States of the United States]]. Note that you do not have to explicitly specify division types for "generic" placetypes (those that have a `generic_before_non_cities` field if the location is not a city, or that have a `generic_before_cities` field if the location is a city); this includes things like cities, towns, villages, neighbo(u)rhoods and rivers. A given element in the `divs` list is usually a string naming a plural placetype; the placetype is automatically converted to the singular for recognizing the placetype in a {{tl|place}} spec, and irregular plurals such as `kibbutzim` are handled correctly as long as the placetype specifies an appropriate `plural` field (if the `plural` isn't explicitly given, the default singularization algorithm in [[Module:en-utilities]] is run, which gets most things correctly but has problems with `passes` and `fortresses`, which are singularized to `passe` and `fortresse`; for this reason, an explicit plural entry is added to terms in ''-ss''). In place of a string, an object can be given with the plural placetype in the `type` field; this allows additional properties to be specified along with the placetype. An example of this is the `divs` list for Canada: { ["Canada"] = {divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, "counties", "districts", "municipalities", "regional municipalities", "rural municipalities", "parishes", "Indian reserves", "census divisions", {type = "townships", prep = "in"}, }, ...}, } Here, both provinces and territories are set to categorize as `provinces and territories`, meaning that there is a single category [[:Category:Provinces and territories of Canada]] rather than separate categories for provinces and territories. Similar things are done for other countries that have more than one type of first-level administrative division (e.g. Australia, China, India and Pakistan). Note that any placetype listed under `cat_as` must exist in the table of placetypes in [[Module:place/placetypes]], and in fact there is a category-only entry there for `provinces and territories!` (the use of exclamation point following a plural placetype means that the placetype is present only for use in categories and won't be recognized as the placetype field in a {{tl|place}} description). In addition, townships are declared to use `in` rather than `of` as the preposition in the category; hence the category name will be [[:Category:Townships in Canada]] rather than [[:Category:Townships of Canada]]. (The use of `in` vs. `of` is somewhat related to whether a given placetype is an official administrative or statistical division of the location in question and comes in a defined list, in which case `of` should be used, or is more ill-defined, in which case `in` should be used; the default is `of`, and the use of `in` with `townships` is probably by analogy with the use of `in` with cities and towns.) Another more complex example is the divisions given for Quebec: { ["Quebec, Canada"] = {divs = { "counties", {type = "regional county municipalities", container_parent_type = "regional municipalities"}, {type = "regions", container_parent_type = false}, {type = "townships", prep = "in"}, {type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}}, {type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}}, {type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}}, }, ...}, } Here, `container_parent_type` controls the second parent category of the placetype/location category associated with the entry. In this case, for example, [[:Category:Counties of Quebec, Canada]] will have [[:Category:Counties of Canada]] as its second or ''container-level'' parent. However, this doesn't make sense for `regional county municipalities`, which exist only in Quebec (so the parent category [[:Category:Regional county municipalities of Canada]] would have only one subcategory); but they are similar to regional municipalities in British Columbia, Nova Scotia and Ontario, so the `container_parent_type = "regional municipalities"` spec causes the container-level parent of this category to be [[:Category:Regional municipalities of Canada]]. Likewise, `regions` as administrative divisions (as opposed to mere geographic regions) exist only in Quebec; they have no equivalent elsewhere, so we disable the container-level parent using `container_parent_type = false`. The specs for `parish municipalities`, `township municipalities` and `village municipalities` show both that multiple types can be specified under `cat_as` (here, for example, we categorize `parish municipalities` as both `parishes` and `municipalities`) and that these types can themselves have properties, just as for entries directly under `divs`. Specifically, `{type = "parishes", container_parent_type = "counties"}` means that any place defined as a parish municipality in Quebec will be categorized under both [[:Category:Parishes of Quebec, Canada]] and [[:Category:Municipalities of Quebec, Canada]], and that the former will have a container-level parent of [[:Category:Counties of Canada]] (rather than the default of [[:Category:Parishes of Canada]]). Similarly, `township municipalities` will be categorized under both [[:Category:Townships in Quebec, Canada]] (''not'' [[:Category:Townships of Quebec, Canada]]) and [[:Category:Municipalities of Quebec, Canada]]. ====Container spec canonicalization==== A fully canonicalized container spec for a given location consists of a list of ''canonicalized container objects'', each with a `key` and `placetype` field. The `key` field should name the canonical key of some other location at a higher level (e.g. French cities are contained in French departments, which are contained in French regions, which are contained in France, which is contained in Europe, which is contained in Eurasia, which is contained in the Earth). The `placetype` field should correspond to the first (canonical) placetype listed for the key in question. The process of initializing a locaion spec converts the container spec in `.container` into a canonicalized spec in `.containers` and removes the spec from `.container`. It works as follows: # If the `container` field is missing, and there is a group-level `default_container` field, it is used in its place. For example, none of the Brazilian states listed in `brazil_states` specifies a container, but the group specifies `default_container = "Brazil"`. # A single string or canonicalized container object is allowed and made into a one-element list. # If a list element is a string that did ''not'' come from `default_container`, and there is a group-level `canonicalize_key_container` field, it is assumed to be a one-argument function and is called on the string to get a canonicalized container object. # Any remaining strings are assumed to be countries and are used directly as the `key`, with `placetype` set to `"quốc gia"`. ====Alias keys==== Aliases can be provided for canonical keys using ''alias keys''. Alias keys have a very different location spec structure from canonical keys. This structure does not, in general, have defaults at the group level and is not initialized using `initialize_spec()`, but is used as-is. The following properties are recognized in an alias location spec: * `alias_of`: The canonical key of which this key is an alias. Required. * `the`: If true, this alias key is preceded by `the` following a preposition. Defaults to the group-level `default_the` but does not pay attention to the value of `the` for the corresponding canonical key. * `display`: This is a display alias, meaning that holonyms using the placename corresponding to this alias will be converted to the placename corresponding to the canonical key when formatting the holonym for display. (Otherwise, the aliasing applies only to categorization.) If the value is true, the display canonicalization is to the placename of the canonical key; otherwise, the value should be a key whose corresponding placename is used when display canonicalizing. * `placetype`: The placetype of the alias. Rarely needs to be specified as it defaults to the canonical key's placetype, and if that is unspecified, to the group-level default placetype. ====Location group metadata tables==== As mentioned above, associated with each location group is a ''metadata table'' listing group-level properties. The metadata table contains two types of keys: group-level defaults (named like the corresponding location-level keys but preceded by `default_`, e.g. `default_placetype` corresponding to the location-level `placetype` key) and group-only keys, which are mostly functions. The following are the possible group-only keys: * `data`: This points to the group data table for the group, as described above. * `key_to_placename`: This is a function of one argument to transform the location's key (whether canonical or alias) into the full and elliptical placenames. The difference between full and elliptical placenames is described in the documentation for [[Module:place]], but in essence, it applies for keys that include the placetype in them (e.g. `Phuket Province, Thailand` or `County Mayo, Ireland`), in which case the full placename includes the placetype and the elliptical placename does not. For keys that do not include the placetype in them (e.g. `Arizona, USA` or `Gloucestershire, England`), the full and elliptical placenames are identical. Note that neither the full nor the elliptical placename includes the container in it; hence, for `Phuket Province, Thailand`, the full placename is `Phuket Province` and the elliptical placename is just `Phuket`. (Note that the full vs. elliptical placename distinction is intended only for handling cases where the placetype follows or precedes the raw placename and there is no difference between the two in whether they are normally preceded by `the`. More complex situations, such as `State of Mexico` (which normally takes `the`) vs. just `Mexico` (which doesn't), or `Islamabad Capital Territory` vs. just `Islamabad`, should be handled instead by aliases.) The `key_to_placename` function takes one argument, the key, and returns two arguments, the full and elliptical placenames, respectively. If left undefined, the default is to chop off anything starting with a comma and return the result as both full and elliptical placename, and if specifically set to `false`, the key is used directly as both full and elliptical placename. If it needs to be defined, it is best to use the helper function `make_key_to_placename`, if possible (or `make_irish_type_key_to_placename` in the case of Ireland and Northern Ireland, where `County` precedes), rather than rolling your own. In addition, you should use the global `key_to_placename` function (which takes care of the default implementation and such) rather than directly calling the function in the `key_to_placename` field. * `placename_to_key`: This is approximately the inverse of `key_to_placename`, transforming a placename (which can be either in full or elliptical form) into the corresponding key. As with `key_to_placename`, if you need to define this (generally, when the full and elliptical placenames are different), prefer using `make_placename_to_key` (or `make_irish_type_placename_to_key` for Ireland and Northern Ireland) to rolling your own. In addition, similarly to `key_to_placename`, use the global `placename_to_key` function to convert placenames to keys rather than directly invoking the function in the `placename_to_key` field. If the field is set to `false`, the placename is used unchanged as the key. Otherwise, the default algorithm works as follows: *# If the group-level `default_placetype == "city"`, use the placename unchanged as the key. *# Otherwise, if the group-level `default_container` exists and is a string, append it to the placename after a comma + space and use the result as the key. *# Otherwise, if the group-level `default_container` is a canonical container object (an object with `key` and `placetype` fields), and the `placetype` field is either `country` or `constituent country`, append the `key` field to the placename after a comma + space and use the result as the key. *# Otherwise, use the placename unchanged as the key. * `canonicalize_key_container`: A function of one argument to convert the specified `container` field, when a string, to canonical form. Described in more detail above under [[#Container spec canonicalization]]. It is preferable to construct the function using `make_canonicalize_key_container`, if possible, rather than rolling your own. * `addl_divs`: Additional political divisions appended, for all locations in the group, to the list of divisions derived from the location-level `divs` or group-level `default_divs` fields to get the final list of divisions for the location. See [[#Location divisions]] for more details. ]==] ----------------------------------------------------------------------------------- -- Helper functions -- ----------------------------------------------------------------------------------- --[==[ Throw an error. `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the format string as if `fmt:format(...)` were called. In general, callers should use `internal_error` unless the error was due to bad user input rather than a logic error (which usually isn't the case in deep back-end code like this). ]==] function export.process_error(fmt, ...) local args = {...} for i = 1, select("#", ...) do args[i] = dump(args[i]) end return error(string.format(fmt, unpack(args))) end --[==[ Throw an internal error (a logic error that should never happen unless there is a bug in the code, as opposed to a user error triggered by bad input or a system error due to something like running out of memory or hitting a time limit). `fmt` is a format string and the remaining arguments are passed through `mw.dumpObject` and then used to format the format string as if `fmt:format(...)` were called. ]==] function export.internal_error(fmt, ...) export.process_error("Internal error: " .. fmt, ...) end local internal_error = export.internal_error -- Return whether `list_or_element` (a list of strings, or a single string) "contains" `item` (a string). If -- `list_or_element` is a list, this returns true if `item` is in the list; otherwise it returns true if `item` -- equals `list_or_element`. local function list_or_element_contains(list_or_element, item) if type(list_or_element) == "table" then return m_table.contains(list_or_element, item) and true or false end return list_or_element == item end --[==[ Call the location group's `key_to_placename` function if it exists (see the comment at the top of [[Module:place]] for the distinction between keys and placenames). Two values are returned, the full and elliptical placenames (e.g. full `"County Durham"` vs. elliptical `"Durham"`). If the group does not define `key_to_placename`, both full and elliptical placenames are computed by chopping off anything starting with a comma. ]==] function export.key_to_placename(group, key) if group.key_to_placename == false then return key, key end if group.key_to_placename then local full_placename, elliptical_placename = group.key_to_placename(key) if type(full_placename) ~= "string" then internal_error("Key %s returned a non-string full placename: %s", key, full_placename) end if type(elliptical_placename) ~= "string" then internal_error("Key %s returned a non-string elliptical placename: %s", key, elliptical_placename) end return full_placename, elliptical_placename end key = key:gsub(",.*", "") return key, key end --[==[ Call the location group's `placename_to_key` function if it exists (see the comment at the top of [[Module:place]] for the distinction between keys and placenames) and return the result. If `placename_to_key` exists with the value `false`, return the placename unchanged. If the group does not define `placename_to_key`, and it defines a `default_container` whose placetype is either `country` or `constituent country`, the container name is appended to the placename after a comma and a space. Otherwise the placename is returned unchanged. ]==] function export.placename_to_key(group, placename) if group.placename_to_key == false then return placename elseif group.placename_to_key then local key = group.placename_to_key(placename) if type(key) ~= "string" then internal_error("Placename %s returned a non-string key: %s", placename, key) end return key elseif group.default_placetype == "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 == "quốc gia" or defcon.placetype == "constituent country") then return placename .. ", " .. defcon.key else return placename end end end --[==[ Initialize the location spec `spec`, augmenting it with default values taken from `group` if the spec itself doesn't specify values for the properties. This sets `containers` to a canonicalized list of objects, each with `key` and `placetype` keys, describing the immediate containers of the location, and erases (sets to nil) the original non-canonicalized `container` field. (Most locations have only one immediate container but some, e.g. Russia, have more than one. Containers should be carefully distinguished from category parents. Generally the container is the first category parent, or the first ``n`` parents if there are ``n`` containers, but there may be additional category parents, which indicate some sort of relation between the category parent and the location but not necessarily one of containment.) This function is idempotent in that nothing happens if called more than once on the same spec. FIXME: Consider reimplementing this in a more standardly object-oriented way using metatables. ]==] function export.initialize_spec(group, key, spec) if spec.initialized then return end local container = spec.container local containers local container_from_default if not container then container = group.default_container container_from_default = true end if container then if type(container) == "string" or container.key then container = {container} end containers = {} for _, cont in ipairs(container) do if type(cont) == "string" then if group.canonicalize_key_container and not container_from_default then cont = group.canonicalize_key_container(cont) else cont = {key = cont, placetype = "quốc gia"} end end insert(containers, cont) end end spec.containers = containers spec.container = nil local function value_with_default(val, default_val) if val == nil then return default_val else return val end end local function set_or_default(prop) spec[prop] = value_with_default(spec[prop], group["default_" .. prop]) end set_or_default("placetype") if not spec.placetype then internal_error("No placetype found in key %s for spec %s or in group `default_placetype`", key, spec) end set_or_default("divs") spec.addl_divs = group.addl_divs for _, prop in ipairs { "keydesc", "fulldesc", "addl_parents", "overriding_bare_label_parents", "bare_category_parent_type", "wp", "wpcat", "commonscat", "british_spelling", "the", "no_container_cat", "no_container_parent", "no_generic_place_cat", "no_check_holonym_mismatch", "no_auto_augment_container", "no_include_container_in_desc", "is_city", "is_former_place", } do set_or_default(prop) end -- `default_placetype == "city"` is correct; if `default_placetype` has something else like `prefecture-level city` -- as the canonical placetype but also lists `city` (as Chinese prefecture-level cities do), don't mark as -- is_city. spec.is_city = value_with_default(spec.is_city, group.default_placetype == "city") spec.initialized = true end --[=[ Given a location group, key and possible placetypes that the placename must match, check if the key exists in the group with at least one of the group's key's placetypes matching one of the passed-in placetypes. If so, return two values: the group key (which potentially could differ from the passed-in key due to aliases) and the corresponding spec object, which (as with all functions that return spec objects) has been initialized using `initialize_spec()` (i.e. default property values have been copied from the group into the spec, if the spec doesn't itself specify a value for the property in question). `alias_resolution` controls how aliases are resolved. Normally, both display and category aliases are followed, and the returned key will reflect the canonical location key. However, if `alias_resolution` is {"none"}, no alias following happens. In that case, if the key specifies an alias, the spec for the alias rather than the spec for the canonical location is returned, and importantly, it is returned uninitialized, meaning that properties from the group are not copied into the spec. (If the key specifies a canonical location, its spec is returned initialized, as in the normal case where `alias_resolution` is unspecified.) The caller needs to check whether the returned spec is an alias by looking for an `alias_of` property. If `alias_resolution` is {"display"}, the behavior is the same as for {"none"} except that if the alias contains a setting `display = true`, the returned key will reflect the canonical location key, and if the alias contains a setting `display = ``string`` `, the returned key will reflect that string. This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or `find_canonical_key` (for known-canonical locations where the placetype isn't known). ]=] local function find_matching_key_in_group(group, placetypes, key, alias_resolution) if alias_resolution ~= nil and alias_resolution ~= "none" and alias_resolution ~= "display" and alias_resolution ~= "all" then internal_error("Bad value for 'alias_resolution': %s", alias_resolution) end local spec = group.data[key] if not spec then return nil end local function check_correct_placetype(placetype) if type(placetype) == "table" then for _, pt in ipairs(placetype) do if list_or_element_contains(placetypes, pt) then return true end end return false else return list_or_element_contains(placetypes, placetype) end end if spec.alias_of then local resolved_key = spec.alias_of local resolved_spec = group.data[resolved_key] if not resolved_spec then internal_error("Key %s is an alias of %s, which doesn't exist", key, resolved_key) elseif resolved_spec.alias_of then internal_error("Key %s is an alias of %s, which is itself an alias; indirect aliasing not allowed", key, resolved_key) end if alias_resolution == "none" or alias_resolution == "display" then -- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group. local placetype = spec.placetype or resolved_spec.placetype or group.default_placetype if not placetype then internal_error("No placetype found for key %s in any of spec %s, alias-resolved spec %s or in group " .. "`default_placetype`", key, spec, resolved_spec) end if not check_correct_placetype(placetype) then return nil end if alias_resolution == "display" then if spec.display == true then key = resolved_key elseif spec.display then key = spec.display end end return key, spec end key = resolved_key spec = resolved_spec end -- We could be working with non-initialized/defaulted spec, since we're pulling it directly from the group. local placetype = spec.placetype or group.default_placetype if not placetype then internal_error("No placetype found for key %s in spec %s or group `default_placetype`", key, spec) end if not check_correct_placetype(placetype) then return nil end export.initialize_spec(group, key, spec) return key, spec end --[=[ Given a location group, placename and possible placetypes that the placename must match, check if the placename exists in the group with at least one of the placetypes of the key in the group that corresponds to the placename matching one of the passed-in placetypes. If so, return two values: the key corrsponding to the passed-in placename and the corresponding spec object. This is similar to `find_matching_key_in_group()` but works with placenames rather than keys. `alias_resolution` is as in `find_matching_key_in_group()`. This is a low-level function meant for internal use; external callers should generally use `get_matching_location` (for internally-derived locations), `find_matching_holonym_location` (for externally-derived locations) or `find_canonical_key` (for known-canonical locations where the placetype isn't known). ]=] local function find_matching_placename_in_group(group, placetypes, placename, alias_resolution) local key = export.placename_to_key(group, placename) return find_matching_key_in_group(group, placetypes, key, alias_resolution) end --[==[ If `key` is a canonical known location key (i.e. not an alias), return the corresponding group and initialized spec. If no such key exists, return {nil}. This throws an internal error if two locations with the same key are found. ]==] function export.find_canonical_key(key) local found_locations = {} for _, group in ipairs(export.locations) do local spec = group.data[key] if not spec then -- do nothing elseif spec.alias_of then mw.log(("Skipping alias '%s' of canonical '%s'"):format(key, spec.alias_of)) else insert(found_locations, {group, spec}) end end if not found_locations[1] then return nil elseif found_locations[2] then internal_error("Found multiple matching locations for canonical key %s: %s", key, found_locations) else local group, spec = unpack(found_locations[1]) export.initialize_spec(group, key, spec) return group, spec end end --[==[ Iterator that returns all locations matching a given description, where the description consists of either a placename or a key along with a list of possible placetypes. Usually there will be at most one such location. The iterator returns three values at each iteration: the location group, canonical key by which the location is known and the spec object describing the location. `data` contains the following possible fields: * `placetypes`: A list of possible placetypes, one of which must match one of the location's placetypes; or a string specifying a placetype, which must match one of the location's placetypes. This must be specified. * `placename`: The placename of the location. Either this or `key` must be specified. * `key`: The key of the location. Either this or `placename` must be specified. * `alias_resolution`: If specified, it behaves the same as for `find_matching_key_in_group`. The spec is normally initialized using `initialize_spec()` prior to it being returned (but may not be if `alias_resolution` is given and the specified key or placename is an alias; see the documentation for `find_matching_key_in_group`). ]==] function export.iterate_matching_location(data) local i = 0 local n = #export.locations return function() while true do i = i + 1 if i > n then break end local group = export.locations[i] local key, spec if data.placename then key, spec = find_matching_placename_in_group(group, data.placetypes, data.placename, data.alias_resolution) else if not data.key then internal_error("'.placename' or '.key' must be defined: %s", data) end key, spec = find_matching_key_in_group(group, data.placetypes, data.key, data.alias_resolution) end if key then return group, key, spec end end end end --[==[ Return the location matching a given description, where the description consists of either a placename or a key along with a list of possible placetypes. This is similar to `iterate_matching_location()` but throws an internal error if there is not exactly one location found; as such, it is for use with internally specified locations (such as the containers of known locations) rather than externally specified locations, which may not match a known location and in some cases may match multiple known locations. For finding an externally specified location, consider using `find_matching_holonym_location`, which returns {nil} rather than throwing an error if the location isn't found, but also (more importantly) checks to make sure there are no conflicting holonyms among the user-specified holonyms (e.g. {{tl|place|city|s/Delaware|c/USA|t=Newark}} will not match the known location `Newark` (in New Jersey, not Delaware). ]==] function export.get_matching_location(data) local all_found = {} for group, key, spec in export.iterate_matching_location(data) do insert(all_found, {group, key, spec}) end if not all_found[1] then internal_error("Couldn't find matching location for data %s", data) elseif all_found[2] then internal_error("Found multiple matching locations for data %s: %s", data, all_found) else return unpack(all_found[1]) end end --[==[ Successively iterate over a location's containers, and then the containers of those containers, etc. Keep in mind that locations may have multiple containers (e.g. Russia has both Europe and Asia as containers, and both Europe and Asia have Eurasia as their container). A given container will never be returned twice (e.g. in the case where a specific location A has locations B and C as containers, and B has C as its container, C will not be returned twice). An internal error happens if a container loop is detected. The return value is a list of location objects, each of which contains `group`, `key` and `spec` fields. ]==] function export.iterate_containers(group, key, spec) local keys_seen = {} keys_seen[key] = true local iterations = 0 local last_iteration_containers = {{group = group, key = key, spec = spec}} return function() iterations = iterations + 1 if iterations > 10 then internal_error("Probable loop in containers when processing key %s", key) end local next_iteration_containers = {} for _, location in ipairs(last_iteration_containers) do local containers = location.spec.containers if containers then for _, container in ipairs(containers) do local container_group, container_key, container_spec = export.get_matching_location { placetypes = container.placetype, key = container.key, } if not keys_seen[container_key] then insert(next_iteration_containers, { group = container_group, key = container_key, spec = container_spec }) keys_seen[container_key] = true end end end end if not next_iteration_containers[1] then return nil end last_iteration_containers = next_iteration_containers return next_iteration_containers end end --[==[ Given a placename, convert it into a link (two-part if `display_form` is given and differs from `placename`) and add `"the "` to the beginning if called for in `spec`. ]==] function export.construct_linked_placename(spec, placename, display_form) local linked_placename = display_form and placename ~= display_form and ("[[%s|%s]]"):format(placename, display_form) or ("[[%s]]"):format(placename) if spec.the then linked_placename = "the " .. linked_placename end return linked_placename end --[=[ This is typically used to define `key_to_placename`. It generates a function that chops off parts of a string (a location key), typically at the end, in order to get the full and elliptical versions of a placename. (See the documentation above for `key_to_placename` under "Location group tables" for the difference between full and elliptical placenames.) `container_patterns` is a Lua pattern or a list of possible patterns matching the container at the end of the key, which will be used to remove that container. If multiple patterns are specified, each one is tried until one matches. If `container_patterns` is omitted, this part of the process is skipped. The reulting string becomes the full placename. If `divtype_patterns` is specified, it is likewise either a Lua pattern or list of possible patterns to match and remove the political division affixed onto the end (or possibly the beginning) of the key in the keys of certain countries (such as South Korean and North Korean counties, which include the word "County" in the key). The resulting chopped string becomes the elliptical placename. If `divtype_patterns` is omitted, this part of the process is skipped and the full and elliptical placenames are the same. Typical usage is as follows: ``` key_to_placename = make_key_to_placename(", England$"), ``` or (when the political division is part of the key) ``` key_to_placename = make_key_to_placename(", South Korea$", " County$") ``` ]=] local function make_key_to_placename(container_patterns, divtype_patterns) if type(container_patterns) == "string" then container_patterns = {container_patterns} end if type(divtype_patterns) == "string" then divtype_patterns = {divtype_patterns} end return function(key) local full_placename = key if container_patterns then for _, container_pattern in ipairs(container_patterns) do local nsubs full_placename, nsubs = full_placename:gsub(container_pattern, "") if nsubs > 0 then break end end end local elliptical_placename = full_placename if divtype_patterns then for _, divtype_pattern in ipairs(divtype_patterns) do local nsubs elliptical_placename, nsubs = elliptical_placename:gsub(divtype_pattern, "") if nsubs > 0 then break end end end return full_placename, elliptical_placename end end --[=[ This is typically used to define `placename_to_key`. It generates a function that appends a string to the end of a given placename to get the key (see the definition of `placename_to_key` above in the documentation under "Location group tables"). Optional `divtype_suffix` is a raw string (which should not contain hyphens or other characters that have special meaning in Lua patterns) to be appended first to the placename; if already present at the end, it is not appended. `container_suffix` is then added in the same fashion if given. Typical usage is like this: ``` placename_to_key = make_placename_to_key(", England") ``` (which will convert e.g. `"Hampshire"` into `"Hampshire, England"`) or ``` placename_to_key = make_placename_to_key(", South Korea", " County") ``` (which will convert e.g. `"Gangwon"` or `"Gangwon County"` into `"Gangwon County, South Korea"`). ]=] local function make_placename_to_key(container_suffix, divtype_suffix) return function(placename) local key = placename if divtype_suffix then if not key:find(divtype_suffix .. "$") then key = key .. divtype_suffix end end if container_suffix then key = key .. container_suffix end return key end end --[=[ This is typically used to define `canonicalize_key_container`, which converts a container as specified in the location data into the canonical form containing both the full container key and its placetype. It generates a function to do the canonicalization of a given container. If the container is a string, `suffix` is appended onto the string (use {nil} or {""} if there is no suffix to append), and the placetype is set to `placetype`. Otherwise the container is left as-is. Typical usage is like this: ``` canonicalize_key_container = make_canonicalize_key_container(", Canada", "province") ``` which will convert e.g. `"Ontario"` into `{key = "Ontario, Canada", placetype = "province"}`. ]=] local function make_canonicalize_key_container(suffix, placetype) return function(container) if type(container) == "string" then return {key = container .. (suffix or ""), placetype = placetype} else return container end end end ----------------------------------------------------------------------------------- -- Top-level tables -- ----------------------------------------------------------------------------------- export.continents = { ["Trái Đất"] = {placetype = "planet", addl_parents = {"tự nhiên"}, fulldesc = "=là hành tinh thứ ba tính từ Mặt Trời", commonscat = "Earth"}, ["châu Phi"] = {placetype = "continent", commonscat = "Africa", container = {key = "Trái Đất", placetype = "planet"}}, ["châu Mỹ"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"}, keydesc = "[[America]], in the sense of [[North America]] and [[South America]] combined", wp = "Châu Mỹ"}, ["Americas"] = {alias_of = "châu Mỹ", the = true}, ["America"] = {alias_of = "châu Mỹ", the = true}, ["Bắc Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}}, ["Caribe"] = {the = true, placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}}, ["Trung Mỹ"] = {placetype = {"continental region", "region"}, container = {key = "Bắc Mỹ", placetype = "continent"}}, ["Nam Mỹ"] = {placetype = "continent", container = {key = "châu Mỹ", placetype = "supercontinent"}}, ["châu Nam Cực"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}, fulldesc = "=lục địa nằm xa về phía nam và tây nhất trên Trái Đất, chứa Cực Nam địa lý và nằm trong Vùng Nam Cực của Nam Bán cầu"}, ["Đại lục Á Âu"] = {placetype = {"supercontinent", "continent"}, container = {key = "Trái Đất", placetype = "planet"}, keydesc = "một khu vực đất đai rộng lớn, bao gồm châu Âu và châu Á"}, ["châu Á"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}}, ["châu Âu"] = {placetype = "continent", container = {key = "Đại lục Á Âu", placetype = "supercontinent"}}, ["châu Đại Dương"] = {placetype = "continent", container = {key = "Trái Đất", placetype = "planet"}}, ["Melanesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, ["Micronesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, ["Polynesia"] = {placetype = {"continental region", "region"}, container = {key = "châu Đại Dương", placetype = "continent"}}, } export.continents_group = { default_overriding_bare_label_parents = {}, -- container parents should be used default_divs = {{type = "quốc gia", prep = "của"}}, -- It's enough to mention the first-level continent or continent group. It seems excessive to write e.g. -- "El Salvador, a country in Central America, a continental region in North America, a continent in America, ...". default_no_include_container_in_desc = true, default_no_container_cat = true, default_no_container_parent = true, default_no_auto_augment_container = true, default_no_generic_place_cat = true, -- French Guyana is in France but not in Europe, which should not be an issue, so don't check holonym mismatches at -- this level. We also run into problems with supercontinents, which have "continent" as the fallback and cause -- mismatches. default_no_check_holonym_mismatch = true, data = export.continents, } -- Countries: including those with partial recognition that are normally considered countries (e.g. Kosovo, Taiwan). export.countries = { ["Afghanistan"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Albania"] = {container = "Europe", divs = {"counties", "municipalities", "communes", {type = "administrative units", cat_as = "communes"}, }, british_spelling = true}, ["Algeria"] = {container = "Africa", divs = {"provinces", "communes", "districts", "municipalities"}}, ["Andorra"] = {container = "Europe", divs = {"parishes"}, british_spelling = true}, ["Angola"] = {container = "Africa", divs = {"provinces", "municipalities"}}, ["Antigua and Barbuda"] = {container = "Caribbean", divs = {"provinces"}, british_spelling = true}, ["Argentina"] = {container = "South America", divs = {"provinces", "departments", "municipalities"}}, ["Armenia"] = {container = {"Europe", "Asia"}, divs = {"provinces", "districts", "municipalities"}, british_spelling = true}, ["Republic of Armenia"] = {alias_of = "Armenia", the = true}, -- differs in "the" -- Both a country and continent ["Australia"] = {container = "Oceania", divs = { {type = "states", cat_as = "states and territories"}, {type = "territories", cat_as = "states and territories"}, {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and territories"}, {type = "ABBREVIATION_OF territories", cat_as = "abbreviations of states and territories"}, "local government areas", "dependent territories", }, british_spelling = true}, ["Austria"] = {container = "Europe", divs = {"states", "districts", "municipalities"}, british_spelling = true}, ["Azerbaijan"] = {container = {"Europe", "Asia"}, divs = {"districts", "municipalities"}, british_spelling = true}, ["Bahamas"] = {the = true, container = "Caribbean", divs = {"districts"}, british_spelling = true, wp = "The %l"}, ["Bahrain"] = {container = "Asia", divs = {"governorates"}}, ["Bangladesh"] = {container = "Asia", divs = {"divisions", "districts", "municipalities"}, british_spelling = true}, ["Barbados"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Belarus"] = {container = "Europe", divs = {"regions", "districts"}, british_spelling = true}, ["Belgium"] = {container = "Europe", divs = {"regions", "provinces", "municipalities"}, british_spelling = true}, ["Belize"] = {container = "Central America", divs = {"districts"}, british_spelling = true}, ["Benin"] = {container = "Africa", divs = {"departments", "communes"}}, ["Bhutan"] = {container = "Asia", divs = {"districts", "gewogs"}}, ["Bolivia"] = {container = "South America", divs = {"provinces", "departments", "municipalities"}}, ["Bosnia and Herzegovina"] = {container = "Europe", divs = {"entities", "cantons", "municipalities"}, british_spelling = true}, ["Bosnia and Hercegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia-Herzegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia-Hercegovina"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Bosnia"] = {alias_of = "Bosnia and Herzegovina", display = true}, ["Botswana"] = {container = "Africa", divs = {"districts", "subdistricts"}, british_spelling = true}, ["Brazil"] = {container = "South America", divs = { "states", "municipalities", "macroregions", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, }}, ["Brunei"] = {container = "Asia", divs = {"districts", "mukims"}, british_spelling = true}, ["Bulgaria"] = {container = "Europe", divs = {"provinces", "municipalities"}, british_spelling = true}, ["Burkina Faso"] = {container = "Africa", divs = {"regions", "departments", "provinces"}}, ["Burundi"] = {container = "Africa", divs = {"provinces", "communes"}}, ["Cambodia"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Cameroon"] = {container = "Africa", divs = {"regions", "departments"}}, ["Canada"] = {container = "North America", divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, {type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces and territories"}, {type = "ABBREVIATION_OF territories", cat_as = "abbreviations of provinces and territories"}, "counties", "districts", "municipalities", "regional municipalities", "rural municipalities", "parishes", -- Don't change the following to something more politically correct (e.g. "First Nations reserves") until/unless -- the Canadian government makes a similar switch (and note that as of Apr 18 2025, the Wikipedia article is -- still at [[w:Indian reserves]]). "Indian reserves", "census divisions", {type = "townships", prep = "in"}, }, british_spelling = true}, ["Cape Verde"] = {container = "Africa", divs = {"municipalities", "parishes"}}, ["Cabo Verde"] = {alias_of = "Cape Verde", display = true}, ["Central African Republic"] = {the = true, container = "Africa", divs = {"prefectures", "subprefectures"}}, ["CAR"] = {alias_of = "Central African Republic", display = true, the = true}, ["C.A.R"] = {alias_of = "Central African Republic", display = true, the = true}, ["Chad"] = {container = "Africa", divs = {"regions", "departments"}}, ["Chile"] = {container = "South America", divs = {"regions", "provinces", "communes"}}, ["China"] = {container = "Asia", divs = { {type = "provinces", cat_as = "provinces and autonomous regions"}, {type = "autonomous regions", cat_as = "provinces and autonomous regions"}, {type = "FORMER provinces", cat_as = "former provinces"}, "special administrative regions", "prefectures", {type = "FORMER prefectures", cat_as = "former prefectures"}, "prefecture-level cities", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, {type = "FORMER counties", cat_as = "former counties and county-level cities"}, {type = "FORMER county-level cities", cat_as = "former counties and county-level cities"}, -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities. "districts", {type = "FORMER districts", cat_as = "former districts"}, "subdistricts", "townships", "municipalities", {type = "direct-administered municipalities", cat_as = "municipalities"}, }}, ["People's Republic of China"] = {alias_of = "China", the = true}, -- differs in "the" ["Colombia"] = {container = "South America", divs = {"departments", "municipalities"}}, ["Comoros"] = {the = true, container = "Africa", divs = {"autonomous islands"}}, ["Costa Rica"] = {container = "Central America", divs = {"provinces", "cantons"}}, ["Croatia"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Cuba"] = {container = "Caribbean", divs = {"provinces", "municipalities"}}, ["Cyprus"] = {container = {"Europe", "Asia"}, divs = {"districts"}, british_spelling = true}, ["Czech Republic"] = {the = true, container = "Europe", divs = {"regions", "districts", "municipalities"}, british_spelling = true}, ["Czechia"] = {alias_of = "Czech Republic"}, -- differs in "the" ["Democratic Republic of the Congo"] = {the = true, container = "Africa", divs = {"provinces", "territories"}}, ["Congo"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["DRC"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["D.R.C"] = {alias_of = "Democratic Republic of the Congo", display = true, the = true}, ["Denmark"] = {container = "Europe", divs = {"regions", "municipalities", "dependent territories"}, british_spelling = true, -- Wikipedia separates [[w:Denmark]] (constituent country) from [[w:Danish Realm]] (country) }, ["Djibouti"] = {container = "Africa", divs = {"regions", "districts"}}, ["Dominica"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Dominican Republic"] = {the = true, container = "Caribbean", divs = {"provinces", "municipalities"}, keydesc = "the [[Dominican Republic]], the country that shares the [[Caribbean]] island of [[Hispaniola]] with [[Haiti]]"}, ["East Timor"] = {container = "Asia", divs = {"municipalities"}, wp = "Timor-Leste"}, ["Timor-Leste"] = {alias_of = "East Timor", display = true}, ["Ecuador"] = {container = "South America", divs = {"provinces", "cantons"}}, ["Egypt"] = {container = "Africa", divs = {"governorates", "regions"}, british_spelling = true}, ["El Salvador"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Equatorial Guinea"] = {container = "Africa", divs = {"provinces"}}, ["Eritrea"] = {container = "Africa", divs = {"regions", "subregions"}}, ["Estonia"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Eswatini"] = {container = "Africa", british_spelling = true}, ["Swaziland"] = {alias_of = "Eswatini", display = true}, ["Ethiopia"] = {container = "Africa", divs = {"regions", "zones"}}, ["Federated States of Micronesia"] = {the = true, container = "Micronesia", divs = {"states"}}, ["Micronesia"] = {alias_of = "Federated States of Micronesia"}, ["Fiji"] = {container = "Melanesia", divs = {"divisions", "provinces"}, british_spelling = true}, ["Finland"] = {container = "Europe", divs = {"regions", "municipalities"}, british_spelling = true}, ["France"] = {container = "Europe", divs = {"regions", "cantons", "collectivities", "communes", {type = "municipalities", cat_as = "communes"}, "departments", {type = "prefectures", cat_as = {"prefectures", "departmental capitals"}}, {type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}}, "dependent territories", "territories", "provinces", }, british_spelling = true}, ["Gabon"] = {container = "Africa", divs = {"provinces", "departments"}}, ["Gambia"] = {the = true, container = "Africa", divs = {"divisions", "districts"}, british_spelling = true, wp = "The %l"}, ["Georgia"] = {container = {"Europe", "Asia"}, divs = {"regions", "districts"}, keydesc = "the country of [[Georgia]], in [[Eurasia]]", british_spelling = true, wp = "%l (country)"}, ["Germany"] = {container = "Europe", divs = { "states", -- Bavaria, Baden-Württemberg, Hesse and North Rhine-Westphalia have administrative regions as divisions, but -- there aren't really enough of them to categorize per state. "regions", "municipalities", "districts"}, british_spelling = true}, ["Ghana"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Greece"] = {container = "Europe", divs = {"regions", "regional units", "municipalities", {type = "peripheries", cat_as = {"regions"}}, }, british_spelling = true}, ["Grenada"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Guatemala"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Guinea"] = {container = "Africa", divs = {"regions", "prefectures"}}, ["Guinea-Bissau"] = {container = "Africa", divs = {"regions"}}, ["Guyana"] = {container = "South America", divs = {"regions"}, british_spelling = true}, ["Haiti"] = {container = "Caribbean", divs = {"departments", "arrondissements"}}, ["Honduras"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Hungary"] = {container = "Europe", divs = {"counties", "districts"}, british_spelling = true}, ["Iceland"] = {container = "Europe", divs = {"regions", "municipalities", "counties"}, british_spelling = true}, ["India"] = {container = "Asia", divs = { {type = "states", cat_as = "states and union territories"}, {type = "union territories", cat_as = "states and union territories"}, {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states and union territories"}, {type = "ABBREVIATION_OF union territories", cat_as = "abbreviations of states and union territories"}, "divisions", "districts", "municipalities", }, british_spelling = true}, ["Indonesia"] = {container = "Asia", divs = {"regencies", "provinces", {type = "ABBREVIATION_OF provinces", cat_as = "abbreviations of provinces"}, }}, ["Iran"] = {container = "Asia", divs = {"provinces", "counties"}}, ["Iraq"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Ireland"] = {container = "Europe", addl_parents = {"British Isles"}, divs = {"counties", "districts", "provinces"}, british_spelling = true, wp = "Republic of %l"}, ["Republic of Ireland"] = {alias_of = "Ireland", the = true}, -- differs in "the" ["Israel"] = {container = "Asia", divs = {"districts"}}, ["Italy"] = {container = "Europe", divs = { "regions", "provinces", "metropolitan cities", "municipalities", {type = "autonomous regions", cat_as = "regions"}, }, british_spelling = true}, ["Ivory Coast"] = {container = "Africa", divs = {"districts", "regions"}}, -- We should really be using Ivory Coast (common name) but there are political ramifications to the use of -- Côte d'Ivoire so don't make it a display alias. ["Côte d'Ivoire"] = {alias_of = "Ivory Coast"}, ["Jamaica"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Japan"] = {container = "Asia", divs = {"prefectures", "subprefectures", "municipalities"}}, ["Jordan"] = {container = "Asia", divs = {"governorates"}}, ["Kazakhstan"] = {container = {"Asia", "Europe"}, divs = {"regions", "districts"}}, ["Kenya"] = {container = "Africa", divs = {"counties"}, british_spelling = true}, ["Kiribati"] = {container = "Micronesia", british_spelling = true}, ["Kosovo"] = {container = "Europe", divs = {"districts", "municipalities"}, british_spelling = true}, ["Kuwait"] = {container = "Asia", divs = {"governorates", "areas"}}, ["Kyrgyzstan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Laos"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Latvia"] = {container = "châu Âu", divs = {"municipalities"}, british_spelling = true}, ["Lebanon"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Lesotho"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Liberia"] = {container = "Africa", divs = {"counties", "districts"}}, ["Libya"] = {container = "Africa", divs = {"districts", "municipalities"}}, ["Liechtenstein"] = {container = "Europe", divs = {"municipalities"}, british_spelling = true}, ["Lithuania"] = {container = "Europe", divs = {"counties", "municipalities"}, british_spelling = true}, ["Luxembourg"] = {container = "Europe", divs = {"cantons", "districts"}, british_spelling = true}, ["Madagascar"] = {container = "Africa", divs = {"regions", "districts"}}, ["Malawi"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Malaysia"] = {container = "Asia", divs = {"states", "federal territories", "districts"}, british_spelling = true}, ["Maldives"] = {the = true, container = "Asia", divs = {"provinces", "administrative atolls"}, british_spelling = true}, ["Mali"] = {container = "Africa", divs = {"regions", "cercles"}}, ["Malta"] = {container = "Europe", divs = {"regions", "local councils"}, british_spelling = true}, ["Marshall Islands"] = {the = true, container = "Micronesia", divs = {"municipalities"}}, ["Mauritania"] = {container = "Africa", divs = {"regions", "departments"}}, ["Mauritius"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Mexico"] = {container = "North America", addl_parents = {"Central America"}, divs = { "states", "municipalities", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, }}, ["Moldova"] = {container = "Europe", divs = { {type = "districts", cat_as = "districts and autonomous territorial units"}, {type = "autonomous territorial units", cat_as = "districts and autonomous territorial units"}, "communes", "municipalities", }, british_spelling = true}, ["Monaco"] = {placetype = {"city-state", "quốc gia"}, container = "Europe", -- We want the first placetype to be 'city-state' so the description of Monaco says it's a city-state, but we -- want its parent to be "countries in Europe". bare_category_parent_type = {type = "countries", prep = "in"}, is_city = true, british_spelling = true}, ["Mongolia"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Montenegro"] = {container = "Europe", divs = {"municipalities"}}, ["Morocco"] = {container = "Africa", divs = {"regions", "prefectures", "provinces"}}, ["Mozambique"] = {container = "Africa", divs = {"provinces", "districts"}}, ["Myanmar"] = {container = "Asia", divs = {"regions", "states", "union territories", {type = "self-administered zones", cat_as = "self-administered areas"}, {type = "self-administered divisions", cat_as = "self-administered areas"}, "districts"}}, ["Burma"] = {alias_of = "Myanmar"}, -- not display-canonicalizing; has political connotations ["Namibia"] = {container = "Africa", divs = {"regions", "constituencies"}, british_spelling = true}, ["Nauru"] = {container = "Micronesia", divs = {"districts"}, british_spelling = true}, ["Nepal"] = {container = "Asia", divs = {"provinces", "districts"}}, ["Netherlands"] = {the = true, placetype = {"quốc gia", "constituent country"}, container = "Europe", divs = {"provinces", "municipalities", {type = "FORMER municipalities", cat_as = "former municipalities"}, "dependent territories", "constituent countries"}, british_spelling = true, -- Wikipedia separates [[w:Netherlands]] (constituent country) from [[w:Kingdom of the Netherlands]] -- (country) }, ["New Zealand"] = {container = "Polynesia", divs = { "regions", "dependent territories", "territorial authorities", {type = "districts", cat_as = "territorial authorities"}, }, british_spelling = true}, ["Nicaragua"] = {container = "Central America", divs = {"departments", "municipalities"}}, ["Niger"] = {container = "Africa", divs = {"regions", "departments"}}, ["Nigeria"] = {container = "Africa", divs = { "states", -- Categorize the Federal Capital Territory as a state because there's only one of it; we could categorize -- everything under 'states and territories' but that seems a bit pointless. {type = "federal territories", cat_as = "states"}, "local government areas", }, british_spelling = true}, ["North Korea"] = {container = "Asia", addl_parents = {"Korea"}, divs = {"provinces", "counties"}}, ["North Macedonia"] = {container = "Europe", divs = {"regions", "municipalities"}, british_spelling = true}, ["Macedonia"] = {alias_of = "North Macedonia", display = true}, ["Republic of North Macedonia"] = {alias_of = "North Macedonia", the = true}, -- differs in "the" ["Republic of Macedonia"] = {alias_of = "North Macedonia", the = true}, -- differs in "the" ["Norway"] = {container = "Europe", divs = {"counties", "municipalities", "dependent territories", "districts", "unincorporated areas"}, british_spelling = true}, ["Oman"] = {container = "Asia", divs = {"governorates", "provinces"}}, ["Pakistan"] = {container = "Asia", divs = { {type = "provinces", cat_as = "provinces and territories"}, {type = "administrative territories", cat_as = "provinces and territories"}, {type = "federal territories", cat_as = "provinces and territories"}, {type = "territories", cat_as = "provinces and territories"}, "divisions", "districts", }, british_spelling = true}, ["Palau"] = {container = "Micronesia", divs = {"states"}}, ["Palestine"] = {container = "Asia", divs = {"governorates"}}, ["State of Palestine"] = {alias_of = "Palestine", the = true}, -- differs in "the" ["Panama"] = {container = "Central America", divs = {"provinces", "districts"}}, ["Papua New Guinea"] = {container = "Melanesia", divs = {"provinces", "districts"}, british_spelling = true}, ["Paraguay"] = {container = "South America", divs = {"departments", "districts"}}, ["Peru"] = {container = "South America", divs = {"regions", "provinces", "districts"}}, ["Philippines"] = {the = true, container = "Asia", divs = {"regions", "provinces", "districts", "municipalities", "barangays"}}, ["Poland"] = {divs = {"voivodeships", "counties", {type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}}, }, container = "Europe", british_spelling = true}, ["Portugal"] = {container = "Europe", divs = { {type = "autonomous regions", cat_as = "districts and autonomous regions"}, {type = "districts", cat_as = "districts and autonomous regions"}, "provinces", "municipalities"}, british_spelling = true}, ["Qatar"] = {container = "Asia", divs = {"municipalities", "zones"}}, ["Republic of the Congo"] = {the = true, container = "Africa", divs = {"departments", "districts"}}, ["Congo Republic"] = {alias_of = "Republic of the Congo", display = true, the = true}, ["Romania"] = {container = "Europe", divs = { "regions", "counties", "communes", {type = "ABBREVIATION_OF counties", cat_as = "abbreviations of counties"}, }, british_spelling = true}, ["Russia"] = {container = {"Europe", "Asia"}, divs = { "federal subjects", "republics", "autonomous oblasts", "autonomous okrugs", "oblasts", "krais", "federal cities", "districts", "federal districts"}, british_spelling = true}, ["Rwanda"] = {container = "Africa", divs = {"provinces", "districts"}}, ["Saint Kitts and Nevis"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Saint Kitts"] = {alias_of = "Saint Kitts and Nevis", display = true}, ["Saint Lucia"] = {container = "Caribbean", divs = {"districts"}, british_spelling = true}, ["Saint Vincent and the Grenadines"] = {container = "Caribbean", divs = {"parishes"}, british_spelling = true}, ["Saint Vincent"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["SVG"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["S.V.G"] = {alias_of = "Saint Vincent and the Grenadines", display = true}, ["Samoa"] = {container = "Polynesia", divs = {"districts"}, british_spelling = true}, ["San Marino"] = {container = "Europe", divs = {"municipalities"}, british_spelling = true}, ["São Tomé and Príncipe"] = {container = "Africa", divs = {"districts"}}, ["São Tome and Principe"] = {alias_of = "São Tomé and Príncipe", display = true}, ["São Tomé"] = {alias_of = "São Tomé and Príncipe", display = true}, ["São Tome"] = {alias_of = "São Tomé and Príncipe", display = true}, ["Saudi Arabia"] = {container = "Asia", divs = {"provinces", "governorates"}}, ["Senegal"] = {container = "Africa", divs = {"regions", "departments"}}, ["Serbia"] = {container = "Europe", divs = {"districts", "municipalities", "autonomous provinces"}}, ["Seychelles"] = {container = "Africa", divs = {"districts"}, british_spelling = true}, ["Sierra Leone"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, ["Singapore"] = {container = "Asia", divs = {"districts", "regions"}, british_spelling = true}, ["Slovakia"] = {container = "Europe", divs = {"regions", "districts"}, british_spelling = true}, ["Slovenia"] = {container = "Europe", divs = {"statistical regions", "municipalities"}, british_spelling = true}, -- Note: While the official name does not include "the" at the beginning, -- it sounds strange in English to leave it out and it's commonly included. ["Solomon Islands"] = {the = true, container = "Melanesia", divs = {"provinces"}, british_spelling = true}, ["Somalia"] = {container = "Africa", divs = {"regions", "districts"}}, ["South Africa"] = {container = "Africa", divs = { "provinces", "districts", {type = "district municipalities", cat_as = "districts"}, {type = "metropolitan municipalities", cat_as = "districts"}, "municipalities", }, british_spelling = true}, ["South Korea"] = {container = "Asia", addl_parents = {"Korea"}, divs = {"provinces", "counties", "districts"}}, ["South Sudan"] = {container = "Africa", divs = {"regions", "states", "counties"}, british_spelling = true}, ["Spain"] = {container = "Europe", divs = {"autonomous communities", "provinces", "municipalities", "comarcas", "autonomous cities"}, british_spelling = true}, ["Sri Lanka"] = {container = "Asia", divs = {"provinces", "districts"}, british_spelling = true}, ["Sudan"] = {container = "Africa", divs = {"states", "districts"}, british_spelling = true}, ["Suriname"] = {container = "South America", divs = {"districts"}}, ["Sweden"] = {container = "Europe", divs = {"provinces", "counties", "municipalities"}, british_spelling = true}, ["Switzerland"] = {container = "Europe", divs = {"cantons", "municipalities", "districts"}, british_spelling = true}, ["Syria"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Taiwan"] = {container = "Asia", divs = {"counties", "districts", "townships", "special municipalities"}}, ["Republic of China"] = {alias_of = "Taiwan", the = true}, -- differs in "the", different political connotations ["Tajikistan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Tanzania"] = {container = "Africa", divs = {"regions", "districts"}, british_spelling = true}, ["Thailand"] = {container = "Asia", divs = {"provinces", "districts", "subdistricts"}}, ["Togo"] = {container = "Africa", divs = {"provinces", "prefectures"}}, ["Tonga"] = {container = "Polynesia", divs = {"divisions"}, british_spelling = true}, ["Trinidad and Tobago"] = {container = "Caribbean", divs = {"regions", "municipalities"}, british_spelling = true}, ["Tunisia"] = {container = "Africa", divs = {"governorates", "delegations"}}, ["Turkey"] = {container = {"Europe", "Asia"}, divs = {"provinces", "districts"}}, -- Foreign names generally get display-canonicalized. ["Türkiye"] = {alias_of = "Turkey", display = true}, ["Turkmenistan"] = {container = "Asia", divs = { -- The 5 regions are often also called provinces "regions", {type = "provinces", cat_as = "regions"}, "districts"}, }, ["Tuvalu"] = {container = "Polynesia", divs = {"atolls"}, british_spelling = true}, ["Uganda"] = {container = "Africa", divs = {"districts", "counties"}, british_spelling = true}, ["Ukraine"] = {container = "Europe", divs = { {type = "oblasts", cat_as = "oblasts and autonomous republics"}, {type = "autonomous republics", cat_as = "oblasts and autonomous republics"}, "raions", "hromadas", }, british_spelling = true}, ["United Arab Emirates"] = {the = true, container = "Asia", divs = {"emirates"}}, -- Abbreviations get display-canonicalized. ["UAE"] = {alias_of = "United Arab Emirates", display = true, the = true}, ["U.A.E."] = {alias_of = "United Arab Emirates", display = true, the = true}, ["United Kingdom"] = {the = true, container = "Europe", addl_parents = {"British Isles"}, divs = {"constituent countries", "counties", "districts", "boroughs", "territories", "dependent territories", "traditional counties"}, keydesc = "the [[United Kingdom]] of Great Britain and Northern Ireland", british_spelling = true}, -- Abbreviations get display-canonicalized. ["UK"] = {alias_of = "United Kingdom", display = true, the = true}, ["U.K."] = {alias_of = "United Kingdom", display = true, the = true}, ["United States"] = {the = true, container = "North America", divs = {"counties", "county seats", "states", "territories", "dependent territories", {type = "ABBREVIATION_OF states", cat_as = "abbreviations of states"}, {type = "DEROGATORY_NAME_FOR states", cat_as = "derogatory names for states"}, {type = "NICKNAME_FOR states", cat_as = "nicknames for states"}, {type = "OFFICIAL_NICKNAME_FOR states", cat_as = "official nicknames for states"}, {type = "boroughs", prep = "in"}, -- exist in Pennsylvania and New Jersey "municipalities", -- these exist politically at least in Colorado and Connecticut {type = "census-designated places", prep = "in"}, {type = "unincorporated communities", prep = "in"}, -- Don't change the following to something more politically correct until/unless the US government makes a -- similar switch (and note that as of Apr 18 2025, the Wikipedia article is still at -- [[w:Indian reservations]]). "Indian reservations", }}, -- Abbreviations and long forms (when possible) get display-canonicalized. ["US"] = {alias_of = "United States", display = true, the = true}, ["U.S."] = {alias_of = "United States", display = true, the = true}, ["USA"] = {alias_of = "United States", display = true, the = true}, ["U.S.A."] = {alias_of = "United States", display = true, the = true}, ["United States of America"] = {alias_of = "United States", display = true, the = true}, ["Uruguay"] = {container = "South America", divs = {"departments", "municipalities"}}, ["Uzbekistan"] = {container = "Asia", divs = {"regions", "districts"}}, ["Vanuatu"] = {container = "Melanesia", divs = {"provinces"}, british_spelling = true}, ["Vatican City"] = {placetype = {"city-state", "quốc gia"}, container = "Europe", -- First placetype should be 'city-state' for to shown up in its description, -- Its parent should still be "countries in Europe". bare_category_parent_type = {type = "countries", prep = "in"}, addl_parents = {"Rome"}, is_city = true, british_spelling = true}, ["Vatican"] = {alias_of = "Vatican City", the = true}, -- differs in "the" ["Venezuela"] = {container = "South America", divs = {"states", "municipalities"}}, ["Việt Nam"] = {container = "châu Á", divs = {"provinces", "districts", "municipalities"}}, ["Western Sahara"] = {placetype = {"territory", "quốc gia"}, container = "Africa", bare_category_parent_type = {type = "countries", prep = "in"}, }, -- Not display-canonicalizable both due to differences in 'the' and the sovereignty dispute over Western Sahara ["Sahrawi Arab Democratic Republic"] = {alias_of = "Western Sahara", the = true}, ["SADR"] = {alias_of = "Sahrawi Arab Democratic Republic", display = true, the = true}, ["Yemen"] = {container = "Asia", divs = {"governorates", "districts"}}, ["Zambia"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, ["Zimbabwe"] = {container = "Africa", divs = {"provinces", "districts"}, british_spelling = true}, } local function canonicalize_continent_container(key) if type(key) ~= "string" then return key end if export.continents[key] then return {key = key, placetype = export.continents[key].placetype} end internal_error("Unrecognized key %s in `canonicalize_continent_like`", key) end export.countries_group = { canonicalize_key_container = canonicalize_continent_container, default_overriding_bare_label_parents = {"+++", "countries"}, default_placetype = "quốc gia", default_no_container_cat = true, default_no_container_parent = true, -- No need to augment country holonyms with continents; not needed for disambiguation. default_no_auto_augment_container = true, data = export.countries, } -- Country-like entities: typically overseas territories or de-facto independent countries, which in both cases -- are not internationally recognized as sovereign nations but which we treat similarly to countries. export.country_like_entities = { -- British Overseas Territory ["Akrotiri and Dhekelia"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Cyprus", "Europe", "Asia"}, british_spelling = true, }, -- Åland: Listed as a region of Finland. Wikipedia lists this under "dependent territories" in -- [[w:List of sovereign states and dependent territories by continent]]. -- unincorporated territory of the United States ["American Samoa"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Polynesia"}, }, -- British Overseas Territory ["Anguilla"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Georgia ["Abkhazia"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Georgia", "Europe", "Asia"}, divs = {"districts"}, keydesc = "the de-facto independent state of [[Abkhazia]], internationally recognized as part of the country of [[Georgia]]", british_spelling = true, }, -- Australian external territory ["Ashmore and Cartier Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, }, -- constituent country of the Netherlands ["Aruba"] = { placetype = {"constituent country", "quốc gia"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- British Overseas Territory ["Bermuda"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"North America"}, british_spelling = true, }, -- special municipality of the Netherlands ["Bonaire"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- British Overseas Territory ["British Indian Ocean Territory"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Asia"}, british_spelling = true, }, -- British Overseas Territory ["British Virgin Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- Norwegian dependent territory ["Bouvet Island"] = { placetype = {"dependent territory", "territory"}, container = "Norway", addl_parents = {"Africa"}, british_spelling = true, }, -- British Overseas Territory ["Cayman Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- Australian external territory ["Christmas Island"] = { placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, british_spelling = true, }, -- Sui generis French "state private property" per Wikipedia; classify as overseas territory like the -- French Southern and Antarctic Lands. ["Clipperton Island"] = { placetype = {"overseas territory", "territory"}, container = "France", addl_parents = {"North America"}, }, -- Australian external territory; also called the Keeling Islands or (officially) the Cocos (Keeling) Islands ["Cocos Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Asia"}, wp = "Cocos (Keeling) Islands", british_spelling = true, }, ["Cocos (Keeling) Islands"] = {alias_of = "Cocos Islands", display = true, the = true}, ["Keeling Islands"] = {alias_of = "Cocos Islands", display = true, the = true}, -- self-governing but in free association with New Zealand ["Cook Islands"] = { the = true, placetype = {"quốc gia"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- constituent country of the Netherlands ["Curaçao"] = { placetype = {"constituent country", "quốc gia"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- special territory of Chile ["Easter Island"] = { placetype = {"special territory", "territory"}, container = "Chile", addl_parents = {"Polynesia"}, }, -- British Overseas Territory ["Falkland Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"South America"}, british_spelling = true, }, -- autonomous territory of Denmark ["Faroe Islands"] = { the = true, placetype = {"autonomous territory", "territory"}, container = "Denmark", addl_parents = {"Europe"}, british_spelling = true, }, -- overseas department and region of France ["French Guiana"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"South America"}, british_spelling = true, }, -- overseas collectivity of France ["French Polynesia"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Polynesia"}, british_spelling = true, }, -- French overseas territory ["French Southern and Antarctic Lands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "France", addl_parents = {"Africa"}, }, -- British Overseas Territory ["Gibraltar"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Europe"}, is_city = true, british_spelling = true, }, -- autonomous territory of Denmark ["Greenland"] = { placetype = {"autonomous territory", "territory"}, container = "Denmark", addl_parents = {"North America"}, divs = {"municipalities"}, british_spelling = true, }, -- overseas department and region of France ["Guadeloupe"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", addl_parents = {"Caribbean"}, divs = {"communes"}, british_spelling = true, }, -- unincorporated territory of the United States ["Guam"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- self-governing British Crown dependency; technically called the Bailiwick of Guernsey ["Guernsey"] = { placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, wp = "Bailiwick of %l", }, ["Bailiwick of Guernsey"] = {alias_of = "Guernsey", the = true}, -- Australian external territory ["Heard Island and McDonald Islands"] = { the = true, placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Africa"}, }, -- special administrative region of China ["Hong Kong"] = { placetype = {"special administrative region", "city"}, container = "China", is_city = true, british_spelling = true, }, -- self-governing British Crown dependency ["Isle of Man"] = { the = true, placetype = {"crown dependency", "dependency", "dependent territory", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, }, -- Norwegian unincorporated area ["Jan Mayen"] = { placetype = {"unincorporated area", "dependent territory", "territory", "island"}, container = "Norway", addl_parents = {"Europe"}, british_spelling = true, }, -- self-governing British Crown dependency; technically called the Bailiwick of Jersey ["Jersey"] = { placetype = {"crown dependency", "dependency", "dependent territory", "bailiwick", "territory"}, container = "United Kingdom", addl_parents = {"British Isles", "Europe"}, british_spelling = true, }, ["Bailiwick of Jersey"] = {alias_of = "Jersey", the = true}, -- special administrative region of China ["Macau"] = { placetype = {"special administrative region", "city"}, container = "China", is_city = true, british_spelling = true, }, -- overseas department and region of France ["Martinique"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Caribbean"}, british_spelling = true, }, -- overseas department and region of France ["Mayotte"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Africa"}, british_spelling = true, }, -- British Overseas Territory ["Montserrat"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- special collectivity of France ["New Caledonia"] = { placetype = {"special collectivity", "collectivity"}, container = "France", addl_parents = {"Melanesia"}, british_spelling = true, }, -- dependent territory of New Zealand ["New Zealand Subantarctic Islands"] = { the = true, placetype = {"dependent territory", "territory"}, container = "New Zealand", addl_parents = {"Antarctica"}, british_spelling = true, }, -- self-governing but in free association with New Zealand ["Niue"] = { placetype = {"quốc gia"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- Australian external territory ["Norfolk Island"] = { placetype = {"external territory", "territory"}, container = "Australia", addl_parents = {"Polynesia"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Cyprus ["Northern Cyprus"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Cyprus", "Turkey", "Europe", "Asia"}, divs = {"districts"}, keydesc = "the de-facto independent state of [[Northern Cyprus]], internationally recognized as part of the country of [[Cyprus]]", british_spelling = true, }, -- commonwealth, unincorporated territory of the United States ["Northern Mariana Islands"] = { the = true, placetype = {"commonwealth", "unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- British Overseas Territory ["Pitcairn Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Polynesia"}, british_spelling = true, }, -- commonwealth of the United States ["Puerto Rico"] = { placetype = {"commonwealth", "overseas territory", "territory"}, container = "United States", addl_parents = {"Caribbean"}, divs = {"municipalities"}, }, -- overseas department and region of France ["Réunion"] = { placetype = {"overseas department", "department", "administrative region", "region"}, container = "France", divs = {"communes"}, addl_parents = {"Africa"}, british_spelling = true, }, -- special municipality of the Netherlands ["Saba"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- overseas collectivity of France ["Saint Barthélemy"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Caribbean"}, british_spelling = true, }, -- British Overseas Territory ["Saint Helena, Ascension and Tristan da Cunha"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", divs = {{type = "constituent parts", container_parent_type = false}}, addl_parents = {"Atlantic Ocean", "Africa"}, british_spelling = true, }, -- constituent parts of the combined oveseas territory ["Ascension Island"] = { placetype = {"constituent part", "territory", "island"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, ["Saint Helena"] = { placetype = {"constituent part", "territory", "island"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, ["Tristan da Cunha"] = { placetype = {"constituent part", "territory", "archipelago"}, container = {key = "Saint Helena, Ascension and Tristan da Cunha", placetype = "overseas territory"}, addl_parents = {"Atlantic Ocean"}, overriding_bare_label_parents = {}, no_container_cat = false, no_container_parent = false, no_auto_augment_container = false, }, -- overseas collectivity of France ["Saint Martin"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Caribbean"}, british_spelling = true, }, -- overseas collectivity of France ["Saint Pierre and Miquelon"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", divs = {"communes"}, addl_parents = {"North America"}, british_spelling = true, }, -- special municipality of the Netherlands ["Sint Eustatius"] = { placetype = {"special municipality", "municipality", "overseas territory", "territory"}, container = "Netherlands", addl_parents = {"Caribbean"}, is_city = true, british_spelling = true, }, -- constituent country of the Netherlands ["Sint Maarten"] = { placetype = {"constituent country", "quốc gia"}, container = "Netherlands", addl_parents = {"Caribbean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Somalia ["Somaliland"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Somalia", "Africa"}, keydesc = "the de-facto independent state of [[Somaliland]], internationally recognized as part of the country of [[Somalia]]", british_spelling = true, }, -- British Overseas Territory -- FIXME: We should form the group "South Georgia and the South Sandwich Islands" like we did for -- "Saint Helena, Ascension and Tristan da Cunha". ["South Georgia"] = { placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Atlantic Ocean"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Georgia ["South Ossetia"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Georgia", "Europe", "Asia"}, keydesc = "the de-facto independent state of [[South Ossetia]], internationally recognized as part of the country of [[Georgia]]", british_spelling = true, }, -- British Overseas Territory ["South Sandwich Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Atlantic Ocean"}, wp = true, wpcat = "South Georgia and the South Sandwich Islands", british_spelling = true, }, -- Norwegian unincorporated area ["Svalbard"] = { placetype = {"unincorporated area", "dependent territory", "territory", "archipelago"}, container = "Norway", addl_parents = {"Europe"}, british_spelling = true, }, -- dependent territory of New Zealand ["Tokelau"] = { placetype = {"dependent territory", "territory"}, container = "New Zealand", addl_parents = {"Polynesia"}, british_spelling = true, }, -- de-facto independent state, internationally recognized as part of Moldova ["Transnistria"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Moldova", "Europe"}, keydesc = "the de-facto independent state of [[Transnistria]], internationally recognized as part of [[Moldova]]", british_spelling = true, }, -- British Overseas Territory ["Turks and Caicos Islands"] = { the = true, placetype = {"overseas territory", "territory"}, container = "United Kingdom", addl_parents = {"Caribbean"}, british_spelling = true, }, -- unincorporated territory of the United States ["United States Minor Outlying Islands"] = { the = true, placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Islands", "Micronesia", "Polynesia", "Caribbean"}, }, -- FIXME: We should add entries for the other minor outlying islands. -- Baker Island (Oceania) -- Howland Island (Oceania) -- Jarvis Island (Oceania) -- Johnston Atoll (Oceania) -- Kingman Reef (Oceania) -- Midway Atoll (Oceania) -- Navassa Island (Caribbean) -- Palmyra Atoll (Oceania) -- Wake Island (Oceania) ["Wake Island"] = { placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Micronesia"}, }, -- unincorporated territory of the United States ["United States Virgin Islands"] = { the = true, placetype = {"unincorporated territory", "overseas territory", "territory"}, container = "United States", addl_parents = {"Caribbean"}, }, ["U.S. Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true}, ["US Virgin Islands"] = {alias_of = "United States Virgin Islands", display = true, the = true}, -- overseas collectivity of France ["Wallis and Futuna"] = { placetype = {"overseas collectivity", "collectivity"}, container = "France", addl_parents = {"Polynesia"}, british_spelling = true, }, } export.country_like_entities_group = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Saint Helena, Ascension and Tristan da Cunha". key_to_placename = false, placename_to_key = false, canonicalize_key_container = make_canonicalize_key_container(nil, "quốc gia"), default_overriding_bare_label_parents = {"country-like entities"}, default_no_container_cat = true, default_no_container_parent = true, -- These entities often aren't really part of their container; a village in Wallis and Futuna (an overseas -- collectivity of France in Polynesia), for example, shouldn't be treated as a village in France, nor as a village -- in Europe. default_no_auto_augment_container = true, data = export.country_like_entities, } -- Former countries and such; we don't create "Cities in ..." categories because they don't exist anymore export.former_countries = { -- de-facto independent state of Armenian ethnicity, internationally recognized as part of Azerbaijan -- (also known as Nagorno-Karabakh) -- NOTE: Formerly listed Armenia as a parent; this seems politically non-neutral so I've taken it out. ["Artsakh"] = { placetype = {"unrecognized country", "quốc gia"}, addl_parents = {"Azerbaijan", "Europe", "Asia"}, keydesc = "the former de-facto independent state of [[Artsakh]], internationally recognized as part of [[Azerbaijan]]", british_spelling = true, }, ["Nagorno-Karabakh"] = {alias_of = "Artsakh"}, ["Czechoslovakia"] = {container = "Europe", british_spelling = true}, ["East Germany"] = {container = "Europe", addl_parents = {"Germany"}, british_spelling = true}, ["North Vietnam"] = {container = "Asia", addl_parents = {"Vietnam"}}, ["Persia"] = {placetype = {"empire", "quốc gia"}, container = "Asia", divs = {"provinces"}}, ["Byzantine Empire"] = { the = true, placetype = {"empire", "quốc gia"}, container = {"Europe", "Africa", "Asia"}, addl_parents = {"Ancient Europe", "Ancient Near East"}, divs = { "provinces", "themes", }}, ["Roman Empire"] = { the = true, placetype = {"empire", "quốc gia"}, container = {"Europe", "Africa", "Asia"}, addl_parents = {"Rome"}, divs = { "provinces", {type = "FORMER provinces", cat_as = "provinces"}, }}, ["South Vietnam"] = {container = "Asia", addl_parents = {"Vietnam"}}, ["Soviet Union"] = { the = true, container = {"Europe", "Asia"}, divs = {"republics", "autonomous republics"}, british_spelling = true}, ["West Germany"] = {container = "Europe", addl_parents = {"Germany"}, british_spelling = true}, ["Yugoslavia"] = {container = "Europe", divs = {"districts"}, keydesc = "the former [[Kingdom of Yugoslavia]] (1918–1943) or the former [[Socialist Federal Republic of Yugoslavia]] (1943–1992)", british_spelling = true}, } export.former_countries_group = { canonicalize_key_container = canonicalize_continent_container, default_overriding_bare_label_parents = {"former countries and country-like entities"}, default_is_former_place = true, default_placetype = "quốc gia", default_no_container_cat = true, default_no_container_parent = true, -- No need to augment country holonyms with continents; not needed for disambiguation. default_no_auto_augment_container = true, data = export.former_countries, } ----------------------------------------------------------------------------------- -- Subpolity tables -- ----------------------------------------------------------------------------------- export.australia_states_and_territories = { ["Australian Capital Territory, Australia"] = {the = true, placetype = "territory"}, ["Jervis Bay Territory, Australia"] = {the = true, placetype = "territory"}, ["New South Wales, Australia"] = {}, ["Northern Territory, Australia"] = {the = true, placetype = "territory"}, ["Queensland, Australia"] = {}, ["South Australia, Australia"] = {}, ["Tasmania, Australia"] = {}, ["Victoria, Australia"] = {}, ["Western Australia, Australia"] = {}, } -- states and territories of Australia export.australia_group = { default_container = "Australia", default_placetype = "state", default_divs = "local government areas", data = export.australia_states_and_territories, } export.austria_states = { ["Vienna, Austria"] = {}, ["Lower Austria, Austria"] = {}, ["Upper Austria, Austria"] = {}, ["Styria, Austria"] = {}, ["Tyrol, Austria"] = {wp = "Tyrol (state)"}, ["Carinthia, Austria"] = {}, ["Salzburg, Austria"] = {wp = "Salzburg (state)"}, ["Vorarlberg, Austria"] = {}, ["Burgenland, Austria"] = {}, } -- states of Austria export.austria_group = { default_container = "Austria", default_placetype = "state", default_divs = "municipalities", data = export.austria_states, } export.bangladesh_divisions = { ["Barisal Division, Bangladesh"] = {}, ["Chittagong Division, Bangladesh"] = {}, ["Dhaka Division, Bangladesh"] = {}, ["Khulna Division, Bangladesh"] = {}, ["Mymensingh Division, Bangladesh"] = {}, ["Rajshahi Division, Bangladesh"] = {}, ["Rangpur Division, Bangladesh"] = {}, ["Sylhet Division, Bangladesh"] = {}, } -- divisions of Bangladesh export.bangladesh_group = { key_to_placename = make_key_to_placename(", Bangladesh$", " Division$"), placename_to_key = make_placename_to_key(", Bangladesh", " Division"), default_container = "Bangladesh", default_placetype = "division", default_divs = "districts", data = export.bangladesh_divisions, } export.brazil_states = { ["Acre, Brazil"] = {wp = "%l (state)"}, ["Alagoas, Brazil"] = {}, ["Amapá, Brazil"] = {}, ["Amazonas, Brazil"] = {wp = "%l (Brazilian state)"}, ["Bahia, Brazil"] = {}, ["Ceará, Brazil"] = {}, ["Distrito Federal, Brazil"] = {wp = "Federal District (Brazil)"}, ["Espírito Santo, Brazil"] = {}, ["Goiás, Brazil"] = {}, ["Maranhão, Brazil"] = {}, ["Mato Grosso, Brazil"] = {}, ["Mato Grosso do Sul, Brazil"] = {}, ["Minas Gerais, Brazil"] = {}, ["Pará, Brazil"] = {}, ["Paraíba, Brazil"] = {}, ["Paraná, Brazil"] = {wp = "%l (state)"}, ["Pernambuco, Brazil"] = {}, ["Piauí, Brazil"] = {}, ["Rio de Janeiro, Brazil"] = {wp = "%l (state)"}, ["Rio Grande do Norte, Brazil"] = {}, ["Rio Grande do Sul, Brazil"] = {}, ["Rondônia, Brazil"] = {}, ["Roraima, Brazil"] = {}, ["Santa Catarina, Brazil"] = {wp = "%l (state)"}, ["São Paulo, Brazil"] = {wp = "%l (state)"}, ["Sergipe, Brazil"] = {}, ["Tocantins, Brazil"] = {}, } -- states of Brazil export.brazil_group = { default_container = "Brazil", default_placetype = "state", default_divs = "municipalities", data = export.brazil_states, } -- provinces (a.k.a. oblasts) of Bulgaria export.bulgaria_provinces = { ["Blagoevgrad Province, Bulgaria"] = {}, ["Burgas Province, Bulgaria"] = {}, ["Dobrich Province, Bulgaria"] = {}, ["Gabrovo Province, Bulgaria"] = {}, ["Haskovo Province, Bulgaria"] = {}, ["Kardzhali Province, Bulgaria"] = {}, ["Kyustendil Province, Bulgaria"] = {}, ["Lovech Province, Bulgaria"] = {}, ["Montana Province, Bulgaria"] = {}, ["Pazardzhik Province, Bulgaria"] = {}, ["Pernik Province, Bulgaria"] = {}, ["Pleven Province, Bulgaria"] = {}, ["Plovdiv Province, Bulgaria"] = {}, ["Razgrad Province, Bulgaria"] = {}, ["Ruse Province, Bulgaria"] = {}, ["Shumen Province, Bulgaria"] = {}, ["Silistra Province, Bulgaria"] = {}, ["Sliven Province, Bulgaria"] = {}, ["Smolyan Province, Bulgaria"] = {}, ["Sofia City Province, Bulgaria"] = {}, ["Sofia Province, Bulgaria"] = {}, ["Stara Zagora Province, Bulgaria"] = {}, ["Targovishte Province, Bulgaria"] = {}, ["Varna Province, Bulgaria"] = {}, ["Veliko Tarnovo Province, Bulgaria"] = {}, ["Vidin Province, Bulgaria"] = {}, ["Vratsa Province, Bulgaria"] = {}, ["Yambol Province, Bulgaria"] = {}, } export.bulgaria_group = { key_to_placename = make_key_to_placename(", Bulgaria$", " Province$"), placename_to_key = make_placename_to_key(", Bulgaria", " Province"), default_container = "Bulgaria", --== source: https://en.wikipedia.org/wiki/NUTS_statistical_regions_of_Bulgaria == divs = {"regions", "planning regions", "provinces", "municipalities", "settlements"}, default_placetype = "province", data = export.bulgaria_provinces, } export.canada_provinces_and_territories = { ["Alberta, Canada"] = {divs = { {type = "municipal districts", container_parent_type = "rural municipalities"}, }}, ["British Columbia, Canada"] = {divs = {type = "regional districts", container_parent_type = false}, "regional municipalities", }, ["Manitoba, Canada"] = {divs = {"rural municipalities"}}, ["New Brunswick, Canada"] = {divs = {"counties", "parishes", {type = "civil parishes", cat_as = "parishes"}}}, ["Newfoundland and Labrador, Canada"] = {}, ["Northwest Territories, Canada"] = {the = true, placetype = "territory"}, ["Nova Scotia, Canada"] = {divs = {"counties", "regional municipalities"}}, ["Nunavut, Canada"] = {placetype = "territory"}, ["Ontario, Canada"] = {divs = {"counties", "regional municipalities", {type = "townships", prep = "in"}}}, ["Prince Edward Island, Canada"] = {divs = {"counties", "parishes", "rural municipalities"}}, ["Saskatchewan, Canada"] = {divs = {"rural municipalities"}}, ["Quebec, Canada"] = {divs = { "counties", {type = "regional county municipalities", container_parent_type = "regional municipalities"}, -- administrative regions have an official (but non-governmental) function but there don't appear to be any -- equivalent regions elsewhere in Canada, so disable the [[Category:Regions of Canada]] grouping {type = "regions", container_parent_type = false}, {type = "townships", prep = "in"}, {type = "parish municipalities", cat_as = {{type = "parishes", container_parent_type = "counties"}, "municipalities"}}, {type = "township municipalities", cat_as = {{type = "townships", prep = "in"}, "municipalities"}}, {type = "village municipalities", cat_as = {{type = "villages", prep = "in"}, "municipalities"}}, }}, ["Yukon, Canada"] = {placetype = "territory"}, ["Yukon Territory, Canada"] = {alias_of = "Yukon, Canada", the = true}, } -- provinces and territories of Canada export.canada_group = { default_container = "Canada", default_placetype = "province", data = export.canada_provinces_and_territories, } export.china_provinces_and_autonomous_regions = { -- direct-administered municipalities are not here but below under prefecture-level cities ["Anhui, China"] = {}, ["Fujian, China"] = {}, ["Fuchien, China"] = {alias_of = "Fujian, China", display = true}, ["Gansu, China"] = {}, ["Guangdong, China"] = {}, ["Guangxi, China"] = {placetype = "autonomous region"}, ["Guizhou, China"] = {}, ["Hainan, China"] = {}, ["Hebei, China"] = {}, ["Heilongjiang, China"] = {}, ["Henan, China"] = {}, ["Hubei, China"] = {}, ["Hunan, China"] = {}, ["Inner Mongolia, China"] = {placetype = "autonomous region"}, ["Jiangsu, China"] = {}, ["Jiangxi, China"] = {}, ["Jilin, China"] = {}, ["Liaoning, China"] = {}, ["Ningxia, China"] = {placetype = "autonomous region"}, ["Qinghai, China"] = {}, ["Shaanxi, China"] = {}, ["Shandong, China"] = {}, ["Shanxi, China"] = {}, ["Sichuan, China"] = {}, ["Tibet, China"] = {placetype = "autonomous region", wp = "Tibet Autonomous Region"}, ["Xinjiang, China"] = {placetype = "autonomous region"}, ["Yunnan, China"] = {}, ["Zhejiang, China"] = {}, } -- provinces and autonomous regions of China export.china_group = { default_container = "China", default_placetype = "province", default_divs = { "prefectures", "prefecture-level cities", "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_provinces_and_autonomous_regions, } export.china_prefecture_level_cities = { -- In China, a "prefecture-level city" is not a city in any real sense. It is rather a prefecture, which is an -- administrative unit smaller than a province but bigger than a county, which is administratively controlled by -- the chief city of the prefecture (which bears the same name as the prefecture), in a unified government. Prior -- to the mid-1980's, in fact, prefecture-level cities *were* prefectures, and a few of them (especially in the -- western portion of China) have not yet been converted. Generally a given province is entirely tiled by -- prefecture-level cities, another indication that they should be treated as prefectures and not cities per se. -- Yet another indication is that prefecture-level cities can contain counties and county-level cities (which, much -- like prefecture-level cities, are effectively counties surrounding a chief city of the county, again which bears -- the same name as the county-level city). -- -- For this reason, we treat prefecture-level cities as non-city political divisions, and separately enumerate the -- most populous so we can separately categorize districts and counties under them instead of lumping them at the -- province level. -- -- Note also that China separately distinguishes "urban area" from "metro area". Sometimes the two figures are -- identical but sometimes the metro area is larger (and very occasionally smaller, which I assume is an error). I'm -- guessing that the "urban area" is the contiguous urban area over a certain density while the metro area includes -- all urban areas above a certain density; when the latter is greater, it's because of satellite cities in the -- metro area separated by suburban/exurban or rural land. -- At first I chose all prefecture/province-level cities with a total prefecture/province-level population of at -- least 6,000,000 per the 2020 census with data taken from https://www.citypopulation.de/en/china/admin/ (a total -- of 67, including the four direct-administered municipalities), and also chose all prefecture/province-level -- cities whose "urban population" was at least 2,000,000 per the 2020 census with data taken from Wikipedia -- [[w:List of cities in China by population#Cities and towns by population]] (a total of 61 cities; if we cut off -- at 1.5 million we'd have 84 cities, and if we cut off at 1 million we'd have 105 cities). Merging them produces -- 87 cities. Note that this leaves off a few well-known cities (Guilin, Qiqihar, Kashgar, Lhasa, ...) but includes -- a lot of obscure cities. -- -- At a later date I added all cities from citypopulation.de whose "urban" population per the 2020 China census was -- >= 1 million, and then finally added all urban agglomerations from citypopulation.de whose 2025-01-01 estimate -- was >= 1 million. These are sorted below by the urban agglomeration value (which is generally of the "adm-urb" = -- "administrative area (urban population)" type) and sometimes groups nearby cities into a single agglomeration -- (most notably in the case of the Pearl River Delta, grouped under Guangzhou with an agglomeration population of -- 72,700,000 but including a large number of nearby large cities in the agglomeration (although for some reason not -- Hong Kong, maybe due to the administrative issues involved). In addition, citypopulation.de includes divisions -- under a prefecture-level city if they are city-like and have an agglomeration population of at least 1 million; -- this includes several county-level cities, one county and one district (Wanzhou, a "district" of Chongqing -- despite being 142 miles away). None of the county-level cities or counties have districts under them, only -- subdistricts, towns and townships. ["Guangzhou"] = {container = "Guangdong"}, -- 18.7 prefectural, 18.8 urban; sub-provincial city; 16.097 urban (72.700 adm-urb including Dongguan, Foshan, Huizhou, Jiangmen, Shenzhen, Zhongshan) per citypopulation.de ["Dongguan"] = {container = "Guangdong"}, -- 10.5 prefectural, 10.5 urban; 9.645 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Foshan"] = {container = "Guangdong"}, -- 9.5 prefectural, 9.5 urban; 9.043 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Huizhou"] = {container = "Guangdong"}, -- 6.0 prefectural, 2.5 urban; 2.900 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Jiangmen"] = {container = "Guangdong"}, -- 4.798 prefectural, 2.7 urban; 1.795 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Shenzhen"] = {container = "Guangdong"}, -- 17.5 prefectural, 14.7 urban; sub-provincial city; 17.445 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Zhongshan"] = {container = "Guangdong"}, -- 4.418 prefectural, 4.4 urban; 3.842 per citypopulation.de; included by citypopulation.de in Guangzhou agglomeration ["Shanghai"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 24.9 prefectural, 29.9 urban; 21.910 urban (41.600 adm-urb including Changshu, Changzhou, Suzhou, Wuxi) per citypopulation.de ["Changshu"] = {container = "Jiangsu"}, -- 1.231 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration -- NOTE: Not to be confused with Cangzhou in Hebei ["Changzhou"] = {container = "Jiangsu"}, -- 5.278 prefectural, 3.6 urban; 3.187 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration -- NOTE: There is also a prefecture-level city Suzhou in Anhui with 5.3 million prefectural inhabitants ["Suzhou"] = {container = "Jiangsu"}, -- 12.8 prefectural, 4.3 urban; 5.893 urban per citypopulation.de; included by citypopulation.de in Shanghai agglomeration ["Wuxi"] = {container = "Jiangsu"}, -- 7.5 prefectural, 3.3 urban; 3.957 per citypopulation.de; included by citypopulation.de in Shanghai agglomeration ["Beijing"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 21.9 prefectural, 21.9 urban; 18.961 urban (21.500 adm-urb) per citypopulation.de ["Chengdu"] = {container = "Sichuan"}, -- 20.9 prefectural, 16.9 urban; sub-provincial city; 13.568 urban (18.100 adm-urb) per citypopulation.de ["Xiamen"] = {container = "Fujian"}, -- 5.163 prefectural, 5.2 urban; sub-provincial city; 4.617 urban (15.400 adm-urb including Jinjiang, Quanzhou, Putian) per citypopulation.de ["Jinjiang"] = {container = "Fujian"}, -- 1.416 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Quanzhou"] = {container = "Fujian"}, -- 8.8 prefectural, 1.7 urban (6.7 metro); 1.469 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Putian"] = {container = "Fujian"}, -- 3.210 prefectural, 2.0 urban; 1.539 urban per citypopulation.de; included by citypopulation.de in Xiamen agglomeration ["Hangzhou"] = {container = "Zhejiang"}, -- 11.9 prefectural, 10.7 urban; sub-provincial city; 9.236 urban (14.600 adm-urb including Shaoxing) per citypopulation.de ["Shaoxing"] = {container = "Zhejiang"}, -- 5.270 prefectural, 2.5 urban; 2.333 urban per citypopulation.de; included by citypopulation.de in Hangzhou agglomeration ["Xi'an"] = {container = "Shaanxi"}, -- 12.1 prefectural, 11.9 urban; sub-provincial city; 9.393 urban (13.400 adm-urb including Xianyang) per citypopulation.de ["Xianyang"] = {container = "Shaanxi"}, -- 1.193 urban per citypopulation.de; included by citypopulation.de in Xi'an agglomeration ["Chongqing"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 32.1 prefectural, 16.9 urban; 9.581 urban (12.900 adm-urb) per citypopulation.de ["Wuhan"] = {container = "Hubei"}, -- 12.4 prefectural, 12.3 urban; sub-provincial city; 10.495 urban (12.600 adm-urb) per citypopulation.de ["Tianjin"] = {placetype = {"direct-administered municipality", "municipality", "city"}}, -- 13.9 prefectural, 13.9 urban; 11.052 urban (11.700 adm-urb) per citypopulation.de ["Changsha"] = {container = "Hunan"}, -- 10.0 prefectural, 6.0 urban; 5.630 urban (11.500 adm-urb including Xiangtan, Zhuzhou) per citypopulation.de -- Changsha County -- 1.024 urban per citypopulation.de ["Zhuzhou"] = {container = "Hunan"}, -- 1.510 urban per citypopulation.de; included by citypopulation.de in Changsha agglomeration ["Zhengzhou"] = {container = "Henan"}, -- 12.6 prefectural, 6.7 urban; 6.461 urban (10.300 adm-urb) per citypopulation.de ["Nanjing"] = {container = "Jiangsu"}, -- 9.3 prefectural, 9.3 urban; sub-provincial city; 7.520 urban (9.500 adm-urb including Ma'anshan) per citypopulation.de ["Shenyang"] = {container = "Liaoning"}, -- 9.1 prefectural, 7.9 urban; sub-provincial city; 7.026 urban (8.800 adm-urb including Fushun) per citypopulation.de ["Fushun"] = {container = "Liaoning"}, -- 1.229 urban per citypopulation.de; included by citypopulation.de in Shenyang agglomeration ["Hefei"] = {container = "Anhui"}, -- 9.4 prefectural, 4.2 urban; 5.056 urban (8.200 adm-urb) per citypopulation.de ["Shantou"] = {container = "Guangdong"}, -- 5.502 prefectural, 4.3 urban; 3.839 urban (8.050 adm-urb including Chaozhou, Jieyang, Puning) per citypopulation.de ["Chaozhou"] = {container = "Guangdong"}, -- 1.254 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration ["Jieyang"] = {container = "Guangdong"}, -- 1.243 urban per citypopulation.de; included by citypopulation.de in Shantou agglomeration ["Qingdao"] = {container = "Shandong"}, -- 10.1 prefectural, 7.1 urban; sub-provincial city; 6.165 urban (7.700 adm-urb) per citypopulation.de ["Ningbo"] = {container = "Zhejiang"}, -- 9.4 prefectural, 5.1 urban; sub-provincial city; 3.731 urban (7.600 adm-urb including Cixi, Yuyao) per citypopulation.de ["Cixi"] = {container = "Zhejiang"}, -- 1.458 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration ["Yuyao"] = {container = "Zhejiang"}, -- 1.014 urban per citypopulation.de; included by citypopulation.de in Ningbo agglomeration -- Hong Kong 7.500 agglomeration per citypopulation.de 2025-01-01 estimate including Kowloon, Victoria ["Wenzhou"] = {container = "Zhejiang"}, -- 9.6 prefectural, 3.6 urban; 2.582 urban (7.000 adm-urb including Rui'an, Cangnan, Pingyang) per citypopulation.de -- Rui'an is a "county-level city" of the "prefecture-level city" of Wenzhou but in fact is 19 miles away from Wenzhou city proper (urban core to urban core). ["Rui'an"] = {placetype = "county-level city", container = {key = "Wenzhou", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 1.013 urban per citypopulation.de; included by citypopulation.de in Wenzhou agglomeration ["Kunming"] = {container = "Yunnan"}, -- 8.5 prefectural, 6.0 urban; 5.273 urban (6.800 adm-urb) per citypopulation.de -- includes Láiwú city ["Jinan"] = {container = "Shandong", wp = "%l, %c"}, -- 9.2 prefectural, 8.4 urban; sub-provincial city; 5.648 urban (6.750 adm-urb) per citypopulation.de -- includes Xīnjí city ["Shijiazhuang"] = {container = "Hebei"}, -- 11.2 prefectural, 4.1 urban; 5.090 urban (6.450 adm-urb) per citypopulation.de ["Taiyuan"] = {container = "Shanxi"}, -- 5.304 prefectural, 4.5 urban; 4.304 urban (6.150 adm-urb) per citypopulation.de ["Harbin"] = {container = "Heilongjiang"}, -- 10.0 prefectural, 7.0 urban; sub-provincial city; 5.243 urban (5.550 adm-urb) per citypopulation.de ["Nanning"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 8.7 prefectural, 3.8 urban; 4.583 urban (5.550 adm-urb) per citypopulation.de ["Dalian"] = {container = "Liaoning"}, -- 7.5 prefectural, 5.7 urban; sub-provincial city; 4.914 urban (5.400 adm-urb) per citypopulation.de ["Guiyang"] = {container = "Guizhou"}, -- 5.987 prefectural, 3.5 urban; 4.021 urban (5.300 adm-urb) per citypopulation.de ["Changchun"] = {container = "Jilin"}, -- 9.1 prefectural, 5.7 urban; sub-provincial city; 4.557 urban (5.200 adm-urb) per citypopulation.de ["Nanchang"] = {container = "Jiangxi"}, -- 6.3 prefectural, 3.6 (3.9?) urban, 5.3 metro; 3.519 urban (5.150 adm-urb) per citypopulation.de ["Ürümqi"] = {container = {key = "Xinjiang, China", placetype = "autonomous region"}}, -- 4.054 prefectural, 4.3 urban; 3.843 urban (5.000 adm-urb) per citypopulation.de ["Urumqi"] = {alias_of = "Ürümqi", display = true}, ["Fuzhou"] = {container = "Fujian"}, -- 8.3 prefectural, 4.1 urban; 3.723 urban (4.775 adm-urb) per citypopulation.de ["Linyi"] = {container = "Shandong"}, -- 11.0 prefectural, 2.3 urban; 2.744 urban (4.650 adm-urb) per citypopulation.de ["Zibo"] = {container = "Shandong"}, -- 4.704 prefectural, 2.6 urban; 2.750 urban (3.975 adm-urb) per citypopulation.de ["Luoyang"] = {container = "Henan"}, -- 7.1 prefectural, 2.4 urban; 2.231 urban (3.750 adm-urb) per citypopulation.de ["Lanzhou"] = {container = "Gansu"}, -- 4.359 prefectural, 3.1 urban; 3.013 urban (3.575 adm-urb) per citypopulation.de ["Nantong"] = {container = "Jiangsu"}, -- 7.7 prefectural, 2.3 urban; 2.988 urban (3.475 adm-urb) citypopulation.de ["Weifang"] = {container = "Shandong"}, -- 9.4 prefectural, 2.7 urban; 1.998 urban (3.325 adm-urb) per citypopulation.de ["Jiangyin"] = {container = "Jiangsu"}, -- 1.331 urban (3.200 adm-urb including Zhangjiagang) per citypopulation.de ["Zhangjiagang"] = {container = "Jiangsu"}, -- 1.056 urban per citypopulation.de; included in Jiangyin figures ["Xuzhou"] = {container = "Jiangsu"}, -- 9.1 prefectural, 2.6 urban; 2.846 urban (3.150 adm-urb) per citypopulation.de ["Handan"] = {container = "Hebei"}, -- 9.4 prefectural, 2.8 urban; 2.095 urban (2.925 adm-urb) per citypopulation.de ["Hohhot"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 3.446 prefectural, 2.7 urban; 2.373 urban (2.850 adm-urb) per citypopulation.de ["Haikou"] = {container = "Hainan"}, -- 2.873 prefectural, 2.3 urban; 2.349 urban (2.800 adm-urb) per citypopulation.de ["Tangshan"] = {container = "Hebei"}, -- 7.7 prefectural, 3.4 urban; 2.550 urban (2.750 adm-urb) per citypopulation.de ["Xinxiang"] = {container = "Henan"}, -- 6.3 prefectural, 1.2 urban, 2.7 metro; 1.271 urban (2.700 adm-urb) per citypopulation.de ["Yiwu"] = {container = "Zhejiang"}, -- 1.481 urban (2.700 adm-urb) per citypopulation.de ["Zhuhai"] = {container = "Guangdong"}, -- 2.439 prefectural, 2.4 urban; 2.207 urban (2.675 adm-urb) per citypopulation.de ["Taizhou, Zhejiang"] = {container = "Zhejiang"}, -- 6.6 prefectural, 1.6 urban; 1.486 urban (2.625 adm-urb) per citypopulation.de ["Taizhou"] = {alias_of = "Taizhou, Zhejiang"}, ["Yantai"] = {container = "Shandong"}, -- 7.1 prefectural, 2.5 urban; 2.312 urban (2.550 adm-urb) per citypopulation.de ["Yinchuan"] = {container = {key = "Ningxia, China", placetype = "autonomous region"}}, -- 1.663 urban (2.525 adm-urb) per citypopulation.de ["Liuzhou"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 4.157 prefectural, 2.2 urban; 2.205 urban (2.500 adm-urb) per citypopulation.de ["Anshan"] = {container = "Liaoning"}, -- 1.480 urban (2.350 adm-urb including Liáoyáng) per citypopulation.de ["Yangzhou"] = {container = "Jiangsu"}, -- 2.067 urban (2.300 adm-urb) per citypopulation.de ["Jiaxing"] = {container = "Zhejiang"}, -- 1.188 urban (2.275 adm-urb) per citypopulation.de ["Xining"] = {container = "Qinghai"}, -- 1.677 urban (2.250 adm-urb) per citypopulation.de -- includes Dìngzhōu city and Xióngān Xīnqū ["Baoding"] = {container = "Hebei"}, -- 11.5 prefectural, 2.0 urban; 1.940 urban (2.225 adm-urb) per citypopulation.de ["Baotou"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 2.709 prefectural, 2.2 urban; 2.104 urban (2.200 adm-urb) per citypopulation.de ["Ganzhou"] = {container = "Jiangxi"}, -- 9.0 prefectural, 1.6 urban; 1.778 urban (2.150 adm-urb) per citypopulation.de ["Pingdingshan"] = {container = "Henan"}, -- 1.046 urban (2.100 adm-urb) per citypopulation.de ["Zunyi"] = {container = "Guizhou"}, -- 6.6 prefectural, 2.4 urban/metro; 1.675 urban (2.025 adm-urb) per citypopulation.de ["Bengbu"] = {container = "Anhui"}, -- 1.078 urban (2.000 adm-urb) per citypopulation.de ["Datong"] = {container = "Shanxi"}, -- 3.105 prefectural, 2.0 urban; 1.810 urban (2.000 adm-urb) per citypopulation.de ["Anyang"] = {container = "Henan"}, -- 1.188 urban (1.960 adm-urb) per citypopulation.de ["Huai'an"] = {container = "Jiangsu"}, -- 4.556 prefectural, 2.6 urban; 1.805 urban (1.940 adm-urb) per citypopulation.de ["Zaozhuang"] = {container = "Shandong"}, -- 1.350 urban (1.900 adm-urb) per citypopulation.de ["Zhanjiang"] = {container = "Guangdong"}, -- 7.0 prefectural, 1.9 urban; 1.401 urban (1.890 adm-urb) per citypopulation.de ["Huainan"] = {container = "Anhui"}, -- 1.256 urban (1.880 adm-urb) per citypopulation.de ["Jining"] = {container = "Shandong"}, -- 8.4 prefectural, 1.5 urban; 1.700 urban (1.880 adm-urb) per citypopulation.de ["Daqing"] = {container = "Heilongjiang"}, -- 1.604 urban (1.860 adm-urb) per citypopulation.de ["Wuhu"] = {container = "Anhui"}, -- 1.598 urban (1.850 adm-urb) per citypopulation.de ["Guilin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 1.361 urban (1.830 adm-urb) per citypopulation.de ["Mianyang"] = {container = "Sichuan"}, -- 1.549 urban (1.800 adm-urb) per citypopulation.de ["Xiangyang"] = {container = "Hubei"}, -- 1.686 urban (1.800 adm-urb) per citypopulation.de ["Huzhou"] = {container = "Zhejiang"}, -- 1.084 urban (1.750 adm-urb) per citypopulation.de ["Puyang"] = {container = "Henan"}, -- 0.824 urban (1.750 adm-urb) per citypopulation.de ["Shangqiu"] = {container = "Henan"}, -- 7.8 prefectural, 1.9 urban (2.8 metro); 1.031 urban (1.750 adm-urb) per citypopulation.de ["Qinhuangdao"] = {container = "Hebei"}, -- 1.520 urban (1.740 adm-urb) per citypopulation.de ["Xingtai"] = {container = "Hebei"}, -- 7.1 prefectural, 971,000 urban; 1.5 urban (1.700 adm-urb) per citypopulation.de ["Nanyang"] = {container = "Henan", wp = "%l, %c"}, -- 9.7 prefectural, 2.1 urban/metro; 1.481 urban (1.680 adm-urb) per citypopulation.de ["Jiaozuo"] = {container = "Henan"}, -- 0.875 urban (1.640 adm-urb) per citypopulation.de ["Jilin City"] = {container = "Jilin"}, -- 1.509 urban (1.610 adm-urb) per citypopulation.de ["Jilin"] = {alias_of = "Jilin City"}, ["Jinhua"] = {container = "Zhejiang"}, -- 7.1 prefectural, 1.5 urban; 1.041 urban (1.590 adm-urb) per citypopulation.de ["Shangrao"] = {container = "Jiangxi"}, -- 6.5 prefectural, 2.1 urban, 1.3 metro [sic]; 1.342 urban (1.580 adm-urb) per citypopulation.de ["Heze"] = {container = "Shandong"}, -- 8.8 prefectural, 1.3 urban; 1.294 urban (1.570 adm-urb) per citypopulation.de ["Yulin"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}, wp = "%l, %c"}, -- 0.878 urban (1.570 adm-urb) per citypopulation.de ["Tai'an"] = {container = "Shandong"}, -- 1.417 urban (1.560 adm-urb) per citypopulation.de ["Weihai"] = {container = "Shandong"}, -- 1.340 urban (1.510 adm-urb) per citypopulation.de -- Taizhou, Jiangsu would be here (1.490 adm-urb) but moved to china_prefecture_level_cities_2 to avoid clash ["Yancheng"] = {container = "Jiangsu"}, -- 6.7 prefectural, 1.6 urban; 1.353 urban (1.460 adm-urb) per citypopulation.de ["Zhangjiakou"] = {container = "Hebei"}, -- 1.339 urban (1.450 adm-urb) per citypopulation.de ["Maoming"] = {container = "Guangdong"}, -- 6.2 prefectural, 2.5 urban; 1.308 urban (1.440 adm-urb) per citypopulation.de ["Nanchong"] = {container = "Sichuan"}, -- 1.254 urban (1.440 adm-urb) per citypopulation.de ["Fuyang"] = {container = "Anhui", wp = "%l, %c"}, -- 8.2 prefectural, 2.1 urban; 1.191 urban (1.410 adm-urb) per citypopulation.de ["Xuchang"] = {container = "Henan"}, -- 0.850 urban (1.390 adm-urb) per citypopulation.de ["Yichang"] = {container = "Hubei"}, -- 1.284 urban (1.390 adm-urb) per citypopulation.de ["Dazhou"] = {container = "Sichuan"}, -- 1.136 urban (1.380 adm-urb) per citypopulation.de ["Kaifeng"] = {container = "Henan"}, -- 1.194 urban (1.340 adm-urb) per citypopulation.de ["Luzhou"] = {container = "Sichuan"}, -- 1.128 urban (1.340 adm-urb) per citypopulation.de ["Qingyuan"] = {container = "Guangdong"}, -- 1.198 urban (1.340 adm-urb) per citypopulation.de ["Huaibei"] = {container = "Anhui"}, -- 0.831 urban (1.330 adm-urb) per citypopulation.de ["Yibin"] = {container = "Sichuan"}, -- 1.101 urban (1.310 adm-urb) per citypopulation.de ["Lu'an"] = {container = "Anhui"}, -- 1.070 urban (1.300 adm-urb) per citypopulation.de ["Dezhou"] = {container = "Shandong"}, -- 0.843 urban (1.290 adm-urb) per citypopulation.de ["Rizhao"] = {container = "Shandong"}, -- 1.147 urban (1.270 adm-urb) per citypopulation.de ["Changzhi"] = {container = "Shanxi"}, -- 1.047 urban (1.250 adm-urb) per citypopulation.de ["Hengyang"] = {container = "Hunan"}, -- 6.6 prefectural, 1.5 urban; 1.185 urban (1.250 adm-urb) per citypopulation.de ["Jinzhou"] = {container = "Liaoning"}, -- 1.021 urban (1.240 adm-urb) per citypopulation.de ["Liaocheng"] = {container = "Shandong"}, -- 1.020 urban (1.240 adm-urb) per citypopulation.de ["Changde"] = {container = "Hunan"}, -- 1.101 urban (1.230 adm-urb) per citypopulation.de ["Suqian"] = {container = "Jiangsu"}, -- 1.082 urban (1.230 adm-urb) per citypopulation.de ["Xinyang"] = {container = "Henan"}, -- 6.2 prefectural, 1.4 urban/metro; 1.015 urban (1.230 adm-urb) per citypopulation.de ["Baoji"] = {container = "Shaanxi"}, -- 1.108 urban (1.220 adm-urb) per citypopulation.de ["Yueyang"] = {container = "Hunan"}, -- 1.125 urban (1.220 adm-urb) per citypopulation.de ["Zhenjiang"] = {container = "Jiangsu"}, -- 1.124 urban (1.210 adm-urb) per citypopulation.de -- Wanzhou is a "district" of the "direct-administered municipality" of Chongqing but in fact is 142 miles away from Chongqing city proper. ["Wanzhou"] = {placetype = "district", container = {key = "Chongqing", placetype = "direct-administered municipality"}, divs = {"subdistricts", "townships"}, wp = "%l, %c"}, -- 1.078 urban (1.190 adm-urb) per citypopulation.de ["Ulanhad"] = {container = {key = "Inner Mongolia, China", placetype = "autonomous region"}}, -- 1.093 urban (1.180 adm-urb) per citypopulation.de ["Chifeng"] = {alias_of = "Ulanhad"}, ["Ulankhad"] = {alias_of = "Ulanhad", display = true}, ["Ezhou"] = {container = "Hubei"}, -- < 0.750 urban (1.180 adm-urb) per citypopulation.de ["Zhaoqing"] = {container = "Guangdong"}, -- 1.036 urban (1.160 adm-urb) per citypopulation.de ["Lianyungang"] = {container = "Jiangsu"}, -- 4.599 prefectural, 2.0 urban; 1.071 urban (1.150 adm-urb) per citypopulation.de ["Qujing"] = {container = "Yunnan"}, -- 0.976 urban (1.150 adm-urb) per citypopulation.de -- Shuyang is a "county" of the "prefecture-level city" of Suqian but in fact is 38 miles away from Suqian city proper (urban core to urban core). -- The county itself is 37 miles by 34 miles. ["Shuyang"] = {placetype = "county", container = {key = "Suqian", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l County"}, -- 0.986 urban (1.120 adm-urb) per citypopulation.de -- Yongkang is a "county-level city" of the "prefecture-level city" of Jinhua but in fact is 32 miles away from Jinhua city proper (urban core to urban core). ["Yongkang"] = {placetype = "county-level city", container = {key = "Jinhua", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}, wp = "%l, Zhejiang"}, -- < 0.750 urban (1.110 adm-urb) per citypopulation.de ["Zhoukou"] = {container = "Henan"}, -- 9.0 prefectural, 721,000 urban (1.6 metro); < 0.750 urban (1.100 adm-urb) per citypopulation.de ["Beihai"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- < 1 urban (1.090 adm-urb) per citypopulation.de ["Jiujiang"] = {container = "Jiangxi"}, -- < 0.750 urban (1.080 adm-urb) per citypopulation.de ["Shaoyang"] = {container = "Hunan"}, -- 6.6 prefectural, 802,000 urban, 1.4 metro; < 1 urban (1.080 adm-urb) per citypopulation.de ["Chuzhou"] = {container = "Anhui"}, -- < 0.750 urban (1.070 adm-urb) per citypopulation.de ["Hengshui"] = {container = "Hebei"}, -- 0.885 urban (1.070 adm-urb) per citypopulation.de ["Shiyan"] = {container = "Hubei"}, -- 0.955 urban (1.070 adm-urb) per citypopulation.de ["Huludao"] = {container = "Liaoning"}, -- 0.764 urban (1.060 adm-urb) per citypopulation.de ["Dongying"] = {container = "Shandong"}, -- 0.961 urban (1.050 adm-urb) per citypopulation.de ["Guigang"] = {container = {key = "Guangxi, China", placetype = "autonomous region"}}, -- 0.921 urban (1.050 adm-urb) per citypopulation.de -- Liuyang is a "county-level city" of the "prefecture-level city" of Changsha but in fact is 47 miles away from Changsha city proper (urban core to urban core). ["Liuyang"] = {placetype = "county-level city", container = {key = "Changsha", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.886 urban (1.040 adm-urb) per citypopulation.de -- NOTE: Not to be confused with Changzhou in Jiangsu ["Cangzhou"] = {container = "Hebei"}, -- 7.3 prefectural, 621,000 urban; 0.759 urban (1.030 adm-urb) per citypopulation.de ["Liupanshui"] = {container = "Guizhou"}, -- < 0.750 urban (1.030 adm-urb) per citypopulation.de ["Panjin"] = {container = "Liaoning"}, -- 0.980 urban (1.030 adm-urb) per citypopulation.de ["Qiqihar"] = {container = "Heilongjiang"}, -- 1.030 urban (1.030 adm-urb) per citypopulation.de ["Linfen"] = {container = "Shanxi"}, -- < 0.750 urban (1.010 adm-urb) per citypopulation.de -- Tengzhou is a "county-level city" of the "prefecture-level city" of Zaozhuang but in fact is 30 miles away from Zaozhuang city proper (urban core to urban core). ["Tengzhou"] = {placetype = "county-level city", container = {key = "Zaozhuang", placetype = "prefecture-level city"}, divs = {"subdistricts", "townships"}}, -- 0.937 urban (1.010 adm-urb) per citypopulation.de -- 3 extra that got added in earlier incarnations and aren't found in the "major agglomerations of the world" page https://citypopulation.de/en/world/agglomerations/ reference date 2025-01-01 ["Kunshan"] = {container = "Jiangsu"}, -- 1.652 urban (2020 China census) per citypopulation.de ["Zhumadian"] = {container = "Henan"}, -- 7.0 prefectural, 722,000 urban per Wikipedia; 0.754 urban per citypopulation.de ["Bijie"] = {container = "Guizhou"}, -- 6.9 prefectural, ? urban, ? metro (not listed in Wikipedia); < 0.750 urban per citypopulation.de } export.china_prefecture_level_cities_group = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Taizhou, Zhejiang" or "Suzhou, Anhui". key_to_placename = false, placename_to_key = false, -- don't add ", China" to make the key default_container = "China", canonicalize_key_container = make_canonicalize_key_container(", China", "province"), -- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people -- don't understand how Chinese administrative divisions work. default_placetype = {"prefecture-level city", "city"}, default_divs = { -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities, -- and prefecture-level cities (as well as county-level cities) are considered non-cities. "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_prefecture_level_cities, } -- Needed to avoid problems with two cities called Taizhou and Suzhou. export.china_prefecture_level_cities_2 = { -- NOTE: There is also a larger and better-known prefecture-level city Taizhou in Zhejiang. ["Taizhou, Jiangsu"] = {container = "Jiangsu"}, -- 1.3 urban (1.490 adm-urb) per citypopulation.de 2020 census ["Taizhou"] = {alias_of = "Taizhou, Jiangsu"}, -- NOTE: There is also a larger and better-known prefecture-level city Suzhou in Jiangsu. ["Suzhou, Anhui"] = {container = "Anhui"}, -- 5.3 prefectural, 1.766 metro and "urban"; < 1 urban (1.010 adm-urb) per citypopulation.de 2020 census -- hopefully this will work because we also have Suzhou as a key by itself for the larger, more-well-known Suzhou in Jiangsu ["Suzhou"] = {alias_of = "Suzhou, Anhui"}, } export.china_prefecture_level_cities_group_2 = { -- don't do any transformations between key and placename; in particular, don't chop off anything from -- "Taizhou, Jiangsu". placename_to_key = false, -- don't add ", China" to make the key default_container = "China", canonicalize_key_container = make_canonicalize_key_container(", China", "province"), -- Prefecture-level cities aren't really cities but allow them to be identified that way, as many people -- don't understand how Chinese administrative divisions work. default_placetype = {"prefecture-level city", "city"}, default_divs = { -- "towns" (but not "townships") are automatically added as they are specified as generic_before_non_cities, -- and prefecture-level cities (as well as county-level cities) are considered non-cities. "districts", "subdistricts", "townships", {type = "counties", cat_as = "counties and county-level cities"}, {type = "county-level cities", cat_as = "counties and county-level cities"}, }, data = export.china_prefecture_level_cities_2, } export.finland_regions = { ["Lapland, Finland"] = {wp = "%l (%c)"}, ["North Ostrobothnia, Finland"] = {}, ["Northern Ostrobothnia, Finland"] = {alias_of = "North Ostrobothnia, Finland", display = true}, ["Kainuu, Finland"] = {}, ["North Karelia, Finland"] = {}, ["Northern Savonia, Finland"] = {}, ["North Savo, Finland"] = {alias_of = "Northern Savonia, Finland", display = true}, ["Southern Savonia, Finland"] = {}, ["South Savo, Finland"] = {alias_of = "Southern Savonia, Finland", display = true}, ["South Karelia, Finland"] = {}, ["Central Finland, Finland"] = {}, ["South Ostrobothnia, Finland"] = {}, ["Southern Ostrobothnia, Finland"] = {alias_of = "South Ostrobothnia, Finland", display = true}, ["Ostrobothnia, Finland"] = {wp = "%l (region)"}, ["Central Ostrobothnia, Finland"] = {}, ["Pirkanmaa, Finland"] = {}, ["Satakunta, Finland"] = {}, ["Päijänne Tavastia, Finland"] = {}, ["Päijät-Häme, Finland"] = {alias_of = "Päijänne Tavastia, Finland", display = true}, ["Tavastia Proper, Finland"] = {}, ["Kanta-Häme, Finland"] = {alias_of = "Tavastia Proper, Finland", display = true}, ["Kymenlaakso, Finland"] = {}, ["Uusimaa, Finland"] = {}, ["Southwest Finland, Finland"] = {}, ["Åland Islands, Finland"] = {the = true, wp = "Åland"}, ["Åland, Finland"] = {alias_of = "Åland Islands, Finland"}, -- differs in "the" } -- regions of Finland export.finland_group = { default_container = "Finland", default_placetype = "region", default_divs = "municipalities", data = export.finland_regions, } export.france_administrative_regions = { ["Auvergne-Rhône-Alpes, France"] = {}, ["Bourgogne-Franche-Comté, France"] = {}, ["Brittany, France"] = {wp = "%l (administrative region)"}, ["Centre-Val de Loire, France"] = {}, ["Corsica, France"] = {}, -- overseas departments are handled in `export.country_like_entities` -- ["French Guiana"] = {}, ["Grand Est, France"] = {}, -- ["Guadeloupe"] = {}, ["Hauts-de-France, France"] = {}, ["Île-de-France, France"] = {}, -- ["Martinique"] = {}, -- ["Mayotte"] = {}, ["Normandy, France"] = {wp = "%l (administrative region)"}, ["Nouvelle-Aquitaine, France"] = {}, ["Occitania, France"] = {wp = "%l (administrative region)"}, ["Occitanie, France"] = {alias_of = "Occitania, France", display = true}, ["Pays de la Loire, France"] = {}, ["Provence-Alpes-Côte d'Azur, France"] = {}, -- ["Réunion"] = {}, } -- administrative regions of France export.france_group = { default_container = "France", -- Canonically these are 'administrative regions' but also treat as 'region' ('administrative region' falls back -- to 'region'). default_placetype = "region", default_divs = { "communes", {type = "municipalities", cat_as = "communes"}, "departments", {type = "prefectures", cat_as = {"prefectures", "departmental capitals"}}, {type = "French prefectures", cat_as = {"prefectures", "departmental capitals"}}, }, data = export.france_administrative_regions, } export.france_departments = { ["Ain, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 01 ["Aisne, France"] = {container = "Hauts-de-France"}, -- 02 ["Allier, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 03 ["Alpes-de-Haute-Provence, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 04 ["Hautes-Alpes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 05 ["Alpes-Maritimes, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 06 ["Ardèche, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 07 ["Ardennes, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 08 ["Ariège, France"] = {container = "Occitania", wp = "%l (department)"}, -- 09 ["Aube, France"] = {container = "Grand Est"}, -- 10 ["Aude, France"] = {container = "Occitania"}, -- 11 ["Aveyron, France"] = {container = "Occitania"}, -- 12 ["Bouches-du-Rhône, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 13 ["Calvados, France"] = {container = "Normandy", wp = "%l (department)"}, -- 14 ["Cantal, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 15 ["Charente, France"] = {container = "Nouvelle-Aquitaine"}, -- 16 ["Charente-Maritime, France"] = {container = "Nouvelle-Aquitaine"}, -- 17 ["Cher, France"] = {container = "Centre-Val de Loire", wp = "%l (department)"}, -- 18 ["Corrèze, France"] = {container = "Nouvelle-Aquitaine"}, -- 19 ["Corse-du-Sud, France"] = {container = "Corsica"}, -- 2A ["Haute-Corse, France"] = {container = "Corsica"}, -- 2B ["Côte-d'Or, France"] = {container = "Bourgogne-Franche-Comté"}, -- 21 ["Côte d'Or, France"] = {alias_of = "Côte-d'Or, France", display = true}, ["Côtes-d'Armor, France"] = {container = "Brittany"}, -- 22 ["Côtes d'Armor, France"] = {alias_of = "Côtes-d'Armor, France", display = true}, ["Creuse, France"] = {container = "Nouvelle-Aquitaine"}, -- 23 ["Dordogne, France"] = {container = "Nouvelle-Aquitaine"}, -- 24 ["Doubs, France"] = {container = "Bourgogne-Franche-Comté"}, -- 25 ["Drôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 26 ["Eure, France"] = {container = "Normandy"}, -- 27 ["Eure-et-Loir, France"] = {container = "Centre-Val de Loire"}, -- 28 ["Finistère, France"] = {container = "Brittany"}, -- 29 ["Gard, France"] = {container = "Occitania"}, -- 30 ["Haute-Garonne, France"] = {container = "Occitania"}, -- 31 ["Gers, France"] = {container = "Occitania"}, -- 32 ["Gironde, France"] = {container = "Nouvelle-Aquitaine"}, -- 33 ["Hérault, France"] = {container = "Occitania"}, -- 34 ["Ille-et-Vilaine, France"] = {container = "Brittany"}, -- 35 ["Indre, France"] = {container = "Centre-Val de Loire"}, -- 36 ["Indre-et-Loire, France"] = {container = "Centre-Val de Loire"}, -- 37 ["Isère, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 38 ["Jura, France"] = {container = "Bourgogne-Franche-Comté", wp = "%l (department)"}, -- 39 ["Landes, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 40 ["Loir-et-Cher, France"] = {container = "Centre-Val de Loire"}, -- 41 ["Loire, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 42 ["Haute-Loire, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 43 ["Loire-Atlantique, France"] = {container = "Pays de la Loire"}, -- 44 ["Loiret, France"] = {container = "Centre-Val de Loire"}, -- 45 ["Lot, France"] = {container = "Occitania", wp = "%l (department)"}, -- 46 ["Lot-et-Garonne, France"] = {container = "Nouvelle-Aquitaine"}, -- 47 ["Lozère, France"] = {container = "Occitania"}, -- 48 ["Maine-et-Loire, France"] = {container = "Pays de la Loire"}, -- 49 ["Manche, France"] = {container = "Normandy"}, -- 50 ["Marne, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 51 ["Haute-Marne, France"] = {container = "Grand Est"}, -- 52 ["Mayenne, France"] = {container = "Pays de la Loire"}, -- 53 ["Meurthe-et-Moselle, France"] = {container = "Grand Est"}, -- 54 ["Meuse, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 55 ["Morbihan, France"] = {container = "Brittany"}, -- 56 ["Moselle, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 57 ["Nièvre, France"] = {container = "Bourgogne-Franche-Comté"}, -- 58 ["Nord, France"] = {container = "Hauts-de-France", wp = "%l (French department)"}, -- 59 ["Oise, France"] = {container = "Hauts-de-France"}, -- 60 ["Orne, France"] = {container = "Normandy"}, -- 61 ["Pas-de-Calais, France"] = {container = "Hauts-de-France"}, -- 62 ["Puy-de-Dôme, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 63 ["Pyrénées-Atlantiques, France"] = {container = "Nouvelle-Aquitaine"}, -- 64 ["Hautes-Pyrénées, France"] = {container = "Occitania"}, -- 65 ["Pyrénées-Orientales, France"] = {container = "Occitania"}, -- 66 ["Bas-Rhin, France"] = {container = "Grand Est"}, -- 67 ["Haut-Rhin, France"] = {container = "Grand Est"}, -- 68 ["Rhône, France"] = {container = "Auvergne-Rhône-Alpes", wp = "%l (department)"}, -- 69D ["Metropolis of Lyon, France"] = {container = "Auvergne-Rhône-Alpes", the = true}, -- 69M ["Lyon Metropolis, France"] = {alias_of = "Metropolis of Lyon, France"}, ["Lyon, France"] = {alias_of = "Metropolis of Lyon, France"}, ["Haute-Saône, France"] = {container = "Bourgogne-Franche-Comté"}, -- 70 ["Saône-et-Loire, France"] = {container = "Bourgogne-Franche-Comté"}, -- 71 ["Sarthe, France"] = {container = "Pays de la Loire"}, -- 72 ["Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 73 ["Haute-Savoie, France"] = {container = "Auvergne-Rhône-Alpes"}, -- 74 ["Paris, France"] = {container = "Île-de-France"}, -- 75 ["Seine-Maritime, France"] = {container = "Normandy"}, -- 76 ["Seine-et-Marne, France"] = {container = "Île-de-France"}, -- 77 ["Yvelines, France"] = {container = "Île-de-France"}, -- 78 ["Deux-Sèvres, France"] = {container = "Nouvelle-Aquitaine"}, -- 79 ["Somme, France"] = {container = "Hauts-de-France", wp = "%l (department)"}, -- 80 ["Tarn, France"] = {container = "Occitania", wp = "%l (department)"}, -- 81 ["Tarn-et-Garonne, France"] = {container = "Occitania"}, -- 82 ["Var, France"] = {container = "Provence-Alpes-Côte d'Azur", wp = "%l (department)"}, -- 83 ["Vaucluse, France"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 84 ["Vendée, France"] = {container = "Pays de la Loire"}, -- 85 ["Vienne, France"] = {container = "Nouvelle-Aquitaine", wp = "%l (department)"}, -- 86 ["Haute-Vienne, France"] = {container = "Nouvelle-Aquitaine"}, -- 87 ["Vosges, France"] = {container = "Grand Est", wp = "%l (department)"}, -- 88 ["Yonne, France"] = {container = "Bourgogne-Franche-Comté"}, -- 89 ["Territoire de Belfort, France"] = {container = "Bourgogne-Franche-Comté"}, -- 90 ["Essonne, France"] = {container = "Île-de-France"}, -- 91 ["Hauts-de-Seine, France"] = {container = "Île-de-France"}, -- 92 ["Seine-Saint-Denis, France"] = {container = "Île-de-France"}, -- 93 ["Val-de-Marne, France"] = {container = "Île-de-France"}, -- 94 ["Val-d'Oise, France"] = {container = "Île-de-France"}, -- 95 --["Guadeloupe"] = {container = "Guadeloupe"}, -- 971 --["Martinique"] = {container = "Martinique"}, -- 972 --["Guyane"] = {container = "French Guiana", wp = "French Guiana"}, -- 973 --["La Réunion"] = {container = "Réunion", wp = "Réunion"}, -- 974 --["Mayotte"] = {container = "Mayotte"}, -- 976 } export.france_departments_group = { placename_to_key = make_placename_to_key(", France"), canonicalize_key_container = make_canonicalize_key_container(", France", "region"), default_placetype = "department", default_divs = { "communes", {type = "municipalities", cat_as = "communes"}, }, data = export.france_departments, } export.germany_states = { ["Baden-Württemberg, Germany"] = {}, ["Bavaria, Germany"] = {}, -- Berlin, Bremen and Hamburg are effectively city-states and don't have districts ([[Kreise]]), so override -- the default_divs setting. Better not to include them at all since they're included as cities down below. -- ["Berlin"] = {divs = {}}, ["Brandenburg, Germany"] = {}, -- ["Bremen"] = {divs = {}}, -- ["Hamburg"] = {divs = {}}, ["Hesse, Germany"] = {}, ["Lower Saxony, Germany"] = {}, ["Mecklenburg-Vorpommern, Germany"] = {}, ["Mecklenburg-Western Pomerania, Germany"] = {alias_of = "Mecklenburg-Vorpommern, Germany", display = true}, ["North Rhine-Westphalia, Germany"] = {}, ["Rhineland-Palatinate, Germany"] = {}, ["Saarland, Germany"] = {}, ["Saxony, Germany"] = {}, ["Saxony-Anhalt, Germany"] = {}, ["Schleswig-Holstein, Germany"] = {}, ["Thuringia, Germany"] = {}, } -- states of Germany export.germany_group = { default_container = "Germany", default_placetype = "state", default_divs = {"districts", "municipalities"}, data = export.germany_states, } export.greece_regions = { ["Attica, Greece"] = {wp = "%l (region)"}, ["Central Greece, Greece"] = {wp = "%l (administrative region)"}, ["Central Macedonia, Greece"] = {}, ["Crete, Greece"] = {}, ["Eastern Macedonia and Thrace, Greece"] = {}, ["Epirus, Greece"] = {wp = "%l (region)"}, ["Ionian Islands, Greece"] = {the = true, wp = "%l (region)"}, ["North Aegean, Greece"] = {the = true}, -- I would expect 'the Peloponnese' but Wikipedia mostly has categories like [[w:Category:Geography of Peloponnese (region)]] -- and [[w:Category:Buildings and structures in Peloponnese (region)]]; only [[w:Category:People from the Peloponnese (region)]] -- has "the" in it. ["Peloponnese, Greece"] = {wp = "%l (region)"}, ["South Aegean, Greece"] = {the = true}, ["Thessaly, Greece"] = {}, ["Western Greece, Greece"] = {}, ["Western Macedonia, Greece"] = {}, ["Mount Athos, Greece"] = {placetype = {"autonomous region", "region"}, wp = "Monastic community of Mount Athos"}, } -- regions of Greece export.greece_group = { default_container = "Greece", default_placetype = "region", data = export.greece_regions, } local india_polity_with_divisions = {"divisions", "districts"} local india_polity_without_divisions = {"districts"} -- States and union territories of India. Only some of them are divided into divisions. export.india_states_and_union_territories = { ["Andaman and Nicobar Islands, India"] = {the = true, placetype = "union territory", divs = india_polity_without_divisions}, ["Andhra Pradesh, India"] = {divs = india_polity_without_divisions}, ["Arunachal Pradesh, India"] = {divs = india_polity_with_divisions}, ["Assam, India"] = {divs = india_polity_with_divisions}, ["Bihar, India"] = {divs = india_polity_with_divisions}, ["Chandigarh, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Chhattisgarh, India"] = {divs = india_polity_with_divisions}, ["Dadra and Nagar Haveli and Daman and Diu, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Delhi, India"] = {placetype = "union territory", divs = india_polity_with_divisions}, ["Goa, India"] = {divs = india_polity_without_divisions}, ["Gujarat, India"] = {divs = india_polity_without_divisions}, ["Haryana, India"] = {divs = india_polity_with_divisions}, ["Himachal Pradesh, India"] = {divs = india_polity_with_divisions}, ["Jammu and Kashmir, India"] = {placetype = "union territory", divs = india_polity_with_divisions, wp = "%l (union territory)"}, ["Jharkhand, India"] = {divs = india_polity_with_divisions}, ["Karnataka, India"] = {divs = india_polity_with_divisions}, ["Kerala, India"] = {divs = india_polity_without_divisions}, ["Ladakh, India"] = {placetype = "union territory", divs = india_polity_with_divisions}, ["Lakshadweep, India"] = {placetype = "union territory", divs = india_polity_without_divisions}, ["Madhya Pradesh, India"] = {divs = india_polity_with_divisions}, ["Maharashtra, India"] = {divs = india_polity_with_divisions}, ["Manipur, India"] = {divs = india_polity_without_divisions}, ["Meghalaya, India"] = {divs = india_polity_with_divisions}, ["Mizoram, India"] = {divs = india_polity_without_divisions}, ["Nagaland, India"] = {divs = india_polity_with_divisions}, ["Odisha, India"] = {divs = india_polity_with_divisions}, ["Puducherry, India"] = {placetype = "union territory", divs = india_polity_without_divisions, wp = "%l (union territory)"}, ["Pondicherry, India"] = {alias_of = "Puducherry, India", display = true}, ["Punjab, India"] = {divs = india_polity_with_divisions, wp = "%l, %c"}, ["Rajasthan, India"] = {divs = india_polity_with_divisions}, ["Sikkim, India"] = {divs = india_polity_without_divisions}, ["Tamil Nadu, India"] = {divs = india_polity_without_divisions}, ["Telangana, India"] = {divs = india_polity_without_divisions}, ["Tripura, India"] = {divs = india_polity_without_divisions}, ["Uttar Pradesh, India"] = {divs = india_polity_with_divisions}, ["Uttarakhand, India"] = {divs = india_polity_with_divisions}, ["West Bengal, India"] = {divs = india_polity_with_divisions}, } -- states and union territories of India export.india_group = { default_container = "India", default_placetype = "state", data = export.india_states_and_union_territories, } export.indonesia_provinces = { ["Aceh, Indonesia"] = {}, ["Bali, Indonesia"] = {}, ["Bangka Belitung Islands, Indonesia"] = {the = true}, ["Banten, Indonesia"] = {}, ["Bengkulu, Indonesia"] = {}, ["Central Java, Indonesia"] = {}, ["Central Kalimantan, Indonesia"] = {}, ["Central Papua, Indonesia"] = {}, ["Central Sulawesi, Indonesia"] = {}, ["East Java, Indonesia"] = {}, ["East Kalimantan, Indonesia"] = {}, ["East Nusa Tenggara, Indonesia"] = {}, ["Gorontalo, Indonesia"] = {}, ["Highland Papua, Indonesia"] = {wp = "%l"}, ["Special Capital Region of Jakarta, Indonesia"] = {the = true, wp = "Jakarta"}, ["Jakarta, Indonesia"] = {alias_of = "Special Capital Region of Jakarta, Indonesia"}, ["Jambi, Indonesia"] = {}, ["Lampung, Indonesia"] = {}, ["Maluku, Indonesia"] = {}, ["North Kalimantan, Indonesia"] = {}, ["North Maluku, Indonesia"] = {}, ["North Sulawesi, Indonesia"] = {}, ["North Papua, Indonesia"] = {}, ["North Sumatra, Indonesia"] = {}, ["Papua, Indonesia"] = {wp = "%l (province)"}, ["Riau, Indonesia"] = {}, ["Riau Islands, Indonesia"] = {the = true}, ["Southeast Sulawesi, Indonesia"] = {}, ["South Kalimantan, Indonesia"] = {}, ["South Papua, Indonesia"] = {}, ["South Sulawesi, Indonesia"] = {}, ["South Sumatra, Indonesia"] = {}, ["Southwest Papua, Indonesia"] = {}, ["West Java, Indonesia"] = {}, ["West Kalimantan, Indonesia"] = {}, ["West Nusa Tenggara, Indonesia"] = {}, ["West Papua, Indonesia"] = {wp = "%l (province)"}, ["West Sulawesi, Indonesia"] = {}, ["West Sumatra, Indonesia"] = {}, ["Special Region of Yogyakarta, Indonesia"] = {the = true}, ["Yogyakarta, Indonesia"] = {alias_of = "Special Region of Yogyakarta, Indonesia"}, } -- provinces of Indonesia export.indonesia_group = { default_container = "Indonesia", default_placetype = "province", -- per https://www.quora.com/Does-Indonesia-use-British-or-American-English, Indonesia tends to use American -- spellings. data = export.indonesia_provinces, } export.iran_provinces = { ["Alborz Province, Iran"] = {}, -- abbreviation AL, capital [[w:Karaj]] ["Ardabil Province, Iran"] = {}, -- abbreviation AR, capital [[w:Ardabil]] ["Bushehr Province, Iran"] = {}, -- abbreviation BU, capital [[w:Bushehr]] ["Chaharmahal and Bakhtiari Province, Iran"] = {}, -- abbreviation CB, capital [[w:Shahr-e Kord]] ["East Azerbaijan Province, Iran"] = {}, -- abbreviation EA, capital [[w:Tabriz]] ["Fars Province, Iran"] = {}, -- abbreviation FA, capital [[w:Shiraz]] ["Pars Province, Iran"] = {alias_of = "Fars Province, Iran", display = true}, ["Gilan Province, Iran"] = {}, -- abbreviation GN, capital [[w:Rasht]] ["Golestan Province, Iran"] = {}, -- abbreviation GO, capital [[w:Gorgan]] ["Hamadan Province, Iran"] = {}, -- abbreviation HA, capital [[w:Hamadan]] ["Hormozgan Province, Iran"] = {}, -- abbreviation HO, capital [[w:Bandar Abbas]] ["Ilam Province, Iran"] = {}, -- abbreviation IL, capital [[w:Ilam, Iran|Ilam]] ["Isfahan Province, Iran"] = {}, -- abbreviation IS, capital [[w:Isfahan]] ["Kerman Province, Iran"] = {}, -- abbreviation KN, capital [[w:Kerman]] ["Kermanshah Province, Iran"] = {}, -- abbreviation KE, capital [[w:Kermanshah]] ["Khuzestan Province, Iran"] = {}, -- abbreviation KH, capital [[w:Ahvaz]] ["Kohgiluyeh and Boyer-Ahmad Province, Iran"] = {}, -- abbreviation KB, capital [[w:Yasuj]] ["Kurdistan Province, Iran"] = {}, -- abbreviation KU, capital [[w:Sanandaj]] ["Lorestan Province, Iran"] = {}, -- abbreviation LO, capital [[w:Khorramabad]] ["Markazi Province, Iran"] = {}, -- abbreviation MA, capital [[w:Arak, Iran|Arak]] ["Mazandaran Province, Iran"] = {}, -- abbreviation MN, capital [[w:Sari, Iran|Sari]] ["North Khorasan Province, Iran"] = {}, -- abbreviation NK, capital [[w:Bojnord]] ["Qazvin Province, Iran"] = {}, -- abbreviation QA, capital [[w:Qazvin]] ["Qom Province, Iran"] = {}, -- abbreviation QM, capital [[w:Qom]] ["Razavi Khorasan Province, Iran"] = {}, -- abbreviation RK, capital [[w:Mashhad]] ["Semnan Province, Iran"] = {}, -- abbreviation SE, capital [[w:Semnan, Iran|Semnan]] ["Sistan and Baluchestan Province, Iran"] = {}, -- abbreviation SB, capital [[w:Zahedan]] ["South Khorasan Province, Iran"] = {}, -- abbreviation SK, capital [[w:Birjand]] ["Tehran Province, Iran"] = {}, -- abbreviation TE, capital [[w:Tehran]] ["West Azerbaijan Province, Iran"] = {}, -- abbreviation WA, capital [[w:Urmia]] ["Yazd Province, Iran"] = {}, -- abbreviation YA, capital [[w:Yazd]] ["Zanjan Province, Iran"] = {}, -- abbreviation ZA, capital [[w:Zanjan, Iran|Zanjan]] } -- provinces of Iran export.iran_group = { key_to_placename = make_key_to_placename(", Iran", " Province$"), placename_to_key = make_placename_to_key(", Iran", " Province"), default_container = "Iran", default_placetype = "province", -- There aren't nearly enough counties of Iran currently entered in any language to allow for categorizing them -- per-province. (As of 2025-05-09, there are only 6 counties in each of [[Category:en:Counties of Iran]], -- [[Category:fa:Counties of Iran]] and [[Category:ar:Counties of Iran]].) -- default_divs = "counties", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.iran_provinces, } export.ireland_counties = { ["County Carlow, Ireland"] = {}, ["County Cavan, Ireland"] = {}, ["County Clare, Ireland"] = {}, ["County Cork, Ireland"] = {}, ["County Donegal, Ireland"] = {}, ["County Dublin, Ireland"] = {}, ["County Galway, Ireland"] = {}, ["County Kerry, Ireland"] = {}, ["County Kildare, Ireland"] = {}, ["County Kilkenny, Ireland"] = {}, ["County Laois, Ireland"] = {}, ["County Leitrim, Ireland"] = {}, ["County Limerick, Ireland"] = {}, ["County Longford, Ireland"] = {}, ["County Louth, Ireland"] = {}, ["County Mayo, Ireland"] = {}, ["County Meath, Ireland"] = {}, ["County Monaghan, Ireland"] = {}, ["County Offaly, Ireland"] = {}, ["County Roscommon, Ireland"] = {}, ["County Sligo, Ireland"] = {}, ["County Tipperary, Ireland"] = {}, ["County Waterford, Ireland"] = {}, ["County Westmeath, Ireland"] = {}, ["County Wexford, Ireland"] = {}, ["County Wicklow, Ireland"] = {}, } local function make_irish_type_key_to_placename(container_pattern) return function(key) key = key:gsub(container_pattern, "") local elliptical_key = key:gsub("^County ", "") return key, elliptical_key end end local function make_irish_type_placename_to_key(container_suffix) return function(placename) if not placename:find("^County ") and not placename:find("^City ") then placename = "County " .. placename end return placename .. container_suffix end end -- counties of Ireland export.ireland_group = { key_to_placename = make_irish_type_key_to_placename(", Ireland$"), placename_to_key = make_irish_type_placename_to_key(", Ireland"), default_container = "Ireland", default_placetype = "county", data = export.ireland_counties, } export.italy_administrative_regions = { ["Abruzzo, Italy"] = {}, ["Aosta Valley, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Apulia, Italy"] = {}, ["Basilicata, Italy"] = {}, ["Calabria, Italy"] = {}, ["Campania, Italy"] = {}, ["Emilia-Romagna, Italy"] = {}, ["Friuli-Venezia Giulia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Lazio, Italy"] = {}, ["Liguria, Italy"] = {}, ["Lombardy, Italy"] = {}, ["Marche, Italy"] = {}, ["Molise, Italy"] = {}, ["Piedmont, Italy"] = {}, ["Sardinia, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Sicily, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Trentino-Alto Adige, Italy"] = {placetype = {"autonomous region", "administrative region", "region"}}, ["Tuscany, Italy"] = {}, ["Umbria, Italy"] = {}, ["Veneto, Italy"] = {}, } -- administrative regions of Italy export.italy_group = { default_container = "Italy", default_placetype = "region", data = export.italy_administrative_regions, } -- table of Japanese prefectures; interpolated into the main 'places' table, but also needed separately export.japan_prefectures = { ["Aichi Prefecture, Japan"] = {}, ["Akita Prefecture, Japan"] = {}, ["Aomori Prefecture, Japan"] = {}, ["Chiba Prefecture, Japan"] = {}, ["Ehime Prefecture, Japan"] = {}, ["Fukui Prefecture, Japan"] = {}, ["Fukuoka Prefecture, Japan"] = {}, ["Fukushima Prefecture, Japan"] = {}, ["Gifu Prefecture, Japan"] = {}, ["Gunma Prefecture, Japan"] = {}, ["Hiroshima Prefecture, Japan"] = {}, ["Hokkaido Prefecture, Japan"] = {divs = "subprefectures", wp = "Hokkaido"}, ["Hyōgo Prefecture, Japan"] = {}, ["Hyogo Prefecture, Japan"] = {alias_of = "Hyōgo Prefecture, Japan", display = true}, ["Ibaraki Prefecture, Japan"] = {}, ["Ishikawa Prefecture, Japan"] = {}, ["Iwate Prefecture, Japan"] = {}, ["Kagawa Prefecture, Japan"] = {}, ["Kagoshima Prefecture, Japan"] = {}, ["Kanagawa Prefecture, Japan"] = {}, ["Kōchi Prefecture, Japan"] = {}, ["Kochi Prefecture, Japan"] = {alias_of = "Kōchi Prefecture, Japan", display = true}, ["Kumamoto Prefecture, Japan"] = {}, ["Kyoto Prefecture, Japan"] = {}, ["Mie Prefecture, Japan"] = {}, ["Miyagi Prefecture, Japan"] = {}, ["Miyazaki Prefecture, Japan"] = {}, ["Nagano Prefecture, Japan"] = {}, ["Nagasaki Prefecture, Japan"] = {}, ["Nara Prefecture, Japan"] = {}, ["Niigata Prefecture, Japan"] = {}, ["Ōita Prefecture, Japan"] = {}, ["Oita Prefecture, Japan"] = {alias_of = "Ōita Prefecture, Japan", display = true}, ["Okayama Prefecture, Japan"] = {}, ["Okinawa Prefecture, Japan"] = {}, ["Osaka Prefecture, Japan"] = {}, ["Saga Prefecture, Japan"] = {}, ["Saitama Prefecture, Japan"] = {}, ["Shiga Prefecture, Japan"] = {}, ["Shimane Prefecture, Japan"] = {}, ["Shizuoka Prefecture, Japan"] = {}, ["Tochigi Prefecture, Japan"] = {}, ["Tokushima Prefecture, Japan"] = {}, ["Tottori Prefecture, Japan"] = {}, ["Toyama Prefecture, Japan"] = {}, ["Wakayama Prefecture, Japan"] = {}, ["Yamagata Prefecture, Japan"] = {}, ["Yamaguchi Prefecture, Japan"] = {}, ["Yamanashi Prefecture, Japan"] = {}, } -- prefectures of Japan export.japan_group = { key_to_placename = make_key_to_placename(", Japan$", " Prefecture$"), placename_to_key = make_placename_to_key(", Japan", " Prefecture"), default_container = "Japan", default_placetype = "prefecture", data = export.japan_prefectures, } export.laos_provinces = { ["Attapeu Province, Laos"] = {}, ["Bokeo Province, Laos"] = {}, ["Bolikhamxai Province, Laos"] = {}, ["Champasak Province, Laos"] = {}, ["Houaphanh Province, Laos"] = {}, ["Khammouane Province, Laos"] = {}, ["Luang Namtha Province, Laos"] = {}, ["Luang Prabang Province, Laos"] = {}, ["Oudomxay Province, Laos"] = {}, ["Phongsaly Province, Laos"] = {}, ["Salavan Province, Laos"] = {}, ["Savannakhet Province, Laos"] = {}, ["Vientiane Province, Laos"] = {}, ["Vientiane Prefecture, Laos"] = {placetype = "prefecture", wp = "%l"}, ["Sainyabuli Province, Laos"] = {}, ["Sekong Province, Laos"] = {}, ["Xaisomboun Province, Laos"] = {}, ["Xiangkhouang Province, Laos"] = {}, } local function laos_placename_to_key(placename) if placename == "Vientiane Prefecture" then return placename .. ", Laos" end if placename:find(" Province$") then return placename .. ", Laos" end return placename .. " Province, Laos" end -- provinces of Laos export.laos_group = { key_to_placename = make_key_to_placename(", Laos$", {" Province$", " Prefecture$"}), placename_to_key = laos_placename_to_key, default_container = "Laos", default_placetype = "province", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.laos_provinces, } export.lebanon_governorates = { ["Akkar Governorate, Lebanon"] = {}, ["Baalbek-Hermel Governorate, Lebanon"] = {}, ["Beirut Governorate, Lebanon"] = {}, ["Beqaa Governorate, Lebanon"] = {}, ["Keserwan-Jbeil Governorate, Lebanon"] = {}, ["Mount Lebanon Governorate, Lebanon"] = {}, ["Nabatieh Governorate, Lebanon"] = {}, -- These two are generic enough that we don't want to automatically augment a use of `gov/North Governorate` or -- `gov/South Governorate` with `c/Lebanon`. ["North Governorate, Lebanon"] = {no_auto_augment_container = true}, ["South Governorate, Lebanon"] = {no_auto_augment_container = true}, } -- governorates of Lebanon export.lebanon_group = { key_to_placename = make_key_to_placename(", Lebanon$", " Governorate$"), placename_to_key = make_placename_to_key(", Lebanon", " Governorate"), default_container = "Lebanon", default_placetype = "governorate", data = export.lebanon_governorates, } export.malaysia_states = { ["Johor, Malaysia"] = {}, ["Kedah, Malaysia"] = {}, ["Kelantan, Malaysia"] = {}, ["Malacca, Malaysia"] = {}, ["Negeri Sembilan, Malaysia"] = {}, ["Pahang, Malaysia"] = {}, ["Penang, Malaysia"] = {}, ["Perak, Malaysia"] = {}, ["Perlis, Malaysia"] = {}, ["Sabah, Malaysia"] = {}, ["Sarawak, Malaysia"] = {}, ["Selangor, Malaysia"] = {}, ["Terengganu, Malaysia"] = {}, } -- states of Malaysia export.malaysia_group = { default_container = "Malaysia", default_placetype = "state", default_wp = "%l, %c", data = export.malaysia_states, } export.malta_regions = { -- Some of the regions are generic enough that we don't want to automatically augment a use of e.g. -- `r/Northern Region` with `c/Malta`. In particular; -- * "Eastern Region" also occurs at least in Ghana, Uganda, Iceland, Nigeria, Venezuela, North Macedonia and -- El Salvador; -- * "Northern Region" also occurs at least in Ghana, Uganda, Malawi, Nigeria, Canada and South Africa; -- * "Western Region" also occurs at least in Abu Dhabi, Bahrain, South Africa, Ghana, Iceland, Nepal, Nigeria, -- Serbia and Uganda; -- * "Southern Region" also occurs at least in Nigeria, Eritrea, Iceland, Ireland, Malawi and Serbia. ["Eastern Region, Malta"] = {no_auto_augment_container = true}, ["Gozo Region, Malta"] = {wp = "%l"}, ["Northern Region, Malta"] = {no_auto_augment_container = true}, ["Port Region, Malta"] = {}, ["Southern Region, Malta"] = {no_auto_augment_container = true}, ["Western Region, Malta"] = {no_auto_augment_container = true}, } -- regions of Malta export.malta_group = { key_to_placename = make_key_to_placename(", Malta$", " Region"), placename_to_key = make_placename_to_key(", Malta", " Region"), default_container = "Malta", default_placetype = "region", default_wp = "%l, %c", default_the = true, data = export.malta_regions, } export.mexico_states = { ["Aguascalientes, Mexico"] = {}, ["Baja California, Mexico"] = {}, -- not display-canonicalizing because the "Norte" could be for emphasis ["Baja California Norte, Mexico"] = {alias_of = "Baja California, Mexico"}, ["Baja California Sur, Mexico"] = {}, ["Campeche, Mexico"] = {}, ["Chiapas, Mexico"] = {}, ["Chihuahua, Mexico"] = {wp = "%l (state)"}, ["Coahuila, Mexico"] = {}, ["Colima, Mexico"] = {}, ["Durango, Mexico"] = {}, ["Guanajuato, Mexico"] = {}, ["Guerrero, Mexico"] = {}, ["Hidalgo, Mexico"] = {wp = "%l (state)"}, ["Jalisco, Mexico"] = {}, ["State of Mexico, Mexico"] = {the = true}, ["Mexico, Mexico"] = {alias_of = "State of Mexico, Mexico"}, -- differs in "the" -- ["Mexico City, Mexico"] = {}, doesn't belong here because it's a city ["Michoacán, Mexico"] = {}, ["Michoacan, Mexico"] = {alias_of = "Michoacán, Mexico", display = true}, ["Morelos, Mexico"] = {}, ["Nayarit, Mexico"] = {}, ["Nuevo León, Mexico"] = {}, ["Nuevo Leon, Mexico"] = {alias_of = "Nuevo León, Mexico", display = true}, ["Oaxaca, Mexico"] = {}, ["Puebla, Mexico"] = {}, ["Querétaro, Mexico"] = {}, ["Queretaro, Mexico"] = {alias_of = "Querétaro, Mexico", display = true}, ["Quintana Roo, Mexico"] = {}, ["San Luis Potosí, Mexico"] = {}, ["San Luis Potosi, Mexico"] = {alias_of = "San Luis Potosí, Mexico", display = true}, ["Sinaloa, Mexico"] = {}, ["Sonora, Mexico"] = {}, ["Tabasco, Mexico"] = {}, ["Tamaulipas, Mexico"] = {}, ["Tlaxcala, Mexico"] = {}, ["Veracruz, Mexico"] = {}, ["Yucatán, Mexico"] = {}, ["Yucatan, Mexico"] = {alias_of = "Yucatán, Mexico", display = true}, ["Zacatecas, Mexico"] = {}, } -- Mexican states export.mexico_group = { default_container = "Mexico", default_placetype = "state", data = export.mexico_states, } export.moldova_districts_and_autonomous_territorial_units = { ["Anenii Noi District, Moldova"] = {}, -- capital [[Anenii Noi]] ["Basarabeasca District, Moldova"] = {}, -- capital [[Basarabeasca]] ["Briceni District, Moldova"] = {}, -- capital [[Briceni]] ["Cahul District, Moldova"] = {}, -- capital [[Cahul]] ["Cantemir District, Moldova"] = {}, -- capital [[Cantemir, Moldova|Cantemir]] ["Călărași District, Moldova"] = {}, -- capital [[Călărași, Moldova|Călărași]] ["Căușeni District, Moldova"] = {}, -- capital [[Căușeni]] ["Cimișlia District, Moldova"] = {}, -- capital [[Cimișlia]] ["Criuleni District, Moldova"] = {}, -- capital [[Criuleni]] ["Dondușeni District, Moldova"] = {}, -- capital [[Dondușeni]] ["Drochia District, Moldova"] = {}, -- capital [[Drochia]] ["Dubăsari District, Moldova"] = {}, -- capital [[Cocieri]] ["Edineț District, Moldova"] = {}, -- capital [[Edineț]] ["Fălești District, Moldova"] = {}, -- capital [[Fălești]] ["Florești District, Moldova"] = {}, -- capital [[Florești, Moldova|Florești]] ["Glodeni District, Moldova"] = {}, -- capital [[Glodeni]] ["Hîncești District, Moldova"] = {}, -- capital [[Hîncești]] ["Ialoveni District, Moldova"] = {}, -- capital [[Ialoveni]] ["Leova District, Moldova"] = {}, -- capital [[Leova]] ["Nisporeni District, Moldova"] = {}, -- capital [[Nisporeni]] ["Ocnița District, Moldova"] = {}, -- capital [[Ocnița]] ["Orhei District, Moldova"] = {}, -- capital [[Orhei]] ["Rezina District, Moldova"] = {}, -- capital [[Rezina]] ["Rîșcani District, Moldova"] = {}, -- capital [[Rîșcani]] ["Sîngerei District, Moldova"] = {}, -- capital [[Sîngerei]] ["Soroca District, Moldova"] = {}, -- capital [[Soroca]] ["Strășeni District, Moldova"] = {}, -- capital [[Strășeni]] ["Șoldănești District, Moldova"] = {}, -- capital [[Șoldănești]] ["Ștefan Vodă District, Moldova"] = {}, -- capital [[Ștefan Vodă]] ["Taraclia District, Moldova"] = {}, -- capital [[Taraclia]] ["Telenești District, Moldova"] = {}, -- capital [[Telenești]] ["Ungheni District, Moldova"] = {}, -- capital [[Ungheni]] ["Chișinău, Moldova"] = {placetype = "municipality"}, ["Bălți, Moldova"] = {placetype = "municipality"}, ["Gagauzia, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Comrat]] -- the remainder are under the de-facto control of the unrecognized state of Transnistria ["Bender, Moldova"] = {placetype = "municipality"}, ["Tighina, Moldova"] = {alias_of = "Bender, Moldova"}, ["Transnistria, Moldova"] = {placetype = {"autonomous territorial unit", "autonomous region", "region"}}, -- capital [[Tiraspol]] ["Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova", the = true}, ["Administrative-Territorial Units of the Left Bank of the Dniester, Moldova"] = {alias_of = "Transnistria, Moldova", the = true}, } local function moldova_placename_to_key(placename) local elliptical_key = placename .. ", Moldova" if export.moldova_districts_and_autonomous_territorial_units[elliptical_key] then return elliptical_key end if placename:find(" District$") then return placename .. ", Moldova" end return placename .. " District, Moldova" end -- Moldovan districts (raions) and autonomous territorial units export.moldova_group = { key_to_placename = make_key_to_placename(", Moldova$", " District"), placename_to_key = moldova_placename_to_key, default_container = "Moldova", default_placetype = {"district", "raion"}, default_divs = "communes", data = export.moldova_districts_and_autonomous_territorial_units, } export.morocco_regions = { ["Tangier-Tetouan-Al Hoceima, Morocco"] = {}, ["Oriental, Morocco"] = {wp = "%l (%c)"}, ["L'Oriental, Morocco"] = {alias_of = "Oriental, Morocco", display = true}, ["Fez-Meknes, Morocco"] = {}, ["Rabat-Sale-Kenitra, Morocco"] = {wp = "Rabat-Salé-Kénitra"}, ["Rabat-Salé-Kénitra, Morocco"] = {alias_of = "Rabat-Sale-Kenitra, Morocco", display = true}, ["Beni Mellal-Khenifra, Morocco"] = {wp = "Béni Mellal-Khénifra"}, ["Béni Mellal-Khénifra, Morocco"] = {alias_of = "Beni Mellal-Khenifra, Morocco", display = true}, ["Casablanca-Settat, Morocco"] = {}, ["Marrakesh-Safi, Morocco"] = {wp = "Marrakesh–Safi"}, -- WP title has en-dash ["Marrakech-Safi, Morocco"] = {alias_of = "Marrakesh-Safi, Morocco", display = true}, ["Draa-Tafilalet, Morocco"] = {wp = "Drâa-Tafilalet"}, ["Drâa-Tafilalet, Morocco"] = {alias_of = "Draa-Tafilalet, Morocco", display = true}, ["Souss-Massa, Morocco"] = {}, ["Guelmim-Oued Noun, Morocco"] = { keydesc = "+++. '''NOTE:''' This region lies partly within the disputed territory of [[Western Sahara]]" }, ["Laayoune-Sakia El Hamra, Morocco"] = { wp = "Laâyoune-Sakia El Hamra", keydesc = "+++. '''NOTE:''' This region lies almost completely within the disputed territory of [[Western Sahara]]", }, ["Laâyoune-Sakia El Hamra, Morocco"] = {alias_of = "Laayoune-Sakia El Hamra, Morocco", display = true}, ["Dakhla-Oued Ed-Dahab, Morocco"] = { keydesc = "+++. '''NOTE:''' This region lies completely within the disputed territory of [[Western Sahara]]", }, } -- regions of Morocco export.morocco_group = { default_container = "Morocco", default_placetype = "region", data = export.morocco_regions, } export.egypt_governorates = { ["Cairo Governorate, Egypt"] = {}, ["Giza Governorate, Egypt"] = {}, ["Sharqia Governorate, Egypt"] = {}, ["Dakahlia Governorate, Egypt"] = {}, ["Beheira Governorate, Egypt"] = {}, ["Minya Governorate, Egypt"] = {}, ["Qalyubia Governorate, Egypt"] = {}, ["Sohag Governorate, Egypt"] = {}, ["Alexandria Governorate, Egypt"] = {}, ["Gharbia Governorate, Egypt"] = {}, ["Asyut Governorate, Egypt"] = {}, ["Monufia Governorate, Egypt"] = {}, ["Faiyum Governorate, Egypt"] = {}, ["Kafr El Sheikh Governorate, Egypt"] = {}, ["Qena Governorate, Egypt"] = {}, ["Beni Suef Governorate, Egypt"] = {}, ["Damietta Governorate, Egypt"] = {}, ["Aswan Governorate, Egypt"] = {}, ["Ismailia Governorate, Egypt"] = {}, ["Luxor Governorate, Egypt"] = {}, ["Suez Governorate, Egypt"] = {}, ["Port Said Governorate, Egypt"] = {}, ["Matrouh Governorate, Egypt"] = {}, ["North Sinai Governorate, Egypt"] = {}, ["Red Sea Governorate, Egypt"] = {}, ["New Valley Governorate, Egypt"] = {}, ["South Sinai Governorate, Egypt"] = {}, } -- governorates of Egypt export.egypt_group = { key_to_placename = make_key_to_placename(", Egypt$", " Governorate$"), placename_to_key = make_placename_to_key(", Egypt", " Governorate"), default_container = "Egypt", default_placetype = "governorate", data = export.egypt_governorates, } export.netherlands_provinces = { ["Drenthe, Netherlands"] = {}, ["Flevoland, Netherlands"] = {}, ["Friesland, Netherlands"] = {}, ["Gelderland, Netherlands"] = {}, ["Groningen, Netherlands"] = {wp = "%l (province)"}, ["Limburg, Netherlands"] = {wp = "%l (%c)"}, ["North Brabant, Netherlands"] = {}, -- Foreign forms get display-canonicalized. ["Noord-Brabant, Netherlands"] = {alias_of = "North Brabant, Netherlands", display = true}, ["North Holland, Netherlands"] = {}, ["Noord-Holland, Netherlands"] = {alias_of = "North Holland, Netherlands", display = true}, ["Overijssel, Netherlands"] = {}, ["South Holland, Netherlands"] = {}, ["Zuid-Holland, Netherlands"] = {alias_of = "South Holland, Netherlands", display = true}, ["Utrecht, Netherlands"] = {wp = "%l (province)"}, ["Zeeland, Netherlands"] = {}, } -- provinces of the Netherlands export.netherlands_group = { default_container = "Netherlands", default_placetype = "province", default_divs = "municipalities", data = export.netherlands_provinces, } export.new_zealand_regions = { -- North Island regions ["Northland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-NTL, number 1, capital [[Whangārei]] ["Auckland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-AUK, number 2, capital [[Auckland]] ["Waikato, New Zealand"] = {}, -- ISO 3166-2 code NZ-WKO, number 3, capital [[Hamilton, New Zealand|Hamilton]] ["Bay of Plenty, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-BOP, number 4, capital [[Whakatāne]] ["Gisborne, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-GIS, number 5, capital [[Gisborne, New Zealand|Gisborne]] ["Hawke's Bay, New Zealand"] = {}, -- ISO 3166-2 code NZ-HKB, number 6, capital [[Napier, New Zealand|Napier]] ["Taranaki, New Zealand"] = {}, -- ISO 3166-2 code NZ-TKI, number 7, capital [[Stratford, New Zealand|Stratford]] ["Manawatū-Whanganui, New Zealand"] = {}, -- ISO 3166-2 code NZ-MWT, number 8, capital [[Palmerston North]] ["Manawatu-Whanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true}, ["Manawatu-Wanganui, New Zealand"] = {alias_of = "Manawatū-Whanganui, New Zealand", display = true}, ["Wellington, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-WGN, number 9, capital [[Wellington]] -- South Island regions ["Tasman, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-TAS, number 10, capital [[Richmond, New Zealand|Richmond]] ["Nelson, New Zealand"] = {placetype = {"region", "city"}, wp = "%l, %c", is_city = true}, -- ISO 3166-2 code NZ-NSN, number 11, capital [[Nelson, New Zealand|Nelson]] ["Marlborough, New Zealand"] = {placetype = {"region", "district"}, wp = "%l District"}, -- ISO 3166-2 code NZ-MBH, number 12, capital [[Blenheim, New Zealand|Blenheim]] ["West Coast, New Zealand"] = {the = true, wp = "%l Region"}, -- ISO 3166-2 code NZ-WTC, number 13, capital [[Greymouth]] ["Canterbury, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-CAN, number 14, capital [[Christchurch]] ["Otago, New Zealand"] = {}, -- ISO 3166-2 code NZ-OTA, number 15, capital [[Dunedin]] ["Southland, New Zealand"] = {wp = "%l Region"}, -- ISO 3166-2 code NZ-STL, number 16, capital [[Invercargill]] } -- regions of New Zealand export.new_zealand_group = { default_container = "New Zealand", default_placetype = "region", data = export.new_zealand_regions, } export.nigeria_states = { ["Abia State, Nigeria"] = {}, ["Adamawa State, Nigeria"] = {}, ["Akwa Ibom State, Nigeria"] = {}, ["Anambra State, Nigeria"] = {}, ["Bauchi State, Nigeria"] = {}, ["Bayelsa State, Nigeria"] = {}, ["Benue State, Nigeria"] = {}, ["Borno State, Nigeria"] = {}, ["Cross River State, Nigeria"] = {}, ["Delta State, Nigeria"] = {}, ["Ebonyi State, Nigeria"] = {}, ["Edo State, Nigeria"] = {}, ["Ekiti State, Nigeria"] = {}, ["Enugu State, Nigeria"] = {}, ["Federal Capital Territory, Nigeria"] = { -- not a state but allow it to be referenced as one in holonyms placetype = {"federal territory", "territory", "state"}, the = true, wp = "%l (%c)", }, ["Gombe State, Nigeria"] = {}, ["Imo State, Nigeria"] = {}, ["Jigawa State, Nigeria"] = {}, ["Kaduna State, Nigeria"] = {}, ["Kano State, Nigeria"] = {}, ["Katsina State, Nigeria"] = {}, ["Kebbi State, Nigeria"] = {}, ["Kogi State, Nigeria"] = {}, ["Kwara State, Nigeria"] = {}, ["Lagos State, Nigeria"] = {}, ["Nasarawa State, Nigeria"] = {}, ["Niger State, Nigeria"] = {}, ["Ogun State, Nigeria"] = {}, ["Ondo State, Nigeria"] = {}, ["Osun State, Nigeria"] = {}, ["Oyo State, Nigeria"] = {}, ["Plateau State, Nigeria"] = {}, ["Rivers State, Nigeria"] = {}, ["Sokoto State, Nigeria"] = {}, ["Taraba State, Nigeria"] = {}, ["Yobe State, Nigeria"] = {}, ["Zamfara State, Nigeria"] = {}, } -- states of Nigeria export.nigeria_group = { key_to_placename = make_key_to_placename(", Nigeria$", " State$"), placename_to_key = make_placename_to_key(", Nigeria", " State"), default_container = "Nigeria", default_placetype = "state", data = export.nigeria_states, } export.north_korea_provinces = { ["Chagang Province, North Korea"] = {}, ["North Hamgyong Province, North Korea"] = {}, ["South Hamgyong Province, North Korea"] = {}, ["North Hwanghae Province, North Korea"] = {}, ["South Hwanghae Province, North Korea"] = {}, ["Kangwon Province, North Korea"] = {wp = "%l (%c)"}, ["North Pyongan Province, North Korea"] = {}, ["South Pyongan Province, North Korea"] = {}, ["Ryanggang Province, North Korea"] = {}, } -- provinces of North Korea export.north_korea_group = { key_to_placename = make_key_to_placename(", North Korea$", " Province$"), placename_to_key = make_placename_to_key(", North Korea", " Province"), default_container = "North Korea", default_placetype = "province", data = export.north_korea_provinces, } export.norwegian_counties = { ["Oslo, Norway"] = {}, ["Rogaland, Norway"] = {}, ["Møre og Romsdal, Norway"] = {}, ["Nordland, Norway"] = {}, ["Østfold, Norway"] = {}, ["Akershus, Norway"] = {}, ["Buskerud, Norway"] = {}, -- the following two were merged into Innlandet -- ["Hedmark, Norway"] = {}, -- ["Oppland, Norway"] = {}, ["Innlandet, Norway"] = {}, ["Vestfold, Norway"] = {}, ["Telemark, Norway"] = {}, -- the following two were merged into Agder -- ["Aust-Agder, Norway"] = {}, -- ["Vest-Agder, Norway"] = {}, ["Agder, Norway"] = {}, -- the following two were merged into Vestland -- ["Hordaland, Norway"] = {}, -- ["Sogn og Fjordane, Norway"] = {}, ["Vestland, Norway"] = {}, ["Trøndelag, Norway"] = {}, ["Troms, Norway"] = {}, ["Finnmark, Norway"] = {}, } -- counties of Norway export.norway_group = { default_container = "Norway", default_placetype = "county", data = export.norwegian_counties, } export.pakistan_provinces_and_territories = { ["Azad Kashmir, Pakistan"] = { placetype = {"administrative territory", "autonomous territory", "territory"}, }, ["Azad Jammu and Kashmir, Pakistan"] = {alias_of = "Azad Kashmir, Pakistan", display = true}, ["Balochistan, Pakistan"] = {wp = "%l, %c"}, ["Gilgit-Baltistan, Pakistan"] = { placetype = {"administrative territory", "territory"}, }, ["Islamabad Capital Territory, Pakistan"] = { the = true, divs = {}, -- no divisions placetype = {"federal territory", "administrative territory", "territory"}, }, -- Islamabad is an accepted alias for Islamabad Capital Territory given the above placetypes ["Islamabad, Pakistan"] = {alias_of = "Islamabad Capital Territory, Pakistan"}, ["Khyber Pakhtunkhwa, Pakistan"] = {}, ["Punjab, Pakistan"] = {wp = "%l, %c"}, ["Sindh, Pakistan"] = {}, } -- provinces and territories of Pakistan export.pakistan_group = { default_container = "Pakistan", default_placetype = "province", default_divs = "divisions", data = export.pakistan_provinces_and_territories, } export.philippines_provinces = { ["Abra, Philippines"] = {wp = "%l (province)"}, ["Agusan del Norte, Philippines"] = {}, ["Agusan del Sur, Philippines"] = {}, ["Aklan, Philippines"] = {}, ["Albay, Philippines"] = {}, ["Antique, Philippines"] = {wp = "%l (province)"}, ["Apayao, Philippines"] = {}, ["Aurora, Philippines"] = {wp = "%l (province)"}, ["Basilan, Philippines"] = {}, ["Bataan, Philippines"] = {}, ["Batanes, Philippines"] = {}, ["Batangas, Philippines"] = {}, ["Benguet, Philippines"] = {}, ["Biliran, Philippines"] = {}, ["Bohol, Philippines"] = {}, ["Bukidnon, Philippines"] = {}, ["Bulacan, Philippines"] = {}, ["Cagayan, Philippines"] = {}, ["Camarines Norte, Philippines"] = {}, ["Camarines Sur, Philippines"] = {}, ["Camiguin, Philippines"] = {}, ["Capiz, Philippines"] = {}, ["Catanduanes, Philippines"] = {}, ["Cavite, Philippines"] = {}, ["Cebu, Philippines"] = {}, ["Cotabato, Philippines"] = {}, ["Davao de Oro, Philippines"] = {}, ["Davao del Norte, Philippines"] = {}, ["Davao del Sur, Philippines"] = {}, ["Davao Occidental, Philippines"] = {}, ["Davao Oriental, Philippines"] = {}, ["Dinagat Islands, Philippines"] = {the = true}, ["Eastern Samar, Philippines"] = {}, ["Guimaras, Philippines"] = {}, ["Ifugao, Philippines"] = {}, ["Ilocos Norte, Philippines"] = {}, ["Ilocos Sur, Philippines"] = {}, ["Iloilo, Philippines"] = {}, ["Isabela, Philippines"] = {wp = "%l (province)"}, ["Kalinga, Philippines"] = {wp = "%l (province)"}, ["La Union, Philippines"] = {}, ["Laguna, Philippines"] = {wp = "%l (province)"}, ["Lanao del Norte, Philippines"] = {}, ["Lanao del Sur, Philippines"] = {}, ["Leyte, Philippines"] = {wp = "%l (province)"}, ["Maguindanao del Norte, Philippines"] = {}, ["Maguindanao del Sur, Philippines"] = {}, ["Marinduque, Philippines"] = {}, ["Masbate, Philippines"] = {}, ["Misamis Occidental, Philippines"] = {}, ["Misamis Oriental, Philippines"] = {}, ["Mountain Province, Philippines"] = {}, ["Negros Occidental, Philippines"] = {}, ["Negros Oriental, Philippines"] = {}, ["Northern Samar, Philippines"] = {}, ["Nueva Ecija, Philippines"] = {}, ["Nueva Vizcaya, Philippines"] = {}, ["Occidental Mindoro, Philippines"] = {}, ["Oriental Mindoro, Philippines"] = {}, ["Palawan, Philippines"] = {}, ["Pampanga, Philippines"] = {}, ["Pangasinan, Philippines"] = {}, ["Quezon, Philippines"] = {}, ["Quirino, Philippines"] = {}, ["Rizal, Philippines"] = {wp = "%l (province)"}, ["Romblon, Philippines"] = {}, ["Samar, Philippines"] = {wp = "%l (province)"}, ["Sarangani, Philippines"] = {}, ["Siquijor, Philippines"] = {}, ["Sorsogon, Philippines"] = {}, ["South Cotabato, Philippines"] = {}, ["Southern Leyte, Philippines"] = {}, ["Sultan Kudarat, Philippines"] = {}, ["Sulu, Philippines"] = {}, ["Surigao del Norte, Philippines"] = {}, ["Surigao del Sur, Philippines"] = {}, ["Tarlac, Philippines"] = {}, ["Tawi-Tawi, Philippines"] = {}, ["Zambales, Philippines"] = {}, ["Zamboanga del Norte, Philippines"] = {}, ["Zamboanga del Sur, Philippines"] = {}, ["Zamboanga Sibugay, Philippines"] = {}, -- not a province but treated as one; allow it to be referred to as a province in holonyms ["Metro Manila, Philippines"] = {placetype = {"region", "province"}}, } -- provinces of the Philippines export.philippines_group = { default_container = "Philippines", default_placetype = "province", default_divs = {"municipalities", "barangays"}, data = export.philippines_provinces, } export.poland_voivodeships = { ["Lower Silesian Voivodeship, Poland"] = {}, -- abbr DS, code 02, capital Wrocław ["Kuyavian-Pomeranian Voivodeship, Poland"] = {}, -- abbr KP, code 04, capital Bydgoszcz (seat of voivode), Toruń (seat of sejmik and marshal) ["Lublin Voivodeship, Poland"] = {}, -- abbr LU, code 06, capital Lublin ["Lubusz Voivodeship, Poland"] = {}, -- abbr LB, code 08, capital Gorzów Wielkopolski (seat of voivode), Zielona Góra (seat of sejmik and marshal) ["Lodz Voivodeship, Poland"] = {wp = "Łódź Voivodeship"}, -- abbr LD, code 10, capital Łódź ["Łódź Voivodeship, Poland"] = {alias_of = "Lodz Voivodeship, Poland", display = true, display_as_full = true}, ["Lesser Poland Voivodeship, Poland"] = {}, -- abbr MA, code 12, capital Kraków ["Masovian Voivodeship, Poland"] = {}, -- abbr MZ, code 14, capital Warsaw ["Opole Voivodeship, Poland"] = {}, -- abbr OP, code 16, capital Opole ["Subcarpathian Voivodeship, Poland"] = {}, -- abbr PK, code 18, capital Rzeszów ["Podlaskie Voivodeship, Poland"] = {}, -- abbr PD, code 20, capital Białystok ["Pomeranian Voivodeship, Poland"] = {}, -- abbr PM, code 22, capital Gdańsk ["Silesian Voivodeship, Poland"] = {}, -- abbr SL, code 24, capital Katowice ["Holy Cross Voivodeship, Poland"] = {wp = "Świętokrzyskie Voivodeship"}, -- abbr SK, code 26, capital Kielce ["Świętokrzyskie Voivodeship, Poland"] = {alias_of = "Holy Cross Voivodeship, Poland", display = true, display_as_full = true}, ["Warmian-Masurian Voivodeship, Poland"] = {}, -- abbr WN, code 28, capital Olsztyn ["Greater Poland Voivodeship, Poland"] = {}, -- abbr WP, code 30, capital Poznań ["West Pomeranian Voivodeship, Poland"] = {}, -- abbr ZP, code 32, capital Szczecin } -- voivodeships of Poland export.poland_group = { key_to_placename = make_key_to_placename(", Poland$", " Voivodeship$"), placename_to_key = make_placename_to_key(", Poland", " Voivodeship"), default_container = "Poland", default_placetype = "voivodeship", default_divs = { -- "counties", -- not enough of them currently {type = "Polish colonies", cat_as = {{type = "villages", prep = "in"}}}, }, data = export.poland_voivodeships, } export.portugal_districts_and_autonomous_regions = { ["Azores, Portugal"] = {the = true, placetype = {"autonomous region", "region"}}, ["Aveiro District, Portugal"] = {}, ["Beja District, Portugal"] = {}, ["Braga District, Portugal"] = {}, ["Bragança District, Portugal"] = {}, ["Castelo Branco District, Portugal"] = {}, ["Coimbra District, Portugal"] = {}, ["Évora District, Portugal"] = {}, ["Faro District, Portugal"] = {}, ["Guarda District, Portugal"] = {}, ["Leiria District, Portugal"] = {}, ["Lisbon District, Portugal"] = {}, ["Lisboa District, Portugal"] = {alias_of = "Lisbon District, Portugal", display = true}, ["Madeira, Portugal"] = {placetype = {"autonomous region", "region"}}, ["Portalegre District, Portugal"] = {}, ["Porto District, Portugal"] = {}, ["Santarém District, Portugal"] = {}, ["Setúbal District, Portugal"] = {}, ["Viana do Castelo District, Portugal"] = {}, ["Vila Real District, Portugal"] = {}, ["Viseu District, Portugal"] = {}, } local function portugal_placename_to_key(placename) if placename == "Azores" or placename == "Madeira" then return placename .. ", Portugal" end if placename:find(" District$") then return placename .. ", Portugal" end return placename .. " District, Portugal" end -- districts and autonomous regions of Portugal export.portugal_group = { key_to_placename = make_key_to_placename(", Portugal$", " District$"), placename_to_key = portugal_placename_to_key, default_container = "Portugal", default_placetype = "district", default_divs = "municipalities", data = export.portugal_districts_and_autonomous_regions, } export.romania_counties = { ["Alba County, Romania"] = {}, ["Arad County, Romania"] = {}, ["Argeș County, Romania"] = {}, ["Bacău County, Romania"] = {}, ["Bihor County, Romania"] = {}, ["Bistrița-Năsăud County, Romania"] = {}, ["Botoșani County, Romania"] = {}, ["Brașov County, Romania"] = {}, ["Brăila County, Romania"] = {}, -- Bucharest: not in a county ["Buzău County, Romania"] = {}, ["Caraș-Severin County, Romania"] = {}, ["Cluj County, Romania"] = {}, ["Constanța County, Romania"] = {}, ["Covasna County, Romania"] = {}, ["Călărași County, Romania"] = {}, ["Dolj County, Romania"] = {}, ["Dâmbovița County, Romania"] = {}, ["Galați County, Romania"] = {}, ["Giurgiu County, Romania"] = {}, ["Gorj County, Romania"] = {}, ["Harghita County, Romania"] = {}, ["Hunedoara County, Romania"] = {}, ["Ialomița County, Romania"] = {}, ["Iași County, Romania"] = {}, ["Ilfov County, Romania"] = {}, ["Maramureș County, Romania"] = {}, ["Mehedinți County, Romania"] = {}, ["Mureș County, Romania"] = {}, ["Neamț County, Romania"] = {}, ["Olt County, Romania"] = {}, ["Prahova County, Romania"] = {}, ["Satu Mare County, Romania"] = {}, ["Sibiu County, Romania"] = {}, ["Suceava County, Romania"] = {}, ["Sălaj County, Romania"] = {}, ["Teleorman County, Romania"] = {}, ["Timiș County, Romania"] = {}, ["Tulcea County, Romania"] = {}, ["Vaslui County, Romania"] = {}, ["Vrancea County, Romania"] = {}, ["Vâlcea County, Romania"] = {}, } -- counties of Romania export.romania_group = { key_to_placename = make_key_to_placename(", Romania$", " County$"), placename_to_key = make_placename_to_key(", Romania", " County"), default_container = "Romania", default_placetype = "county", default_divs = "communes", data = export.romania_counties, } local function make_russia_federal_subject_spec(spectype, use_the, wp) return { placetype = spectype, the = not not use_the, bare_category_parent_type = {"federal subjects", spectype .. "s"}, wp = wp, } end local russia_autonomous_okrug_no_the = {placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}} local russia_autonomous_okrug_the = {placetype = {"autonomous okrug", "okrug"}, bare_category_parent_type = {"federal subjects", "autonomous okrugs"}, the = true} local russia_krai = make_russia_federal_subject_spec("krai") local russia_oblast = make_russia_federal_subject_spec("oblast") local russia_republic_the = make_russia_federal_subject_spec("republic", "use the") local russia_republic_no_the = make_russia_federal_subject_spec("republic") export.russia_federal_subjects = { -- autonomous oblasts ["Jewish Autonomous Oblast, Russia"] = {the = true, placetype = {"autonomous oblast", "oblast"}, bare_category_parent_type = {"federal subjects", "autonomous oblasts"}}, -- autonomous okrugs ["Chukotka Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Chukotka, Russia"] = {alias_of = "Chukotka Autonomous Okrug, Russia"}, ["Khanty-Mansi Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Khanty-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Khantia-Mansia, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Yugra, Russia"] = {alias_of = "Khanty-Mansi Autonomous Okrug, Russia"}, ["Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Nenetsia, Russia"] = {alias_of = "Nenets Autonomous Okrug, Russia"}, ["Yamalo-Nenets Autonomous Okrug, Russia"] = russia_autonomous_okrug_the, ["Yamalia, Russia"] = {alias_of = "Yamalo-Nenets Autonomous Okrug, Russia"}, -- krais ["Altai Krai, Russia"] = russia_krai, ["Kamchatka Krai, Russia"] = russia_krai, ["Khabarovsk Krai, Russia"] = russia_krai, ["Krasnodar Krai, Russia"] = russia_krai, ["Krasnoyarsk Krai, Russia"] = russia_krai, ["Perm Krai, Russia"] = russia_krai, ["Primorsky Krai, Russia"] = russia_krai, ["Stavropol Krai, Russia"] = russia_krai, ["Zabaykalsky Krai, Russia"] = russia_krai, -- oblasts ["Amur Oblast, Russia"] = russia_oblast, ["Arkhangelsk Oblast, Russia"] = russia_oblast, ["Astrakhan Oblast, Russia"] = russia_oblast, ["Belgorod Oblast, Russia"] = russia_oblast, ["Bryansk Oblast, Russia"] = russia_oblast, ["Chelyabinsk Oblast, Russia"] = russia_oblast, ["Irkutsk Oblast, Russia"] = russia_oblast, ["Ivanovo Oblast, Russia"] = russia_oblast, ["Kaliningrad Oblast, Russia"] = russia_oblast, ["Kaluga Oblast, Russia"] = russia_oblast, ["Kemerovo Oblast, Russia"] = russia_oblast, ["Kirov Oblast, Russia"] = russia_oblast, ["Kostroma Oblast, Russia"] = russia_oblast, ["Kurgan Oblast, Russia"] = russia_oblast, ["Kursk Oblast, Russia"] = russia_oblast, ["Leningrad Oblast, Russia"] = russia_oblast, ["Lipetsk Oblast, Russia"] = russia_oblast, ["Magadan Oblast, Russia"] = russia_oblast, ["Moscow Oblast, Russia"] = russia_oblast, ["Murmansk Oblast, Russia"] = russia_oblast, ["Nizhny Novgorod Oblast, Russia"] = russia_oblast, ["Novgorod Oblast, Russia"] = russia_oblast, ["Novosibirsk Oblast, Russia"] = russia_oblast, ["Omsk Oblast, Russia"] = russia_oblast, ["Orenburg Oblast, Russia"] = russia_oblast, ["Oryol Oblast, Russia"] = russia_oblast, ["Penza Oblast, Russia"] = russia_oblast, ["Pskov Oblast, Russia"] = russia_oblast, ["Rostov Oblast, Russia"] = russia_oblast, ["Ryazan Oblast, Russia"] = russia_oblast, ["Sakhalin Oblast, Russia"] = russia_oblast, ["Samara Oblast, Russia"] = russia_oblast, ["Saratov Oblast, Russia"] = russia_oblast, ["Smolensk Oblast, Russia"] = russia_oblast, ["Sverdlovsk Oblast, Russia"] = russia_oblast, ["Tambov Oblast, Russia"] = russia_oblast, ["Tomsk Oblast, Russia"] = russia_oblast, ["Tula Oblast, Russia"] = russia_oblast, ["Tver Oblast, Russia"] = russia_oblast, ["Tyumen Oblast, Russia"] = russia_oblast, ["Ulyanovsk Oblast, Russia"] = russia_oblast, ["Vladimir Oblast, Russia"] = russia_oblast, ["Volgograd Oblast, Russia"] = russia_oblast, ["Vologda Oblast, Russia"] = russia_oblast, ["Voronezh Oblast, Russia"] = russia_oblast, ["Yaroslavl Oblast, Russia"] = russia_oblast, -- republics -- -- We only need to include cases that aren't just shortened versions of the full federal subject name (i.e. where -- words like "Republic" and "Oblast" are omitted but the name is not otherwise modified; these are handled by -- key_to_placename). Non-display-canonicalizing aliases are generally due to differences in the presence or absence -- of "the". ["Adygea, Russia"] = russia_republic_no_the, ["Republic of Adygea, Russia"] = {alias_of = "Adygea, Russia", the = true}, ["Bashkortostan, Russia"] = russia_republic_no_the, ["Republic of Bashkortostan, Russia"] = {alias_of = "Bashkortostan, Russia", the = true}, ["Bashkiria, Russia"] = {alias_of = "Bashkortostan, Russia"}, ["Buryatia, Russia"] = russia_republic_no_the, ["Republic of Buryatia, Russia"] = {alias_of = "Buryatia, Russia", the = true}, ["Dagestan, Russia"] = russia_republic_no_the, ["Republic of Dagestan, Russia"] = {alias_of = "Dagestan, Russia", the = true}, ["Ingushetia, Russia"] = russia_republic_no_the, ["Republic of Ingushetia, Russia"] = {alias_of = "Ingushetia, Russia", the = true}, ["Kalmykia, Russia"] = russia_republic_no_the, ["Republic of Kalmykia, Russia"] = {alias_of = "Kalmykia, Russia", the = true}, ["Karelia, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Karelia"), ["Republic of Karelia, Russia"] = {alias_of = "Karelia, Russia", the = true}, ["Khakassia, Russia"] = russia_republic_no_the, ["Republic of Khakassia, Russia"] = {alias_of = "Khakassia, Russia", the = true}, ["Mordovia, Russia"] = russia_republic_no_the, ["Republic of Mordovia, Russia"] = {alias_of = "Mordovia, Russia", the = true}, ["North Ossetia-Alania, Russia"] = make_russia_federal_subject_spec("republic", nil, "North Ossetia–Alania"), -- with en-dash ["Republic of North Ossetia-Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia", the = true}, ["North Ossetia, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true}, ["Alania, Russia"] = {alias_of = "North Ossetia-Alania, Russia", display = true}, ["Tatarstan, Russia"] = russia_republic_no_the, ["Republic of Tatarstan, Russia"] = {alias_of = "Tatarstan, Russia", the = true}, ["Altai Republic, Russia"] = russia_republic_the, ["Chechnya, Russia"] = russia_republic_no_the, ["Chechen Republic, Russia"] = {alias_of = "Chechnya, Russia", the = true}, ["Chuvashia, Russia"] = russia_republic_no_the, ["Chuvash Republic, Russia"] = {alias_of = "Chuvashia, Russia", the = true}, ["Kabardino-Balkaria, Russia"] = russia_republic_no_the, ["Kabardino-Balkariya, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = true}, ["Kabardino-Balkarian Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", the = true}, ["Kabardino-Balkar Republic, Russia"] = {alias_of = "Kabardino-Balkaria, Russia", display = "Kabardino-Balkarian Republic, Russia", the = true}, ["Karachay-Cherkessia, Russia"] = russia_republic_no_the, ["Karachay-Cherkess Republic, Russia"] = {alias_of = "Karachay-Cherkessia, Russia"}, ["Komi, Russia"] = make_russia_federal_subject_spec("republic", nil, "Komi Republic"), ["Komi Republic, Russia"] = {alias_of = "Komi, Russia", the = true}, ["Mari El, Russia"] = russia_republic_no_the, ["Mari El Republic, Russia"] = {alias_of = "Mari El, Russia", the = true}, ["Sakha, Russia"] = make_russia_federal_subject_spec("republic", nil, "Sakha Republic"), ["Sakha Republic, Russia"] = {alias_of = "Sakha, Russia", the = true}, ["Yakutia, Russia"] = {alias_of = "Sakha, Russia"}, ["Yakutiya, Russia"] = {alias_of = "Sakha, Russia", display = "Yakutia, Russia"}, ["Republic of Yakutia (Sakha), Russia"] = {alias_of = "Sakha, Russia", display = "Sakha Republic, Russia", the = true}, ["Tuva, Russia"] = russia_republic_no_the, ["Tyva, Russia"] = {alias_of = "Tuva, Russia", display = true}, ["Tuva Republic, Russia"] = {alias_of = "Tuva, Russia", the = true}, ["Tyva Republic, Russia"] = {alias_of = "Tuva, Russia", display= "Tuva Republic, Russia", the = true}, ["Udmurtia, Russia"] = russia_republic_no_the, ["Udmurt Republic, Russia"] = {alias_of = "Udmurtia, Russia", the = true}, -- Not included due to being unrecognized and only partly controlled: -- ["Crimea, Russia"] = make_russia_federal_subject_spec("republic", nil, "Republic of Crimea (Russia)") -- ["Donetsk People's Republic, Russia"] = russia_republic_the, -- ["Luhansk People's Republic, Russia"] = russia_republic_the, -- ["Zaporozhye Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Zaporizhzhia Oblast"), -- ["Kherson Oblast, Russia"] = make_russia_federal_subject_spec("oblast", nil, "Russian occupation of Kherson Oblast"), -- There are also federal cities (not included because they're cities): -- Moscow, Saint Petersburg; Sevastopol (unrecognized; same status as for "Crimea, Russia" above) } local function russia_key_to_placename(key) key = key:gsub(",.*", "") local full_placename = key if key == "Jewish Autonomous Oblast" then return full_placename, full_placename end local elliptical_placename for _, suffix in ipairs({"Krai", "Oblast"}) do elliptical_placename = key:match("^(.*) " .. suffix .. "$") if elliptical_placename then return full_placename, elliptical_placename end end return full_placename, full_placename end local function russia_placename_to_key(placename) local key = placename .. ", Russia" if export.russia_federal_subjects[key] then return key end -- We allow the user to say e.g. "obl/Samara" in place of "obl/Samara Oblast". for _, suffix in ipairs({"Krai", "Oblast"}) do local suffixed_key = placename .. " " .. suffix .. ", Russia" if export.russia_federal_subjects[suffixed_key] then return suffixed_key end end return placename .. ", Russia" end local function construct_russia_federal_subject_keydesc(group, key, spec) local placename = key:gsub(",.*", "") local linked_placename = export.construct_linked_placename(spec, placename) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if placetype == "oblast" then -- Hack: Oblasts generally don't have entries under "Foo Oblast" -- but just under "Foo", so fix the linked key appropriately; -- doesn't apply to the Jewish Autonomous Oblast linked_placename = linked_placename:gsub(" Oblast%]%]", "%]%] Oblast") end return linked_placename .. ", a [[federal subject]] ([[" .. placetype .. "]]) of [[Russia]]" end -- federal subjects of Russia export.russia_group = { key_to_placename = russia_key_to_placename, placename_to_key = russia_placename_to_key, default_container = "Russia", default_keydesc = construct_russia_federal_subject_keydesc, default_overriding_bare_label_parents = {"federal subjects of Russia", "+++"}, data = export.russia_federal_subjects, } export.saudi_arabia_provinces = { ["Riyadh Province, Saudi Arabia"] = {}, ["Mecca Province, Saudi Arabia"] = {}, -- Name is too generic to assume it's in Saudi Arabia if not specified. ["Eastern Province, Saudi Arabia"] = {no_auto_augment_container = true, wp = "%l, %c"}, ["Medina Province, Saudi Arabia"] = {wp = "%l (%c)"}, ["Aseer Province, Saudi Arabia"] = {wp = "Asir"}, ["Asir Province, Saudi Arabia"] = {alias_of = "Aseer Province, Saudi Arabia", display = true}, ["Jazan Province, Saudi Arabia"] = {}, ["Qassim Province, Saudi Arabia"] = {wp = "Al-Qassim Province"}, ["Al-Qassim Province, Saudi Arabia"] = {alias_of = "Qassim Province, Saudi Arabia", display = true}, ["Tabuk Province, Saudi Arabia"] = {}, ["Hail Province, Saudi Arabia"] = {wp = "Ḥa'il Province"}, ["Ha'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true}, ["Ḥa'il Province, Saudi Arabia"] = {alias_of = "Hail Province, Saudi Arabia", display = true}, ["Al-Jouf Province, Saudi Arabia"] = {wp = "Al-Jawf Province"}, ["Al-Jawf Province, Saudi Arabia"] = {alias_of = "Al-Jouf Province, Saudi Arabia", display = true}, ["Najran Province, Saudi Arabia"] = {}, ["Northern Borders Province, Saudi Arabia"] = {}, ["Al-Bahah Province, Saudi Arabia"] = {}, } -- provinces of Saudi Arabia export.saudi_arabia_group = { key_to_placename = make_key_to_placename(", Saudi Arabia$", " Province$"), placename_to_key = make_placename_to_key(", Saudi Arabia", " Province"), default_container = "Saudi Arabia", default_placetype = "province", data = export.saudi_arabia_provinces, } export.south_africa_provinces = { ["Eastern Cape, South Africa"] = {the = true}, ["Free State, South Africa"] = {the = true, wp = "%l (province)"}, ["Gauteng, South Africa"] = {}, ["KwaZulu-Natal, South Africa"] = {}, ["Limpopo, South Africa"] = {}, ["Mpumalanga, South Africa"] = {}, -- per Wikipedia and other sources, `North West` doesn't normally have `the` before it ["North West, South Africa"] = {wp = "%l (South African province)"}, ["Northern Cape, South Africa"] = {the = true}, ["Western Cape, South Africa"] = {the = true}, } -- provinces of South Africa export.south_africa_group = { default_container = "South Africa", default_placetype = "province", default_divs = "municipalities", data = export.south_africa_provinces, } export.south_korea_provinces = { ["North Chungcheong Province, South Korea"] = {}, ["South Chungcheong Province, South Korea"] = {}, ["Gangwon Province, South Korea"] = {wp = "%l, %c"}, ["Gyeonggi Province, South Korea"] = {}, ["North Gyeongsang Province, South Korea"] = {}, ["South Gyeongsang Province, South Korea"] = {}, ["North Jeolla Province, South Korea"] = {}, ["South Jeolla Province, South Korea"] = {}, ["Jeju Province, South Korea"] = {}, } -- provinces of South Korea export.south_korea_group = { key_to_placename = make_key_to_placename(", South Korea$", " Province$"), placename_to_key = make_placename_to_key(", South Korea", " Province"), default_container = "South Korea", default_placetype = "province", data = export.south_korea_provinces, } export.spain_autonomous_communities = { ["Andalusia, Spain"] = {}, ["Aragon, Spain"] = {}, ["Asturias, Spain"] = {}, ["Balearic Islands, Spain"] = {the = true}, ["Basque Country, Spain"] = {the = true, wp = "%l (autonomous community)"}, ["Canary Islands, Spain"] = {the = true}, ["Cantabria, Spain"] = {}, ["Castile and León, Spain"] = {}, ["Castilla-La Mancha, Spain"] = {wp = "Castilla–La Mancha"}, -- with en-dash ["Catalonia, Spain"] = {}, ["Community of Madrid, Spain"] = {the = true}, ["Extremadura, Spain"] = {}, ["Galicia, Spain"] = {wp = "%l (Spain)"}, ["La Rioja, Spain"] = {}, ["Murcia, Spain"] = {wp = "Region of %l"}, ["Navarre, Spain"] = {}, ["Valencia, Spain"] = {wp = "Valencian Community"}, ["Valencian Community, Spain"] = {alias_of = "Valencia, Spain", the = true}, } -- autonomous communities of Spain export.spain_group = { default_container = "Spain", default_placetype = "autonomous community", default_divs = {"municipalities", "comarcas"}, data = export.spain_autonomous_communities, } export.taiwan_counties = { ["Changhua County, Taiwan"] = {}, ["Chiayi County, Taiwan"] = {}, ["Hsinchu County, Taiwan"] = {}, ["Hualien County, Taiwan"] = {}, ["Kinmen County, Taiwan"] = {wp = "Kinmen"}, ["Lienchiang County, Taiwan"] = {wp = "Matsu Islands"}, ["Miaoli County, Taiwan"] = {}, ["Nantou County, Taiwan"] = {}, ["Penghu County, Taiwan"] = {wp = "Penghu"}, ["Pingtung County, Taiwan"] = {}, ["Taitung County, Taiwan"] = {}, ["Yilan County, Taiwan"] = {wp = "%l, %c"}, ["Yunlin County, Taiwan"] = {}, } -- counties of Taiwan export.taiwan_group = { key_to_placename = make_key_to_placename(", Taiwan$", " County$"), placename_to_key = make_placename_to_key(", Taiwan", " County"), default_container = "Taiwan", default_placetype = "county", default_divs = {"districts", "townships"}, data = export.taiwan_counties, } export.thailand_provinces = { -- Bangkok (special administrative area) ["Amnat Charoen Province, Thailand"] = {}, ["Ang Thong Province, Thailand"] = {}, ["Bueng Kan Province, Thailand"] = {}, ["Buriram Province, Thailand"] = {}, ["Chachoengsao Province, Thailand"] = {}, ["Chai Nat Province, Thailand"] = {}, ["Chaiyaphum Province, Thailand"] = {}, ["Chanthaburi Province, Thailand"] = {}, ["Chiang Mai Province, Thailand"] = {}, ["Chiang Rai Province, Thailand"] = {}, ["Chonburi Province, Thailand"] = {}, ["Chumphon Province, Thailand"] = {}, ["Kalasin Province, Thailand"] = {}, ["Kamphaeng Phet Province, Thailand"] = {}, ["Kanchanaburi Province, Thailand"] = {}, ["Khon Kaen Province, Thailand"] = {}, ["Krabi Province, Thailand"] = {}, ["Lampang Province, Thailand"] = {}, ["Lamphun Province, Thailand"] = {}, ["Loei Province, Thailand"] = {}, ["Lopburi Province, Thailand"] = {}, ["Mae Hong Son Province, Thailand"] = {}, ["Maha Sarakham Province, Thailand"] = {}, ["Mukdahan Province, Thailand"] = {}, ["Nakhon Nayok Province, Thailand"] = {}, ["Nakhon Pathom Province, Thailand"] = {}, ["Nakhon Phanom Province, Thailand"] = {}, ["Nakhon Ratchasima Province, Thailand"] = {}, ["Nakhon Sawon Province, Thailand"] = {}, ["Nakhon Si Thammarat Province, Thailand"] = {}, ["Nan Province, Thailand"] = {}, ["Narathiwat Province, Thailand"] = {}, ["Nong Bua Lamphu Province, Thailand"] = {}, ["Nong Khai Province, Thailand"] = {}, ["Nonthaburi Province, Thailand"] = {}, ["Pathum Thani Province, Thailand"] = {}, ["Pattani Province, Thailand"] = {}, ["Phang Nga Province, Thailand"] = {}, ["Phatthalung Province, Thailand"] = {}, ["Phayao Province, Thailand"] = {}, ["Phetchabun Province, Thailand"] = {}, ["Phetchaburi Province, Thailand"] = {}, ["Phichit Province, Thailand"] = {}, ["Phitsanulok Province, Thailand"] = {}, ["Phra Nakhon Si Ayutthaya Province, Thailand"] = {}, ["Phrae Province, Thailand"] = {}, ["Phuket Province, Thailand"] = {}, ["Prachinburi Province, Thailand"] = {}, ["Prachuap Khiri Khan Province, Thailand"] = {}, ["Ranong Province, Thailand"] = {}, ["Ratchaburi Province, Thailand"] = {}, ["Rayong Province, Thailand"] = {}, ["Roi Et Province, Thailand"] = {}, ["Sa Kaeo Province, Thailand"] = {}, ["Sakon Nakhon Province, Thailand"] = {}, ["Samut Prakan Province, Thailand"] = {}, ["Samut Sakhon Province, Thailand"] = {}, ["Samut Songkhram Province, Thailand"] = {}, ["Saraburi Province, Thailand"] = {}, ["Satun Province, Thailand"] = {}, ["Sing Buri Province, Thailand"] = {}, ["Sisaket Province, Thailand"] = {}, ["Songkhla Province, Thailand"] = {}, ["Sukhothai Province, Thailand"] = {}, ["Suphan Buri Province, Thailand"] = {}, ["Surat Thani Province, Thailand"] = {}, ["Surin Province, Thailand"] = {}, ["Tak Province, Thailand"] = {}, ["Trang Province, Thailand"] = {}, ["Trat Province, Thailand"] = {}, ["Ubon Ratchathani Province, Thailand"] = {}, ["Udon Thani Province, Thailand"] = {}, ["Uthai Thani Province, Thailand"] = {}, ["Uttaradit Province, Thailand"] = {}, ["Yala Province, Thailand"] = {}, ["Yasothon Province, Thailand"] = {}, } -- provinces of Thailand export.thailand_group = { key_to_placename = make_key_to_placename(", Thailand$", " Province$"), placename_to_key = make_placename_to_key(", Thailand", " Province"), default_container = "Thailand", default_placetype = "province", default_divs = "districts", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.thailand_provinces, } export.turkey_provinces = { ["Adana Province, Turkey"] = {}, -- code 01 ["Adıyaman Province, Turkey"] = {}, -- code 02 ["Afyonkarahisar Province, Turkey"] = {}, -- code 03 ["Ağrı Province, Turkey"] = {}, -- code 04 ["Amasya Province, Turkey"] = {}, -- code 05 ["Ankara Province, Turkey"] = {}, -- code 06 ["Antalya Province, Turkey"] = {}, -- code 07 ["Artvin Province, Turkey"] = {}, -- code 08 ["Aydın Province, Turkey"] = {}, -- code 09 ["Balıkesir Province, Turkey"] = {}, -- code 10 ["Bilecik Province, Turkey"] = {}, -- code 11 ["Bingöl Province, Turkey"] = {}, -- code 12 ["Bitlis Province, Turkey"] = {}, -- code 13 ["Bolu Province, Turkey"] = {}, -- code 14 ["Burdur Province, Turkey"] = {}, -- code 15 ["Bursa Province, Turkey"] = {}, -- code 16 ["Çanakkale Province, Turkey"] = {}, -- code 17 ["Çankırı Province, Turkey"] = {}, -- code 18 ["Çorum Province, Turkey"] = {}, -- code 19 ["Denizli Province, Turkey"] = {}, -- code 20 ["Diyarbakır Province, Turkey"] = {}, -- code 21 ["Edirne Province, Turkey"] = {}, -- code 22 ["Elazığ Province, Turkey"] = {}, -- code 23 ["Elâzığ Province, Turkey"] = {alias_of = "Elazığ Province, Turkey", display = true}, ["Erzincan Province, Turkey"] = {}, -- code 24 ["Erzurum Province, Turkey"] = {}, -- code 25 ["Eskişehir Province, Turkey"] = {}, -- code 26 ["Gaziantep Province, Turkey"] = {}, -- code 27 ["Giresun Province, Turkey"] = {}, -- code 28 ["Gümüşhane Province, Turkey"] = {}, -- code 29 ["Hakkâri Province, Turkey"] = {}, -- code 30 ["Hakkari Province, Turkey"] = {alias_of = "Hakkâri Province, Turkey", display = true}, ["Hatay Province, Turkey"] = {}, -- code 31 ["Isparta Province, Turkey"] = {}, -- code 32 ["Mersin Province, Turkey"] = {}, -- code 33 -- ["Istanbul Province, Turkey"] = {}, -- code 34; this is coextensive with the city itself ["İzmir Province, Turkey"] = {}, -- code 35 ["Izmir Province, Turkey"] = {alias_of = "İzmir Province, Turkey", display = true}, ["Kars Province, Turkey"] = {}, -- code 36 ["Kastamonu Province, Turkey"] = {}, -- code 37 ["Kayseri Province, Turkey"] = {}, -- code 38 ["Kırklareli Province, Turkey"] = {}, -- code 39 ["Kırşehir Province, Turkey"] = {}, -- code 40 ["Kocaeli Province, Turkey"] = {}, -- code 41 ["Konya Province, Turkey"] = {}, -- code 42 ["Kütahya Province, Turkey"] = {}, -- code 43 ["Malatya Province, Turkey"] = {}, -- code 44 ["Manisa Province, Turkey"] = {}, -- code 45 ["Kahramanmaraş Province, Turkey"] = {}, -- code 46 ["Mardin Province, Turkey"] = {}, -- code 47 ["Muğla Province, Turkey"] = {}, -- code 48 ["Muş Province, Turkey"] = {}, -- code 49 ["Nevşehir Province, Turkey"] = {}, -- code 50 ["Niğde Province, Turkey"] = {}, -- code 51 ["Ordu Province, Turkey"] = {}, -- code 52 ["Rize Province, Turkey"] = {}, -- code 53 ["Sakarya Province, Turkey"] = {}, -- code 54 ["Samsun Province, Turkey"] = {}, -- code 55 ["Siirt Province, Turkey"] = {}, -- code 56 ["Sinop Province, Turkey"] = {}, -- code 57 ["Sivas Province, Turkey"] = {}, -- code 58 ["Tekirdağ Province, Turkey"] = {}, -- code 59 ["Tokat Province, Turkey"] = {}, -- code 60 ["Trabzon Province, Turkey"] = {}, -- code 61 ["Tunceli Province, Turkey"] = {}, -- code 62 ["Şanlıurfa Province, Turkey"] = {}, -- code 63 ["Uşak Province, Turkey"] = {}, -- code 64 ["Van Province, Turkey"] = {}, -- code 65 ["Yozgat Province, Turkey"] = {}, -- code 66 ["Zonguldak Province, Turkey"] = {}, -- code 67 ["Aksaray Province, Turkey"] = {}, -- code 68 ["Bayburt Province, Turkey"] = {}, -- code 69 ["Karaman Province, Turkey"] = {}, -- code 70 ["Kırıkkale Province, Turkey"] = {}, -- code 71 ["Batman Province, Turkey"] = {}, -- code 72 ["Şırnak Province, Turkey"] = {}, -- code 73 ["Bartın Province, Turkey"] = {}, -- code 74 ["Ardahan Province, Turkey"] = {}, -- code 75 ["Iğdır Province, Turkey"] = {}, -- code 76 ["Yalova Province, Turkey"] = {}, -- code 77 ["Karabük Province, Turkey"] = {}, -- code 78 ["Kilis Province, Turkey"] = {}, -- code 79 ["Osmaniye Province, Turkey"] = {}, -- code 80 ["Düzce Province, Turkey"] = {}, -- code 81 } -- provinces of Turkey export.turkey_group = { key_to_placename = make_key_to_placename(", Turkey$", " Province$"), placename_to_key = make_placename_to_key(", Turkey", " Province"), default_container = "Turkey", default_placetype = "province", default_divs = "districts", data = export.turkey_provinces, } export.ukraine_oblasts = { ["Cherkasy Oblast, Ukraine"] = {}, -- capital [[Cherkasy]], license plate prefix CA, IA ["Chernihiv Oblast, Ukraine"] = {}, -- capital [[Chernihiv]], license plate prefix CB, IB ["Chernivtsi Oblast, Ukraine"] = {}, -- capital [[Chernivtsi]], license plate prefix CE, IE -- apparently will be renamed to 'Dnipro Oblast' ["Dnipropetrovsk Oblast, Ukraine"] = {}, -- capital [[Dnipro]], license plate prefix AE, KE ["Donetsk Oblast, Ukraine"] = {}, -- capital ''[[Donetsk]] ([[Kramatorsk]])'', license plate prefix AH, KH ["Ivano-Frankivsk Oblast, Ukraine"] = {}, -- capital [[Ivano-Frankivsk]], license plate prefix AT, KT ["Kharkiv Oblast, Ukraine"] = {}, -- capital [[Kharkiv]], license plate prefix AX, KX ["Kherson Oblast, Ukraine"] = {}, -- capital ''[[Kherson]]'', license plate prefix ''BT, HT'' ["Khmelnytskyi Oblast, Ukraine"] = {}, -- capital [[Khmelnytskyi]], license plate prefix BX, HX -- apparently will be renamed to 'Kropyvnytskyi Oblast' ["Kirovohrad Oblast, Ukraine"] = {}, -- capital [[Kropyvnytskyi]], license plate prefix BA, HA ["Kyiv Oblast, Ukraine"] = {}, -- capital [[Kyiv]], license plate prefix AI, KI ["Kiev Oblast, Ukraine"] = {alias_of = "Kyiv Oblast, Ukraine", display = true}, ["Luhansk Oblast, Ukraine"] = {}, -- capital ''[[Luhansk]] ([[Sievierodonetsk]])'', license plate prefix BB, HB ["Lviv Oblast, Ukraine"] = {}, -- capital [[Lviv]], license plate prefix BC, HC ["Mykolaiv Oblast, Ukraine"] = {}, -- capital [[Mykolaiv]], license plate prefix BE, HE ["Odesa Oblast, Ukraine"] = {}, -- capital [[Odesa]], license plate prefix BH, HH ["Odessa Oblast, Ukraine"] = {alias_of = "Odesa Oblast, Ukraine", display = true}, ["Poltava Oblast, Ukraine"] = {}, -- capital [[Poltava]], license plate prefix BI, HI ["Rivne Oblast, Ukraine"] = {}, -- capital [[Rivne]], license plate prefix BK, HK ["Sumy Oblast, Ukraine"] = {}, -- capital [[Sumy]], license plate prefix BM, HM ["Ternopil Oblast, Ukraine"] = {}, -- capital [[Ternopil]], license plate prefix BO, HO ["Vinnytsia Oblast, Ukraine"] = {}, -- capital [[Vinnytsia]], license plate prefix AB, KB ["Volyn Oblast, Ukraine"] = {}, -- capital [[Lutsk]], license plate prefix AC, KC ["Zakarpattia Oblast, Ukraine"] = {}, -- capital [[Uzhhorod]], license plate prefix AO, KO ["Zaporizhzhia Oblast, Ukraine"] = {}, -- capital ''[[Zaporizhzhia]]'', license plate prefix AP, KP ["Zaporizhia Oblast, Ukraine"] = {alias_of = "Zaporizhzhia Oblast, Ukraine", display = true}, ["Zhytomyr Oblast, Ukraine"] = {}, -- capital [[Zhytomyr]], license plate prefix AM, KM } -- oblasts of Ukraine export.ukraine_group = { key_to_placename = make_key_to_placename(", Ukraine$", " Oblast$"), placename_to_key = make_placename_to_key(", Ukraine", " Oblast"), default_container = "Ukraine", default_placetype = "oblast", default_divs = {"raions", "hromadas"}, data = export.ukraine_oblasts, } export.united_kingdom_constituent_countries = { ["England"] = {divs = { "counties", "districts", {type = "local government districts", cat_as = "districts"}, { type = "local government districts with borough status", cat_as = {"districts", "boroughs"}, }, {type = "boroughs", cat_as = {"districts", "boroughs"}}, {type = "civil parishes", container_parent_type = false}, }}, ["Northern Ireland"] = { placetype = {"constituent country", "province", "quốc gia"}, divs = {"counties", "districts"}, }, ["Scotland"] = {divs = { {type = "council areas", container_parent_type = false}, "districts", }}, ["Wales"] = {divs = { "counties", {type = "county boroughs", container_parent_type = false}, {type = "communities", container_parent_type = false}, {type = "Welsh communities", cat_as = {{type = "communities", container_parent_type = false}}}, }}, } -- constituent countries and provinces of the United Kingdom export.united_kingdom_group = { placename_to_key = false, default_container = "United Kingdom", default_placetype = {"constituent country", "quốc gia"}, addl_divs = { "traditional counties", {type = "historical counties", cat_as = "traditional counties"}, }, -- Don't create categories like 'Category:en:Towns in the United Kingdom' -- or 'Category:en:Places in the United Kingdom'. default_no_container_cat = true, data = export.united_kingdom_constituent_countries, } export.england_counties = { -- NOTE: We used to have various other "no longer" counties commented out, which seems to refer to counties that -- existed officially at some point between 1889 and 1974, which I have removed. I have only kept the three -- ceremonial counties that existed from 1974 (when ceremonial counties were created) to 1996, as well as those -- still considered "historic counties" per [[w:Historic counties of England]]. -- ["Avon, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996) ["Bedfordshire, England"] = {}, ["Berkshire, England"] = {}, -- ["Brighton and Hove, England"] = {}, -- city -- ["Bristol, England"] = {}, -- city ["Buckinghamshire, England"] = {}, ["Cambridgeshire, England"] = {}, ["Cheshire, England"] = {}, -- ["Cleveland, England"] = {wp = "%l (county)"}, -- no longer (1974 to 1996) ["Cornwall, England"] = {}, -- ["Cumberland, England"] = {}, -- no longer (historic county) ["Cumbria, England"] = {}, ["Derbyshire, England"] = {}, ["Devon, England"] = {}, ["Dorset, England"] = {}, ["County Durham, England"] = {}, ["East Sussex, England"] = {}, ["Essex, England"] = {}, ["Gloucestershire, England"] = {}, ["Greater London, England"] = {}, ["Greater Manchester, England"] = {}, ["Hampshire, England"] = {}, ["Herefordshire, England"] = {}, ["Hertfordshire, England"] = {}, -- ["Humberside, England"] = {}, -- no longer (1974 to 1996) -- ["Huntingdonshire, England"] = {}, -- no longer (historic county) ["Isle of Wight, England"] = {the = true}, ["Kent, England"] = {}, ["Lancashire, England"] = {}, ["Leicestershire, England"] = {}, ["Lincolnshire, England"] = {}, ["Merseyside, England"] = {}, -- ["Middlesex, England"] = {}, -- no longer (historic county) ["Norfolk, England"] = {}, ["Northamptonshire, England"] = {}, ["Northumberland, England"] = {}, ["North Yorkshire, England"] = {}, ["Nottinghamshire, England"] = {}, ["Oxfordshire, England"] = {}, ["Rutland, England"] = {}, ["Shropshire, England"] = {}, ["Somerset, England"] = {}, ["South Humberside, England"] = {}, ["South Yorkshire, England"] = {}, ["Staffordshire, England"] = {}, ["Suffolk, England"] = {}, ["Surrey, England"] = {}, -- ["Sussex, England"] = {}, -- no longer (historic county) ["Tyne and Wear, England"] = {}, ["Warwickshire, England"] = {}, ["West Midlands, England"] = {the = true, wp = "%l (county)"}, -- ["Westmorland, England"] = {}, -- no longer (historic county) ["West Sussex, England"] = {}, ["West Yorkshire, England"] = {}, ["Wiltshire, England"] = {}, ["Worcestershire, England"] = {}, -- ["Yorkshire, England"] = {}, -- no longer (historic county) ["East Riding of Yorkshire, England"] = {the = true}, } -- counties of England export.england_group = { default_container = {key = "England", placetype = "constituent country"}, default_placetype = "county", default_divs = { "districts", {type = "local government districts", cat_as = "districts"}, { type = "local government districts with borough status", cat_as = {"districts", "boroughs"}, }, {type = "boroughs", cat_as = {"districts", "boroughs"}}, "civil parishes", }, data = export.england_counties, } export.northern_ireland_counties = { ["County Antrim, Northern Ireland"] = {}, ["County Armagh, Northern Ireland"] = {}, ["City of Belfast, Northern Ireland"] = {the = true, is_city = true, wp = "Belfast"}, ["County Down, Northern Ireland"] = {}, ["County Fermanagh, Northern Ireland"] = {}, ["County Londonderry, Northern Ireland"] = {}, ["City of Derry, Northern Ireland"] = {the = true, is_city = true, wp = "Derry"}, ["County Tyrone, Northern Ireland"] = {}, } -- counties of Northern Ireland export.northern_ireland_group = { key_to_placename = make_irish_type_key_to_placename(", Northern Ireland$"), placename_to_key = make_irish_type_placename_to_key(", Northern Ireland"), default_container = {key = "Northern Ireland", placetype = "constituent country"}, default_placetype = "county", data = export.northern_ireland_counties, } export.scotland_council_areas = { ["Aberdeenshire, Scotland"] = {}, ["Angus, Scotland"] = {wp = "%l, %c"}, ["Argyll and Bute, Scotland"] = {}, ["City of Aberdeen, Scotland"] = {the = true, wp = "Aberdeen"}, ["Aberdeen"] = {alias_of = "City of Aberdeen, Scotland"}, ["Aberdeen City"] = {alias_of = "City of Aberdeen, Scotland"}, ["City of Dundee, Scotland"] = {the = true, wp = "Dundee"}, ["Dundee"] = {alias_of = "City of Dundee, Scotland"}, ["Dundee City"] = {alias_of = "City of Dundee, Scotland"}, ["City of Edinburgh, Scotland"] = {the = true, wp = "%l council area"}, ["Edinburgh"] = {alias_of = "City of Edinburgh, Scotland"}, ["City of Glasgow, Scotland"] = {the = true, wp = "Glasgow"}, ["Glasgow"] = {alias_of = "City of Glasgow, Scotland"}, ["Clackmannanshire, Scotland"] = {}, ["Dumfries and Galloway, Scotland"] = {}, ["East Ayrshire, Scotland"] = {}, ["East Dunbartonshire, Scotland"] = {}, ["East Lothian, Scotland"] = {}, ["East Renfrewshire, Scotland"] = {}, ["Falkirk, Scotland"] = {wp = "%l council area"}, ["Fife, Scotland"] = {}, ["Highland, Scotland"] = {wp = "%l council area"}, ["Inverclyde, Scotland"] = {}, ["Midlothian, Scotland"] = {}, ["Moray, Scotland"] = {}, ["North Ayrshire, Scotland"] = {}, ["North Lanarkshire, Scotland"] = {}, ["Orkney Islands, Scotland"] = {the = true}, ["Perth and Kinross, Scotland"] = {}, ["Renfrewshire, Scotland"] = {}, ["Scottish Borders, Scotland"] = {the = true}, ["Shetland Islands, Scotland"] = {the = true}, ["South Ayrshire, Scotland"] = {}, ["South Lanarkshire, Scotland"] = {}, ["Stirling, Scotland"] = {wp = "%l council area"}, ["West Dunbartonshire, Scotland"] = {}, ["West Lothian, Scotland"] = {}, ["Western Isles, Scotland"] = {the = true, wp = "Outer Hebrides"}, ["Na h-Eileanan Siar, Scotland"] = {alias_of = "Western Isles, Scotland"}, } -- council areas of Scotland export.scotland_group = { default_container = {key = "Scotland", placetype = "constituent country"}, default_placetype = "council area", data = export.scotland_council_areas, } export.wales_principal_areas = { ["Blaenau Gwent, Wales"] = {}, ["Bridgend, Wales"] = {wp = "%l County Borough"}, ["Caerphilly, Wales"] = {wp = "%l County Borough"}, -- ["Cardiff, Wales"] = {placetype = "city"}, ["Carmarthenshire, Wales"] = {placetype = "county"}, ["Ceredigion, Wales"] = {placetype = "county"}, ["Conwy, Wales"] = {wp = "%l County Borough"}, ["Denbighshire, Wales"] = {placetype = "county"}, ["Flintshire, Wales"] = {placetype = "county"}, ["Gwynedd, Wales"] = {placetype = "county"}, ["Isle of Anglesey, Wales"] = {the = true, placetype = "county"}, ["Anglesey, Wales"] = {alias_of = "Isle of Anglesey, Wales"}, -- differs in "the" ["Merthyr Tydfil, Wales"] = {wp = "%l County Borough"}, ["Monmouthshire, Wales"] = {placetype = "county"}, ["Neath Port Talbot, Wales"] = {}, -- ["Newport, Wales"] = {placetype = "city", wp = "%l, %c"}, ["Pembrokeshire, Wales"] = {placetype = "county"}, ["Powys, Wales"] = {placetype = "county"}, ["Rhondda Cynon Taf, Wales"] = {}, -- ["Swansea, Wales"] = {placetype = "city"}, ["Torfaen, Wales"] = {}, ["Vale of Glamorgan, Wales"] = {the = true}, ["Wrexham, Wales"] = {wp = "%l County Borough"}, } -- principal areas (cities, counties and county boroughs) of Wales export.wales_group = { default_container = {key = "Wales", placetype = "constituent country"}, default_placetype = "county borough", data = export.wales_principal_areas, } export.united_states_states = { ["Alabama, USA"] = {}, ["Alaska, USA"] = {divs = { {type = "boroughs", container_parent_type = "counties"}, {type = "borough seats", container_parent_type = "county seats"}, }}, ["Arizona, USA"] = {}, ["Arkansas, USA"] = {}, ["California, USA"] = {}, ["Colorado, USA"] = {divs = {"counties", "county seats", "municipalities"}}, ["Connecticut, USA"] = {divs = {"counties", "county seats", "municipalities"}}, ["Delaware, USA"] = {}, ["Florida, USA"] = {}, ["Georgia, USA"] = {wp = "%l (U.S. state)"}, ["Hawaii, USA"] = {addl_parents = {"Polynesia"}}, ["Idaho, USA"] = {}, ["Illinois, USA"] = {}, ["Indiana, USA"] = {}, ["Iowa, USA"] = {}, ["Kansas, USA"] = {}, ["Kentucky, USA"] = {}, ["Louisiana, USA"] = {divs = { {type = "parishes", container_parent_type = "counties"}, {type = "parish seats", container_parent_type = "county seats"}, }}, ["Maine, USA"] = {}, ["Maryland, USA"] = {}, ["Massachusetts, USA"] = {}, ["Michigan, USA"] = {}, ["Minnesota, USA"] = {}, ["Mississippi, USA"] = {}, ["Missouri, USA"] = {}, ["Montana, USA"] = {}, ["Nebraska, USA"] = {}, ["Nevada, USA"] = {}, ["New Hampshire, USA"] = {}, ["New Jersey, USA"] = {divs = { "counties", "county seats", {type = "boroughs", prep = "in"}, }}, ["New Mexico, USA"] = {}, ["New York, USA"] = {wp = "%l (state)"}, ["North Carolina, USA"] = {}, ["North Dakota, USA"] = {}, ["Ohio, USA"] = {}, ["Oklahoma, USA"] = {}, ["Oregon, USA"] = {}, ["Pennsylvania, USA"] = {divs = { "counties", "county seats", {type = "boroughs", prep = "in"}, }}, ["Rhode Island, USA"] = {}, ["South Carolina, USA"] = {}, ["South Dakota, USA"] = {}, ["Tennessee, USA"] = {}, ["Texas, USA"] = {}, ["Utah, USA"] = {}, ["Vermont, USA"] = {}, ["Virginia, USA"] = {}, ["Washington, USA"] = {wp = "%l (state)"}, ["West Virginia, USA"] = {}, ["Wisconsin, USA"] = {}, ["Wyoming, USA"] = {}, } -- states of the United States export.united_states_group = { placename_to_key = make_placename_to_key(", USA"), default_container = "United States", default_placetype = "state", default_divs = {"counties", "county seats"}, addl_divs = { {type = "census-designated places", prep = "in"}, {type = "unincorporated communities", prep = "in"}, }, data = export.united_states_states, } export.vietnam_provinces = { -- [[Northeast (Vietnam)|Northeast]] region ["Bắc Giang Province, Vietnam"] = {}, -- capital [[Bắc Giang]] ["Bắc Kạn Province, Vietnam"] = {}, -- capital [[Bắc Kạn]] ["Cao Bằng Province, Vietnam"] = {}, -- capital [[Cao Bằng]] ["Hà Giang Province, Vietnam"] = {}, -- capital [[Hà Giang]] ["Lạng Sơn Province, Vietnam"] = {}, -- capital [[Lạng Sơn]] ["Phú Thọ Province, Vietnam"] = {}, -- capital [[Việt Trì]] ["Quảng Ninh Province, Vietnam"] = {}, -- capital [[Hạ Long]] ["Thái Nguyên Province, Vietnam"] = {}, -- capital [[Thái Nguyên]] ["Tuyên Quang Province, Vietnam"] = {}, -- capital [[Tuyên Quang]] -- [[Northwest (Vietnam)|Northwest]] region ["Lào Cai Province, Vietnam"] = {}, -- capital [[Lào Cai]] ["Yên Bái Province, Vietnam"] = {}, -- capital [[Yên Bái]] ["Điện Biên Province, Vietnam"] = {}, -- capital [[Điện Biên Phủ]] ["Hoà Bình Province, Vietnam"] = {}, -- capital [[Hoà Bình City|Hoà Bình]] ["Hòa Bình Province, Vietnam"] = {alias_of = "Hoà Bình Province, Vietnam", display = true}, ["Lai Châu Province, Vietnam"] = {}, -- capital [[Lai Châu]] ["Sơn La Province, Vietnam"] = {}, -- capital [[Sơn La]] -- [[Red River Delta]] region ["Bắc Ninh Province, Vietnam"] = {}, -- capital [[Bắc Ninh]] ["Hà Nam Province, Vietnam"] = {}, -- capital [[Phủ Lý]] ["Hải Dương Province, Vietnam"] = {}, -- capital [[Hải Dương]] ["Hưng Yên Province, Vietnam"] = {}, -- capital [[Hưng Yên]] ["Nam Định Province, Vietnam"] = {}, -- capital [[Nam Định]] ["Ninh Bình Province, Vietnam"] = {}, -- capital [[Ninh Bình|Hoa Lư]] ["Thái Bình Province, Vietnam"] = {}, -- capital [[Thái Bình]] ["Vĩnh Phúc Province, Vietnam"] = {}, -- capital [[Vĩnh Yên]] -- ["Hanoi"] = {placetype = {"municipality", "city"}}, -- capital [[Hoàn Kiếm district]] -- ["Haiphong"] = {placetype = {"municipality", "city"}}, -- capital [[Hồng Bàng district]] -- [[North Central Coast]] region ["Hà Tĩnh Province, Vietnam"] = {}, -- capital [[Hà Tĩnh]] ["Nghệ An Province, Vietnam"] = {}, -- capital [[Vinh]] ["Quảng Bình Province, Vietnam"] = {}, -- capital [[Đồng Hới]] ["Quảng Trị Province, Vietnam"] = {}, -- capital [[Đông Hà]] ["Thanh Hoá Province, Vietnam"] = {}, -- capital [[Thanh Hoá]] ["Thanh Hóa Province, Vietnam"] = {alias_of = "Thanh Hoá Province, Vietnam", display = true}, -- ["Hue"] = {placetype = {"municipality", "city"}, wp = "Huế"}, -- capital [[Thuận Hoá district]] -- [[Central Highlands (Vietnam)|Central Highlands]] region ["Đắk Lắk Province, Vietnam"] = {}, -- capital [[Buôn Ma Thuột]] ["Đăk Nông Province, Vietnam"] = {}, -- capital [[Gia Nghĩa]] ["Gia Lai Province, Vietnam"] = {}, -- capital [[Pleiku]] ["Kon Tum Province, Vietnam"] = {}, -- capital [[Kon Tum]] ["Lâm Đồng Province, Vietnam"] = {}, -- capital [[Đà Lạt]] -- [[South Central Coast]] region ["Bình Định Province, Vietnam"] = {}, -- capital [[Quy Nhon]] ["Bình Thuận Province, Vietnam"] = {}, -- capital [[Phan Thiết]] ["Khánh Hoà Province, Vietnam"] = {}, -- capital [[Nha Trang]] ["Khánh Hòa Province, Vietnam"] = {alias_of = "Khánh Hoà Province, Vietnam", display = true}, ["Ninh Thuận Province, Vietnam"] = {}, -- capital [[Phan Rang–Tháp Chàm]] ["Phú Yên Province, Vietnam"] = {}, -- capital [[Tuy Hoà]] ["Quảng Nam Province, Vietnam"] = {}, -- capital [[Tam Kỳ]] ["Quảng Ngãi Province, Vietnam"] = {}, -- capital [[Quảng Ngãi]] -- ["Da Nang"] = {placetype = {"municipality", "city"}}, -- capital [[Hải Châu district]] -- [[Southeast (Vietnam)|Southeast]] region ["Bà Rịa–Vũng Tàu Province, Vietnam"] = {}, -- capital [[Bà Rịa]] ["Bình Dương Province, Vietnam"] = {}, -- capital [[Thủ Dầu Một]] ["Bình Phước Province, Vietnam"] = {}, -- capital [[Đồng Xoài]] ["Đồng Nai Province, Vietnam"] = {}, -- capital [[Biên Hoà]] ["Tây Ninh Province, Vietnam"] = {}, -- capital [[Tây Ninh]] -- ["Ho Chi Minh City"] = {placetype = {"municipality", "city"}}, -- capital [[District 1, Ho Chi Minh City|'''District 1''']] -- [[Mekong Delta]] region ["An Giang Province, Vietnam"] = {}, -- capital [[Long Xuyên]] ["Bạc Liêu Province, Vietnam"] = {}, -- capital [[Bạc Liêu]] ["Bến Tre Province, Vietnam"] = {}, -- capital [[Bến Tre]] ["Cà Mau Province, Vietnam"] = {}, -- capital [[Cà Mau]] ["Đồng Tháp Province, Vietnam"] = {}, -- capital [[Cao Lãnh City|Cao Lãnh]] ["Hậu Giang Province, Vietnam"] = {}, -- capital [[Vị Thanh]] ["Kiên Giang Province, Vietnam"] = {}, -- capital [[Rạch Giá]] ["Long An Province, Vietnam"] = {}, -- capital [[Tân An]] ["Sóc Trăng Province, Vietnam"] = {}, -- capital [[Sóc Trăng]] ["Tiền Giang Province, Vietnam"] = {}, -- capital [[Mỹ Tho]] ["Trà Vinh Province, Vietnam"] = {}, -- capital [[Trà Vinh]] ["Vĩnh Long Province, Vietnam"] = {}, -- capital [[Vĩnh Long]] -- ["Can Tho"] = {placetype = {"municipality", "city"}, wp = "Cần Thơ"}, -- capital [[Ninh Kiều district]] } -- provinces of Vietnam export.vietnam_group = { key_to_placename = make_key_to_placename(", Vietnam$", " Province$"), placename_to_key = make_placename_to_key(", Vietnam", " Province"), default_container = "Việt Nam", default_placetype = "province", -- There may not be enough districts to subcategorize like this. -- default_divs = "districts", -- For obscure reasons, provinces of Iran, Laos, Thailand and Vietnam use lowercase 'province' default_wp = "%e province", data = export.vietnam_provinces, } ----------------------------------------------------------------------------------- -- City data -- ----------------------------------------------------------------------------------- export.australia_cities = { ["Adelaide"] = {container = "South Australia"}, -- 1,450,000 (Agglomeration) ["Brisbane"] = {container = "Queensland"}, -- 3,450,000 (Conglomeration; including the Gold Coast [750,997 2024 estiamte]) ["Canberra"] = {container = {key = "Australian Capital Territory, Australia", placetype = "territory"}}, -- 510,641 (2024 estimate) ["Melbourne"] = {container = "Victoria"}, -- 5,200,000 (Agglomeration) ["Newcastle, New South Wales"] = {container = "New South Wales", wp = "%l, %c"}, -- 534,033 (2024 estimate) ["Newcastle"] = {alias_of = "Newcastle, New South Wales"}, ["Perth"] = {container = "Western Australia"}, -- 2,350,000 (Agglomeration) ["Sydney"] = {container = "New South Wales"}, -- 5,100,000 (Agglomeration) } export.australia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Australia", "state"), default_placetype = "city", data = export.australia_cities, } export.brazil_cities = { -- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01. ["São Paulo"] = {container = "São Paulo"}, -- 22,600,000 (Consolidated Urban Area; including Guarulhos) ["Sao Paulo"] = {alias_of = "São Paulo", display = true}, ["Rio de Janeiro"] = {container = "Rio de Janeiro"}, -- 13,600,000 (Consolidated Urban Area) ["Belo Horizonte"] = {container = "Minas Gerais"}, -- 5,300,000 ["Recife"] = {container = "Pernambuco"}, -- 4,100,000 ["Porto Alegre"] = {container = "Rio Grande do Sul"}, -- 3,950,000 (Consolidated Urban Area) ["Brasília"] = {container = "Distrito Federal"}, -- 3,850,000 ["Brasilia"] = {alias_of = "Brasília", display = true}, ["Fortaleza"] = {container = "Ceará"}, -- 3,825,000 ["Salvador"] = {container = "Bahia", wp = "%l, %c", commonscat = "%l (%c)"}, -- 3,400,000 ["Curitiba"] = {container = "Paraná"}, -- 3,375,000 ["Campinas"] = {container = "São Paulo"}, -- 3,250,000 ["Goiânia"] = {container = "Goiás"}, -- 2,525,000 ["Goiania"] = {alias_of = "Goiânia", display = true}, ["Manaus"] = {container = "Amazonas"}, -- 2,275,000 ["Belém"] = {container = "Pará"}, -- 2,200,000 ["Belem"] = {alias_of = "Belém", display = true}, ["Vitória"] = {container = "Espírito Santo", wp = "%l, %c"}, -- 1,870,000 ["Vitoria"] = {alias_of = "Vitória", display = true}, ["Santos"] = {container = "São Paulo", wp = "%l, %c"}, -- 1,760,000 ["São Luís"] = {container = "Maranhão", wp = "%l, %c"}, -- 1,530,000 ["Sao Luis"] = {alias_of = "São Luís", display = true}, ["Natal"] = {container = "Rio Grande do Norte", wp = "%l, %c"}, -- 1,360,000 ["Florianópolis"] = {container = "Santa Catarina"}, -- 1,260,000 ["Florianopolis"] = {alias_of = "Florianópolis", display = true}, ["Maceió"] = {container = "Alagoas"}, -- 1,220,000 ["Maceio"] = {alias_of = "Maceió", display = true}, ["João Pessoa"] = {container = "Paraíba", wp = "%l, %c"}, -- 1,210,000 ["Joao Pessoa"] = {alias_of = "João Pessoa", display = true}, ["São José dos Campos"] = {container = "São Paulo"}, -- 1,090,000 ["Sao Jose dos Campos"] = {alias_of = "São José dos Campos", display = true}, ["Londrina"] = {container = "Paraná"}, -- 1,050,000 ["Teresina"] = {container = "Piauí"}, -- 1,040,000 } export.brazil_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Brazil", "state"), default_placetype = "city", data = export.brazil_cities, } export.canada_cities = { -- Figures from citypopulation.de; retrieved 2025-04-27; reference date 2025-01-01. ["Toronto"] = {container = "Ontario"}, -- 7,850,000 (Consolidated Urban Area; including Hamilton) ["Montreal"] = {container = "Quebec"}, -- 4,500,000 (Consolidated Urban Area) ["Vancouver"] = {container = "British Columbia"}, -- 3,175,000 (Consolidated Urban Area) ["Calgary"] = {container = "Alberta"}, -- 1,510,000 (Consolidated Urban Area) ["Edmonton"] = {container = "Alberta"}, -- 1,460,000 (Consolidated Urban Area) ["Ottawa"] = {container = "Ontario"}, -- 1,390,000 (Consolidated Urban Area) ["Quebec City"] = {container = "Quebec"}, -- 839,311 metro per Wikipedia (2021 census) ["Winnipeg"] = {container = "Manitoba"}, -- 834,678 metro per Wikipedia (2021 census) ["Hamilton"] = {container = "Ontario", wp = "%l, %c"}, -- 785,184 metro per Wikipedia (2021 census) ["Kitchener"] = {container = "Ontario", wp = "%l, %c"}, -- 575,847 metro per Wikipedia (2021 census) } export.canada_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Canada", "province"), default_placetype = "city", data = export.canada_cities, } export.france_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. ["Paris"] = {container = "Île-de-France"}, -- 11,500,000 (Conglomeration) ["Lyon"] = {container = "Auvergne-Rhône-Alpes"}, -- 2,050,000 (Conglomeration) ["Lyons"] = {alias_of = "Lyon", display = true}, ["Marseille"] = {container = "Provence-Alpes-Côte d'Azur"}, -- 1,710,000 (Conglomeration) ["Marseilles"] = {alias_of = "Marseille", display = true}, ["Lille"] = {container = "Hauts-de-France"}, -- 1,320,000 (Conglomeration) ["Bordeaux"] = {container = "Nouvelle-Aquitaine"}, -- 1,160,000 (Conglomeration) ["Toulouse"] = {container = "Occitania"}, -- 1,150,000 (Conglomeration) ["Nice"] = {container = "Provence-Alpes-Côte d'Azur"}, ["Nantes"] = {container = "Pays de la Loire"}, ["Strasbourg"] = {container = "Grand Est"}, ["Rennes"] = {container = "Brittany"}, } export.france_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", France", "region"), default_placetype = "city", data = export.france_cities, } export.germany_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. -- listed under Rhein-Ruhr Area, total population 10,900,000 (Consolidated Urban Area) ["Cologne"] = {container = "North Rhine-Westphalia"}, ["Köln"] = {alias_of = "Cologne", display = true}, ["Düsseldorf"] = {container = "North Rhine-Westphalia"}, ["Dusseldorf"] = {alias_of = "Düsseldorf", display = true}, ["Dortmund"] = {container = "North Rhine-Westphalia"}, ["Essen"] = {container = "North Rhine-Westphalia"}, ["Duisberg"] = {container = "North Rhine-Westphalia"}, ["Berlin"] = {}, -- 4,700,000 ["Frankfurt"] = {container = "Hesse"}, -- 3,225,000 ["Frankfurt am Main"] = {alias_of = "Frankfurt"}, -- not a display alias as it's longer ["Hamburg"] = {}, -- 2,900,000 ["Munich"] = {container = "Bavaria"}, -- 2,300,000 ["Stuttgart"] = {container = "Baden-Württemberg"}, -- 2,300,000 ["Mannheim"] = {container = "Baden-Württemberg"}, -- 1,550,000 ["Nuremberg"] = {container = "Bavaria"}, -- 1,120,000 ["Hanover"] = {"Lower Saxony"}, -- 1,090,000 ["Bielefeld"] = {container = "North Rhine-Westphalia"}, -- 1,080,000 ["Leipzig"] = {container = "Saxony"}, -- 1,080,000 ["Aachen"] = {container = "North Rhine-Westphalia"}, -- 1,000,000 ["Aix-la-Chapelle"] = {alias_of = "Aachen"}, -- historical; not a display alias ["Bremen"] = {}, } export.germany_cities_group = { default_container = "Germany", canonicalize_key_container = make_canonicalize_key_container(", Germany", "state"), default_placetype = "city", data = export.germany_cities, } export.india_cities = { -- This lists the 65 metro areas per Demographia's 2023 estimates, as found in -- [[w:List_of_million-plus_urban_agglomerations_in_India]]. The last census in India (as of April 2025) was -- conducted in 2011, and the results are not accurate any more. ["Delhi"] = {container = {key = "Delhi, India", placetype = "union territory"}}, -- 31,190,000 ["Mumbai"] = {container = "Maharashtra"}, -- 25,189,000 ["Kolkata"] = {container = "West Bengal"}, -- 21,747,000 ["Bangalore"] = {container = "Karnataka", wp = "Bengaluru"}, -- 15,257,000 ["Bengaluru"] = {alias_of = "Bangalore"}, ["Chennai"] = {container = "Tamil Nadu"}, -- 11,570,000 ["Hyderabad"] = {container = "Telangana"}, -- 9,797,000 ["Ahmedabad"] = {container = "Gujarat"}, -- 8,006,000 ["Pune"] = {container = "Maharashtra"}, -- 6,819,000 ["Surat"] = {container = "Gujarat"}, -- 6,601,000 ["Lucknow"] = {container = "Uttar Pradesh"}, -- 4,661,000 ["Jaipur"] = {container = "Rajasthan"}, -- 4,360,000 ["Kanpur"] = {container = "Uttar Pradesh"}, -- 4,350,000 ["Indore"] = {container = "Madhya Pradesh"}, -- 3,765,000 ["Nagpur"] = {container = "Maharashtra"}, -- 3,493,000 ["Patna"] = {container = "Bihar"}, -- 3,331,000 ["Varanasi"] = {container = "Uttar Pradesh"}, -- 3,229,000 ["Kozhikode"] = {container = "Kerala"}, -- 3,049,000 ["Thiruvananthapuram"] = {container = "Kerala"}, -- 2,851,000 ["Agra"] = {container = "Uttar Pradesh"}, -- 2,737,000 ["Bhopal"] = {container = "Madhya Pradesh"}, -- 2,562,000 ["Coimbatore"] = {container = "Tamil Nadu"}, -- 2,551,000 ["Allahabad"] = {container = "Uttar Pradesh", wp = "Prayagraj"}, -- 2,438,000 ["Prayagraj"] = {alias_of = "Allahabad"}, ["Kochi"] = {container = "Kerala"}, -- 2,381,000 ["Ludhiana"] = {container = "Punjab"}, -- 2,205,000 ["Vadodara"] = {container = "Gujarat"}, -- 2,182,000 ["Chandigarh"] = {container = {key = "Chandigarh, India", placetype = "union territory"}}, -- 2,168,000 ["Madurai"] = {container = "Tamil Nadu"}, -- 2,048,000 ["Meerut"] = {container = "Uttar Pradesh"}, -- 2,011,000 ["Visakhapatnam"] = {container = "Andhra Pradesh"}, -- 2,005,000 ["Jamshedpur"] = {container = "Jharkhand"}, -- 1,925,000 ["Malappuram"] = {container = "Kerala"}, -- 1,868,000 ["Nashik"] = {container = "Maharashtra"}, -- 1,810,000 ["Asansol"] = {container = "West Bengal"}, -- 1,720,000 ["Aligarh"] = {container = "Uttar Pradesh"}, -- 1,660,000 ["Ranchi"] = {container = "Jharkhand"}, -- 1,638,000 ["Thrissur"] = {container = "Kerala"}, -- 1,578,000 ["Kollam"] = {container = "Kerala"}, -- 1,576,000 ["Jabalpur"] = {container = "Madhya Pradesh"}, -- 1,533,000 ["Dhanbad"] = {container = "Jharkhand"}, -- 1,503,000 ["Jodhpur"] = {container = "Rajasthan"}, -- 1,497,000 ["Aurangabad"] = {container = "Maharashtra"}, -- 1,490,000 ["Chhatrapati Sambhajinagar"] = {alias_of = "Aurangabad"}, ["Rajkot"] = {container = "Gujarat"}, -- 1,487,000 ["Gwalior"] = {container = "Madhya Pradesh"}, -- 1,477,000 ["Raipur"] = {container = "Chhattisgarh"}, -- 1,429,000 ["Gorakhpur"] = {container = "Uttar Pradesh"}, -- 1,410,000 ["Kannur"] = {container = "Kerala"}, -- 1,360,000 ["Bareilly"] = {container = "Uttar Pradesh"}, -- 1,355,000 ["Guwahati"] = {container = "Assam"}, -- 1,355,000 ["Moradabad"] = {container = "Uttar Pradesh"}, -- 1,345,000 ["Amritsar"] = {container = "Punjab"}, -- 1,313,000 ["Mysore"] = {container = "Karnataka"}, -- 1,296,000 ["Bhilai"] = {container = "Chhattisgarh"}, -- 1,293,000 ["Durg-Bhilainagar"] = {alias_of = "Bhilai"}, ["Durg-Bhilai"] = {alias_of = "Bhilai"}, ["Durg"] = {alias_of = "Bhilai"}, ["Bhilainagar"] = {alias_of = "Bhilai"}, ["Vijayawada"] = {container = "Andhra Pradesh"}, -- 1,232,000 ["Srinagar"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,212,000 ["Salem"] = {container = "Tamil Nadu", wp = "%l, %c"}, -- 1,189,000 ["Kota"] = {container = "Rajasthan"}, -- 1,172,000 ["Jalandhar"] = {container = "Punjab"}, -- 1,165,000 ["Saharanpur"] = {container = "Uttar Pradesh"}, -- 1,152,000 ["Dehradun"] = {container = "Uttarakhand"}, -- 1,136,000 ["Tiruchirappalli"] = {container = "Tamil Nadu"}, -- 1,131,000 ["Bhubaneswar"] = {container = "Odisha"}, -- 1,112,000 ["Jammu"] = {container = {key = "Jammu and Kashmir, India", placetype = "union territory"}}, -- 1,103,000 ["Solapur"] = {container = "Maharashtra"}, -- 1,082,000 ["Hubli-Dharwad"] = {container = "Karnataka", wp = "Hubli–Dharwad"}, -- 1,062,000; wp with en dash ["Hubli"] = {alias_of = "Hubli-Dharwad"}, ["Dharwad"] = {alias_of = "Hubli-Dharwad"}, ["Puducherry"] = {container = {key = "Puducherry, India", placetype = "union territory"}}, -- 1,024,000 ["Pondicherry"] = {alias_of = "Puducherry", display = true}, -- satellite/secondary cities of metro area (none in citypopulation.de) ["Ghaziabad"] = {container = "Uttar Pradesh"}, -- 1,729,000 city, 2,358,525 urban agglomeration per 2011 census; 3,406,061 2025 estimate from official website; part of Delhi metro area ["Faridabad"] = {container = "Haryana"}, -- 1,414,050 city per 2011 census; part of Delhi metro area ["Thane"] = {container = "Maharashtra"}, -- 1,841,488 city per 2011 census; part of Mumbai metro area ["Kalyan-Dombivli"] = {container = "Maharashtra"}, -- 1,246,381 city per 2011 census; part of Mumbai metro area ["Kalyan-Dombivali"] = {alias_of = "Kalyan-Dombivli", display = true}, ["Kalyan"] = {alias_of = "Kalyan-Dombivli"}, ["Dombivli"] = {alias_of = "Kalyan-Dombivli"}, ["Dombivali"] = {alias_of = "Kalyan-Dombivli"}, ["Vasai-Virar"] = {container = "Maharashtra"}, -- 1,221,233 city per 2011 census; part of Mumbai metro area ["Vasai"] = {alias_of = "Vasai-Virar"}, ["Virar"] = {alias_of = "Vasai-Virar"}, ["Navi Mumbai"] = {container = "Maharashtra"}, -- 1,120,547 city per 2011 census; part of Mumbai metro area ["Howrah"] = {container = "West Bengal"}, -- 1,077,075 city ("metropolis"), 2,811,344 "metro" per 2011 census; part of Kolkata metro area ["Pimpri-Chinchwad"] = {container = "Maharashtra"}, -- 1,727,692 per 2011 census; part of Pune metro area ["Pimpri Chinchwad"] = {alias_of = "Pimpri-Chinchwad", display = true}, } export.india_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", India", "state"), default_placetype = "city", data = export.india_cities, } export.indonesia_cities = { -- cities where the city proper has more than 1,000,000 people as of mid-2023 estimate ["Jakarta"] = {container = "Special Capital Region of Jakarta", divs = { {type = "subdistricts", container_parent_type = false}, }}, ["Surabaya"] = {container = "East Java"}, ["Bekasi"] = {container = "West Java"}, -- part of Jakarta metro area ["Bandung"] = {container = "West Java"}, ["Medan"] = {container = "North Sumatra"}, ["Depok"] = {container = "West Java"}, -- part of Jakarta metro area ["Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area ["Palembang"] = {container = "South Sumatra"}, ["Semarang"] = {container = "Central Java"}, ["Makassar"] = {container = "South Sulawesi"}, ["South Tangerang"] = {container = "Banten"}, -- part of Jakarta metro area ["Batam"] = {container = "Riau Islands"}, ["Bogor"] = {container = "West Java"}, -- part of Jakarta metro area ["Pekanbaru"] = {container = "Riau"}, ["Bandar Lampung"] = {container = "Lampung"}, -- other metro areas over 1,000,000 people ["Padang"] = {container = "West Sumatra"}, ["Samarinda"] = {container = "East Kalimantan"}, ["Malang"] = {container = "East Java"}, ["Yogyakarta"] = {container = "Special Region of Yogyakarta"}, ["Denpasar"] = {container = "Bali"}, ["Cirebon"] = {container = "West Java"}, ["Surakarta"] = {container = "Central Java"}, ["Banjarmasin"] = {container = "South Kalimantan"}, ["Tasikmalaya"] = {container = "West Java"}, } export.indonesia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Indonesia", "province"), default_placetype = "city", data = export.indonesia_cities, } export.italy_cities = { -- Data per [[w:List_of_metropolitan_areas_of_Italy]]. There are several lists given; the most recent one, used -- here, only gives estimates as of Jan 1, 2014. ["Milan"] = {container = "Lombardy"}, -- 6,623,798 ["Naples"] = {container = "Campania"}, -- 5,294,546 ["Rome"] = {container = "Lazio"}, -- 4,447,881 ["Turin"] = {container = "Piedmont"}, -- 1,865,284 ["Venice"] = {container = "Veneto"}, -- 1,645,900 ["Florence"] = {container = "Tuscany"}, -- 1,485,030 ["Bari"] = {container = "Apulia"}, -- 1,257,459 ["Palermo"] = {container = "Sicily"}, -- 1,183,084 -- include a few just below 1,000,000 metro area that may be above it by now (depending on the definition). ["Catania"] = {container = "Sicily"}, -- 988,240 ["Brescia"] = {container = "Lombardy"}, -- 924,090 ["Genoa"] = {container = "Liguria"}, -- 861,318 } export.italy_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Italy", "region"), default_placetype = "city", data = export.italy_cities, } export.japan_cities = { -- Population figures from [[w:List of cities in Japan]]. Metro areas from -- [[w:List of metropolitan areas in Japan]]. ["Tokyo"] = {keydesc = "[[Tokyo]] Metropolis, the [[capital city]] and a [[prefecture]] of [[Japan]] (which is a country in [[Asia]])", placetype = {"city", "prefecture"}, divs = { {type = "special wards", container_parent_type = false}, {type = "cities", prep = "in"}, }, }, ["Yokohama"] = {container = "Kanagawa"}, -- 3,697,894 ["Osaka"] = {container = "Osaka"}, -- 2,668,586 ["Nagoya"] = {container = "Aichi"}, -- 2,283,289 -- FIXME, Hokkaido is handled specially. ["Sapporo"] = {container = "Hokkaido"}, -- 1,918,096 ["Fukuoka"] = {container = "Fukuoka"}, -- 1,581,527 ["Kobe"] = {container = "Hyōgo"}, -- 1,530,847 ["Kyoto"] = {container = "Kyoto"}, -- 1,474,570 ["Kawasaki"] = {container = "Kanagawa", wp = "%l, Kanagawa"}, -- 1,373,630 ["Saitama"] = {container = "Saitama", wp = "%l (city)", commonscat = "%l, %c"}, -- 1,192,418 ["Hiroshima"] = {container = "Hiroshima"}, -- 1,163,806 ["Sendai"] = {container = "Miyagi"}, -- 1,029,552 -- the remaining cities are considered "central cities" in a 1,000,000+ metro area -- (sometimes there is more than one central city in the area). ["Kitakyushu"] = {container = "Fukuoka"}, -- 986,998 ["Chiba"] = {container = "Chiba", wp = "%l (city)", commonscat = "%l, %c"}, -- 938,695 ["Sakai"] = {container = "Osaka"}, -- 835,333 ["Niigata"] = {container = "Niigata", wp = "%l (city)", commonscat = "%l, %c"}, -- 813,053 ["Hamamatsu"] = {container = "Shizuoka"}, -- 811,431 ["Shizuoka"] = {container = "Shizuoka", wp = "%l (city)", commonscat = "%l, %c"}, -- 710,944 ["Sagamihara"] = {container = "Kanagawa"}, -- 706,342 ["Okayama"] = {container = "Okayama"}, -- 701,293 ["Kumamoto"] = {container = "Kumamoto"}, -- 670,348 ["Kagoshima"] = {container = "Kagoshima"}, -- 605,196 -- skipped 6 cities (Funabashi, Hachiōji, Kawaguchi, Himeji, Matsuyama, Higashiōsaka) -- with population in the range 509k - 587k because not central cities in any -- 1,000,000+ metro area. ["Utsunomiya"] = {container = "Tochigi"}, -- 507,833 } export.japan_cities_group = { default_container = "Japan", canonicalize_key_container = make_canonicalize_key_container(" Prefecture, Japan", "prefecture"), default_placetype = "city", data = export.japan_cities, } export.mexico_cities = { ["Mexico City"] = {}, -- its own state ["Monterrey"] = {container = "Nuevo León"}, ["Guadalajara"] = {container = "Jalisco"}, ["Puebla"] = {container = "Puebla", wp = "%l (city)"}, ["Toluca"] = {container = "State of Mexico"}, ["Tijuana"] = {container = "Baja California"}, -- Include the state in the category for León due to possible confusion with León, Spain. ["León, Guanajuato"] = {container = "Guanajuato", wp = "%l, %c"}, ["León"] = {alias_of = "León, Guanajuato"}, ["Leon"] = {alias_of = "León, Guanajuato", display = true}, ["Querétaro"] = {container = "Querétaro", wp = "%l (city)"}, ["Queretaro"] = {alias_of = "Querétaro", display = true}, ["Ciudad Juárez"] = {container = "Chihuahua"}, ["Juárez"] = {alias_of = "Ciudad Juárez"}, ["Juarez"] = {alias_of = "Ciudad Juárez", display = "Juárez"}, ["Torreón"] = {container = "Coahuila"}, ["Torreon"] = {alias_of = "Torreón", display = true}, -- Include the state in the category for Mérida due to possible confusion with Mérida, Spain or -- Mérida, Venezuela. ["Mérida, Yucatán"] = {container = "Yucatán", wp = "%l, %c"}, ["Mérida"] = {alias_of = "Mérida, Yucatán"}, ["Merida"] = {alias_of = "Mérida, Yucatán", display = true}, ["San Luis Potosí"] = {container = "San Luis Potosí", wp = "%l (city)"}, ["San Luis Potosi"] = {alias_of = "San Luis Potosí", display = true}, ["Aguascalientes"] = {container = "Aguascalientes", wp = "%l (city)"}, ["Mexicali"] = {container = "Baja California"}, } export.mexico_cities_group = { default_container = "Mexico", canonicalize_key_container = make_canonicalize_key_container(", Mexico", "state"), default_placetype = "city", data = export.mexico_cities, } export.nigeria_cities = { -- Figures from citypopulation.de unless otherwise indicated; retrieved 2025-04-26; reference date 2025-01-01. ["Lagos"] = {container = "Lagos"}, -- 21,300,000 (unindicated; population of low reliability) ["Kano"] = {container = "Kano", wp = "%l (city)"}, -- 5,350,000 (unindicated; population of low reliability) ["Ibadan"] = {container = "Oyo"}, -- 3,400,000 (unindicated; population of low reliability) ["Abuja"] = {container = {key = "Federal Capital Territory, Nigeria", placetype = "federal territory"}}, -- 3,050,000 (unindicated; population of low reliability) ["Port Harcourt"] = {container = "Rivers"}, -- 2,250,000 (unindicated; population of low reliability) ["Kaduna"] = {container = "Kaduna"}, -- 1,980,000 (unindicated; population of low reliability) ["Benin City"] = {container = "Edo"}, -- 1,790,000 (unindicated; population of low reliability) ["Aba"] = {container = "Abia", wp = "%l, Nigeria"}, -- 1,280,000 (unindicated; population of low reliability) ["Onitsha"] = {container = "Anambra"}, -- 1,230,000 (unindicated; population of low reliability) ["Maiduguri"] = {container = "Borno"}, -- 1,190,000 (unindicated; population of low reliability) ["Ilorin"] = {container = "Kwara"}, -- 1,160,000 (unindicated; population of low reliability) ["Sokoto"] = {container = "Sokoto", wp = "%l (city)"}, -- 1,140,000 (unindicated; population of low reliability) ["Jos"] = {container = "Plateau"}, -- 1,110,000 (unindicated; population of low reliability) ["Zaria"] = {container = "Kaduna"}, -- 1,050,000 (unindicated; population of low reliability) ["Enugu"] = {container = "Enugu", wp = "%l (city)"}, -- 1,010,000 (unindicated; population of low reliability) } export.nigeria_cities_group = { default_container = "Nigeria", canonicalize_key_container = make_canonicalize_key_container(" State, Nigeria", "state"), default_placetype = "city", data = export.nigeria_cities, } export.pakistan_cities = { -- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01. ["Karachi"] = {container = "Sindh"}, -- 21,000,000 (Consolidated Urban Area) ["Lahore"] = {container = "Punjab"}, -- 14,600,000 (Consolidated Urban Area) ["Rawalpindi"] = {container = "Punjab"}, -- 5,600,000 (Consolidated Urban Area; including Islamabad) ["Islamabad"] = {container = {key = "Islamabad Capital Territory, Pakistan", placetype = "federal territory"}}, -- 5,600,000 (Consolidated Urban Area; including Rawalpindi) ["Faisalabad"] = {container = "Punjab"}, -- 4,125,000 (Consolidated Urban Area) ["Gujranwala"] = {container = "Punjab"}, -- 3,450,000 (Consolidated Urban Area) -- there is also Hyderabad in India (very confusing) ["Hyderabad, Pakistan"] = {container = "Sindh", wp = "%l, %c"}, -- 2,475,000 (Consolidated Urban Area) ["Hyderabad"] = {alias_of = "Hyderabad, Pakistan"}, ["Multan"] = {container = "Punjab"}, -- 2,425,000 (Consolidated Urban Area) ["Peshawar"] = {container = "Khyber Pakhtunkhwa"}, -- 2,150,000 (Consolidated Urban Area) ["Quetta"] = {container = "Balochistan"}, -- 1,720,000 (Urban Area) ["Sargodha"] = {container = "Punjab"}, -- 1,080,000 (Urban Area) ["Sialkot"] = {container = "Punjab"}, -- 1,050,000 (Consolidated Urban Area) } export.pakistan_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Pakistan", "province"), default_placetype = "city", data = export.pakistan_cities, } export.philippines_cities = { -- Skipped some cities in Metro Manila (Taguig, Pasig) which don't have districts. -- Other cities outside Metro Manila skipped as not central city in their urban area. ["Quezon City"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, -- Don't display-canonicalize Foo to Foo City as it may make the display weird. ["Quezon"] = {alias_of = "Quezon City"}, ["Manila"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, ["Davao City"] = {container = "Davao del Sur"}, ["Davao"] = {alias_of = "Davao City"}, ["Caloocan"] = {container = {key = "Metro Manila, Philippines", placetype = "region"}}, ["Zamboanga City"] = {container = "Zamboanga del Sur"}, ["Zamboanga"] = {alias_of = "Zamboanga City"}, ["Cebu City"] = {container = "Cebu"}, ["Cebu"] = {alias_of = "Cebu City"}, ["Antipolo"] = {container = "Rizal"}, ["Cagayan de Oro"] = {container = "Misamis Oriental"}, ["Dasmariñas"] = {container = "Cavite"}, ["Dasmarinas"] = {alias_of = "Dasmariñas", display = true}, ["General Santos"] = {container = "South Cotabato"}, ["San Jose del Monte"] = {container = "Bulacan"}, ["Bacolod"] = {container = "Negros Occidental"}, ["Calamba"] = {container = "Laguna", wp = "%l, %c"}, ["Angeles"] = {container = "Pampanga", wp = "Angeles City"}, ["Angeles City"] = {alias_of = "Angeles"}, ["Iloilo City"] = {container = "Iloilo"}, ["Iloilo"] = {alias_of = "Iloilo City"}, } export.philippines_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Philippines", "province"), default_placetype = "city", data = export.philippines_cities, } export.russia_cities = { -- Figures from citypopulation.de; retrieved 2025-04-26; reference date 2025-01-01. ["Moscow"] = {}, -- 18,800,000 (Agglomeration) ["Saint Petersburg"] = {}, -- 6,350,000 (Agglomeration) ["Novosibirsk"] = {container = "Novosibirsk Oblast"}, -- 1,820,000 (Agglomeration) ["Yekaterinburg"] = {container = "Sverdlovsk Oblast"}, -- 1,810,000 (Agglomeration) ["Nizhny Novgorod"] = {container = "Nizhny Novgorod Oblast"}, -- 1,620,000 (Agglomeration) ["Kazan"] = {container = {key = "Tatarstan, Russia", placetype = "republic"}}, -- 1,560,000 (Agglomeration) ["Chelyabinsk"] = {container = "Chelyabinsk Oblast"}, -- 1,430,000 (Agglomeration) ["Rostov-on-Don"] = {container = "Rostov Oblast"}, -- 1,390,000 (Agglomeration) ["Rostov-na-Donu"] = {alias_of = "Rostov-on-Don", display = true}, ["Krasnodar"] = {container = {key = "Krasnodar Krai, Russia", placetype = "krai"}}, -- 1,370,000 (Agglomeration) ["Samara"] = {container = "Samara Oblast"}, -- 1,350,000 (Agglomeration) ["Krasnoyarsk"] = {container = {key = "Krasnoyarsk Krai, Russia", placetype = "krai"}}, -- 1,270,000 (Agglomeration) ["Ufa"] = {container = {key = "Bashkortostan, Russia", placetype = "republic"}}, -- 1,230,000 (Agglomeration) ["Saratov"] = {container = "Saratov Oblast"}, -- 1,170,000 (Agglomeration) ["Omsk"] = {container = "Omsk Oblast"}, -- 1,140,000 (Agglomeration) ["Voronezh"] = {container = "Voronezh Oblast"}, -- 1,130,000 (Agglomeration) ["Volgograd"] = {container = "Volgograd Oblast"}, -- 1,080,000 (Agglomeration) ["Perm"] = {container = {key = "Perm Krai, Russia", placetype = "krai"}, wp = "%l, Russia"}, -- 1,070,000 (Agglomeration) } export.russia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Russia", "oblast"), default_container = "Russia", default_placetype = "city", data = export.russia_cities, } export.saudi_arabia_cities = { -- Figures for the first five from [[w:List of cities and towns in Saudi Arabia]] as of 2022. Unclear if these are -- metro, urban or city proper figures. ["Riyadh"] = {container = "Riyadh"}, -- 7,000,100; 7,700,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Jeddah"] = {container = "Mecca"}, -- 3,751,917; 3,950,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Jedda"] = {alias_of = "Jeddah", display = true}, ["Jiddah"] = {alias_of = "Jeddah", display = true}, ["Jidda"] = {alias_of = "Jeddah", display = true}, ["Dammam"] = {container = "Eastern"}, -- 2,638,166; 2,925,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Mecca"] = {container = "Mecca"}, -- 2,385,509; 2,675,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Makkah"] = {alias_of = "Mecca", display = true}, ["Medina"] = {container = "Medina"}, -- 1,477,023; 1,530,000 per citypopulation.de 2025-01-01 (City) ["Hofuf"] = {container = "Eastern"}, -- 1,060,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Khamis Mushait"] = {container = "Aseer"}, -- 1,030,000 per citypopulation.de 2025-01-01 (Agglomeration) ["Khamis Mushayt"] = {alias_of = "Khamis Mushait", display = true}, } export.saudi_arabia_cities_group = { canonicalize_key_container = make_canonicalize_key_container(" Province, Saudi Arabia", "province"), default_placetype = "city", data = export.saudi_arabia_cities, } export.south_korea_cities = { -- All cities listed are not associated with any county. ["Seoul"] = {}, ["Busan"] = {}, ["Incheon"] = {}, ["Daegu"] = {}, ["Daejeon"] = {}, ["Gwangju"] = {}, ["Ulsan"] = {}, } export.south_korea_cities_group = { default_container = "South Korea", canonicalize_key_container = make_canonicalize_key_container(" County, South Korea", "province"), default_placetype = "city", data = export.south_korea_cities, } export.spain_cities = { ["Madrid"] = {container = "Community of Madrid"}, ["Barcelona"] = {container = "Catalonia"}, ["Valencia"] = {container = "Valencia"}, ["Seville"] = {container = "Andalusia"}, ["Bilbao"] = {container = "Basque Country"}, } export.spain_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", Spain", "autonomous community"), default_placetype = "city", data = export.spain_cities, } export.taiwan_cities = { ["New Taipei City"] = {}, ["New Taipei"] = {alias_of = "New Taipei City", display = true}, ["Taichung"] = {}, ["Kaohsiung"] = {wp = "%l, Taiwan"}, ["Taipei"] = {}, ["Taoyuan"] = {}, ["Tainan"] = {}, -- these last three are not special municipalities ["Chiayi"] = {placetype = "city"}, ["Hsinchu"] = {placetype = "city"}, ["Keelung"] = {placetype = "city"}, } export.taiwan_cities_group = { placename_to_key = false, -- don't add ", Taiwan" to make the key canonicalize_key_container = make_canonicalize_key_container(", Taiwan", "county"), default_container = "Taiwan", default_placetype = {"special municipality", "municipality", "city"}, default_is_city = true, default_divs = {"districts"}, data = export.taiwan_cities, } -- NOTE: It's OK to mix cities from different constituent countries; as long as the immediate container is correct, -- everything else will be figured out. export.united_kingdom_cities = { ["London"] = {container = "Greater London"}, ["Manchester"] = {container = "Greater Manchester"}, ["Birmingham"] = {container = "West Midlands"}, ["Liverpool"] = {container = "Merseyside"}, ["Glasgow"] = {container = {key = "City of Glasgow, Scotland", placetype = "council area"}}, ["Leeds"] = {container = "West Yorkshire"}, ["Newcastle upon Tyne"] = {container = "Tyne and Wear"}, ["Newcastle"] = {alias_of = "Newcastle upon Tyne"}, ["Bristol"] = {container = {key = "England", placetype = "constituent country"}}, ["Cardiff"] = {container = {key = "Wales", placetype = "constituent country"}}, ["Portsmouth"] = {container = "Hampshire"}, ["Edinburgh"] = {container = {key = "City of Edinburgh, Scotland", placetype = "council area"}}, -- under 1,000,000 people but principal areas of Wales; requested by [[User:Donnanz]] ["Swansea"] = {container = {key = "Wales", placetype = "constituent country"}}, ["Newport"] = {container = {key = "Wales", placetype = "constituent country"}, wp = "Newport, Wales"}, } export.united_kingdom_cities_group = { canonicalize_key_container = make_canonicalize_key_container(", England", "county"), default_placetype = "city", data = export.united_kingdom_cities, } export.united_states_cities = { -- top 50 CSA's by population, with the top and sometimes 2nd or 3rd city listed ["New York City"] = {container = "New York", wp = "%l", divs = { {type = "boroughs", container_parent_type = false}, }}, -- Don't display-canonicalize as it may make the display weird (e.g. in the context New York, New York). ["New York"] = {alias_of = "New York City"}, ["Newark"] = {container = "New Jersey"}, ["Los Angeles"] = {container = "California", wp = "%l"}, ["Long Beach"] = {container = "California"}, ["Riverside"] = {container = "California"}, ["Chicago"] = {container = "Illinois", wp = "%l"}, ["Washington, D.C."] = {wp = "%l"}, ["Washington, DC"] = {alias_of = "Washington, D.C.", display = true}, ["Washington D.C."] = {alias_of = "Washington, D.C.", display = true}, ["Washington DC"] = {alias_of = "Washington, D.C.", display = true}, -- Don't display-canonicalize as it may make the display weird (e.g. if the holonym is followed by a District of -- Columbia holonym). ["Washington"] = {alias_of = "Washington, D.C."}, ["Baltimore"] = {container = "Maryland", wp = "%l"}, -- to avoid conflict with San Jose in Costa Rica ["San Jose, California"] = {container = "California"}, ["San Jose"] = {alias_of = "San Jose, California"}, ["San Francisco"] = {container = "California", wp = "%l"}, ["Oakland"] = {container = "California"}, ["Boston"] = {container = "Massachusetts", wp = "%l"}, ["Providence"] = {container = "Rhode Island"}, ["Dallas"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"}, ["Fort Worth"] = {container = "Texas"}, ["Philadelphia"] = {container = "Pennsylvania", wp = "%l"}, ["Houston"] = {container = "Texas", wp = "%l"}, ["Miami"] = {container = "Florida", wp = "%l", commonscat = "%l, %c"}, ["Atlanta"] = {container = "Georgia", wp = "%l"}, ["Detroit"] = {container = "Michigan", wp = "%l"}, ["Phoenix"] = {container = "Arizona", wp = "%l", commonscat = "%l, %c"}, ["Mesa"] = {container = "Arizona"}, ["Seattle"] = {container = "Washington", wp = "%l"}, ["Orlando"] = {container = "Florida"}, ["Minneapolis"] = {container = "Minnesota", wp = "%l"}, ["Cleveland"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"}, ["Denver"] = {container = "Colorado", wp = "%l", commonscat = "%l, %c"}, ["San Diego"] = {container = "California", wp = "%l", commonscat = "%l, %c"}, ["Portland"] = {container = "Oregon"}, ["Tampa"] = {container = "Florida"}, ["St. Louis"] = {container = "Missouri", wp = "%l", commonscat = "%l, %c"}, ["Saint Louis"] = {alias_of = "St. Louis", display = true}, ["Charlotte"] = {container = "North Carolina"}, ["Sacramento"] = {container = "California"}, ["Pittsburgh"] = {container = "Pennsylvania", wp = "%l"}, ["Salt Lake City"] = {container = "Utah", wp = "%l"}, ["San Antonio"] = {container = "Texas", wp = "%l", commonscat = "%l, %c"}, ["Columbus"] = {container = "Ohio"}, ["Kansas City"] = {container = "Missouri", wp = "%l metropolitan area", commonscat = "%l, %c"}, ["Indianapolis"] = {container = "Indiana", wp = "%l"}, ["Las Vegas"] = {container = "Nevada", wp = "%l"}, ["Cincinnati"] = {container = "Ohio", wp = "%l", commonscat = "%l, %c"}, ["Austin"] = {container = "Texas"}, ["Milwaukee"] = {container = "Wisconsin", wp = "%l", commonscat = "%l, %c"}, ["Raleigh"] = {container = "North Carolina"}, ["Nashville"] = {container = "Tennessee"}, ["Virginia Beach"] = {container = "Virginia"}, ["Norfolk"] = {container = "Virginia"}, ["Greensboro"] = {container = "North Carolina"}, ["Winston-Salem"] = {container = "North Carolina"}, ["Jacksonville"] = {container = "Florida"}, ["New Orleans"] = {container = "Louisiana", wp = "%l"}, ["Louisville"] = {container = "Kentucky"}, ["Greenville"] = {container = "South Carolina"}, ["Hartford"] = {container = "Connecticut"}, ["Oklahoma City"] = {container = "Oklahoma", wp = "%l"}, ["Grand Rapids"] = {container = "Michigan"}, ["Memphis"] = {container = "Tennessee"}, ["Birmingham, Alabama"] = {container = "Alabama"}, ["Birmingham"] = {alias_of = "Birmingham, Alabama"}, ["Fresno"] = {container = "California"}, ["Richmond"] = {container = "Virginia"}, ["Harrisburg"] = {container = "Pennsylvania"}, -- any major city of top 50 MSA's that's missed by previous ["Buffalo"] = {container = "New York"}, -- any of the top 50 city by city population that's missed by previous ["El Paso"] = {container = "Texas"}, ["Albuquerque"] = {container = "New Mexico"}, ["Tucson"] = {container = "Arizona"}, ["Colorado Springs"] = {container = "Colorado"}, ["Omaha"] = {container = "Nebraska"}, ["Tulsa"] = {container = "Oklahoma"}, -- skip Arlington, Texas; too obscure and likely to be interpreted as Arlington, Virginia } export.united_states_cities_group = { default_container = "United States", canonicalize_key_container = make_canonicalize_key_container(", USA", "state"), default_placetype = "city", default_wp = "%l, %c", data = export.united_states_cities, } export.new_york_boroughs = { ["Bronx"] = {the = true, wp = "The Bronx"}, ["Brooklyn"] = {}, ["Manhattan"] = {}, ["Queens"] = {}, ["Staten Island"] = {}, } export.new_york_boroughs_group = { default_container = {key = "New York City", placetype = "city"}, default_placetype = "borough", default_is_city = true, data = export.new_york_boroughs, } export.vietnam_cities = { -- Figures from citypopulation.de (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated. ["Ho Chi Minh City"] = {}, -- 14,300,000 (Agglomeration; inclunding Bien Hoa) ["Saigon"] = {alias_of = "Ho Chi Minh City"}, ["Hanoi"] = {}, -- 7,350,000 (Agglomeration) ["Da Nang"] = {}, -- 1,500,000 (Agglomeration) ["Danang"] = {alias_of = "Da Nang", display = true}, ["Haiphong"] = {}, -- 1,450,000 (Agglomeration) ["Hai Phong"] = {alias_of = "Haiphong", display = true}, -- This is the one entry in this list that is not a province-level municipality; instead it's a "provincial city" -- meaning it is directly under its province as opposed to being contained in a district. ["Bien Hoa"] = {placetype = "city", container = "Đồng Nai", wp = "Biên Hòa"}, -- 1,272,235 (2022 city population per Wikipedia) ["Biên Hòa"] = {alias_of = "Bien Hoa", display = true}, ["Biên Hoà"] = {alias_of = "Bien Hoa", display = true}, -- These two not in citypopulation.de because the urban population may be slightly under 1,000,000, but they are -- both province-level municipalities and close to the 1,000,000 mark. ["Can Tho"] = {wp = "Cần Thơ"}, -- 1,456,000 municipality (2019 census), 994,704 urban (2022 General Statistics Office of Vietnam estimate); capital [[Ninh Kiều district]] ["Cần Thơ"] = {alias_of = "Can Tho", display = true}, ["Hue"] = {wp = "Huế"}, -- 1,257,000 municipality (2019 census), 840,000 urban (2022 General Statistics Office of Vietnam estimate); -- capital [[Thuận Hóa district]] ["Huế"] = {alias_of = "Hue", display = true}, } export.vietnam_cities_group = { placename_to_key = false, -- don't add ", Vietnam" to make the key default_container = "Vietnam", canonicalize_key_container = make_canonicalize_key_container(" Province, Vietnam", "province"), -- Most of the cities listed are province-level municipalities in addition, which contain a certain amount of -- rural territory surrounding the city, but not enough to separate the municipality from the city as distinct -- known locations. default_placetype = {"municipality", "city"}, default_is_city = true, -- There may not be enough districts to subcategorize like this. -- default_divs = "districts", data = export.vietnam_cities, } export.misc_cities = { ------------------ Africa ------------------- -- Sorted by country and then within the country, by decreasing population; figures from citypopulation.de -- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated; combined with data from -- [[w:List of urban areas in Africa by population]]. ["Algiers"] = {container = "Algeria"}, -- 4,325,000 (Consolidated Urban Area) ["Oran"] = {container = "Algeria"}, -- 1,640,000 (Consolidated Urban Area) ["Luanda"] = {container = "Angola"}, -- 9,650,000 (Urban Area) ["Benguela"] = {container = "Angola"}, -- 1,420,000 (Urban Area) ["Cotonou"] = {container = "Benin"}, -- 2,150,000 (Agglomeration) ["Ouagadougou"] = {container = "Burkina Faso"}, -- 3,425,000 (Agglomeration) ["Bobo-Dioulasso"] = {container = "Burkina Faso"}, -- 1,100,000 (Agglomeration) ["Bujumbura"] = {container = "Burundi"}, -- 1,143,202 (Urban Area 2023 per PopulationStat, cited in Wikipedia) ["Yaoundé"] = {container = "Cameroon"}, -- 3,975,000 (City) ["Yaounde"] = {alias_of = "Yaoundé", display = true}, ["Douala"] = {container = "Cameroon"}, -- 3,900,000 (City) ["Bangui"] = {container = "Central African Republic"}, -- 1,680,000 (Agglomeration) ["N'Djamena"] = {container = "Chad"}, -- 1,950,000 (City) ["Ndjamena"] = {alias_of = "N'Djamena", display = true}, ["Kinshasa"] = {container = "Democratic Republic of the Congo"}, -- 16,300,000 (City; population of low reliability) ["Lubumbashi"] = {container = "Democratic Republic of the Congo"}, -- 2,875,000 (City; population of low reliability) ["Mbuji-Mayi"] = {container = "Democratic Republic of the Congo"}, -- 2,500,000 (City; population of low reliability) ["Kananga"] = {container = "Democratic Republic of the Congo"}, -- 1,370,000 (City; population of low reliability) ["Kisangani"] = {container = "Democratic Republic of the Congo"}, -- 1,300,000 (City; population of low reliability) ["Bukavu"] = {container = "Democratic Republic of the Congo"}, -- 1,100,000 (City; population of low reliability) ["Goma"] = {container = "Democratic Republic of the Congo"}, -- 1,010,000 (City; population of low reliability) ["Tshikapa"] = {container = "Democratic Republic of the Congo"}, -- 1,020,468 (2023 Wikipedia [[w:List of cities with over one million inhabitants]] from populationstat.com; not in citypopulation.de) ["Cairo"] = {container = "Egypt"}, -- 22,800,000 (Agglomeration, including Giza and Subhra El Kheima) ["Alexandria"] = {container = "Egypt"}, -- 6,250,000 (Agglomeration) ["Giza"] = {container = "Egypt"}, -- 4,458,135 (2023 from citypopulation.de) ["Shubra El Kheima"] = {container = "Egypt"}, -- 1,240,239 (2021 from citypopulation.de) ["Asmara"] = {container = "Eritrea"}, -- 1,090,000 (City; population of low reliability) ["Asmera"] = {alias_of = "Asmara", display = true}, ["Addis Ababa"] = {container = "Ethiopia"}, -- 4,825,000 (Agglomeration) ["Banjul"] = {container = "Gambia"}, -- 1,170,000 (Agglomeration) ["Accra"] = {container = "Ghana"}, -- 6,800,000 (Agglomeration) ["Kumasi"] = {container = "Ghana"}, -- 2,900,000 (Agglomeration) ["Conakry"] = {container = "Guinea"}, -- 2,975,000 (Consolidated Urban Area) ["Abidjan"] = {container = "Ivory Coast"}, -- 7,050,000 (Agglomeration) ["Nairobi"] = {container = "Kenya"}, -- 6,900,000 (unindicated) ["Mombasa"] = {container = "Kenya"}, -- 1,370,000 (City) ["Monrovia"] = {container = "Liberia"}, -- 1,940,000 (Urban Area) ["Tripoli"] = {container = "Libya", wp = "%l, %c"}, -- 1,870,000 (unindicated) ["Antananarivo"] = {container = "Madagascar"}, -- 3,150,000 (Agglomeration) ["Lilongwe"] = {container = "Malawi"}, -- 1,210,000 (City) ["Bamako"] = {container = "Mali"}, -- 5,700,000 (Agglomeration) ["Nouakchott"] = {container = "Mauritania"}, -- 1,500,000 (City) ["Casablanca"] = {container = {key = "Casablanca-Settat, Morocco", placetype = "region"}}, -- 4,450,000 (Municipality (urban population)) ["Rabat"] = {container = {key = "Rabat-Sale-Kenitra, Morocco", placetype = "region"}}, -- 2,125,000 (Municipality (urban population)) ["Tangier"] = {container = {key = "Tangier-Tetouan-Al Hoceima, Morocco", placetype = "region"}}, -- 1,410,000 (Municipality (urban population)) ["Tanger"] = {alias_of = "Tangier", display = true}, ["Tangiers"] = {alias_of = "Tangier", display = true}, ["Fez"] = {container = {key = "Fez-Meknes, Morocco", placetype = "region"}, wp = "%l, Morocco"}, -- 1,310,000 (Municipality (urban population)) ["Fes"] = {alias_of = "Fez", display = true}, ["Fès"] = {alias_of = "Fez", display = true}, ["Agadir"] = {container = {key = "Souss-Massa, Morocco", placetype = "region"}}, -- 1,270,000 (Municipality (urban population)) ["Marrakesh"] = {container = {key = "Marrakesh-Safi, Morocco", placetype = "region"}}, -- 1,140,000 (Municipality (urban population)) ["Marrakech"] = {alias_of = "Marrakesh", display = true}, ["Maputo"] = {container = "Mozambique"}, -- 2,575,000 (Agglomeration) ["Niamey"] = {container = "Niger"}, -- 1,530,000 (City) ["Brazzaville"] = {container = "Republic of the Congo"}, -- 2,475,000 (Agglomeration) ["Pointe-Noire"] = {container = "Republic of the Congo"}, -- 1,480,000 (City) ["Kigali"] = {container = "Rwanda"}, -- 1,960,000 (Municipality (urban population)) ["Dakar"] = {container = "Senegal"}, -- 4,225,000 (Agglomeration) ["Touba"] = {container = "Senegal"}, -- 1,320,000 (Agglomeration) ["Freetown"] = {container = "Sierra Leone"}, -- 1,420,000 (Agglomeration) ["Mogadishu"] = {container = "Somalia"}, -- 2,250,000 (unindicated; population of low reliability) ["Johannesburg"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 14,800,000 (Consolidated Urban Area; including Pretoria, Soweto, etc.) ["Cape Town"] = {container = {key = "Western Cape, South Africa", placetype = "province"}}, -- 5,100,000 (Consolidated Urban Area) ["Durban"] = {container = {key = "KwaZulu-Natal, South Africa", placetype = "province"}}, -- 3,900,000 (Consolidated Urban Area) ["Pretoria"] = {container = {key = "Gauteng, South Africa", placetype = "province"}}, -- 2,921,488 (2011 census) ["Port Elizabeth"] = {container = {key = "Eastern Cape, South Africa", placetype = "province"}, wp = "Gqeberha"}, -- 1,200,000 (Consolidated Urban Area) ["Gqeberha"] = {alias_of = "Port Elizabeth"}, -- official name; not a display alias ["Khartoum"] = {container = "Sudan"}, -- 7,200,000 (unindicated; population of low reliability) ["Dar es Salaam"] = {container = "Tanzania"}, -- 6,650,000 (Agglomeration) ["Mwanza"] = {container = "Tanzania"}, -- 1,340,000 (Agglomeration) ["Mwanza City"] = {alias_of = "Mwanza", display = true}, ["Arusha"] = {container = "Tanzania"}, -- 1,190,000 (Agglomeration) ["Zanzibar"] = {container = "Tanzania"}, -- 1,030,000 (Agglomeration) ["Lomé"] = {container = "Togo"}, -- 2,625,000 (unindicated) ["Lome"] = {alias_of = "Lomé", display = true}, ["Tunis"] = {container = "Tunisia"}, -- 2,725,000 (Municipality (urban population)) ["Sousse"] = {container = "Tunisia"}, -- 1,180,000 (Municipality (urban population)) ["Soussa"] = {alias_of = "Sousse", display = true}, ["Kampala"] = {container = "Uganda"}, -- 4,300,000 (unindicated) ["Lusaka"] = {container = "Zambia"}, -- 3,000,000 (Consolidated Urban Area) ["Harare"] = {container = "Zimbabwe"}, -- 2,675,000 (Agglomeration) ------------------ Asia ------------------- -- sorted by country and then within the country, by decreasing population; figures from citypopulation.de -- (retrieved 2025-04-26; reference date 2025-01-01) unless otherwise indicated. ["Kabul"] = {container = "Afghanistan"}, -- 5,250,000 (Agglomeration) ["Baku"] = {container = "Azerbaijan"}, -- 3,725,000 (Administrative Area (urban population)) ["Manama"] = {container = "Bahrain"}, -- 1,560,000 (unindicated) ["Dhaka"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 23,100,000 (Agglomeration) ["Dacca"] = {alias_of = "Dhaka", display = true}, ["Chittagong"] = {container = {key = "Chittagong Division, Bangladesh", placetype = "division"}}, -- 5,050,000 (Agglomeration) ["Gazipur"] = {container = {key = "Dhaka Division, Bangladesh", placetype = "division"}}, -- 2,674,697 (City per 2022; countied in citypopulation.de as part of Dhaka metro area) ["Khulna"] = {container = {key = "Khulna Division, Bangladesh", placetype = "division"}}, -- 1,210,000 (Agglomeration) ["Phnom Penh"] = {container = "Cambodia"}, -- 2,925,000 (Agglomeration) ["Tehran"] = {container = {key = "Tehran Province, Iran", placetype = "province"}}, -- 16,800,000 (Agglomeration) ["Teheran"] = {alias_of = "Tehran", display = true}, ["Mashhad"] = {container = {key = "Razavi Khorasan Province, Iran", placetype = "province"}}, -- 3,475,000 (Agglomeration) ["Mashad"] = {alias_of = "Mashhad", display = true}, ["Meshhed"] = {alias_of = "Mashhad", display = true}, ["Meshed"] = {alias_of = "Mashhad", display = true}, ["Isfahan"] = {container = {key = "Isfahan Province, Iran", placetype = "province"}}, -- 3,425,000 (Agglomeration) ["Esfahan"] = {alias_of = "Isfahan", display = true}, ["Tabriz"] = {container = {key = "East Azerbaijan Province, Iran", placetype = "province"}}, -- 1,970,000 (Agglomeration) ["Shiraz"] = {container = {key = "Fars Province, Iran", placetype = "province"}}, -- 1,950,000 (Agglomeration) ["Ahvaz"] = {container = {key = "Khuzestan Province, Iran", placetype = "province"}}, -- 1,550,000 (Agglomeration) ["Qom"] = {container = {key = "Qom Province, Iran", placetype = "province"}}, -- 1,450,000 (City) ["Kermanshah"] = {container = {key = "Kermanshah Province, Iran", placetype = "province"}}, -- 1,130,000 (City) ["Baghdad"] = {container = "Iraq"}, -- 7,800,000 (Administrative Area (urban population)) ["Basra"] = {container = "Iraq"}, -- 1,710,000 (Administrative Area (urban population)) ["Mosul"] = {container = "Iraq"}, -- 1,550,000 (Administrative Area (urban population)) ["Erbil"] = {container = "Iraq"}, -- 1,220,000 (Administrative Area (urban population)) ["Kirkuk"] = {container = "Iraq"}, -- 1,160,000 (Administrative Area (urban population)) ["Najaf"] = {container = "Iraq"}, -- 1,050,000 (Administrative Area (urban population)) ["Tel Aviv"] = {container = "Israel"}, -- 3,000,000 (Agglomeration) -- Jerusalem is not recognized internationally as part of either Israel or Palestine, but as a -- [[w:corpus separatum]], so put the container as "Asia" and list Israel and Palestine as additional parents for -- categorization purposes. ["Jerusalem"] = {container = {key = "Asia", placetype = "continent"}, addl_parents = {"Israel", "Palestine"}}, -- 1,080,000 (Agglomeration) ["Amman"] = {container = "Jordan"}, -- 6,150,000 (unindicated) ["Irbid"] = {container = "Jordan"}, -- 1,070,000 (unindicated) ["Almaty"] = {container = "Kazakhstan"}, -- 2,700,000 (Agglomeration) ["Alma-Ata"] = {alias_of = "Almaty"}, -- former name, sometimes still used; don't display-canonicalize ["Astana"] = {container = "Kazakhstan"}, -- 1,600,000 (Agglomeration) ["Shymkent"] = {container = "Kazakhstan"}, -- 1,370,000 (Agglomeration) ["Kuwait City"] = {container = "Kuwait"}, -- 5,050,000 (Agglomeration) ["Bishkek"] = {container = "Kyrgyzstan"}, -- 1,540,000 (Agglomeration) ["Beirut"] = {container = "Lebanon"}, -- 1,930,000 (unindicated; population of low reliability) -- Kuala Lumpur is a federal capital city, not in any state ["Kuala Lumpur"] = {container = "Malaysia"}, -- 9,550,000 (Agglomeration) -- there are various George Towns and Georgetowns ["George Town, Malaysia"] = {container = {key = "Penang, Malaysia", placetype = "state"}, wp = "%l, %c"}, -- 2,075,000 (Agglomeration) ["George Town"] = {alias_of = "George Town, Malaysia"}, ["Ulaanbaatar"] = {container = "Mongolia"}, -- 1,610,000 (City) ["Ulan Bator"] = {alias_of = "Ulaanbaatar", display = true}, ["Yangon"] = {container = "Myanmar"}, -- 5,650,000 (Municipality (urban population)) ["Rangoon"] = {alias_of = "Yangon", display = true}, ["Mandalay"] = {container = "Myanmar"}, -- 1,600,000 (Municipality (urban population)) ["Kathmandu"] = {container = "Nepal"}, -- 3,175,000 (Agglomeration) -- Pyongyang is a directly governed city, not in any province ["Pyongyang"] = {container = "North Korea"}, -- 3,025,000 (Administrative Area (urban population)) ["Muscat"] = {container = "Oman"}, -- 1,620,000 (Agglomeration) ["Gaza"] = {container = "Palestine", wp = "Gaza City"}, -- 2,275,000 (unindicated) ["Gaza City"] = {alias_of = "Gaza"}, ["Doha"] = {container = "Qatar"}, -- 2,650,000 (Agglomeration) ["Colombo"] = {container = "Sri Lanka"}, -- 4,975,000 (unindicated) ["Damascus"] = {container = "Syria"}, -- 3,975,000 (unindicated; population of low reliability) ["Aleppo"] = {container = "Syria"}, -- 1,980,000 (unindicated; population of low reliability) ["Dushanbe"] = {container = "Tajikistan"}, -- 1,270,000 (City) ["Bangkok"] = {container = "Thailand"}, -- 21,800,000 (Agglomeration) -- Chiang Mai not in citypopulation.de, but 1,198,000 urban population in 2021 per Wikipedia -- [[w:List_of_municipalities_in_Thailand#Largest_cities_by_urban_population]] ["Chiang Mai"] = {container = {key = "Chiang Mai Province, Thailand", placetype = "province"}}, ["Chonburi"] = {container = {key = "Chonburi Province, Thailand", placetype = "province"}}, -- 1,570,000 (Agglomeration; including Pattaya) -- metro area population stats from https://www.statista.com/statistics/255483/biggest-cities-in-turkey/ as of 2021; -- second source is citypopulation.de reference date 2025-01-01. ["Istanbul"] = {placetype = {"city", "province"}, divs = {"districts"}, container = "Turkey"}, -- 15.2 million; 16,000,000 (Agglomeration) ["İstanbul"] = {alias_of = "Istanbul", display = true}, ["Ankara"] = {container = {key = "Ankara Province, Turkey", placetype = "province"}}, -- 5.15 million; 5,200,000 (Agglomeration) ["Izmir"] = {container = {key = "İzmir Province, Turkey", placetype = "province"}, wp = "İzmir"}, -- 2.95 million; 3,025,000 (Agglomeration) ["İzmir"] = {alias_of = "Izmir", display = true}, ["Bursa"] = {container = {key = "Bursa Province, Turkey", placetype = "province"}}, -- 2.02 million; 2,200,000 (Agglomeration) ["Adana"] = {container = {key = "Adana Province, Turkey", placetype = "province"}}, -- 1.77 million; 1,780,000 (Agglomeration) ["Gaziantep"] = {container = {key = "Gaziantep Province, Turkey", placetype = "province"}}, -- 1.71 million; 1,750,000 (Agglomeration) ["Antalya"] = {container = {key = "Antalya Province, Turkey", placetype = "province"}}, -- 1.3 million; 1,400,000 (Agglomeration) ["Konya"] = {container = {key = "Konya Province, Turkey", placetype = "province"}}, -- 1.35 million; 1,390,000 (Agglomeration) ["Diyarbakır"] = {container = {key = "Diyarbakır Province, Turkey", placetype = "province"}}, -- 1.07 million; 1,100,000 (Agglomeration) -- Diyarbakır is more common per Ngrams and Google Scholar, but Diyarbakir is the Kurdish form, so we should not -- display-canonicalize to the Turkish form Diyarbakır. ["Diyarbakir"] = {alias_of = "Diyarbakır"}, ["Mersin"] = {container = {key = "Mersin Province, Turkey", placetype = "province"}}, -- 1.03 million; 1,060,000 (Agglomeration) ["Ashgabat"] = {container = "Turkmenistan"}, -- 1,150,000 (Agglomeration) ["Dubai"] = {container = "United Arab Emirates"}, -- 6,050,000 (Agglomeration; including Sharjah) ["Abu Dhabi"] = {container = "United Arab Emirates"}, -- 1,850,000 (City) ["Sharjah"] = {container = "United Arab Emirates"}, -- 1,800,000 (Metro area 2022-2023 per Wikipedia; separate from Dubai) ["Tashkent"] = {container = "Uzbekistan"}, -- 3,850,000 (unindicated) ["Sanaa"] = {container = "Yemen"}, -- 3,275,000 (City; population of low reliability) ["Sana'a"] = {alias_of = "Sanaa", display = true}, ["Aden"] = {container = "Yemen"}, -- 1,079,060 (?; 2023 estimate from World Population Review per Wikipedia) ------------------ Europe or Europe-like (Caucasus etc.) --------------------- ["Yerevan"] = {container = "Armenia"}, -- 1,520,000 (Agglomeration) ["Vienna"] = {container = "Austria"}, -- 2,375,000 (Agglomeration) ["Minsk"] = {container = "Belarus"}, -- 2,100,000 (unindicated) ["Brussels"] = {container = "Belgium"}, -- 2,800,000 (Consolidated Urban Area) ["Antwerp"] = {container = "Belgium"}, -- 1,270,000 (Consolidated Urban Area) ["Sofia"] = {container = "Bulgaria"}, -- 1,260,000 (Agglomeration) ["Zagreb"] = {container = "Croatia"}, ["Prague"] = {container = "Czech Republic"}, -- 1,470,000 (Agglomeration) ["Brno"] = {container = "Czech Republic"}, -- 729,405 (metro area per Wikipedia as of 2024-01-01 Czech Statistical Office) ["Olomouc"] = {container = "Czech Republic"}, -- 102,293 (city; included only because someone went crazy creating Olomouc-related terms) ["Copenhagen"] = {container = "Denmark"}, -- 1,800,000 (Consolidated Urban Area) ["Helsinki"] = {container = {key = "Uusimaa, Finland", placetype = "region"}}, -- 1,560,000 (Consolidated Urban Area) ["Tbilisi"] = {container = "Georgia"}, -- 1,430,000 (Agglomeration) ["Athens"] = {container = "Greece"}, ["Thessaloniki"] = {container = "Greece"}, ["Budapest"] = {container = "Hungary"}, -- FIXME, per Wikipedia "County Dublin" is now the "Dublin Region" ["Dublin"] = {container = {key = "County Dublin, Ireland", placetype = "county"}}, ["Riga"] = {container = "Latvia"}, ["Amsterdam"] = {container = {key = "North Holland, Netherlands", placetype = "province"}}, ["Rotterdam"] = {container = {key = "South Holland, Netherlands", placetype = "province"}}, ["The Hague"] = {container = {key = "South Holland, Netherlands", placetype = "province"}}, -- Christchurch (metro 546,600) and Wellington (metro 439,800) are too small to make it. ["Auckland"] = {container = {key = "Auckland, New Zealand", placetype = "region"}}, ["Oslo"] = {container = {key = "Oslo, Norway", placetype = "county"}}, ["Warsaw"] = {container = {key = "Masovian Voivodeship, Poland", placetype = "voivodeship"}}, ["Katowice"] = {container = {key = "Silesian Voivodeship, Poland", placetype = "voivodeship"}}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Krakow" without accent. ["Krakow"] = {container = {key = "Lesser Poland Voivodeship, Poland", placetype = "voivodeship"}, wp = "Kraków"}, ["Kraków"] = {alias_of = "Krakow", display = true}, ["Cracow"] = {alias_of = "Krakow", display = true}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirm "Gdańsk" and "Poznań" with accent. ["Gdańsk"] = {container = {key = "Pomeranian Voivodeship, Poland", placetype = "voivodeship"}}, ["Gdansk"] = {alias_of = "Gdańsk", display = true}, ["Poznań"] = {container = {key = "Greater Poland Voivodeship, Poland", placetype = "voivodeship"}}, ["Poznan"] = {alias_of = "Poznań", display = true}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Lodz" without accents. ["Lodz"] = {container = {key = "Lodz Voivodeship, Poland", placetype = "voivodeship"}, wp = "Łódź"}, ["Łódź"] = {alias_of = "Lodz", display = true}, ["Lisbon"] = {container = {key = "Lisbon District, Portugal", placetype = "district"}}, ["Porto"] = {container = {key = "Porto District, Portugal", placetype = "district"}}, ["Oporto"] = {alias_of = "Porto", display = true}, ["Bucharest"] = {container = "Romania"}, ["Belgrade"] = {container = "Serbia"}, ["Stockholm"] = {container = "Sweden"}, ["Zurich"] = {container = "Switzerland"}, --- Ngrams (up through 2022) and Google Scholar (>= 2024) confirms the common form "Zurich" without umlaut. --- Even Wikipedia uses the form without umlaut. ["Zürich"] = {alias_of = "Zurich", display = true}, ["Kyiv"] = {container = "Ukraine"}, -- not in Kyiv Oblast -- Don't display-canonicalize Kiev -> Kyiv because in ancient contexts, Kiev is still more common. ["Kiev"] = {alias_of = "Kyiv"}, ["Kharkiv"] = {container = {key = "Kharkiv Oblast, Ukraine", placetype = "oblast"}}, ["Odessa"] = {container = {key = "Odesa Oblast, Ukraine", placetype = "oblast"}, wp = "Odesa"}, -- Don't display-canonicalize Odesa -> Odessa because it may be interpreted as a political statement. ["Odesa"] = {alias_of = "Odessa"}, ------------------ North America, South America --------------------- -- Primary figures from citypopulation.de retrieved on 2025-04-26 (reference date 2025-01-01); -- Wikipedia metropolitan figures from [[w:List of metropolitan areas in the Americas]] based on per-country data; -- Wikipedia city limits figures from [[w:List of largest cities in the Americas]]. ["Buenos Aires"] = {container = "Argentina"}, -- 16,800,000 (Consolidated Urban Area; 13,985,794 metropolitan area per Wikipedia) ["Córdoba, Argentina"] = {container = "Argentina", wp = "%l, %c"}, -- 1,810,000 (Consolidated Urban Area; 1,505,25 city limits per Wikipedia) -- to avoid confusion with Córdoba in Spain ["Córdoba"] = {alias_of = "Córdoba, Argentina"}, ["Cordoba"] = {alias_of = "Córdoba, Argentina", display = "Córdoba"}, ["Rosario"] = {container = "Argentina", wp = "%l, Santa Fe"}, -- 1,510,000 (Consolidated Urban Area; 1,348,725 metropolitan area per Wikipedia) ["Mendoza"] = {container = "Argentina", wp = "%l, %c"}, -- 1,180,000 (Consolidated Urban Area) ["San Miguel de Tucumán"] = {container = "Argentina"}, -- 1,110,000 (Consolidated Urban Area) ["Tucumán"] = {alias_of = "San Miguel de Tucumán"}, ["Tucuman"] = {alias_of = "San Miguel de Tucumán", display = "Tucumán"}, ["Santa Cruz de la Sierra"] = {container = "Bolivia"}, -- 1,960,000 (Consolidated Urban Area); 1,606,671 (city limits per Wikipedia) ["Santa Cruz"] = {alias_of = "Santa Cruz de la Sierra"}, ["La Paz"] = {container = "Bolivia"}, -- 1,870,000 (Consolidated Urban Area; composed of El Alto, now slightly larger, and La Paz) ["El Alto"] = {container = "Bolivia"}, ["Cochabamba"] = {container = "Bolivia"}, -- 1,280,000 (Consolidated Urban Area) ["Santiago"] = {container = "Chile"}, -- 8,400,000 (Consolidated Urban Area; 6,903,479 city limits? per Wikipedia) ["Valparaíso"] = {container = "Chile"}, -- 1,060,000 (Consolidated Urban Area) ["Valparaiso"] = {alias_of = "Valparaíso"}, -- 1,060,000 (Consolidated Urban Area) ["Bogotá"] = {container = "Colombia"}, -- 10,600,000 (Agglomeration; 12,772,828 metropolitan area per Wikipedia) ["Bogota"] = {alias_of = "Bogotá", display = true}, ["Medellín"] = {container = "Colombia"}, -- 4,350,000 (Agglomeration; 4,068,000 metropolitan area per Wikipedia) ["Medellin"] = {alias_of = "Medellín", display = true}, ["Cali"] = {container = "Colombia"}, -- 2,975,000 (Agglomeration; 2,837,000 metropolitan area per Wikipedia) ["Barranquilla"] = {container = "Colombia"}, -- 2,375,000 (Agglomeration; 1,341,160 city limits per Wikipedia) ["Bucaramanga"] = {container = "Colombia"}, -- 1,380,000 (Agglomeration) ["Cartagena, Colombia"] = {container = "Colombia", wp = "%l, %c"}, -- 1,250,000 (Agglomeration) -- to avoid confusion with Cartagena, Spain ["Cartagena"] = {alias_of = "Cartagena, Colombia"}, ["Cúcuta"] = {container = "Colombia"}, -- 1,130,000 (Agglomeration) ["Cucuta"] = {alias_of = "Cúcuta", display = true}, -- to avoid conflict with San Jose, California ["San José, Costa Rica"] = {container = "Costa Rica", wp = "%l, %c"}, -- 2,450,000 (Municipality (urban population); 3,160,000 metropolitan area per Wikipedia) ["San José"] = {alias_of = "San José, Costa Rica"}, ["San Jose"] = {alias_of = "San José, Costa Rica"}, -- display = "San José"; causes error due to San Jose alias for California city; FIXME ["Havana"] = {container = "Cuba"}, -- 2,150,000 (City; 2,137,847 city limits? per Wikipedia) ["Santo Domingo"] = {container = "Dominican Republic"}, -- 3,900,000 (Municipality (urban population); 4,274,651 ??? per Wikipedia) ["Guayaquil"] = {container = "Ecuador"}, -- 3,350,000 (Agglomeration; 3,092,000 metro area? per Wikipedia) ["Quito"] = {container = "Ecuador"}, -- 2,875,000 (Agglomeration; 2,889,703 metro area? per Wikipedia) ["San Salvador"] = {container = "El Salvador"}, -- 1,580,000 (Municipality (urban population)) ["Guatemala City"] = {container = "Guatemala"}, -- 3,375,000 (Municipality (urban population); 3,160,000 metro area? per Wikipedia) ["Port-au-Prince"] = {container = "Haiti"}, -- 3,050,000 (Agglomeration; population of low reliability; 2,915,000 metro area? per Wikipedia) ["San Pedro Sula"] = {container = "Honduras"}, -- 1,330,000 (Consolidated Urban Area) ["Tegucigalpa"] = {container = "Honduras"}, -- 1,220,000 (Urban Area) ["Managua"] = {container = "Nicaragua"}, -- 1,400,000 (Consolidated Urban Area) ["Panama City"] = {container = "Panama"}, -- 1,430,000 (Urban Area) ["Asunción"] = {container = "Paraguay"}, -- 2,350,000 (Municipality (urban population)) ["Lima"] = {container = "Peru"}, -- 12,000,000 (Agglomeration; 11,283,787 ??? per Wikipedia) ["Arequipa"] = {container = "Peru"}, -- 1,210,000 (Agglomeration) ["San Juan"] = {container = {key = "Puerto Rico", placetype = "commonwealth"}, wp = "%l, %c"}, -- 1,910,000 (Consolidated Urban Area) ["Montevideo"] = {container = "Uruguay"}, -- 1,810,000 (Agglomeration; 1,302,954 ??? per Wikipedia) ["Caracas"] = {container = "Venezuela"}, -- 3,850,000 (Consolidated Urban Area; 5,243,301 ??? per Wikipedia) ["Maracaibo"] = {container = "Venezuela"}, -- 2,825,000 (Consolidated Urban Area; 5,278,448 ??? per Wikipedia) -- to avoid confusion with Valencia (city and autonomous community of Spain) ["Valencia, Venezuela"] = {container = "Venezuela", wp = "%l, %c"}, -- 2,100,000 (Consolidated Urban Area) ["Valencia"] = {alias_of = "Valencia, Venezuela"}, ["Maracay"] = {container = "Venezuela"}, -- 1,480,000 (Consolidated Urban Area) ["Barquisimeto"] = {container = "Venezuela"}, -- 1,360,000 (Consolidated Urban Area) } export.misc_cities_group = { canonicalize_key_container = make_canonicalize_key_container(nil, "quốc gia"), default_placetype = "city", data = export.misc_cities, } --[==[ var: List of all known locations, in groups. The first group lists continents and continental regions, followed by three groups listing top-level locations: countries, "country-like entities" (de-facto/unrecognized/etc. countries and dependent territories) and former polities (countries, empires, etc.). After that come first-level subpolities (administrative divisions) of several, mostly large, countries, followed by groups of cities. China and the United Kingdom include second-level subpolities (in the case of China, only the largest ones as the full list runs in the hundreds). ]==] export.locations = { export.continents_group, export.countries_group, export.country_like_entities_group, export.former_countries_group, export.australia_group, export.austria_group, export.bangladesh_group, export.brazil_group, export.bulgaria_group, export.canada_group, export.china_group, export.china_prefecture_level_cities_group, export.china_prefecture_level_cities_group_2, export.egypt_group, export.finland_group, export.france_group, export.france_departments_group, export.germany_group, export.greece_group, export.india_group, export.indonesia_group, export.iran_group, export.ireland_group, export.italy_group, export.japan_group, export.laos_group, export.lebanon_group, export.malaysia_group, export.malta_group, export.mexico_group, export.moldova_group, export.morocco_group, export.netherlands_group, export.new_zealand_group, export.nigeria_group, export.north_korea_group, export.norway_group, export.pakistan_group, export.philippines_group, export.poland_group, export.portugal_group, export.romania_group, export.russia_group, export.saudi_arabia_group, export.south_africa_group, export.south_korea_group, export.spain_group, export.taiwan_group, export.thailand_group, export.turkey_group, export.ukraine_group, export.united_kingdom_group, export.united_states_group, export.england_group, export.northern_ireland_group, export.scotland_group, export.wales_group, export.vietnam_group, export.australia_cities_group, export.brazil_cities_group, export.canada_cities_group, export.france_cities_group, export.germany_cities_group, export.india_cities_group, export.indonesia_cities_group, export.italy_cities_group, export.japan_cities_group, export.mexico_cities_group, export.nigeria_cities_group, export.pakistan_cities_group, export.philippines_cities_group, export.russia_cities_group, export.saudi_arabia_cities_group, export.south_korea_cities_group, export.spain_cities_group, export.taiwan_cities_group, export.united_kingdom_cities_group, export.united_states_cities_group, export.new_york_boroughs_group, export.vietnam_cities_group, export.misc_cities_group, } return export qd1j32nym7ex1rr7be159j1aq4j6aju даст 0 282592 2349961 2103333 2026-05-03T14:15:52Z Kelly zhrm 58416 2349961 wikitext text/x-wiki =={{langname|ru}}== ==={{ĐM|pron}}=== * {{ru-IPA}} ==={{ĐM|v}}=== {{head|ru|Biến thể hình thái động từ}} # {{inflection of|ru|дать||3|s|fut|ind|pfv}} =={{langname|tg}}== {{wp|tg:}} ==={{ĐM|etym}}=== {{inh+|tg|fa-cls|دَسْت}}.{{dercat|tg|fa-cls|pal|peo|ira-pro|iir-pro|ine-pro|inh=6}} ==={{ĐM|pron}}=== {{tg-IPA}} ==={{ĐM|n}}=== {{tg-noun|fa=دست}} # [[tay|Tay]]. ===={{ĐM|infl}}==== {{tg-infl-noun|anim=1}} {{C|tg|Giải phẫu học}} 4s90gxuamcwd03mj5xls6jby3o6ttzg ҷамъ 0 282692 2349951 2103582 2026-05-03T14:09:23Z Kelly zhrm 58416 2349951 wikitext text/x-wiki =={{langname|tg}}== ==={{ĐM|pron}}=== {{tg-IPA}} ==={{ĐM|n}}=== {{tg-noun|fa=جمع}} # {{lb|tg|grammar}} [[số nhiều|Số nhiều]]. ===={{ĐM|infl}}==== {{tg-infl-noun}} 7ssutgsoe31xlpj9fkzjgyv358wu7u8 коғаз 0 282718 2349955 2103636 2026-05-03T14:11:37Z Kelly zhrm 58416 2349955 wikitext text/x-wiki =={{langname|tg}}== ==={{ĐM|etym}}=== {{ety|tg|:inh|fa-cls:کَاغَذ|text=1|tree=1}} ==={{ĐM|pron}}=== {{tg-IPA}} ==={{ĐM|n}}=== {{tg-noun|fa=کاغذ}} # [[giấy|Giấy]]. cga3fyupnpxq54oif15vx5wi5vscg10 0 283574 2349988 2214528 2026-05-03T14:58:38Z ~2026-26863-48 61172 /* */ Sáng Ex150 2349988 wikitext text/x-wiki Sáng Ex150 == {{langname|mul}} == === {{ĐM|symbol}} === {{mul-symbol|head={{PAGENAME}}&#xFE0E;}} # {{label|mul|cards}} Chất [[cơ]]. # [[tình yêu|Tình yêu]]. # Trái [[tim]]. # {{label|mul|video games}} [[mạng|Mạng]]. # {{label|mul|video games}} [[máu|Máu]], [[HP]]. # {{label|mul|video games}} Hồi máu. # Một biểu tượng cảm xúc được dùng trong [[manga]] Nhật Bản, thể hiện giọng điệu dịu dàng, với ý [[hạnh phúc]], [[yêu thích]] hoặc [[ham muốn]], v.v. {{-synonym-}} * {{l|mul|<3}} {{-see also-}} {{bảng:chất bài Tây/mul}} [[Thể loại:Khối ký tự Miscellaneous Symbols|65]] {{C|mul|Tình yêu}} ldop3cypsz9qcj23ak2teq8kiy2coit 2349995 2349988 2026-05-03T15:02:15Z TheHighFighter2 42988 Đã lùi lại sửa đổi của [[Special:Contributions/~2026-26863-48|~2026-26863-48]] ([[User talk:~2026-26863-48|thảo luận]]) quay về phiên bản cuối của [[User:TheHighFighter2|TheHighFighter2]] 2214528 wikitext text/x-wiki {{also|♡|🧡|💛|💚|💙|💜|🖤|🤍|🤎|uni=auto}} {{character info}} {{character info/var|❤|💟}} == {{langname|mul}} == === {{ĐM|symbol}} === {{mul-symbol|head={{PAGENAME}}&#xFE0E;}} # {{label|mul|cards}} Chất [[cơ]]. # [[tình yêu|Tình yêu]]. # Trái [[tim]]. # {{label|mul|video games}} [[mạng|Mạng]]. # {{label|mul|video games}} [[máu|Máu]], [[HP]]. # {{label|mul|video games}} Hồi máu. # Một biểu tượng cảm xúc được dùng trong [[manga]] Nhật Bản, thể hiện giọng điệu dịu dàng, với ý [[hạnh phúc]], [[yêu thích]] hoặc [[ham muốn]], v.v. {{-synonym-}} * {{l|mul|<3}} {{-see also-}} {{bảng:chất bài Tây/mul}} [[Thể loại:Khối ký tự Miscellaneous Symbols|65]] {{C|mul|Tình yêu}} jbq12mnn406iug19sgxf094pli1r9k1 Thảo luận Thành viên:P. ĐĂNG 3 286760 2350119 2343824 2026-05-04T08:38:30Z PANG450m 61175 /* PANG450a, b, c, d, e */ 2350119 wikitext text/x-wiki <div style="border:1px solid #FDA; vertical-align:top; padding: 0.5em; background: #FFFFE5;"> <div style="margin-left:0.5em; margin-right: 0.5em; margin-bottom:1em; margin-top: 0.1em;"> <span style="font-size: 1.3rem;">'''Xin chào P. ĐĂNG! Chào mừng bạn đến với Wiktionary tiếng Việt!'''</span> <div class="plainlinks"><p style="margin-top:0.1em; margin-bottom: 1em;">Wiktionary là từ điển mở mà ai cũng đều có thể chỉnh sửa. Cách sử dụng và quy định có thể gây khó khăn cho bạn, nhưng hãy dần học hỏi và '''[[Wiktionary:Táo bạo|mạnh dạn đóng góp]]'''. Các thông tin dưới đây sẽ có thể giúp bạn sử dụng và chỉnh sửa Wiktionary.</p></div> </div> <!-- Quan trọng --> <div style="clear: both; margin-left: 1.5em; margin-right 1.5em; font-size: 100%;"> {| class="plainlinks" width="100%" style="margin:auto;" | style="text-align:center; padding:4px" | [[File:OOjs UI icon search-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Tìm kiếm|Tìm kiếm Wiktionary]]''' <br />Tìm hiểu cách tìm và tra cứu mục từ trên Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon lightbulb.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Yêu cầu mục từ|Yêu cầu mục từ]]'''<br />Nơi để bạn thêm những từ cần viết nhưng chưa có tại Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon userAvatar.svg|30px|link=|]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Cộng đồng|Cổng Cộng đồng Wiktionary tiếng Việt]]'''<br />Nơi tìm hiểu mọi thông tin về của Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon articleCheck-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Quy định và hướng dẫn|Quy định và hướng dẫn]]''' <br />Chính sách của Wiktionary là gì? Xin vui lòng đọc nó trước khi thực hiện chỉnh sửa! |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon edit-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Viết trang mới|Viết trang mới]]'''<br />Tham khảo cách viết trang hay mục từ mới tại Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon tray.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Chỗ thử|Chỗ thử]]'''<br />Nơi để bạn viết nháp và thử nghiệm. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon wikiText.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Sửa đổi|Thực hiện sửa đổi]]'''<br />Tham khảo hướng dẫn sửa đổi và cùng bắt đầu sửa đổi Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon helpNotice-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Bàn giúp đỡ|Bàn giúp đỡ]]'''<br />Nơi hỏi đáp khi gặp khó khăn trên Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon book-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Mục lục|Mục lục trợ giúp]]''' <br />Mục lục giúp bạn thông tin và hướng dẫn khác khi gặp khó khăn trong những lúc đóng góp! | style="text-align:center; padding:4px" | [[File:OOjs UI icon speechBubbles-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Thảo luận|Thảo luận chung]]'''<br />Nơi trao đổi ý kiến giữa bạn và các thành viên khác! |}</div> <div style="padding: 0.5em; background: #FEC; border: 1px solid #FDA; margin-top: 1em; font-size: 1em"> [[File:Vector sig vi.png|250px|right]] '''Hãy luôn nhớ rằng, sau khi viết thảo luận xong thì đừng quên bước quan trọng đó là ký tên ở phía sau thảo luận'''. Phương thức ký tên được sử dụng trong Wiktionary không phải là viết tên trực tiếp, nhưng xin hãy ký tên bằng cách sử dụng 4 dấu ngã (<code><nowiki>--~~~~</nowiki></code>) hoặc bằng cách nhấp vào nút chữ ký ([[File:OOUI JS signature icon LTR.svg|20px|border]]) trong cửa sổ chỉnh sửa của phiên bản trình soạn thảo mã nguồn thông thường.<br/> [[Wiktionary:Guestbook_for_non-Vietnamese_speakers|Welcome! If you are not good at Vietnamese or do not speak it, click here.]] </div> </div>&nbsp;--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 07:34, ngày 24 tháng 6 năm 2023 (UTC) == BQV == Bạn có muốn làm BQV ở Wiktionary này không? Nếu có hứng thú, mời bạn ra ứng cử ở [[Thảo luận Wiktionary:Bảo quản viên]]. Tôi muốn tuyển thêm BQV cho Wiktionary vì Wiktionary hiện tại không có BQV thường trực. Đây là môi trường thực tập tốt trước khi làm ĐPV bên Wikipedia. Hồi xưa, tôi cũng đóng góp cho cả hai dự án cùng một lúc (Wikipedia + Wiktionary). [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 13:32, ngày 2 tháng 8 năm 2023 (UTC) :@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Tôi hay hoạt động bên đây thật nhưng bên đây tôi có ít sửa đổi. Chỉ vài tuần trước tôi xin quyền lùi sửa để chống phá hoại nhưng không đủ yêu cầu thì BQV làm sao tôi ứng cử được. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:33, ngày 2 tháng 8 năm 2023 (UTC) ::Bên Wiktionary không có yêu cầu tối thiểu để làm BQV. Bạn có đóng góp bên Wikipedia thì ra ứng cử là ok rồi. Quan trọng là bạn có muốn vác tù và hàng tổng không thôi? [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 15:23, ngày 2 tháng 8 năm 2023 (UTC) :::@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Tất nhiên, nếu có cơ hội được công đồng giao phó thì tôi sẽ làm. Nhưng chắc tôi cần tích cực cày sửa đổi một thời gian vì hiện tại tôi có dưới 300 sửa đổi. Có thể, tôi nghĩ tôi sẽ tích cực bên dự án này vài tuần cái đã. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 15:27, ngày 2 tháng 8 năm 2023 (UTC) ::::Bạn tính vậy cũng được. Cày sửa đổi là dễ mà. 2 tuần sau, mời bạn tự ra ứng cử. Tôi sẽ ủng hộ. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 15:57, ngày 2 tháng 8 năm 2023 (UTC) == Mệt nhỉ? == Tụi này lì như trâu thật, mới chập sáng đòi vặt lông bẻ cổ tổ tông nhà tôi này. – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:43, ngày 3 tháng 8 năm 2023 (UTC) :@[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] Tôi qua đây thì gặp TTS. Haha MTRIRod với bạn Phú nói đúng, tên này ám tôi như ma ám rồi. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:44, ngày 3 tháng 8 năm 2023 (UTC) ::Mà hình như bên vi chưa cấm tên [https://vi.wikipedia.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:%C4%90%C3%B3ng_g%C3%B3p/%C4%90%E1%BB%ABng_b%C6%A1_S%C6%A1n_n%E1%BB%AFa,_S%C6%A1n_c%C3%B4_%C4%91%C6%A1n_l%E1%BA%AFm! này] thì phải? – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:48, ngày 3 tháng 8 năm 2023 (UTC) :::@[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] Chắc cấm sót, mà TTS chắc không dùng lại tk đó đâu. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:50, ngày 3 tháng 8 năm 2023 (UTC) ::::Đâu, vừa nhắc xong thì hình như mới chửi Nguyenmy kìa. – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:52, ngày 3 tháng 8 năm 2023 (UTC) :::::@[[Thành viên:P. ĐĂNG|P. ĐĂNG]] @[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] @[[Thành viên:Tryvix1509|Tryvix1509]] @[[Thành viên:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] Mà không biết tôi có nên đệ đơn cấm chỉ tên TTS này đến Nhóm Tin cậy & An toàn của tổ chức Wikimedia không nhỉ? – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 09:58, ngày 3 tháng 8 năm 2023 (UTC) ::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tổ chức này hoạt động như thế nào?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:03, ngày 3 tháng 8 năm 2023 (UTC) :::::::Tôi cũng chỉ [[m:WMF Global Ban Policy/vi|đọc thoáng qua sơ sơ về quy định cấm chỉ toàn hệ thống tổ chức này]], và thấy tổ chức hoạt động qua email ca@wikimedia.org – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:07, ngày 3 tháng 8 năm 2023 (UTC) ::::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Là cấm chỉ một tk toàn cầu bên meta đúng không?. Chắc không cần rồi và cũng không hiệu quả. Tôi nhớ không lầm TTS bị cấm toàn cục từ tk đầu tiên rồi. Hiện giờ dùng proxy thì cấm toàn cục gì nữa. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:10, ngày 3 tháng 8 năm 2023 (UTC) :::::::::Các tk rối của TTS như bạn nói chỉ bị khóa toàn cục = TTS vẫn chưa bị cấm chỉ trên toàn hệ thống. Tôi nghĩ biện pháp này là cách hay nhất để răn đe tên này, chắc tôi nghĩ để lúc khác làm sau vậy. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:17, ngày 3 tháng 8 năm 2023 (UTC) ::::::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Chẳng phải khóa toàn cầu là trên toàn hệ thống Wikipedia? TTS không dùng một tk cố định và dùng proxy. Cấm tk này thì sẽ nhảy qua tk khác bằng một IP khác. Đề xuất của bạn không rõ ràng, tôi chưa hiểu lắm. Nếu được thì làm ngay bây giờ luôn đi. Tôi mới báo cái tk của TTS lên meta cho tiếp viên cấm toàn cầu đấy, hai tk nãy giờ phá hoại hiện đang bị cấm. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:25, ngày 3 tháng 8 năm 2023 (UTC) == Bản mẫu cảnh báo mới == Cảm ơn bạn đã tạo bản mẫu cánh báo về việc sử dụng Wiktionary để quảng cáo. Nhưng tôi thấy bên Wikipedia tiếng Việt [[:w:vi:Bản mẫu:Spam|trang Bản mẫu:Spam]] là dùng để báo cáo liên kết rác, vì vậy xin phép tôi được đổi tên bản mẫu [[Đặc biệt:So sánh di động/2119930|từ "spam-1" thành "Cb1-spam"]]. Tôi không biết việc làm của tôi có đúng không do bên Wikipedia tiếng Việt cũng có [[:w:vi:Bản mẫu:Cb1-spam|bản mẫu tên như thế này]] chắc dùng để cảnh báo thành viên về việc thêm liên kết quảng cáo trong bài. Và nếu bạn thấy tôi sai mong bạn hãy lùi lại. Cảm ơn bạn. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:54, ngày 14 tháng 8 năm 2023 (UTC) :[[Thành viên:DefenderTienMinh07]]: Cảm ơn Tiến Minh. Nhưng lần sau bạn hãy đọc kỹ nội dung bản mẫu, bản mẫu này không phải cảnh báo thêm link spam mà là thông tin quảng cáo, tức là khi tv tạo bài PR (trang mới, PR trong trang thảo luận, hoặc chèn thông tin PR) thì dùng bản mẫu này. Mỗi wiktionary hoạt động độc lập, cộng đồng bên ta vốn nhỏ bé và ít người nên đặt tên bản mẫu đừng thêm vài chữ làm rườm rà khó nhớ, hầu hết thành viên không dùng Twinkle và đặt biển thủ công nên tôi chọn tên ngắn để các bạn dễ dùng. Nhưng nếu bạn đã đổi thì để vậy cũng được vì tôi đang cần làm thêm vài thứ, nâng cấp một vài thứ thiết yếu và để tên tạm như thế cũng được nếu tương lai có phát sinh thêm tôi sẽ thay đổi một vài bản mẫu cho phù hợp và nhất quán. Sẵn đây tôi hỏi bạn có dùng Twinkle không? Nếu có cho tôi xin một vài ý kiến có được không?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:25, ngày 16 tháng 8 năm 2023 (UTC) ::Do dự án đang trong phát triển về mảng tin học nên tôi nghĩ trang global.js trên Meta sẽ là giải pháp hay để cài công cụ. Các công cụ hữu ích tôi vừa tìm được cho dự án: Restorer của BrandonXLF, TwinkleGlobal của Xiplus và WarningDialog.js của Tryvix1509 và nhiều người khác. Tôi chưa hiểu câu hỏi bạn đặt ra cho lắm, nếu bạn đang hỏi về công cụ TwinkleMobile của Plantaest trên dự án này thì tôi nghĩ bạn nên hỏi Plantaest do công cụ vẫn chưa được Plantaest kích hoạt trên đây. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 18:07, ngày 17 tháng 8 năm 2023 (UTC) :::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Ý tôi là việc dùng Twinkle của bạn trên đây có giống bên Wikipedia không? Nó có chức năng gắn biển, cảnh báo hay chỉ dừng lại ở chức năng lùi sửa. Tôi không dùng Twinkle trên đây, nên tôi mới hỏi bạn để biết thêm thông tin do tôi cần nâng cấp một vài bản mẫu và muốn kích hoạt nó vô Twinkle, tôi muốn Twinkle bên đây được cấu hình lại cho tiện và đầy đủ chức năng giống bên các dự án khác cho các bạn dùng. Tôi sẽ làm trong phạm vi có thể, nhưng chắc sẽ cần thời gian. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:38, ngày 18 tháng 8 năm 2023 (UTC) ::::Việc dùng Twinkle trên đây của tôi chỉ là để phục vụ mục đích tuần tra TĐGĐ trong việc lùi tất cả sửa đổi không thiện chí do tôi chưa có quyền lùi sửa. Nếu bạn muốn công cụ có thể cảnh báo thành viên thì công cụ WarningDialog.js của Tryvix có thể giúp bạn trong trường hợp này. Bạn nên hỏi Tryvix xem sao (tôi đã ping @[[Thành viên:Tryvix1509|Tryvix1509]]) – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:14, ngày 21 tháng 8 năm 2023 (UTC) ::Quay lại chủ đề bản mẫu cảnh báo vừa tạo không biết có nên dùng bản mẫu '''khi mà trường hợp tài khoản đó bị chặn bởi bộ lọc sai phạm''' không chứ tôi ngày nào mà chả thấy mấy tài khoản spambot dùng Wiktionary để quảng cáo có chèn đường link không à dẫn tới việc bị chặn và bị ghi lại trong bộ lọc sai phạm mà không ai phát hiện ra. (bạn có thể xem đầy đủ tại [[Đặc biệt:Nhật trình sai phạm]]) – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:23, ngày 21 tháng 8 năm 2023 (UTC) :::[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Thế thì dùng vậy cũng được, để tôi chỉnh lại bản mẫu cho ý tựu chung hơn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:08, ngày 22 tháng 8 năm 2023 (UTC) == BQV == Rất vui vì bạn đã dũng cảm ra vác tù và hàng tổng. Tôi sẽ ủng hộ. Tuy nhiên, bạn cần gửi thư mời tham gia BQ BQV đến các thành viên trên Wiktionary (tv tích cực lẫn tv thỉnh thoảng xuất hiện). Chúc bạn đắc cử! [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 05:55, ngày 24 tháng 8 năm 2023 (UTC) :Tôi mới cấp quyền cho bạn. Chúc bạn tiếp tục hoạt động tích cực ở cả hai dự án, trao dồi thêm kinh nghiệm bảo quản và vài tháng nữa tự ra ứng cử làm ĐPV ở Wikipedia. Tôi sẽ ủng hộ nếu như không có gì thay đổi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 20:52, ngày 2 tháng 9 năm 2023 (UTC) == Thư mời tham gia biểu quyết == <div style="padding: 0.5em; background: #f8f8ff; margin-top: 1em; font-size: 1em"> {| class="table" style="width: 80%; background-color: #ACE1AF; border: 1px solid #fceb92; margin: auto; margin-bottom: 10px" | style="vertical-align: middle; padding: 10px;" | [[Tập tin:Logo vote.svg|80px|link=]] | style="vertical-align: middle; padding: 15px 10px 10px 0;" | '''Mời bạn cho ý kiến về việc cấp quyền Bảo quản viên cho thành viên [[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] tại trang [[Thảo luận Wiktionary:Bảo quản viên#DefenderTienMinh07|Thảo luận Wiktionary:Bảo quản viên]]. Xin cảm ơn. <small>Hãy cùng tích cực tham gia các biểu quyết và thảo luận về chúng. Mỗi hành động của bạn sẽ góp phần không nhỏ để xây dựng các mục từ trên Wiktionary - tài sản chung của cộng đồng chúng ta, giúp wiki ta ngày càng phát triển vững mạnh! Thân ái! |} </div> [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:25, ngày 24 tháng 8 năm 2023 (UTC) == Bất ngờ chưa! == Tôi tới đây là để thông báo một tin vui cho bạn. {{ý kiến|1=Tin vui là:}} Hiện tại bạn '''đã là BQV trên dự án Wiktionary tiếng Việt'''. Bạn lúc này cảm thấy thể nào? Mong bạn sẽ làm tốt công việc của mình như tôi đã nói lúc bỏ phiếu. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 21:02, ngày 2 tháng 9 năm 2023 (UTC) :Tôi cũng không biết nói thế nào, nhưng cảm ơn bạn và Phú cũng như các thành viên khác đã hỗ trợ tôi từ dự án này qua dự án khác. Từ nay, tôi đảm nhận thêm nhiều nhiệm vụ hơn trên Wiktionary nên sẽ cố gắng chọn cách làm hiệu quả tốt nhất cho dự án. Tôi ít nói quá, vài dòng trên là tất cả, tôi không nghĩ thêm được gì để diễn tả hết. Cảm ơn vì thông báo này. Chúc bạn một ngày tốt lành. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:50, ngày 3 tháng 9 năm 2023 (UTC) == Một số sửa đổi của bạn gần đây == Chào bạn! Về một số sửa đổi của bạn gần đây, như tại [[khả năng]], [[chứng minh]], ... Nếu phần định nghĩa có các từ kiểu như "nước ta", "nhân dân ta", ... thì ta nên thay bằng các từ khác hoặc xóa đi. Còn nếu nó có ở phần vd thì không cần xóa do phần này chấp nhận chứa các từ như vậy--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 12:48, ngày 16 tháng 9 năm 2023 (UTC) :@[[Thành viên:TheHighFighter2|TheHighFighter2]] Đúng vậy, tôi đã xoá chúng đi vì Wiktionary:Thái độ trung lập. Wiktionary có quy định về phần vd được phép ngoại lệ này không?. Tôi đã có nói chuyện với HCV Mxn về điều này. Tôi khẳng định nó không trung lập và xoá đi là cần thiết, và sẽ bổ sung phần ví dụ mới vào. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:19, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:P. ĐĂNG|P. ĐĂNG]] Hiện tại trên dự án không có trang nào tên là [[Wiktionary:Thái độ trung lập]]. Chả là bạn muốn tìm trang quy định liên quan tới vấn đề chăng? – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 14:29, ngày 16 tháng 9 năm 2023 (UTC) :::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Chưa có chứ không phải không. Các dự án Wikipedia đều hoạt động hướng đến chung là thái độ trung lập. Wiktionary tiếng Việt không phải Wiktionary Việt Nam. HCV Mxn cũng đi xoá những thứ này. Khi dùng từ như "dân ta, nhân dân ta", khi người nước ngoài đọc, bạn nghĩ sao về điều này? Chúng ta hướng đến một dự án phục vụ mọi người, mọi chủng tộc và quốc gia, không phải riêng một đất nước nào. Vì vậy, mỗi dòng viết ra phải dựa trên thái độ trung lập. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:36, ngày 16 tháng 9 năm 2023 (UTC) ::::Bạn nói cũng đúng vì theo quy định bên Wiktionary tiếng Anh "all entries must be written from a '''neutral point of view''', representing views fairly and without bias" (tạm dịch: Mọi nội dung được đưa vào đều phải được viết từ một cái nhìn trung lập, thể hiện cái nhìn công bằng và không thiên kiến). Nhưng tôi nghĩ cũng không nhất thiết lắm phải kiểm tra và sửa lại những nội dung POV vì nội dung không trung lập thường nó cũng không ảnh hưởng gì nhiều đến dự án lắm. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 14:46, ngày 16 tháng 9 năm 2023 (UTC) :::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Đây là điều đương nhiên. Chúng ta đang hoạt động trên đâu? Wiktionary là dự án bách khoa, nó ưu tiên thái độ trung lập, nơi mà một người Mỹ có thể qua đọc bài viết của một Wikimedia tiếng Đức, tiếng Việt hay tiếng Trung. Khi không trung lập, bạn nói không nhất thiết sửa lại là sao?. Đến nay tôi mới phát hiện Wiktionary tiếng Việt đang có văn phong không trung lập rất nhiều, trích câu Hồ Chí Minh, dùng thơ... Tôi cần BQV TheHighFighter2 phản hồi điều này, lẽ ra phải thảo luận với tôi trước khi lùi sửa, thứ mang tính chất mâu thuẫn. Nếu có quy định nào nói phần ví dụ ta được ngoại lệ thì tôi sẽ xem lại sửa đổi của mình. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:53, ngày 16 tháng 9 năm 2023 (UTC) ::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tôi dám chắc là không có quy định nào về ngoại lệ này cả. Không trung lập mới là đi ngược với quy định của bách khoa. Nội dung trên đây vốn đa phần được sao chép từ FVDP một dự án không có quy định tính trung lập, khi dùng nó đưa vô thì phải xem xét ở một vài khía cạnh chứ không copy là xong được. Wiktionary không phải từ điển của Việt Nam, nó cũng không phải sách giáo khoa, không dùng văn phong thiên vị một phía, thêm thơ lại không trung lập. Bạn sang các Wiktionary tiếng khác xem, có nền tảng wiki nào dùng những câu ví dụ như "nhân dân ta chiến đấu bảo vệ tổ quốc" "chiến tranh chống đế quốc Mỹ", có xuất hiện không?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:58, ngày 16 tháng 9 năm 2023 (UTC) 1. Bên en có rất nhiều mục có vd chứa các từ "[https://en.wiktionary.org/w/index.php?search=%22our+country%22&title=Special:Search&profile=advanced&fulltext=1&ns0=1 our country]", "[https://en.wiktionary.org/w/index.php?search=%22n%C6%B0%E1%BB%9Bc+ta%22&title=Special:Search&ns0=1&searchToken=12thcn782xmsjc7aixwau68ok nước ta]; bên fr có "[https://fr.wiktionary.org/w/index.php?search=%22notre+pays%22&title=Sp%C3%A9cial:Recherche&profile=advanced&fulltext=1&searchengineselect=mediawiki&ns0=1&ns100=1&ns106=1&ns110=1&searchToken=vol8t2pu9urr4hv60l40oom8 notre pays]" (đất nước chúng tôi) 2. Khi lấy vd cho mục "[[Đảng ta]]", "[[Mĩ nguỵ]]", "[[ba que]]" thì ta nên lấy vd như nào? --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 15:57, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:TheHighFighter2|TheHighFighter2]] Xin gửi bạn một phần tin nhắn của tôi với HCB Mxn: "tất cả các câu thí dụ này được nhập từ Dự án Từ điển tiếng Việt miễn phí (FVDP), dự án này sao chép nguyên cả lời định nghĩa từ một số từ điển khác, có lẽ bao gồm những cuốn từ điển trong nước. (FVDP cũng có nhiều danh ngôn của Hồ Chí Minh.) Mấy năm nay tôi cũng muốn gạt đi những câu thí dụ không trung lập hoặc sửa lại theo thuật ngữ trung lập hơn. Đây chỉ là một trong rất nhiều điều thiếu sót của việc nhập FVDP. Nếu bạn có thể giúp dọn dẹp các câu thí dụ và danh ngôn thì tốt quá". Những từ tiếng Việt được xây dựng bên en cũng đa phần dùng bot và người mở rộng có cả những tv người Việt (từ ngoại quốc có thể không bị kiểm duyệt gắt gao khi người kiểm duyệt không am hiểu thứ tiếng, giống như có tv nào tạo bài tiếng phạn hay chữ Hán bên đây chúng ta thì có thể tỷ lệ phần trăm sai phạm bị bỏ qua sẽ nhiều hơn các từ hệ chữ chúng ta dùng). Còn bên fr, bạn xem ví dụ của họ có liên quan đến chủ thể cỡ nào? Nó đáng bao nhiêu phần trăm? Rõ ràng như Wiktionary vi không?. Về trường hợp lấy ví dụ của các từ như "Đảng ta" "Mĩ ngụy" thì đây là một từ, trích quy định "Tất cả các bài viết và các nội dung bách khoa khác tại Wikipedia phải được viết trên một quan điểm trung lập (QDTL), thể hiện một cách công bằng và không thiên vị" tôi nghĩ bạn đủ khả năng tự suy ra hướng tôi đang muốn nói. Khi bạn dùng từ này vô trường hợp như "Mĩ ngụy xâm chiếm nước ta" --> ám chỉ rõ ràng đây là dự án tiếng Việt và nước ta là Việt Nam. Bản chất từ tôi không nói nó vi phạm thái độ trung lập, nhưng tùy ngữ cảnh mà bạn đưa vào là một vấn đề đấy. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:18, ngày 16 tháng 9 năm 2023 (UTC) :Thì thế tôi mới nói "không nhất thiết lắm phải kiểm tra và sửa lại những nội dung POV" đó. Nội dung không trung lập không có nghĩa là nội dung đó không hữu ích. Nói chung là tùy trường hợp, hợp lý là được miễn sao nội dung đó không quá khích. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:12, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Bạn có biết đang nói cái gì không vậy? Không trung lập = vi phạm quy định. Sửa đổi sai đang cần sửa nhưng bạn lại nói không cần thiết?. WP:Thái độ trung lập là một trong những trụ cột của Wikimedia, cho dù đó là sửa đổi thiện chí nhưng vi phạm thì cũng không cần. Dự án chúng ta các tv đã không còn khả năng sửa điều này? Nếu không, tại sao chấp nhận nó?. Sao có thể nhưng không thay bằng một nội dung vừa hữu ích vừa phù hợp với chính sách của ta hơn. Tôi không hiểu bạn Tiến Minh nói không nhất thiết giải quyết những điều này là gì? Bên Wikipedia có nhiều tk bị cấm vì thái độ trung lập đấy và thành viên không kiểm soát được điều này nên mấy tk này quay lại và thành rối nằm vùng. Phần nội dung hiện rõ lên vậy, bạn lại nói là không quá khích. Thế nào là quá khích, đủ để các tv bắt tay vào làm? Tôi xin nhắc lại, Wiktionary tiếng Việt không phải Wiktionary Việt Nam. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:26, ngày 16 tháng 9 năm 2023 (UTC) Hướng giải quyết: Nếu 1 mục từ bình thường có vd chứa các từ như trên: thay thế vd khác. Còn các từ liên quan đến chính trị, trường hợp đặc biệt khác, thì có thể lấy vd chứa những từ như trên. Bạn thấy thế nào? --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 16:53, ngày 16 tháng 9 năm 2023 (UTC) :@[[Thành viên:TheHighFighter2|TheHighFighter2]] Xin phiền bạn đưa phần tin nhắn này ra trang thảo luận vì Tiến Minh đã gửi thư nên tôi đã di chuyển nó ra thảo để mọi người có thể cùng nhau giải quyết. Cảm ơn bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:00, ngày 16 tháng 9 năm 2023 (UTC) :''Đã di chuyển đến [[Wiktionary:Thảo luận#Tính trung lập]].'' &nbsp; – [[Thành viên:Mxn|Nguyễn Xuân Minh]]&nbsp;<sup>[[Thảo luận Thành viên:Mxn|<span style="display: inline-block;">&#x1f4ac;</span>]]</sup> 01:56, ngày 17 tháng 9 năm 2023 (UTC) == [[Cửu đoạn tuyến]] == Phiền bạn check và gỡ một số nội dung không trung lập trong mục từ này (nếu có), tôi thấy có nội dung không trung lập nhưng chưa thể gỡ do liên quan đến mục từ, xin cảm ơn. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 11:34, ngày 10 tháng 10 năm 2023 (UTC) :[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tôi không thấy có thông tin nào là không trung lập, bài viết có nội dung rất ít, đây là bài do bạn khởi tạo. Nếu vẫn còn tin phần nào là không trung lập, bạn cứ thoải mái dẫn vào đây tôi xem. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 15:42, ngày 10 tháng 10 năm 2023 (UTC) == Kay == Kay đang diễn tuồng và giả làm Ti2008. Ti2008 và tôi thật là bạn thân trên Wikipedia và đã biết nhau từ năm 2008 rồi. Cách nói chuyện đó chỉ có thể là Kay. Mai mốt, nếu Kay tái xuất ở đây thì bạn cứ việc cấm vô hạn. Nếu là Ti2008 thật thì bạn ấy sẽ log vào acc Ti2008 để nói chuyện với tôi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 23:34, ngày 14 tháng 12 năm 2023 (UTC) == [[Thành viên:WhoAlone]] == Bạn nên đề cử tv này luôn để dự án chúng ta có thêm 2 BQV mới rất tích cực! [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 02:58, ngày 31 tháng 12 năm 2023 (UTC) == Hellu bạn == Nay có nhã hứng ghé qua đây chút, tui đang tính đóng góp dự án này và duy trì bên Wikiquote (bên đó sau vụ thi viết bài là lại vắng). Nên là bạn có thể giới thiệu sơ sơ về cách hoạt động bên này không? [[Thành viên:Pminh141|Pminh141]] ([[Thảo luận Thành viên:Pminh141|thảo luận]]) 18:22, ngày 23 tháng 7 năm 2024 (UTC) :[[Thành viên:Pminh141|Pminh141]] Chỉ cần xem [https://en.wiktionary.org/wiki/Wiktionary:Criteria_for_inclusion# Wiktionary:Độ nổi bật] và [https://en.wiktionary.org/wiki/Wiktionary:Neutral_point_of_view Thái độ trung lập] là có thể đóng góp (có thể tham khảo từ điển để viết). Dự án còn rất sơ khai về mảng quy định, tương lai tôi sẽ dự tính soạn thảo tập trung vô mảng này. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 02:24, ngày 24 tháng 7 năm 2024 (UTC) == Đổi thay == Phiền bạn giúp cấp lại quyền lùi sửa và gỡ quyền tại acc chính với ạ, Bạn có thể xem [[w:en:Wikipedia:Administrators' noticeboard#Unmerge my account from global|tại thảo luận này]], xin cảm ơn. – [[Thành viên:TienMinh-mun6xnChing|TienMinh-mun6xnChing]] ([[Thảo luận Thành viên:TienMinh-mun6xnChing|thảo luận]]) 12:01, ngày 29 tháng 10 năm 2024 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:54, ngày 29 tháng 10 năm 2024 (UTC) == Các công cụ (tập lệnh) ở Wiktionary == Phiên bản sắp tới của Zinnia sẽ mở rộng cho phép sử dụng ở Wiktionary. Tôi muốn hỏi trong quy trình làm việc ở đây, bạn và mọi người có sử dụng công cụ hay tập lệnh (script) gì không, để bổ sung vào Zinnia. Cảm ơn. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 13:11, ngày 2 tháng 11 năm 2024 (UTC) : Tag thêm @[[Thành viên:TienMinh-mun6xnChing|TienMinh-mun6xnChing]]. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 13:11, ngày 2 tháng 11 năm 2024 (UTC) ::[[Thành viên:Plantaest|Plantaest]] Các công cụ hay script để chống phá hoại thông thường các tv sẽ tự cài đặt ở Meta. Vì Wiktionary chỉ có mỗi BQV mới có bộ công cụ đầy đủ chức năng (gồm cả thao tác đánh dấu tuần tra), trừ "lùi sửa" vì có quyền riêng cho tác này. Do khác Wikipedia vấn đề này, tôi nghĩ giao diện cần nghiên cứu thêm nếu áp dụng. P/s Tôi dùng Restorer thay cho Twinkle (khi hồi sửa). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:02, ngày 2 tháng 11 năm 2024 (UTC) == Cần hỗ trợ về quyết định xóa bài == Em đang chỉnh sửa bài đăng và không biết là add vào gây spam, phiền anh hỗ trợ em với ạ – [[Thành viên:Nntrinh76|Nntrinh76]] ([[Thảo luận Thành viên:Nntrinh76|thảo luận]]) 11:34, ngày 17 tháng 12 năm 2024 (UTC) :Theo [https://vi.wiktionary.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Nh%E1%BA%ADt_tr%C3%ACnh/Nntrinh76 nhật trình], bài viết bạn tạo mang nội dung vượt ngoài dự án (Wiktionary chỉ bao gồm các mục từ). Bài viết này cũng có nội dung PR cá nhân. Đó là lý do cho việc nhắc nhở. Mời bạn tham khảo [[Wiktionary:Quy định và hướng dẫn]] để rút kinh nghiệm cho các lần sửa đổi sau. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 13:16, ngày 17 tháng 12 năm 2024 (UTC) ::anh có thể mở để em chỉnh sửa được không ạ? do cũng là lần đầu em viết và em đã dùng 2 ngày tổng hợp.. – [[Thành viên:Nntrinh76|Nntrinh76]] ([[Thảo luận Thành viên:Nntrinh76|thảo luận]]) 15:35, ngày 17 tháng 12 năm 2024 (UTC) :::Trang bạn đã tạo không liên quan gì đến Wiktionary cả, tại vì đây là trang từ điển, không phải là nơi để tạo hoặc chỉnh sửa bài viết. Cho nên tôi, Đăng hoặc bqv khác không thể mở khóa cái trang đó được. – [[Thành viên:Nguyên Hưng Trần|<span style="color:#74a12e;font-family:Georgia, serif;">'''NHT'''</span>]] ([[Thảo luận Thành viên:Nguyên Hưng Trần|💬]]) 16:15, ngày 17 tháng 12 năm 2024 (UTC) == lời cảm ơn == Cảm ơn vì đã trả lời trên [[Thảo_luận:bồ_các]], vì đó là không gian công cộng nên không tiện. Không biết nhấn nút cảm ơn thì kết quả sẽ được chuyển đến người đó hay kq sẽ như thế nào nhỉ, vì nhấn nhiều lần rồi nhưng không biết sẽ như thế nào? Mình có ai cảm ơn đâu, còn IP thì không cảm ơn được. – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 15:05, ngày 13 tháng 2 năm 2025 (UTC) :Từ người thực hiện, chuyển đến người được nhận. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:02, ngày 13 tháng 2 năm 2025 (UTC) == Xin chào == Nếu có thể tôi cần giúp đỡ – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:32, ngày 14 tháng 3 năm 2025 (UTC) :[[Thành viên:Henrydat|Henrydat]] Bạn có thể nêu vấn đề cụ thể. Nếu là các việc liên quan dự án, tôi sẽ giúp trong khả năng. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:42, ngày 14 tháng 3 năm 2025 (UTC) ::Ô trời, tim tôi đang đập đây, tôi thấy chữ rối ở đây bạn biết tôi là ai còn hỏi? – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:50, ngày 14 tháng 3 năm 2025 (UTC) :::Này tôi không có thời gian, tới giờ này thì việc này rất gấp? – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:55, ngày 14 tháng 3 năm 2025 (UTC) ::::tất nhiên tôi không có ý nói tôi là rối, tôi chỉ xem lịch sử đóng góp nói vậy thôi, nếu bạn biết trước tôi là ai thì mới giúp được – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:58, ngày 14 tháng 3 năm 2025 (UTC) :::::Rồi xong tôi đã đến lộn chỗ, quyết định không hoạt đông tại dự án này là quyết định đúng đắn – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 18:02, ngày 14 tháng 3 năm 2025 (UTC) ::::::Cần lưu ý cơ chế cấm người dùng hoạt động độc lập trên mỗi dự án, tức là ngoại trừ việc lạm dụng xuyên wiki hoặc bị cấm chỉ, thành viên vẫn có thể hoạt động và xem như một tài khoản bình thường khi qua dự án khác. Bạn vẫn có thể hoạt động tại đây và tuân theo quy định tại dự án này; ngược lại, bạn có tùy quyền quyết định không tham gia đóng góp. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 07:44, ngày 15 tháng 3 năm 2025 (UTC) :::::::Này chúng ta có thể tiếp tục cuộc trò chuyện sau 7 tháng không, bây giờ có thể là lúc thích hợp hoặc có thể sớm hơn hoặc trễ hơn? Nói như bạn vậy thì dễ quá rồi, tôi hy vọng mình không mắc sai lầm. – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 15:45, ngày 9 tháng 11 năm 2025 (UTC) == [[Special:Tags]] == Tôi đang test script, nhờ bạn tạo một thẻ với tên thẻ là “twinkle” và tên hiển thị là “Twinkle” để script chạy. Cảm ơn bạn. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 00:30, ngày 1 tháng 4 năm 2025 (UTC) :[[Thành viên:Hide on Rosé|Hide on Rosé]] {{Tick}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:08, ngày 1 tháng 4 năm 2025 (UTC) :: Nào bạn rảnh thì bạn sửa lại phần tên hiển thị: Liên kết tới [[Wiktionary:Twinkle]] nhé. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 09:51, ngày 1 tháng 4 năm 2025 (UTC) [[Tập tin:Wiktionary Deletion Tools 2025.png|nhỏ|250px|phải]] :::[[Thành viên:Hide on Rosé|Hide on Rosé]] Tôi upload màn hình chụp công cụ xóa quản trị viên Wiktionary. Bạn tham khảo. Twinkle hiện tại có vẻ chủ yếu phù hợp bài viết Wikipedia. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 03:34, ngày 2 tháng 4 năm 2025 (UTC) :::: @[[Thành viên:P. ĐĂNG|P. ĐĂNG]] Danh sách xoá mà bạn chụp thì tôi xem được ở đây: [[MediaWiki:Deletereason-dropdown]]. Mô đun này tôi đã sửa theo bộ tiêu chí xoá của dự án này, bạn có thể thử. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 03:40, ngày 2 tháng 4 năm 2025 (UTC) :::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Công cụ xóa hiện như trang [[MediaWiki:Deletereason-dropdown]] chỉ xuất hiện khi bài viết có tựa đề "Wikitionary" hoặc "MediaWiki"; đối với các mục từ thì như hình chụp. Có vẻ phải chỉnh làm sao khi các thành viên ấn Twinkle gắn bản mẫu xóa trang mục từ thì nó hiện lên các lý do liên quan cho mục từ. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 03:48, ngày 2 tháng 4 năm 2025 (UTC) :::::: Đúng là như vậy. Trang trong không gian chính là mục từ (trừ Trang Chính) và cả Twinkle lẫn MediaWiki đều hiện lý do tương ứn, theo không gian tên,. code trong trang MediaWiki hiện theo không gian tên, bạn có thể xem mã nguồn của nó. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 05:41, ngày 2 tháng 4 năm 2025 (UTC) :::::: Xem [[Special:Diff/prev/2225367]]. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 05:44, ngày 2 tháng 4 năm 2025 (UTC) :::::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Ok, đã test. PS Thiếu tiêu chí độ nổi bật. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:52, ngày 2 tháng 4 năm 2025 (UTC) :::::::: Tiêu chí đó được quy định ở đâu? Tôi không thấy trong [[Wiktionary:XN]]? [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 10:53, ngày 2 tháng 4 năm 2025 (UTC) :::::::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Tôi xem qua có vẻ đúng thật chưa có trong [[Wiktionary:Quy định xóa trang]], có lẽ trang này đã lâu không cập nhật khi dự án tiến triển. Độ nổi bật các mục từ nằm trong quy định [https://en.wiktionary.org/wiki/Wiktionary:Criteria_for_inclusion này]. Tiêu chí độ nổi bật cũng có trong công cụ xóa của quản trị viên (hình). Ngoài ra, tham khảo thử quy định [https://simple.wiktionary.org/wiki/Wiktionary:Deletion#Articles này] (quy định độ nổi bật của dự án Simple English về một số mục từ). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:19, ngày 2 tháng 4 năm 2025 (UTC) : @[[Thành viên:Hide on Rosé|Hide on Rosé]] Khi tôi gắn biển chất lượng kém bằng Twinkle cho bài [[freeter]] thì xuất hiện vần đề ([[Đặc biệt:Khác/2225470|xem]]). Tôi nghĩ bản mẫu <code><nowiki>{{chất lượng kém}}</nowiki></code> và <code><nowiki>{{Chất lượng kém (nguồn)}}</nowiki></code> có vấn đề rồi. [[User:Ayane Fumihiro|<b style="font-family:Segoe UI Light;color:#FF69B4;letter-spacing:">femboy_clen</b>]] 14:01, ngày 2 tháng 4 năm 2025 (UTC) == github.com == Khi dọn bớt trang thảo luận [[Thảo luận Wiktionary:Thảo luận]] để lưu trữ thì có liên kết này bị vào blacklist. Phiền bạn xem xét có thể gỡ liên kết này ra khỏi blacklist được không? [[User:Ayane Fumihiro|<b style="font-family:Segoe UI Light;color:#FF69B4;letter-spacing:">femboy_clen</b>]] ([[User talk:Ayane Fumihiro|<span style="color:#008080;">But we got it yeah</span>]]) 16:06, ngày 22 tháng 5 năm 2025 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:17, ngày 22 tháng 5 năm 2025 (UTC) == "ủ ôi" == Từ này hay xuất hiện trong văn nói, đôi khi đọc truyện tranh tôi có bắt gặp, nhưng không biết nên định nghĩa thế nào? Nhờ bạn hỗ trợ tạo trang nếu được. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 15:37, ngày 23 tháng 7 năm 2025 (UTC) :[[Thành viên:Plantaest|Plantaest]] Đã tạo trang. Từ này nó giống "trời ơi", "trời đất" miền Nam hay gọi thôi. P.S Bạn có câu ví dụ nào hay thì thêm vô nếu muốn (2 đến 3 câu ví dụ đều được, nhưng trung lập và không yếu tố bình luận chính trị). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 05:38, ngày 24 tháng 7 năm 2025 (UTC) == "clause" == Từ "clause" trong tiếng Anh nên được dịch là "mệnh đề" hay "cú" / "tiểu cú" vậy? Mình thấy các trang web dạy tiếng Anh ở Việt Nam ngày nay đều dịch là mệnh đề, nhưng khi mình tra từ điển ''Thuật ngữ ngôn ngữ học Anh – Việt Việt – Anh'', tr. 44 của Cao Xuân Hạo, Hoàng Dũng thì lại dịch là "tiểu cú". Bên ''Từ điển Khái niệm Ngôn ngữ học'', tr. 136 của Nguyễn Thiện Giáp cũng dịch tương tự. Phiền bạn trợ giúp. --[[Thành viên:I can see my baby swimming|I can see my baby swimming]] ([[Thảo luận Thành viên:I can see my baby swimming|thảo luận]]) 12:30, ngày 31 tháng 7 năm 2025 (UTC) :[[Thành viên:I can see my baby swimming|I can see my baby swimming]] Theo nguồn [https://vjol.info.vn/index.php/sphcm/article/view/27696] (trang 14) và [https://js.vnu.edu.vn/FS/article/view/380] (trang 29), cho thấy đều là cách dịch đúng của "clause". Dịch "mệnh đề" đồng nghĩa "cú/tiểu cú" nhưng cách dịch sau mang tính học thuật chuyên môn. Tôi nghĩ có thể xem xét bối cảnh chọn cách dịch phù hợp. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:55, ngày 1 tháng 8 năm 2025 (UTC) == [[Thành viên:Yuki Shiromita/Snowfall.css]] == Nhờ bạn xóa trang này, tôi không cần css để trang trí nữa do rất lag <span style="font-family:Segoe UI Light">[[User:Yuki Shiromita|<b style="color:#FF69B4">nettai</b>]] [[Special:Contributions/Yuki Shiromita|<b style="color:#FF964F">no</b>]] [[User talk:Yuki Shiromita|<b style="color:#93E7FB">shirayukihime</b>]]</span> 06:48, ngày 30 tháng 8 năm 2025 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:05, ngày 30 tháng 8 năm 2025 (UTC) ==Happy Holidays== <div style="border-style:solid; border-color:violet; background-color:#fff; border-width:2px; text-align:left; padding:8px;" class="plainlinks"> {| style="border: 5px dotted #H1790; background-color: #DDDDDD; padding:4px" | rowspan="2" valign="left" |<span style="margin:0px 10px 10px 0px;box-shadow:0px 3px 4px rgba(0, 0, 0, 0.45);display:inline-block;">[[File:Christmas Tree 2011-12-24.jpg|left|300px|link=]]<span style="display:block;padding-top:10px;clear:both"> | <span style="font-family: Georgia; font-size: 98%; color: #190a89;">Chúc bạn P. ĐĂNG có một mùa '''Giáng sinh''' an lành, ấm áp và tràn ngập yêu thương bên gia đình!<br/> Bước sang '''năm mới''' 2026, chúc bạn gặp nhiều may mắn,<br/> gặt hái được nhiều thành công trong công việc và học tập.<br/> Một lần nữa chúc bạn sẽ có một năm mới thật an khang, hạnh phúc và vạn sự như ý!!</span> <br /> <span style="font-family: Georgia; font-size: 92%;"> | rowspan="2" valign="right" |<span style="margin:0px 10px 10px 0px;box-shadow:0px 3px 4px rgba(0, 0, 0, 0.45);display:inline-block;">[[File:Atlantic Firework Festival 2016 (53368638571).jpg|left|360px|link=]]<span style="display:block;padding-top:10px;clear:both"> |}</div> Lời chúc chân thành từ: <span style="background:#978FF;border:solid 1px;border-radius:8px;box-shadow:darkblue 2px 2px 2px">&nbsp;[[User:Kelly zhrm|<span style="font-family:Old English Text MT;color:#C90">Yellow</span>]]&#124;[[User talk:Kelly zhrm|&#248;]]&nbsp;</span>&nbsp; 05:54, ngày 24 tháng 12 năm 2025 (UTC) :[[Thành viên:Kelly zhrm|Kelly zhrm]] Cảm ơn cực muộn :D. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:11, ngày 9 tháng 1 năm 2026 (UTC) == a đuồi == Đôi khi tôi thấy từ này, nhưng không chắc định nghĩa nó thế nào? [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 08:01, ngày 30 tháng 12 năm 2025 (UTC) :[[Thành viên:Plantaest|Plantaest]] Dùng khi người nói biểu thị hàm ý nhưng không muốn diễn đạt rõ sự việc ám chỉ bằng cách nói thông thường và người nghe nhiều khả năng "sẽ" hiểu. Sau kết quả [https://www.google.com/search?q=a+%C4%91u%E1%BB%93i&sca_esv=fdc603a36385362d&rlz=1C1GCEA_enVN1050VN1050&biw=1536&bih=730&aic=0&sxsrf=ANbL-n6bNxATTi-Ja0wA8rmwvQPrO6MF7Q%3A1767953043675&ei=k9Jgae77KLCp4-EP1-n-6AI&ved=0ahUKEwiukZepmv6RAxWw1DgGHde0Hy0Q4dUDCBE tra cứu], tôi tham khảo một số trang web có nhắc đến cụm từ này và hiểu được như trên. Ngoài ra, một số ngữ cảnh được hiểu theo cách [https://www.hieuchua.com/define/A%20%C4%90u%E1%BB%93i này]. Các trang này chưa đủ uy tín để dùng "giải nghĩa" nhưng nó là tất cả trong khả năng có thể dùng tìm hiểu hiện tại. Hy vọng hữu ích đến bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:07, ngày 9 tháng 1 năm 2026 (UTC) == PANG450a, b, c, d, e, f, g, h, i, j, k, l, m == Yummie giả dạng rối PANG450v của PVR từ lúc hắn tạo tài khoản PANG450a sao?? Tôi tưởng PVR tạo rối sửa đổi ở đây chứ! Mà khoan, Yummie hắn thường spam đường link tới các wiki Fandom, Miraheze và trang đóng góp của tài khoản hắn giả dạng (PANG450v) hả? – [[Thành viên:Higashizakura|<span style="color:pink; font-family:Noto Serif JP, serif;">'''Anh Đào Phương Đông'''</span>]] ([[Thảo luận Thành viên:Higashizakura|🌸]]) 16:20, ngày 21 tháng 1 năm 2026 (UTC) : Cái trò [[mượn gió bẻ măng]] của Yummie quá cũ rồi. Thật không còn gì đáng bàn. [[User:Hiyuune|<b style="font-family:Segoe UI Light;color:#FFB3AE;letter-spacing:">Hiyuune</b>]] [[User talk: Hiyuune|<b style="font-family:Segoe UI Light;color:#FFF7AD;letter-spacing:">(angustifolia)</b>]] 17:01, ngày 21 tháng 1 năm 2026 (UTC) :[[Thành viên:Higashizakura|Higashizakura]] Phạm Văn Rạng là rối sửa bài viết chính trị (khá nghiêm túc và có khả năng biên tập; chỉ hoạt động tại các dự án Wikipedia vì mục đích chính sửa bài viết chính trị); Yummie là rối spam phá hoại. Có thể dựa vào nhật trình sửa đổi của tk nhận dạng. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 06:48, ngày 22 tháng 1 năm 2026 (UTC) ::[[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]].[[Thành viên:PANG450m|PANG450m]] ([[Thảo luận Thành viên:PANG450m|thảo luận]]) 08:38, ngày 4 tháng 5 năm 2026 (UTC) == [[porfolio]] và [[portfolio]] == Từ đầu có vẻ là sai chính tả, qua enwikt thì đó là tiếng Tây Ban Nha. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 04:19, ngày 24 tháng 2 năm 2026 (UTC) :[[Thành viên:Plantaest|Plantaest]] Tra theo cú pháp "'Porfolio' (Conjunto de fotografías o grabados de diferentes clases que forman un tomo o volumen encuadernable)", thấy ghi nhận cơ bản là mục từ tiếng Tây Ban Nha phỏng theo tiếng Anh và Pháp đã bỏ âm "t" sau khi nước này đưa vào từ điển sử dụng. [[Thành viên:Hiyuune|Hiyuune]] đã giúp sửa. P.S Có vẻ cách dịch nghĩa hiện tại trong bài sai so với nguồn (nguồn [https://www.scribd.com/document/378489759/SUSTANTIVOS-COLECTIVOS#content=query:porfolio,pageNum:1,indexOnPage:0,bestMatch:false này] cũng không thấy theo nghĩa dịch vậy). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:23, ngày 25 tháng 2 năm 2026 (UTC) imvmkc82e27buja6wm6ndtiotvprxpx 2350122 2350119 2026-05-04T09:10:19Z PANG450n 61176 /* PANG450a, b, c, d, e, f, g, h, i, j, k, l, m */ 2350122 wikitext text/x-wiki <div style="border:1px solid #FDA; vertical-align:top; padding: 0.5em; background: #FFFFE5;"> <div style="margin-left:0.5em; margin-right: 0.5em; margin-bottom:1em; margin-top: 0.1em;"> <span style="font-size: 1.3rem;">'''Xin chào P. ĐĂNG! Chào mừng bạn đến với Wiktionary tiếng Việt!'''</span> <div class="plainlinks"><p style="margin-top:0.1em; margin-bottom: 1em;">Wiktionary là từ điển mở mà ai cũng đều có thể chỉnh sửa. Cách sử dụng và quy định có thể gây khó khăn cho bạn, nhưng hãy dần học hỏi và '''[[Wiktionary:Táo bạo|mạnh dạn đóng góp]]'''. Các thông tin dưới đây sẽ có thể giúp bạn sử dụng và chỉnh sửa Wiktionary.</p></div> </div> <!-- Quan trọng --> <div style="clear: both; margin-left: 1.5em; margin-right 1.5em; font-size: 100%;"> {| class="plainlinks" width="100%" style="margin:auto;" | style="text-align:center; padding:4px" | [[File:OOjs UI icon search-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Tìm kiếm|Tìm kiếm Wiktionary]]''' <br />Tìm hiểu cách tìm và tra cứu mục từ trên Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon lightbulb.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Yêu cầu mục từ|Yêu cầu mục từ]]'''<br />Nơi để bạn thêm những từ cần viết nhưng chưa có tại Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon userAvatar.svg|30px|link=|]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Cộng đồng|Cổng Cộng đồng Wiktionary tiếng Việt]]'''<br />Nơi tìm hiểu mọi thông tin về của Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon articleCheck-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Quy định và hướng dẫn|Quy định và hướng dẫn]]''' <br />Chính sách của Wiktionary là gì? Xin vui lòng đọc nó trước khi thực hiện chỉnh sửa! |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon edit-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Viết trang mới|Viết trang mới]]'''<br />Tham khảo cách viết trang hay mục từ mới tại Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon tray.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Chỗ thử|Chỗ thử]]'''<br />Nơi để bạn viết nháp và thử nghiệm. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon wikiText.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Sửa đổi|Thực hiện sửa đổi]]'''<br />Tham khảo hướng dẫn sửa đổi và cùng bắt đầu sửa đổi Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon helpNotice-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Bàn giúp đỡ|Bàn giúp đỡ]]'''<br />Nơi hỏi đáp khi gặp khó khăn trên Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon book-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Mục lục|Mục lục trợ giúp]]''' <br />Mục lục giúp bạn thông tin và hướng dẫn khác khi gặp khó khăn trong những lúc đóng góp! | style="text-align:center; padding:4px" | [[File:OOjs UI icon speechBubbles-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Thảo luận|Thảo luận chung]]'''<br />Nơi trao đổi ý kiến giữa bạn và các thành viên khác! |}</div> <div style="padding: 0.5em; background: #FEC; border: 1px solid #FDA; margin-top: 1em; font-size: 1em"> [[File:Vector sig vi.png|250px|right]] '''Hãy luôn nhớ rằng, sau khi viết thảo luận xong thì đừng quên bước quan trọng đó là ký tên ở phía sau thảo luận'''. Phương thức ký tên được sử dụng trong Wiktionary không phải là viết tên trực tiếp, nhưng xin hãy ký tên bằng cách sử dụng 4 dấu ngã (<code><nowiki>--~~~~</nowiki></code>) hoặc bằng cách nhấp vào nút chữ ký ([[File:OOUI JS signature icon LTR.svg|20px|border]]) trong cửa sổ chỉnh sửa của phiên bản trình soạn thảo mã nguồn thông thường.<br/> [[Wiktionary:Guestbook_for_non-Vietnamese_speakers|Welcome! If you are not good at Vietnamese or do not speak it, click here.]] </div> </div>&nbsp;--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 07:34, ngày 24 tháng 6 năm 2023 (UTC) == BQV == Bạn có muốn làm BQV ở Wiktionary này không? Nếu có hứng thú, mời bạn ra ứng cử ở [[Thảo luận Wiktionary:Bảo quản viên]]. Tôi muốn tuyển thêm BQV cho Wiktionary vì Wiktionary hiện tại không có BQV thường trực. Đây là môi trường thực tập tốt trước khi làm ĐPV bên Wikipedia. Hồi xưa, tôi cũng đóng góp cho cả hai dự án cùng một lúc (Wikipedia + Wiktionary). [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 13:32, ngày 2 tháng 8 năm 2023 (UTC) :@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Tôi hay hoạt động bên đây thật nhưng bên đây tôi có ít sửa đổi. Chỉ vài tuần trước tôi xin quyền lùi sửa để chống phá hoại nhưng không đủ yêu cầu thì BQV làm sao tôi ứng cử được. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:33, ngày 2 tháng 8 năm 2023 (UTC) ::Bên Wiktionary không có yêu cầu tối thiểu để làm BQV. Bạn có đóng góp bên Wikipedia thì ra ứng cử là ok rồi. Quan trọng là bạn có muốn vác tù và hàng tổng không thôi? [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 15:23, ngày 2 tháng 8 năm 2023 (UTC) :::@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Tất nhiên, nếu có cơ hội được công đồng giao phó thì tôi sẽ làm. Nhưng chắc tôi cần tích cực cày sửa đổi một thời gian vì hiện tại tôi có dưới 300 sửa đổi. Có thể, tôi nghĩ tôi sẽ tích cực bên dự án này vài tuần cái đã. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 15:27, ngày 2 tháng 8 năm 2023 (UTC) ::::Bạn tính vậy cũng được. Cày sửa đổi là dễ mà. 2 tuần sau, mời bạn tự ra ứng cử. Tôi sẽ ủng hộ. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 15:57, ngày 2 tháng 8 năm 2023 (UTC) == Mệt nhỉ? == Tụi này lì như trâu thật, mới chập sáng đòi vặt lông bẻ cổ tổ tông nhà tôi này. – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:43, ngày 3 tháng 8 năm 2023 (UTC) :@[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] Tôi qua đây thì gặp TTS. Haha MTRIRod với bạn Phú nói đúng, tên này ám tôi như ma ám rồi. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:44, ngày 3 tháng 8 năm 2023 (UTC) ::Mà hình như bên vi chưa cấm tên [https://vi.wikipedia.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:%C4%90%C3%B3ng_g%C3%B3p/%C4%90%E1%BB%ABng_b%C6%A1_S%C6%A1n_n%E1%BB%AFa,_S%C6%A1n_c%C3%B4_%C4%91%C6%A1n_l%E1%BA%AFm! này] thì phải? – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:48, ngày 3 tháng 8 năm 2023 (UTC) :::@[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] Chắc cấm sót, mà TTS chắc không dùng lại tk đó đâu. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:50, ngày 3 tháng 8 năm 2023 (UTC) ::::Đâu, vừa nhắc xong thì hình như mới chửi Nguyenmy kìa. – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:52, ngày 3 tháng 8 năm 2023 (UTC) :::::@[[Thành viên:P. ĐĂNG|P. ĐĂNG]] @[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] @[[Thành viên:Tryvix1509|Tryvix1509]] @[[Thành viên:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] Mà không biết tôi có nên đệ đơn cấm chỉ tên TTS này đến Nhóm Tin cậy & An toàn của tổ chức Wikimedia không nhỉ? – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 09:58, ngày 3 tháng 8 năm 2023 (UTC) ::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tổ chức này hoạt động như thế nào?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:03, ngày 3 tháng 8 năm 2023 (UTC) :::::::Tôi cũng chỉ [[m:WMF Global Ban Policy/vi|đọc thoáng qua sơ sơ về quy định cấm chỉ toàn hệ thống tổ chức này]], và thấy tổ chức hoạt động qua email ca@wikimedia.org – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:07, ngày 3 tháng 8 năm 2023 (UTC) ::::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Là cấm chỉ một tk toàn cầu bên meta đúng không?. Chắc không cần rồi và cũng không hiệu quả. Tôi nhớ không lầm TTS bị cấm toàn cục từ tk đầu tiên rồi. Hiện giờ dùng proxy thì cấm toàn cục gì nữa. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:10, ngày 3 tháng 8 năm 2023 (UTC) :::::::::Các tk rối của TTS như bạn nói chỉ bị khóa toàn cục = TTS vẫn chưa bị cấm chỉ trên toàn hệ thống. Tôi nghĩ biện pháp này là cách hay nhất để răn đe tên này, chắc tôi nghĩ để lúc khác làm sau vậy. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:17, ngày 3 tháng 8 năm 2023 (UTC) ::::::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Chẳng phải khóa toàn cầu là trên toàn hệ thống Wikipedia? TTS không dùng một tk cố định và dùng proxy. Cấm tk này thì sẽ nhảy qua tk khác bằng một IP khác. Đề xuất của bạn không rõ ràng, tôi chưa hiểu lắm. Nếu được thì làm ngay bây giờ luôn đi. Tôi mới báo cái tk của TTS lên meta cho tiếp viên cấm toàn cầu đấy, hai tk nãy giờ phá hoại hiện đang bị cấm. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:25, ngày 3 tháng 8 năm 2023 (UTC) == Bản mẫu cảnh báo mới == Cảm ơn bạn đã tạo bản mẫu cánh báo về việc sử dụng Wiktionary để quảng cáo. Nhưng tôi thấy bên Wikipedia tiếng Việt [[:w:vi:Bản mẫu:Spam|trang Bản mẫu:Spam]] là dùng để báo cáo liên kết rác, vì vậy xin phép tôi được đổi tên bản mẫu [[Đặc biệt:So sánh di động/2119930|từ "spam-1" thành "Cb1-spam"]]. Tôi không biết việc làm của tôi có đúng không do bên Wikipedia tiếng Việt cũng có [[:w:vi:Bản mẫu:Cb1-spam|bản mẫu tên như thế này]] chắc dùng để cảnh báo thành viên về việc thêm liên kết quảng cáo trong bài. Và nếu bạn thấy tôi sai mong bạn hãy lùi lại. Cảm ơn bạn. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:54, ngày 14 tháng 8 năm 2023 (UTC) :[[Thành viên:DefenderTienMinh07]]: Cảm ơn Tiến Minh. Nhưng lần sau bạn hãy đọc kỹ nội dung bản mẫu, bản mẫu này không phải cảnh báo thêm link spam mà là thông tin quảng cáo, tức là khi tv tạo bài PR (trang mới, PR trong trang thảo luận, hoặc chèn thông tin PR) thì dùng bản mẫu này. Mỗi wiktionary hoạt động độc lập, cộng đồng bên ta vốn nhỏ bé và ít người nên đặt tên bản mẫu đừng thêm vài chữ làm rườm rà khó nhớ, hầu hết thành viên không dùng Twinkle và đặt biển thủ công nên tôi chọn tên ngắn để các bạn dễ dùng. Nhưng nếu bạn đã đổi thì để vậy cũng được vì tôi đang cần làm thêm vài thứ, nâng cấp một vài thứ thiết yếu và để tên tạm như thế cũng được nếu tương lai có phát sinh thêm tôi sẽ thay đổi một vài bản mẫu cho phù hợp và nhất quán. Sẵn đây tôi hỏi bạn có dùng Twinkle không? Nếu có cho tôi xin một vài ý kiến có được không?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:25, ngày 16 tháng 8 năm 2023 (UTC) ::Do dự án đang trong phát triển về mảng tin học nên tôi nghĩ trang global.js trên Meta sẽ là giải pháp hay để cài công cụ. Các công cụ hữu ích tôi vừa tìm được cho dự án: Restorer của BrandonXLF, TwinkleGlobal của Xiplus và WarningDialog.js của Tryvix1509 và nhiều người khác. Tôi chưa hiểu câu hỏi bạn đặt ra cho lắm, nếu bạn đang hỏi về công cụ TwinkleMobile của Plantaest trên dự án này thì tôi nghĩ bạn nên hỏi Plantaest do công cụ vẫn chưa được Plantaest kích hoạt trên đây. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 18:07, ngày 17 tháng 8 năm 2023 (UTC) :::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Ý tôi là việc dùng Twinkle của bạn trên đây có giống bên Wikipedia không? Nó có chức năng gắn biển, cảnh báo hay chỉ dừng lại ở chức năng lùi sửa. Tôi không dùng Twinkle trên đây, nên tôi mới hỏi bạn để biết thêm thông tin do tôi cần nâng cấp một vài bản mẫu và muốn kích hoạt nó vô Twinkle, tôi muốn Twinkle bên đây được cấu hình lại cho tiện và đầy đủ chức năng giống bên các dự án khác cho các bạn dùng. Tôi sẽ làm trong phạm vi có thể, nhưng chắc sẽ cần thời gian. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:38, ngày 18 tháng 8 năm 2023 (UTC) ::::Việc dùng Twinkle trên đây của tôi chỉ là để phục vụ mục đích tuần tra TĐGĐ trong việc lùi tất cả sửa đổi không thiện chí do tôi chưa có quyền lùi sửa. Nếu bạn muốn công cụ có thể cảnh báo thành viên thì công cụ WarningDialog.js của Tryvix có thể giúp bạn trong trường hợp này. Bạn nên hỏi Tryvix xem sao (tôi đã ping @[[Thành viên:Tryvix1509|Tryvix1509]]) – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:14, ngày 21 tháng 8 năm 2023 (UTC) ::Quay lại chủ đề bản mẫu cảnh báo vừa tạo không biết có nên dùng bản mẫu '''khi mà trường hợp tài khoản đó bị chặn bởi bộ lọc sai phạm''' không chứ tôi ngày nào mà chả thấy mấy tài khoản spambot dùng Wiktionary để quảng cáo có chèn đường link không à dẫn tới việc bị chặn và bị ghi lại trong bộ lọc sai phạm mà không ai phát hiện ra. (bạn có thể xem đầy đủ tại [[Đặc biệt:Nhật trình sai phạm]]) – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:23, ngày 21 tháng 8 năm 2023 (UTC) :::[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Thế thì dùng vậy cũng được, để tôi chỉnh lại bản mẫu cho ý tựu chung hơn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:08, ngày 22 tháng 8 năm 2023 (UTC) == BQV == Rất vui vì bạn đã dũng cảm ra vác tù và hàng tổng. Tôi sẽ ủng hộ. Tuy nhiên, bạn cần gửi thư mời tham gia BQ BQV đến các thành viên trên Wiktionary (tv tích cực lẫn tv thỉnh thoảng xuất hiện). Chúc bạn đắc cử! [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 05:55, ngày 24 tháng 8 năm 2023 (UTC) :Tôi mới cấp quyền cho bạn. Chúc bạn tiếp tục hoạt động tích cực ở cả hai dự án, trao dồi thêm kinh nghiệm bảo quản và vài tháng nữa tự ra ứng cử làm ĐPV ở Wikipedia. Tôi sẽ ủng hộ nếu như không có gì thay đổi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 20:52, ngày 2 tháng 9 năm 2023 (UTC) == Thư mời tham gia biểu quyết == <div style="padding: 0.5em; background: #f8f8ff; margin-top: 1em; font-size: 1em"> {| class="table" style="width: 80%; background-color: #ACE1AF; border: 1px solid #fceb92; margin: auto; margin-bottom: 10px" | style="vertical-align: middle; padding: 10px;" | [[Tập tin:Logo vote.svg|80px|link=]] | style="vertical-align: middle; padding: 15px 10px 10px 0;" | '''Mời bạn cho ý kiến về việc cấp quyền Bảo quản viên cho thành viên [[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] tại trang [[Thảo luận Wiktionary:Bảo quản viên#DefenderTienMinh07|Thảo luận Wiktionary:Bảo quản viên]]. Xin cảm ơn. <small>Hãy cùng tích cực tham gia các biểu quyết và thảo luận về chúng. Mỗi hành động của bạn sẽ góp phần không nhỏ để xây dựng các mục từ trên Wiktionary - tài sản chung của cộng đồng chúng ta, giúp wiki ta ngày càng phát triển vững mạnh! Thân ái! |} </div> [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:25, ngày 24 tháng 8 năm 2023 (UTC) == Bất ngờ chưa! == Tôi tới đây là để thông báo một tin vui cho bạn. {{ý kiến|1=Tin vui là:}} Hiện tại bạn '''đã là BQV trên dự án Wiktionary tiếng Việt'''. Bạn lúc này cảm thấy thể nào? Mong bạn sẽ làm tốt công việc của mình như tôi đã nói lúc bỏ phiếu. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 21:02, ngày 2 tháng 9 năm 2023 (UTC) :Tôi cũng không biết nói thế nào, nhưng cảm ơn bạn và Phú cũng như các thành viên khác đã hỗ trợ tôi từ dự án này qua dự án khác. Từ nay, tôi đảm nhận thêm nhiều nhiệm vụ hơn trên Wiktionary nên sẽ cố gắng chọn cách làm hiệu quả tốt nhất cho dự án. Tôi ít nói quá, vài dòng trên là tất cả, tôi không nghĩ thêm được gì để diễn tả hết. Cảm ơn vì thông báo này. Chúc bạn một ngày tốt lành. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:50, ngày 3 tháng 9 năm 2023 (UTC) == Một số sửa đổi của bạn gần đây == Chào bạn! Về một số sửa đổi của bạn gần đây, như tại [[khả năng]], [[chứng minh]], ... Nếu phần định nghĩa có các từ kiểu như "nước ta", "nhân dân ta", ... thì ta nên thay bằng các từ khác hoặc xóa đi. Còn nếu nó có ở phần vd thì không cần xóa do phần này chấp nhận chứa các từ như vậy--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 12:48, ngày 16 tháng 9 năm 2023 (UTC) :@[[Thành viên:TheHighFighter2|TheHighFighter2]] Đúng vậy, tôi đã xoá chúng đi vì Wiktionary:Thái độ trung lập. Wiktionary có quy định về phần vd được phép ngoại lệ này không?. Tôi đã có nói chuyện với HCV Mxn về điều này. Tôi khẳng định nó không trung lập và xoá đi là cần thiết, và sẽ bổ sung phần ví dụ mới vào. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:19, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:P. ĐĂNG|P. ĐĂNG]] Hiện tại trên dự án không có trang nào tên là [[Wiktionary:Thái độ trung lập]]. Chả là bạn muốn tìm trang quy định liên quan tới vấn đề chăng? – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 14:29, ngày 16 tháng 9 năm 2023 (UTC) :::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Chưa có chứ không phải không. Các dự án Wikipedia đều hoạt động hướng đến chung là thái độ trung lập. Wiktionary tiếng Việt không phải Wiktionary Việt Nam. HCV Mxn cũng đi xoá những thứ này. Khi dùng từ như "dân ta, nhân dân ta", khi người nước ngoài đọc, bạn nghĩ sao về điều này? Chúng ta hướng đến một dự án phục vụ mọi người, mọi chủng tộc và quốc gia, không phải riêng một đất nước nào. Vì vậy, mỗi dòng viết ra phải dựa trên thái độ trung lập. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:36, ngày 16 tháng 9 năm 2023 (UTC) ::::Bạn nói cũng đúng vì theo quy định bên Wiktionary tiếng Anh "all entries must be written from a '''neutral point of view''', representing views fairly and without bias" (tạm dịch: Mọi nội dung được đưa vào đều phải được viết từ một cái nhìn trung lập, thể hiện cái nhìn công bằng và không thiên kiến). Nhưng tôi nghĩ cũng không nhất thiết lắm phải kiểm tra và sửa lại những nội dung POV vì nội dung không trung lập thường nó cũng không ảnh hưởng gì nhiều đến dự án lắm. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 14:46, ngày 16 tháng 9 năm 2023 (UTC) :::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Đây là điều đương nhiên. Chúng ta đang hoạt động trên đâu? Wiktionary là dự án bách khoa, nó ưu tiên thái độ trung lập, nơi mà một người Mỹ có thể qua đọc bài viết của một Wikimedia tiếng Đức, tiếng Việt hay tiếng Trung. Khi không trung lập, bạn nói không nhất thiết sửa lại là sao?. Đến nay tôi mới phát hiện Wiktionary tiếng Việt đang có văn phong không trung lập rất nhiều, trích câu Hồ Chí Minh, dùng thơ... Tôi cần BQV TheHighFighter2 phản hồi điều này, lẽ ra phải thảo luận với tôi trước khi lùi sửa, thứ mang tính chất mâu thuẫn. Nếu có quy định nào nói phần ví dụ ta được ngoại lệ thì tôi sẽ xem lại sửa đổi của mình. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:53, ngày 16 tháng 9 năm 2023 (UTC) ::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tôi dám chắc là không có quy định nào về ngoại lệ này cả. Không trung lập mới là đi ngược với quy định của bách khoa. Nội dung trên đây vốn đa phần được sao chép từ FVDP một dự án không có quy định tính trung lập, khi dùng nó đưa vô thì phải xem xét ở một vài khía cạnh chứ không copy là xong được. Wiktionary không phải từ điển của Việt Nam, nó cũng không phải sách giáo khoa, không dùng văn phong thiên vị một phía, thêm thơ lại không trung lập. Bạn sang các Wiktionary tiếng khác xem, có nền tảng wiki nào dùng những câu ví dụ như "nhân dân ta chiến đấu bảo vệ tổ quốc" "chiến tranh chống đế quốc Mỹ", có xuất hiện không?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:58, ngày 16 tháng 9 năm 2023 (UTC) 1. Bên en có rất nhiều mục có vd chứa các từ "[https://en.wiktionary.org/w/index.php?search=%22our+country%22&title=Special:Search&profile=advanced&fulltext=1&ns0=1 our country]", "[https://en.wiktionary.org/w/index.php?search=%22n%C6%B0%E1%BB%9Bc+ta%22&title=Special:Search&ns0=1&searchToken=12thcn782xmsjc7aixwau68ok nước ta]; bên fr có "[https://fr.wiktionary.org/w/index.php?search=%22notre+pays%22&title=Sp%C3%A9cial:Recherche&profile=advanced&fulltext=1&searchengineselect=mediawiki&ns0=1&ns100=1&ns106=1&ns110=1&searchToken=vol8t2pu9urr4hv60l40oom8 notre pays]" (đất nước chúng tôi) 2. Khi lấy vd cho mục "[[Đảng ta]]", "[[Mĩ nguỵ]]", "[[ba que]]" thì ta nên lấy vd như nào? --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 15:57, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:TheHighFighter2|TheHighFighter2]] Xin gửi bạn một phần tin nhắn của tôi với HCB Mxn: "tất cả các câu thí dụ này được nhập từ Dự án Từ điển tiếng Việt miễn phí (FVDP), dự án này sao chép nguyên cả lời định nghĩa từ một số từ điển khác, có lẽ bao gồm những cuốn từ điển trong nước. (FVDP cũng có nhiều danh ngôn của Hồ Chí Minh.) Mấy năm nay tôi cũng muốn gạt đi những câu thí dụ không trung lập hoặc sửa lại theo thuật ngữ trung lập hơn. Đây chỉ là một trong rất nhiều điều thiếu sót của việc nhập FVDP. Nếu bạn có thể giúp dọn dẹp các câu thí dụ và danh ngôn thì tốt quá". Những từ tiếng Việt được xây dựng bên en cũng đa phần dùng bot và người mở rộng có cả những tv người Việt (từ ngoại quốc có thể không bị kiểm duyệt gắt gao khi người kiểm duyệt không am hiểu thứ tiếng, giống như có tv nào tạo bài tiếng phạn hay chữ Hán bên đây chúng ta thì có thể tỷ lệ phần trăm sai phạm bị bỏ qua sẽ nhiều hơn các từ hệ chữ chúng ta dùng). Còn bên fr, bạn xem ví dụ của họ có liên quan đến chủ thể cỡ nào? Nó đáng bao nhiêu phần trăm? Rõ ràng như Wiktionary vi không?. Về trường hợp lấy ví dụ của các từ như "Đảng ta" "Mĩ ngụy" thì đây là một từ, trích quy định "Tất cả các bài viết và các nội dung bách khoa khác tại Wikipedia phải được viết trên một quan điểm trung lập (QDTL), thể hiện một cách công bằng và không thiên vị" tôi nghĩ bạn đủ khả năng tự suy ra hướng tôi đang muốn nói. Khi bạn dùng từ này vô trường hợp như "Mĩ ngụy xâm chiếm nước ta" --> ám chỉ rõ ràng đây là dự án tiếng Việt và nước ta là Việt Nam. Bản chất từ tôi không nói nó vi phạm thái độ trung lập, nhưng tùy ngữ cảnh mà bạn đưa vào là một vấn đề đấy. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:18, ngày 16 tháng 9 năm 2023 (UTC) :Thì thế tôi mới nói "không nhất thiết lắm phải kiểm tra và sửa lại những nội dung POV" đó. Nội dung không trung lập không có nghĩa là nội dung đó không hữu ích. Nói chung là tùy trường hợp, hợp lý là được miễn sao nội dung đó không quá khích. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:12, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Bạn có biết đang nói cái gì không vậy? Không trung lập = vi phạm quy định. Sửa đổi sai đang cần sửa nhưng bạn lại nói không cần thiết?. WP:Thái độ trung lập là một trong những trụ cột của Wikimedia, cho dù đó là sửa đổi thiện chí nhưng vi phạm thì cũng không cần. Dự án chúng ta các tv đã không còn khả năng sửa điều này? Nếu không, tại sao chấp nhận nó?. Sao có thể nhưng không thay bằng một nội dung vừa hữu ích vừa phù hợp với chính sách của ta hơn. Tôi không hiểu bạn Tiến Minh nói không nhất thiết giải quyết những điều này là gì? Bên Wikipedia có nhiều tk bị cấm vì thái độ trung lập đấy và thành viên không kiểm soát được điều này nên mấy tk này quay lại và thành rối nằm vùng. Phần nội dung hiện rõ lên vậy, bạn lại nói là không quá khích. Thế nào là quá khích, đủ để các tv bắt tay vào làm? Tôi xin nhắc lại, Wiktionary tiếng Việt không phải Wiktionary Việt Nam. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:26, ngày 16 tháng 9 năm 2023 (UTC) Hướng giải quyết: Nếu 1 mục từ bình thường có vd chứa các từ như trên: thay thế vd khác. Còn các từ liên quan đến chính trị, trường hợp đặc biệt khác, thì có thể lấy vd chứa những từ như trên. Bạn thấy thế nào? --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 16:53, ngày 16 tháng 9 năm 2023 (UTC) :@[[Thành viên:TheHighFighter2|TheHighFighter2]] Xin phiền bạn đưa phần tin nhắn này ra trang thảo luận vì Tiến Minh đã gửi thư nên tôi đã di chuyển nó ra thảo để mọi người có thể cùng nhau giải quyết. Cảm ơn bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:00, ngày 16 tháng 9 năm 2023 (UTC) :''Đã di chuyển đến [[Wiktionary:Thảo luận#Tính trung lập]].'' &nbsp; – [[Thành viên:Mxn|Nguyễn Xuân Minh]]&nbsp;<sup>[[Thảo luận Thành viên:Mxn|<span style="display: inline-block;">&#x1f4ac;</span>]]</sup> 01:56, ngày 17 tháng 9 năm 2023 (UTC) == [[Cửu đoạn tuyến]] == Phiền bạn check và gỡ một số nội dung không trung lập trong mục từ này (nếu có), tôi thấy có nội dung không trung lập nhưng chưa thể gỡ do liên quan đến mục từ, xin cảm ơn. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 11:34, ngày 10 tháng 10 năm 2023 (UTC) :[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tôi không thấy có thông tin nào là không trung lập, bài viết có nội dung rất ít, đây là bài do bạn khởi tạo. Nếu vẫn còn tin phần nào là không trung lập, bạn cứ thoải mái dẫn vào đây tôi xem. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 15:42, ngày 10 tháng 10 năm 2023 (UTC) == Kay == Kay đang diễn tuồng và giả làm Ti2008. Ti2008 và tôi thật là bạn thân trên Wikipedia và đã biết nhau từ năm 2008 rồi. Cách nói chuyện đó chỉ có thể là Kay. Mai mốt, nếu Kay tái xuất ở đây thì bạn cứ việc cấm vô hạn. Nếu là Ti2008 thật thì bạn ấy sẽ log vào acc Ti2008 để nói chuyện với tôi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 23:34, ngày 14 tháng 12 năm 2023 (UTC) == [[Thành viên:WhoAlone]] == Bạn nên đề cử tv này luôn để dự án chúng ta có thêm 2 BQV mới rất tích cực! [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 02:58, ngày 31 tháng 12 năm 2023 (UTC) == Hellu bạn == Nay có nhã hứng ghé qua đây chút, tui đang tính đóng góp dự án này và duy trì bên Wikiquote (bên đó sau vụ thi viết bài là lại vắng). Nên là bạn có thể giới thiệu sơ sơ về cách hoạt động bên này không? [[Thành viên:Pminh141|Pminh141]] ([[Thảo luận Thành viên:Pminh141|thảo luận]]) 18:22, ngày 23 tháng 7 năm 2024 (UTC) :[[Thành viên:Pminh141|Pminh141]] Chỉ cần xem [https://en.wiktionary.org/wiki/Wiktionary:Criteria_for_inclusion# Wiktionary:Độ nổi bật] và [https://en.wiktionary.org/wiki/Wiktionary:Neutral_point_of_view Thái độ trung lập] là có thể đóng góp (có thể tham khảo từ điển để viết). Dự án còn rất sơ khai về mảng quy định, tương lai tôi sẽ dự tính soạn thảo tập trung vô mảng này. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 02:24, ngày 24 tháng 7 năm 2024 (UTC) == Đổi thay == Phiền bạn giúp cấp lại quyền lùi sửa và gỡ quyền tại acc chính với ạ, Bạn có thể xem [[w:en:Wikipedia:Administrators' noticeboard#Unmerge my account from global|tại thảo luận này]], xin cảm ơn. – [[Thành viên:TienMinh-mun6xnChing|TienMinh-mun6xnChing]] ([[Thảo luận Thành viên:TienMinh-mun6xnChing|thảo luận]]) 12:01, ngày 29 tháng 10 năm 2024 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:54, ngày 29 tháng 10 năm 2024 (UTC) == Các công cụ (tập lệnh) ở Wiktionary == Phiên bản sắp tới của Zinnia sẽ mở rộng cho phép sử dụng ở Wiktionary. Tôi muốn hỏi trong quy trình làm việc ở đây, bạn và mọi người có sử dụng công cụ hay tập lệnh (script) gì không, để bổ sung vào Zinnia. Cảm ơn. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 13:11, ngày 2 tháng 11 năm 2024 (UTC) : Tag thêm @[[Thành viên:TienMinh-mun6xnChing|TienMinh-mun6xnChing]]. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 13:11, ngày 2 tháng 11 năm 2024 (UTC) ::[[Thành viên:Plantaest|Plantaest]] Các công cụ hay script để chống phá hoại thông thường các tv sẽ tự cài đặt ở Meta. Vì Wiktionary chỉ có mỗi BQV mới có bộ công cụ đầy đủ chức năng (gồm cả thao tác đánh dấu tuần tra), trừ "lùi sửa" vì có quyền riêng cho tác này. Do khác Wikipedia vấn đề này, tôi nghĩ giao diện cần nghiên cứu thêm nếu áp dụng. P/s Tôi dùng Restorer thay cho Twinkle (khi hồi sửa). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:02, ngày 2 tháng 11 năm 2024 (UTC) == Cần hỗ trợ về quyết định xóa bài == Em đang chỉnh sửa bài đăng và không biết là add vào gây spam, phiền anh hỗ trợ em với ạ – [[Thành viên:Nntrinh76|Nntrinh76]] ([[Thảo luận Thành viên:Nntrinh76|thảo luận]]) 11:34, ngày 17 tháng 12 năm 2024 (UTC) :Theo [https://vi.wiktionary.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Nh%E1%BA%ADt_tr%C3%ACnh/Nntrinh76 nhật trình], bài viết bạn tạo mang nội dung vượt ngoài dự án (Wiktionary chỉ bao gồm các mục từ). Bài viết này cũng có nội dung PR cá nhân. Đó là lý do cho việc nhắc nhở. Mời bạn tham khảo [[Wiktionary:Quy định và hướng dẫn]] để rút kinh nghiệm cho các lần sửa đổi sau. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 13:16, ngày 17 tháng 12 năm 2024 (UTC) ::anh có thể mở để em chỉnh sửa được không ạ? do cũng là lần đầu em viết và em đã dùng 2 ngày tổng hợp.. – [[Thành viên:Nntrinh76|Nntrinh76]] ([[Thảo luận Thành viên:Nntrinh76|thảo luận]]) 15:35, ngày 17 tháng 12 năm 2024 (UTC) :::Trang bạn đã tạo không liên quan gì đến Wiktionary cả, tại vì đây là trang từ điển, không phải là nơi để tạo hoặc chỉnh sửa bài viết. Cho nên tôi, Đăng hoặc bqv khác không thể mở khóa cái trang đó được. – [[Thành viên:Nguyên Hưng Trần|<span style="color:#74a12e;font-family:Georgia, serif;">'''NHT'''</span>]] ([[Thảo luận Thành viên:Nguyên Hưng Trần|💬]]) 16:15, ngày 17 tháng 12 năm 2024 (UTC) == lời cảm ơn == Cảm ơn vì đã trả lời trên [[Thảo_luận:bồ_các]], vì đó là không gian công cộng nên không tiện. Không biết nhấn nút cảm ơn thì kết quả sẽ được chuyển đến người đó hay kq sẽ như thế nào nhỉ, vì nhấn nhiều lần rồi nhưng không biết sẽ như thế nào? Mình có ai cảm ơn đâu, còn IP thì không cảm ơn được. – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 15:05, ngày 13 tháng 2 năm 2025 (UTC) :Từ người thực hiện, chuyển đến người được nhận. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:02, ngày 13 tháng 2 năm 2025 (UTC) == Xin chào == Nếu có thể tôi cần giúp đỡ – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:32, ngày 14 tháng 3 năm 2025 (UTC) :[[Thành viên:Henrydat|Henrydat]] Bạn có thể nêu vấn đề cụ thể. Nếu là các việc liên quan dự án, tôi sẽ giúp trong khả năng. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:42, ngày 14 tháng 3 năm 2025 (UTC) ::Ô trời, tim tôi đang đập đây, tôi thấy chữ rối ở đây bạn biết tôi là ai còn hỏi? – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:50, ngày 14 tháng 3 năm 2025 (UTC) :::Này tôi không có thời gian, tới giờ này thì việc này rất gấp? – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:55, ngày 14 tháng 3 năm 2025 (UTC) ::::tất nhiên tôi không có ý nói tôi là rối, tôi chỉ xem lịch sử đóng góp nói vậy thôi, nếu bạn biết trước tôi là ai thì mới giúp được – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:58, ngày 14 tháng 3 năm 2025 (UTC) :::::Rồi xong tôi đã đến lộn chỗ, quyết định không hoạt đông tại dự án này là quyết định đúng đắn – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 18:02, ngày 14 tháng 3 năm 2025 (UTC) ::::::Cần lưu ý cơ chế cấm người dùng hoạt động độc lập trên mỗi dự án, tức là ngoại trừ việc lạm dụng xuyên wiki hoặc bị cấm chỉ, thành viên vẫn có thể hoạt động và xem như một tài khoản bình thường khi qua dự án khác. Bạn vẫn có thể hoạt động tại đây và tuân theo quy định tại dự án này; ngược lại, bạn có tùy quyền quyết định không tham gia đóng góp. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 07:44, ngày 15 tháng 3 năm 2025 (UTC) :::::::Này chúng ta có thể tiếp tục cuộc trò chuyện sau 7 tháng không, bây giờ có thể là lúc thích hợp hoặc có thể sớm hơn hoặc trễ hơn? Nói như bạn vậy thì dễ quá rồi, tôi hy vọng mình không mắc sai lầm. – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 15:45, ngày 9 tháng 11 năm 2025 (UTC) == [[Special:Tags]] == Tôi đang test script, nhờ bạn tạo một thẻ với tên thẻ là “twinkle” và tên hiển thị là “Twinkle” để script chạy. Cảm ơn bạn. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 00:30, ngày 1 tháng 4 năm 2025 (UTC) :[[Thành viên:Hide on Rosé|Hide on Rosé]] {{Tick}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:08, ngày 1 tháng 4 năm 2025 (UTC) :: Nào bạn rảnh thì bạn sửa lại phần tên hiển thị: Liên kết tới [[Wiktionary:Twinkle]] nhé. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 09:51, ngày 1 tháng 4 năm 2025 (UTC) [[Tập tin:Wiktionary Deletion Tools 2025.png|nhỏ|250px|phải]] :::[[Thành viên:Hide on Rosé|Hide on Rosé]] Tôi upload màn hình chụp công cụ xóa quản trị viên Wiktionary. Bạn tham khảo. Twinkle hiện tại có vẻ chủ yếu phù hợp bài viết Wikipedia. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 03:34, ngày 2 tháng 4 năm 2025 (UTC) :::: @[[Thành viên:P. ĐĂNG|P. ĐĂNG]] Danh sách xoá mà bạn chụp thì tôi xem được ở đây: [[MediaWiki:Deletereason-dropdown]]. Mô đun này tôi đã sửa theo bộ tiêu chí xoá của dự án này, bạn có thể thử. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 03:40, ngày 2 tháng 4 năm 2025 (UTC) :::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Công cụ xóa hiện như trang [[MediaWiki:Deletereason-dropdown]] chỉ xuất hiện khi bài viết có tựa đề "Wikitionary" hoặc "MediaWiki"; đối với các mục từ thì như hình chụp. Có vẻ phải chỉnh làm sao khi các thành viên ấn Twinkle gắn bản mẫu xóa trang mục từ thì nó hiện lên các lý do liên quan cho mục từ. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 03:48, ngày 2 tháng 4 năm 2025 (UTC) :::::: Đúng là như vậy. Trang trong không gian chính là mục từ (trừ Trang Chính) và cả Twinkle lẫn MediaWiki đều hiện lý do tương ứn, theo không gian tên,. code trong trang MediaWiki hiện theo không gian tên, bạn có thể xem mã nguồn của nó. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 05:41, ngày 2 tháng 4 năm 2025 (UTC) :::::: Xem [[Special:Diff/prev/2225367]]. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 05:44, ngày 2 tháng 4 năm 2025 (UTC) :::::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Ok, đã test. PS Thiếu tiêu chí độ nổi bật. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:52, ngày 2 tháng 4 năm 2025 (UTC) :::::::: Tiêu chí đó được quy định ở đâu? Tôi không thấy trong [[Wiktionary:XN]]? [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 10:53, ngày 2 tháng 4 năm 2025 (UTC) :::::::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Tôi xem qua có vẻ đúng thật chưa có trong [[Wiktionary:Quy định xóa trang]], có lẽ trang này đã lâu không cập nhật khi dự án tiến triển. Độ nổi bật các mục từ nằm trong quy định [https://en.wiktionary.org/wiki/Wiktionary:Criteria_for_inclusion này]. Tiêu chí độ nổi bật cũng có trong công cụ xóa của quản trị viên (hình). Ngoài ra, tham khảo thử quy định [https://simple.wiktionary.org/wiki/Wiktionary:Deletion#Articles này] (quy định độ nổi bật của dự án Simple English về một số mục từ). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:19, ngày 2 tháng 4 năm 2025 (UTC) : @[[Thành viên:Hide on Rosé|Hide on Rosé]] Khi tôi gắn biển chất lượng kém bằng Twinkle cho bài [[freeter]] thì xuất hiện vần đề ([[Đặc biệt:Khác/2225470|xem]]). Tôi nghĩ bản mẫu <code><nowiki>{{chất lượng kém}}</nowiki></code> và <code><nowiki>{{Chất lượng kém (nguồn)}}</nowiki></code> có vấn đề rồi. [[User:Ayane Fumihiro|<b style="font-family:Segoe UI Light;color:#FF69B4;letter-spacing:">femboy_clen</b>]] 14:01, ngày 2 tháng 4 năm 2025 (UTC) == github.com == Khi dọn bớt trang thảo luận [[Thảo luận Wiktionary:Thảo luận]] để lưu trữ thì có liên kết này bị vào blacklist. Phiền bạn xem xét có thể gỡ liên kết này ra khỏi blacklist được không? [[User:Ayane Fumihiro|<b style="font-family:Segoe UI Light;color:#FF69B4;letter-spacing:">femboy_clen</b>]] ([[User talk:Ayane Fumihiro|<span style="color:#008080;">But we got it yeah</span>]]) 16:06, ngày 22 tháng 5 năm 2025 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:17, ngày 22 tháng 5 năm 2025 (UTC) == "ủ ôi" == Từ này hay xuất hiện trong văn nói, đôi khi đọc truyện tranh tôi có bắt gặp, nhưng không biết nên định nghĩa thế nào? Nhờ bạn hỗ trợ tạo trang nếu được. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 15:37, ngày 23 tháng 7 năm 2025 (UTC) :[[Thành viên:Plantaest|Plantaest]] Đã tạo trang. Từ này nó giống "trời ơi", "trời đất" miền Nam hay gọi thôi. P.S Bạn có câu ví dụ nào hay thì thêm vô nếu muốn (2 đến 3 câu ví dụ đều được, nhưng trung lập và không yếu tố bình luận chính trị). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 05:38, ngày 24 tháng 7 năm 2025 (UTC) == "clause" == Từ "clause" trong tiếng Anh nên được dịch là "mệnh đề" hay "cú" / "tiểu cú" vậy? Mình thấy các trang web dạy tiếng Anh ở Việt Nam ngày nay đều dịch là mệnh đề, nhưng khi mình tra từ điển ''Thuật ngữ ngôn ngữ học Anh – Việt Việt – Anh'', tr. 44 của Cao Xuân Hạo, Hoàng Dũng thì lại dịch là "tiểu cú". Bên ''Từ điển Khái niệm Ngôn ngữ học'', tr. 136 của Nguyễn Thiện Giáp cũng dịch tương tự. Phiền bạn trợ giúp. --[[Thành viên:I can see my baby swimming|I can see my baby swimming]] ([[Thảo luận Thành viên:I can see my baby swimming|thảo luận]]) 12:30, ngày 31 tháng 7 năm 2025 (UTC) :[[Thành viên:I can see my baby swimming|I can see my baby swimming]] Theo nguồn [https://vjol.info.vn/index.php/sphcm/article/view/27696] (trang 14) và [https://js.vnu.edu.vn/FS/article/view/380] (trang 29), cho thấy đều là cách dịch đúng của "clause". Dịch "mệnh đề" đồng nghĩa "cú/tiểu cú" nhưng cách dịch sau mang tính học thuật chuyên môn. Tôi nghĩ có thể xem xét bối cảnh chọn cách dịch phù hợp. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:55, ngày 1 tháng 8 năm 2025 (UTC) == [[Thành viên:Yuki Shiromita/Snowfall.css]] == Nhờ bạn xóa trang này, tôi không cần css để trang trí nữa do rất lag <span style="font-family:Segoe UI Light">[[User:Yuki Shiromita|<b style="color:#FF69B4">nettai</b>]] [[Special:Contributions/Yuki Shiromita|<b style="color:#FF964F">no</b>]] [[User talk:Yuki Shiromita|<b style="color:#93E7FB">shirayukihime</b>]]</span> 06:48, ngày 30 tháng 8 năm 2025 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:05, ngày 30 tháng 8 năm 2025 (UTC) ==Happy Holidays== <div style="border-style:solid; border-color:violet; background-color:#fff; border-width:2px; text-align:left; padding:8px;" class="plainlinks"> {| style="border: 5px dotted #H1790; background-color: #DDDDDD; padding:4px" | rowspan="2" valign="left" |<span style="margin:0px 10px 10px 0px;box-shadow:0px 3px 4px rgba(0, 0, 0, 0.45);display:inline-block;">[[File:Christmas Tree 2011-12-24.jpg|left|300px|link=]]<span style="display:block;padding-top:10px;clear:both"> | <span style="font-family: Georgia; font-size: 98%; color: #190a89;">Chúc bạn P. ĐĂNG có một mùa '''Giáng sinh''' an lành, ấm áp và tràn ngập yêu thương bên gia đình!<br/> Bước sang '''năm mới''' 2026, chúc bạn gặp nhiều may mắn,<br/> gặt hái được nhiều thành công trong công việc và học tập.<br/> Một lần nữa chúc bạn sẽ có một năm mới thật an khang, hạnh phúc và vạn sự như ý!!</span> <br /> <span style="font-family: Georgia; font-size: 92%;"> | rowspan="2" valign="right" |<span style="margin:0px 10px 10px 0px;box-shadow:0px 3px 4px rgba(0, 0, 0, 0.45);display:inline-block;">[[File:Atlantic Firework Festival 2016 (53368638571).jpg|left|360px|link=]]<span style="display:block;padding-top:10px;clear:both"> |}</div> Lời chúc chân thành từ: <span style="background:#978FF;border:solid 1px;border-radius:8px;box-shadow:darkblue 2px 2px 2px">&nbsp;[[User:Kelly zhrm|<span style="font-family:Old English Text MT;color:#C90">Yellow</span>]]&#124;[[User talk:Kelly zhrm|&#248;]]&nbsp;</span>&nbsp; 05:54, ngày 24 tháng 12 năm 2025 (UTC) :[[Thành viên:Kelly zhrm|Kelly zhrm]] Cảm ơn cực muộn :D. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:11, ngày 9 tháng 1 năm 2026 (UTC) == a đuồi == Đôi khi tôi thấy từ này, nhưng không chắc định nghĩa nó thế nào? [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 08:01, ngày 30 tháng 12 năm 2025 (UTC) :[[Thành viên:Plantaest|Plantaest]] Dùng khi người nói biểu thị hàm ý nhưng không muốn diễn đạt rõ sự việc ám chỉ bằng cách nói thông thường và người nghe nhiều khả năng "sẽ" hiểu. Sau kết quả [https://www.google.com/search?q=a+%C4%91u%E1%BB%93i&sca_esv=fdc603a36385362d&rlz=1C1GCEA_enVN1050VN1050&biw=1536&bih=730&aic=0&sxsrf=ANbL-n6bNxATTi-Ja0wA8rmwvQPrO6MF7Q%3A1767953043675&ei=k9Jgae77KLCp4-EP1-n-6AI&ved=0ahUKEwiukZepmv6RAxWw1DgGHde0Hy0Q4dUDCBE tra cứu], tôi tham khảo một số trang web có nhắc đến cụm từ này và hiểu được như trên. Ngoài ra, một số ngữ cảnh được hiểu theo cách [https://www.hieuchua.com/define/A%20%C4%90u%E1%BB%93i này]. Các trang này chưa đủ uy tín để dùng "giải nghĩa" nhưng nó là tất cả trong khả năng có thể dùng tìm hiểu hiện tại. Hy vọng hữu ích đến bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:07, ngày 9 tháng 1 năm 2026 (UTC) == PANG450a, b, c, d, e, f, g, h, i, j, k, l, m, n == Yummie giả dạng rối PANG450v của PVR từ lúc hắn tạo tài khoản PANG450a sao?? Tôi tưởng PVR tạo rối sửa đổi ở đây chứ! Mà khoan, Yummie hắn thường spam đường link tới các wiki Fandom, Miraheze và trang đóng góp của tài khoản hắn giả dạng (PANG450v) hả? – [[Thành viên:Higashizakura|<span style="color:pink; font-family:Noto Serif JP, serif;">'''Anh Đào Phương Đông'''</span>]] ([[Thảo luận Thành viên:Higashizakura|🌸]]) 16:20, ngày 21 tháng 1 năm 2026 (UTC) : Cái trò [[mượn gió bẻ măng]] của Yummie quá cũ rồi. Thật không còn gì đáng bàn. [[User:Hiyuune|<b style="font-family:Segoe UI Light;color:#FFB3AE;letter-spacing:">Hiyuune</b>]] [[User talk: Hiyuune|<b style="font-family:Segoe UI Light;color:#FFF7AD;letter-spacing:">(angustifolia)</b>]] 17:01, ngày 21 tháng 1 năm 2026 (UTC) :[[Thành viên:Higashizakura|Higashizakura]] Phạm Văn Rạng là rối sửa bài viết chính trị (khá nghiêm túc và có khả năng biên tập; chỉ hoạt động tại các dự án Wikipedia vì mục đích chính sửa bài viết chính trị); Yummie là rối spam phá hoại. Có thể dựa vào nhật trình sửa đổi của tk nhận dạng. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 06:48, ngày 22 tháng 1 năm 2026 (UTC) ::[[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]].[[Thành viên:PANG450n|PANG450n]] ([[Thảo luận Thành viên:PANG450n|thảo luận]]) 09:10, ngày 4 tháng 5 năm 2026 (UTC) == [[porfolio]] và [[portfolio]] == Từ đầu có vẻ là sai chính tả, qua enwikt thì đó là tiếng Tây Ban Nha. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 04:19, ngày 24 tháng 2 năm 2026 (UTC) :[[Thành viên:Plantaest|Plantaest]] Tra theo cú pháp "'Porfolio' (Conjunto de fotografías o grabados de diferentes clases que forman un tomo o volumen encuadernable)", thấy ghi nhận cơ bản là mục từ tiếng Tây Ban Nha phỏng theo tiếng Anh và Pháp đã bỏ âm "t" sau khi nước này đưa vào từ điển sử dụng. [[Thành viên:Hiyuune|Hiyuune]] đã giúp sửa. P.S Có vẻ cách dịch nghĩa hiện tại trong bài sai so với nguồn (nguồn [https://www.scribd.com/document/378489759/SUSTANTIVOS-COLECTIVOS#content=query:porfolio,pageNum:1,indexOnPage:0,bestMatch:false này] cũng không thấy theo nghĩa dịch vậy). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:23, ngày 25 tháng 2 năm 2026 (UTC) ihhnzpkc9q42lefqipdaiizxljwgrir 2350123 2350122 2026-05-04T09:25:21Z Hiyuune 50834 Đã lùi lại sửa đổi của [[Special:Contributions/PANG450n|PANG450n]] ([[User talk:PANG450n|thảo luận]]) quay về phiên bản cuối của [[User:PANG450m|PANG450m]] 2350119 wikitext text/x-wiki <div style="border:1px solid #FDA; vertical-align:top; padding: 0.5em; background: #FFFFE5;"> <div style="margin-left:0.5em; margin-right: 0.5em; margin-bottom:1em; margin-top: 0.1em;"> <span style="font-size: 1.3rem;">'''Xin chào P. ĐĂNG! Chào mừng bạn đến với Wiktionary tiếng Việt!'''</span> <div class="plainlinks"><p style="margin-top:0.1em; margin-bottom: 1em;">Wiktionary là từ điển mở mà ai cũng đều có thể chỉnh sửa. Cách sử dụng và quy định có thể gây khó khăn cho bạn, nhưng hãy dần học hỏi và '''[[Wiktionary:Táo bạo|mạnh dạn đóng góp]]'''. Các thông tin dưới đây sẽ có thể giúp bạn sử dụng và chỉnh sửa Wiktionary.</p></div> </div> <!-- Quan trọng --> <div style="clear: both; margin-left: 1.5em; margin-right 1.5em; font-size: 100%;"> {| class="plainlinks" width="100%" style="margin:auto;" | style="text-align:center; padding:4px" | [[File:OOjs UI icon search-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Tìm kiếm|Tìm kiếm Wiktionary]]''' <br />Tìm hiểu cách tìm và tra cứu mục từ trên Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon lightbulb.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Yêu cầu mục từ|Yêu cầu mục từ]]'''<br />Nơi để bạn thêm những từ cần viết nhưng chưa có tại Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon userAvatar.svg|30px|link=|]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Cộng đồng|Cổng Cộng đồng Wiktionary tiếng Việt]]'''<br />Nơi tìm hiểu mọi thông tin về của Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon articleCheck-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Quy định và hướng dẫn|Quy định và hướng dẫn]]''' <br />Chính sách của Wiktionary là gì? Xin vui lòng đọc nó trước khi thực hiện chỉnh sửa! |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon edit-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Viết trang mới|Viết trang mới]]'''<br />Tham khảo cách viết trang hay mục từ mới tại Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon tray.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Chỗ thử|Chỗ thử]]'''<br />Nơi để bạn viết nháp và thử nghiệm. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon wikiText.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Sửa đổi|Thực hiện sửa đổi]]'''<br />Tham khảo hướng dẫn sửa đổi và cùng bắt đầu sửa đổi Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon helpNotice-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Bàn giúp đỡ|Bàn giúp đỡ]]'''<br />Nơi hỏi đáp khi gặp khó khăn trên Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon book-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Mục lục|Mục lục trợ giúp]]''' <br />Mục lục giúp bạn thông tin và hướng dẫn khác khi gặp khó khăn trong những lúc đóng góp! | style="text-align:center; padding:4px" | [[File:OOjs UI icon speechBubbles-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Thảo luận|Thảo luận chung]]'''<br />Nơi trao đổi ý kiến giữa bạn và các thành viên khác! |}</div> <div style="padding: 0.5em; background: #FEC; border: 1px solid #FDA; margin-top: 1em; font-size: 1em"> [[File:Vector sig vi.png|250px|right]] '''Hãy luôn nhớ rằng, sau khi viết thảo luận xong thì đừng quên bước quan trọng đó là ký tên ở phía sau thảo luận'''. Phương thức ký tên được sử dụng trong Wiktionary không phải là viết tên trực tiếp, nhưng xin hãy ký tên bằng cách sử dụng 4 dấu ngã (<code><nowiki>--~~~~</nowiki></code>) hoặc bằng cách nhấp vào nút chữ ký ([[File:OOUI JS signature icon LTR.svg|20px|border]]) trong cửa sổ chỉnh sửa của phiên bản trình soạn thảo mã nguồn thông thường.<br/> [[Wiktionary:Guestbook_for_non-Vietnamese_speakers|Welcome! If you are not good at Vietnamese or do not speak it, click here.]] </div> </div>&nbsp;--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 07:34, ngày 24 tháng 6 năm 2023 (UTC) == BQV == Bạn có muốn làm BQV ở Wiktionary này không? Nếu có hứng thú, mời bạn ra ứng cử ở [[Thảo luận Wiktionary:Bảo quản viên]]. Tôi muốn tuyển thêm BQV cho Wiktionary vì Wiktionary hiện tại không có BQV thường trực. Đây là môi trường thực tập tốt trước khi làm ĐPV bên Wikipedia. Hồi xưa, tôi cũng đóng góp cho cả hai dự án cùng một lúc (Wikipedia + Wiktionary). [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 13:32, ngày 2 tháng 8 năm 2023 (UTC) :@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Tôi hay hoạt động bên đây thật nhưng bên đây tôi có ít sửa đổi. Chỉ vài tuần trước tôi xin quyền lùi sửa để chống phá hoại nhưng không đủ yêu cầu thì BQV làm sao tôi ứng cử được. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:33, ngày 2 tháng 8 năm 2023 (UTC) ::Bên Wiktionary không có yêu cầu tối thiểu để làm BQV. Bạn có đóng góp bên Wikipedia thì ra ứng cử là ok rồi. Quan trọng là bạn có muốn vác tù và hàng tổng không thôi? [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 15:23, ngày 2 tháng 8 năm 2023 (UTC) :::@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Tất nhiên, nếu có cơ hội được công đồng giao phó thì tôi sẽ làm. Nhưng chắc tôi cần tích cực cày sửa đổi một thời gian vì hiện tại tôi có dưới 300 sửa đổi. Có thể, tôi nghĩ tôi sẽ tích cực bên dự án này vài tuần cái đã. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 15:27, ngày 2 tháng 8 năm 2023 (UTC) ::::Bạn tính vậy cũng được. Cày sửa đổi là dễ mà. 2 tuần sau, mời bạn tự ra ứng cử. Tôi sẽ ủng hộ. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 15:57, ngày 2 tháng 8 năm 2023 (UTC) == Mệt nhỉ? == Tụi này lì như trâu thật, mới chập sáng đòi vặt lông bẻ cổ tổ tông nhà tôi này. – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:43, ngày 3 tháng 8 năm 2023 (UTC) :@[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] Tôi qua đây thì gặp TTS. Haha MTRIRod với bạn Phú nói đúng, tên này ám tôi như ma ám rồi. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:44, ngày 3 tháng 8 năm 2023 (UTC) ::Mà hình như bên vi chưa cấm tên [https://vi.wikipedia.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:%C4%90%C3%B3ng_g%C3%B3p/%C4%90%E1%BB%ABng_b%C6%A1_S%C6%A1n_n%E1%BB%AFa,_S%C6%A1n_c%C3%B4_%C4%91%C6%A1n_l%E1%BA%AFm! này] thì phải? – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:48, ngày 3 tháng 8 năm 2023 (UTC) :::@[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] Chắc cấm sót, mà TTS chắc không dùng lại tk đó đâu. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:50, ngày 3 tháng 8 năm 2023 (UTC) ::::Đâu, vừa nhắc xong thì hình như mới chửi Nguyenmy kìa. – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:52, ngày 3 tháng 8 năm 2023 (UTC) :::::@[[Thành viên:P. ĐĂNG|P. ĐĂNG]] @[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] @[[Thành viên:Tryvix1509|Tryvix1509]] @[[Thành viên:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] Mà không biết tôi có nên đệ đơn cấm chỉ tên TTS này đến Nhóm Tin cậy & An toàn của tổ chức Wikimedia không nhỉ? – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 09:58, ngày 3 tháng 8 năm 2023 (UTC) ::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tổ chức này hoạt động như thế nào?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:03, ngày 3 tháng 8 năm 2023 (UTC) :::::::Tôi cũng chỉ [[m:WMF Global Ban Policy/vi|đọc thoáng qua sơ sơ về quy định cấm chỉ toàn hệ thống tổ chức này]], và thấy tổ chức hoạt động qua email ca@wikimedia.org – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:07, ngày 3 tháng 8 năm 2023 (UTC) ::::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Là cấm chỉ một tk toàn cầu bên meta đúng không?. Chắc không cần rồi và cũng không hiệu quả. Tôi nhớ không lầm TTS bị cấm toàn cục từ tk đầu tiên rồi. Hiện giờ dùng proxy thì cấm toàn cục gì nữa. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:10, ngày 3 tháng 8 năm 2023 (UTC) :::::::::Các tk rối của TTS như bạn nói chỉ bị khóa toàn cục = TTS vẫn chưa bị cấm chỉ trên toàn hệ thống. Tôi nghĩ biện pháp này là cách hay nhất để răn đe tên này, chắc tôi nghĩ để lúc khác làm sau vậy. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:17, ngày 3 tháng 8 năm 2023 (UTC) ::::::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Chẳng phải khóa toàn cầu là trên toàn hệ thống Wikipedia? TTS không dùng một tk cố định và dùng proxy. Cấm tk này thì sẽ nhảy qua tk khác bằng một IP khác. Đề xuất của bạn không rõ ràng, tôi chưa hiểu lắm. Nếu được thì làm ngay bây giờ luôn đi. Tôi mới báo cái tk của TTS lên meta cho tiếp viên cấm toàn cầu đấy, hai tk nãy giờ phá hoại hiện đang bị cấm. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:25, ngày 3 tháng 8 năm 2023 (UTC) == Bản mẫu cảnh báo mới == Cảm ơn bạn đã tạo bản mẫu cánh báo về việc sử dụng Wiktionary để quảng cáo. Nhưng tôi thấy bên Wikipedia tiếng Việt [[:w:vi:Bản mẫu:Spam|trang Bản mẫu:Spam]] là dùng để báo cáo liên kết rác, vì vậy xin phép tôi được đổi tên bản mẫu [[Đặc biệt:So sánh di động/2119930|từ "spam-1" thành "Cb1-spam"]]. Tôi không biết việc làm của tôi có đúng không do bên Wikipedia tiếng Việt cũng có [[:w:vi:Bản mẫu:Cb1-spam|bản mẫu tên như thế này]] chắc dùng để cảnh báo thành viên về việc thêm liên kết quảng cáo trong bài. Và nếu bạn thấy tôi sai mong bạn hãy lùi lại. Cảm ơn bạn. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:54, ngày 14 tháng 8 năm 2023 (UTC) :[[Thành viên:DefenderTienMinh07]]: Cảm ơn Tiến Minh. Nhưng lần sau bạn hãy đọc kỹ nội dung bản mẫu, bản mẫu này không phải cảnh báo thêm link spam mà là thông tin quảng cáo, tức là khi tv tạo bài PR (trang mới, PR trong trang thảo luận, hoặc chèn thông tin PR) thì dùng bản mẫu này. Mỗi wiktionary hoạt động độc lập, cộng đồng bên ta vốn nhỏ bé và ít người nên đặt tên bản mẫu đừng thêm vài chữ làm rườm rà khó nhớ, hầu hết thành viên không dùng Twinkle và đặt biển thủ công nên tôi chọn tên ngắn để các bạn dễ dùng. Nhưng nếu bạn đã đổi thì để vậy cũng được vì tôi đang cần làm thêm vài thứ, nâng cấp một vài thứ thiết yếu và để tên tạm như thế cũng được nếu tương lai có phát sinh thêm tôi sẽ thay đổi một vài bản mẫu cho phù hợp và nhất quán. Sẵn đây tôi hỏi bạn có dùng Twinkle không? Nếu có cho tôi xin một vài ý kiến có được không?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:25, ngày 16 tháng 8 năm 2023 (UTC) ::Do dự án đang trong phát triển về mảng tin học nên tôi nghĩ trang global.js trên Meta sẽ là giải pháp hay để cài công cụ. Các công cụ hữu ích tôi vừa tìm được cho dự án: Restorer của BrandonXLF, TwinkleGlobal của Xiplus và WarningDialog.js của Tryvix1509 và nhiều người khác. Tôi chưa hiểu câu hỏi bạn đặt ra cho lắm, nếu bạn đang hỏi về công cụ TwinkleMobile của Plantaest trên dự án này thì tôi nghĩ bạn nên hỏi Plantaest do công cụ vẫn chưa được Plantaest kích hoạt trên đây. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 18:07, ngày 17 tháng 8 năm 2023 (UTC) :::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Ý tôi là việc dùng Twinkle của bạn trên đây có giống bên Wikipedia không? Nó có chức năng gắn biển, cảnh báo hay chỉ dừng lại ở chức năng lùi sửa. Tôi không dùng Twinkle trên đây, nên tôi mới hỏi bạn để biết thêm thông tin do tôi cần nâng cấp một vài bản mẫu và muốn kích hoạt nó vô Twinkle, tôi muốn Twinkle bên đây được cấu hình lại cho tiện và đầy đủ chức năng giống bên các dự án khác cho các bạn dùng. Tôi sẽ làm trong phạm vi có thể, nhưng chắc sẽ cần thời gian. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:38, ngày 18 tháng 8 năm 2023 (UTC) ::::Việc dùng Twinkle trên đây của tôi chỉ là để phục vụ mục đích tuần tra TĐGĐ trong việc lùi tất cả sửa đổi không thiện chí do tôi chưa có quyền lùi sửa. Nếu bạn muốn công cụ có thể cảnh báo thành viên thì công cụ WarningDialog.js của Tryvix có thể giúp bạn trong trường hợp này. Bạn nên hỏi Tryvix xem sao (tôi đã ping @[[Thành viên:Tryvix1509|Tryvix1509]]) – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:14, ngày 21 tháng 8 năm 2023 (UTC) ::Quay lại chủ đề bản mẫu cảnh báo vừa tạo không biết có nên dùng bản mẫu '''khi mà trường hợp tài khoản đó bị chặn bởi bộ lọc sai phạm''' không chứ tôi ngày nào mà chả thấy mấy tài khoản spambot dùng Wiktionary để quảng cáo có chèn đường link không à dẫn tới việc bị chặn và bị ghi lại trong bộ lọc sai phạm mà không ai phát hiện ra. (bạn có thể xem đầy đủ tại [[Đặc biệt:Nhật trình sai phạm]]) – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:23, ngày 21 tháng 8 năm 2023 (UTC) :::[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Thế thì dùng vậy cũng được, để tôi chỉnh lại bản mẫu cho ý tựu chung hơn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:08, ngày 22 tháng 8 năm 2023 (UTC) == BQV == Rất vui vì bạn đã dũng cảm ra vác tù và hàng tổng. Tôi sẽ ủng hộ. Tuy nhiên, bạn cần gửi thư mời tham gia BQ BQV đến các thành viên trên Wiktionary (tv tích cực lẫn tv thỉnh thoảng xuất hiện). Chúc bạn đắc cử! [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 05:55, ngày 24 tháng 8 năm 2023 (UTC) :Tôi mới cấp quyền cho bạn. Chúc bạn tiếp tục hoạt động tích cực ở cả hai dự án, trao dồi thêm kinh nghiệm bảo quản và vài tháng nữa tự ra ứng cử làm ĐPV ở Wikipedia. Tôi sẽ ủng hộ nếu như không có gì thay đổi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 20:52, ngày 2 tháng 9 năm 2023 (UTC) == Thư mời tham gia biểu quyết == <div style="padding: 0.5em; background: #f8f8ff; margin-top: 1em; font-size: 1em"> {| class="table" style="width: 80%; background-color: #ACE1AF; border: 1px solid #fceb92; margin: auto; margin-bottom: 10px" | style="vertical-align: middle; padding: 10px;" | [[Tập tin:Logo vote.svg|80px|link=]] | style="vertical-align: middle; padding: 15px 10px 10px 0;" | '''Mời bạn cho ý kiến về việc cấp quyền Bảo quản viên cho thành viên [[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] tại trang [[Thảo luận Wiktionary:Bảo quản viên#DefenderTienMinh07|Thảo luận Wiktionary:Bảo quản viên]]. Xin cảm ơn. <small>Hãy cùng tích cực tham gia các biểu quyết và thảo luận về chúng. Mỗi hành động của bạn sẽ góp phần không nhỏ để xây dựng các mục từ trên Wiktionary - tài sản chung của cộng đồng chúng ta, giúp wiki ta ngày càng phát triển vững mạnh! Thân ái! |} </div> [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:25, ngày 24 tháng 8 năm 2023 (UTC) == Bất ngờ chưa! == Tôi tới đây là để thông báo một tin vui cho bạn. {{ý kiến|1=Tin vui là:}} Hiện tại bạn '''đã là BQV trên dự án Wiktionary tiếng Việt'''. Bạn lúc này cảm thấy thể nào? Mong bạn sẽ làm tốt công việc của mình như tôi đã nói lúc bỏ phiếu. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 21:02, ngày 2 tháng 9 năm 2023 (UTC) :Tôi cũng không biết nói thế nào, nhưng cảm ơn bạn và Phú cũng như các thành viên khác đã hỗ trợ tôi từ dự án này qua dự án khác. Từ nay, tôi đảm nhận thêm nhiều nhiệm vụ hơn trên Wiktionary nên sẽ cố gắng chọn cách làm hiệu quả tốt nhất cho dự án. Tôi ít nói quá, vài dòng trên là tất cả, tôi không nghĩ thêm được gì để diễn tả hết. Cảm ơn vì thông báo này. Chúc bạn một ngày tốt lành. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:50, ngày 3 tháng 9 năm 2023 (UTC) == Một số sửa đổi của bạn gần đây == Chào bạn! Về một số sửa đổi của bạn gần đây, như tại [[khả năng]], [[chứng minh]], ... Nếu phần định nghĩa có các từ kiểu như "nước ta", "nhân dân ta", ... thì ta nên thay bằng các từ khác hoặc xóa đi. Còn nếu nó có ở phần vd thì không cần xóa do phần này chấp nhận chứa các từ như vậy--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 12:48, ngày 16 tháng 9 năm 2023 (UTC) :@[[Thành viên:TheHighFighter2|TheHighFighter2]] Đúng vậy, tôi đã xoá chúng đi vì Wiktionary:Thái độ trung lập. Wiktionary có quy định về phần vd được phép ngoại lệ này không?. Tôi đã có nói chuyện với HCV Mxn về điều này. Tôi khẳng định nó không trung lập và xoá đi là cần thiết, và sẽ bổ sung phần ví dụ mới vào. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:19, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:P. ĐĂNG|P. ĐĂNG]] Hiện tại trên dự án không có trang nào tên là [[Wiktionary:Thái độ trung lập]]. Chả là bạn muốn tìm trang quy định liên quan tới vấn đề chăng? – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 14:29, ngày 16 tháng 9 năm 2023 (UTC) :::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Chưa có chứ không phải không. Các dự án Wikipedia đều hoạt động hướng đến chung là thái độ trung lập. Wiktionary tiếng Việt không phải Wiktionary Việt Nam. HCV Mxn cũng đi xoá những thứ này. Khi dùng từ như "dân ta, nhân dân ta", khi người nước ngoài đọc, bạn nghĩ sao về điều này? Chúng ta hướng đến một dự án phục vụ mọi người, mọi chủng tộc và quốc gia, không phải riêng một đất nước nào. Vì vậy, mỗi dòng viết ra phải dựa trên thái độ trung lập. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:36, ngày 16 tháng 9 năm 2023 (UTC) ::::Bạn nói cũng đúng vì theo quy định bên Wiktionary tiếng Anh "all entries must be written from a '''neutral point of view''', representing views fairly and without bias" (tạm dịch: Mọi nội dung được đưa vào đều phải được viết từ một cái nhìn trung lập, thể hiện cái nhìn công bằng và không thiên kiến). Nhưng tôi nghĩ cũng không nhất thiết lắm phải kiểm tra và sửa lại những nội dung POV vì nội dung không trung lập thường nó cũng không ảnh hưởng gì nhiều đến dự án lắm. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 14:46, ngày 16 tháng 9 năm 2023 (UTC) :::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Đây là điều đương nhiên. Chúng ta đang hoạt động trên đâu? Wiktionary là dự án bách khoa, nó ưu tiên thái độ trung lập, nơi mà một người Mỹ có thể qua đọc bài viết của một Wikimedia tiếng Đức, tiếng Việt hay tiếng Trung. Khi không trung lập, bạn nói không nhất thiết sửa lại là sao?. Đến nay tôi mới phát hiện Wiktionary tiếng Việt đang có văn phong không trung lập rất nhiều, trích câu Hồ Chí Minh, dùng thơ... Tôi cần BQV TheHighFighter2 phản hồi điều này, lẽ ra phải thảo luận với tôi trước khi lùi sửa, thứ mang tính chất mâu thuẫn. Nếu có quy định nào nói phần ví dụ ta được ngoại lệ thì tôi sẽ xem lại sửa đổi của mình. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:53, ngày 16 tháng 9 năm 2023 (UTC) ::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tôi dám chắc là không có quy định nào về ngoại lệ này cả. Không trung lập mới là đi ngược với quy định của bách khoa. Nội dung trên đây vốn đa phần được sao chép từ FVDP một dự án không có quy định tính trung lập, khi dùng nó đưa vô thì phải xem xét ở một vài khía cạnh chứ không copy là xong được. Wiktionary không phải từ điển của Việt Nam, nó cũng không phải sách giáo khoa, không dùng văn phong thiên vị một phía, thêm thơ lại không trung lập. Bạn sang các Wiktionary tiếng khác xem, có nền tảng wiki nào dùng những câu ví dụ như "nhân dân ta chiến đấu bảo vệ tổ quốc" "chiến tranh chống đế quốc Mỹ", có xuất hiện không?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:58, ngày 16 tháng 9 năm 2023 (UTC) 1. Bên en có rất nhiều mục có vd chứa các từ "[https://en.wiktionary.org/w/index.php?search=%22our+country%22&title=Special:Search&profile=advanced&fulltext=1&ns0=1 our country]", "[https://en.wiktionary.org/w/index.php?search=%22n%C6%B0%E1%BB%9Bc+ta%22&title=Special:Search&ns0=1&searchToken=12thcn782xmsjc7aixwau68ok nước ta]; bên fr có "[https://fr.wiktionary.org/w/index.php?search=%22notre+pays%22&title=Sp%C3%A9cial:Recherche&profile=advanced&fulltext=1&searchengineselect=mediawiki&ns0=1&ns100=1&ns106=1&ns110=1&searchToken=vol8t2pu9urr4hv60l40oom8 notre pays]" (đất nước chúng tôi) 2. Khi lấy vd cho mục "[[Đảng ta]]", "[[Mĩ nguỵ]]", "[[ba que]]" thì ta nên lấy vd như nào? --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 15:57, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:TheHighFighter2|TheHighFighter2]] Xin gửi bạn một phần tin nhắn của tôi với HCB Mxn: "tất cả các câu thí dụ này được nhập từ Dự án Từ điển tiếng Việt miễn phí (FVDP), dự án này sao chép nguyên cả lời định nghĩa từ một số từ điển khác, có lẽ bao gồm những cuốn từ điển trong nước. (FVDP cũng có nhiều danh ngôn của Hồ Chí Minh.) Mấy năm nay tôi cũng muốn gạt đi những câu thí dụ không trung lập hoặc sửa lại theo thuật ngữ trung lập hơn. Đây chỉ là một trong rất nhiều điều thiếu sót của việc nhập FVDP. Nếu bạn có thể giúp dọn dẹp các câu thí dụ và danh ngôn thì tốt quá". Những từ tiếng Việt được xây dựng bên en cũng đa phần dùng bot và người mở rộng có cả những tv người Việt (từ ngoại quốc có thể không bị kiểm duyệt gắt gao khi người kiểm duyệt không am hiểu thứ tiếng, giống như có tv nào tạo bài tiếng phạn hay chữ Hán bên đây chúng ta thì có thể tỷ lệ phần trăm sai phạm bị bỏ qua sẽ nhiều hơn các từ hệ chữ chúng ta dùng). Còn bên fr, bạn xem ví dụ của họ có liên quan đến chủ thể cỡ nào? Nó đáng bao nhiêu phần trăm? Rõ ràng như Wiktionary vi không?. Về trường hợp lấy ví dụ của các từ như "Đảng ta" "Mĩ ngụy" thì đây là một từ, trích quy định "Tất cả các bài viết và các nội dung bách khoa khác tại Wikipedia phải được viết trên một quan điểm trung lập (QDTL), thể hiện một cách công bằng và không thiên vị" tôi nghĩ bạn đủ khả năng tự suy ra hướng tôi đang muốn nói. Khi bạn dùng từ này vô trường hợp như "Mĩ ngụy xâm chiếm nước ta" --> ám chỉ rõ ràng đây là dự án tiếng Việt và nước ta là Việt Nam. Bản chất từ tôi không nói nó vi phạm thái độ trung lập, nhưng tùy ngữ cảnh mà bạn đưa vào là một vấn đề đấy. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:18, ngày 16 tháng 9 năm 2023 (UTC) :Thì thế tôi mới nói "không nhất thiết lắm phải kiểm tra và sửa lại những nội dung POV" đó. Nội dung không trung lập không có nghĩa là nội dung đó không hữu ích. Nói chung là tùy trường hợp, hợp lý là được miễn sao nội dung đó không quá khích. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:12, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Bạn có biết đang nói cái gì không vậy? Không trung lập = vi phạm quy định. Sửa đổi sai đang cần sửa nhưng bạn lại nói không cần thiết?. WP:Thái độ trung lập là một trong những trụ cột của Wikimedia, cho dù đó là sửa đổi thiện chí nhưng vi phạm thì cũng không cần. Dự án chúng ta các tv đã không còn khả năng sửa điều này? Nếu không, tại sao chấp nhận nó?. Sao có thể nhưng không thay bằng một nội dung vừa hữu ích vừa phù hợp với chính sách của ta hơn. Tôi không hiểu bạn Tiến Minh nói không nhất thiết giải quyết những điều này là gì? Bên Wikipedia có nhiều tk bị cấm vì thái độ trung lập đấy và thành viên không kiểm soát được điều này nên mấy tk này quay lại và thành rối nằm vùng. Phần nội dung hiện rõ lên vậy, bạn lại nói là không quá khích. Thế nào là quá khích, đủ để các tv bắt tay vào làm? Tôi xin nhắc lại, Wiktionary tiếng Việt không phải Wiktionary Việt Nam. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:26, ngày 16 tháng 9 năm 2023 (UTC) Hướng giải quyết: Nếu 1 mục từ bình thường có vd chứa các từ như trên: thay thế vd khác. Còn các từ liên quan đến chính trị, trường hợp đặc biệt khác, thì có thể lấy vd chứa những từ như trên. Bạn thấy thế nào? --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 16:53, ngày 16 tháng 9 năm 2023 (UTC) :@[[Thành viên:TheHighFighter2|TheHighFighter2]] Xin phiền bạn đưa phần tin nhắn này ra trang thảo luận vì Tiến Minh đã gửi thư nên tôi đã di chuyển nó ra thảo để mọi người có thể cùng nhau giải quyết. Cảm ơn bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:00, ngày 16 tháng 9 năm 2023 (UTC) :''Đã di chuyển đến [[Wiktionary:Thảo luận#Tính trung lập]].'' &nbsp; – [[Thành viên:Mxn|Nguyễn Xuân Minh]]&nbsp;<sup>[[Thảo luận Thành viên:Mxn|<span style="display: inline-block;">&#x1f4ac;</span>]]</sup> 01:56, ngày 17 tháng 9 năm 2023 (UTC) == [[Cửu đoạn tuyến]] == Phiền bạn check và gỡ một số nội dung không trung lập trong mục từ này (nếu có), tôi thấy có nội dung không trung lập nhưng chưa thể gỡ do liên quan đến mục từ, xin cảm ơn. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 11:34, ngày 10 tháng 10 năm 2023 (UTC) :[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tôi không thấy có thông tin nào là không trung lập, bài viết có nội dung rất ít, đây là bài do bạn khởi tạo. Nếu vẫn còn tin phần nào là không trung lập, bạn cứ thoải mái dẫn vào đây tôi xem. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 15:42, ngày 10 tháng 10 năm 2023 (UTC) == Kay == Kay đang diễn tuồng và giả làm Ti2008. Ti2008 và tôi thật là bạn thân trên Wikipedia và đã biết nhau từ năm 2008 rồi. Cách nói chuyện đó chỉ có thể là Kay. Mai mốt, nếu Kay tái xuất ở đây thì bạn cứ việc cấm vô hạn. Nếu là Ti2008 thật thì bạn ấy sẽ log vào acc Ti2008 để nói chuyện với tôi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 23:34, ngày 14 tháng 12 năm 2023 (UTC) == [[Thành viên:WhoAlone]] == Bạn nên đề cử tv này luôn để dự án chúng ta có thêm 2 BQV mới rất tích cực! [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 02:58, ngày 31 tháng 12 năm 2023 (UTC) == Hellu bạn == Nay có nhã hứng ghé qua đây chút, tui đang tính đóng góp dự án này và duy trì bên Wikiquote (bên đó sau vụ thi viết bài là lại vắng). Nên là bạn có thể giới thiệu sơ sơ về cách hoạt động bên này không? [[Thành viên:Pminh141|Pminh141]] ([[Thảo luận Thành viên:Pminh141|thảo luận]]) 18:22, ngày 23 tháng 7 năm 2024 (UTC) :[[Thành viên:Pminh141|Pminh141]] Chỉ cần xem [https://en.wiktionary.org/wiki/Wiktionary:Criteria_for_inclusion# Wiktionary:Độ nổi bật] và [https://en.wiktionary.org/wiki/Wiktionary:Neutral_point_of_view Thái độ trung lập] là có thể đóng góp (có thể tham khảo từ điển để viết). Dự án còn rất sơ khai về mảng quy định, tương lai tôi sẽ dự tính soạn thảo tập trung vô mảng này. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 02:24, ngày 24 tháng 7 năm 2024 (UTC) == Đổi thay == Phiền bạn giúp cấp lại quyền lùi sửa và gỡ quyền tại acc chính với ạ, Bạn có thể xem [[w:en:Wikipedia:Administrators' noticeboard#Unmerge my account from global|tại thảo luận này]], xin cảm ơn. – [[Thành viên:TienMinh-mun6xnChing|TienMinh-mun6xnChing]] ([[Thảo luận Thành viên:TienMinh-mun6xnChing|thảo luận]]) 12:01, ngày 29 tháng 10 năm 2024 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:54, ngày 29 tháng 10 năm 2024 (UTC) == Các công cụ (tập lệnh) ở Wiktionary == Phiên bản sắp tới của Zinnia sẽ mở rộng cho phép sử dụng ở Wiktionary. Tôi muốn hỏi trong quy trình làm việc ở đây, bạn và mọi người có sử dụng công cụ hay tập lệnh (script) gì không, để bổ sung vào Zinnia. Cảm ơn. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 13:11, ngày 2 tháng 11 năm 2024 (UTC) : Tag thêm @[[Thành viên:TienMinh-mun6xnChing|TienMinh-mun6xnChing]]. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 13:11, ngày 2 tháng 11 năm 2024 (UTC) ::[[Thành viên:Plantaest|Plantaest]] Các công cụ hay script để chống phá hoại thông thường các tv sẽ tự cài đặt ở Meta. Vì Wiktionary chỉ có mỗi BQV mới có bộ công cụ đầy đủ chức năng (gồm cả thao tác đánh dấu tuần tra), trừ "lùi sửa" vì có quyền riêng cho tác này. Do khác Wikipedia vấn đề này, tôi nghĩ giao diện cần nghiên cứu thêm nếu áp dụng. P/s Tôi dùng Restorer thay cho Twinkle (khi hồi sửa). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:02, ngày 2 tháng 11 năm 2024 (UTC) == Cần hỗ trợ về quyết định xóa bài == Em đang chỉnh sửa bài đăng và không biết là add vào gây spam, phiền anh hỗ trợ em với ạ – [[Thành viên:Nntrinh76|Nntrinh76]] ([[Thảo luận Thành viên:Nntrinh76|thảo luận]]) 11:34, ngày 17 tháng 12 năm 2024 (UTC) :Theo [https://vi.wiktionary.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Nh%E1%BA%ADt_tr%C3%ACnh/Nntrinh76 nhật trình], bài viết bạn tạo mang nội dung vượt ngoài dự án (Wiktionary chỉ bao gồm các mục từ). Bài viết này cũng có nội dung PR cá nhân. Đó là lý do cho việc nhắc nhở. Mời bạn tham khảo [[Wiktionary:Quy định và hướng dẫn]] để rút kinh nghiệm cho các lần sửa đổi sau. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 13:16, ngày 17 tháng 12 năm 2024 (UTC) ::anh có thể mở để em chỉnh sửa được không ạ? do cũng là lần đầu em viết và em đã dùng 2 ngày tổng hợp.. – [[Thành viên:Nntrinh76|Nntrinh76]] ([[Thảo luận Thành viên:Nntrinh76|thảo luận]]) 15:35, ngày 17 tháng 12 năm 2024 (UTC) :::Trang bạn đã tạo không liên quan gì đến Wiktionary cả, tại vì đây là trang từ điển, không phải là nơi để tạo hoặc chỉnh sửa bài viết. Cho nên tôi, Đăng hoặc bqv khác không thể mở khóa cái trang đó được. – [[Thành viên:Nguyên Hưng Trần|<span style="color:#74a12e;font-family:Georgia, serif;">'''NHT'''</span>]] ([[Thảo luận Thành viên:Nguyên Hưng Trần|💬]]) 16:15, ngày 17 tháng 12 năm 2024 (UTC) == lời cảm ơn == Cảm ơn vì đã trả lời trên [[Thảo_luận:bồ_các]], vì đó là không gian công cộng nên không tiện. Không biết nhấn nút cảm ơn thì kết quả sẽ được chuyển đến người đó hay kq sẽ như thế nào nhỉ, vì nhấn nhiều lần rồi nhưng không biết sẽ như thế nào? Mình có ai cảm ơn đâu, còn IP thì không cảm ơn được. – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 15:05, ngày 13 tháng 2 năm 2025 (UTC) :Từ người thực hiện, chuyển đến người được nhận. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:02, ngày 13 tháng 2 năm 2025 (UTC) == Xin chào == Nếu có thể tôi cần giúp đỡ – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:32, ngày 14 tháng 3 năm 2025 (UTC) :[[Thành viên:Henrydat|Henrydat]] Bạn có thể nêu vấn đề cụ thể. Nếu là các việc liên quan dự án, tôi sẽ giúp trong khả năng. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:42, ngày 14 tháng 3 năm 2025 (UTC) ::Ô trời, tim tôi đang đập đây, tôi thấy chữ rối ở đây bạn biết tôi là ai còn hỏi? – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:50, ngày 14 tháng 3 năm 2025 (UTC) :::Này tôi không có thời gian, tới giờ này thì việc này rất gấp? – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:55, ngày 14 tháng 3 năm 2025 (UTC) ::::tất nhiên tôi không có ý nói tôi là rối, tôi chỉ xem lịch sử đóng góp nói vậy thôi, nếu bạn biết trước tôi là ai thì mới giúp được – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:58, ngày 14 tháng 3 năm 2025 (UTC) :::::Rồi xong tôi đã đến lộn chỗ, quyết định không hoạt đông tại dự án này là quyết định đúng đắn – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 18:02, ngày 14 tháng 3 năm 2025 (UTC) ::::::Cần lưu ý cơ chế cấm người dùng hoạt động độc lập trên mỗi dự án, tức là ngoại trừ việc lạm dụng xuyên wiki hoặc bị cấm chỉ, thành viên vẫn có thể hoạt động và xem như một tài khoản bình thường khi qua dự án khác. Bạn vẫn có thể hoạt động tại đây và tuân theo quy định tại dự án này; ngược lại, bạn có tùy quyền quyết định không tham gia đóng góp. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 07:44, ngày 15 tháng 3 năm 2025 (UTC) :::::::Này chúng ta có thể tiếp tục cuộc trò chuyện sau 7 tháng không, bây giờ có thể là lúc thích hợp hoặc có thể sớm hơn hoặc trễ hơn? Nói như bạn vậy thì dễ quá rồi, tôi hy vọng mình không mắc sai lầm. – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 15:45, ngày 9 tháng 11 năm 2025 (UTC) == [[Special:Tags]] == Tôi đang test script, nhờ bạn tạo một thẻ với tên thẻ là “twinkle” và tên hiển thị là “Twinkle” để script chạy. Cảm ơn bạn. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 00:30, ngày 1 tháng 4 năm 2025 (UTC) :[[Thành viên:Hide on Rosé|Hide on Rosé]] {{Tick}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:08, ngày 1 tháng 4 năm 2025 (UTC) :: Nào bạn rảnh thì bạn sửa lại phần tên hiển thị: Liên kết tới [[Wiktionary:Twinkle]] nhé. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 09:51, ngày 1 tháng 4 năm 2025 (UTC) [[Tập tin:Wiktionary Deletion Tools 2025.png|nhỏ|250px|phải]] :::[[Thành viên:Hide on Rosé|Hide on Rosé]] Tôi upload màn hình chụp công cụ xóa quản trị viên Wiktionary. Bạn tham khảo. Twinkle hiện tại có vẻ chủ yếu phù hợp bài viết Wikipedia. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 03:34, ngày 2 tháng 4 năm 2025 (UTC) :::: @[[Thành viên:P. ĐĂNG|P. ĐĂNG]] Danh sách xoá mà bạn chụp thì tôi xem được ở đây: [[MediaWiki:Deletereason-dropdown]]. Mô đun này tôi đã sửa theo bộ tiêu chí xoá của dự án này, bạn có thể thử. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 03:40, ngày 2 tháng 4 năm 2025 (UTC) :::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Công cụ xóa hiện như trang [[MediaWiki:Deletereason-dropdown]] chỉ xuất hiện khi bài viết có tựa đề "Wikitionary" hoặc "MediaWiki"; đối với các mục từ thì như hình chụp. Có vẻ phải chỉnh làm sao khi các thành viên ấn Twinkle gắn bản mẫu xóa trang mục từ thì nó hiện lên các lý do liên quan cho mục từ. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 03:48, ngày 2 tháng 4 năm 2025 (UTC) :::::: Đúng là như vậy. Trang trong không gian chính là mục từ (trừ Trang Chính) và cả Twinkle lẫn MediaWiki đều hiện lý do tương ứn, theo không gian tên,. code trong trang MediaWiki hiện theo không gian tên, bạn có thể xem mã nguồn của nó. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 05:41, ngày 2 tháng 4 năm 2025 (UTC) :::::: Xem [[Special:Diff/prev/2225367]]. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 05:44, ngày 2 tháng 4 năm 2025 (UTC) :::::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Ok, đã test. PS Thiếu tiêu chí độ nổi bật. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:52, ngày 2 tháng 4 năm 2025 (UTC) :::::::: Tiêu chí đó được quy định ở đâu? Tôi không thấy trong [[Wiktionary:XN]]? [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 10:53, ngày 2 tháng 4 năm 2025 (UTC) :::::::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Tôi xem qua có vẻ đúng thật chưa có trong [[Wiktionary:Quy định xóa trang]], có lẽ trang này đã lâu không cập nhật khi dự án tiến triển. Độ nổi bật các mục từ nằm trong quy định [https://en.wiktionary.org/wiki/Wiktionary:Criteria_for_inclusion này]. Tiêu chí độ nổi bật cũng có trong công cụ xóa của quản trị viên (hình). Ngoài ra, tham khảo thử quy định [https://simple.wiktionary.org/wiki/Wiktionary:Deletion#Articles này] (quy định độ nổi bật của dự án Simple English về một số mục từ). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:19, ngày 2 tháng 4 năm 2025 (UTC) : @[[Thành viên:Hide on Rosé|Hide on Rosé]] Khi tôi gắn biển chất lượng kém bằng Twinkle cho bài [[freeter]] thì xuất hiện vần đề ([[Đặc biệt:Khác/2225470|xem]]). Tôi nghĩ bản mẫu <code><nowiki>{{chất lượng kém}}</nowiki></code> và <code><nowiki>{{Chất lượng kém (nguồn)}}</nowiki></code> có vấn đề rồi. [[User:Ayane Fumihiro|<b style="font-family:Segoe UI Light;color:#FF69B4;letter-spacing:">femboy_clen</b>]] 14:01, ngày 2 tháng 4 năm 2025 (UTC) == github.com == Khi dọn bớt trang thảo luận [[Thảo luận Wiktionary:Thảo luận]] để lưu trữ thì có liên kết này bị vào blacklist. Phiền bạn xem xét có thể gỡ liên kết này ra khỏi blacklist được không? [[User:Ayane Fumihiro|<b style="font-family:Segoe UI Light;color:#FF69B4;letter-spacing:">femboy_clen</b>]] ([[User talk:Ayane Fumihiro|<span style="color:#008080;">But we got it yeah</span>]]) 16:06, ngày 22 tháng 5 năm 2025 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:17, ngày 22 tháng 5 năm 2025 (UTC) == "ủ ôi" == Từ này hay xuất hiện trong văn nói, đôi khi đọc truyện tranh tôi có bắt gặp, nhưng không biết nên định nghĩa thế nào? Nhờ bạn hỗ trợ tạo trang nếu được. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 15:37, ngày 23 tháng 7 năm 2025 (UTC) :[[Thành viên:Plantaest|Plantaest]] Đã tạo trang. Từ này nó giống "trời ơi", "trời đất" miền Nam hay gọi thôi. P.S Bạn có câu ví dụ nào hay thì thêm vô nếu muốn (2 đến 3 câu ví dụ đều được, nhưng trung lập và không yếu tố bình luận chính trị). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 05:38, ngày 24 tháng 7 năm 2025 (UTC) == "clause" == Từ "clause" trong tiếng Anh nên được dịch là "mệnh đề" hay "cú" / "tiểu cú" vậy? Mình thấy các trang web dạy tiếng Anh ở Việt Nam ngày nay đều dịch là mệnh đề, nhưng khi mình tra từ điển ''Thuật ngữ ngôn ngữ học Anh – Việt Việt – Anh'', tr. 44 của Cao Xuân Hạo, Hoàng Dũng thì lại dịch là "tiểu cú". Bên ''Từ điển Khái niệm Ngôn ngữ học'', tr. 136 của Nguyễn Thiện Giáp cũng dịch tương tự. Phiền bạn trợ giúp. --[[Thành viên:I can see my baby swimming|I can see my baby swimming]] ([[Thảo luận Thành viên:I can see my baby swimming|thảo luận]]) 12:30, ngày 31 tháng 7 năm 2025 (UTC) :[[Thành viên:I can see my baby swimming|I can see my baby swimming]] Theo nguồn [https://vjol.info.vn/index.php/sphcm/article/view/27696] (trang 14) và [https://js.vnu.edu.vn/FS/article/view/380] (trang 29), cho thấy đều là cách dịch đúng của "clause". Dịch "mệnh đề" đồng nghĩa "cú/tiểu cú" nhưng cách dịch sau mang tính học thuật chuyên môn. Tôi nghĩ có thể xem xét bối cảnh chọn cách dịch phù hợp. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:55, ngày 1 tháng 8 năm 2025 (UTC) == [[Thành viên:Yuki Shiromita/Snowfall.css]] == Nhờ bạn xóa trang này, tôi không cần css để trang trí nữa do rất lag <span style="font-family:Segoe UI Light">[[User:Yuki Shiromita|<b style="color:#FF69B4">nettai</b>]] [[Special:Contributions/Yuki Shiromita|<b style="color:#FF964F">no</b>]] [[User talk:Yuki Shiromita|<b style="color:#93E7FB">shirayukihime</b>]]</span> 06:48, ngày 30 tháng 8 năm 2025 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:05, ngày 30 tháng 8 năm 2025 (UTC) ==Happy Holidays== <div style="border-style:solid; border-color:violet; background-color:#fff; border-width:2px; text-align:left; padding:8px;" class="plainlinks"> {| style="border: 5px dotted #H1790; background-color: #DDDDDD; padding:4px" | rowspan="2" valign="left" |<span style="margin:0px 10px 10px 0px;box-shadow:0px 3px 4px rgba(0, 0, 0, 0.45);display:inline-block;">[[File:Christmas Tree 2011-12-24.jpg|left|300px|link=]]<span style="display:block;padding-top:10px;clear:both"> | <span style="font-family: Georgia; font-size: 98%; color: #190a89;">Chúc bạn P. ĐĂNG có một mùa '''Giáng sinh''' an lành, ấm áp và tràn ngập yêu thương bên gia đình!<br/> Bước sang '''năm mới''' 2026, chúc bạn gặp nhiều may mắn,<br/> gặt hái được nhiều thành công trong công việc và học tập.<br/> Một lần nữa chúc bạn sẽ có một năm mới thật an khang, hạnh phúc và vạn sự như ý!!</span> <br /> <span style="font-family: Georgia; font-size: 92%;"> | rowspan="2" valign="right" |<span style="margin:0px 10px 10px 0px;box-shadow:0px 3px 4px rgba(0, 0, 0, 0.45);display:inline-block;">[[File:Atlantic Firework Festival 2016 (53368638571).jpg|left|360px|link=]]<span style="display:block;padding-top:10px;clear:both"> |}</div> Lời chúc chân thành từ: <span style="background:#978FF;border:solid 1px;border-radius:8px;box-shadow:darkblue 2px 2px 2px">&nbsp;[[User:Kelly zhrm|<span style="font-family:Old English Text MT;color:#C90">Yellow</span>]]&#124;[[User talk:Kelly zhrm|&#248;]]&nbsp;</span>&nbsp; 05:54, ngày 24 tháng 12 năm 2025 (UTC) :[[Thành viên:Kelly zhrm|Kelly zhrm]] Cảm ơn cực muộn :D. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:11, ngày 9 tháng 1 năm 2026 (UTC) == a đuồi == Đôi khi tôi thấy từ này, nhưng không chắc định nghĩa nó thế nào? [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 08:01, ngày 30 tháng 12 năm 2025 (UTC) :[[Thành viên:Plantaest|Plantaest]] Dùng khi người nói biểu thị hàm ý nhưng không muốn diễn đạt rõ sự việc ám chỉ bằng cách nói thông thường và người nghe nhiều khả năng "sẽ" hiểu. Sau kết quả [https://www.google.com/search?q=a+%C4%91u%E1%BB%93i&sca_esv=fdc603a36385362d&rlz=1C1GCEA_enVN1050VN1050&biw=1536&bih=730&aic=0&sxsrf=ANbL-n6bNxATTi-Ja0wA8rmwvQPrO6MF7Q%3A1767953043675&ei=k9Jgae77KLCp4-EP1-n-6AI&ved=0ahUKEwiukZepmv6RAxWw1DgGHde0Hy0Q4dUDCBE tra cứu], tôi tham khảo một số trang web có nhắc đến cụm từ này và hiểu được như trên. Ngoài ra, một số ngữ cảnh được hiểu theo cách [https://www.hieuchua.com/define/A%20%C4%90u%E1%BB%93i này]. Các trang này chưa đủ uy tín để dùng "giải nghĩa" nhưng nó là tất cả trong khả năng có thể dùng tìm hiểu hiện tại. Hy vọng hữu ích đến bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:07, ngày 9 tháng 1 năm 2026 (UTC) == PANG450a, b, c, d, e, f, g, h, i, j, k, l, m == Yummie giả dạng rối PANG450v của PVR từ lúc hắn tạo tài khoản PANG450a sao?? Tôi tưởng PVR tạo rối sửa đổi ở đây chứ! Mà khoan, Yummie hắn thường spam đường link tới các wiki Fandom, Miraheze và trang đóng góp của tài khoản hắn giả dạng (PANG450v) hả? – [[Thành viên:Higashizakura|<span style="color:pink; font-family:Noto Serif JP, serif;">'''Anh Đào Phương Đông'''</span>]] ([[Thảo luận Thành viên:Higashizakura|🌸]]) 16:20, ngày 21 tháng 1 năm 2026 (UTC) : Cái trò [[mượn gió bẻ măng]] của Yummie quá cũ rồi. Thật không còn gì đáng bàn. [[User:Hiyuune|<b style="font-family:Segoe UI Light;color:#FFB3AE;letter-spacing:">Hiyuune</b>]] [[User talk: Hiyuune|<b style="font-family:Segoe UI Light;color:#FFF7AD;letter-spacing:">(angustifolia)</b>]] 17:01, ngày 21 tháng 1 năm 2026 (UTC) :[[Thành viên:Higashizakura|Higashizakura]] Phạm Văn Rạng là rối sửa bài viết chính trị (khá nghiêm túc và có khả năng biên tập; chỉ hoạt động tại các dự án Wikipedia vì mục đích chính sửa bài viết chính trị); Yummie là rối spam phá hoại. Có thể dựa vào nhật trình sửa đổi của tk nhận dạng. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 06:48, ngày 22 tháng 1 năm 2026 (UTC) ::[[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]].[[Thành viên:PANG450m|PANG450m]] ([[Thảo luận Thành viên:PANG450m|thảo luận]]) 08:38, ngày 4 tháng 5 năm 2026 (UTC) == [[porfolio]] và [[portfolio]] == Từ đầu có vẻ là sai chính tả, qua enwikt thì đó là tiếng Tây Ban Nha. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 04:19, ngày 24 tháng 2 năm 2026 (UTC) :[[Thành viên:Plantaest|Plantaest]] Tra theo cú pháp "'Porfolio' (Conjunto de fotografías o grabados de diferentes clases que forman un tomo o volumen encuadernable)", thấy ghi nhận cơ bản là mục từ tiếng Tây Ban Nha phỏng theo tiếng Anh và Pháp đã bỏ âm "t" sau khi nước này đưa vào từ điển sử dụng. [[Thành viên:Hiyuune|Hiyuune]] đã giúp sửa. P.S Có vẻ cách dịch nghĩa hiện tại trong bài sai so với nguồn (nguồn [https://www.scribd.com/document/378489759/SUSTANTIVOS-COLECTIVOS#content=query:porfolio,pageNum:1,indexOnPage:0,bestMatch:false này] cũng không thấy theo nghĩa dịch vậy). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:23, ngày 25 tháng 2 năm 2026 (UTC) imvmkc82e27buja6wm6ndtiotvprxpx 2350124 2350123 2026-05-04T09:25:52Z Hiyuune 50834 Hồi sửa về bản sửa đổi 2343824 của [[Special:Contributions/WhoAlone|WhoAlone]] ([[User talk:WhoAlone|talk]]) 2350124 wikitext text/x-wiki <div style="border:1px solid #FDA; vertical-align:top; padding: 0.5em; background: #FFFFE5;"> <div style="margin-left:0.5em; margin-right: 0.5em; margin-bottom:1em; margin-top: 0.1em;"> <span style="font-size: 1.3rem;">'''Xin chào P. ĐĂNG! Chào mừng bạn đến với Wiktionary tiếng Việt!'''</span> <div class="plainlinks"><p style="margin-top:0.1em; margin-bottom: 1em;">Wiktionary là từ điển mở mà ai cũng đều có thể chỉnh sửa. Cách sử dụng và quy định có thể gây khó khăn cho bạn, nhưng hãy dần học hỏi và '''[[Wiktionary:Táo bạo|mạnh dạn đóng góp]]'''. Các thông tin dưới đây sẽ có thể giúp bạn sử dụng và chỉnh sửa Wiktionary.</p></div> </div> <!-- Quan trọng --> <div style="clear: both; margin-left: 1.5em; margin-right 1.5em; font-size: 100%;"> {| class="plainlinks" width="100%" style="margin:auto;" | style="text-align:center; padding:4px" | [[File:OOjs UI icon search-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Tìm kiếm|Tìm kiếm Wiktionary]]''' <br />Tìm hiểu cách tìm và tra cứu mục từ trên Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon lightbulb.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Yêu cầu mục từ|Yêu cầu mục từ]]'''<br />Nơi để bạn thêm những từ cần viết nhưng chưa có tại Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon userAvatar.svg|30px|link=|]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Cộng đồng|Cổng Cộng đồng Wiktionary tiếng Việt]]'''<br />Nơi tìm hiểu mọi thông tin về của Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon articleCheck-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Quy định và hướng dẫn|Quy định và hướng dẫn]]''' <br />Chính sách của Wiktionary là gì? Xin vui lòng đọc nó trước khi thực hiện chỉnh sửa! |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon edit-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Viết trang mới|Viết trang mới]]'''<br />Tham khảo cách viết trang hay mục từ mới tại Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon tray.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Chỗ thử|Chỗ thử]]'''<br />Nơi để bạn viết nháp và thử nghiệm. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon wikiText.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Sửa đổi|Thực hiện sửa đổi]]'''<br />Tham khảo hướng dẫn sửa đổi và cùng bắt đầu sửa đổi Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon helpNotice-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Bàn giúp đỡ|Bàn giúp đỡ]]'''<br />Nơi hỏi đáp khi gặp khó khăn trên Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon book-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Mục lục|Mục lục trợ giúp]]''' <br />Mục lục giúp bạn thông tin và hướng dẫn khác khi gặp khó khăn trong những lúc đóng góp! | style="text-align:center; padding:4px" | [[File:OOjs UI icon speechBubbles-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Thảo luận|Thảo luận chung]]'''<br />Nơi trao đổi ý kiến giữa bạn và các thành viên khác! |}</div> <div style="padding: 0.5em; background: #FEC; border: 1px solid #FDA; margin-top: 1em; font-size: 1em"> [[File:Vector sig vi.png|250px|right]] '''Hãy luôn nhớ rằng, sau khi viết thảo luận xong thì đừng quên bước quan trọng đó là ký tên ở phía sau thảo luận'''. Phương thức ký tên được sử dụng trong Wiktionary không phải là viết tên trực tiếp, nhưng xin hãy ký tên bằng cách sử dụng 4 dấu ngã (<code><nowiki>--~~~~</nowiki></code>) hoặc bằng cách nhấp vào nút chữ ký ([[File:OOUI JS signature icon LTR.svg|20px|border]]) trong cửa sổ chỉnh sửa của phiên bản trình soạn thảo mã nguồn thông thường.<br/> [[Wiktionary:Guestbook_for_non-Vietnamese_speakers|Welcome! If you are not good at Vietnamese or do not speak it, click here.]] </div> </div>&nbsp;--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 07:34, ngày 24 tháng 6 năm 2023 (UTC) == BQV == Bạn có muốn làm BQV ở Wiktionary này không? Nếu có hứng thú, mời bạn ra ứng cử ở [[Thảo luận Wiktionary:Bảo quản viên]]. Tôi muốn tuyển thêm BQV cho Wiktionary vì Wiktionary hiện tại không có BQV thường trực. Đây là môi trường thực tập tốt trước khi làm ĐPV bên Wikipedia. Hồi xưa, tôi cũng đóng góp cho cả hai dự án cùng một lúc (Wikipedia + Wiktionary). [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 13:32, ngày 2 tháng 8 năm 2023 (UTC) :@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Tôi hay hoạt động bên đây thật nhưng bên đây tôi có ít sửa đổi. Chỉ vài tuần trước tôi xin quyền lùi sửa để chống phá hoại nhưng không đủ yêu cầu thì BQV làm sao tôi ứng cử được. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:33, ngày 2 tháng 8 năm 2023 (UTC) ::Bên Wiktionary không có yêu cầu tối thiểu để làm BQV. Bạn có đóng góp bên Wikipedia thì ra ứng cử là ok rồi. Quan trọng là bạn có muốn vác tù và hàng tổng không thôi? [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 15:23, ngày 2 tháng 8 năm 2023 (UTC) :::@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Tất nhiên, nếu có cơ hội được công đồng giao phó thì tôi sẽ làm. Nhưng chắc tôi cần tích cực cày sửa đổi một thời gian vì hiện tại tôi có dưới 300 sửa đổi. Có thể, tôi nghĩ tôi sẽ tích cực bên dự án này vài tuần cái đã. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 15:27, ngày 2 tháng 8 năm 2023 (UTC) ::::Bạn tính vậy cũng được. Cày sửa đổi là dễ mà. 2 tuần sau, mời bạn tự ra ứng cử. Tôi sẽ ủng hộ. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 15:57, ngày 2 tháng 8 năm 2023 (UTC) == Mệt nhỉ? == Tụi này lì như trâu thật, mới chập sáng đòi vặt lông bẻ cổ tổ tông nhà tôi này. – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:43, ngày 3 tháng 8 năm 2023 (UTC) :@[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] Tôi qua đây thì gặp TTS. Haha MTRIRod với bạn Phú nói đúng, tên này ám tôi như ma ám rồi. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:44, ngày 3 tháng 8 năm 2023 (UTC) ::Mà hình như bên vi chưa cấm tên [https://vi.wikipedia.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:%C4%90%C3%B3ng_g%C3%B3p/%C4%90%E1%BB%ABng_b%C6%A1_S%C6%A1n_n%E1%BB%AFa,_S%C6%A1n_c%C3%B4_%C4%91%C6%A1n_l%E1%BA%AFm! này] thì phải? – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:48, ngày 3 tháng 8 năm 2023 (UTC) :::@[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] Chắc cấm sót, mà TTS chắc không dùng lại tk đó đâu. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:50, ngày 3 tháng 8 năm 2023 (UTC) ::::Đâu, vừa nhắc xong thì hình như mới chửi Nguyenmy kìa. – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:52, ngày 3 tháng 8 năm 2023 (UTC) :::::@[[Thành viên:P. ĐĂNG|P. ĐĂNG]] @[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] @[[Thành viên:Tryvix1509|Tryvix1509]] @[[Thành viên:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] Mà không biết tôi có nên đệ đơn cấm chỉ tên TTS này đến Nhóm Tin cậy & An toàn của tổ chức Wikimedia không nhỉ? – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 09:58, ngày 3 tháng 8 năm 2023 (UTC) ::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tổ chức này hoạt động như thế nào?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:03, ngày 3 tháng 8 năm 2023 (UTC) :::::::Tôi cũng chỉ [[m:WMF Global Ban Policy/vi|đọc thoáng qua sơ sơ về quy định cấm chỉ toàn hệ thống tổ chức này]], và thấy tổ chức hoạt động qua email ca@wikimedia.org – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:07, ngày 3 tháng 8 năm 2023 (UTC) ::::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Là cấm chỉ một tk toàn cầu bên meta đúng không?. Chắc không cần rồi và cũng không hiệu quả. Tôi nhớ không lầm TTS bị cấm toàn cục từ tk đầu tiên rồi. Hiện giờ dùng proxy thì cấm toàn cục gì nữa. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:10, ngày 3 tháng 8 năm 2023 (UTC) :::::::::Các tk rối của TTS như bạn nói chỉ bị khóa toàn cục = TTS vẫn chưa bị cấm chỉ trên toàn hệ thống. Tôi nghĩ biện pháp này là cách hay nhất để răn đe tên này, chắc tôi nghĩ để lúc khác làm sau vậy. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:17, ngày 3 tháng 8 năm 2023 (UTC) ::::::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Chẳng phải khóa toàn cầu là trên toàn hệ thống Wikipedia? TTS không dùng một tk cố định và dùng proxy. Cấm tk này thì sẽ nhảy qua tk khác bằng một IP khác. Đề xuất của bạn không rõ ràng, tôi chưa hiểu lắm. Nếu được thì làm ngay bây giờ luôn đi. Tôi mới báo cái tk của TTS lên meta cho tiếp viên cấm toàn cầu đấy, hai tk nãy giờ phá hoại hiện đang bị cấm. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:25, ngày 3 tháng 8 năm 2023 (UTC) == Bản mẫu cảnh báo mới == Cảm ơn bạn đã tạo bản mẫu cánh báo về việc sử dụng Wiktionary để quảng cáo. Nhưng tôi thấy bên Wikipedia tiếng Việt [[:w:vi:Bản mẫu:Spam|trang Bản mẫu:Spam]] là dùng để báo cáo liên kết rác, vì vậy xin phép tôi được đổi tên bản mẫu [[Đặc biệt:So sánh di động/2119930|từ "spam-1" thành "Cb1-spam"]]. Tôi không biết việc làm của tôi có đúng không do bên Wikipedia tiếng Việt cũng có [[:w:vi:Bản mẫu:Cb1-spam|bản mẫu tên như thế này]] chắc dùng để cảnh báo thành viên về việc thêm liên kết quảng cáo trong bài. Và nếu bạn thấy tôi sai mong bạn hãy lùi lại. Cảm ơn bạn. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:54, ngày 14 tháng 8 năm 2023 (UTC) :[[Thành viên:DefenderTienMinh07]]: Cảm ơn Tiến Minh. Nhưng lần sau bạn hãy đọc kỹ nội dung bản mẫu, bản mẫu này không phải cảnh báo thêm link spam mà là thông tin quảng cáo, tức là khi tv tạo bài PR (trang mới, PR trong trang thảo luận, hoặc chèn thông tin PR) thì dùng bản mẫu này. Mỗi wiktionary hoạt động độc lập, cộng đồng bên ta vốn nhỏ bé và ít người nên đặt tên bản mẫu đừng thêm vài chữ làm rườm rà khó nhớ, hầu hết thành viên không dùng Twinkle và đặt biển thủ công nên tôi chọn tên ngắn để các bạn dễ dùng. Nhưng nếu bạn đã đổi thì để vậy cũng được vì tôi đang cần làm thêm vài thứ, nâng cấp một vài thứ thiết yếu và để tên tạm như thế cũng được nếu tương lai có phát sinh thêm tôi sẽ thay đổi một vài bản mẫu cho phù hợp và nhất quán. Sẵn đây tôi hỏi bạn có dùng Twinkle không? Nếu có cho tôi xin một vài ý kiến có được không?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:25, ngày 16 tháng 8 năm 2023 (UTC) ::Do dự án đang trong phát triển về mảng tin học nên tôi nghĩ trang global.js trên Meta sẽ là giải pháp hay để cài công cụ. Các công cụ hữu ích tôi vừa tìm được cho dự án: Restorer của BrandonXLF, TwinkleGlobal của Xiplus và WarningDialog.js của Tryvix1509 và nhiều người khác. Tôi chưa hiểu câu hỏi bạn đặt ra cho lắm, nếu bạn đang hỏi về công cụ TwinkleMobile của Plantaest trên dự án này thì tôi nghĩ bạn nên hỏi Plantaest do công cụ vẫn chưa được Plantaest kích hoạt trên đây. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 18:07, ngày 17 tháng 8 năm 2023 (UTC) :::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Ý tôi là việc dùng Twinkle của bạn trên đây có giống bên Wikipedia không? Nó có chức năng gắn biển, cảnh báo hay chỉ dừng lại ở chức năng lùi sửa. Tôi không dùng Twinkle trên đây, nên tôi mới hỏi bạn để biết thêm thông tin do tôi cần nâng cấp một vài bản mẫu và muốn kích hoạt nó vô Twinkle, tôi muốn Twinkle bên đây được cấu hình lại cho tiện và đầy đủ chức năng giống bên các dự án khác cho các bạn dùng. Tôi sẽ làm trong phạm vi có thể, nhưng chắc sẽ cần thời gian. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:38, ngày 18 tháng 8 năm 2023 (UTC) ::::Việc dùng Twinkle trên đây của tôi chỉ là để phục vụ mục đích tuần tra TĐGĐ trong việc lùi tất cả sửa đổi không thiện chí do tôi chưa có quyền lùi sửa. Nếu bạn muốn công cụ có thể cảnh báo thành viên thì công cụ WarningDialog.js của Tryvix có thể giúp bạn trong trường hợp này. Bạn nên hỏi Tryvix xem sao (tôi đã ping @[[Thành viên:Tryvix1509|Tryvix1509]]) – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:14, ngày 21 tháng 8 năm 2023 (UTC) ::Quay lại chủ đề bản mẫu cảnh báo vừa tạo không biết có nên dùng bản mẫu '''khi mà trường hợp tài khoản đó bị chặn bởi bộ lọc sai phạm''' không chứ tôi ngày nào mà chả thấy mấy tài khoản spambot dùng Wiktionary để quảng cáo có chèn đường link không à dẫn tới việc bị chặn và bị ghi lại trong bộ lọc sai phạm mà không ai phát hiện ra. (bạn có thể xem đầy đủ tại [[Đặc biệt:Nhật trình sai phạm]]) – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:23, ngày 21 tháng 8 năm 2023 (UTC) :::[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Thế thì dùng vậy cũng được, để tôi chỉnh lại bản mẫu cho ý tựu chung hơn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:08, ngày 22 tháng 8 năm 2023 (UTC) == BQV == Rất vui vì bạn đã dũng cảm ra vác tù và hàng tổng. Tôi sẽ ủng hộ. Tuy nhiên, bạn cần gửi thư mời tham gia BQ BQV đến các thành viên trên Wiktionary (tv tích cực lẫn tv thỉnh thoảng xuất hiện). Chúc bạn đắc cử! [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 05:55, ngày 24 tháng 8 năm 2023 (UTC) :Tôi mới cấp quyền cho bạn. Chúc bạn tiếp tục hoạt động tích cực ở cả hai dự án, trao dồi thêm kinh nghiệm bảo quản và vài tháng nữa tự ra ứng cử làm ĐPV ở Wikipedia. Tôi sẽ ủng hộ nếu như không có gì thay đổi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 20:52, ngày 2 tháng 9 năm 2023 (UTC) == Thư mời tham gia biểu quyết == <div style="padding: 0.5em; background: #f8f8ff; margin-top: 1em; font-size: 1em"> {| class="table" style="width: 80%; background-color: #ACE1AF; border: 1px solid #fceb92; margin: auto; margin-bottom: 10px" | style="vertical-align: middle; padding: 10px;" | [[Tập tin:Logo vote.svg|80px|link=]] | style="vertical-align: middle; padding: 15px 10px 10px 0;" | '''Mời bạn cho ý kiến về việc cấp quyền Bảo quản viên cho thành viên [[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] tại trang [[Thảo luận Wiktionary:Bảo quản viên#DefenderTienMinh07|Thảo luận Wiktionary:Bảo quản viên]]. Xin cảm ơn. <small>Hãy cùng tích cực tham gia các biểu quyết và thảo luận về chúng. Mỗi hành động của bạn sẽ góp phần không nhỏ để xây dựng các mục từ trên Wiktionary - tài sản chung của cộng đồng chúng ta, giúp wiki ta ngày càng phát triển vững mạnh! Thân ái! |} </div> [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:25, ngày 24 tháng 8 năm 2023 (UTC) == Bất ngờ chưa! == Tôi tới đây là để thông báo một tin vui cho bạn. {{ý kiến|1=Tin vui là:}} Hiện tại bạn '''đã là BQV trên dự án Wiktionary tiếng Việt'''. Bạn lúc này cảm thấy thể nào? Mong bạn sẽ làm tốt công việc của mình như tôi đã nói lúc bỏ phiếu. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 21:02, ngày 2 tháng 9 năm 2023 (UTC) :Tôi cũng không biết nói thế nào, nhưng cảm ơn bạn và Phú cũng như các thành viên khác đã hỗ trợ tôi từ dự án này qua dự án khác. Từ nay, tôi đảm nhận thêm nhiều nhiệm vụ hơn trên Wiktionary nên sẽ cố gắng chọn cách làm hiệu quả tốt nhất cho dự án. Tôi ít nói quá, vài dòng trên là tất cả, tôi không nghĩ thêm được gì để diễn tả hết. Cảm ơn vì thông báo này. Chúc bạn một ngày tốt lành. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:50, ngày 3 tháng 9 năm 2023 (UTC) == Một số sửa đổi của bạn gần đây == Chào bạn! Về một số sửa đổi của bạn gần đây, như tại [[khả năng]], [[chứng minh]], ... Nếu phần định nghĩa có các từ kiểu như "nước ta", "nhân dân ta", ... thì ta nên thay bằng các từ khác hoặc xóa đi. Còn nếu nó có ở phần vd thì không cần xóa do phần này chấp nhận chứa các từ như vậy--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 12:48, ngày 16 tháng 9 năm 2023 (UTC) :@[[Thành viên:TheHighFighter2|TheHighFighter2]] Đúng vậy, tôi đã xoá chúng đi vì Wiktionary:Thái độ trung lập. Wiktionary có quy định về phần vd được phép ngoại lệ này không?. Tôi đã có nói chuyện với HCV Mxn về điều này. Tôi khẳng định nó không trung lập và xoá đi là cần thiết, và sẽ bổ sung phần ví dụ mới vào. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:19, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:P. ĐĂNG|P. ĐĂNG]] Hiện tại trên dự án không có trang nào tên là [[Wiktionary:Thái độ trung lập]]. Chả là bạn muốn tìm trang quy định liên quan tới vấn đề chăng? – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 14:29, ngày 16 tháng 9 năm 2023 (UTC) :::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Chưa có chứ không phải không. Các dự án Wikipedia đều hoạt động hướng đến chung là thái độ trung lập. Wiktionary tiếng Việt không phải Wiktionary Việt Nam. HCV Mxn cũng đi xoá những thứ này. Khi dùng từ như "dân ta, nhân dân ta", khi người nước ngoài đọc, bạn nghĩ sao về điều này? Chúng ta hướng đến một dự án phục vụ mọi người, mọi chủng tộc và quốc gia, không phải riêng một đất nước nào. Vì vậy, mỗi dòng viết ra phải dựa trên thái độ trung lập. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:36, ngày 16 tháng 9 năm 2023 (UTC) ::::Bạn nói cũng đúng vì theo quy định bên Wiktionary tiếng Anh "all entries must be written from a '''neutral point of view''', representing views fairly and without bias" (tạm dịch: Mọi nội dung được đưa vào đều phải được viết từ một cái nhìn trung lập, thể hiện cái nhìn công bằng và không thiên kiến). Nhưng tôi nghĩ cũng không nhất thiết lắm phải kiểm tra và sửa lại những nội dung POV vì nội dung không trung lập thường nó cũng không ảnh hưởng gì nhiều đến dự án lắm. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 14:46, ngày 16 tháng 9 năm 2023 (UTC) :::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Đây là điều đương nhiên. Chúng ta đang hoạt động trên đâu? Wiktionary là dự án bách khoa, nó ưu tiên thái độ trung lập, nơi mà một người Mỹ có thể qua đọc bài viết của một Wikimedia tiếng Đức, tiếng Việt hay tiếng Trung. Khi không trung lập, bạn nói không nhất thiết sửa lại là sao?. Đến nay tôi mới phát hiện Wiktionary tiếng Việt đang có văn phong không trung lập rất nhiều, trích câu Hồ Chí Minh, dùng thơ... Tôi cần BQV TheHighFighter2 phản hồi điều này, lẽ ra phải thảo luận với tôi trước khi lùi sửa, thứ mang tính chất mâu thuẫn. Nếu có quy định nào nói phần ví dụ ta được ngoại lệ thì tôi sẽ xem lại sửa đổi của mình. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:53, ngày 16 tháng 9 năm 2023 (UTC) ::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tôi dám chắc là không có quy định nào về ngoại lệ này cả. Không trung lập mới là đi ngược với quy định của bách khoa. Nội dung trên đây vốn đa phần được sao chép từ FVDP một dự án không có quy định tính trung lập, khi dùng nó đưa vô thì phải xem xét ở một vài khía cạnh chứ không copy là xong được. Wiktionary không phải từ điển của Việt Nam, nó cũng không phải sách giáo khoa, không dùng văn phong thiên vị một phía, thêm thơ lại không trung lập. Bạn sang các Wiktionary tiếng khác xem, có nền tảng wiki nào dùng những câu ví dụ như "nhân dân ta chiến đấu bảo vệ tổ quốc" "chiến tranh chống đế quốc Mỹ", có xuất hiện không?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:58, ngày 16 tháng 9 năm 2023 (UTC) 1. Bên en có rất nhiều mục có vd chứa các từ "[https://en.wiktionary.org/w/index.php?search=%22our+country%22&title=Special:Search&profile=advanced&fulltext=1&ns0=1 our country]", "[https://en.wiktionary.org/w/index.php?search=%22n%C6%B0%E1%BB%9Bc+ta%22&title=Special:Search&ns0=1&searchToken=12thcn782xmsjc7aixwau68ok nước ta]; bên fr có "[https://fr.wiktionary.org/w/index.php?search=%22notre+pays%22&title=Sp%C3%A9cial:Recherche&profile=advanced&fulltext=1&searchengineselect=mediawiki&ns0=1&ns100=1&ns106=1&ns110=1&searchToken=vol8t2pu9urr4hv60l40oom8 notre pays]" (đất nước chúng tôi) 2. Khi lấy vd cho mục "[[Đảng ta]]", "[[Mĩ nguỵ]]", "[[ba que]]" thì ta nên lấy vd như nào? --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 15:57, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:TheHighFighter2|TheHighFighter2]] Xin gửi bạn một phần tin nhắn của tôi với HCB Mxn: "tất cả các câu thí dụ này được nhập từ Dự án Từ điển tiếng Việt miễn phí (FVDP), dự án này sao chép nguyên cả lời định nghĩa từ một số từ điển khác, có lẽ bao gồm những cuốn từ điển trong nước. (FVDP cũng có nhiều danh ngôn của Hồ Chí Minh.) Mấy năm nay tôi cũng muốn gạt đi những câu thí dụ không trung lập hoặc sửa lại theo thuật ngữ trung lập hơn. Đây chỉ là một trong rất nhiều điều thiếu sót của việc nhập FVDP. Nếu bạn có thể giúp dọn dẹp các câu thí dụ và danh ngôn thì tốt quá". Những từ tiếng Việt được xây dựng bên en cũng đa phần dùng bot và người mở rộng có cả những tv người Việt (từ ngoại quốc có thể không bị kiểm duyệt gắt gao khi người kiểm duyệt không am hiểu thứ tiếng, giống như có tv nào tạo bài tiếng phạn hay chữ Hán bên đây chúng ta thì có thể tỷ lệ phần trăm sai phạm bị bỏ qua sẽ nhiều hơn các từ hệ chữ chúng ta dùng). Còn bên fr, bạn xem ví dụ của họ có liên quan đến chủ thể cỡ nào? Nó đáng bao nhiêu phần trăm? Rõ ràng như Wiktionary vi không?. Về trường hợp lấy ví dụ của các từ như "Đảng ta" "Mĩ ngụy" thì đây là một từ, trích quy định "Tất cả các bài viết và các nội dung bách khoa khác tại Wikipedia phải được viết trên một quan điểm trung lập (QDTL), thể hiện một cách công bằng và không thiên vị" tôi nghĩ bạn đủ khả năng tự suy ra hướng tôi đang muốn nói. Khi bạn dùng từ này vô trường hợp như "Mĩ ngụy xâm chiếm nước ta" --> ám chỉ rõ ràng đây là dự án tiếng Việt và nước ta là Việt Nam. Bản chất từ tôi không nói nó vi phạm thái độ trung lập, nhưng tùy ngữ cảnh mà bạn đưa vào là một vấn đề đấy. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:18, ngày 16 tháng 9 năm 2023 (UTC) :Thì thế tôi mới nói "không nhất thiết lắm phải kiểm tra và sửa lại những nội dung POV" đó. Nội dung không trung lập không có nghĩa là nội dung đó không hữu ích. Nói chung là tùy trường hợp, hợp lý là được miễn sao nội dung đó không quá khích. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:12, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Bạn có biết đang nói cái gì không vậy? Không trung lập = vi phạm quy định. Sửa đổi sai đang cần sửa nhưng bạn lại nói không cần thiết?. WP:Thái độ trung lập là một trong những trụ cột của Wikimedia, cho dù đó là sửa đổi thiện chí nhưng vi phạm thì cũng không cần. Dự án chúng ta các tv đã không còn khả năng sửa điều này? Nếu không, tại sao chấp nhận nó?. Sao có thể nhưng không thay bằng một nội dung vừa hữu ích vừa phù hợp với chính sách của ta hơn. Tôi không hiểu bạn Tiến Minh nói không nhất thiết giải quyết những điều này là gì? Bên Wikipedia có nhiều tk bị cấm vì thái độ trung lập đấy và thành viên không kiểm soát được điều này nên mấy tk này quay lại và thành rối nằm vùng. Phần nội dung hiện rõ lên vậy, bạn lại nói là không quá khích. Thế nào là quá khích, đủ để các tv bắt tay vào làm? Tôi xin nhắc lại, Wiktionary tiếng Việt không phải Wiktionary Việt Nam. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:26, ngày 16 tháng 9 năm 2023 (UTC) Hướng giải quyết: Nếu 1 mục từ bình thường có vd chứa các từ như trên: thay thế vd khác. Còn các từ liên quan đến chính trị, trường hợp đặc biệt khác, thì có thể lấy vd chứa những từ như trên. Bạn thấy thế nào? --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 16:53, ngày 16 tháng 9 năm 2023 (UTC) :@[[Thành viên:TheHighFighter2|TheHighFighter2]] Xin phiền bạn đưa phần tin nhắn này ra trang thảo luận vì Tiến Minh đã gửi thư nên tôi đã di chuyển nó ra thảo để mọi người có thể cùng nhau giải quyết. Cảm ơn bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:00, ngày 16 tháng 9 năm 2023 (UTC) :''Đã di chuyển đến [[Wiktionary:Thảo luận#Tính trung lập]].'' &nbsp; – [[Thành viên:Mxn|Nguyễn Xuân Minh]]&nbsp;<sup>[[Thảo luận Thành viên:Mxn|<span style="display: inline-block;">&#x1f4ac;</span>]]</sup> 01:56, ngày 17 tháng 9 năm 2023 (UTC) == [[Cửu đoạn tuyến]] == Phiền bạn check và gỡ một số nội dung không trung lập trong mục từ này (nếu có), tôi thấy có nội dung không trung lập nhưng chưa thể gỡ do liên quan đến mục từ, xin cảm ơn. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 11:34, ngày 10 tháng 10 năm 2023 (UTC) :[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tôi không thấy có thông tin nào là không trung lập, bài viết có nội dung rất ít, đây là bài do bạn khởi tạo. Nếu vẫn còn tin phần nào là không trung lập, bạn cứ thoải mái dẫn vào đây tôi xem. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 15:42, ngày 10 tháng 10 năm 2023 (UTC) == Kay == Kay đang diễn tuồng và giả làm Ti2008. Ti2008 và tôi thật là bạn thân trên Wikipedia và đã biết nhau từ năm 2008 rồi. Cách nói chuyện đó chỉ có thể là Kay. Mai mốt, nếu Kay tái xuất ở đây thì bạn cứ việc cấm vô hạn. Nếu là Ti2008 thật thì bạn ấy sẽ log vào acc Ti2008 để nói chuyện với tôi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 23:34, ngày 14 tháng 12 năm 2023 (UTC) == [[Thành viên:WhoAlone]] == Bạn nên đề cử tv này luôn để dự án chúng ta có thêm 2 BQV mới rất tích cực! [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 02:58, ngày 31 tháng 12 năm 2023 (UTC) == Hellu bạn == Nay có nhã hứng ghé qua đây chút, tui đang tính đóng góp dự án này và duy trì bên Wikiquote (bên đó sau vụ thi viết bài là lại vắng). Nên là bạn có thể giới thiệu sơ sơ về cách hoạt động bên này không? [[Thành viên:Pminh141|Pminh141]] ([[Thảo luận Thành viên:Pminh141|thảo luận]]) 18:22, ngày 23 tháng 7 năm 2024 (UTC) :[[Thành viên:Pminh141|Pminh141]] Chỉ cần xem [https://en.wiktionary.org/wiki/Wiktionary:Criteria_for_inclusion# Wiktionary:Độ nổi bật] và [https://en.wiktionary.org/wiki/Wiktionary:Neutral_point_of_view Thái độ trung lập] là có thể đóng góp (có thể tham khảo từ điển để viết). Dự án còn rất sơ khai về mảng quy định, tương lai tôi sẽ dự tính soạn thảo tập trung vô mảng này. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 02:24, ngày 24 tháng 7 năm 2024 (UTC) == Đổi thay == Phiền bạn giúp cấp lại quyền lùi sửa và gỡ quyền tại acc chính với ạ, Bạn có thể xem [[w:en:Wikipedia:Administrators' noticeboard#Unmerge my account from global|tại thảo luận này]], xin cảm ơn. – [[Thành viên:TienMinh-mun6xnChing|TienMinh-mun6xnChing]] ([[Thảo luận Thành viên:TienMinh-mun6xnChing|thảo luận]]) 12:01, ngày 29 tháng 10 năm 2024 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:54, ngày 29 tháng 10 năm 2024 (UTC) == Các công cụ (tập lệnh) ở Wiktionary == Phiên bản sắp tới của Zinnia sẽ mở rộng cho phép sử dụng ở Wiktionary. Tôi muốn hỏi trong quy trình làm việc ở đây, bạn và mọi người có sử dụng công cụ hay tập lệnh (script) gì không, để bổ sung vào Zinnia. Cảm ơn. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 13:11, ngày 2 tháng 11 năm 2024 (UTC) : Tag thêm @[[Thành viên:TienMinh-mun6xnChing|TienMinh-mun6xnChing]]. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 13:11, ngày 2 tháng 11 năm 2024 (UTC) ::[[Thành viên:Plantaest|Plantaest]] Các công cụ hay script để chống phá hoại thông thường các tv sẽ tự cài đặt ở Meta. Vì Wiktionary chỉ có mỗi BQV mới có bộ công cụ đầy đủ chức năng (gồm cả thao tác đánh dấu tuần tra), trừ "lùi sửa" vì có quyền riêng cho tác này. Do khác Wikipedia vấn đề này, tôi nghĩ giao diện cần nghiên cứu thêm nếu áp dụng. P/s Tôi dùng Restorer thay cho Twinkle (khi hồi sửa). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:02, ngày 2 tháng 11 năm 2024 (UTC) == Cần hỗ trợ về quyết định xóa bài == Em đang chỉnh sửa bài đăng và không biết là add vào gây spam, phiền anh hỗ trợ em với ạ – [[Thành viên:Nntrinh76|Nntrinh76]] ([[Thảo luận Thành viên:Nntrinh76|thảo luận]]) 11:34, ngày 17 tháng 12 năm 2024 (UTC) :Theo [https://vi.wiktionary.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Nh%E1%BA%ADt_tr%C3%ACnh/Nntrinh76 nhật trình], bài viết bạn tạo mang nội dung vượt ngoài dự án (Wiktionary chỉ bao gồm các mục từ). Bài viết này cũng có nội dung PR cá nhân. Đó là lý do cho việc nhắc nhở. Mời bạn tham khảo [[Wiktionary:Quy định và hướng dẫn]] để rút kinh nghiệm cho các lần sửa đổi sau. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 13:16, ngày 17 tháng 12 năm 2024 (UTC) ::anh có thể mở để em chỉnh sửa được không ạ? do cũng là lần đầu em viết và em đã dùng 2 ngày tổng hợp.. – [[Thành viên:Nntrinh76|Nntrinh76]] ([[Thảo luận Thành viên:Nntrinh76|thảo luận]]) 15:35, ngày 17 tháng 12 năm 2024 (UTC) :::Trang bạn đã tạo không liên quan gì đến Wiktionary cả, tại vì đây là trang từ điển, không phải là nơi để tạo hoặc chỉnh sửa bài viết. Cho nên tôi, Đăng hoặc bqv khác không thể mở khóa cái trang đó được. – [[Thành viên:Nguyên Hưng Trần|<span style="color:#74a12e;font-family:Georgia, serif;">'''NHT'''</span>]] ([[Thảo luận Thành viên:Nguyên Hưng Trần|💬]]) 16:15, ngày 17 tháng 12 năm 2024 (UTC) == lời cảm ơn == Cảm ơn vì đã trả lời trên [[Thảo_luận:bồ_các]], vì đó là không gian công cộng nên không tiện. Không biết nhấn nút cảm ơn thì kết quả sẽ được chuyển đến người đó hay kq sẽ như thế nào nhỉ, vì nhấn nhiều lần rồi nhưng không biết sẽ như thế nào? Mình có ai cảm ơn đâu, còn IP thì không cảm ơn được. – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 15:05, ngày 13 tháng 2 năm 2025 (UTC) :Từ người thực hiện, chuyển đến người được nhận. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:02, ngày 13 tháng 2 năm 2025 (UTC) == Xin chào == Nếu có thể tôi cần giúp đỡ – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:32, ngày 14 tháng 3 năm 2025 (UTC) :[[Thành viên:Henrydat|Henrydat]] Bạn có thể nêu vấn đề cụ thể. Nếu là các việc liên quan dự án, tôi sẽ giúp trong khả năng. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:42, ngày 14 tháng 3 năm 2025 (UTC) ::Ô trời, tim tôi đang đập đây, tôi thấy chữ rối ở đây bạn biết tôi là ai còn hỏi? – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:50, ngày 14 tháng 3 năm 2025 (UTC) :::Này tôi không có thời gian, tới giờ này thì việc này rất gấp? – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:55, ngày 14 tháng 3 năm 2025 (UTC) ::::tất nhiên tôi không có ý nói tôi là rối, tôi chỉ xem lịch sử đóng góp nói vậy thôi, nếu bạn biết trước tôi là ai thì mới giúp được – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:58, ngày 14 tháng 3 năm 2025 (UTC) :::::Rồi xong tôi đã đến lộn chỗ, quyết định không hoạt đông tại dự án này là quyết định đúng đắn – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 18:02, ngày 14 tháng 3 năm 2025 (UTC) ::::::Cần lưu ý cơ chế cấm người dùng hoạt động độc lập trên mỗi dự án, tức là ngoại trừ việc lạm dụng xuyên wiki hoặc bị cấm chỉ, thành viên vẫn có thể hoạt động và xem như một tài khoản bình thường khi qua dự án khác. Bạn vẫn có thể hoạt động tại đây và tuân theo quy định tại dự án này; ngược lại, bạn có tùy quyền quyết định không tham gia đóng góp. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 07:44, ngày 15 tháng 3 năm 2025 (UTC) :::::::Này chúng ta có thể tiếp tục cuộc trò chuyện sau 7 tháng không, bây giờ có thể là lúc thích hợp hoặc có thể sớm hơn hoặc trễ hơn? Nói như bạn vậy thì dễ quá rồi, tôi hy vọng mình không mắc sai lầm. – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 15:45, ngày 9 tháng 11 năm 2025 (UTC) == [[Special:Tags]] == Tôi đang test script, nhờ bạn tạo một thẻ với tên thẻ là “twinkle” và tên hiển thị là “Twinkle” để script chạy. Cảm ơn bạn. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 00:30, ngày 1 tháng 4 năm 2025 (UTC) :[[Thành viên:Hide on Rosé|Hide on Rosé]] {{Tick}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:08, ngày 1 tháng 4 năm 2025 (UTC) :: Nào bạn rảnh thì bạn sửa lại phần tên hiển thị: Liên kết tới [[Wiktionary:Twinkle]] nhé. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 09:51, ngày 1 tháng 4 năm 2025 (UTC) [[Tập tin:Wiktionary Deletion Tools 2025.png|nhỏ|250px|phải]] :::[[Thành viên:Hide on Rosé|Hide on Rosé]] Tôi upload màn hình chụp công cụ xóa quản trị viên Wiktionary. Bạn tham khảo. Twinkle hiện tại có vẻ chủ yếu phù hợp bài viết Wikipedia. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 03:34, ngày 2 tháng 4 năm 2025 (UTC) :::: @[[Thành viên:P. ĐĂNG|P. ĐĂNG]] Danh sách xoá mà bạn chụp thì tôi xem được ở đây: [[MediaWiki:Deletereason-dropdown]]. Mô đun này tôi đã sửa theo bộ tiêu chí xoá của dự án này, bạn có thể thử. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 03:40, ngày 2 tháng 4 năm 2025 (UTC) :::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Công cụ xóa hiện như trang [[MediaWiki:Deletereason-dropdown]] chỉ xuất hiện khi bài viết có tựa đề "Wikitionary" hoặc "MediaWiki"; đối với các mục từ thì như hình chụp. Có vẻ phải chỉnh làm sao khi các thành viên ấn Twinkle gắn bản mẫu xóa trang mục từ thì nó hiện lên các lý do liên quan cho mục từ. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 03:48, ngày 2 tháng 4 năm 2025 (UTC) :::::: Đúng là như vậy. Trang trong không gian chính là mục từ (trừ Trang Chính) và cả Twinkle lẫn MediaWiki đều hiện lý do tương ứn, theo không gian tên,. code trong trang MediaWiki hiện theo không gian tên, bạn có thể xem mã nguồn của nó. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 05:41, ngày 2 tháng 4 năm 2025 (UTC) :::::: Xem [[Special:Diff/prev/2225367]]. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 05:44, ngày 2 tháng 4 năm 2025 (UTC) :::::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Ok, đã test. PS Thiếu tiêu chí độ nổi bật. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:52, ngày 2 tháng 4 năm 2025 (UTC) :::::::: Tiêu chí đó được quy định ở đâu? Tôi không thấy trong [[Wiktionary:XN]]? [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 10:53, ngày 2 tháng 4 năm 2025 (UTC) :::::::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Tôi xem qua có vẻ đúng thật chưa có trong [[Wiktionary:Quy định xóa trang]], có lẽ trang này đã lâu không cập nhật khi dự án tiến triển. Độ nổi bật các mục từ nằm trong quy định [https://en.wiktionary.org/wiki/Wiktionary:Criteria_for_inclusion này]. Tiêu chí độ nổi bật cũng có trong công cụ xóa của quản trị viên (hình). Ngoài ra, tham khảo thử quy định [https://simple.wiktionary.org/wiki/Wiktionary:Deletion#Articles này] (quy định độ nổi bật của dự án Simple English về một số mục từ). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:19, ngày 2 tháng 4 năm 2025 (UTC) : @[[Thành viên:Hide on Rosé|Hide on Rosé]] Khi tôi gắn biển chất lượng kém bằng Twinkle cho bài [[freeter]] thì xuất hiện vần đề ([[Đặc biệt:Khác/2225470|xem]]). Tôi nghĩ bản mẫu <code><nowiki>{{chất lượng kém}}</nowiki></code> và <code><nowiki>{{Chất lượng kém (nguồn)}}</nowiki></code> có vấn đề rồi. [[User:Ayane Fumihiro|<b style="font-family:Segoe UI Light;color:#FF69B4;letter-spacing:">femboy_clen</b>]] 14:01, ngày 2 tháng 4 năm 2025 (UTC) == github.com == Khi dọn bớt trang thảo luận [[Thảo luận Wiktionary:Thảo luận]] để lưu trữ thì có liên kết này bị vào blacklist. Phiền bạn xem xét có thể gỡ liên kết này ra khỏi blacklist được không? [[User:Ayane Fumihiro|<b style="font-family:Segoe UI Light;color:#FF69B4;letter-spacing:">femboy_clen</b>]] ([[User talk:Ayane Fumihiro|<span style="color:#008080;">But we got it yeah</span>]]) 16:06, ngày 22 tháng 5 năm 2025 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:17, ngày 22 tháng 5 năm 2025 (UTC) == "ủ ôi" == Từ này hay xuất hiện trong văn nói, đôi khi đọc truyện tranh tôi có bắt gặp, nhưng không biết nên định nghĩa thế nào? Nhờ bạn hỗ trợ tạo trang nếu được. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 15:37, ngày 23 tháng 7 năm 2025 (UTC) :[[Thành viên:Plantaest|Plantaest]] Đã tạo trang. Từ này nó giống "trời ơi", "trời đất" miền Nam hay gọi thôi. P.S Bạn có câu ví dụ nào hay thì thêm vô nếu muốn (2 đến 3 câu ví dụ đều được, nhưng trung lập và không yếu tố bình luận chính trị). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 05:38, ngày 24 tháng 7 năm 2025 (UTC) == "clause" == Từ "clause" trong tiếng Anh nên được dịch là "mệnh đề" hay "cú" / "tiểu cú" vậy? Mình thấy các trang web dạy tiếng Anh ở Việt Nam ngày nay đều dịch là mệnh đề, nhưng khi mình tra từ điển ''Thuật ngữ ngôn ngữ học Anh – Việt Việt – Anh'', tr. 44 của Cao Xuân Hạo, Hoàng Dũng thì lại dịch là "tiểu cú". Bên ''Từ điển Khái niệm Ngôn ngữ học'', tr. 136 của Nguyễn Thiện Giáp cũng dịch tương tự. Phiền bạn trợ giúp. --[[Thành viên:I can see my baby swimming|I can see my baby swimming]] ([[Thảo luận Thành viên:I can see my baby swimming|thảo luận]]) 12:30, ngày 31 tháng 7 năm 2025 (UTC) :[[Thành viên:I can see my baby swimming|I can see my baby swimming]] Theo nguồn [https://vjol.info.vn/index.php/sphcm/article/view/27696] (trang 14) và [https://js.vnu.edu.vn/FS/article/view/380] (trang 29), cho thấy đều là cách dịch đúng của "clause". Dịch "mệnh đề" đồng nghĩa "cú/tiểu cú" nhưng cách dịch sau mang tính học thuật chuyên môn. Tôi nghĩ có thể xem xét bối cảnh chọn cách dịch phù hợp. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:55, ngày 1 tháng 8 năm 2025 (UTC) == [[Thành viên:Yuki Shiromita/Snowfall.css]] == Nhờ bạn xóa trang này, tôi không cần css để trang trí nữa do rất lag <span style="font-family:Segoe UI Light">[[User:Yuki Shiromita|<b style="color:#FF69B4">nettai</b>]] [[Special:Contributions/Yuki Shiromita|<b style="color:#FF964F">no</b>]] [[User talk:Yuki Shiromita|<b style="color:#93E7FB">shirayukihime</b>]]</span> 06:48, ngày 30 tháng 8 năm 2025 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:05, ngày 30 tháng 8 năm 2025 (UTC) ==Happy Holidays== <div style="border-style:solid; border-color:violet; background-color:#fff; border-width:2px; text-align:left; padding:8px;" class="plainlinks"> {| style="border: 5px dotted #H1790; background-color: #DDDDDD; padding:4px" | rowspan="2" valign="left" |<span style="margin:0px 10px 10px 0px;box-shadow:0px 3px 4px rgba(0, 0, 0, 0.45);display:inline-block;">[[File:Christmas Tree 2011-12-24.jpg|left|300px|link=]]<span style="display:block;padding-top:10px;clear:both"> | <span style="font-family: Georgia; font-size: 98%; color: #190a89;">Chúc bạn P. ĐĂNG có một mùa '''Giáng sinh''' an lành, ấm áp và tràn ngập yêu thương bên gia đình!<br/> Bước sang '''năm mới''' 2026, chúc bạn gặp nhiều may mắn,<br/> gặt hái được nhiều thành công trong công việc và học tập.<br/> Một lần nữa chúc bạn sẽ có một năm mới thật an khang, hạnh phúc và vạn sự như ý!!</span> <br /> <span style="font-family: Georgia; font-size: 92%;"> | rowspan="2" valign="right" |<span style="margin:0px 10px 10px 0px;box-shadow:0px 3px 4px rgba(0, 0, 0, 0.45);display:inline-block;">[[File:Atlantic Firework Festival 2016 (53368638571).jpg|left|360px|link=]]<span style="display:block;padding-top:10px;clear:both"> |}</div> Lời chúc chân thành từ: <span style="background:#978FF;border:solid 1px;border-radius:8px;box-shadow:darkblue 2px 2px 2px">&nbsp;[[User:Kelly zhrm|<span style="font-family:Old English Text MT;color:#C90">Yellow</span>]]&#124;[[User talk:Kelly zhrm|&#248;]]&nbsp;</span>&nbsp; 05:54, ngày 24 tháng 12 năm 2025 (UTC) :[[Thành viên:Kelly zhrm|Kelly zhrm]] Cảm ơn cực muộn :D. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:11, ngày 9 tháng 1 năm 2026 (UTC) == a đuồi == Đôi khi tôi thấy từ này, nhưng không chắc định nghĩa nó thế nào? [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 08:01, ngày 30 tháng 12 năm 2025 (UTC) :[[Thành viên:Plantaest|Plantaest]] Dùng khi người nói biểu thị hàm ý nhưng không muốn diễn đạt rõ sự việc ám chỉ bằng cách nói thông thường và người nghe nhiều khả năng "sẽ" hiểu. Sau kết quả [https://www.google.com/search?q=a+%C4%91u%E1%BB%93i&sca_esv=fdc603a36385362d&rlz=1C1GCEA_enVN1050VN1050&biw=1536&bih=730&aic=0&sxsrf=ANbL-n6bNxATTi-Ja0wA8rmwvQPrO6MF7Q%3A1767953043675&ei=k9Jgae77KLCp4-EP1-n-6AI&ved=0ahUKEwiukZepmv6RAxWw1DgGHde0Hy0Q4dUDCBE tra cứu], tôi tham khảo một số trang web có nhắc đến cụm từ này và hiểu được như trên. Ngoài ra, một số ngữ cảnh được hiểu theo cách [https://www.hieuchua.com/define/A%20%C4%90u%E1%BB%93i này]. Các trang này chưa đủ uy tín để dùng "giải nghĩa" nhưng nó là tất cả trong khả năng có thể dùng tìm hiểu hiện tại. Hy vọng hữu ích đến bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:07, ngày 9 tháng 1 năm 2026 (UTC) == PANG450a, b, c, d, e == Yummie giả dạng rối PANG450v của PVR từ lúc hắn tạo tài khoản PANG450a sao?? Tôi tưởng PVR tạo rối sửa đổi ở đây chứ! Mà khoan, Yummie hắn thường spam đường link tới các wiki Fandom, Miraheze và trang đóng góp của tài khoản hắn giả dạng (PANG450v) hả? – [[Thành viên:Higashizakura|<span style="color:pink; font-family:Noto Serif JP, serif;">'''Anh Đào Phương Đông'''</span>]] ([[Thảo luận Thành viên:Higashizakura|🌸]]) 16:20, ngày 21 tháng 1 năm 2026 (UTC) : Cái trò [[mượn gió bẻ măng]] của Yummie quá cũ rồi. Thật không còn gì đáng bàn. [[User:Hiyuune|<b style="font-family:Segoe UI Light;color:#FFB3AE;letter-spacing:">Hiyuune</b>]] [[User talk: Hiyuune|<b style="font-family:Segoe UI Light;color:#FFF7AD;letter-spacing:">(angustifolia)</b>]] 17:01, ngày 21 tháng 1 năm 2026 (UTC) :[[Thành viên:Higashizakura|Higashizakura]] Phạm Văn Rạng là rối sửa bài viết chính trị (khá nghiêm túc và có khả năng biên tập; chỉ hoạt động tại các dự án Wikipedia vì mục đích chính sửa bài viết chính trị); Yummie là rối spam phá hoại. Có thể dựa vào nhật trình sửa đổi của tk nhận dạng. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 06:48, ngày 22 tháng 1 năm 2026 (UTC) == [[porfolio]] và [[portfolio]] == Từ đầu có vẻ là sai chính tả, qua enwikt thì đó là tiếng Tây Ban Nha. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 04:19, ngày 24 tháng 2 năm 2026 (UTC) :[[Thành viên:Plantaest|Plantaest]] Tra theo cú pháp "'Porfolio' (Conjunto de fotografías o grabados de diferentes clases que forman un tomo o volumen encuadernable)", thấy ghi nhận cơ bản là mục từ tiếng Tây Ban Nha phỏng theo tiếng Anh và Pháp đã bỏ âm "t" sau khi nước này đưa vào từ điển sử dụng. [[Thành viên:Hiyuune|Hiyuune]] đã giúp sửa. P.S Có vẻ cách dịch nghĩa hiện tại trong bài sai so với nguồn (nguồn [https://www.scribd.com/document/378489759/SUSTANTIVOS-COLECTIVOS#content=query:porfolio,pageNum:1,indexOnPage:0,bestMatch:false này] cũng không thấy theo nghĩa dịch vậy). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:23, ngày 25 tháng 2 năm 2026 (UTC) hj1e3ei98lwb8em7b8vcc468cquwam2 2350125 2350124 2026-05-04T09:28:05Z PANG450n 61176 2350125 wikitext text/x-wiki <div style="border:1px solid #FDA; vertical-align:top; padding: 0.5em; background: #FFFFE5;"> <div style="margin-left:0.5em; margin-right: 0.5em; margin-bottom:1em; margin-top: 0.1em;"> <span style="font-size: 1.3rem;">'''Xin chào P. ĐĂNG! Chào mừng bạn đến với Wiktionary tiếng Việt!'''</span> <div class="plainlinks"><p style="margin-top:0.1em; margin-bottom: 1em;">Wiktionary là từ điển mở mà ai cũng đều có thể chỉnh sửa. Cách sử dụng và quy định có thể gây khó khăn cho bạn, nhưng hãy dần học hỏi và '''[[Wiktionary:Táo bạo|mạnh dạn đóng góp]]'''. Các thông tin dưới đây sẽ có thể giúp bạn sử dụng và chỉnh sửa Wiktionary.</p></div> </div> <!-- Quan trọng --> <div style="clear: both; margin-left: 1.5em; margin-right 1.5em; font-size: 100%;"> {| class="plainlinks" width="100%" style="margin:auto;" | style="text-align:center; padding:4px" | [[File:OOjs UI icon search-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Tìm kiếm|Tìm kiếm Wiktionary]]''' <br />Tìm hiểu cách tìm và tra cứu mục từ trên Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon lightbulb.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Yêu cầu mục từ|Yêu cầu mục từ]]'''<br />Nơi để bạn thêm những từ cần viết nhưng chưa có tại Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon userAvatar.svg|30px|link=|]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Cộng đồng|Cổng Cộng đồng Wiktionary tiếng Việt]]'''<br />Nơi tìm hiểu mọi thông tin về của Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon articleCheck-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Quy định và hướng dẫn|Quy định và hướng dẫn]]''' <br />Chính sách của Wiktionary là gì? Xin vui lòng đọc nó trước khi thực hiện chỉnh sửa! |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon edit-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Viết trang mới|Viết trang mới]]'''<br />Tham khảo cách viết trang hay mục từ mới tại Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon tray.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Chỗ thử|Chỗ thử]]'''<br />Nơi để bạn viết nháp và thử nghiệm. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon wikiText.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Sửa đổi|Thực hiện sửa đổi]]'''<br />Tham khảo hướng dẫn sửa đổi và cùng bắt đầu sửa đổi Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon helpNotice-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Bàn giúp đỡ|Bàn giúp đỡ]]'''<br />Nơi hỏi đáp khi gặp khó khăn trên Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon book-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Mục lục|Mục lục trợ giúp]]''' <br />Mục lục giúp bạn thông tin và hướng dẫn khác khi gặp khó khăn trong những lúc đóng góp! | style="text-align:center; padding:4px" | [[File:OOjs UI icon speechBubbles-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Thảo luận|Thảo luận chung]]'''<br />Nơi trao đổi ý kiến giữa bạn và các thành viên khác! |}</div> <div style="padding: 0.5em; background: #FEC; border: 1px solid #FDA; margin-top: 1em; font-size: 1em"> [[File:Vector sig vi.png|250px|right]] '''Hãy luôn nhớ rằng, sau khi viết thảo luận xong thì đừng quên bước quan trọng đó là ký tên ở phía sau thảo luận'''. Phương thức ký tên được sử dụng trong Wiktionary không phải là viết tên trực tiếp, nhưng xin hãy ký tên bằng cách sử dụng 4 dấu ngã (<code><nowiki>--~~~~</nowiki></code>) hoặc bằng cách nhấp vào nút chữ ký ([[File:OOUI JS signature icon LTR.svg|20px|border]]) trong cửa sổ chỉnh sửa của phiên bản trình soạn thảo mã nguồn thông thường.<br/> [[Wiktionary:Guestbook_for_non-Vietnamese_speakers|Welcome! If you are not good at Vietnamese or do not speak it, click here.]] </div> </div>&nbsp;--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 07:34, ngày 24 tháng 6 năm 2023 (UTC) == BQV == Bạn có muốn làm BQV ở Wiktionary này không? Nếu có hứng thú, mời bạn ra ứng cử ở [[Thảo luận Wiktionary:Bảo quản viên]]. Tôi muốn tuyển thêm BQV cho Wiktionary vì Wiktionary hiện tại không có BQV thường trực. Đây là môi trường thực tập tốt trước khi làm ĐPV bên Wikipedia. Hồi xưa, tôi cũng đóng góp cho cả hai dự án cùng một lúc (Wikipedia + Wiktionary). [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 13:32, ngày 2 tháng 8 năm 2023 (UTC) :@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Tôi hay hoạt động bên đây thật nhưng bên đây tôi có ít sửa đổi. Chỉ vài tuần trước tôi xin quyền lùi sửa để chống phá hoại nhưng không đủ yêu cầu thì BQV làm sao tôi ứng cử được. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:33, ngày 2 tháng 8 năm 2023 (UTC) ::Bên Wiktionary không có yêu cầu tối thiểu để làm BQV. Bạn có đóng góp bên Wikipedia thì ra ứng cử là ok rồi. Quan trọng là bạn có muốn vác tù và hàng tổng không thôi? [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 15:23, ngày 2 tháng 8 năm 2023 (UTC) :::@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Tất nhiên, nếu có cơ hội được công đồng giao phó thì tôi sẽ làm. Nhưng chắc tôi cần tích cực cày sửa đổi một thời gian vì hiện tại tôi có dưới 300 sửa đổi. Có thể, tôi nghĩ tôi sẽ tích cực bên dự án này vài tuần cái đã. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 15:27, ngày 2 tháng 8 năm 2023 (UTC) ::::Bạn tính vậy cũng được. Cày sửa đổi là dễ mà. 2 tuần sau, mời bạn tự ra ứng cử. Tôi sẽ ủng hộ. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 15:57, ngày 2 tháng 8 năm 2023 (UTC) == Mệt nhỉ? == Tụi này lì như trâu thật, mới chập sáng đòi vặt lông bẻ cổ tổ tông nhà tôi này. – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:43, ngày 3 tháng 8 năm 2023 (UTC) :@[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] Tôi qua đây thì gặp TTS. Haha MTRIRod với bạn Phú nói đúng, tên này ám tôi như ma ám rồi. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:44, ngày 3 tháng 8 năm 2023 (UTC) ::Mà hình như bên vi chưa cấm tên [https://vi.wikipedia.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:%C4%90%C3%B3ng_g%C3%B3p/%C4%90%E1%BB%ABng_b%C6%A1_S%C6%A1n_n%E1%BB%AFa,_S%C6%A1n_c%C3%B4_%C4%91%C6%A1n_l%E1%BA%AFm! này] thì phải? – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:48, ngày 3 tháng 8 năm 2023 (UTC) :::@[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] Chắc cấm sót, mà TTS chắc không dùng lại tk đó đâu. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:50, ngày 3 tháng 8 năm 2023 (UTC) ::::Đâu, vừa nhắc xong thì hình như mới chửi Nguyenmy kìa. – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:52, ngày 3 tháng 8 năm 2023 (UTC) :::::@[[Thành viên:P. ĐĂNG|P. ĐĂNG]] @[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] @[[Thành viên:Tryvix1509|Tryvix1509]] @[[Thành viên:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] Mà không biết tôi có nên đệ đơn cấm chỉ tên TTS này đến Nhóm Tin cậy & An toàn của tổ chức Wikimedia không nhỉ? – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 09:58, ngày 3 tháng 8 năm 2023 (UTC) ::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tổ chức này hoạt động như thế nào?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:03, ngày 3 tháng 8 năm 2023 (UTC) :::::::Tôi cũng chỉ [[m:WMF Global Ban Policy/vi|đọc thoáng qua sơ sơ về quy định cấm chỉ toàn hệ thống tổ chức này]], và thấy tổ chức hoạt động qua email ca@wikimedia.org – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:07, ngày 3 tháng 8 năm 2023 (UTC) ::::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Là cấm chỉ một tk toàn cầu bên meta đúng không?. Chắc không cần rồi và cũng không hiệu quả. Tôi nhớ không lầm TTS bị cấm toàn cục từ tk đầu tiên rồi. Hiện giờ dùng proxy thì cấm toàn cục gì nữa. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:10, ngày 3 tháng 8 năm 2023 (UTC) :::::::::Các tk rối của TTS như bạn nói chỉ bị khóa toàn cục = TTS vẫn chưa bị cấm chỉ trên toàn hệ thống. Tôi nghĩ biện pháp này là cách hay nhất để răn đe tên này, chắc tôi nghĩ để lúc khác làm sau vậy. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:17, ngày 3 tháng 8 năm 2023 (UTC) ::::::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Chẳng phải khóa toàn cầu là trên toàn hệ thống Wikipedia? TTS không dùng một tk cố định và dùng proxy. Cấm tk này thì sẽ nhảy qua tk khác bằng một IP khác. Đề xuất của bạn không rõ ràng, tôi chưa hiểu lắm. Nếu được thì làm ngay bây giờ luôn đi. Tôi mới báo cái tk của TTS lên meta cho tiếp viên cấm toàn cầu đấy, hai tk nãy giờ phá hoại hiện đang bị cấm. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:25, ngày 3 tháng 8 năm 2023 (UTC) == Bản mẫu cảnh báo mới == Cảm ơn bạn đã tạo bản mẫu cánh báo về việc sử dụng Wiktionary để quảng cáo. Nhưng tôi thấy bên Wikipedia tiếng Việt [[:w:vi:Bản mẫu:Spam|trang Bản mẫu:Spam]] là dùng để báo cáo liên kết rác, vì vậy xin phép tôi được đổi tên bản mẫu [[Đặc biệt:So sánh di động/2119930|từ "spam-1" thành "Cb1-spam"]]. Tôi không biết việc làm của tôi có đúng không do bên Wikipedia tiếng Việt cũng có [[:w:vi:Bản mẫu:Cb1-spam|bản mẫu tên như thế này]] chắc dùng để cảnh báo thành viên về việc thêm liên kết quảng cáo trong bài. Và nếu bạn thấy tôi sai mong bạn hãy lùi lại. Cảm ơn bạn. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:54, ngày 14 tháng 8 năm 2023 (UTC) :[[Thành viên:DefenderTienMinh07]]: Cảm ơn Tiến Minh. Nhưng lần sau bạn hãy đọc kỹ nội dung bản mẫu, bản mẫu này không phải cảnh báo thêm link spam mà là thông tin quảng cáo, tức là khi tv tạo bài PR (trang mới, PR trong trang thảo luận, hoặc chèn thông tin PR) thì dùng bản mẫu này. Mỗi wiktionary hoạt động độc lập, cộng đồng bên ta vốn nhỏ bé và ít người nên đặt tên bản mẫu đừng thêm vài chữ làm rườm rà khó nhớ, hầu hết thành viên không dùng Twinkle và đặt biển thủ công nên tôi chọn tên ngắn để các bạn dễ dùng. Nhưng nếu bạn đã đổi thì để vậy cũng được vì tôi đang cần làm thêm vài thứ, nâng cấp một vài thứ thiết yếu và để tên tạm như thế cũng được nếu tương lai có phát sinh thêm tôi sẽ thay đổi một vài bản mẫu cho phù hợp và nhất quán. Sẵn đây tôi hỏi bạn có dùng Twinkle không? Nếu có cho tôi xin một vài ý kiến có được không?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:25, ngày 16 tháng 8 năm 2023 (UTC) ::Do dự án đang trong phát triển về mảng tin học nên tôi nghĩ trang global.js trên Meta sẽ là giải pháp hay để cài công cụ. Các công cụ hữu ích tôi vừa tìm được cho dự án: Restorer của BrandonXLF, TwinkleGlobal của Xiplus và WarningDialog.js của Tryvix1509 và nhiều người khác. Tôi chưa hiểu câu hỏi bạn đặt ra cho lắm, nếu bạn đang hỏi về công cụ TwinkleMobile của Plantaest trên dự án này thì tôi nghĩ bạn nên hỏi Plantaest do công cụ vẫn chưa được Plantaest kích hoạt trên đây. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 18:07, ngày 17 tháng 8 năm 2023 (UTC) :::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Ý tôi là việc dùng Twinkle của bạn trên đây có giống bên Wikipedia không? Nó có chức năng gắn biển, cảnh báo hay chỉ dừng lại ở chức năng lùi sửa. Tôi không dùng Twinkle trên đây, nên tôi mới hỏi bạn để biết thêm thông tin do tôi cần nâng cấp một vài bản mẫu và muốn kích hoạt nó vô Twinkle, tôi muốn Twinkle bên đây được cấu hình lại cho tiện và đầy đủ chức năng giống bên các dự án khác cho các bạn dùng. Tôi sẽ làm trong phạm vi có thể, nhưng chắc sẽ cần thời gian. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:38, ngày 18 tháng 8 năm 2023 (UTC) ::::Việc dùng Twinkle trên đây của tôi chỉ là để phục vụ mục đích tuần tra TĐGĐ trong việc lùi tất cả sửa đổi không thiện chí do tôi chưa có quyền lùi sửa. Nếu bạn muốn công cụ có thể cảnh báo thành viên thì công cụ WarningDialog.js của Tryvix có thể giúp bạn trong trường hợp này. Bạn nên hỏi Tryvix xem sao (tôi đã ping @[[Thành viên:Tryvix1509|Tryvix1509]]) – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:14, ngày 21 tháng 8 năm 2023 (UTC) ::Quay lại chủ đề bản mẫu cảnh báo vừa tạo không biết có nên dùng bản mẫu '''khi mà trường hợp tài khoản đó bị chặn bởi bộ lọc sai phạm''' không chứ tôi ngày nào mà chả thấy mấy tài khoản spambot dùng Wiktionary để quảng cáo có chèn đường link không à dẫn tới việc bị chặn và bị ghi lại trong bộ lọc sai phạm mà không ai phát hiện ra. (bạn có thể xem đầy đủ tại [[Đặc biệt:Nhật trình sai phạm]]) – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:23, ngày 21 tháng 8 năm 2023 (UTC) :::[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Thế thì dùng vậy cũng được, để tôi chỉnh lại bản mẫu cho ý tựu chung hơn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:08, ngày 22 tháng 8 năm 2023 (UTC) == BQV == Rất vui vì bạn đã dũng cảm ra vác tù và hàng tổng. Tôi sẽ ủng hộ. Tuy nhiên, bạn cần gửi thư mời tham gia BQ BQV đến các thành viên trên Wiktionary (tv tích cực lẫn tv thỉnh thoảng xuất hiện). Chúc bạn đắc cử! [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 05:55, ngày 24 tháng 8 năm 2023 (UTC) :Tôi mới cấp quyền cho bạn. Chúc bạn tiếp tục hoạt động tích cực ở cả hai dự án, trao dồi thêm kinh nghiệm bảo quản và vài tháng nữa tự ra ứng cử làm ĐPV ở Wikipedia. Tôi sẽ ủng hộ nếu như không có gì thay đổi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 20:52, ngày 2 tháng 9 năm 2023 (UTC) == Thư mời tham gia biểu quyết == <div style="padding: 0.5em; background: #f8f8ff; margin-top: 1em; font-size: 1em"> {| class="table" style="width: 80%; background-color: #ACE1AF; border: 1px solid #fceb92; margin: auto; margin-bottom: 10px" | style="vertical-align: middle; padding: 10px;" | [[Tập tin:Logo vote.svg|80px|link=]] | style="vertical-align: middle; padding: 15px 10px 10px 0;" | '''Mời bạn cho ý kiến về việc cấp quyền Bảo quản viên cho thành viên [[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] tại trang [[Thảo luận Wiktionary:Bảo quản viên#DefenderTienMinh07|Thảo luận Wiktionary:Bảo quản viên]]. Xin cảm ơn. <small>Hãy cùng tích cực tham gia các biểu quyết và thảo luận về chúng. Mỗi hành động của bạn sẽ góp phần không nhỏ để xây dựng các mục từ trên Wiktionary - tài sản chung của cộng đồng chúng ta, giúp wiki ta ngày càng phát triển vững mạnh! Thân ái! |} </div> [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:25, ngày 24 tháng 8 năm 2023 (UTC) == Bất ngờ chưa! == Tôi tới đây là để thông báo một tin vui cho bạn. {{ý kiến|1=Tin vui là:}} Hiện tại bạn '''đã là BQV trên dự án Wiktionary tiếng Việt'''. Bạn lúc này cảm thấy thể nào? Mong bạn sẽ làm tốt công việc của mình như tôi đã nói lúc bỏ phiếu. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 21:02, ngày 2 tháng 9 năm 2023 (UTC) :Tôi cũng không biết nói thế nào, nhưng cảm ơn bạn và Phú cũng như các thành viên khác đã hỗ trợ tôi từ dự án này qua dự án khác. Từ nay, tôi đảm nhận thêm nhiều nhiệm vụ hơn trên Wiktionary nên sẽ cố gắng chọn cách làm hiệu quả tốt nhất cho dự án. Tôi ít nói quá, vài dòng trên là tất cả, tôi không nghĩ thêm được gì để diễn tả hết. Cảm ơn vì thông báo này. Chúc bạn một ngày tốt lành. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:50, ngày 3 tháng 9 năm 2023 (UTC) == Một số sửa đổi của bạn gần đây == Chào bạn! Về một số sửa đổi của bạn gần đây, như tại [[khả năng]], [[chứng minh]], ... Nếu phần định nghĩa có các từ kiểu như "nước ta", "nhân dân ta", ... thì ta nên thay bằng các từ khác hoặc xóa đi. Còn nếu nó có ở phần vd thì không cần xóa do phần này chấp nhận chứa các từ như vậy--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 12:48, ngày 16 tháng 9 năm 2023 (UTC) :@[[Thành viên:TheHighFighter2|TheHighFighter2]] Đúng vậy, tôi đã xoá chúng đi vì Wiktionary:Thái độ trung lập. Wiktionary có quy định về phần vd được phép ngoại lệ này không?. Tôi đã có nói chuyện với HCV Mxn về điều này. Tôi khẳng định nó không trung lập và xoá đi là cần thiết, và sẽ bổ sung phần ví dụ mới vào. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:19, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:P. ĐĂNG|P. ĐĂNG]] Hiện tại trên dự án không có trang nào tên là [[Wiktionary:Thái độ trung lập]]. Chả là bạn muốn tìm trang quy định liên quan tới vấn đề chăng? – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 14:29, ngày 16 tháng 9 năm 2023 (UTC) :::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Chưa có chứ không phải không. Các dự án Wikipedia đều hoạt động hướng đến chung là thái độ trung lập. Wiktionary tiếng Việt không phải Wiktionary Việt Nam. HCV Mxn cũng đi xoá những thứ này. Khi dùng từ như "dân ta, nhân dân ta", khi người nước ngoài đọc, bạn nghĩ sao về điều này? Chúng ta hướng đến một dự án phục vụ mọi người, mọi chủng tộc và quốc gia, không phải riêng một đất nước nào. Vì vậy, mỗi dòng viết ra phải dựa trên thái độ trung lập. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:36, ngày 16 tháng 9 năm 2023 (UTC) ::::Bạn nói cũng đúng vì theo quy định bên Wiktionary tiếng Anh "all entries must be written from a '''neutral point of view''', representing views fairly and without bias" (tạm dịch: Mọi nội dung được đưa vào đều phải được viết từ một cái nhìn trung lập, thể hiện cái nhìn công bằng và không thiên kiến). Nhưng tôi nghĩ cũng không nhất thiết lắm phải kiểm tra và sửa lại những nội dung POV vì nội dung không trung lập thường nó cũng không ảnh hưởng gì nhiều đến dự án lắm. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 14:46, ngày 16 tháng 9 năm 2023 (UTC) :::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Đây là điều đương nhiên. Chúng ta đang hoạt động trên đâu? Wiktionary là dự án bách khoa, nó ưu tiên thái độ trung lập, nơi mà một người Mỹ có thể qua đọc bài viết của một Wikimedia tiếng Đức, tiếng Việt hay tiếng Trung. Khi không trung lập, bạn nói không nhất thiết sửa lại là sao?. Đến nay tôi mới phát hiện Wiktionary tiếng Việt đang có văn phong không trung lập rất nhiều, trích câu Hồ Chí Minh, dùng thơ... Tôi cần BQV TheHighFighter2 phản hồi điều này, lẽ ra phải thảo luận với tôi trước khi lùi sửa, thứ mang tính chất mâu thuẫn. Nếu có quy định nào nói phần ví dụ ta được ngoại lệ thì tôi sẽ xem lại sửa đổi của mình. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:53, ngày 16 tháng 9 năm 2023 (UTC) ::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tôi dám chắc là không có quy định nào về ngoại lệ này cả. Không trung lập mới là đi ngược với quy định của bách khoa. Nội dung trên đây vốn đa phần được sao chép từ FVDP một dự án không có quy định tính trung lập, khi dùng nó đưa vô thì phải xem xét ở một vài khía cạnh chứ không copy là xong được. Wiktionary không phải từ điển của Việt Nam, nó cũng không phải sách giáo khoa, không dùng văn phong thiên vị một phía, thêm thơ lại không trung lập. Bạn sang các Wiktionary tiếng khác xem, có nền tảng wiki nào dùng những câu ví dụ như "nhân dân ta chiến đấu bảo vệ tổ quốc" "chiến tranh chống đế quốc Mỹ", có xuất hiện không?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:58, ngày 16 tháng 9 năm 2023 (UTC) 1. Bên en có rất nhiều mục có vd chứa các từ "[https://en.wiktionary.org/w/index.php?search=%22our+country%22&title=Special:Search&profile=advanced&fulltext=1&ns0=1 our country]", "[https://en.wiktionary.org/w/index.php?search=%22n%C6%B0%E1%BB%9Bc+ta%22&title=Special:Search&ns0=1&searchToken=12thcn782xmsjc7aixwau68ok nước ta]; bên fr có "[https://fr.wiktionary.org/w/index.php?search=%22notre+pays%22&title=Sp%C3%A9cial:Recherche&profile=advanced&fulltext=1&searchengineselect=mediawiki&ns0=1&ns100=1&ns106=1&ns110=1&searchToken=vol8t2pu9urr4hv60l40oom8 notre pays]" (đất nước chúng tôi) 2. Khi lấy vd cho mục "[[Đảng ta]]", "[[Mĩ nguỵ]]", "[[ba que]]" thì ta nên lấy vd như nào? --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 15:57, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:TheHighFighter2|TheHighFighter2]] Xin gửi bạn một phần tin nhắn của tôi với HCB Mxn: "tất cả các câu thí dụ này được nhập từ Dự án Từ điển tiếng Việt miễn phí (FVDP), dự án này sao chép nguyên cả lời định nghĩa từ một số từ điển khác, có lẽ bao gồm những cuốn từ điển trong nước. (FVDP cũng có nhiều danh ngôn của Hồ Chí Minh.) Mấy năm nay tôi cũng muốn gạt đi những câu thí dụ không trung lập hoặc sửa lại theo thuật ngữ trung lập hơn. Đây chỉ là một trong rất nhiều điều thiếu sót của việc nhập FVDP. Nếu bạn có thể giúp dọn dẹp các câu thí dụ và danh ngôn thì tốt quá". Những từ tiếng Việt được xây dựng bên en cũng đa phần dùng bot và người mở rộng có cả những tv người Việt (từ ngoại quốc có thể không bị kiểm duyệt gắt gao khi người kiểm duyệt không am hiểu thứ tiếng, giống như có tv nào tạo bài tiếng phạn hay chữ Hán bên đây chúng ta thì có thể tỷ lệ phần trăm sai phạm bị bỏ qua sẽ nhiều hơn các từ hệ chữ chúng ta dùng). Còn bên fr, bạn xem ví dụ của họ có liên quan đến chủ thể cỡ nào? Nó đáng bao nhiêu phần trăm? Rõ ràng như Wiktionary vi không?. Về trường hợp lấy ví dụ của các từ như "Đảng ta" "Mĩ ngụy" thì đây là một từ, trích quy định "Tất cả các bài viết và các nội dung bách khoa khác tại Wikipedia phải được viết trên một quan điểm trung lập (QDTL), thể hiện một cách công bằng và không thiên vị" tôi nghĩ bạn đủ khả năng tự suy ra hướng tôi đang muốn nói. Khi bạn dùng từ này vô trường hợp như "Mĩ ngụy xâm chiếm nước ta" --> ám chỉ rõ ràng đây là dự án tiếng Việt và nước ta là Việt Nam. Bản chất từ tôi không nói nó vi phạm thái độ trung lập, nhưng tùy ngữ cảnh mà bạn đưa vào là một vấn đề đấy. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:18, ngày 16 tháng 9 năm 2023 (UTC) :Thì thế tôi mới nói "không nhất thiết lắm phải kiểm tra và sửa lại những nội dung POV" đó. Nội dung không trung lập không có nghĩa là nội dung đó không hữu ích. Nói chung là tùy trường hợp, hợp lý là được miễn sao nội dung đó không quá khích. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:12, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Bạn có biết đang nói cái gì không vậy? Không trung lập = vi phạm quy định. Sửa đổi sai đang cần sửa nhưng bạn lại nói không cần thiết?. WP:Thái độ trung lập là một trong những trụ cột của Wikimedia, cho dù đó là sửa đổi thiện chí nhưng vi phạm thì cũng không cần. Dự án chúng ta các tv đã không còn khả năng sửa điều này? Nếu không, tại sao chấp nhận nó?. Sao có thể nhưng không thay bằng một nội dung vừa hữu ích vừa phù hợp với chính sách của ta hơn. Tôi không hiểu bạn Tiến Minh nói không nhất thiết giải quyết những điều này là gì? Bên Wikipedia có nhiều tk bị cấm vì thái độ trung lập đấy và thành viên không kiểm soát được điều này nên mấy tk này quay lại và thành rối nằm vùng. Phần nội dung hiện rõ lên vậy, bạn lại nói là không quá khích. Thế nào là quá khích, đủ để các tv bắt tay vào làm? Tôi xin nhắc lại, Wiktionary tiếng Việt không phải Wiktionary Việt Nam. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:26, ngày 16 tháng 9 năm 2023 (UTC) Hướng giải quyết: Nếu 1 mục từ bình thường có vd chứa các từ như trên: thay thế vd khác. Còn các từ liên quan đến chính trị, trường hợp đặc biệt khác, thì có thể lấy vd chứa những từ như trên. Bạn thấy thế nào? --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 16:53, ngày 16 tháng 9 năm 2023 (UTC) :@[[Thành viên:TheHighFighter2|TheHighFighter2]] Xin phiền bạn đưa phần tin nhắn này ra trang thảo luận vì Tiến Minh đã gửi thư nên tôi đã di chuyển nó ra thảo để mọi người có thể cùng nhau giải quyết. Cảm ơn bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:00, ngày 16 tháng 9 năm 2023 (UTC) :''Đã di chuyển đến [[Wiktionary:Thảo luận#Tính trung lập]].'' &nbsp; – [[Thành viên:Mxn|Nguyễn Xuân Minh]]&nbsp;<sup>[[Thảo luận Thành viên:Mxn|<span style="display: inline-block;">&#x1f4ac;</span>]]</sup> 01:56, ngày 17 tháng 9 năm 2023 (UTC) == [[Cửu đoạn tuyến]] == Phiền bạn check và gỡ một số nội dung không trung lập trong mục từ này (nếu có), tôi thấy có nội dung không trung lập nhưng chưa thể gỡ do liên quan đến mục từ, xin cảm ơn. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 11:34, ngày 10 tháng 10 năm 2023 (UTC) :[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tôi không thấy có thông tin nào là không trung lập, bài viết có nội dung rất ít, đây là bài do bạn khởi tạo. Nếu vẫn còn tin phần nào là không trung lập, bạn cứ thoải mái dẫn vào đây tôi xem. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 15:42, ngày 10 tháng 10 năm 2023 (UTC) == Kay == Kay đang diễn tuồng và giả làm Ti2008. Ti2008 và tôi thật là bạn thân trên Wikipedia và đã biết nhau từ năm 2008 rồi. Cách nói chuyện đó chỉ có thể là Kay. Mai mốt, nếu Kay tái xuất ở đây thì bạn cứ việc cấm vô hạn. Nếu là Ti2008 thật thì bạn ấy sẽ log vào acc Ti2008 để nói chuyện với tôi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 23:34, ngày 14 tháng 12 năm 2023 (UTC) == [[Thành viên:WhoAlone]] == Bạn nên đề cử tv này luôn để dự án chúng ta có thêm 2 BQV mới rất tích cực! [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 02:58, ngày 31 tháng 12 năm 2023 (UTC) == Hellu bạn == Nay có nhã hứng ghé qua đây chút, tui đang tính đóng góp dự án này và duy trì bên Wikiquote (bên đó sau vụ thi viết bài là lại vắng). Nên là bạn có thể giới thiệu sơ sơ về cách hoạt động bên này không? [[Thành viên:Pminh141|Pminh141]] ([[Thảo luận Thành viên:Pminh141|thảo luận]]) 18:22, ngày 23 tháng 7 năm 2024 (UTC) :[[Thành viên:Pminh141|Pminh141]] Chỉ cần xem [https://en.wiktionary.org/wiki/Wiktionary:Criteria_for_inclusion# Wiktionary:Độ nổi bật] và [https://en.wiktionary.org/wiki/Wiktionary:Neutral_point_of_view Thái độ trung lập] là có thể đóng góp (có thể tham khảo từ điển để viết). Dự án còn rất sơ khai về mảng quy định, tương lai tôi sẽ dự tính soạn thảo tập trung vô mảng này. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 02:24, ngày 24 tháng 7 năm 2024 (UTC) == Đổi thay == Phiền bạn giúp cấp lại quyền lùi sửa và gỡ quyền tại acc chính với ạ, Bạn có thể xem [[w:en:Wikipedia:Administrators' noticeboard#Unmerge my account from global|tại thảo luận này]], xin cảm ơn. – [[Thành viên:TienMinh-mun6xnChing|TienMinh-mun6xnChing]] ([[Thảo luận Thành viên:TienMinh-mun6xnChing|thảo luận]]) 12:01, ngày 29 tháng 10 năm 2024 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:54, ngày 29 tháng 10 năm 2024 (UTC) == Các công cụ (tập lệnh) ở Wiktionary == Phiên bản sắp tới của Zinnia sẽ mở rộng cho phép sử dụng ở Wiktionary. Tôi muốn hỏi trong quy trình làm việc ở đây, bạn và mọi người có sử dụng công cụ hay tập lệnh (script) gì không, để bổ sung vào Zinnia. Cảm ơn. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 13:11, ngày 2 tháng 11 năm 2024 (UTC) : Tag thêm @[[Thành viên:TienMinh-mun6xnChing|TienMinh-mun6xnChing]]. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 13:11, ngày 2 tháng 11 năm 2024 (UTC) ::[[Thành viên:Plantaest|Plantaest]] Các công cụ hay script để chống phá hoại thông thường các tv sẽ tự cài đặt ở Meta. Vì Wiktionary chỉ có mỗi BQV mới có bộ công cụ đầy đủ chức năng (gồm cả thao tác đánh dấu tuần tra), trừ "lùi sửa" vì có quyền riêng cho tác này. Do khác Wikipedia vấn đề này, tôi nghĩ giao diện cần nghiên cứu thêm nếu áp dụng. P/s Tôi dùng Restorer thay cho Twinkle (khi hồi sửa). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:02, ngày 2 tháng 11 năm 2024 (UTC) == Cần hỗ trợ về quyết định xóa bài == Em đang chỉnh sửa bài đăng và không biết là add vào gây spam, phiền anh hỗ trợ em với ạ – [[Thành viên:Nntrinh76|Nntrinh76]] ([[Thảo luận Thành viên:Nntrinh76|thảo luận]]) 11:34, ngày 17 tháng 12 năm 2024 (UTC) :Theo [https://vi.wiktionary.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Nh%E1%BA%ADt_tr%C3%ACnh/Nntrinh76 nhật trình], bài viết bạn tạo mang nội dung vượt ngoài dự án (Wiktionary chỉ bao gồm các mục từ). Bài viết này cũng có nội dung PR cá nhân. Đó là lý do cho việc nhắc nhở. Mời bạn tham khảo [[Wiktionary:Quy định và hướng dẫn]] để rút kinh nghiệm cho các lần sửa đổi sau. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 13:16, ngày 17 tháng 12 năm 2024 (UTC) ::anh có thể mở để em chỉnh sửa được không ạ? do cũng là lần đầu em viết và em đã dùng 2 ngày tổng hợp.. – [[Thành viên:Nntrinh76|Nntrinh76]] ([[Thảo luận Thành viên:Nntrinh76|thảo luận]]) 15:35, ngày 17 tháng 12 năm 2024 (UTC) :::Trang bạn đã tạo không liên quan gì đến Wiktionary cả, tại vì đây là trang từ điển, không phải là nơi để tạo hoặc chỉnh sửa bài viết. Cho nên tôi, Đăng hoặc bqv khác không thể mở khóa cái trang đó được. – [[Thành viên:Nguyên Hưng Trần|<span style="color:#74a12e;font-family:Georgia, serif;">'''NHT'''</span>]] ([[Thảo luận Thành viên:Nguyên Hưng Trần|💬]]) 16:15, ngày 17 tháng 12 năm 2024 (UTC) == lời cảm ơn == Cảm ơn vì đã trả lời trên [[Thảo_luận:bồ_các]], vì đó là không gian công cộng nên không tiện. Không biết nhấn nút cảm ơn thì kết quả sẽ được chuyển đến người đó hay kq sẽ như thế nào nhỉ, vì nhấn nhiều lần rồi nhưng không biết sẽ như thế nào? Mình có ai cảm ơn đâu, còn IP thì không cảm ơn được. – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 15:05, ngày 13 tháng 2 năm 2025 (UTC) :Từ người thực hiện, chuyển đến người được nhận. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:02, ngày 13 tháng 2 năm 2025 (UTC) == Xin chào == Nếu có thể tôi cần giúp đỡ – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:32, ngày 14 tháng 3 năm 2025 (UTC) :[[Thành viên:Henrydat|Henrydat]] Bạn có thể nêu vấn đề cụ thể. Nếu là các việc liên quan dự án, tôi sẽ giúp trong khả năng. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:42, ngày 14 tháng 3 năm 2025 (UTC) ::Ô trời, tim tôi đang đập đây, tôi thấy chữ rối ở đây bạn biết tôi là ai còn hỏi? – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:50, ngày 14 tháng 3 năm 2025 (UTC) :::Này tôi không có thời gian, tới giờ này thì việc này rất gấp? – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:55, ngày 14 tháng 3 năm 2025 (UTC) ::::tất nhiên tôi không có ý nói tôi là rối, tôi chỉ xem lịch sử đóng góp nói vậy thôi, nếu bạn biết trước tôi là ai thì mới giúp được – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:58, ngày 14 tháng 3 năm 2025 (UTC) :::::Rồi xong tôi đã đến lộn chỗ, quyết định không hoạt đông tại dự án này là quyết định đúng đắn – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 18:02, ngày 14 tháng 3 năm 2025 (UTC) ::::::Cần lưu ý cơ chế cấm người dùng hoạt động độc lập trên mỗi dự án, tức là ngoại trừ việc lạm dụng xuyên wiki hoặc bị cấm chỉ, thành viên vẫn có thể hoạt động và xem như một tài khoản bình thường khi qua dự án khác. Bạn vẫn có thể hoạt động tại đây và tuân theo quy định tại dự án này; ngược lại, bạn có tùy quyền quyết định không tham gia đóng góp. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 07:44, ngày 15 tháng 3 năm 2025 (UTC) :::::::Này chúng ta có thể tiếp tục cuộc trò chuyện sau 7 tháng không, bây giờ có thể là lúc thích hợp hoặc có thể sớm hơn hoặc trễ hơn? Nói như bạn vậy thì dễ quá rồi, tôi hy vọng mình không mắc sai lầm. – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 15:45, ngày 9 tháng 11 năm 2025 (UTC) == [[Special:Tags]] == Tôi đang test script, nhờ bạn tạo một thẻ với tên thẻ là “twinkle” và tên hiển thị là “Twinkle” để script chạy. Cảm ơn bạn. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 00:30, ngày 1 tháng 4 năm 2025 (UTC) :[[Thành viên:Hide on Rosé|Hide on Rosé]] {{Tick}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:08, ngày 1 tháng 4 năm 2025 (UTC) :: Nào bạn rảnh thì bạn sửa lại phần tên hiển thị: Liên kết tới [[Wiktionary:Twinkle]] nhé. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 09:51, ngày 1 tháng 4 năm 2025 (UTC) [[Tập tin:Wiktionary Deletion Tools 2025.png|nhỏ|250px|phải]] :::[[Thành viên:Hide on Rosé|Hide on Rosé]] Tôi upload màn hình chụp công cụ xóa quản trị viên Wiktionary. Bạn tham khảo. Twinkle hiện tại có vẻ chủ yếu phù hợp bài viết Wikipedia. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 03:34, ngày 2 tháng 4 năm 2025 (UTC) :::: @[[Thành viên:P. ĐĂNG|P. ĐĂNG]] Danh sách xoá mà bạn chụp thì tôi xem được ở đây: [[MediaWiki:Deletereason-dropdown]]. Mô đun này tôi đã sửa theo bộ tiêu chí xoá của dự án này, bạn có thể thử. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 03:40, ngày 2 tháng 4 năm 2025 (UTC) :::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Công cụ xóa hiện như trang [[MediaWiki:Deletereason-dropdown]] chỉ xuất hiện khi bài viết có tựa đề "Wikitionary" hoặc "MediaWiki"; đối với các mục từ thì như hình chụp. Có vẻ phải chỉnh làm sao khi các thành viên ấn Twinkle gắn bản mẫu xóa trang mục từ thì nó hiện lên các lý do liên quan cho mục từ. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 03:48, ngày 2 tháng 4 năm 2025 (UTC) :::::: Đúng là như vậy. Trang trong không gian chính là mục từ (trừ Trang Chính) và cả Twinkle lẫn MediaWiki đều hiện lý do tương ứn, theo không gian tên,. code trong trang MediaWiki hiện theo không gian tên, bạn có thể xem mã nguồn của nó. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 05:41, ngày 2 tháng 4 năm 2025 (UTC) :::::: Xem [[Special:Diff/prev/2225367]]. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 05:44, ngày 2 tháng 4 năm 2025 (UTC) :::::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Ok, đã test. PS Thiếu tiêu chí độ nổi bật. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:52, ngày 2 tháng 4 năm 2025 (UTC) :::::::: Tiêu chí đó được quy định ở đâu? Tôi không thấy trong [[Wiktionary:XN]]? [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 10:53, ngày 2 tháng 4 năm 2025 (UTC) :::::::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Tôi xem qua có vẻ đúng thật chưa có trong [[Wiktionary:Quy định xóa trang]], có lẽ trang này đã lâu không cập nhật khi dự án tiến triển. Độ nổi bật các mục từ nằm trong quy định [https://en.wiktionary.org/wiki/Wiktionary:Criteria_for_inclusion này]. Tiêu chí độ nổi bật cũng có trong công cụ xóa của quản trị viên (hình). Ngoài ra, tham khảo thử quy định [https://simple.wiktionary.org/wiki/Wiktionary:Deletion#Articles này] (quy định độ nổi bật của dự án Simple English về một số mục từ). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:19, ngày 2 tháng 4 năm 2025 (UTC) : @[[Thành viên:Hide on Rosé|Hide on Rosé]] Khi tôi gắn biển chất lượng kém bằng Twinkle cho bài [[freeter]] thì xuất hiện vần đề ([[Đặc biệt:Khác/2225470|xem]]). Tôi nghĩ bản mẫu <code><nowiki>{{chất lượng kém}}</nowiki></code> và <code><nowiki>{{Chất lượng kém (nguồn)}}</nowiki></code> có vấn đề rồi. [[User:Ayane Fumihiro|<b style="font-family:Segoe UI Light;color:#FF69B4;letter-spacing:">femboy_clen</b>]] 14:01, ngày 2 tháng 4 năm 2025 (UTC) == github.com == Khi dọn bớt trang thảo luận [[Thảo luận Wiktionary:Thảo luận]] để lưu trữ thì có liên kết này bị vào blacklist. Phiền bạn xem xét có thể gỡ liên kết này ra khỏi blacklist được không? [[User:Ayane Fumihiro|<b style="font-family:Segoe UI Light;color:#FF69B4;letter-spacing:">femboy_clen</b>]] ([[User talk:Ayane Fumihiro|<span style="color:#008080;">But we got it yeah</span>]]) 16:06, ngày 22 tháng 5 năm 2025 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:17, ngày 22 tháng 5 năm 2025 (UTC) == "ủ ôi" == Từ này hay xuất hiện trong văn nói, đôi khi đọc truyện tranh tôi có bắt gặp, nhưng không biết nên định nghĩa thế nào? Nhờ bạn hỗ trợ tạo trang nếu được. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 15:37, ngày 23 tháng 7 năm 2025 (UTC) :[[Thành viên:Plantaest|Plantaest]] Đã tạo trang. Từ này nó giống "trời ơi", "trời đất" miền Nam hay gọi thôi. P.S Bạn có câu ví dụ nào hay thì thêm vô nếu muốn (2 đến 3 câu ví dụ đều được, nhưng trung lập và không yếu tố bình luận chính trị). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 05:38, ngày 24 tháng 7 năm 2025 (UTC) == "clause" == Từ "clause" trong tiếng Anh nên được dịch là "mệnh đề" hay "cú" / "tiểu cú" vậy? Mình thấy các trang web dạy tiếng Anh ở Việt Nam ngày nay đều dịch là mệnh đề, nhưng khi mình tra từ điển ''Thuật ngữ ngôn ngữ học Anh – Việt Việt – Anh'', tr. 44 của Cao Xuân Hạo, Hoàng Dũng thì lại dịch là "tiểu cú". Bên ''Từ điển Khái niệm Ngôn ngữ học'', tr. 136 của Nguyễn Thiện Giáp cũng dịch tương tự. Phiền bạn trợ giúp. --[[Thành viên:I can see my baby swimming|I can see my baby swimming]] ([[Thảo luận Thành viên:I can see my baby swimming|thảo luận]]) 12:30, ngày 31 tháng 7 năm 2025 (UTC) :[[Thành viên:I can see my baby swimming|I can see my baby swimming]] Theo nguồn [https://vjol.info.vn/index.php/sphcm/article/view/27696] (trang 14) và [https://js.vnu.edu.vn/FS/article/view/380] (trang 29), cho thấy đều là cách dịch đúng của "clause". Dịch "mệnh đề" đồng nghĩa "cú/tiểu cú" nhưng cách dịch sau mang tính học thuật chuyên môn. Tôi nghĩ có thể xem xét bối cảnh chọn cách dịch phù hợp. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:55, ngày 1 tháng 8 năm 2025 (UTC) == [[Thành viên:Yuki Shiromita/Snowfall.css]] == Nhờ bạn xóa trang này, tôi không cần css để trang trí nữa do rất lag <span style="font-family:Segoe UI Light">[[User:Yuki Shiromita|<b style="color:#FF69B4">nettai</b>]] [[Special:Contributions/Yuki Shiromita|<b style="color:#FF964F">no</b>]] [[User talk:Yuki Shiromita|<b style="color:#93E7FB">shirayukihime</b>]]</span> 06:48, ngày 30 tháng 8 năm 2025 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:05, ngày 30 tháng 8 năm 2025 (UTC) ==Happy Holidays== <div style="border-style:solid; border-color:violet; background-color:#fff; border-width:2px; text-align:left; padding:8px;" class="plainlinks"> {| style="border: 5px dotted #H1790; background-color: #DDDDDD; padding:4px" | rowspan="2" valign="left" |<span style="margin:0px 10px 10px 0px;box-shadow:0px 3px 4px rgba(0, 0, 0, 0.45);display:inline-block;">[[File:Christmas Tree 2011-12-24.jpg|left|300px|link=]]<span style="display:block;padding-top:10px;clear:both"> | <span style="font-family: Georgia; font-size: 98%; color: #190a89;">Chúc bạn P. ĐĂNG có một mùa '''Giáng sinh''' an lành, ấm áp và tràn ngập yêu thương bên gia đình!<br/> Bước sang '''năm mới''' 2026, chúc bạn gặp nhiều may mắn,<br/> gặt hái được nhiều thành công trong công việc và học tập.<br/> Một lần nữa chúc bạn sẽ có một năm mới thật an khang, hạnh phúc và vạn sự như ý!!</span> <br /> <span style="font-family: Georgia; font-size: 92%;"> | rowspan="2" valign="right" |<span style="margin:0px 10px 10px 0px;box-shadow:0px 3px 4px rgba(0, 0, 0, 0.45);display:inline-block;">[[File:Atlantic Firework Festival 2016 (53368638571).jpg|left|360px|link=]]<span style="display:block;padding-top:10px;clear:both"> |}</div> Lời chúc chân thành từ: <span style="background:#978FF;border:solid 1px;border-radius:8px;box-shadow:darkblue 2px 2px 2px">&nbsp;[[User:Kelly zhrm|<span style="font-family:Old English Text MT;color:#C90">Yellow</span>]]&#124;[[User talk:Kelly zhrm|&#248;]]&nbsp;</span>&nbsp; 05:54, ngày 24 tháng 12 năm 2025 (UTC) :[[Thành viên:Kelly zhrm|Kelly zhrm]] Cảm ơn cực muộn :D. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:11, ngày 9 tháng 1 năm 2026 (UTC) == a đuồi == Đôi khi tôi thấy từ này, nhưng không chắc định nghĩa nó thế nào? [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 08:01, ngày 30 tháng 12 năm 2025 (UTC) :[[Thành viên:Plantaest|Plantaest]] Dùng khi người nói biểu thị hàm ý nhưng không muốn diễn đạt rõ sự việc ám chỉ bằng cách nói thông thường và người nghe nhiều khả năng "sẽ" hiểu. Sau kết quả [https://www.google.com/search?q=a+%C4%91u%E1%BB%93i&sca_esv=fdc603a36385362d&rlz=1C1GCEA_enVN1050VN1050&biw=1536&bih=730&aic=0&sxsrf=ANbL-n6bNxATTi-Ja0wA8rmwvQPrO6MF7Q%3A1767953043675&ei=k9Jgae77KLCp4-EP1-n-6AI&ved=0ahUKEwiukZepmv6RAxWw1DgGHde0Hy0Q4dUDCBE tra cứu], tôi tham khảo một số trang web có nhắc đến cụm từ này và hiểu được như trên. Ngoài ra, một số ngữ cảnh được hiểu theo cách [https://www.hieuchua.com/define/A%20%C4%90u%E1%BB%93i này]. Các trang này chưa đủ uy tín để dùng "giải nghĩa" nhưng nó là tất cả trong khả năng có thể dùng tìm hiểu hiện tại. Hy vọng hữu ích đến bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:07, ngày 9 tháng 1 năm 2026 (UTC) == PANG450a, b, c, d, e, f, g, h, i, j, k, l, m, n == Yummie giả dạng rối PANG450v của PVR từ lúc hắn tạo tài khoản PANG450a sao?? Tôi tưởng PVR tạo rối sửa đổi ở đây chứ! Mà khoan, Yummie hắn thường spam đường link tới các wiki Fandom, Miraheze và trang đóng góp của tài khoản hắn giả dạng (PANG450v) hả? – [[Thành viên:Higashizakura|<span style="color:pink; font-family:Noto Serif JP, serif;">'''Anh Đào Phương Đông'''</span>]] ([[Thảo luận Thành viên:Higashizakura|🌸]]) 16:20, ngày 21 tháng 1 năm 2026 (UTC) : Cái trò [[mượn gió bẻ măng]] của Yummie quá cũ rồi. Thật không còn gì đáng bàn. [[User:Hiyuune|<b style="font-family:Segoe UI Light;color:#FFB3AE;letter-spacing:">Hiyuune</b>]] [[User talk: Hiyuune|<b style="font-family:Segoe UI Light;color:#FFF7AD;letter-spacing:">(angustifolia)</b>]] 17:01, ngày 21 tháng 1 năm 2026 (UTC) :[[Thành viên:Higashizakura|Higashizakura]] Phạm Văn Rạng là rối sửa bài viết chính trị (khá nghiêm túc và có khả năng biên tập; chỉ hoạt động tại các dự án Wikipedia vì mục đích chính sửa bài viết chính trị); Yummie là rối spam phá hoại. Có thể dựa vào nhật trình sửa đổi của tk nhận dạng. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 06:48, ngày 22 tháng 1 năm 2026 (UTC) ::[[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]].[[Thành viên:PANG450n|PANG450n]] ([[Thảo luận Thành viên:PANG450n|thảo luận]]) 09:10, ngày 4 tháng 5 năm 2026 (UTC) == [[porfolio]] và [[portfolio]] == Từ đầu có vẻ là sai chính tả, qua enwikt thì đó là tiếng Tây Ban Nha. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 04:19, ngày 24 tháng 2 năm 2026 (UTC) :[[Thành viên:Plantaest|Plantaest]] Tra theo cú pháp "'Porfolio' (Conjunto de fotografías o grabados de diferentes clases que forman un tomo o volumen encuadernable)", thấy ghi nhận cơ bản là mục từ tiếng Tây Ban Nha phỏng theo tiếng Anh và Pháp đã bỏ âm "t" sau khi nước này đưa vào từ điển sử dụng. [[Thành viên:Hiyuune|Hiyuune]] đã giúp sửa. P.S Có vẻ cách dịch nghĩa hiện tại trong bài sai so với nguồn (nguồn [https://www.scribd.com/document/378489759/SUSTANTIVOS-COLECTIVOS#content=query:porfolio,pageNum:1,indexOnPage:0,bestMatch:false này] cũng không thấy theo nghĩa dịch vậy). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:23, ngày 25 tháng 2 năm 2026 (UTC) ihhnzpkc9q42lefqipdaiizxljwgrir 2350131 2350125 2026-05-04T11:29:57Z Hiyuune 50834 Đã lùi lại sửa đổi của [[Special:Contributions/PANG450n|PANG450n]] ([[User talk:PANG450n|thảo luận]]) quay về phiên bản cuối của [[User:Hiyuune|Hiyuune]] 2350124 wikitext text/x-wiki <div style="border:1px solid #FDA; vertical-align:top; padding: 0.5em; background: #FFFFE5;"> <div style="margin-left:0.5em; margin-right: 0.5em; margin-bottom:1em; margin-top: 0.1em;"> <span style="font-size: 1.3rem;">'''Xin chào P. ĐĂNG! Chào mừng bạn đến với Wiktionary tiếng Việt!'''</span> <div class="plainlinks"><p style="margin-top:0.1em; margin-bottom: 1em;">Wiktionary là từ điển mở mà ai cũng đều có thể chỉnh sửa. Cách sử dụng và quy định có thể gây khó khăn cho bạn, nhưng hãy dần học hỏi và '''[[Wiktionary:Táo bạo|mạnh dạn đóng góp]]'''. Các thông tin dưới đây sẽ có thể giúp bạn sử dụng và chỉnh sửa Wiktionary.</p></div> </div> <!-- Quan trọng --> <div style="clear: both; margin-left: 1.5em; margin-right 1.5em; font-size: 100%;"> {| class="plainlinks" width="100%" style="margin:auto;" | style="text-align:center; padding:4px" | [[File:OOjs UI icon search-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Tìm kiếm|Tìm kiếm Wiktionary]]''' <br />Tìm hiểu cách tìm và tra cứu mục từ trên Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon lightbulb.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Yêu cầu mục từ|Yêu cầu mục từ]]'''<br />Nơi để bạn thêm những từ cần viết nhưng chưa có tại Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon userAvatar.svg|30px|link=|]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Cộng đồng|Cổng Cộng đồng Wiktionary tiếng Việt]]'''<br />Nơi tìm hiểu mọi thông tin về của Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon articleCheck-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Quy định và hướng dẫn|Quy định và hướng dẫn]]''' <br />Chính sách của Wiktionary là gì? Xin vui lòng đọc nó trước khi thực hiện chỉnh sửa! |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon edit-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Viết trang mới|Viết trang mới]]'''<br />Tham khảo cách viết trang hay mục từ mới tại Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon tray.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Chỗ thử|Chỗ thử]]'''<br />Nơi để bạn viết nháp và thử nghiệm. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon wikiText.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Sửa đổi|Thực hiện sửa đổi]]'''<br />Tham khảo hướng dẫn sửa đổi và cùng bắt đầu sửa đổi Wiktionary. | style="text-align:center; padding:4px" | [[File:OOjs UI icon helpNotice-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Bàn giúp đỡ|Bàn giúp đỡ]]'''<br />Nơi hỏi đáp khi gặp khó khăn trên Wiktionary. |- | style="text-align:center; padding:4px" | [[File:OOjs UI icon book-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Trợ giúp:Mục lục|Mục lục trợ giúp]]''' <br />Mục lục giúp bạn thông tin và hướng dẫn khác khi gặp khó khăn trong những lúc đóng góp! | style="text-align:center; padding:4px" | [[File:OOjs UI icon speechBubbles-ltr.svg|30px|link=]] | style="width:50%; padding:4px;" | '''[[Wiktionary:Thảo luận|Thảo luận chung]]'''<br />Nơi trao đổi ý kiến giữa bạn và các thành viên khác! |}</div> <div style="padding: 0.5em; background: #FEC; border: 1px solid #FDA; margin-top: 1em; font-size: 1em"> [[File:Vector sig vi.png|250px|right]] '''Hãy luôn nhớ rằng, sau khi viết thảo luận xong thì đừng quên bước quan trọng đó là ký tên ở phía sau thảo luận'''. Phương thức ký tên được sử dụng trong Wiktionary không phải là viết tên trực tiếp, nhưng xin hãy ký tên bằng cách sử dụng 4 dấu ngã (<code><nowiki>--~~~~</nowiki></code>) hoặc bằng cách nhấp vào nút chữ ký ([[File:OOUI JS signature icon LTR.svg|20px|border]]) trong cửa sổ chỉnh sửa của phiên bản trình soạn thảo mã nguồn thông thường.<br/> [[Wiktionary:Guestbook_for_non-Vietnamese_speakers|Welcome! If you are not good at Vietnamese or do not speak it, click here.]] </div> </div>&nbsp;--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 07:34, ngày 24 tháng 6 năm 2023 (UTC) == BQV == Bạn có muốn làm BQV ở Wiktionary này không? Nếu có hứng thú, mời bạn ra ứng cử ở [[Thảo luận Wiktionary:Bảo quản viên]]. Tôi muốn tuyển thêm BQV cho Wiktionary vì Wiktionary hiện tại không có BQV thường trực. Đây là môi trường thực tập tốt trước khi làm ĐPV bên Wikipedia. Hồi xưa, tôi cũng đóng góp cho cả hai dự án cùng một lúc (Wikipedia + Wiktionary). [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 13:32, ngày 2 tháng 8 năm 2023 (UTC) :@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Tôi hay hoạt động bên đây thật nhưng bên đây tôi có ít sửa đổi. Chỉ vài tuần trước tôi xin quyền lùi sửa để chống phá hoại nhưng không đủ yêu cầu thì BQV làm sao tôi ứng cử được. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:33, ngày 2 tháng 8 năm 2023 (UTC) ::Bên Wiktionary không có yêu cầu tối thiểu để làm BQV. Bạn có đóng góp bên Wikipedia thì ra ứng cử là ok rồi. Quan trọng là bạn có muốn vác tù và hàng tổng không thôi? [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 15:23, ngày 2 tháng 8 năm 2023 (UTC) :::@[[Thành viên:Nguyentrongphu|Nguyentrongphu]] Tất nhiên, nếu có cơ hội được công đồng giao phó thì tôi sẽ làm. Nhưng chắc tôi cần tích cực cày sửa đổi một thời gian vì hiện tại tôi có dưới 300 sửa đổi. Có thể, tôi nghĩ tôi sẽ tích cực bên dự án này vài tuần cái đã. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 15:27, ngày 2 tháng 8 năm 2023 (UTC) ::::Bạn tính vậy cũng được. Cày sửa đổi là dễ mà. 2 tuần sau, mời bạn tự ra ứng cử. Tôi sẽ ủng hộ. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 15:57, ngày 2 tháng 8 năm 2023 (UTC) == Mệt nhỉ? == Tụi này lì như trâu thật, mới chập sáng đòi vặt lông bẻ cổ tổ tông nhà tôi này. – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:43, ngày 3 tháng 8 năm 2023 (UTC) :@[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] Tôi qua đây thì gặp TTS. Haha MTRIRod với bạn Phú nói đúng, tên này ám tôi như ma ám rồi. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:44, ngày 3 tháng 8 năm 2023 (UTC) ::Mà hình như bên vi chưa cấm tên [https://vi.wikipedia.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:%C4%90%C3%B3ng_g%C3%B3p/%C4%90%E1%BB%ABng_b%C6%A1_S%C6%A1n_n%E1%BB%AFa,_S%C6%A1n_c%C3%B4_%C4%91%C6%A1n_l%E1%BA%AFm! này] thì phải? – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:48, ngày 3 tháng 8 năm 2023 (UTC) :::@[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] Chắc cấm sót, mà TTS chắc không dùng lại tk đó đâu. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:50, ngày 3 tháng 8 năm 2023 (UTC) ::::Đâu, vừa nhắc xong thì hình như mới chửi Nguyenmy kìa. – [[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] ([[Thảo luận Thành viên:Quangkhanhhuynh|thảo luận]]) 08:52, ngày 3 tháng 8 năm 2023 (UTC) :::::@[[Thành viên:P. ĐĂNG|P. ĐĂNG]] @[[Thành viên:Quangkhanhhuynh|Quangkhanhhuynh]] @[[Thành viên:Tryvix1509|Tryvix1509]] @[[Thành viên:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] Mà không biết tôi có nên đệ đơn cấm chỉ tên TTS này đến Nhóm Tin cậy & An toàn của tổ chức Wikimedia không nhỉ? – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 09:58, ngày 3 tháng 8 năm 2023 (UTC) ::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tổ chức này hoạt động như thế nào?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:03, ngày 3 tháng 8 năm 2023 (UTC) :::::::Tôi cũng chỉ [[m:WMF Global Ban Policy/vi|đọc thoáng qua sơ sơ về quy định cấm chỉ toàn hệ thống tổ chức này]], và thấy tổ chức hoạt động qua email ca@wikimedia.org – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:07, ngày 3 tháng 8 năm 2023 (UTC) ::::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Là cấm chỉ một tk toàn cầu bên meta đúng không?. Chắc không cần rồi và cũng không hiệu quả. Tôi nhớ không lầm TTS bị cấm toàn cục từ tk đầu tiên rồi. Hiện giờ dùng proxy thì cấm toàn cục gì nữa. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:10, ngày 3 tháng 8 năm 2023 (UTC) :::::::::Các tk rối của TTS như bạn nói chỉ bị khóa toàn cục = TTS vẫn chưa bị cấm chỉ trên toàn hệ thống. Tôi nghĩ biện pháp này là cách hay nhất để răn đe tên này, chắc tôi nghĩ để lúc khác làm sau vậy. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:17, ngày 3 tháng 8 năm 2023 (UTC) ::::::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Chẳng phải khóa toàn cầu là trên toàn hệ thống Wikipedia? TTS không dùng một tk cố định và dùng proxy. Cấm tk này thì sẽ nhảy qua tk khác bằng một IP khác. Đề xuất của bạn không rõ ràng, tôi chưa hiểu lắm. Nếu được thì làm ngay bây giờ luôn đi. Tôi mới báo cái tk của TTS lên meta cho tiếp viên cấm toàn cầu đấy, hai tk nãy giờ phá hoại hiện đang bị cấm. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:25, ngày 3 tháng 8 năm 2023 (UTC) == Bản mẫu cảnh báo mới == Cảm ơn bạn đã tạo bản mẫu cánh báo về việc sử dụng Wiktionary để quảng cáo. Nhưng tôi thấy bên Wikipedia tiếng Việt [[:w:vi:Bản mẫu:Spam|trang Bản mẫu:Spam]] là dùng để báo cáo liên kết rác, vì vậy xin phép tôi được đổi tên bản mẫu [[Đặc biệt:So sánh di động/2119930|từ "spam-1" thành "Cb1-spam"]]. Tôi không biết việc làm của tôi có đúng không do bên Wikipedia tiếng Việt cũng có [[:w:vi:Bản mẫu:Cb1-spam|bản mẫu tên như thế này]] chắc dùng để cảnh báo thành viên về việc thêm liên kết quảng cáo trong bài. Và nếu bạn thấy tôi sai mong bạn hãy lùi lại. Cảm ơn bạn. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:54, ngày 14 tháng 8 năm 2023 (UTC) :[[Thành viên:DefenderTienMinh07]]: Cảm ơn Tiến Minh. Nhưng lần sau bạn hãy đọc kỹ nội dung bản mẫu, bản mẫu này không phải cảnh báo thêm link spam mà là thông tin quảng cáo, tức là khi tv tạo bài PR (trang mới, PR trong trang thảo luận, hoặc chèn thông tin PR) thì dùng bản mẫu này. Mỗi wiktionary hoạt động độc lập, cộng đồng bên ta vốn nhỏ bé và ít người nên đặt tên bản mẫu đừng thêm vài chữ làm rườm rà khó nhớ, hầu hết thành viên không dùng Twinkle và đặt biển thủ công nên tôi chọn tên ngắn để các bạn dễ dùng. Nhưng nếu bạn đã đổi thì để vậy cũng được vì tôi đang cần làm thêm vài thứ, nâng cấp một vài thứ thiết yếu và để tên tạm như thế cũng được nếu tương lai có phát sinh thêm tôi sẽ thay đổi một vài bản mẫu cho phù hợp và nhất quán. Sẵn đây tôi hỏi bạn có dùng Twinkle không? Nếu có cho tôi xin một vài ý kiến có được không?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:25, ngày 16 tháng 8 năm 2023 (UTC) ::Do dự án đang trong phát triển về mảng tin học nên tôi nghĩ trang global.js trên Meta sẽ là giải pháp hay để cài công cụ. Các công cụ hữu ích tôi vừa tìm được cho dự án: Restorer của BrandonXLF, TwinkleGlobal của Xiplus và WarningDialog.js của Tryvix1509 và nhiều người khác. Tôi chưa hiểu câu hỏi bạn đặt ra cho lắm, nếu bạn đang hỏi về công cụ TwinkleMobile của Plantaest trên dự án này thì tôi nghĩ bạn nên hỏi Plantaest do công cụ vẫn chưa được Plantaest kích hoạt trên đây. – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 18:07, ngày 17 tháng 8 năm 2023 (UTC) :::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Ý tôi là việc dùng Twinkle của bạn trên đây có giống bên Wikipedia không? Nó có chức năng gắn biển, cảnh báo hay chỉ dừng lại ở chức năng lùi sửa. Tôi không dùng Twinkle trên đây, nên tôi mới hỏi bạn để biết thêm thông tin do tôi cần nâng cấp một vài bản mẫu và muốn kích hoạt nó vô Twinkle, tôi muốn Twinkle bên đây được cấu hình lại cho tiện và đầy đủ chức năng giống bên các dự án khác cho các bạn dùng. Tôi sẽ làm trong phạm vi có thể, nhưng chắc sẽ cần thời gian. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:38, ngày 18 tháng 8 năm 2023 (UTC) ::::Việc dùng Twinkle trên đây của tôi chỉ là để phục vụ mục đích tuần tra TĐGĐ trong việc lùi tất cả sửa đổi không thiện chí do tôi chưa có quyền lùi sửa. Nếu bạn muốn công cụ có thể cảnh báo thành viên thì công cụ WarningDialog.js của Tryvix có thể giúp bạn trong trường hợp này. Bạn nên hỏi Tryvix xem sao (tôi đã ping @[[Thành viên:Tryvix1509|Tryvix1509]]) – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:14, ngày 21 tháng 8 năm 2023 (UTC) ::Quay lại chủ đề bản mẫu cảnh báo vừa tạo không biết có nên dùng bản mẫu '''khi mà trường hợp tài khoản đó bị chặn bởi bộ lọc sai phạm''' không chứ tôi ngày nào mà chả thấy mấy tài khoản spambot dùng Wiktionary để quảng cáo có chèn đường link không à dẫn tới việc bị chặn và bị ghi lại trong bộ lọc sai phạm mà không ai phát hiện ra. (bạn có thể xem đầy đủ tại [[Đặc biệt:Nhật trình sai phạm]]) – [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 17:23, ngày 21 tháng 8 năm 2023 (UTC) :::[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Thế thì dùng vậy cũng được, để tôi chỉnh lại bản mẫu cho ý tựu chung hơn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:08, ngày 22 tháng 8 năm 2023 (UTC) == BQV == Rất vui vì bạn đã dũng cảm ra vác tù và hàng tổng. Tôi sẽ ủng hộ. Tuy nhiên, bạn cần gửi thư mời tham gia BQ BQV đến các thành viên trên Wiktionary (tv tích cực lẫn tv thỉnh thoảng xuất hiện). Chúc bạn đắc cử! [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 05:55, ngày 24 tháng 8 năm 2023 (UTC) :Tôi mới cấp quyền cho bạn. Chúc bạn tiếp tục hoạt động tích cực ở cả hai dự án, trao dồi thêm kinh nghiệm bảo quản và vài tháng nữa tự ra ứng cử làm ĐPV ở Wikipedia. Tôi sẽ ủng hộ nếu như không có gì thay đổi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 20:52, ngày 2 tháng 9 năm 2023 (UTC) == Thư mời tham gia biểu quyết == <div style="padding: 0.5em; background: #f8f8ff; margin-top: 1em; font-size: 1em"> {| class="table" style="width: 80%; background-color: #ACE1AF; border: 1px solid #fceb92; margin: auto; margin-bottom: 10px" | style="vertical-align: middle; padding: 10px;" | [[Tập tin:Logo vote.svg|80px|link=]] | style="vertical-align: middle; padding: 15px 10px 10px 0;" | '''Mời bạn cho ý kiến về việc cấp quyền Bảo quản viên cho thành viên [[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] tại trang [[Thảo luận Wiktionary:Bảo quản viên#DefenderTienMinh07|Thảo luận Wiktionary:Bảo quản viên]]. Xin cảm ơn. <small>Hãy cùng tích cực tham gia các biểu quyết và thảo luận về chúng. Mỗi hành động của bạn sẽ góp phần không nhỏ để xây dựng các mục từ trên Wiktionary - tài sản chung của cộng đồng chúng ta, giúp wiki ta ngày càng phát triển vững mạnh! Thân ái! |} </div> [[User:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[User talk:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 10:25, ngày 24 tháng 8 năm 2023 (UTC) == Bất ngờ chưa! == Tôi tới đây là để thông báo một tin vui cho bạn. {{ý kiến|1=Tin vui là:}} Hiện tại bạn '''đã là BQV trên dự án Wiktionary tiếng Việt'''. Bạn lúc này cảm thấy thể nào? Mong bạn sẽ làm tốt công việc của mình như tôi đã nói lúc bỏ phiếu. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 21:02, ngày 2 tháng 9 năm 2023 (UTC) :Tôi cũng không biết nói thế nào, nhưng cảm ơn bạn và Phú cũng như các thành viên khác đã hỗ trợ tôi từ dự án này qua dự án khác. Từ nay, tôi đảm nhận thêm nhiều nhiệm vụ hơn trên Wiktionary nên sẽ cố gắng chọn cách làm hiệu quả tốt nhất cho dự án. Tôi ít nói quá, vài dòng trên là tất cả, tôi không nghĩ thêm được gì để diễn tả hết. Cảm ơn vì thông báo này. Chúc bạn một ngày tốt lành. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:50, ngày 3 tháng 9 năm 2023 (UTC) == Một số sửa đổi của bạn gần đây == Chào bạn! Về một số sửa đổi của bạn gần đây, như tại [[khả năng]], [[chứng minh]], ... Nếu phần định nghĩa có các từ kiểu như "nước ta", "nhân dân ta", ... thì ta nên thay bằng các từ khác hoặc xóa đi. Còn nếu nó có ở phần vd thì không cần xóa do phần này chấp nhận chứa các từ như vậy--.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 12:48, ngày 16 tháng 9 năm 2023 (UTC) :@[[Thành viên:TheHighFighter2|TheHighFighter2]] Đúng vậy, tôi đã xoá chúng đi vì Wiktionary:Thái độ trung lập. Wiktionary có quy định về phần vd được phép ngoại lệ này không?. Tôi đã có nói chuyện với HCV Mxn về điều này. Tôi khẳng định nó không trung lập và xoá đi là cần thiết, và sẽ bổ sung phần ví dụ mới vào. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:19, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:P. ĐĂNG|P. ĐĂNG]] Hiện tại trên dự án không có trang nào tên là [[Wiktionary:Thái độ trung lập]]. Chả là bạn muốn tìm trang quy định liên quan tới vấn đề chăng? – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 14:29, ngày 16 tháng 9 năm 2023 (UTC) :::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Chưa có chứ không phải không. Các dự án Wikipedia đều hoạt động hướng đến chung là thái độ trung lập. Wiktionary tiếng Việt không phải Wiktionary Việt Nam. HCV Mxn cũng đi xoá những thứ này. Khi dùng từ như "dân ta, nhân dân ta", khi người nước ngoài đọc, bạn nghĩ sao về điều này? Chúng ta hướng đến một dự án phục vụ mọi người, mọi chủng tộc và quốc gia, không phải riêng một đất nước nào. Vì vậy, mỗi dòng viết ra phải dựa trên thái độ trung lập. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:36, ngày 16 tháng 9 năm 2023 (UTC) ::::Bạn nói cũng đúng vì theo quy định bên Wiktionary tiếng Anh "all entries must be written from a '''neutral point of view''', representing views fairly and without bias" (tạm dịch: Mọi nội dung được đưa vào đều phải được viết từ một cái nhìn trung lập, thể hiện cái nhìn công bằng và không thiên kiến). Nhưng tôi nghĩ cũng không nhất thiết lắm phải kiểm tra và sửa lại những nội dung POV vì nội dung không trung lập thường nó cũng không ảnh hưởng gì nhiều đến dự án lắm. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 14:46, ngày 16 tháng 9 năm 2023 (UTC) :::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Đây là điều đương nhiên. Chúng ta đang hoạt động trên đâu? Wiktionary là dự án bách khoa, nó ưu tiên thái độ trung lập, nơi mà một người Mỹ có thể qua đọc bài viết của một Wikimedia tiếng Đức, tiếng Việt hay tiếng Trung. Khi không trung lập, bạn nói không nhất thiết sửa lại là sao?. Đến nay tôi mới phát hiện Wiktionary tiếng Việt đang có văn phong không trung lập rất nhiều, trích câu Hồ Chí Minh, dùng thơ... Tôi cần BQV TheHighFighter2 phản hồi điều này, lẽ ra phải thảo luận với tôi trước khi lùi sửa, thứ mang tính chất mâu thuẫn. Nếu có quy định nào nói phần ví dụ ta được ngoại lệ thì tôi sẽ xem lại sửa đổi của mình. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:53, ngày 16 tháng 9 năm 2023 (UTC) ::::::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tôi dám chắc là không có quy định nào về ngoại lệ này cả. Không trung lập mới là đi ngược với quy định của bách khoa. Nội dung trên đây vốn đa phần được sao chép từ FVDP một dự án không có quy định tính trung lập, khi dùng nó đưa vô thì phải xem xét ở một vài khía cạnh chứ không copy là xong được. Wiktionary không phải từ điển của Việt Nam, nó cũng không phải sách giáo khoa, không dùng văn phong thiên vị một phía, thêm thơ lại không trung lập. Bạn sang các Wiktionary tiếng khác xem, có nền tảng wiki nào dùng những câu ví dụ như "nhân dân ta chiến đấu bảo vệ tổ quốc" "chiến tranh chống đế quốc Mỹ", có xuất hiện không?. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:58, ngày 16 tháng 9 năm 2023 (UTC) 1. Bên en có rất nhiều mục có vd chứa các từ "[https://en.wiktionary.org/w/index.php?search=%22our+country%22&title=Special:Search&profile=advanced&fulltext=1&ns0=1 our country]", "[https://en.wiktionary.org/w/index.php?search=%22n%C6%B0%E1%BB%9Bc+ta%22&title=Special:Search&ns0=1&searchToken=12thcn782xmsjc7aixwau68ok nước ta]; bên fr có "[https://fr.wiktionary.org/w/index.php?search=%22notre+pays%22&title=Sp%C3%A9cial:Recherche&profile=advanced&fulltext=1&searchengineselect=mediawiki&ns0=1&ns100=1&ns106=1&ns110=1&searchToken=vol8t2pu9urr4hv60l40oom8 notre pays]" (đất nước chúng tôi) 2. Khi lấy vd cho mục "[[Đảng ta]]", "[[Mĩ nguỵ]]", "[[ba que]]" thì ta nên lấy vd như nào? --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 15:57, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:TheHighFighter2|TheHighFighter2]] Xin gửi bạn một phần tin nhắn của tôi với HCB Mxn: "tất cả các câu thí dụ này được nhập từ Dự án Từ điển tiếng Việt miễn phí (FVDP), dự án này sao chép nguyên cả lời định nghĩa từ một số từ điển khác, có lẽ bao gồm những cuốn từ điển trong nước. (FVDP cũng có nhiều danh ngôn của Hồ Chí Minh.) Mấy năm nay tôi cũng muốn gạt đi những câu thí dụ không trung lập hoặc sửa lại theo thuật ngữ trung lập hơn. Đây chỉ là một trong rất nhiều điều thiếu sót của việc nhập FVDP. Nếu bạn có thể giúp dọn dẹp các câu thí dụ và danh ngôn thì tốt quá". Những từ tiếng Việt được xây dựng bên en cũng đa phần dùng bot và người mở rộng có cả những tv người Việt (từ ngoại quốc có thể không bị kiểm duyệt gắt gao khi người kiểm duyệt không am hiểu thứ tiếng, giống như có tv nào tạo bài tiếng phạn hay chữ Hán bên đây chúng ta thì có thể tỷ lệ phần trăm sai phạm bị bỏ qua sẽ nhiều hơn các từ hệ chữ chúng ta dùng). Còn bên fr, bạn xem ví dụ của họ có liên quan đến chủ thể cỡ nào? Nó đáng bao nhiêu phần trăm? Rõ ràng như Wiktionary vi không?. Về trường hợp lấy ví dụ của các từ như "Đảng ta" "Mĩ ngụy" thì đây là một từ, trích quy định "Tất cả các bài viết và các nội dung bách khoa khác tại Wikipedia phải được viết trên một quan điểm trung lập (QDTL), thể hiện một cách công bằng và không thiên vị" tôi nghĩ bạn đủ khả năng tự suy ra hướng tôi đang muốn nói. Khi bạn dùng từ này vô trường hợp như "Mĩ ngụy xâm chiếm nước ta" --> ám chỉ rõ ràng đây là dự án tiếng Việt và nước ta là Việt Nam. Bản chất từ tôi không nói nó vi phạm thái độ trung lập, nhưng tùy ngữ cảnh mà bạn đưa vào là một vấn đề đấy. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:18, ngày 16 tháng 9 năm 2023 (UTC) :Thì thế tôi mới nói "không nhất thiết lắm phải kiểm tra và sửa lại những nội dung POV" đó. Nội dung không trung lập không có nghĩa là nội dung đó không hữu ích. Nói chung là tùy trường hợp, hợp lý là được miễn sao nội dung đó không quá khích. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 16:12, ngày 16 tháng 9 năm 2023 (UTC) ::@[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Bạn có biết đang nói cái gì không vậy? Không trung lập = vi phạm quy định. Sửa đổi sai đang cần sửa nhưng bạn lại nói không cần thiết?. WP:Thái độ trung lập là một trong những trụ cột của Wikimedia, cho dù đó là sửa đổi thiện chí nhưng vi phạm thì cũng không cần. Dự án chúng ta các tv đã không còn khả năng sửa điều này? Nếu không, tại sao chấp nhận nó?. Sao có thể nhưng không thay bằng một nội dung vừa hữu ích vừa phù hợp với chính sách của ta hơn. Tôi không hiểu bạn Tiến Minh nói không nhất thiết giải quyết những điều này là gì? Bên Wikipedia có nhiều tk bị cấm vì thái độ trung lập đấy và thành viên không kiểm soát được điều này nên mấy tk này quay lại và thành rối nằm vùng. Phần nội dung hiện rõ lên vậy, bạn lại nói là không quá khích. Thế nào là quá khích, đủ để các tv bắt tay vào làm? Tôi xin nhắc lại, Wiktionary tiếng Việt không phải Wiktionary Việt Nam. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:26, ngày 16 tháng 9 năm 2023 (UTC) Hướng giải quyết: Nếu 1 mục từ bình thường có vd chứa các từ như trên: thay thế vd khác. Còn các từ liên quan đến chính trị, trường hợp đặc biệt khác, thì có thể lấy vd chứa những từ như trên. Bạn thấy thế nào? --.--[[Thành viên:TheHighFighter2|TheHighFighter2]] ([[Thảo luận Thành viên:TheHighFighter2|thảo luận]]) 16:53, ngày 16 tháng 9 năm 2023 (UTC) :@[[Thành viên:TheHighFighter2|TheHighFighter2]] Xin phiền bạn đưa phần tin nhắn này ra trang thảo luận vì Tiến Minh đã gửi thư nên tôi đã di chuyển nó ra thảo để mọi người có thể cùng nhau giải quyết. Cảm ơn bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:00, ngày 16 tháng 9 năm 2023 (UTC) :''Đã di chuyển đến [[Wiktionary:Thảo luận#Tính trung lập]].'' &nbsp; – [[Thành viên:Mxn|Nguyễn Xuân Minh]]&nbsp;<sup>[[Thảo luận Thành viên:Mxn|<span style="display: inline-block;">&#x1f4ac;</span>]]</sup> 01:56, ngày 17 tháng 9 năm 2023 (UTC) == [[Cửu đoạn tuyến]] == Phiền bạn check và gỡ một số nội dung không trung lập trong mục từ này (nếu có), tôi thấy có nội dung không trung lập nhưng chưa thể gỡ do liên quan đến mục từ, xin cảm ơn. – [[Thành viên:DefenderTienMinh07|<span style="background:#808080;color:#FFFF00;border-radius:3px;"> '''☀DefenderTienMinh⛤☯☽'''</span>]] ([[Thảo luận Thành viên:DefenderTienMinh07|<span style="font-family:Simhei;color:#808080;">talk</span>]]) 11:34, ngày 10 tháng 10 năm 2023 (UTC) :[[Thành viên:DefenderTienMinh07|DefenderTienMinh07]] Tôi không thấy có thông tin nào là không trung lập, bài viết có nội dung rất ít, đây là bài do bạn khởi tạo. Nếu vẫn còn tin phần nào là không trung lập, bạn cứ thoải mái dẫn vào đây tôi xem. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 15:42, ngày 10 tháng 10 năm 2023 (UTC) == Kay == Kay đang diễn tuồng và giả làm Ti2008. Ti2008 và tôi thật là bạn thân trên Wikipedia và đã biết nhau từ năm 2008 rồi. Cách nói chuyện đó chỉ có thể là Kay. Mai mốt, nếu Kay tái xuất ở đây thì bạn cứ việc cấm vô hạn. Nếu là Ti2008 thật thì bạn ấy sẽ log vào acc Ti2008 để nói chuyện với tôi. [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 23:34, ngày 14 tháng 12 năm 2023 (UTC) == [[Thành viên:WhoAlone]] == Bạn nên đề cử tv này luôn để dự án chúng ta có thêm 2 BQV mới rất tích cực! [[Thành viên:Nguyentrongphu|Nguyentrongphu]] ([[Thảo luận Thành viên:Nguyentrongphu|thảo luận]]) 02:58, ngày 31 tháng 12 năm 2023 (UTC) == Hellu bạn == Nay có nhã hứng ghé qua đây chút, tui đang tính đóng góp dự án này và duy trì bên Wikiquote (bên đó sau vụ thi viết bài là lại vắng). Nên là bạn có thể giới thiệu sơ sơ về cách hoạt động bên này không? [[Thành viên:Pminh141|Pminh141]] ([[Thảo luận Thành viên:Pminh141|thảo luận]]) 18:22, ngày 23 tháng 7 năm 2024 (UTC) :[[Thành viên:Pminh141|Pminh141]] Chỉ cần xem [https://en.wiktionary.org/wiki/Wiktionary:Criteria_for_inclusion# Wiktionary:Độ nổi bật] và [https://en.wiktionary.org/wiki/Wiktionary:Neutral_point_of_view Thái độ trung lập] là có thể đóng góp (có thể tham khảo từ điển để viết). Dự án còn rất sơ khai về mảng quy định, tương lai tôi sẽ dự tính soạn thảo tập trung vô mảng này. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 02:24, ngày 24 tháng 7 năm 2024 (UTC) == Đổi thay == Phiền bạn giúp cấp lại quyền lùi sửa và gỡ quyền tại acc chính với ạ, Bạn có thể xem [[w:en:Wikipedia:Administrators' noticeboard#Unmerge my account from global|tại thảo luận này]], xin cảm ơn. – [[Thành viên:TienMinh-mun6xnChing|TienMinh-mun6xnChing]] ([[Thảo luận Thành viên:TienMinh-mun6xnChing|thảo luận]]) 12:01, ngày 29 tháng 10 năm 2024 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:54, ngày 29 tháng 10 năm 2024 (UTC) == Các công cụ (tập lệnh) ở Wiktionary == Phiên bản sắp tới của Zinnia sẽ mở rộng cho phép sử dụng ở Wiktionary. Tôi muốn hỏi trong quy trình làm việc ở đây, bạn và mọi người có sử dụng công cụ hay tập lệnh (script) gì không, để bổ sung vào Zinnia. Cảm ơn. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 13:11, ngày 2 tháng 11 năm 2024 (UTC) : Tag thêm @[[Thành viên:TienMinh-mun6xnChing|TienMinh-mun6xnChing]]. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 13:11, ngày 2 tháng 11 năm 2024 (UTC) ::[[Thành viên:Plantaest|Plantaest]] Các công cụ hay script để chống phá hoại thông thường các tv sẽ tự cài đặt ở Meta. Vì Wiktionary chỉ có mỗi BQV mới có bộ công cụ đầy đủ chức năng (gồm cả thao tác đánh dấu tuần tra), trừ "lùi sửa" vì có quyền riêng cho tác này. Do khác Wikipedia vấn đề này, tôi nghĩ giao diện cần nghiên cứu thêm nếu áp dụng. P/s Tôi dùng Restorer thay cho Twinkle (khi hồi sửa). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 14:02, ngày 2 tháng 11 năm 2024 (UTC) == Cần hỗ trợ về quyết định xóa bài == Em đang chỉnh sửa bài đăng và không biết là add vào gây spam, phiền anh hỗ trợ em với ạ – [[Thành viên:Nntrinh76|Nntrinh76]] ([[Thảo luận Thành viên:Nntrinh76|thảo luận]]) 11:34, ngày 17 tháng 12 năm 2024 (UTC) :Theo [https://vi.wiktionary.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Nh%E1%BA%ADt_tr%C3%ACnh/Nntrinh76 nhật trình], bài viết bạn tạo mang nội dung vượt ngoài dự án (Wiktionary chỉ bao gồm các mục từ). Bài viết này cũng có nội dung PR cá nhân. Đó là lý do cho việc nhắc nhở. Mời bạn tham khảo [[Wiktionary:Quy định và hướng dẫn]] để rút kinh nghiệm cho các lần sửa đổi sau. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 13:16, ngày 17 tháng 12 năm 2024 (UTC) ::anh có thể mở để em chỉnh sửa được không ạ? do cũng là lần đầu em viết và em đã dùng 2 ngày tổng hợp.. – [[Thành viên:Nntrinh76|Nntrinh76]] ([[Thảo luận Thành viên:Nntrinh76|thảo luận]]) 15:35, ngày 17 tháng 12 năm 2024 (UTC) :::Trang bạn đã tạo không liên quan gì đến Wiktionary cả, tại vì đây là trang từ điển, không phải là nơi để tạo hoặc chỉnh sửa bài viết. Cho nên tôi, Đăng hoặc bqv khác không thể mở khóa cái trang đó được. – [[Thành viên:Nguyên Hưng Trần|<span style="color:#74a12e;font-family:Georgia, serif;">'''NHT'''</span>]] ([[Thảo luận Thành viên:Nguyên Hưng Trần|💬]]) 16:15, ngày 17 tháng 12 năm 2024 (UTC) == lời cảm ơn == Cảm ơn vì đã trả lời trên [[Thảo_luận:bồ_các]], vì đó là không gian công cộng nên không tiện. Không biết nhấn nút cảm ơn thì kết quả sẽ được chuyển đến người đó hay kq sẽ như thế nào nhỉ, vì nhấn nhiều lần rồi nhưng không biết sẽ như thế nào? Mình có ai cảm ơn đâu, còn IP thì không cảm ơn được. – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 15:05, ngày 13 tháng 2 năm 2025 (UTC) :Từ người thực hiện, chuyển đến người được nhận. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:02, ngày 13 tháng 2 năm 2025 (UTC) == Xin chào == Nếu có thể tôi cần giúp đỡ – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:32, ngày 14 tháng 3 năm 2025 (UTC) :[[Thành viên:Henrydat|Henrydat]] Bạn có thể nêu vấn đề cụ thể. Nếu là các việc liên quan dự án, tôi sẽ giúp trong khả năng. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 17:42, ngày 14 tháng 3 năm 2025 (UTC) ::Ô trời, tim tôi đang đập đây, tôi thấy chữ rối ở đây bạn biết tôi là ai còn hỏi? – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:50, ngày 14 tháng 3 năm 2025 (UTC) :::Này tôi không có thời gian, tới giờ này thì việc này rất gấp? – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:55, ngày 14 tháng 3 năm 2025 (UTC) ::::tất nhiên tôi không có ý nói tôi là rối, tôi chỉ xem lịch sử đóng góp nói vậy thôi, nếu bạn biết trước tôi là ai thì mới giúp được – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 17:58, ngày 14 tháng 3 năm 2025 (UTC) :::::Rồi xong tôi đã đến lộn chỗ, quyết định không hoạt đông tại dự án này là quyết định đúng đắn – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 18:02, ngày 14 tháng 3 năm 2025 (UTC) ::::::Cần lưu ý cơ chế cấm người dùng hoạt động độc lập trên mỗi dự án, tức là ngoại trừ việc lạm dụng xuyên wiki hoặc bị cấm chỉ, thành viên vẫn có thể hoạt động và xem như một tài khoản bình thường khi qua dự án khác. Bạn vẫn có thể hoạt động tại đây và tuân theo quy định tại dự án này; ngược lại, bạn có tùy quyền quyết định không tham gia đóng góp. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 07:44, ngày 15 tháng 3 năm 2025 (UTC) :::::::Này chúng ta có thể tiếp tục cuộc trò chuyện sau 7 tháng không, bây giờ có thể là lúc thích hợp hoặc có thể sớm hơn hoặc trễ hơn? Nói như bạn vậy thì dễ quá rồi, tôi hy vọng mình không mắc sai lầm. – [[Thành viên:Henrydat|Henrydat]] ([[Thảo luận Thành viên:Henrydat|thảo luận]]) 15:45, ngày 9 tháng 11 năm 2025 (UTC) == [[Special:Tags]] == Tôi đang test script, nhờ bạn tạo một thẻ với tên thẻ là “twinkle” và tên hiển thị là “Twinkle” để script chạy. Cảm ơn bạn. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 00:30, ngày 1 tháng 4 năm 2025 (UTC) :[[Thành viên:Hide on Rosé|Hide on Rosé]] {{Tick}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:08, ngày 1 tháng 4 năm 2025 (UTC) :: Nào bạn rảnh thì bạn sửa lại phần tên hiển thị: Liên kết tới [[Wiktionary:Twinkle]] nhé. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 09:51, ngày 1 tháng 4 năm 2025 (UTC) [[Tập tin:Wiktionary Deletion Tools 2025.png|nhỏ|250px|phải]] :::[[Thành viên:Hide on Rosé|Hide on Rosé]] Tôi upload màn hình chụp công cụ xóa quản trị viên Wiktionary. Bạn tham khảo. Twinkle hiện tại có vẻ chủ yếu phù hợp bài viết Wikipedia. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 03:34, ngày 2 tháng 4 năm 2025 (UTC) :::: @[[Thành viên:P. ĐĂNG|P. ĐĂNG]] Danh sách xoá mà bạn chụp thì tôi xem được ở đây: [[MediaWiki:Deletereason-dropdown]]. Mô đun này tôi đã sửa theo bộ tiêu chí xoá của dự án này, bạn có thể thử. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 03:40, ngày 2 tháng 4 năm 2025 (UTC) :::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Công cụ xóa hiện như trang [[MediaWiki:Deletereason-dropdown]] chỉ xuất hiện khi bài viết có tựa đề "Wikitionary" hoặc "MediaWiki"; đối với các mục từ thì như hình chụp. Có vẻ phải chỉnh làm sao khi các thành viên ấn Twinkle gắn bản mẫu xóa trang mục từ thì nó hiện lên các lý do liên quan cho mục từ. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 03:48, ngày 2 tháng 4 năm 2025 (UTC) :::::: Đúng là như vậy. Trang trong không gian chính là mục từ (trừ Trang Chính) và cả Twinkle lẫn MediaWiki đều hiện lý do tương ứn, theo không gian tên,. code trong trang MediaWiki hiện theo không gian tên, bạn có thể xem mã nguồn của nó. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 05:41, ngày 2 tháng 4 năm 2025 (UTC) :::::: Xem [[Special:Diff/prev/2225367]]. [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 05:44, ngày 2 tháng 4 năm 2025 (UTC) :::::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Ok, đã test. PS Thiếu tiêu chí độ nổi bật. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:52, ngày 2 tháng 4 năm 2025 (UTC) :::::::: Tiêu chí đó được quy định ở đâu? Tôi không thấy trong [[Wiktionary:XN]]? [[Thành viên:Hide on Rosé|Hide on Rosé]] ([[Thảo luận Thành viên:Hide on Rosé|thảo luận]]) 10:53, ngày 2 tháng 4 năm 2025 (UTC) :::::::::[[Thành viên:Hide on Rosé|Hide on Rosé]] Tôi xem qua có vẻ đúng thật chưa có trong [[Wiktionary:Quy định xóa trang]], có lẽ trang này đã lâu không cập nhật khi dự án tiến triển. Độ nổi bật các mục từ nằm trong quy định [https://en.wiktionary.org/wiki/Wiktionary:Criteria_for_inclusion này]. Tiêu chí độ nổi bật cũng có trong công cụ xóa của quản trị viên (hình). Ngoài ra, tham khảo thử quy định [https://simple.wiktionary.org/wiki/Wiktionary:Deletion#Articles này] (quy định độ nổi bật của dự án Simple English về một số mục từ). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:19, ngày 2 tháng 4 năm 2025 (UTC) : @[[Thành viên:Hide on Rosé|Hide on Rosé]] Khi tôi gắn biển chất lượng kém bằng Twinkle cho bài [[freeter]] thì xuất hiện vần đề ([[Đặc biệt:Khác/2225470|xem]]). Tôi nghĩ bản mẫu <code><nowiki>{{chất lượng kém}}</nowiki></code> và <code><nowiki>{{Chất lượng kém (nguồn)}}</nowiki></code> có vấn đề rồi. [[User:Ayane Fumihiro|<b style="font-family:Segoe UI Light;color:#FF69B4;letter-spacing:">femboy_clen</b>]] 14:01, ngày 2 tháng 4 năm 2025 (UTC) == github.com == Khi dọn bớt trang thảo luận [[Thảo luận Wiktionary:Thảo luận]] để lưu trữ thì có liên kết này bị vào blacklist. Phiền bạn xem xét có thể gỡ liên kết này ra khỏi blacklist được không? [[User:Ayane Fumihiro|<b style="font-family:Segoe UI Light;color:#FF69B4;letter-spacing:">femboy_clen</b>]] ([[User talk:Ayane Fumihiro|<span style="color:#008080;">But we got it yeah</span>]]) 16:06, ngày 22 tháng 5 năm 2025 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:17, ngày 22 tháng 5 năm 2025 (UTC) == "ủ ôi" == Từ này hay xuất hiện trong văn nói, đôi khi đọc truyện tranh tôi có bắt gặp, nhưng không biết nên định nghĩa thế nào? Nhờ bạn hỗ trợ tạo trang nếu được. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 15:37, ngày 23 tháng 7 năm 2025 (UTC) :[[Thành viên:Plantaest|Plantaest]] Đã tạo trang. Từ này nó giống "trời ơi", "trời đất" miền Nam hay gọi thôi. P.S Bạn có câu ví dụ nào hay thì thêm vô nếu muốn (2 đến 3 câu ví dụ đều được, nhưng trung lập và không yếu tố bình luận chính trị). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 05:38, ngày 24 tháng 7 năm 2025 (UTC) == "clause" == Từ "clause" trong tiếng Anh nên được dịch là "mệnh đề" hay "cú" / "tiểu cú" vậy? Mình thấy các trang web dạy tiếng Anh ở Việt Nam ngày nay đều dịch là mệnh đề, nhưng khi mình tra từ điển ''Thuật ngữ ngôn ngữ học Anh – Việt Việt – Anh'', tr. 44 của Cao Xuân Hạo, Hoàng Dũng thì lại dịch là "tiểu cú". Bên ''Từ điển Khái niệm Ngôn ngữ học'', tr. 136 của Nguyễn Thiện Giáp cũng dịch tương tự. Phiền bạn trợ giúp. --[[Thành viên:I can see my baby swimming|I can see my baby swimming]] ([[Thảo luận Thành viên:I can see my baby swimming|thảo luận]]) 12:30, ngày 31 tháng 7 năm 2025 (UTC) :[[Thành viên:I can see my baby swimming|I can see my baby swimming]] Theo nguồn [https://vjol.info.vn/index.php/sphcm/article/view/27696] (trang 14) và [https://js.vnu.edu.vn/FS/article/view/380] (trang 29), cho thấy đều là cách dịch đúng của "clause". Dịch "mệnh đề" đồng nghĩa "cú/tiểu cú" nhưng cách dịch sau mang tính học thuật chuyên môn. Tôi nghĩ có thể xem xét bối cảnh chọn cách dịch phù hợp. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 08:55, ngày 1 tháng 8 năm 2025 (UTC) == [[Thành viên:Yuki Shiromita/Snowfall.css]] == Nhờ bạn xóa trang này, tôi không cần css để trang trí nữa do rất lag <span style="font-family:Segoe UI Light">[[User:Yuki Shiromita|<b style="color:#FF69B4">nettai</b>]] [[Special:Contributions/Yuki Shiromita|<b style="color:#FF964F">no</b>]] [[User talk:Yuki Shiromita|<b style="color:#93E7FB">shirayukihime</b>]]</span> 06:48, ngày 30 tháng 8 năm 2025 (UTC) :{{Done}} [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 16:05, ngày 30 tháng 8 năm 2025 (UTC) ==Happy Holidays== <div style="border-style:solid; border-color:violet; background-color:#fff; border-width:2px; text-align:left; padding:8px;" class="plainlinks"> {| style="border: 5px dotted #H1790; background-color: #DDDDDD; padding:4px" | rowspan="2" valign="left" |<span style="margin:0px 10px 10px 0px;box-shadow:0px 3px 4px rgba(0, 0, 0, 0.45);display:inline-block;">[[File:Christmas Tree 2011-12-24.jpg|left|300px|link=]]<span style="display:block;padding-top:10px;clear:both"> | <span style="font-family: Georgia; font-size: 98%; color: #190a89;">Chúc bạn P. ĐĂNG có một mùa '''Giáng sinh''' an lành, ấm áp và tràn ngập yêu thương bên gia đình!<br/> Bước sang '''năm mới''' 2026, chúc bạn gặp nhiều may mắn,<br/> gặt hái được nhiều thành công trong công việc và học tập.<br/> Một lần nữa chúc bạn sẽ có một năm mới thật an khang, hạnh phúc và vạn sự như ý!!</span> <br /> <span style="font-family: Georgia; font-size: 92%;"> | rowspan="2" valign="right" |<span style="margin:0px 10px 10px 0px;box-shadow:0px 3px 4px rgba(0, 0, 0, 0.45);display:inline-block;">[[File:Atlantic Firework Festival 2016 (53368638571).jpg|left|360px|link=]]<span style="display:block;padding-top:10px;clear:both"> |}</div> Lời chúc chân thành từ: <span style="background:#978FF;border:solid 1px;border-radius:8px;box-shadow:darkblue 2px 2px 2px">&nbsp;[[User:Kelly zhrm|<span style="font-family:Old English Text MT;color:#C90">Yellow</span>]]&#124;[[User talk:Kelly zhrm|&#248;]]&nbsp;</span>&nbsp; 05:54, ngày 24 tháng 12 năm 2025 (UTC) :[[Thành viên:Kelly zhrm|Kelly zhrm]] Cảm ơn cực muộn :D. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 10:11, ngày 9 tháng 1 năm 2026 (UTC) == a đuồi == Đôi khi tôi thấy từ này, nhưng không chắc định nghĩa nó thế nào? [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 08:01, ngày 30 tháng 12 năm 2025 (UTC) :[[Thành viên:Plantaest|Plantaest]] Dùng khi người nói biểu thị hàm ý nhưng không muốn diễn đạt rõ sự việc ám chỉ bằng cách nói thông thường và người nghe nhiều khả năng "sẽ" hiểu. Sau kết quả [https://www.google.com/search?q=a+%C4%91u%E1%BB%93i&sca_esv=fdc603a36385362d&rlz=1C1GCEA_enVN1050VN1050&biw=1536&bih=730&aic=0&sxsrf=ANbL-n6bNxATTi-Ja0wA8rmwvQPrO6MF7Q%3A1767953043675&ei=k9Jgae77KLCp4-EP1-n-6AI&ved=0ahUKEwiukZepmv6RAxWw1DgGHde0Hy0Q4dUDCBE tra cứu], tôi tham khảo một số trang web có nhắc đến cụm từ này và hiểu được như trên. Ngoài ra, một số ngữ cảnh được hiểu theo cách [https://www.hieuchua.com/define/A%20%C4%90u%E1%BB%93i này]. Các trang này chưa đủ uy tín để dùng "giải nghĩa" nhưng nó là tất cả trong khả năng có thể dùng tìm hiểu hiện tại. Hy vọng hữu ích đến bạn. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 11:07, ngày 9 tháng 1 năm 2026 (UTC) == PANG450a, b, c, d, e == Yummie giả dạng rối PANG450v của PVR từ lúc hắn tạo tài khoản PANG450a sao?? Tôi tưởng PVR tạo rối sửa đổi ở đây chứ! Mà khoan, Yummie hắn thường spam đường link tới các wiki Fandom, Miraheze và trang đóng góp của tài khoản hắn giả dạng (PANG450v) hả? – [[Thành viên:Higashizakura|<span style="color:pink; font-family:Noto Serif JP, serif;">'''Anh Đào Phương Đông'''</span>]] ([[Thảo luận Thành viên:Higashizakura|🌸]]) 16:20, ngày 21 tháng 1 năm 2026 (UTC) : Cái trò [[mượn gió bẻ măng]] của Yummie quá cũ rồi. Thật không còn gì đáng bàn. [[User:Hiyuune|<b style="font-family:Segoe UI Light;color:#FFB3AE;letter-spacing:">Hiyuune</b>]] [[User talk: Hiyuune|<b style="font-family:Segoe UI Light;color:#FFF7AD;letter-spacing:">(angustifolia)</b>]] 17:01, ngày 21 tháng 1 năm 2026 (UTC) :[[Thành viên:Higashizakura|Higashizakura]] Phạm Văn Rạng là rối sửa bài viết chính trị (khá nghiêm túc và có khả năng biên tập; chỉ hoạt động tại các dự án Wikipedia vì mục đích chính sửa bài viết chính trị); Yummie là rối spam phá hoại. Có thể dựa vào nhật trình sửa đổi của tk nhận dạng. [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 06:48, ngày 22 tháng 1 năm 2026 (UTC) == [[porfolio]] và [[portfolio]] == Từ đầu có vẻ là sai chính tả, qua enwikt thì đó là tiếng Tây Ban Nha. [[Thành viên:Plantaest|Plantaest]] ([[Thảo luận Thành viên:Plantaest|thảo luận]]) 04:19, ngày 24 tháng 2 năm 2026 (UTC) :[[Thành viên:Plantaest|Plantaest]] Tra theo cú pháp "'Porfolio' (Conjunto de fotografías o grabados de diferentes clases que forman un tomo o volumen encuadernable)", thấy ghi nhận cơ bản là mục từ tiếng Tây Ban Nha phỏng theo tiếng Anh và Pháp đã bỏ âm "t" sau khi nước này đưa vào từ điển sử dụng. [[Thành viên:Hiyuune|Hiyuune]] đã giúp sửa. P.S Có vẻ cách dịch nghĩa hiện tại trong bài sai so với nguồn (nguồn [https://www.scribd.com/document/378489759/SUSTANTIVOS-COLECTIVOS#content=query:porfolio,pageNum:1,indexOnPage:0,bestMatch:false này] cũng không thấy theo nghĩa dịch vậy). [[Thành viên:P. ĐĂNG|Phong Đăng]] ([[Thảo luận Thành viên:P. ĐĂNG|thảo luận]]) 04:23, ngày 25 tháng 2 năm 2026 (UTC) hj1e3ei98lwb8em7b8vcc468cquwam2 chrih 0 287708 2349981 2116014 2026-05-03T14:46:39Z WhoAlone 40420 2349981 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[lạ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} {{-lyg-}} {{-noun-}} {{pn}} # [[khỉ]]. [[Thể loại:Danh từ tiếng Lyngngam]] flvgov1dh47875sjj98768w9j68jaz8 Bản mẫu:an-pr 10 295821 2350064 2193505 2026-05-04T03:46:07Z Kelly zhrm 58416 Kelly zhrm đã đổi [[Bản mẫu:arg-pr]] thành [[Bản mẫu:an-pr]] qua đổi hướng 2193505 wikitext text/x-wiki <includeonly>{{#invoke:an-pron|show_pr}}</includeonly><noinclude>{{tài liệu}}[[Thể loại:Bản mẫu cách phát âm tiếng Aragon]]</noinclude> 1r2hogp6gqds7ehca2c9ha2jkju1sl5 kal 0 301559 2349926 2150516 2026-05-03T13:49:41Z WhoAlone 40420 2349926 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[cài]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} {{-zns-}} {{-pron-}} * {{IPA4|zns|[kâl]}} {{-noun-}} {{head|zns|Danh từ}} # [[bầu]] [[bí]]. {{-ref-}} * Blench, Roger, Bulkaam, Michael. 2020. ''An introduction to Mantsi, a South Bauchi language of Central Nigeria''. 2yk2eei1qyar1rz67a7wgbu74db6jmv tal 0 301848 2349963 2339008 2026-05-03T14:16:41Z WhoAlone 40420 2349963 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[lớp]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} =={{langname|jeh}}== ==={{ĐM|noun}}=== {{head|jeh|Danh từ}} # [[cán]] [[nỏ]]. ==={{ĐM|ref}}=== * Cohen, Patrick D., Thŭng (1972). ''ʼDŏk tơtayh Jeh, au pơchŏ hŏk chù Jeh: Hŏk tro pơsèm hŏk, lăm-al 1-3 (Ðọc tiếng Jeh, Em học vần tiếng Jeh: Lớp vỡ-lòng, quyển 1-3)''. SIL International. =={{langname|mji}}== ==={{ĐM|noun}}=== {{head|mji|Danh từ}} # [[ông ngoại]]. ==={{ĐM|ref}}=== * {{R:mji:Linguaevum}} {{-zns-}} {{-pron-}} * {{IPA4|zns|[tāl]}} {{-noun-}} {{head|zns|Danh từ}} # [[mặt trời]]. {{-ref-}} * Blench, Roger. 2020. ''An introduction to Mantsi, a South Bauchi language of Central Nigeria''. =={{langname|tlq}}== ==={{ĐM|verb}}=== {{head|tlq|Động từ}} # [[chạy]]. ==={{ĐM|ref}}=== * [http://sealang.net/monkhmer/database/retrieve.pl?language=Tai%20Loi&sort=gloss&format=html Tiếng Tai Loi] tại Cơ sở Dữ liệu Môn-Khmer. d3hkta0gp2cai9k2rabxtol0a5k3wrf Thể loại:Quốc gia của châu Phi 14 305683 2349905 2161464 2026-05-03T13:14:05Z Hiyuune 50834 Hiyuune đã đổi [[Thể loại:Quốc gia châu Phi]] thành [[Thể loại:Quốc gia của châu Phi]] 2161464 wikitext text/x-wiki [[Thể loại:Quốc gia]] [[Thể loại:Châu Phi]] qrakjc54gltd4cpzzytiaxbe0gsk6n3 2349907 2349905 2026-05-03T13:14:20Z Hiyuune 50834 2349907 wikitext text/x-wiki {{auto cat}} [[Thể loại:Quốc gia]] [[Thể loại:Châu Phi]] 4hemd0vb3vlij0k3lv3sx0qunxrtmnu alak 0 307495 2349922 2326435 2026-05-03T13:46:58Z WhoAlone 40420 2349922 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[rượu]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} =={{langname|fos}}== ==={{section|etym}}=== Từ {{inherited|fos|map-pro|*ałak}}. ==={{section|n}}=== {{head|fos|Danh từ}} # [[con|Con]], [[trẻ]]. ==={{section|ref}}=== * Alexander Adelaar, [https://web.archive.org/web/20210106115554/https://www.soas.ac.uk/taiwanstudies/eats/eats2005/file24063.pdf The Austronesian languages of Taiwan, with special reference to Siraya] lpcjcu6ddyxfw6x9l2641817wa7hjgv pràn 0 308805 2349913 2172847 2026-05-03T13:30:56Z WhoAlone 40420 2349913 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[mạnh]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} {{-kpm-}} {{-adj-}} {{head|kpm|Tính từ}} # [[khỏe]]. {{-ref-}} * Lý Toàn Thắng, Tạ Văn Thông, K'Brêu, K'Bròh (1985) ''Ngữ pháp tiếng Kơ Ho''. Sở Văn hóa và Thông tin Lâm Đồng. 7bdkesdnnjhaq9ytjh4m6rhsxv6q1av bla 0 309532 2350085 2210914 2026-05-04T04:15:16Z WhoAlone 40420 2350085 wikitext text/x-wiki {{-cje-}} {{-noun-}} {{head|cje|Danh từ}} # [[ngà]]. =={{langname|mng}}== ==={{ĐM|noun}}=== {{head|mng|Danh từ}} # {{label|mng|Rơlơm}} [[ngà voi]]. ==={{ĐM|ref}}=== * Blood, Evangeline; Blood, Henry (1972) ''Vietnam word list (revised): Mnong Rolom''. SIL International. =={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[vách]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. 35z6mrdvcpscutzhesehos9g114gwar hla 0 310889 2350086 2234227 2026-05-04T04:15:57Z WhoAlone 40420 2350086 wikitext text/x-wiki =={{langname|kta}}== ==={{ĐM|noun}}=== {{head|kta|Danh từ}} # [[lá]]. ==={{ĐM|ref}}=== * Smith, Kenneth D. (1970) ''Vietnam word list (revised): Kơtua''. SIL International. =={{langname|cja}}== ==={{ĐM|noun}}=== {{head|cja|Danh từ}} # [[lá]]. ==={{ĐM|ref}}=== * Kvoeu-Hor & Timothy Friberg (1978). ''Bôh panuaik Chăm (Western Cham Vocabulary)''. SIL International. {{-jra-}} {{-pron-}} * {{IPA4|jra|/hlaː/}} {{-noun-}} {{head|jra|Danh từ}} # [[lá]]. =={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[lá]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. {{-ren-}} {{-noun-}} {{head|ren|Danh từ}} # [[lá]]. =={{langname|tdr}}== ==={{ĐM|noun}}=== {{head|tdr|Danh từ}} # {{label|tdr|Didrá}} [[lá]]. ==={{ĐM|ref}}=== * Gregerson, Kenneth J. và Smith, Kenneth D. (1973). ''The development of Todrah register''. SIL International. ts03qsrh677yo3jnsvywyhw6ca0h12c tơki 0 311995 2349969 2178085 2026-05-03T14:22:03Z WhoAlone 40420 2349969 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[sừng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} {{-jra-}} {{-pron-}} * {{IPA4|jra|/təki/}} {{-noun-}} {{head|jra|Danh từ}} # [[sừng]]. #:{{uxi|jra|'''tơki '''kơbao|'''sừng '''trâu}} s67gup7879vekw7qjotuaz75cl8u59x ngă 0 312362 2349976 2261381 2026-05-03T14:35:34Z WhoAlone 40420 2349976 wikitext text/x-wiki =={{langname|ibh}}== ==={{ĐM|verb}}=== {{head|ibh|Động từ}} # [[làm]]. #:{{uxi|ibh|Si ma-lŏ '''ngă'''?|'''Làm '''được gì đây?}} ==={{ĐM|ref}}=== * Tam Thi Minh Nguyen, ''A grammar of Bih ''(2013) =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[làm]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} == {{langname|jra}} == === {{ĐM|verb}} === {{head|jra|Động từ}} # [[làm|Làm]]. #:{{uxi|jra|'''ngă '''bruă|'''làm '''việc}} imi6iqq9jbp0yp6d83khlseqc9sludj 0 312896 2349943 2179504 2026-05-03T14:02:56Z WhoAlone 40420 2349943 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[cắn]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} {{-jra-}} {{-verb-}} {{head|jra|Động từ}} # [[cắn]]. ljxslr2e1lyhvjwn2uesvop8j6ulqrv blàn 0 318891 2349985 2190426 2026-05-03T14:53:17Z WhoAlone 40420 2349985 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[tháng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} {{-vi-m-}} {{-verb-}} {{mkh-mvi-verb}} # {{l|vi|tràn}}. #:{{uxi|mkh-mvi|ſou᷄ '''blàn '''ra|sông '''tràn '''ra}} {{-desc-}} * {{desc|vi|tràn}} {{-ref-}} * {{R:VBL}} ep61ywvbmrof2r365rofd6kblizu7xo Mô đun:category tree/topic/Places 828 324859 2349920 2294486 2026-05-03T13:42:42Z Hiyuune 50834 2349920 Scribunto text/plain local labels = {} local handlers = {} local m_table = require("Module:table") local en_utilities_module = "Module:en-utilities" local string_utilities_module = "Module:string utilities" local m_locations = require("Module:place/locations") local m_placetypes = require("Module:place/placetypes") local placetype_data = m_placetypes.placetype_data local internal_error = m_locations.internal_error local dump = mw.dumpObject local insert = table.insert local concat = table.concat local is_callable = require("Module:fun").is_callable --[==[ intro: This module is part of the category tree code and contains code to generate the descriptions of place-related categories such as [[Category:de:Hokkaido Prefecture, Japan]], [[Category:es:Cities in France]], [[Category:pt:Municipalities of Tocantins, Brazil]], etc.). Note that this module doesn't actually create the categories; that must be done separately, with the text "{{tl|auto cat}}" as the definition of the category. (This process should automatically happen periodically for non-empty categories, because they will appear in [[Special:WantedCategories]] and a bot will periodically examine that list and create any needed category.) There are two ways that category descriptions are specified: (1) by manually adding an entry to the `labels` table, keyed by the label (the category minus the language code) with a value consisting of a Lua table specifying the description text and the category's parents; (2) through handlers (pieces of Lua code) added to the `handlers` list, which recognize labels of a specific type (e.g. `Cities in France`) and generate the appropriate specification for that label on-the-fly. See [[Module:place]] for an introduction to the terminology associated with places along with a list of all the relevant modules, along with for more specific information on types of toponyms and placetypes and how their categorization works. ]==] local function lcfirst(label) return mw.getContentLanguage():lcfirst(label) end local function gsub_literally(str, from, to) local m_strutils = require(string_utilities_module) return (str:gsub(m_strutils.pattern_escape(from), m_strutils.replacement_escape(to))) end local class_to_bare_category_parent = { ["polity"] = "polities", ["subpolity"] = "political divisions", ["settlement"] = "settlements", ["non-admin settlement"] = "settlements", ["capital"] = "capital cities", ["natural feature"] = "natural features", ["man-made structure"] = "man-made structures", ["geographic region"] = "geographic and cultural areas", } local class_is_political_division = { ["polity"] = true, -- strictly false but there are placetypes ambiguous between polity and subpolity ["subpolity"] = true, ["settlement"] = true, ["non-admin settlement"] = false, ["capital"] = true, ["natural feature"] = false, ["man-made structure"] = false, ["geographic region"] = false, ["generic place"] = false, } local capital_cat_to_placetype = {} for placetype, capital_cat in pairs(m_placetypes.placetype_to_capital_cat) do capital_cat_to_placetype[capital_cat] = placetype end -- Handler for bare categories for all types of capitals. This needs to precede the handler for bare placetype -- categories as some of the types of capitals exist as placetypes as well. insert(handlers, function(label) label = lcfirst(label) local capital_placetype = capital_cat_to_placetype[label] if capital_placetype then local pl_placetype = m_placetypes.pluralize_placetype(capital_placetype) local linkdesc = m_placetypes.get_placetype_display_form(pl_placetype, "top-level") if linkdesc == nil then internal_error("Unrecognized placetype %s when processing label %s", capital_placetype, label) end if linkdesc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = "{{{langname}}} names of [[capital]]s of " .. linkdesc .. ".", parents = {"capital cities"}, } end end) -- Handler for bare placetype categories. FIXME: Add wpcat= and commonscat= info. Previously we had it for various -- so-called "generic" placetypes, but sometimes the categories were wrong. insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local ptdesc, ptdata = m_placetypes.get_placetype_display_form(canon_label, "top-level", "return full") if ptdesc then local from_category_props = { from_category = true, no_split_qualifiers = true, } local bare_category_parent = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) local bare_category_parent = m_placetypes.get_placetype_prop(pt, "bare_category_parent") if bare_category_parent then return bare_category_parent end local class = m_placetypes.get_placetype_prop(pt, "class") if class then if class_to_bare_category_parent[class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", class, canon_label) end return class_to_bare_category_parent[class] end end, from_category_props) if not bare_category_parent then internal_error("Saw placetype %s without a `class` or `bare_category_parent` setting, either " .. "directly or through a fallback", canon_label) end local addl_bare_category_parents = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "addl_bare_category_parents") end, from_category_props) local bare_category_breadcrumb = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "bare_category_breadcrumb") end, from_category_props) if type(bare_category_parent) == "string" and bare_category_breadcrumb then bare_category_parent = {name = bare_category_parent, sort = bare_category_breadcrumb} end local parents = {bare_category_parent} if addl_bare_category_parents then m_table.extend(parents, addl_bare_category_parents) end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = "{{{langname}}} " .. ptdesc .. ".", breadcrumb = bare_category_breadcrumb, parents = parents, } elseif ptdesc == false then mw.log(("Display form for canon_label %s is false, can't categorize"):format(dump(canon_label))) end end end) local function fetch_primary_placetype(key, spec) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if not placetype then internal_error("No placetype specified or defaulted for key %s, spec %s", key, spec) end return placetype end --[==[ Construct an appropriately linked location based on the full or elliptical placename, preceded by `"the "`` if appropriate. Specifically: Fetch the full and elliptical_placenames. If they are the same, just link to the placename directly. Otherwise, check if the full placename exists; if so link to it. Otherwise, if the elliptical placename exists, link to it but display it as the full placename. Finally, if neither full placename nor elliptical placename exists, fall back to linking to the full placename. That way, we prefer full placenames to elliptical placenames if both or neither exist as Wiktionary entries, but if only one exists, we link to that one rather than have a red link. ]==] local function construct_linked_location(group, key, spec) local full_placename, elliptical_placename = m_locations.key_to_placename(group, key) local linked_placename if elliptical_placename ~= full_placename then local full_placename_title = mw.title.new(full_placename) if full_placename_title and full_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, full_placename) else local elliptical_placename_title = mw.title.new(elliptical_placename) if elliptical_placename_title and elliptical_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, elliptical_placename, full_placename) end end end return linked_placename or m_locations.construct_linked_placename(spec, full_placename) end --[==[ Construct the description of a location, including its container trail either to the end or until we encounter a `no_include_container_in_desc` setting. For example, for the city of [[Birmingham]], the description will read `"[[Birmingham]], a [[city]] in the [[West Midlands]] (which is a [[county]] of [[England]], which is a [[constituent country]] of the [[United Kingdom]], which is a [[country]] in [[Europe]])"`. FIXME: Possibly we should adopt the way city descriptions used to read, which was similar to `"the city of [[Birmingham]], in the county of the [[West Midlands]], in the [[constituent country]] of [[England]], in the [[country]] of the [[United Kingdom]], in [[Europe]]"`. ]==] local function construct_location_desc(group, key, spec) local parts = {} local function ins(txt) insert(parts, txt) end ins(construct_linked_location(group, key, spec)) local iteration = 0 local need_closing_paren = false local containers = {{group = group, key = key, spec = spec}} local container_iterator = m_locations.iterate_containers(group, key, spec) while true do iteration = iteration + 1 local include_container_in_desc = false for _, container in ipairs(containers) do if not container.spec.no_include_container_in_desc then include_container_in_desc = true break end end if not include_container_in_desc then break end local next_containers = container_iterator() if not next_containers then break end local is_former = nil for _, container in ipairs(containers) do local this_is_former = container.spec.is_former_place if is_former == nil then is_former = this_is_former elseif is_former ~= this_is_former then internal_error("When processing container trail of key %s, found a mixture of former and non-former " .. "containers: %s", key, containers) end end if #containers > 1 then local placetypes = {} local prepositions = {} for _, container in ipairs(containers) do local container_type = fetch_primary_placetype(container.key, container.spec) m_table.insertIfNot(placetypes, m_placetypes.pluralize_placetype(container_type)) m_table.insertIfNot(prepositions, m_placetypes.get_placetype_entry_preposition(container_type)) end if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which are ") need_closing_paren = true else ins(", which are ") end if is_former then ins("former ") end ins(m_table.serialCommaJoin(placetypes)) ins(" ") ins(concat(prepositions, "/")) else if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which is ") need_closing_paren = true else ins(", which is ") end local container_type = fetch_primary_placetype(containers[1].key, containers[1].spec) if is_former then ins("a former ") else ins(m_placetypes.get_placetype_article(container_type)) ins(" ") end ins(container_type) ins(" ") ins(m_placetypes.get_placetype_entry_preposition(container_type)) end ins(" ") first_container = false containers = next_containers local container_locations = {} for _, container in ipairs(containers) do insert(container_locations, construct_linked_location(container.group, container.key, container.spec)) end ins(m_table.serialCommaJoin(container_locations)) end if need_closing_paren then ins(")") end return concat(parts) end -- Fetch or construct the description of the location specified by `key`. If the `keydesc` property is specified, -- use it directly but substitute any occurrence of `+++` with the auto-constructed location description, which -- mentions the placename corresponding to the key, its placetype and container, and repeats the description up -- the container trail until either there are no more containers or (more usually) the `no_include_container_in_desc` -- setting is found (which is set on all continents and continent-level regions). 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 val = val or "+++" if val:find("%+%+%+") then val = gsub_literally(val, "+++", construct_location_desc(group, key, spec)) end return val end local function normalize_cat_as(cat_as, div) if type(cat_as) ~= "table" or cat_as.type then cat_as = {cat_as} end local ret_cat_as = {} for _, pt_cat_as in ipairs(cat_as) do if type(pt_cat_as) == "string" then pt_cat_as = {type = pt_cat_as} end insert(ret_cat_as, {type = pt_cat_as.type, prep = pt_cat_as.prep or div.prep or "of"}) end return ret_cat_as end -- Find the specified plural placetype among the divs for a given known location. Return a list of cat_as specs, where -- each spec is of the form {type = "PLURAL_PLACETYPE", prep = "PREP"} indicating the plural placetype to use when -- categorizing and the preposition to follow. local function find_placetype_cat_as(divs, pl_placetype) if divs then if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) == "string" then div = {type = div} end if div.type == pl_placetype then local cat_as = div.cat_as or div.type return normalize_cat_as(cat_as, div) end end end return nil end -- Handler for bare placename categories for known locations in `locations` in [[Module:place/locations]]. insert(handlers, function(label) for _, canon_label in ipairs { label, lcfirst(label) } do local group, spec = m_locations.find_canonical_key(canon_label) if group then -- wp= defaults to true (Wikipedia article matches location's full placename) local wp = spec.wp if wp == nil then wp = true end -- wpcat= defaults to wp= (if Wikipedia article has its own name, Wikipedia category and Commons category -- generally follow) local wpcat = spec.wpcat if wpcat == nil then wpcat = wp end -- commonscat= defaults to wpcat= (if Wikipedia category has its own name, Commons category generally -- follows) local commonscat = spec.commonscat if commonscat == nil then commonscat = wpcat end local parents = {} local bare_label_parents = spec.overriding_bare_label_parents local container_iterator = m_locations.iterate_containers(group, canon_label, spec) local containers = container_iterator() if not bare_label_parents then bare_label_parents = {"+++"} end local full_location_placename, elliptical_location_placename = m_locations.key_to_placename(group, canon_label) local full_container_placename if containers then full_container_placename, _ = m_locations.key_to_placename(containers[1].group, containers[1].key) end local inserted_containers = false for _, parent in ipairs(bare_label_parents) do if parent == "+++" then parent = "PL_PLACETYPE PREP CONTAINER" end if parent:find("CONTAINER") then if not containers then internal_error("Parent category %s needs the container of %s but no containers specified: %s", parent, canon_label, spec) end local location_type = fetch_primary_placetype(canon_label, spec) local pl_location_type = m_placetypes.pluralize_placetype(location_type) for _, container in ipairs(containers) do local per_container_parent = parent local cat_as_list if per_container_parent:find("PL_PLACETYPE") then if spec.bare_category_parent_type then cat_as_list = normalize_cat_as(spec.bare_category_parent_type, spec) else cat_as_list = find_placetype_cat_as(container.spec.divs, pl_location_type) or find_placetype_cat_as(container.spec.addl_divs, pl_location_type) end end if not cat_as_list then local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(location_type, "from category") if not canon_placetype or not (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then internal_error("Unable to locate plural location type %s among the divs or addl_divs " .. "for container key %s spec %s, and the location type is either not in placetype_data or " .. "not identified as a generic placetype", pl_location_type, container.key, container.spec) end cat_as_list = {{type = pl_location_type, prep = m_placetypes.get_placetype_entry_preposition(location_type)}} end local prefixed_key = m_placetypes.get_prefixed_key(container.key, container.spec) per_container_parent = gsub_literally(per_container_parent, "CONTAINER", prefixed_key) for _, cat_as in ipairs(cat_as_list) do local per_container_per_placetype_parent = per_container_parent per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PL_PLACETYPE", cat_as.type) per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PREP", cat_as.prep) m_table.insertIfNot(parents, per_container_per_placetype_parent) end end inserted_containers = true else m_table.insertIfNot(parents, parent) end end if not inserted_containers and containers then -- If we didn't insert the containers above in some form, insert them now as bare categories. Note that -- this may be different categories from the container categories inserted above. for _, container in ipairs(containers) do m_table.insertIfNot(parents, container.key) end end if spec.addl_parents then for _, parent in ipairs(spec.addl_parents) do m_table.insertIfNot(parents, parent) end end local function format_boxval(val, specname) if val == true then val = "%l" end if type(val) == "string" then val = gsub_literally(val, "%l", full_location_placename) val = gsub_literally(val, "%e", elliptical_location_placename) if val:find("%%c") then if not full_container_placename then internal_error("Wikipedia/Commons spec %s = %s has %%c in it but key %s has no " .. "containers: %s", specname, val, canon_label, spec) end val = gsub_literally(val, "%c", full_container_placename) end end return val end local description = spec.fulldesc or ( "{{{langname}}} terms related to the people, culture, or territory of " .. fetch_or_construct_location_desc(group, canon_label, spec) .. ".") local full_placename, _ = m_locations.key_to_placename(group, canon_label) return { type = "topic", description = description, breadcrumb = full_placename, parents = parents, wp = format_boxval(wp, "wp"), wpcat = format_boxval(wpcat, "wpcat"), commonscat = format_boxval(commonscat, "commonscat"), } end end end) local function find_canonical_key_from_place(place, canon_label) local has_the = false local key if place:find("^ ") then key = place:gsub("^ ", "") has_the = true else key = place end local group, spec = m_locations.find_canonical_key(key) if group then local requires_the = spec.the or false if has_the ~= requires_the then if has_the then mw.log(("Mismatch in category name '%s', has 'the' in the category when it should not"):format( canon_label)) else mw.log(("Mismatch in category name '%s', should have 'the' in the category but does not"): format(canon_label)) end return nil end return group, key, spec end return nil end -- Handler for generic placetypes (those whose categories are added through category generation handlers or through -- explicit category specs in the placetype data) for known locations in [[Module:place/locations]]. All such -- placetypes have either a `generic_before_non_cities` setting (meaning they can occur before non-city locations) or -- `generic_before_cities` setting (meaning they can occur before cities), or both. Examples of such categories are -- "cities in the Bahamas" or "rivers in Western Australia, Australia", or (for city locations) -- "neighbourhoods of Hong Kong" or "places in Melbourne". insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") end if placetype then local normalized_placetype = placetype == "neighbourhoods" and "neighborhoods" or placetype local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(normalized_placetype, "from category") if canon_placetype and (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then -- Check whether the location uses British spelling, but also check all containers, because -- it's too hard to keep in sync the `british_spelling` setting for locations at all different -- levels (e.g. cities of various countries, first and second level administrative division, etc.), -- so we just set it at top level on the country. local uses_british_spelling = spec.british_spelling if uses_british_spelling == nil then for containers in m_locations.iterate_containers(group, key, spec) do local must_outer_break = false for _, container in ipairs(containers) 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 local allow_cat = true if placetype == "neighborhoods" and uses_british_spelling or placetype == "neighbourhoods" and not uses_british_spelling then mw.log(("Mismatch in spelling of placetype '%s' in category '%s', should be '%s'"):format( placetype, canon_label, uses_british_spelling and "neighbourhoods" or "neighborhoods")) allow_cat = false end if spec.is_former_place and placetype ~= "places" then allow_cat = false end local expected_prep if spec.is_city then expected_prep = ptdata.generic_before_cities else expected_prep = ptdata.generic_before_non_cities end if not expected_prep then allow_cat = false end if allow_cat then if expected_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, expected_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) desc = "{{{langname}}} " .. desc .. "." local parents = {} insert(parents, key) if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = normalized_placetype, sort = key}) if spec.placetype == "country" or m_table.contains(spec.placetype, "country") then local category_class = m_placetypes.get_equiv_placetype_prop(normalized_placetype, function(pt) return m_placetypes.get_placetype_prop(pt, "class") end, { from_category = true, no_split_qualifiers = true, }) if not category_class then internal_error("Saw placetype %s that is either unknown or has no `class` " .. "setting in `placetype_data`", normalized_placetype) end if class_is_political_division[category_class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", category_class, normalized_placetype) end if class_is_political_division[category_class] then insert(parents, "political divisions of specific countries") end end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do local container_prep if container.spec.is_city then container_prep = ptdata.generic_before_cities else container_prep = ptdata.generic_before_non_cities end if not container_prep then internal_error("For container key %s spec %s defines is_city = %s but " .. "there is no corresponding `generic_before_*` setting in the " .. "placedata for placetype %s", container.key, container.spec, container.spec.is_city, placetype) end insert(parents, { name = placetype .. " " .. container_prep .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = normalized_placetype, sort = key}) end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) -- Handler for "state capitals of the United States", "provincial capitals of Canada", etc. This must precede the next -- handler for specific political and misc (non-political) divisions of polities and subpolities, such as -- "provinces of the Philippines", because "departmental capitals" is listed in cat_as for French prefectures and so -- will trigger an error if that handler runs before this one. insert(handlers, function(label) label = lcfirst(label) local capital_cat, place = label:match("^([a-z%- ]- capitals) of (.*)$") -- Make sure we recognize the type of capital. if place and capital_cat_to_placetype[capital_cat] then local placetype = capital_cat_to_placetype[capital_cat] local pl_placetype = m_placetypes.pluralize_placetype(placetype) -- Locate the container, fetch its known political divisions, and make sure the placetype corresponding to the -- type of capital is among the list. local group, key, spec = find_canonical_key_from_place(place, canon_label) if group and (spec.divs or spec.addl_divs) then local saw_match = false local variant_matches = {} 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 -- HACK. Currently if we don't find a match for the placetype, we map e.g. 'autonomous region' -- -> 'regional capitals' and 'union territory' -> 'territorial capitals'. When encountering a -- political division like 'autonomous region' or 'union territory', chop off everything up -- through a space to make things match. To make this clearer, we record all such -- "variant match" cases, and down below we insert a note into the category text indicating that -- such "variant matches" are included among the category. if pl_placetype == div.type or pl_placetype == div.type:gsub("^.* ", "") then saw_match = true if pl_placetype ~= div.type then insert(variant_matches, div.type) end end end end if saw_match then -- Everything checks out, construct the category description. local placetype_desc = m_placetypes.get_placetype_display_form(pl_placetype, placetype.is_city and "city" or "noncity") if placetype_desc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end if not placetype_desc then internal_error("Unrecognized plural placetype %s, generated as the plural of %s, which " .. "was found as the placetype of capital placetype %s in label %s", pl_placetype, placetype, capital_cat, label) end local variant_match_text = "" if variant_matches[1] then local real_variant_match_descs = {} for i, variant_match in ipairs(variant_matches) do local variant_match_desc = m_placetypes.get_placetype_display_form(variant_match, placetype.is_city and "city" or "noncity") if variant_match_desc == nil then internal_error("Unrecognized variant match plural placetype %s, coming from " .. "place key %s, data %s in label %s", variant_match, key, spec, label) end if variant_match_desc then -- skip those for which the description is `false`, like `ABBREVIATION_OF states` -- in the United States divs. insert(real_variant_match_descs, variant_match_desc) end end if real_variant_match_descs[1] then variant_match_text = " (bao gồm " .. m_table.serialCommaJoin(real_variant_match_descs) .. ")" end end local desc = "Tên gọi {{{langname}}} về thủ đô của " .. placetype_desc .. variant_match_text .. " trong " .. fetch_or_construct_location_desc(group, key, spec) .. "." local full_placename, _ = m_locations.key_to_placename(group, key) local parents = {} if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = capital_cat, sort = key}) else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = capital_cat .. " of " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = capital_cat, sort = key}) end end insert(parents, key) return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = desc, breadcrumb = full_placename, parents = parents, } end end end end) local overriding_category_descriptions = { ["autonomous cities of Spain"] = "the [[w:Autonomous communities of Spain#Autonomous_cities|autonomous cities of Spain]]", ["regions of Greece"] = "the regions ([[periphery|peripheries]]) of [[Greece]]", ["regions of North Macedonia"] = "the regions ([[periphery|peripheries]]) of [[North Macedonia]]", ["subprefectures of Japan"] = "[[subprefecture]]s of [[Japan]]ese [[prefecture]]s", } -- Handler for specific political and misc (non-political) divisions of locations (polities, subpolities, cities, etc.), -- such as "provinces of the Philippines", "counties of Wales", "municipalities of Tocantins, Brazil", -- "boroughs of New York City", etc. This does not handle categories for generic placetypes (cities, rivers, etc.) of -- locations, which are handled by different handlers above. insert(handlers, function(label) -- The label comes with an initial capitalization but we have to check both lowercase-initial and capital-initial -- versions of the placetype to handle e.g. [[:Category:en:Indian reserves of Canada]]. for _, canon_label in ipairs { label, lcfirst(label) } do for _, minimal_placetype in ipairs { true, false } do local match_quantifier = minimal_placetype and "-" or "+" -- Some categories have two "of"s in them, and depending on the category, it's correct to do either a greedy -- ([[:Category:en:Abbreviations of states of the United States]], with placetype `abbreviations of states`) -- or non-greedy ([[:Category:en:Provinces of the Democratic Republic of the Congo]], with placetype -- `provinces`) match. We can't know in advance which is correct so we try both possibilities, doing the -- non-greedy one first as it seems more common (there are many locations with "of" in them, but currently -- only `abbreviations of states` occurs with a following location). local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (của) (.*)$") end if placetype then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then local function find_placetype(divs) if divs then 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" 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 if placetype == pt_cat_as.type then local div_parent = pt_cat_as.container_parent_type if div_parent == nil then -- allow false div_parent = div.container_parent_type end if div_parent == nil then div_parent = placetype end return div_parent, pt_cat_as.prep or div.prep or "of" end end end end return nil end local div_parent, div_prep = find_placetype(spec.divs) if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs) end if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs_for_categorization) end if div_parent ~= nil then if div_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, div_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end local desc = overriding_category_descriptions[canon_label] if not desc then desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) end desc = "{{{langname}}} " .. desc .. "." local parents = {} insert(parents, key) if div_parent then -- div_parent may be `false` if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = placetype, sort = " " .. key}) if spec.placetype == "country" or m_table.contains(spec.placetype, "country") then insert(parents, "political divisions of specific countries") end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = div_parent .. " " .. in_of .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = placetype, sort = " " .. key}) end end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) labels["exonyms"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} [[exonym]]s.", parents = {"places"}, } labels["political divisions of specific countries"] = { type = "grouping", description = "{{{langname}}} categories for political divisions of specific countries.", parents = {"places"}, } -- Misc. FIXME: Remove the need for this. labels["nomes of Ancient Egypt"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} names of the [[nome]]s of [[Ancient Egypt]].", breadcrumb = "nomes", parents = {"Ancient Egypt"}, } -- Sui generis place categories (mostly cross-jurisdictional subcontinental/transcontinental regions) -- FIXME: Everything here has been moved from [[Module:category tree/topic/Earth]]. Most should be removed. labels["Atlantic Ocean"] = { type = "related-to", description = "default with the", parents = {"Earth"}, } labels["British Isles"] = { type = "related-to", description = "=the people, culture, or territory of [[Great Britain]], [[Ireland]], and other nearby islands", parents = {"Europe", "islands"}, } labels["European Union"] = { type = "related-to", description = "default with the", parents = {"Europe"}, } labels["Gascony"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Indian subcontinent"] = { type = "related-to", description = "default with the", parents = {"South Asia"}, } labels["Bengal"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Bengal]].", parents = {"Indian subcontinent"}, } labels["Kashmir"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Kashmir]].", parents = {"Indian subcontinent"}, } labels["Kashmir, India"] = { type = "related-to", description = "{{{langname}}} names of places in {{w|Kashmir, India}}.", parents = {"India", "Kashmir"}, } labels["Korea"] = { type = "related-to", description = "=the people, culture, or territory of [[Korea]]", parents = {"Asia"}, } labels["Languedoc"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Lapland"] = { type = "related-to", description = "=[[Lapland]], a region in northernmost Europe", parents = {"Europe", "Finland", "Norway", "Russia", "Sweden"}, } labels["Middle East"] = { type = "related-to", description = "default with the", parents = {"Africa", "Asia"}, } labels["Netherlands Antilles"] = { type = "related-to", description = "=the people, culture, or territory of the [[Netherlands Antilles]]", parents = {"Netherlands", "North America"}, } labels["Overseas France"] = { type = "related-to", description = "={{w|Overseas France}} ({{m|fr||France d'outre-mer}})", parents = {"France"}, } labels["Provence"] = { type = "related-to", description = "default", parents = {"Provence-Alpes-Côte d'Azur, France"}, } labels["Polish People's Republic"] = { type = "related-to", description = "default", parents = {"Poland"}, } labels["South Asia"] = { type = "related-to", description = "default", parents = {"Eurasia", "Asia"}, } return {LABELS = labels, HANDLERS = handlers} e363rk58h56jef00jbzjgahh7wh3kti 2349923 2349920 2026-05-03T13:48:18Z Hiyuune 50834 2349923 Scribunto text/plain local labels = {} local handlers = {} local m_table = require("Module:table") local en_utilities_module = "Module:en-utilities" local string_utilities_module = "Module:string utilities" local m_locations = require("Module:place/locations") local m_placetypes = require("Module:place/placetypes") local placetype_data = m_placetypes.placetype_data local internal_error = m_locations.internal_error local dump = mw.dumpObject local insert = table.insert local concat = table.concat local is_callable = require("Module:fun").is_callable --[==[ intro: This module is part of the category tree code and contains code to generate the descriptions of place-related categories such as [[Category:de:Hokkaido Prefecture, Japan]], [[Category:es:Cities in France]], [[Category:pt:Municipalities of Tocantins, Brazil]], etc.). Note that this module doesn't actually create the categories; that must be done separately, with the text "{{tl|auto cat}}" as the definition of the category. (This process should automatically happen periodically for non-empty categories, because they will appear in [[Special:WantedCategories]] and a bot will periodically examine that list and create any needed category.) There are two ways that category descriptions are specified: (1) by manually adding an entry to the `labels` table, keyed by the label (the category minus the language code) with a value consisting of a Lua table specifying the description text and the category's parents; (2) through handlers (pieces of Lua code) added to the `handlers` list, which recognize labels of a specific type (e.g. `Cities in France`) and generate the appropriate specification for that label on-the-fly. See [[Module:place]] for an introduction to the terminology associated with places along with a list of all the relevant modules, along with for more specific information on types of toponyms and placetypes and how their categorization works. ]==] local function lcfirst(label) return mw.getContentLanguage():lcfirst(label) end local function gsub_literally(str, from, to) local m_strutils = require(string_utilities_module) return (str:gsub(m_strutils.pattern_escape(from), m_strutils.replacement_escape(to))) end local class_to_bare_category_parent = { ["polity"] = "polities", ["subpolity"] = "political divisions", ["settlement"] = "settlements", ["non-admin settlement"] = "settlements", ["capital"] = "capital cities", ["natural feature"] = "natural features", ["man-made structure"] = "man-made structures", ["geographic region"] = "geographic and cultural areas", } local class_is_political_division = { ["polity"] = true, -- strictly false but there are placetypes ambiguous between polity and subpolity ["subpolity"] = true, ["settlement"] = true, ["non-admin settlement"] = false, ["capital"] = true, ["natural feature"] = false, ["man-made structure"] = false, ["geographic region"] = false, ["generic place"] = false, } local capital_cat_to_placetype = {} for placetype, capital_cat in pairs(m_placetypes.placetype_to_capital_cat) do capital_cat_to_placetype[capital_cat] = placetype end -- Handler for bare categories for all types of capitals. This needs to precede the handler for bare placetype -- categories as some of the types of capitals exist as placetypes as well. insert(handlers, function(label) label = lcfirst(label) local capital_placetype = capital_cat_to_placetype[label] if capital_placetype then local pl_placetype = m_placetypes.pluralize_placetype(capital_placetype) local linkdesc = m_placetypes.get_placetype_display_form(pl_placetype, "top-level") if linkdesc == nil then internal_error("Unrecognized placetype %s when processing label %s", capital_placetype, label) end if linkdesc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = "{{{langname}}} names of [[capital]]s of " .. linkdesc .. ".", parents = {"capital cities"}, } end end) -- Handler for bare placetype categories. FIXME: Add wpcat= and commonscat= info. Previously we had it for various -- so-called "generic" placetypes, but sometimes the categories were wrong. insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local ptdesc, ptdata = m_placetypes.get_placetype_display_form(canon_label, "top-level", "return full") if ptdesc then local from_category_props = { from_category = true, no_split_qualifiers = true, } local bare_category_parent = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) local bare_category_parent = m_placetypes.get_placetype_prop(pt, "bare_category_parent") if bare_category_parent then return bare_category_parent end local class = m_placetypes.get_placetype_prop(pt, "class") if class then if class_to_bare_category_parent[class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", class, canon_label) end return class_to_bare_category_parent[class] end end, from_category_props) if not bare_category_parent then internal_error("Saw placetype %s without a `class` or `bare_category_parent` setting, either " .. "directly or through a fallback", canon_label) end local addl_bare_category_parents = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "addl_bare_category_parents") end, from_category_props) local bare_category_breadcrumb = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "bare_category_breadcrumb") end, from_category_props) if type(bare_category_parent) == "string" and bare_category_breadcrumb then bare_category_parent = {name = bare_category_parent, sort = bare_category_breadcrumb} end local parents = {bare_category_parent} if addl_bare_category_parents then m_table.extend(parents, addl_bare_category_parents) end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = "{{{langname}}} " .. ptdesc .. ".", breadcrumb = bare_category_breadcrumb, parents = parents, } elseif ptdesc == false then mw.log(("Display form for canon_label %s is false, can't categorize"):format(dump(canon_label))) end end end) local function fetch_primary_placetype(key, spec) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if not placetype then internal_error("No placetype specified or defaulted for key %s, spec %s", key, spec) end return placetype end --[==[ Construct an appropriately linked location based on the full or elliptical placename, preceded by `"the "`` if appropriate. Specifically: Fetch the full and elliptical_placenames. If they are the same, just link to the placename directly. Otherwise, check if the full placename exists; if so link to it. Otherwise, if the elliptical placename exists, link to it but display it as the full placename. Finally, if neither full placename nor elliptical placename exists, fall back to linking to the full placename. That way, we prefer full placenames to elliptical placenames if both or neither exist as Wiktionary entries, but if only one exists, we link to that one rather than have a red link. ]==] local function construct_linked_location(group, key, spec) local full_placename, elliptical_placename = m_locations.key_to_placename(group, key) local linked_placename if elliptical_placename ~= full_placename then local full_placename_title = mw.title.new(full_placename) if full_placename_title and full_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, full_placename) else local elliptical_placename_title = mw.title.new(elliptical_placename) if elliptical_placename_title and elliptical_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, elliptical_placename, full_placename) end end end return linked_placename or m_locations.construct_linked_placename(spec, full_placename) end --[==[ Construct the description of a location, including its container trail either to the end or until we encounter a `no_include_container_in_desc` setting. For example, for the city of [[Birmingham]], the description will read `"[[Birmingham]], a [[city]] in the [[West Midlands]] (which is a [[county]] of [[England]], which is a [[constituent country]] of the [[United Kingdom]], which is a [[country]] in [[Europe]])"`. FIXME: Possibly we should adopt the way city descriptions used to read, which was similar to `"the city of [[Birmingham]], in the county of the [[West Midlands]], in the [[constituent country]] of [[England]], in the [[country]] of the [[United Kingdom]], in [[Europe]]"`. ]==] local function construct_location_desc(group, key, spec) local parts = {} local function ins(txt) insert(parts, txt) end ins(construct_linked_location(group, key, spec)) local iteration = 0 local need_closing_paren = false local containers = {{group = group, key = key, spec = spec}} local container_iterator = m_locations.iterate_containers(group, key, spec) while true do iteration = iteration + 1 local include_container_in_desc = false for _, container in ipairs(containers) do if not container.spec.no_include_container_in_desc then include_container_in_desc = true break end end if not include_container_in_desc then break end local next_containers = container_iterator() if not next_containers then break end local is_former = nil for _, container in ipairs(containers) do local this_is_former = container.spec.is_former_place if is_former == nil then is_former = this_is_former elseif is_former ~= this_is_former then internal_error("When processing container trail of key %s, found a mixture of former and non-former " .. "containers: %s", key, containers) end end if #containers > 1 then local placetypes = {} local prepositions = {} for _, container in ipairs(containers) do local container_type = fetch_primary_placetype(container.key, container.spec) m_table.insertIfNot(placetypes, m_placetypes.pluralize_placetype(container_type)) m_table.insertIfNot(prepositions, m_placetypes.get_placetype_entry_preposition(container_type)) end if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which are ") need_closing_paren = true else ins(", which are ") end if is_former then ins("former ") end ins(m_table.serialCommaJoin(placetypes)) ins(" ") ins(concat(prepositions, "/")) else if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which is ") need_closing_paren = true else ins(", which is ") end local container_type = fetch_primary_placetype(containers[1].key, containers[1].spec) if is_former then ins("a former ") else ins(m_placetypes.get_placetype_article(container_type)) ins(" ") end ins(container_type) ins(" ") ins(m_placetypes.get_placetype_entry_preposition(container_type)) end ins(" ") first_container = false containers = next_containers local container_locations = {} for _, container in ipairs(containers) do insert(container_locations, construct_linked_location(container.group, container.key, container.spec)) end ins(m_table.serialCommaJoin(container_locations)) end if need_closing_paren then ins(")") end return concat(parts) end -- Fetch or construct the description of the location specified by `key`. If the `keydesc` property is specified, -- use it directly but substitute any occurrence of `+++` with the auto-constructed location description, which -- mentions the placename corresponding to the key, its placetype and container, and repeats the description up -- the container trail until either there are no more containers or (more usually) the `no_include_container_in_desc` -- setting is found (which is set on all continents and continent-level regions). 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 val = val or "+++" if val:find("%+%+%+") then val = gsub_literally(val, "+++", construct_location_desc(group, key, spec)) end return val end local function normalize_cat_as(cat_as, div) if type(cat_as) ~= "table" or cat_as.type then cat_as = {cat_as} end local ret_cat_as = {} for _, pt_cat_as in ipairs(cat_as) do if type(pt_cat_as) == "string" then pt_cat_as = {type = pt_cat_as} end insert(ret_cat_as, {type = pt_cat_as.type, prep = pt_cat_as.prep or div.prep or "của"}) end return ret_cat_as end -- Find the specified plural placetype among the divs for a given known location. Return a list of cat_as specs, where -- each spec is of the form {type = "PLURAL_PLACETYPE", prep = "PREP"} indicating the plural placetype to use when -- categorizing and the preposition to follow. local function find_placetype_cat_as(divs, pl_placetype) if divs then if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) == "string" then div = {type = div} end if div.type == pl_placetype then local cat_as = div.cat_as or div.type return normalize_cat_as(cat_as, div) end end end return nil end -- Handler for bare placename categories for known locations in `locations` in [[Module:place/locations]]. insert(handlers, function(label) for _, canon_label in ipairs { label, lcfirst(label) } do local group, spec = m_locations.find_canonical_key(canon_label) if group then -- wp= defaults to true (Wikipedia article matches location's full placename) local wp = spec.wp if wp == nil then wp = true end -- wpcat= defaults to wp= (if Wikipedia article has its own name, Wikipedia category and Commons category -- generally follow) local wpcat = spec.wpcat if wpcat == nil then wpcat = wp end -- commonscat= defaults to wpcat= (if Wikipedia category has its own name, Commons category generally -- follows) local commonscat = spec.commonscat if commonscat == nil then commonscat = wpcat end local parents = {} local bare_label_parents = spec.overriding_bare_label_parents local container_iterator = m_locations.iterate_containers(group, canon_label, spec) local containers = container_iterator() if not bare_label_parents then bare_label_parents = {"+++"} end local full_location_placename, elliptical_location_placename = m_locations.key_to_placename(group, canon_label) local full_container_placename if containers then full_container_placename, _ = m_locations.key_to_placename(containers[1].group, containers[1].key) end local inserted_containers = false for _, parent in ipairs(bare_label_parents) do if parent == "+++" then parent = "PL_PLACETYPE PREP CONTAINER" end if parent:find("CONTAINER") then if not containers then internal_error("Parent category %s needs the container of %s but no containers specified: %s", parent, canon_label, spec) end local location_type = fetch_primary_placetype(canon_label, spec) local pl_location_type = m_placetypes.pluralize_placetype(location_type) for _, container in ipairs(containers) do local per_container_parent = parent local cat_as_list if per_container_parent:find("PL_PLACETYPE") then if spec.bare_category_parent_type then cat_as_list = normalize_cat_as(spec.bare_category_parent_type, spec) else cat_as_list = find_placetype_cat_as(container.spec.divs, pl_location_type) or find_placetype_cat_as(container.spec.addl_divs, pl_location_type) end end if not cat_as_list then local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(location_type, "from category") if not canon_placetype or not (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then internal_error("Unable to locate plural location type %s among the divs or addl_divs " .. "for container key %s spec %s, and the location type is either not in placetype_data or " .. "not identified as a generic placetype", pl_location_type, container.key, container.spec) end cat_as_list = {{type = pl_location_type, prep = m_placetypes.get_placetype_entry_preposition(location_type)}} end local prefixed_key = m_placetypes.get_prefixed_key(container.key, container.spec) per_container_parent = gsub_literally(per_container_parent, "CONTAINER", prefixed_key) for _, cat_as in ipairs(cat_as_list) do local per_container_per_placetype_parent = per_container_parent per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PL_PLACETYPE", cat_as.type) per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PREP", cat_as.prep) m_table.insertIfNot(parents, per_container_per_placetype_parent) end end inserted_containers = true else m_table.insertIfNot(parents, parent) end end if not inserted_containers and containers then -- If we didn't insert the containers above in some form, insert them now as bare categories. Note that -- this may be different categories from the container categories inserted above. for _, container in ipairs(containers) do m_table.insertIfNot(parents, container.key) end end if spec.addl_parents then for _, parent in ipairs(spec.addl_parents) do m_table.insertIfNot(parents, parent) end end local function format_boxval(val, specname) if val == true then val = "%l" end if type(val) == "string" then val = gsub_literally(val, "%l", full_location_placename) val = gsub_literally(val, "%e", elliptical_location_placename) if val:find("%%c") then if not full_container_placename then internal_error("Wikipedia/Commons spec %s = %s has %%c in it but key %s has no " .. "containers: %s", specname, val, canon_label, spec) end val = gsub_literally(val, "%c", full_container_placename) end end return val end local description = spec.fulldesc or ( "{{{langname}}} terms related to the people, culture, or territory of " .. fetch_or_construct_location_desc(group, canon_label, spec) .. ".") local full_placename, _ = m_locations.key_to_placename(group, canon_label) return { type = "chủ đề thuộc nhóm phân loại", description = description, breadcrumb = full_placename, parents = parents, wp = format_boxval(wp, "wp"), wpcat = format_boxval(wpcat, "wpcat"), commonscat = format_boxval(commonscat, "commonscat"), } end end end) local function find_canonical_key_from_place(place, canon_label) local has_the = false local key if place:find("^ ") then key = place:gsub("^ ", "") has_the = true else key = place end local group, spec = m_locations.find_canonical_key(key) if group then local requires_the = spec.the or false if has_the ~= requires_the then if has_the then mw.log(("Mismatch in category name '%s', has 'the' in the category when it should not"):format( canon_label)) else mw.log(("Mismatch in category name '%s', should have 'the' in the category but does not"): format(canon_label)) end return nil end return group, key, spec end return nil end -- Handler for generic placetypes (those whose categories are added through category generation handlers or through -- explicit category specs in the placetype data) for known locations in [[Module:place/locations]]. All such -- placetypes have either a `generic_before_non_cities` setting (meaning they can occur before non-city locations) or -- `generic_before_cities` setting (meaning they can occur before cities), or both. Examples of such categories are -- "cities in the Bahamas" or "rivers in Western Australia, Australia", or (for city locations) -- "neighbourhoods of Hong Kong" or "places in Melbourne". insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") end if placetype then local normalized_placetype = placetype == "neighbourhoods" and "neighborhoods" or placetype local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(normalized_placetype, "from category") if canon_placetype and (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then -- Check whether the location uses British spelling, but also check all containers, because -- it's too hard to keep in sync the `british_spelling` setting for locations at all different -- levels (e.g. cities of various countries, first and second level administrative division, etc.), -- so we just set it at top level on the country. local uses_british_spelling = spec.british_spelling if uses_british_spelling == nil then for containers in m_locations.iterate_containers(group, key, spec) do local must_outer_break = false for _, container in ipairs(containers) 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 local allow_cat = true if placetype == "neighborhoods" and uses_british_spelling or placetype == "neighbourhoods" and not uses_british_spelling then mw.log(("Mismatch in spelling of placetype '%s' in category '%s', should be '%s'"):format( placetype, canon_label, uses_british_spelling and "neighbourhoods" or "neighborhoods")) allow_cat = false end if spec.is_former_place and placetype ~= "places" then allow_cat = false end local expected_prep if spec.is_city then expected_prep = ptdata.generic_before_cities else expected_prep = ptdata.generic_before_non_cities end if not expected_prep then allow_cat = false end if allow_cat then if expected_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, expected_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) desc = "{{{langname}}} " .. desc .. "." local parents = {} insert(parents, key) if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = normalized_placetype, sort = key}) if spec.placetype == "country" or m_table.contains(spec.placetype, "country") then local category_class = m_placetypes.get_equiv_placetype_prop(normalized_placetype, function(pt) return m_placetypes.get_placetype_prop(pt, "class") end, { from_category = true, no_split_qualifiers = true, }) if not category_class then internal_error("Saw placetype %s that is either unknown or has no `class` " .. "setting in `placetype_data`", normalized_placetype) end if class_is_political_division[category_class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", category_class, normalized_placetype) end if class_is_political_division[category_class] then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do local container_prep if container.spec.is_city then container_prep = ptdata.generic_before_cities else container_prep = ptdata.generic_before_non_cities end if not container_prep then internal_error("For container key %s spec %s defines is_city = %s but " .. "there is no corresponding `generic_before_*` setting in the " .. "placedata for placetype %s", container.key, container.spec, container.spec.is_city, placetype) end insert(parents, { name = placetype .. " " .. container_prep .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = normalized_placetype, sort = key}) end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) -- Handler for "state capitals of the United States", "provincial capitals of Canada", etc. This must precede the next -- handler for specific political and misc (non-political) divisions of polities and subpolities, such as -- "provinces of the Philippines", because "departmental capitals" is listed in cat_as for French prefectures and so -- will trigger an error if that handler runs before this one. insert(handlers, function(label) label = lcfirst(label) local capital_cat, place = label:match("^([a-z%- ]- capitals) of (.*)$") -- Make sure we recognize the type of capital. if place and capital_cat_to_placetype[capital_cat] then local placetype = capital_cat_to_placetype[capital_cat] local pl_placetype = m_placetypes.pluralize_placetype(placetype) -- Locate the container, fetch its known political divisions, and make sure the placetype corresponding to the -- type of capital is among the list. local group, key, spec = find_canonical_key_from_place(place, canon_label) if group and (spec.divs or spec.addl_divs) then local saw_match = false local variant_matches = {} 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 -- HACK. Currently if we don't find a match for the placetype, we map e.g. 'autonomous region' -- -> 'regional capitals' and 'union territory' -> 'territorial capitals'. When encountering a -- political division like 'autonomous region' or 'union territory', chop off everything up -- through a space to make things match. To make this clearer, we record all such -- "variant match" cases, and down below we insert a note into the category text indicating that -- such "variant matches" are included among the category. if pl_placetype == div.type or pl_placetype == div.type:gsub("^.* ", "") then saw_match = true if pl_placetype ~= div.type then insert(variant_matches, div.type) end end end end if saw_match then -- Everything checks out, construct the category description. local placetype_desc = m_placetypes.get_placetype_display_form(pl_placetype, placetype.is_city and "city" or "noncity") if placetype_desc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end if not placetype_desc then internal_error("Unrecognized plural placetype %s, generated as the plural of %s, which " .. "was found as the placetype of capital placetype %s in label %s", pl_placetype, placetype, capital_cat, label) end local variant_match_text = "" if variant_matches[1] then local real_variant_match_descs = {} for i, variant_match in ipairs(variant_matches) do local variant_match_desc = m_placetypes.get_placetype_display_form(variant_match, placetype.is_city and "city" or "noncity") if variant_match_desc == nil then internal_error("Unrecognized variant match plural placetype %s, coming from " .. "place key %s, data %s in label %s", variant_match, key, spec, label) end if variant_match_desc then -- skip those for which the description is `false`, like `ABBREVIATION_OF states` -- in the United States divs. insert(real_variant_match_descs, variant_match_desc) end end if real_variant_match_descs[1] then variant_match_text = " (bao gồm " .. m_table.serialCommaJoin(real_variant_match_descs) .. ")" end end local desc = "Tên gọi {{{langname}}} về thủ đô của " .. placetype_desc .. variant_match_text .. " trong " .. fetch_or_construct_location_desc(group, key, spec) .. "." local full_placename, _ = m_locations.key_to_placename(group, key) local parents = {} if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = capital_cat, sort = key}) else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = capital_cat .. " của " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = capital_cat, sort = key}) end end insert(parents, key) return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = desc, breadcrumb = full_placename, parents = parents, } end end end end) local overriding_category_descriptions = { ["autonomous cities of Spain"] = "the [[w:Autonomous communities of Spain#Autonomous_cities|autonomous cities of Spain]]", ["regions of Greece"] = "the regions ([[periphery|peripheries]]) of [[Greece]]", ["regions of North Macedonia"] = "the regions ([[periphery|peripheries]]) of [[North Macedonia]]", ["subprefectures of Japan"] = "[[subprefecture]]s of [[Japan]]ese [[prefecture]]s", } -- Handler for specific political and misc (non-political) divisions of locations (polities, subpolities, cities, etc.), -- such as "provinces of the Philippines", "counties of Wales", "municipalities of Tocantins, Brazil", -- "boroughs of New York City", etc. This does not handle categories for generic placetypes (cities, rivers, etc.) of -- locations, which are handled by different handlers above. insert(handlers, function(label) -- The label comes with an initial capitalization but we have to check both lowercase-initial and capital-initial -- versions of the placetype to handle e.g. [[:Category:en:Indian reserves of Canada]]. for _, canon_label in ipairs { label, lcfirst(label) } do for _, minimal_placetype in ipairs { true, false } do local match_quantifier = minimal_placetype and "-" or "+" -- Some categories have two "of"s in them, and depending on the category, it's correct to do either a greedy -- ([[:Category:en:Abbreviations of states of the United States]], with placetype `abbreviations of states`) -- or non-greedy ([[:Category:en:Provinces of the Democratic Republic of the Congo]], with placetype -- `provinces`) match. We can't know in advance which is correct so we try both possibilities, doing the -- non-greedy one first as it seems more common (there are many locations with "of" in them, but currently -- only `abbreviations of states` occurs with a following location). local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (ở) (.*)$") end if placetype then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then local function find_placetype(divs) if divs then 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" 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 if placetype == pt_cat_as.type then local div_parent = pt_cat_as.container_parent_type if div_parent == nil then -- allow false div_parent = div.container_parent_type end if div_parent == nil then div_parent = placetype end return div_parent, pt_cat_as.prep or div.prep or "của" end end end end return nil end local div_parent, div_prep = find_placetype(spec.divs) if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs) end if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs_for_categorization) end if div_parent ~= nil then if div_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, div_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end local desc = overriding_category_descriptions[canon_label] if not desc then desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) end desc = desc .. " {{{langname}}}." local parents = {} insert(parents, key) if div_parent then -- div_parent may be `false` if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = placetype, sort = " " .. key}) if spec.placetype == "country" or m_table.contains(spec.placetype, "country") then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = div_parent .. " " .. in_of .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = placetype, sort = " " .. key}) end end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) labels["ngoại danh"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} [[exonym]]s.", parents = {"địa danh"}, } labels["đơn vị hành chính theo quốc gia cụ thể"] = { type = "chủ đề phân nhóm", description = "{{{langname}}} categories for political divisions of specific countries.", parents = {"địa danh"}, } -- Misc. FIXME: Remove the need for this. labels["nomes of Ancient Egypt"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} names of the [[nome]]s of [[Ancient Egypt]].", breadcrumb = "nomes", parents = {"Ancient Egypt"}, } -- Sui generis place categories (mostly cross-jurisdictional subcontinental/transcontinental regions) -- FIXME: Everything here has been moved from [[Module:category tree/topic/Earth]]. Most should be removed. labels["Atlantic Ocean"] = { type = "related-to", description = "default with the", parents = {"Earth"}, } labels["British Isles"] = { type = "related-to", description = "=the people, culture, or territory of [[Great Britain]], [[Ireland]], and other nearby islands", parents = {"Europe", "islands"}, } labels["European Union"] = { type = "related-to", description = "default with the", parents = {"Europe"}, } labels["Gascony"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Indian subcontinent"] = { type = "related-to", description = "default with the", parents = {"South Asia"}, } labels["Bengal"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Bengal]].", parents = {"Indian subcontinent"}, } labels["Kashmir"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Kashmir]].", parents = {"Indian subcontinent"}, } labels["Kashmir, India"] = { type = "related-to", description = "{{{langname}}} names of places in {{w|Kashmir, India}}.", parents = {"India", "Kashmir"}, } labels["Korea"] = { type = "related-to", description = "=the people, culture, or territory of [[Korea]]", parents = {"Asia"}, } labels["Languedoc"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Lapland"] = { type = "related-to", description = "=[[Lapland]], a region in northernmost Europe", parents = {"Europe", "Finland", "Norway", "Russia", "Sweden"}, } labels["Middle East"] = { type = "related-to", description = "default with the", parents = {"Africa", "Asia"}, } labels["Netherlands Antilles"] = { type = "related-to", description = "=the people, culture, or territory of the [[Netherlands Antilles]]", parents = {"Netherlands", "North America"}, } labels["Overseas France"] = { type = "related-to", description = "={{w|Overseas France}} ({{m|fr||France d'outre-mer}})", parents = {"France"}, } labels["Provence"] = { type = "related-to", description = "default", parents = {"Provence-Alpes-Côte d'Azur, France"}, } labels["Polish People's Republic"] = { type = "related-to", description = "default", parents = {"Poland"}, } labels["South Asia"] = { type = "related-to", description = "default", parents = {"Eurasia", "Asia"}, } return {LABELS = labels, HANDLERS = handlers} g7vxxpgx26ivzsiub700uzfwk1o1csn 2349929 2349923 2026-05-03T13:54:24Z Hiyuune 50834 2349929 Scribunto text/plain local labels = {} local handlers = {} local m_table = require("Module:table") local en_utilities_module = "Module:en-utilities" local string_utilities_module = "Module:string utilities" local m_locations = require("Module:place/locations") local m_placetypes = require("Module:place/placetypes") local placetype_data = m_placetypes.placetype_data local internal_error = m_locations.internal_error local dump = mw.dumpObject local insert = table.insert local concat = table.concat local is_callable = require("Module:fun").is_callable --[==[ intro: This module is part of the category tree code and contains code to generate the descriptions of place-related categories such as [[Category:de:Hokkaido Prefecture, Japan]], [[Category:es:Cities in France]], [[Category:pt:Municipalities of Tocantins, Brazil]], etc.). Note that this module doesn't actually create the categories; that must be done separately, with the text "{{tl|auto cat}}" as the definition of the category. (This process should automatically happen periodically for non-empty categories, because they will appear in [[Special:WantedCategories]] and a bot will periodically examine that list and create any needed category.) There are two ways that category descriptions are specified: (1) by manually adding an entry to the `labels` table, keyed by the label (the category minus the language code) with a value consisting of a Lua table specifying the description text and the category's parents; (2) through handlers (pieces of Lua code) added to the `handlers` list, which recognize labels of a specific type (e.g. `Cities in France`) and generate the appropriate specification for that label on-the-fly. See [[Module:place]] for an introduction to the terminology associated with places along with a list of all the relevant modules, along with for more specific information on types of toponyms and placetypes and how their categorization works. ]==] local function lcfirst(label) return mw.getContentLanguage():lcfirst(label) end local function gsub_literally(str, from, to) local m_strutils = require(string_utilities_module) return (str:gsub(m_strutils.pattern_escape(from), m_strutils.replacement_escape(to))) end local class_to_bare_category_parent = { ["polity"] = "polities", ["subpolity"] = "political divisions", ["settlement"] = "settlements", ["non-admin settlement"] = "settlements", ["capital"] = "capital cities", ["natural feature"] = "natural features", ["man-made structure"] = "man-made structures", ["geographic region"] = "geographic and cultural areas", } local class_is_political_division = { ["polity"] = true, -- strictly false but there are placetypes ambiguous between polity and subpolity ["subpolity"] = true, ["settlement"] = true, ["non-admin settlement"] = false, ["capital"] = true, ["natural feature"] = false, ["man-made structure"] = false, ["geographic region"] = false, ["generic place"] = false, } local capital_cat_to_placetype = {} for placetype, capital_cat in pairs(m_placetypes.placetype_to_capital_cat) do capital_cat_to_placetype[capital_cat] = placetype end -- Handler for bare categories for all types of capitals. This needs to precede the handler for bare placetype -- categories as some of the types of capitals exist as placetypes as well. insert(handlers, function(label) label = lcfirst(label) local capital_placetype = capital_cat_to_placetype[label] if capital_placetype then local pl_placetype = m_placetypes.pluralize_placetype(capital_placetype) local linkdesc = m_placetypes.get_placetype_display_form(pl_placetype, "top-level") if linkdesc == nil then internal_error("Unrecognized placetype %s when processing label %s", capital_placetype, label) end if linkdesc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = "{{{langname}}} names of [[capital]]s of " .. linkdesc .. ".", parents = {"capital cities"}, } end end) -- Handler for bare placetype categories. FIXME: Add wpcat= and commonscat= info. Previously we had it for various -- so-called "generic" placetypes, but sometimes the categories were wrong. insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local ptdesc, ptdata = m_placetypes.get_placetype_display_form(canon_label, "top-level", "return full") if ptdesc then local from_category_props = { from_category = true, no_split_qualifiers = true, } local bare_category_parent = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) local bare_category_parent = m_placetypes.get_placetype_prop(pt, "bare_category_parent") if bare_category_parent then return bare_category_parent end local class = m_placetypes.get_placetype_prop(pt, "class") if class then if class_to_bare_category_parent[class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", class, canon_label) end return class_to_bare_category_parent[class] end end, from_category_props) if not bare_category_parent then internal_error("Saw placetype %s without a `class` or `bare_category_parent` setting, either " .. "directly or through a fallback", canon_label) end local addl_bare_category_parents = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "addl_bare_category_parents") end, from_category_props) local bare_category_breadcrumb = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "bare_category_breadcrumb") end, from_category_props) if type(bare_category_parent) == "string" and bare_category_breadcrumb then bare_category_parent = {name = bare_category_parent, sort = bare_category_breadcrumb} end local parents = {bare_category_parent} if addl_bare_category_parents then m_table.extend(parents, addl_bare_category_parents) end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = "{{{langname}}} " .. ptdesc .. ".", breadcrumb = bare_category_breadcrumb, parents = parents, } elseif ptdesc == false then mw.log(("Display form for canon_label %s is false, can't categorize"):format(dump(canon_label))) end end end) local function fetch_primary_placetype(key, spec) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if not placetype then internal_error("No placetype specified or defaulted for key %s, spec %s", key, spec) end return placetype end --[==[ Construct an appropriately linked location based on the full or elliptical placename, preceded by `"the "`` if appropriate. Specifically: Fetch the full and elliptical_placenames. If they are the same, just link to the placename directly. Otherwise, check if the full placename exists; if so link to it. Otherwise, if the elliptical placename exists, link to it but display it as the full placename. Finally, if neither full placename nor elliptical placename exists, fall back to linking to the full placename. That way, we prefer full placenames to elliptical placenames if both or neither exist as Wiktionary entries, but if only one exists, we link to that one rather than have a red link. ]==] local function construct_linked_location(group, key, spec) local full_placename, elliptical_placename = m_locations.key_to_placename(group, key) local linked_placename if elliptical_placename ~= full_placename then local full_placename_title = mw.title.new(full_placename) if full_placename_title and full_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, full_placename) else local elliptical_placename_title = mw.title.new(elliptical_placename) if elliptical_placename_title and elliptical_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, elliptical_placename, full_placename) end end end return linked_placename or m_locations.construct_linked_placename(spec, full_placename) end --[==[ Construct the description of a location, including its container trail either to the end or until we encounter a `no_include_container_in_desc` setting. For example, for the city of [[Birmingham]], the description will read `"[[Birmingham]], a [[city]] in the [[West Midlands]] (which is a [[county]] of [[England]], which is a [[constituent country]] of the [[United Kingdom]], which is a [[country]] in [[Europe]])"`. FIXME: Possibly we should adopt the way city descriptions used to read, which was similar to `"the city of [[Birmingham]], in the county of the [[West Midlands]], in the [[constituent country]] of [[England]], in the [[country]] of the [[United Kingdom]], in [[Europe]]"`. ]==] local function construct_location_desc(group, key, spec) local parts = {} local function ins(txt) insert(parts, txt) end ins(construct_linked_location(group, key, spec)) local iteration = 0 local need_closing_paren = false local containers = {{group = group, key = key, spec = spec}} local container_iterator = m_locations.iterate_containers(group, key, spec) while true do iteration = iteration + 1 local include_container_in_desc = false for _, container in ipairs(containers) do if not container.spec.no_include_container_in_desc then include_container_in_desc = true break end end if not include_container_in_desc then break end local next_containers = container_iterator() if not next_containers then break end local is_former = nil for _, container in ipairs(containers) do local this_is_former = container.spec.is_former_place if is_former == nil then is_former = this_is_former elseif is_former ~= this_is_former then internal_error("When processing container trail of key %s, found a mixture of former and non-former " .. "containers: %s", key, containers) end end if #containers > 1 then local placetypes = {} local prepositions = {} for _, container in ipairs(containers) do local container_type = fetch_primary_placetype(container.key, container.spec) m_table.insertIfNot(placetypes, m_placetypes.pluralize_placetype(container_type)) m_table.insertIfNot(prepositions, m_placetypes.get_placetype_entry_preposition(container_type)) end if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which are ") need_closing_paren = true else ins(", which are ") end if is_former then ins("former ") end ins(m_table.serialCommaJoin(placetypes)) ins(" ") ins(concat(prepositions, "/")) else if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which is ") need_closing_paren = true else ins(", which is ") end local container_type = fetch_primary_placetype(containers[1].key, containers[1].spec) if is_former then ins("a former ") else ins(m_placetypes.get_placetype_article(container_type)) ins(" ") end ins(container_type) ins(" ") ins(m_placetypes.get_placetype_entry_preposition(container_type)) end ins(" ") first_container = false containers = next_containers local container_locations = {} for _, container in ipairs(containers) do insert(container_locations, construct_linked_location(container.group, container.key, container.spec)) end ins(m_table.serialCommaJoin(container_locations)) end if need_closing_paren then ins(")") end return concat(parts) end -- Fetch or construct the description of the location specified by `key`. If the `keydesc` property is specified, -- use it directly but substitute any occurrence of `+++` with the auto-constructed location description, which -- mentions the placename corresponding to the key, its placetype and container, and repeats the description up -- the container trail until either there are no more containers or (more usually) the `no_include_container_in_desc` -- setting is found (which is set on all continents and continent-level regions). 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 val = val or "+++" if val:find("%+%+%+") then val = gsub_literally(val, "+++", construct_location_desc(group, key, spec)) end return val end local function normalize_cat_as(cat_as, div) if type(cat_as) ~= "table" or cat_as.type then cat_as = {cat_as} end local ret_cat_as = {} for _, pt_cat_as in ipairs(cat_as) do if type(pt_cat_as) == "string" then pt_cat_as = {type = pt_cat_as} end insert(ret_cat_as, {type = pt_cat_as.type, prep = pt_cat_as.prep or div.prep or "của"}) end return ret_cat_as end -- Find the specified plural placetype among the divs for a given known location. Return a list of cat_as specs, where -- each spec is of the form {type = "PLURAL_PLACETYPE", prep = "PREP"} indicating the plural placetype to use when -- categorizing and the preposition to follow. local function find_placetype_cat_as(divs, pl_placetype) if divs then if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) == "string" then div = {type = div} end if div.type == pl_placetype then local cat_as = div.cat_as or div.type return normalize_cat_as(cat_as, div) end end end return nil end -- Handler for bare placename categories for known locations in `locations` in [[Module:place/locations]]. insert(handlers, function(label) for _, canon_label in ipairs { label, lcfirst(label) } do local group, spec = m_locations.find_canonical_key(canon_label) if group then -- wp= defaults to true (Wikipedia article matches location's full placename) local wp = spec.wp if wp == nil then wp = true end -- wpcat= defaults to wp= (if Wikipedia article has its own name, Wikipedia category and Commons category -- generally follow) local wpcat = spec.wpcat if wpcat == nil then wpcat = wp end -- commonscat= defaults to wpcat= (if Wikipedia category has its own name, Commons category generally -- follows) local commonscat = spec.commonscat if commonscat == nil then commonscat = wpcat end local parents = {} local bare_label_parents = spec.overriding_bare_label_parents local container_iterator = m_locations.iterate_containers(group, canon_label, spec) local containers = container_iterator() if not bare_label_parents then bare_label_parents = {"+++"} end local full_location_placename, elliptical_location_placename = m_locations.key_to_placename(group, canon_label) local full_container_placename if containers then full_container_placename, _ = m_locations.key_to_placename(containers[1].group, containers[1].key) end local inserted_containers = false for _, parent in ipairs(bare_label_parents) do if parent == "+++" then parent = "PL_PLACETYPE PREP CONTAINER" end if parent:find("CONTAINER") then if not containers then internal_error("Parent category %s needs the container of %s but no containers specified: %s", parent, canon_label, spec) end local location_type = fetch_primary_placetype(canon_label, spec) local pl_location_type = m_placetypes.pluralize_placetype(location_type) for _, container in ipairs(containers) do local per_container_parent = parent local cat_as_list if per_container_parent:find("PL_PLACETYPE") then if spec.bare_category_parent_type then cat_as_list = normalize_cat_as(spec.bare_category_parent_type, spec) else cat_as_list = find_placetype_cat_as(container.spec.divs, pl_location_type) or find_placetype_cat_as(container.spec.addl_divs, pl_location_type) end end if not cat_as_list then local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(location_type, "from category") if not canon_placetype or not (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then internal_error("Unable to locate plural location type %s among the divs or addl_divs " .. "for container key %s spec %s, and the location type is either not in placetype_data or " .. "not identified as a generic placetype", pl_location_type, container.key, container.spec) end cat_as_list = {{type = pl_location_type, prep = m_placetypes.get_placetype_entry_preposition(location_type)}} end local prefixed_key = m_placetypes.get_prefixed_key(container.key, container.spec) per_container_parent = gsub_literally(per_container_parent, "CONTAINER", prefixed_key) for _, cat_as in ipairs(cat_as_list) do local per_container_per_placetype_parent = per_container_parent per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PL_PLACETYPE", cat_as.type) per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PREP", cat_as.prep) m_table.insertIfNot(parents, per_container_per_placetype_parent) end end inserted_containers = true else m_table.insertIfNot(parents, parent) end end if not inserted_containers and containers then -- If we didn't insert the containers above in some form, insert them now as bare categories. Note that -- this may be different categories from the container categories inserted above. for _, container in ipairs(containers) do m_table.insertIfNot(parents, container.key) end end if spec.addl_parents then for _, parent in ipairs(spec.addl_parents) do m_table.insertIfNot(parents, parent) end end local function format_boxval(val, specname) if val == true then val = "%l" end if type(val) == "string" then val = gsub_literally(val, "%l", full_location_placename) val = gsub_literally(val, "%e", elliptical_location_placename) if val:find("%%c") then if not full_container_placename then internal_error("Wikipedia/Commons spec %s = %s has %%c in it but key %s has no " .. "containers: %s", specname, val, canon_label, spec) end val = gsub_literally(val, "%c", full_container_placename) end end return val end local description = spec.fulldesc or ( "{{{langname}}} terms related to the people, culture, or territory of " .. fetch_or_construct_location_desc(group, canon_label, spec) .. ".") local full_placename, _ = m_locations.key_to_placename(group, canon_label) return { type = "chủ đề thuộc nhóm phân loại", description = description, breadcrumb = full_placename, parents = parents, wp = format_boxval(wp, "wp"), wpcat = format_boxval(wpcat, "wpcat"), commonscat = format_boxval(commonscat, "commonscat"), } end end end) local function find_canonical_key_from_place(place, canon_label) local has_the = false local key if place:find("^ ") then key = place:gsub("^ ", "") has_the = true else key = place end local group, spec = m_locations.find_canonical_key(key) if group then local requires_the = spec.the or false if has_the ~= requires_the then if has_the then mw.log(("Mismatch in category name '%s', has 'the' in the category when it should not"):format( canon_label)) else mw.log(("Mismatch in category name '%s', should have 'the' in the category but does not"): format(canon_label)) end return nil end return group, key, spec end return nil end -- Handler for generic placetypes (those whose categories are added through category generation handlers or through -- explicit category specs in the placetype data) for known locations in [[Module:place/locations]]. All such -- placetypes have either a `generic_before_non_cities` setting (meaning they can occur before non-city locations) or -- `generic_before_cities` setting (meaning they can occur before cities), or both. Examples of such categories are -- "cities in the Bahamas" or "rivers in Western Australia, Australia", or (for city locations) -- "neighbourhoods of Hong Kong" or "places in Melbourne". insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") end if placetype then local normalized_placetype = placetype == "neighbourhoods" and "neighborhoods" or placetype local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(normalized_placetype, "from category") if canon_placetype and (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then -- Check whether the location uses British spelling, but also check all containers, because -- it's too hard to keep in sync the `british_spelling` setting for locations at all different -- levels (e.g. cities of various countries, first and second level administrative division, etc.), -- so we just set it at top level on the country. local uses_british_spelling = spec.british_spelling if uses_british_spelling == nil then for containers in m_locations.iterate_containers(group, key, spec) do local must_outer_break = false for _, container in ipairs(containers) 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 local allow_cat = true if placetype == "neighborhoods" and uses_british_spelling or placetype == "neighbourhoods" and not uses_british_spelling then mw.log(("Mismatch in spelling of placetype '%s' in category '%s', should be '%s'"):format( placetype, canon_label, uses_british_spelling and "neighbourhoods" or "neighborhoods")) allow_cat = false end if spec.is_former_place and placetype ~= "places" then allow_cat = false end local expected_prep if spec.is_city then expected_prep = ptdata.generic_before_cities else expected_prep = ptdata.generic_before_non_cities end if not expected_prep then allow_cat = false end if allow_cat then if expected_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, expected_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) desc = "{{{langname}}} " .. desc .. "." local parents = {} insert(parents, key) if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = normalized_placetype, sort = key}) if spec.placetype == "quốc gia" or m_table.contains(spec.placetype, "quốc gia") then local category_class = m_placetypes.get_equiv_placetype_prop(normalized_placetype, function(pt) return m_placetypes.get_placetype_prop(pt, "class") end, { from_category = true, no_split_qualifiers = true, }) if not category_class then internal_error("Saw placetype %s that is either unknown or has no `class` " .. "setting in `placetype_data`", normalized_placetype) end if class_is_political_division[category_class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", category_class, normalized_placetype) end if class_is_political_division[category_class] then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do local container_prep if container.spec.is_city then container_prep = ptdata.generic_before_cities else container_prep = ptdata.generic_before_non_cities end if not container_prep then internal_error("For container key %s spec %s defines is_city = %s but " .. "there is no corresponding `generic_before_*` setting in the " .. "placedata for placetype %s", container.key, container.spec, container.spec.is_city, placetype) end insert(parents, { name = placetype .. " " .. container_prep .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = normalized_placetype, sort = key}) end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) -- Handler for "state capitals of the United States", "provincial capitals of Canada", etc. This must precede the next -- handler for specific political and misc (non-political) divisions of polities and subpolities, such as -- "provinces of the Philippines", because "departmental capitals" is listed in cat_as for French prefectures and so -- will trigger an error if that handler runs before this one. insert(handlers, function(label) label = lcfirst(label) local capital_cat, place = label:match("^([a-z%- ]- capitals) of (.*)$") -- Make sure we recognize the type of capital. if place and capital_cat_to_placetype[capital_cat] then local placetype = capital_cat_to_placetype[capital_cat] local pl_placetype = m_placetypes.pluralize_placetype(placetype) -- Locate the container, fetch its known political divisions, and make sure the placetype corresponding to the -- type of capital is among the list. local group, key, spec = find_canonical_key_from_place(place, canon_label) if group and (spec.divs or spec.addl_divs) then local saw_match = false local variant_matches = {} 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 -- HACK. Currently if we don't find a match for the placetype, we map e.g. 'autonomous region' -- -> 'regional capitals' and 'union territory' -> 'territorial capitals'. When encountering a -- political division like 'autonomous region' or 'union territory', chop off everything up -- through a space to make things match. To make this clearer, we record all such -- "variant match" cases, and down below we insert a note into the category text indicating that -- such "variant matches" are included among the category. if pl_placetype == div.type or pl_placetype == div.type:gsub("^.* ", "") then saw_match = true if pl_placetype ~= div.type then insert(variant_matches, div.type) end end end end if saw_match then -- Everything checks out, construct the category description. local placetype_desc = m_placetypes.get_placetype_display_form(pl_placetype, placetype.is_city and "city" or "noncity") if placetype_desc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end if not placetype_desc then internal_error("Unrecognized plural placetype %s, generated as the plural of %s, which " .. "was found as the placetype of capital placetype %s in label %s", pl_placetype, placetype, capital_cat, label) end local variant_match_text = "" if variant_matches[1] then local real_variant_match_descs = {} for i, variant_match in ipairs(variant_matches) do local variant_match_desc = m_placetypes.get_placetype_display_form(variant_match, placetype.is_city and "city" or "noncity") if variant_match_desc == nil then internal_error("Unrecognized variant match plural placetype %s, coming from " .. "place key %s, data %s in label %s", variant_match, key, spec, label) end if variant_match_desc then -- skip those for which the description is `false`, like `ABBREVIATION_OF states` -- in the United States divs. insert(real_variant_match_descs, variant_match_desc) end end if real_variant_match_descs[1] then variant_match_text = " (bao gồm " .. m_table.serialCommaJoin(real_variant_match_descs) .. ")" end end local desc = "Tên gọi {{{langname}}} về thủ đô của " .. placetype_desc .. variant_match_text .. " trong " .. fetch_or_construct_location_desc(group, key, spec) .. "." local full_placename, _ = m_locations.key_to_placename(group, key) local parents = {} if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = capital_cat, sort = key}) else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = capital_cat .. " của " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = capital_cat, sort = key}) end end insert(parents, key) return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = desc, breadcrumb = full_placename, parents = parents, } end end end end) local overriding_category_descriptions = { ["autonomous cities of Spain"] = "the [[w:Autonomous communities of Spain#Autonomous_cities|autonomous cities of Spain]]", ["regions of Greece"] = "the regions ([[periphery|peripheries]]) of [[Greece]]", ["regions of North Macedonia"] = "the regions ([[periphery|peripheries]]) of [[North Macedonia]]", ["subprefectures of Japan"] = "[[subprefecture]]s of [[Japan]]ese [[prefecture]]s", } -- Handler for specific political and misc (non-political) divisions of locations (polities, subpolities, cities, etc.), -- such as "provinces of the Philippines", "counties of Wales", "municipalities of Tocantins, Brazil", -- "boroughs of New York City", etc. This does not handle categories for generic placetypes (cities, rivers, etc.) of -- locations, which are handled by different handlers above. insert(handlers, function(label) -- The label comes with an initial capitalization but we have to check both lowercase-initial and capital-initial -- versions of the placetype to handle e.g. [[:Category:en:Indian reserves of Canada]]. for _, canon_label in ipairs { label, lcfirst(label) } do for _, minimal_placetype in ipairs { true, false } do local match_quantifier = minimal_placetype and "-" or "+" -- Some categories have two "of"s in them, and depending on the category, it's correct to do either a greedy -- ([[:Category:en:Abbreviations of states of the United States]], with placetype `abbreviations of states`) -- or non-greedy ([[:Category:en:Provinces of the Democratic Republic of the Congo]], with placetype -- `provinces`) match. We can't know in advance which is correct so we try both possibilities, doing the -- non-greedy one first as it seems more common (there are many locations with "of" in them, but currently -- only `abbreviations of states` occurs with a following location). local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (ở) (.*)$") end if placetype then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then local function find_placetype(divs) if divs then 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" 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 if placetype == pt_cat_as.type then local div_parent = pt_cat_as.container_parent_type if div_parent == nil then -- allow false div_parent = div.container_parent_type end if div_parent == nil then div_parent = placetype end return div_parent, pt_cat_as.prep or div.prep or "của" end end end end return nil end local div_parent, div_prep = find_placetype(spec.divs) if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs) end if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs_for_categorization) end if div_parent ~= nil then if div_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, div_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end local desc = overriding_category_descriptions[canon_label] if not desc then desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) end desc = desc .. " {{{langname}}}." local parents = {} insert(parents, key) if div_parent then -- div_parent may be `false` if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = placetype, sort = " " .. key}) if spec.placetype == "quốc gia" or m_table.contains(spec.placetype, "quốc gia") then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = div_parent .. " " .. in_of .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = placetype, sort = " " .. key}) end end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) labels["ngoại danh"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} [[exonym]]s.", parents = {"địa danh"}, } labels["đơn vị hành chính theo quốc gia cụ thể"] = { type = "chủ đề phân nhóm", description = "{{{langname}}} categories for political divisions of specific countries.", parents = {"địa danh"}, } -- Misc. FIXME: Remove the need for this. labels["nomes of Ancient Egypt"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} names of the [[nome]]s of [[Ancient Egypt]].", breadcrumb = "nomes", parents = {"Ancient Egypt"}, } -- Sui generis place categories (mostly cross-jurisdictional subcontinental/transcontinental regions) -- FIXME: Everything here has been moved from [[Module:category tree/topic/Earth]]. Most should be removed. labels["Atlantic Ocean"] = { type = "related-to", description = "default with the", parents = {"Earth"}, } labels["British Isles"] = { type = "related-to", description = "=the people, culture, or territory of [[Great Britain]], [[Ireland]], and other nearby islands", parents = {"Europe", "islands"}, } labels["European Union"] = { type = "related-to", description = "default with the", parents = {"Europe"}, } labels["Gascony"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Indian subcontinent"] = { type = "related-to", description = "default with the", parents = {"South Asia"}, } labels["Bengal"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Bengal]].", parents = {"Indian subcontinent"}, } labels["Kashmir"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Kashmir]].", parents = {"Indian subcontinent"}, } labels["Kashmir, India"] = { type = "related-to", description = "{{{langname}}} names of places in {{w|Kashmir, India}}.", parents = {"India", "Kashmir"}, } labels["Korea"] = { type = "related-to", description = "=the people, culture, or territory of [[Korea]]", parents = {"Asia"}, } labels["Languedoc"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Lapland"] = { type = "related-to", description = "=[[Lapland]], a region in northernmost Europe", parents = {"Europe", "Finland", "Norway", "Russia", "Sweden"}, } labels["Middle East"] = { type = "related-to", description = "default with the", parents = {"Africa", "Asia"}, } labels["Netherlands Antilles"] = { type = "related-to", description = "=the people, culture, or territory of the [[Netherlands Antilles]]", parents = {"Netherlands", "North America"}, } labels["Overseas France"] = { type = "related-to", description = "={{w|Overseas France}} ({{m|fr||France d'outre-mer}})", parents = {"France"}, } labels["Provence"] = { type = "related-to", description = "default", parents = {"Provence-Alpes-Côte d'Azur, France"}, } labels["Polish People's Republic"] = { type = "related-to", description = "default", parents = {"Poland"}, } labels["South Asia"] = { type = "related-to", description = "default", parents = {"Eurasia", "Asia"}, } return {LABELS = labels, HANDLERS = handlers} ltd5l6d182zxu8usujnck4z8d3zu7rm 2349936 2349929 2026-05-03T13:58:20Z Hiyuune 50834 2349936 Scribunto text/plain local labels = {} local handlers = {} local m_table = require("Module:table") local en_utilities_module = "Module:en-utilities" local string_utilities_module = "Module:string utilities" local m_locations = require("Module:place/locations") local m_placetypes = require("Module:place/placetypes") local placetype_data = m_placetypes.placetype_data local internal_error = m_locations.internal_error local dump = mw.dumpObject local insert = table.insert local concat = table.concat local is_callable = require("Module:fun").is_callable --[==[ intro: This module is part of the category tree code and contains code to generate the descriptions of place-related categories such as [[Category:de:Hokkaido Prefecture, Japan]], [[Category:es:Cities in France]], [[Category:pt:Municipalities of Tocantins, Brazil]], etc.). Note that this module doesn't actually create the categories; that must be done separately, with the text "{{tl|auto cat}}" as the definition of the category. (This process should automatically happen periodically for non-empty categories, because they will appear in [[Special:WantedCategories]] and a bot will periodically examine that list and create any needed category.) There are two ways that category descriptions are specified: (1) by manually adding an entry to the `labels` table, keyed by the label (the category minus the language code) with a value consisting of a Lua table specifying the description text and the category's parents; (2) through handlers (pieces of Lua code) added to the `handlers` list, which recognize labels of a specific type (e.g. `Cities in France`) and generate the appropriate specification for that label on-the-fly. See [[Module:place]] for an introduction to the terminology associated with places along with a list of all the relevant modules, along with for more specific information on types of toponyms and placetypes and how their categorization works. ]==] local function lcfirst(label) return mw.getContentLanguage():lcfirst(label) end local function gsub_literally(str, from, to) local m_strutils = require(string_utilities_module) return (str:gsub(m_strutils.pattern_escape(from), m_strutils.replacement_escape(to))) end local class_to_bare_category_parent = { ["polity"] = "polities", ["subpolity"] = "political divisions", ["settlement"] = "settlements", ["non-admin settlement"] = "settlements", ["capital"] = "capital cities", ["natural feature"] = "natural features", ["man-made structure"] = "man-made structures", ["geographic region"] = "geographic and cultural areas", } local class_is_political_division = { ["polity"] = true, -- strictly false but there are placetypes ambiguous between polity and subpolity ["subpolity"] = true, ["settlement"] = true, ["non-admin settlement"] = false, ["capital"] = true, ["natural feature"] = false, ["man-made structure"] = false, ["geographic region"] = false, ["generic place"] = false, } local capital_cat_to_placetype = {} for placetype, capital_cat in pairs(m_placetypes.placetype_to_capital_cat) do capital_cat_to_placetype[capital_cat] = placetype end -- Handler for bare categories for all types of capitals. This needs to precede the handler for bare placetype -- categories as some of the types of capitals exist as placetypes as well. insert(handlers, function(label) label = lcfirst(label) local capital_placetype = capital_cat_to_placetype[label] if capital_placetype then local pl_placetype = m_placetypes.pluralize_placetype(capital_placetype) local linkdesc = m_placetypes.get_placetype_display_form(pl_placetype, "top-level") if linkdesc == nil then internal_error("Unrecognized placetype %s when processing label %s", capital_placetype, label) end if linkdesc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = "{{{langname}}} names of [[capital]]s of " .. linkdesc .. ".", parents = {"capital cities"}, } end end) -- Handler for bare placetype categories. FIXME: Add wpcat= and commonscat= info. Previously we had it for various -- so-called "generic" placetypes, but sometimes the categories were wrong. insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local ptdesc, ptdata = m_placetypes.get_placetype_display_form(canon_label, "top-level", "return full") if ptdesc then local from_category_props = { from_category = true, no_split_qualifiers = true, } local bare_category_parent = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) local bare_category_parent = m_placetypes.get_placetype_prop(pt, "bare_category_parent") if bare_category_parent then return bare_category_parent end local class = m_placetypes.get_placetype_prop(pt, "class") if class then if class_to_bare_category_parent[class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", class, canon_label) end return class_to_bare_category_parent[class] end end, from_category_props) if not bare_category_parent then internal_error("Saw placetype %s without a `class` or `bare_category_parent` setting, either " .. "directly or through a fallback", canon_label) end local addl_bare_category_parents = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "addl_bare_category_parents") end, from_category_props) local bare_category_breadcrumb = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "bare_category_breadcrumb") end, from_category_props) if type(bare_category_parent) == "string" and bare_category_breadcrumb then bare_category_parent = {name = bare_category_parent, sort = bare_category_breadcrumb} end local parents = {bare_category_parent} if addl_bare_category_parents then m_table.extend(parents, addl_bare_category_parents) end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = "{{{langname}}} " .. ptdesc .. ".", breadcrumb = bare_category_breadcrumb, parents = parents, } elseif ptdesc == false then mw.log(("Display form for canon_label %s is false, can't categorize"):format(dump(canon_label))) end end end) local function fetch_primary_placetype(key, spec) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if not placetype then internal_error("No placetype specified or defaulted for key %s, spec %s", key, spec) end return placetype end --[==[ Construct an appropriately linked location based on the full or elliptical placename, preceded by `"the "`` if appropriate. Specifically: Fetch the full and elliptical_placenames. If they are the same, just link to the placename directly. Otherwise, check if the full placename exists; if so link to it. Otherwise, if the elliptical placename exists, link to it but display it as the full placename. Finally, if neither full placename nor elliptical placename exists, fall back to linking to the full placename. That way, we prefer full placenames to elliptical placenames if both or neither exist as Wiktionary entries, but if only one exists, we link to that one rather than have a red link. ]==] local function construct_linked_location(group, key, spec) local full_placename, elliptical_placename = m_locations.key_to_placename(group, key) local linked_placename if elliptical_placename ~= full_placename then local full_placename_title = mw.title.new(full_placename) if full_placename_title and full_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, full_placename) else local elliptical_placename_title = mw.title.new(elliptical_placename) if elliptical_placename_title and elliptical_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, elliptical_placename, full_placename) end end end return linked_placename or m_locations.construct_linked_placename(spec, full_placename) end --[==[ Construct the description of a location, including its container trail either to the end or until we encounter a `no_include_container_in_desc` setting. For example, for the city of [[Birmingham]], the description will read `"[[Birmingham]], a [[city]] in the [[West Midlands]] (which is a [[county]] of [[England]], which is a [[constituent country]] of the [[United Kingdom]], which is a [[country]] in [[Europe]])"`. FIXME: Possibly we should adopt the way city descriptions used to read, which was similar to `"the city of [[Birmingham]], in the county of the [[West Midlands]], in the [[constituent country]] of [[England]], in the [[country]] of the [[United Kingdom]], in [[Europe]]"`. ]==] local function construct_location_desc(group, key, spec) local parts = {} local function ins(txt) insert(parts, txt) end ins(construct_linked_location(group, key, spec)) local iteration = 0 local need_closing_paren = false local containers = {{group = group, key = key, spec = spec}} local container_iterator = m_locations.iterate_containers(group, key, spec) while true do iteration = iteration + 1 local include_container_in_desc = false for _, container in ipairs(containers) do if not container.spec.no_include_container_in_desc then include_container_in_desc = true break end end if not include_container_in_desc then break end local next_containers = container_iterator() if not next_containers then break end local is_former = nil for _, container in ipairs(containers) do local this_is_former = container.spec.is_former_place if is_former == nil then is_former = this_is_former elseif is_former ~= this_is_former then internal_error("When processing container trail of key %s, found a mixture of former and non-former " .. "containers: %s", key, containers) end end if #containers > 1 then local placetypes = {} local prepositions = {} for _, container in ipairs(containers) do local container_type = fetch_primary_placetype(container.key, container.spec) m_table.insertIfNot(placetypes, m_placetypes.pluralize_placetype(container_type)) m_table.insertIfNot(prepositions, m_placetypes.get_placetype_entry_preposition(container_type)) end if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which are ") need_closing_paren = true else ins(", which are ") end if is_former then ins("former ") end ins(m_table.serialCommaJoin(placetypes)) ins(" ") ins(concat(prepositions, "/")) else if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which is ") need_closing_paren = true else ins(", which is ") end local container_type = fetch_primary_placetype(containers[1].key, containers[1].spec) if is_former then ins("a former ") else ins(m_placetypes.get_placetype_article(container_type)) ins(" ") end ins(container_type) ins(" ") ins(m_placetypes.get_placetype_entry_preposition(container_type)) end ins(" ") first_container = false containers = next_containers local container_locations = {} for _, container in ipairs(containers) do insert(container_locations, construct_linked_location(container.group, container.key, container.spec)) end ins(m_table.serialCommaJoin(container_locations)) end if need_closing_paren then ins(")") end return concat(parts) end -- Fetch or construct the description of the location specified by `key`. If the `keydesc` property is specified, -- use it directly but substitute any occurrence of `+++` with the auto-constructed location description, which -- mentions the placename corresponding to the key, its placetype and container, and repeats the description up -- the container trail until either there are no more containers or (more usually) the `no_include_container_in_desc` -- setting is found (which is set on all continents and continent-level regions). 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 val = val or "+++" if val:find("%+%+%+") then val = gsub_literally(val, "+++", construct_location_desc(group, key, spec)) end return val end local function normalize_cat_as(cat_as, div) if type(cat_as) ~= "table" or cat_as.type then cat_as = {cat_as} end local ret_cat_as = {} for _, pt_cat_as in ipairs(cat_as) do if type(pt_cat_as) == "string" then pt_cat_as = {type = pt_cat_as} end insert(ret_cat_as, {type = pt_cat_as.type, prep = pt_cat_as.prep or div.prep or "của"}) end return ret_cat_as end -- Find the specified plural placetype among the divs for a given known location. Return a list of cat_as specs, where -- each spec is of the form {type = "PLURAL_PLACETYPE", prep = "PREP"} indicating the plural placetype to use when -- categorizing and the preposition to follow. local function find_placetype_cat_as(divs, pl_placetype) if divs then if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) == "string" then div = {type = div} end if div.type == pl_placetype then local cat_as = div.cat_as or div.type return normalize_cat_as(cat_as, div) end end end return nil end -- Handler for bare placename categories for known locations in `locations` in [[Module:place/locations]]. insert(handlers, function(label) for _, canon_label in ipairs { label, lcfirst(label) } do local group, spec = m_locations.find_canonical_key(canon_label) if group then -- wp= defaults to true (Wikipedia article matches location's full placename) local wp = spec.wp if wp == nil then wp = true end -- wpcat= defaults to wp= (if Wikipedia article has its own name, Wikipedia category and Commons category -- generally follow) local wpcat = spec.wpcat if wpcat == nil then wpcat = wp end -- commonscat= defaults to wpcat= (if Wikipedia category has its own name, Commons category generally -- follows) local commonscat = spec.commonscat if commonscat == nil then commonscat = wpcat end local parents = {} local bare_label_parents = spec.overriding_bare_label_parents local container_iterator = m_locations.iterate_containers(group, canon_label, spec) local containers = container_iterator() if not bare_label_parents then bare_label_parents = {"+++"} end local full_location_placename, elliptical_location_placename = m_locations.key_to_placename(group, canon_label) local full_container_placename if containers then full_container_placename, _ = m_locations.key_to_placename(containers[1].group, containers[1].key) end local inserted_containers = false for _, parent in ipairs(bare_label_parents) do if parent == "+++" then parent = "PL_PLACETYPE PREP CONTAINER" end if parent:find("CONTAINER") then if not containers then internal_error("Parent category %s needs the container of %s but no containers specified: %s", parent, canon_label, spec) end local location_type = fetch_primary_placetype(canon_label, spec) local pl_location_type = m_placetypes.pluralize_placetype(location_type) for _, container in ipairs(containers) do local per_container_parent = parent local cat_as_list if per_container_parent:find("PL_PLACETYPE") then if spec.bare_category_parent_type then cat_as_list = normalize_cat_as(spec.bare_category_parent_type, spec) else cat_as_list = find_placetype_cat_as(container.spec.divs, pl_location_type) or find_placetype_cat_as(container.spec.addl_divs, pl_location_type) end end if not cat_as_list then local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(location_type, "from category") if not canon_placetype or not (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then internal_error("Unable to locate plural location type %s among the divs or addl_divs " .. "for container key %s spec %s, and the location type is either not in placetype_data or " .. "not identified as a generic placetype", pl_location_type, container.key, container.spec) end cat_as_list = {{type = pl_location_type, prep = m_placetypes.get_placetype_entry_preposition(location_type)}} end local prefixed_key = m_placetypes.get_prefixed_key(container.key, container.spec) per_container_parent = gsub_literally(per_container_parent, "CONTAINER", prefixed_key) for _, cat_as in ipairs(cat_as_list) do local per_container_per_placetype_parent = per_container_parent per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PL_PLACETYPE", cat_as.type) per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PREP", cat_as.prep) m_table.insertIfNot(parents, per_container_per_placetype_parent) end end inserted_containers = true else m_table.insertIfNot(parents, parent) end end if not inserted_containers and containers then -- If we didn't insert the containers above in some form, insert them now as bare categories. Note that -- this may be different categories from the container categories inserted above. for _, container in ipairs(containers) do m_table.insertIfNot(parents, container.key) end end if spec.addl_parents then for _, parent in ipairs(spec.addl_parents) do m_table.insertIfNot(parents, parent) end end local function format_boxval(val, specname) if val == true then val = "%l" end if type(val) == "string" then val = gsub_literally(val, "%l", full_location_placename) val = gsub_literally(val, "%e", elliptical_location_placename) if val:find("%%c") then if not full_container_placename then internal_error("Wikipedia/Commons spec %s = %s has %%c in it but key %s has no " .. "containers: %s", specname, val, canon_label, spec) end val = gsub_literally(val, "%c", full_container_placename) end end return val end local description = spec.fulldesc or ( "{{{langname}}} terms related to the people, culture, or territory of " .. fetch_or_construct_location_desc(group, canon_label, spec) .. ".") local full_placename, _ = m_locations.key_to_placename(group, canon_label) return { type = "chủ đề thuộc nhóm phân loại", description = description, breadcrumb = full_placename, parents = parents, wp = format_boxval(wp, "wp"), wpcat = format_boxval(wpcat, "wpcat"), commonscat = format_boxval(commonscat, "commonscat"), } end end end) local function find_canonical_key_from_place(place, canon_label) local has_the = false local key if place:find("^ ") then key = place:gsub("^ ", "") has_the = true else key = place end local group, spec = m_locations.find_canonical_key(key) if group then local requires_the = spec.the or false if has_the ~= requires_the then if has_the then mw.log(("Mismatch in category name '%s', has 'the' in the category when it should not"):format( canon_label)) else mw.log(("Mismatch in category name '%s', should have 'the' in the category but does not"): format(canon_label)) end return nil end return group, key, spec end return nil end -- Handler for generic placetypes (those whose categories are added through category generation handlers or through -- explicit category specs in the placetype data) for known locations in [[Module:place/locations]]. All such -- placetypes have either a `generic_before_non_cities` setting (meaning they can occur before non-city locations) or -- `generic_before_cities` setting (meaning they can occur before cities), or both. Examples of such categories are -- "cities in the Bahamas" or "rivers in Western Australia, Australia", or (for city locations) -- "neighbourhoods of Hong Kong" or "places in Melbourne". insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") end if placetype then local normalized_placetype = placetype == "neighbourhoods" and "neighborhoods" or placetype local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(normalized_placetype, "from category") if canon_placetype and (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then -- Check whether the location uses British spelling, but also check all containers, because -- it's too hard to keep in sync the `british_spelling` setting for locations at all different -- levels (e.g. cities of various countries, first and second level administrative division, etc.), -- so we just set it at top level on the country. local uses_british_spelling = spec.british_spelling if uses_british_spelling == nil then for containers in m_locations.iterate_containers(group, key, spec) do local must_outer_break = false for _, container in ipairs(containers) 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 local allow_cat = true if placetype == "neighborhoods" and uses_british_spelling or placetype == "neighbourhoods" and not uses_british_spelling then mw.log(("Mismatch in spelling of placetype '%s' in category '%s', should be '%s'"):format( placetype, canon_label, uses_british_spelling and "neighbourhoods" or "neighborhoods")) allow_cat = false end if spec.is_former_place and placetype ~= "địa danh" then allow_cat = false end local expected_prep if spec.is_city then expected_prep = ptdata.generic_before_cities else expected_prep = ptdata.generic_before_non_cities end if not expected_prep then allow_cat = false end if allow_cat then if expected_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, expected_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) desc = "{{{langname}}} " .. desc .. "." local parents = {} insert(parents, key) if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = normalized_placetype, sort = key}) if spec.placetype == "quốc gia" or m_table.contains(spec.placetype, "quốc gia") then local category_class = m_placetypes.get_equiv_placetype_prop(normalized_placetype, function(pt) return m_placetypes.get_placetype_prop(pt, "class") end, { from_category = true, no_split_qualifiers = true, }) if not category_class then internal_error("Saw placetype %s that is either unknown or has no `class` " .. "setting in `placetype_data`", normalized_placetype) end if class_is_political_division[category_class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", category_class, normalized_placetype) end if class_is_political_division[category_class] then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do local container_prep if container.spec.is_city then container_prep = ptdata.generic_before_cities else container_prep = ptdata.generic_before_non_cities end if not container_prep then internal_error("For container key %s spec %s defines is_city = %s but " .. "there is no corresponding `generic_before_*` setting in the " .. "placedata for placetype %s", container.key, container.spec, container.spec.is_city, placetype) end insert(parents, { name = placetype .. " " .. container_prep .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = normalized_placetype, sort = key}) end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) -- Handler for "state capitals of the United States", "provincial capitals of Canada", etc. This must precede the next -- handler for specific political and misc (non-political) divisions of polities and subpolities, such as -- "provinces of the Philippines", because "departmental capitals" is listed in cat_as for French prefectures and so -- will trigger an error if that handler runs before this one. insert(handlers, function(label) label = lcfirst(label) local capital_cat, place = label:match("^([a-z%- ]- capitals) of (.*)$") -- Make sure we recognize the type of capital. if place and capital_cat_to_placetype[capital_cat] then local placetype = capital_cat_to_placetype[capital_cat] local pl_placetype = m_placetypes.pluralize_placetype(placetype) -- Locate the container, fetch its known political divisions, and make sure the placetype corresponding to the -- type of capital is among the list. local group, key, spec = find_canonical_key_from_place(place, canon_label) if group and (spec.divs or spec.addl_divs) then local saw_match = false local variant_matches = {} 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 -- HACK. Currently if we don't find a match for the placetype, we map e.g. 'autonomous region' -- -> 'regional capitals' and 'union territory' -> 'territorial capitals'. When encountering a -- political division like 'autonomous region' or 'union territory', chop off everything up -- through a space to make things match. To make this clearer, we record all such -- "variant match" cases, and down below we insert a note into the category text indicating that -- such "variant matches" are included among the category. if pl_placetype == div.type or pl_placetype == div.type:gsub("^.* ", "") then saw_match = true if pl_placetype ~= div.type then insert(variant_matches, div.type) end end end end if saw_match then -- Everything checks out, construct the category description. local placetype_desc = m_placetypes.get_placetype_display_form(pl_placetype, placetype.is_city and "city" or "noncity") if placetype_desc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end if not placetype_desc then internal_error("Unrecognized plural placetype %s, generated as the plural of %s, which " .. "was found as the placetype of capital placetype %s in label %s", pl_placetype, placetype, capital_cat, label) end local variant_match_text = "" if variant_matches[1] then local real_variant_match_descs = {} for i, variant_match in ipairs(variant_matches) do local variant_match_desc = m_placetypes.get_placetype_display_form(variant_match, placetype.is_city and "city" or "noncity") if variant_match_desc == nil then internal_error("Unrecognized variant match plural placetype %s, coming from " .. "place key %s, data %s in label %s", variant_match, key, spec, label) end if variant_match_desc then -- skip those for which the description is `false`, like `ABBREVIATION_OF states` -- in the United States divs. insert(real_variant_match_descs, variant_match_desc) end end if real_variant_match_descs[1] then variant_match_text = " (bao gồm " .. m_table.serialCommaJoin(real_variant_match_descs) .. ")" end end local desc = "Tên gọi {{{langname}}} về thủ đô của " .. placetype_desc .. variant_match_text .. " trong " .. fetch_or_construct_location_desc(group, key, spec) .. "." local full_placename, _ = m_locations.key_to_placename(group, key) local parents = {} if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = capital_cat, sort = key}) else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = capital_cat .. " của " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = capital_cat, sort = key}) end end insert(parents, key) return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = desc, breadcrumb = full_placename, parents = parents, } end end end end) local overriding_category_descriptions = { ["autonomous cities of Spain"] = "the [[w:Autonomous communities of Spain#Autonomous_cities|autonomous cities of Spain]]", ["regions of Greece"] = "the regions ([[periphery|peripheries]]) of [[Greece]]", ["regions of North Macedonia"] = "the regions ([[periphery|peripheries]]) of [[North Macedonia]]", ["subprefectures of Japan"] = "[[subprefecture]]s of [[Japan]]ese [[prefecture]]s", } -- Handler for specific political and misc (non-political) divisions of locations (polities, subpolities, cities, etc.), -- such as "provinces of the Philippines", "counties of Wales", "municipalities of Tocantins, Brazil", -- "boroughs of New York City", etc. This does not handle categories for generic placetypes (cities, rivers, etc.) of -- locations, which are handled by different handlers above. insert(handlers, function(label) -- The label comes with an initial capitalization but we have to check both lowercase-initial and capital-initial -- versions of the placetype to handle e.g. [[:Category:en:Indian reserves of Canada]]. for _, canon_label in ipairs { label, lcfirst(label) } do for _, minimal_placetype in ipairs { true, false } do local match_quantifier = minimal_placetype and "-" or "+" -- Some categories have two "of"s in them, and depending on the category, it's correct to do either a greedy -- ([[:Category:en:Abbreviations of states of the United States]], with placetype `abbreviations of states`) -- or non-greedy ([[:Category:en:Provinces of the Democratic Republic of the Congo]], with placetype -- `provinces`) match. We can't know in advance which is correct so we try both possibilities, doing the -- non-greedy one first as it seems more common (there are many locations with "of" in them, but currently -- only `abbreviations of states` occurs with a following location). local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (ở) (.*)$") end if placetype then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then local function find_placetype(divs) if divs then 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" 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 if placetype == pt_cat_as.type then local div_parent = pt_cat_as.container_parent_type if div_parent == nil then -- allow false div_parent = div.container_parent_type end if div_parent == nil then div_parent = placetype end return div_parent, pt_cat_as.prep or div.prep or "của" end end end end return nil end local div_parent, div_prep = find_placetype(spec.divs) if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs) end if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs_for_categorization) end if div_parent ~= nil then if div_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, div_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end local desc = overriding_category_descriptions[canon_label] if not desc then desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) end desc = desc .. " {{{langname}}}." local parents = {} insert(parents, key) if div_parent then -- div_parent may be `false` if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = placetype, sort = " " .. key}) if spec.placetype == "quốc gia" or m_table.contains(spec.placetype, "quốc gia") then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = div_parent .. " " .. in_of .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = placetype, sort = " " .. key}) end end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) labels["ngoại danh"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} [[exonym]]s.", parents = {"địa danh"}, } labels["đơn vị hành chính theo quốc gia cụ thể"] = { type = "chủ đề phân nhóm", description = "{{{langname}}} categories for political divisions of specific countries.", parents = {"địa danh"}, } -- Misc. FIXME: Remove the need for this. labels["nomes of Ancient Egypt"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} names of the [[nome]]s of [[Ancient Egypt]].", breadcrumb = "nomes", parents = {"Ancient Egypt"}, } -- Sui generis place categories (mostly cross-jurisdictional subcontinental/transcontinental regions) -- FIXME: Everything here has been moved from [[Module:category tree/topic/Earth]]. Most should be removed. labels["Atlantic Ocean"] = { type = "related-to", description = "default with the", parents = {"Earth"}, } labels["British Isles"] = { type = "related-to", description = "=the people, culture, or territory of [[Great Britain]], [[Ireland]], and other nearby islands", parents = {"Europe", "islands"}, } labels["European Union"] = { type = "related-to", description = "default with the", parents = {"Europe"}, } labels["Gascony"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Indian subcontinent"] = { type = "related-to", description = "default with the", parents = {"South Asia"}, } labels["Bengal"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Bengal]].", parents = {"Indian subcontinent"}, } labels["Kashmir"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Kashmir]].", parents = {"Indian subcontinent"}, } labels["Kashmir, India"] = { type = "related-to", description = "{{{langname}}} names of places in {{w|Kashmir, India}}.", parents = {"India", "Kashmir"}, } labels["Korea"] = { type = "related-to", description = "=the people, culture, or territory of [[Korea]]", parents = {"Asia"}, } labels["Languedoc"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Lapland"] = { type = "related-to", description = "=[[Lapland]], a region in northernmost Europe", parents = {"Europe", "Finland", "Norway", "Russia", "Sweden"}, } labels["Middle East"] = { type = "related-to", description = "default with the", parents = {"Africa", "Asia"}, } labels["Netherlands Antilles"] = { type = "related-to", description = "=the people, culture, or territory of the [[Netherlands Antilles]]", parents = {"Netherlands", "North America"}, } labels["Overseas France"] = { type = "related-to", description = "={{w|Overseas France}} ({{m|fr||France d'outre-mer}})", parents = {"France"}, } labels["Provence"] = { type = "related-to", description = "default", parents = {"Provence-Alpes-Côte d'Azur, France"}, } labels["Polish People's Republic"] = { type = "related-to", description = "default", parents = {"Poland"}, } labels["South Asia"] = { type = "related-to", description = "default", parents = {"Eurasia", "Asia"}, } return {LABELS = labels, HANDLERS = handlers} 6w498axcwkox0zxqhcmckecdetjref6 2349940 2349936 2026-05-03T14:00:54Z Hiyuune 50834 2349940 Scribunto text/plain local labels = {} local handlers = {} local m_table = require("Module:table") local en_utilities_module = "Module:en-utilities" local string_utilities_module = "Module:string utilities" local m_locations = require("Module:place/locations") local m_placetypes = require("Module:place/placetypes") local placetype_data = m_placetypes.placetype_data local internal_error = m_locations.internal_error local dump = mw.dumpObject local insert = table.insert local concat = table.concat local is_callable = require("Module:fun").is_callable --[==[ intro: This module is part of the category tree code and contains code to generate the descriptions of place-related categories such as [[Category:de:Hokkaido Prefecture, Japan]], [[Category:es:Cities in France]], [[Category:pt:Municipalities of Tocantins, Brazil]], etc.). Note that this module doesn't actually create the categories; that must be done separately, with the text "{{tl|auto cat}}" as the definition of the category. (This process should automatically happen periodically for non-empty categories, because they will appear in [[Special:WantedCategories]] and a bot will periodically examine that list and create any needed category.) There are two ways that category descriptions are specified: (1) by manually adding an entry to the `labels` table, keyed by the label (the category minus the language code) with a value consisting of a Lua table specifying the description text and the category's parents; (2) through handlers (pieces of Lua code) added to the `handlers` list, which recognize labels of a specific type (e.g. `Cities in France`) and generate the appropriate specification for that label on-the-fly. See [[Module:place]] for an introduction to the terminology associated with places along with a list of all the relevant modules, along with for more specific information on types of toponyms and placetypes and how their categorization works. ]==] local function lcfirst(label) return mw.getContentLanguage():lcfirst(label) end local function gsub_literally(str, from, to) local m_strutils = require(string_utilities_module) return (str:gsub(m_strutils.pattern_escape(from), m_strutils.replacement_escape(to))) end local class_to_bare_category_parent = { ["polity"] = "tổ chức chính trị", ["subpolity"] = "political divisions", ["settlement"] = "settlements", ["non-admin settlement"] = "settlements", ["capital"] = "capital cities", ["natural feature"] = "natural features", ["man-made structure"] = "man-made structures", ["geographic region"] = "geographic and cultural areas", } local class_is_political_division = { ["polity"] = true, -- strictly false but there are placetypes ambiguous between polity and subpolity ["subpolity"] = true, ["settlement"] = true, ["non-admin settlement"] = false, ["capital"] = true, ["natural feature"] = false, ["man-made structure"] = false, ["geographic region"] = false, ["generic place"] = false, } local capital_cat_to_placetype = {} for placetype, capital_cat in pairs(m_placetypes.placetype_to_capital_cat) do capital_cat_to_placetype[capital_cat] = placetype end -- Handler for bare categories for all types of capitals. This needs to precede the handler for bare placetype -- categories as some of the types of capitals exist as placetypes as well. insert(handlers, function(label) label = lcfirst(label) local capital_placetype = capital_cat_to_placetype[label] if capital_placetype then local pl_placetype = m_placetypes.pluralize_placetype(capital_placetype) local linkdesc = m_placetypes.get_placetype_display_form(pl_placetype, "top-level") if linkdesc == nil then internal_error("Unrecognized placetype %s when processing label %s", capital_placetype, label) end if linkdesc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = "{{{langname}}} names of [[capital]]s of " .. linkdesc .. ".", parents = {"capital cities"}, } end end) -- Handler for bare placetype categories. FIXME: Add wpcat= and commonscat= info. Previously we had it for various -- so-called "generic" placetypes, but sometimes the categories were wrong. insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local ptdesc, ptdata = m_placetypes.get_placetype_display_form(canon_label, "top-level", "return full") if ptdesc then local from_category_props = { from_category = true, no_split_qualifiers = true, } local bare_category_parent = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) local bare_category_parent = m_placetypes.get_placetype_prop(pt, "bare_category_parent") if bare_category_parent then return bare_category_parent end local class = m_placetypes.get_placetype_prop(pt, "class") if class then if class_to_bare_category_parent[class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", class, canon_label) end return class_to_bare_category_parent[class] end end, from_category_props) if not bare_category_parent then internal_error("Saw placetype %s without a `class` or `bare_category_parent` setting, either " .. "directly or through a fallback", canon_label) end local addl_bare_category_parents = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "addl_bare_category_parents") end, from_category_props) local bare_category_breadcrumb = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "bare_category_breadcrumb") end, from_category_props) if type(bare_category_parent) == "string" and bare_category_breadcrumb then bare_category_parent = {name = bare_category_parent, sort = bare_category_breadcrumb} end local parents = {bare_category_parent} if addl_bare_category_parents then m_table.extend(parents, addl_bare_category_parents) end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = "{{{langname}}} " .. ptdesc .. ".", breadcrumb = bare_category_breadcrumb, parents = parents, } elseif ptdesc == false then mw.log(("Display form for canon_label %s is false, can't categorize"):format(dump(canon_label))) end end end) local function fetch_primary_placetype(key, spec) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if not placetype then internal_error("No placetype specified or defaulted for key %s, spec %s", key, spec) end return placetype end --[==[ Construct an appropriately linked location based on the full or elliptical placename, preceded by `"the "`` if appropriate. Specifically: Fetch the full and elliptical_placenames. If they are the same, just link to the placename directly. Otherwise, check if the full placename exists; if so link to it. Otherwise, if the elliptical placename exists, link to it but display it as the full placename. Finally, if neither full placename nor elliptical placename exists, fall back to linking to the full placename. That way, we prefer full placenames to elliptical placenames if both or neither exist as Wiktionary entries, but if only one exists, we link to that one rather than have a red link. ]==] local function construct_linked_location(group, key, spec) local full_placename, elliptical_placename = m_locations.key_to_placename(group, key) local linked_placename if elliptical_placename ~= full_placename then local full_placename_title = mw.title.new(full_placename) if full_placename_title and full_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, full_placename) else local elliptical_placename_title = mw.title.new(elliptical_placename) if elliptical_placename_title and elliptical_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, elliptical_placename, full_placename) end end end return linked_placename or m_locations.construct_linked_placename(spec, full_placename) end --[==[ Construct the description of a location, including its container trail either to the end or until we encounter a `no_include_container_in_desc` setting. For example, for the city of [[Birmingham]], the description will read `"[[Birmingham]], a [[city]] in the [[West Midlands]] (which is a [[county]] of [[England]], which is a [[constituent country]] of the [[United Kingdom]], which is a [[country]] in [[Europe]])"`. FIXME: Possibly we should adopt the way city descriptions used to read, which was similar to `"the city of [[Birmingham]], in the county of the [[West Midlands]], in the [[constituent country]] of [[England]], in the [[country]] of the [[United Kingdom]], in [[Europe]]"`. ]==] local function construct_location_desc(group, key, spec) local parts = {} local function ins(txt) insert(parts, txt) end ins(construct_linked_location(group, key, spec)) local iteration = 0 local need_closing_paren = false local containers = {{group = group, key = key, spec = spec}} local container_iterator = m_locations.iterate_containers(group, key, spec) while true do iteration = iteration + 1 local include_container_in_desc = false for _, container in ipairs(containers) do if not container.spec.no_include_container_in_desc then include_container_in_desc = true break end end if not include_container_in_desc then break end local next_containers = container_iterator() if not next_containers then break end local is_former = nil for _, container in ipairs(containers) do local this_is_former = container.spec.is_former_place if is_former == nil then is_former = this_is_former elseif is_former ~= this_is_former then internal_error("When processing container trail of key %s, found a mixture of former and non-former " .. "containers: %s", key, containers) end end if #containers > 1 then local placetypes = {} local prepositions = {} for _, container in ipairs(containers) do local container_type = fetch_primary_placetype(container.key, container.spec) m_table.insertIfNot(placetypes, m_placetypes.pluralize_placetype(container_type)) m_table.insertIfNot(prepositions, m_placetypes.get_placetype_entry_preposition(container_type)) end if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which are ") need_closing_paren = true else ins(", which are ") end if is_former then ins("former ") end ins(m_table.serialCommaJoin(placetypes)) ins(" ") ins(concat(prepositions, "/")) else if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which is ") need_closing_paren = true else ins(", which is ") end local container_type = fetch_primary_placetype(containers[1].key, containers[1].spec) if is_former then ins("a former ") else ins(m_placetypes.get_placetype_article(container_type)) ins(" ") end ins(container_type) ins(" ") ins(m_placetypes.get_placetype_entry_preposition(container_type)) end ins(" ") first_container = false containers = next_containers local container_locations = {} for _, container in ipairs(containers) do insert(container_locations, construct_linked_location(container.group, container.key, container.spec)) end ins(m_table.serialCommaJoin(container_locations)) end if need_closing_paren then ins(")") end return concat(parts) end -- Fetch or construct the description of the location specified by `key`. If the `keydesc` property is specified, -- use it directly but substitute any occurrence of `+++` with the auto-constructed location description, which -- mentions the placename corresponding to the key, its placetype and container, and repeats the description up -- the container trail until either there are no more containers or (more usually) the `no_include_container_in_desc` -- setting is found (which is set on all continents and continent-level regions). 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 val = val or "+++" if val:find("%+%+%+") then val = gsub_literally(val, "+++", construct_location_desc(group, key, spec)) end return val end local function normalize_cat_as(cat_as, div) if type(cat_as) ~= "table" or cat_as.type then cat_as = {cat_as} end local ret_cat_as = {} for _, pt_cat_as in ipairs(cat_as) do if type(pt_cat_as) == "string" then pt_cat_as = {type = pt_cat_as} end insert(ret_cat_as, {type = pt_cat_as.type, prep = pt_cat_as.prep or div.prep or "của"}) end return ret_cat_as end -- Find the specified plural placetype among the divs for a given known location. Return a list of cat_as specs, where -- each spec is of the form {type = "PLURAL_PLACETYPE", prep = "PREP"} indicating the plural placetype to use when -- categorizing and the preposition to follow. local function find_placetype_cat_as(divs, pl_placetype) if divs then if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) == "string" then div = {type = div} end if div.type == pl_placetype then local cat_as = div.cat_as or div.type return normalize_cat_as(cat_as, div) end end end return nil end -- Handler for bare placename categories for known locations in `locations` in [[Module:place/locations]]. insert(handlers, function(label) for _, canon_label in ipairs { label, lcfirst(label) } do local group, spec = m_locations.find_canonical_key(canon_label) if group then -- wp= defaults to true (Wikipedia article matches location's full placename) local wp = spec.wp if wp == nil then wp = true end -- wpcat= defaults to wp= (if Wikipedia article has its own name, Wikipedia category and Commons category -- generally follow) local wpcat = spec.wpcat if wpcat == nil then wpcat = wp end -- commonscat= defaults to wpcat= (if Wikipedia category has its own name, Commons category generally -- follows) local commonscat = spec.commonscat if commonscat == nil then commonscat = wpcat end local parents = {} local bare_label_parents = spec.overriding_bare_label_parents local container_iterator = m_locations.iterate_containers(group, canon_label, spec) local containers = container_iterator() if not bare_label_parents then bare_label_parents = {"+++"} end local full_location_placename, elliptical_location_placename = m_locations.key_to_placename(group, canon_label) local full_container_placename if containers then full_container_placename, _ = m_locations.key_to_placename(containers[1].group, containers[1].key) end local inserted_containers = false for _, parent in ipairs(bare_label_parents) do if parent == "+++" then parent = "PL_PLACETYPE PREP CONTAINER" end if parent:find("CONTAINER") then if not containers then internal_error("Parent category %s needs the container of %s but no containers specified: %s", parent, canon_label, spec) end local location_type = fetch_primary_placetype(canon_label, spec) local pl_location_type = m_placetypes.pluralize_placetype(location_type) for _, container in ipairs(containers) do local per_container_parent = parent local cat_as_list if per_container_parent:find("PL_PLACETYPE") then if spec.bare_category_parent_type then cat_as_list = normalize_cat_as(spec.bare_category_parent_type, spec) else cat_as_list = find_placetype_cat_as(container.spec.divs, pl_location_type) or find_placetype_cat_as(container.spec.addl_divs, pl_location_type) end end if not cat_as_list then local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(location_type, "from category") if not canon_placetype or not (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then internal_error("Unable to locate plural location type %s among the divs or addl_divs " .. "for container key %s spec %s, and the location type is either not in placetype_data or " .. "not identified as a generic placetype", pl_location_type, container.key, container.spec) end cat_as_list = {{type = pl_location_type, prep = m_placetypes.get_placetype_entry_preposition(location_type)}} end local prefixed_key = m_placetypes.get_prefixed_key(container.key, container.spec) per_container_parent = gsub_literally(per_container_parent, "CONTAINER", prefixed_key) for _, cat_as in ipairs(cat_as_list) do local per_container_per_placetype_parent = per_container_parent per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PL_PLACETYPE", cat_as.type) per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PREP", cat_as.prep) m_table.insertIfNot(parents, per_container_per_placetype_parent) end end inserted_containers = true else m_table.insertIfNot(parents, parent) end end if not inserted_containers and containers then -- If we didn't insert the containers above in some form, insert them now as bare categories. Note that -- this may be different categories from the container categories inserted above. for _, container in ipairs(containers) do m_table.insertIfNot(parents, container.key) end end if spec.addl_parents then for _, parent in ipairs(spec.addl_parents) do m_table.insertIfNot(parents, parent) end end local function format_boxval(val, specname) if val == true then val = "%l" end if type(val) == "string" then val = gsub_literally(val, "%l", full_location_placename) val = gsub_literally(val, "%e", elliptical_location_placename) if val:find("%%c") then if not full_container_placename then internal_error("Wikipedia/Commons spec %s = %s has %%c in it but key %s has no " .. "containers: %s", specname, val, canon_label, spec) end val = gsub_literally(val, "%c", full_container_placename) end end return val end local description = spec.fulldesc or ( "{{{langname}}} terms related to the people, culture, or territory of " .. fetch_or_construct_location_desc(group, canon_label, spec) .. ".") local full_placename, _ = m_locations.key_to_placename(group, canon_label) return { type = "chủ đề thuộc nhóm phân loại", description = description, breadcrumb = full_placename, parents = parents, wp = format_boxval(wp, "wp"), wpcat = format_boxval(wpcat, "wpcat"), commonscat = format_boxval(commonscat, "commonscat"), } end end end) local function find_canonical_key_from_place(place, canon_label) local has_the = false local key if place:find("^ ") then key = place:gsub("^ ", "") has_the = true else key = place end local group, spec = m_locations.find_canonical_key(key) if group then local requires_the = spec.the or false if has_the ~= requires_the then if has_the then mw.log(("Mismatch in category name '%s', has 'the' in the category when it should not"):format( canon_label)) else mw.log(("Mismatch in category name '%s', should have 'the' in the category but does not"): format(canon_label)) end return nil end return group, key, spec end return nil end -- Handler for generic placetypes (those whose categories are added through category generation handlers or through -- explicit category specs in the placetype data) for known locations in [[Module:place/locations]]. All such -- placetypes have either a `generic_before_non_cities` setting (meaning they can occur before non-city locations) or -- `generic_before_cities` setting (meaning they can occur before cities), or both. Examples of such categories are -- "cities in the Bahamas" or "rivers in Western Australia, Australia", or (for city locations) -- "neighbourhoods of Hong Kong" or "places in Melbourne". insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") end if placetype then local normalized_placetype = placetype == "neighbourhoods" and "neighborhoods" or placetype local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(normalized_placetype, "from category") if canon_placetype and (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then -- Check whether the location uses British spelling, but also check all containers, because -- it's too hard to keep in sync the `british_spelling` setting for locations at all different -- levels (e.g. cities of various countries, first and second level administrative division, etc.), -- so we just set it at top level on the country. local uses_british_spelling = spec.british_spelling if uses_british_spelling == nil then for containers in m_locations.iterate_containers(group, key, spec) do local must_outer_break = false for _, container in ipairs(containers) 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 local allow_cat = true if placetype == "neighborhoods" and uses_british_spelling or placetype == "neighbourhoods" and not uses_british_spelling then mw.log(("Mismatch in spelling of placetype '%s' in category '%s', should be '%s'"):format( placetype, canon_label, uses_british_spelling and "neighbourhoods" or "neighborhoods")) allow_cat = false end if spec.is_former_place and placetype ~= "địa danh" then allow_cat = false end local expected_prep if spec.is_city then expected_prep = ptdata.generic_before_cities else expected_prep = ptdata.generic_before_non_cities end if not expected_prep then allow_cat = false end if allow_cat then if expected_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, expected_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) desc = "{{{langname}}} " .. desc .. "." local parents = {} insert(parents, key) if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = normalized_placetype, sort = key}) if spec.placetype == "quốc gia" or m_table.contains(spec.placetype, "quốc gia") then local category_class = m_placetypes.get_equiv_placetype_prop(normalized_placetype, function(pt) return m_placetypes.get_placetype_prop(pt, "class") end, { from_category = true, no_split_qualifiers = true, }) if not category_class then internal_error("Saw placetype %s that is either unknown or has no `class` " .. "setting in `placetype_data`", normalized_placetype) end if class_is_political_division[category_class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", category_class, normalized_placetype) end if class_is_political_division[category_class] then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do local container_prep if container.spec.is_city then container_prep = ptdata.generic_before_cities else container_prep = ptdata.generic_before_non_cities end if not container_prep then internal_error("For container key %s spec %s defines is_city = %s but " .. "there is no corresponding `generic_before_*` setting in the " .. "placedata for placetype %s", container.key, container.spec, container.spec.is_city, placetype) end insert(parents, { name = placetype .. " " .. container_prep .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = normalized_placetype, sort = key}) end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) -- Handler for "state capitals of the United States", "provincial capitals of Canada", etc. This must precede the next -- handler for specific political and misc (non-political) divisions of polities and subpolities, such as -- "provinces of the Philippines", because "departmental capitals" is listed in cat_as for French prefectures and so -- will trigger an error if that handler runs before this one. insert(handlers, function(label) label = lcfirst(label) local capital_cat, place = label:match("^([a-z%- ]- capitals) of (.*)$") -- Make sure we recognize the type of capital. if place and capital_cat_to_placetype[capital_cat] then local placetype = capital_cat_to_placetype[capital_cat] local pl_placetype = m_placetypes.pluralize_placetype(placetype) -- Locate the container, fetch its known political divisions, and make sure the placetype corresponding to the -- type of capital is among the list. local group, key, spec = find_canonical_key_from_place(place, canon_label) if group and (spec.divs or spec.addl_divs) then local saw_match = false local variant_matches = {} 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 -- HACK. Currently if we don't find a match for the placetype, we map e.g. 'autonomous region' -- -> 'regional capitals' and 'union territory' -> 'territorial capitals'. When encountering a -- political division like 'autonomous region' or 'union territory', chop off everything up -- through a space to make things match. To make this clearer, we record all such -- "variant match" cases, and down below we insert a note into the category text indicating that -- such "variant matches" are included among the category. if pl_placetype == div.type or pl_placetype == div.type:gsub("^.* ", "") then saw_match = true if pl_placetype ~= div.type then insert(variant_matches, div.type) end end end end if saw_match then -- Everything checks out, construct the category description. local placetype_desc = m_placetypes.get_placetype_display_form(pl_placetype, placetype.is_city and "city" or "noncity") if placetype_desc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end if not placetype_desc then internal_error("Unrecognized plural placetype %s, generated as the plural of %s, which " .. "was found as the placetype of capital placetype %s in label %s", pl_placetype, placetype, capital_cat, label) end local variant_match_text = "" if variant_matches[1] then local real_variant_match_descs = {} for i, variant_match in ipairs(variant_matches) do local variant_match_desc = m_placetypes.get_placetype_display_form(variant_match, placetype.is_city and "city" or "noncity") if variant_match_desc == nil then internal_error("Unrecognized variant match plural placetype %s, coming from " .. "place key %s, data %s in label %s", variant_match, key, spec, label) end if variant_match_desc then -- skip those for which the description is `false`, like `ABBREVIATION_OF states` -- in the United States divs. insert(real_variant_match_descs, variant_match_desc) end end if real_variant_match_descs[1] then variant_match_text = " (bao gồm " .. m_table.serialCommaJoin(real_variant_match_descs) .. ")" end end local desc = "Tên gọi {{{langname}}} về thủ đô của " .. placetype_desc .. variant_match_text .. " trong " .. fetch_or_construct_location_desc(group, key, spec) .. "." local full_placename, _ = m_locations.key_to_placename(group, key) local parents = {} if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = capital_cat, sort = key}) else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = capital_cat .. " của " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = capital_cat, sort = key}) end end insert(parents, key) return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = desc, breadcrumb = full_placename, parents = parents, } end end end end) local overriding_category_descriptions = { ["autonomous cities of Spain"] = "the [[w:Autonomous communities of Spain#Autonomous_cities|autonomous cities of Spain]]", ["regions of Greece"] = "the regions ([[periphery|peripheries]]) of [[Greece]]", ["regions of North Macedonia"] = "the regions ([[periphery|peripheries]]) of [[North Macedonia]]", ["subprefectures of Japan"] = "[[subprefecture]]s of [[Japan]]ese [[prefecture]]s", } -- Handler for specific political and misc (non-political) divisions of locations (polities, subpolities, cities, etc.), -- such as "provinces of the Philippines", "counties of Wales", "municipalities of Tocantins, Brazil", -- "boroughs of New York City", etc. This does not handle categories for generic placetypes (cities, rivers, etc.) of -- locations, which are handled by different handlers above. insert(handlers, function(label) -- The label comes with an initial capitalization but we have to check both lowercase-initial and capital-initial -- versions of the placetype to handle e.g. [[:Category:en:Indian reserves of Canada]]. for _, canon_label in ipairs { label, lcfirst(label) } do for _, minimal_placetype in ipairs { true, false } do local match_quantifier = minimal_placetype and "-" or "+" -- Some categories have two "of"s in them, and depending on the category, it's correct to do either a greedy -- ([[:Category:en:Abbreviations of states of the United States]], with placetype `abbreviations of states`) -- or non-greedy ([[:Category:en:Provinces of the Democratic Republic of the Congo]], with placetype -- `provinces`) match. We can't know in advance which is correct so we try both possibilities, doing the -- non-greedy one first as it seems more common (there are many locations with "of" in them, but currently -- only `abbreviations of states` occurs with a following location). local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (ở) (.*)$") end if placetype then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then local function find_placetype(divs) if divs then 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" 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 if placetype == pt_cat_as.type then local div_parent = pt_cat_as.container_parent_type if div_parent == nil then -- allow false div_parent = div.container_parent_type end if div_parent == nil then div_parent = placetype end return div_parent, pt_cat_as.prep or div.prep or "của" end end end end return nil end local div_parent, div_prep = find_placetype(spec.divs) if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs) end if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs_for_categorization) end if div_parent ~= nil then if div_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, div_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end local desc = overriding_category_descriptions[canon_label] if not desc then desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) end desc = desc .. " {{{langname}}}." local parents = {} insert(parents, key) if div_parent then -- div_parent may be `false` if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = placetype, sort = " " .. key}) if spec.placetype == "quốc gia" or m_table.contains(spec.placetype, "quốc gia") then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = div_parent .. " " .. in_of .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = placetype, sort = " " .. key}) end end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) labels["ngoại danh"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} [[exonym]]s.", parents = {"địa danh"}, } labels["đơn vị hành chính theo quốc gia cụ thể"] = { type = "chủ đề phân nhóm", description = "{{{langname}}} categories for political divisions of specific countries.", parents = {"địa danh"}, } -- Misc. FIXME: Remove the need for this. labels["nomes of Ancient Egypt"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} names of the [[nome]]s of [[Ancient Egypt]].", breadcrumb = "nomes", parents = {"Ancient Egypt"}, } -- Sui generis place categories (mostly cross-jurisdictional subcontinental/transcontinental regions) -- FIXME: Everything here has been moved from [[Module:category tree/topic/Earth]]. Most should be removed. labels["Atlantic Ocean"] = { type = "related-to", description = "default with the", parents = {"Earth"}, } labels["British Isles"] = { type = "related-to", description = "=the people, culture, or territory of [[Great Britain]], [[Ireland]], and other nearby islands", parents = {"Europe", "islands"}, } labels["European Union"] = { type = "related-to", description = "default with the", parents = {"Europe"}, } labels["Gascony"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Indian subcontinent"] = { type = "related-to", description = "default with the", parents = {"South Asia"}, } labels["Bengal"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Bengal]].", parents = {"Indian subcontinent"}, } labels["Kashmir"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Kashmir]].", parents = {"Indian subcontinent"}, } labels["Kashmir, India"] = { type = "related-to", description = "{{{langname}}} names of places in {{w|Kashmir, India}}.", parents = {"India", "Kashmir"}, } labels["Korea"] = { type = "related-to", description = "=the people, culture, or territory of [[Korea]]", parents = {"Asia"}, } labels["Languedoc"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Lapland"] = { type = "related-to", description = "=[[Lapland]], a region in northernmost Europe", parents = {"Europe", "Finland", "Norway", "Russia", "Sweden"}, } labels["Middle East"] = { type = "related-to", description = "default with the", parents = {"Africa", "Asia"}, } labels["Netherlands Antilles"] = { type = "related-to", description = "=the people, culture, or territory of the [[Netherlands Antilles]]", parents = {"Netherlands", "North America"}, } labels["Overseas France"] = { type = "related-to", description = "={{w|Overseas France}} ({{m|fr||France d'outre-mer}})", parents = {"France"}, } labels["Provence"] = { type = "related-to", description = "default", parents = {"Provence-Alpes-Côte d'Azur, France"}, } labels["Polish People's Republic"] = { type = "related-to", description = "default", parents = {"Poland"}, } labels["South Asia"] = { type = "related-to", description = "default", parents = {"Eurasia", "Asia"}, } return {LABELS = labels, HANDLERS = handlers} m8uvlh05g9tle2rx6fttu86076agy4c 2349947 2349940 2026-05-03T14:06:08Z Hiyuune 50834 2349947 Scribunto text/plain local labels = {} local handlers = {} local m_table = require("Module:table") local en_utilities_module = "Module:en-utilities" local string_utilities_module = "Module:string utilities" local m_locations = require("Module:place/locations") local m_placetypes = require("Module:place/placetypes") local placetype_data = m_placetypes.placetype_data local internal_error = m_locations.internal_error local dump = mw.dumpObject local insert = table.insert local concat = table.concat local is_callable = require("Module:fun").is_callable --[==[ intro: This module is part of the category tree code and contains code to generate the descriptions of place-related categories such as [[Category:de:Hokkaido Prefecture, Japan]], [[Category:es:Cities in France]], [[Category:pt:Municipalities of Tocantins, Brazil]], etc.). Note that this module doesn't actually create the categories; that must be done separately, with the text "{{tl|auto cat}}" as the definition of the category. (This process should automatically happen periodically for non-empty categories, because they will appear in [[Special:WantedCategories]] and a bot will periodically examine that list and create any needed category.) There are two ways that category descriptions are specified: (1) by manually adding an entry to the `labels` table, keyed by the label (the category minus the language code) with a value consisting of a Lua table specifying the description text and the category's parents; (2) through handlers (pieces of Lua code) added to the `handlers` list, which recognize labels of a specific type (e.g. `Cities in France`) and generate the appropriate specification for that label on-the-fly. See [[Module:place]] for an introduction to the terminology associated with places along with a list of all the relevant modules, along with for more specific information on types of toponyms and placetypes and how their categorization works. ]==] local function lcfirst(label) return mw.getContentLanguage():lcfirst(label) end local function gsub_literally(str, from, to) local m_strutils = require(string_utilities_module) return (str:gsub(m_strutils.pattern_escape(from), m_strutils.replacement_escape(to))) end local class_to_bare_category_parent = { ["polity"] = "tổ chức chính trị", ["subpolity"] = "political divisions", ["settlement"] = "settlements", ["non-admin settlement"] = "settlements", ["capital"] = "capital cities", ["natural feature"] = "natural features", ["man-made structure"] = "man-made structures", ["geographic region"] = "geographic and cultural areas", } local class_is_political_division = { ["polity"] = true, -- strictly false but there are placetypes ambiguous between polity and subpolity ["subpolity"] = true, ["settlement"] = true, ["non-admin settlement"] = false, ["capital"] = true, ["natural feature"] = false, ["man-made structure"] = false, ["geographic region"] = false, ["generic place"] = false, } local capital_cat_to_placetype = {} for placetype, capital_cat in pairs(m_placetypes.placetype_to_capital_cat) do capital_cat_to_placetype[capital_cat] = placetype end -- Handler for bare categories for all types of capitals. This needs to precede the handler for bare placetype -- categories as some of the types of capitals exist as placetypes as well. insert(handlers, function(label) label = lcfirst(label) local capital_placetype = capital_cat_to_placetype[label] if capital_placetype then local pl_placetype = m_placetypes.singularize_placetype(capital_placetype) local linkdesc = m_placetypes.get_placetype_display_form(pl_placetype, "top-level") if linkdesc == nil then internal_error("Unrecognized placetype %s when processing label %s", capital_placetype, label) end if linkdesc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = "{{{langname}}} names of [[capital]]s of " .. linkdesc .. ".", parents = {"capital cities"}, } end end) -- Handler for bare placetype categories. FIXME: Add wpcat= and commonscat= info. Previously we had it for various -- so-called "generic" placetypes, but sometimes the categories were wrong. insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local ptdesc, ptdata = m_placetypes.get_placetype_display_form(canon_label, "top-level", "return full") if ptdesc then local from_category_props = { from_category = true, no_split_qualifiers = true, } local bare_category_parent = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) local bare_category_parent = m_placetypes.get_placetype_prop(pt, "bare_category_parent") if bare_category_parent then return bare_category_parent end local class = m_placetypes.get_placetype_prop(pt, "class") if class then if class_to_bare_category_parent[class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", class, canon_label) end return class_to_bare_category_parent[class] end end, from_category_props) if not bare_category_parent then internal_error("Saw placetype %s without a `class` or `bare_category_parent` setting, either " .. "directly or through a fallback", canon_label) end local addl_bare_category_parents = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "addl_bare_category_parents") end, from_category_props) local bare_category_breadcrumb = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "bare_category_breadcrumb") end, from_category_props) if type(bare_category_parent) == "string" and bare_category_breadcrumb then bare_category_parent = {name = bare_category_parent, sort = bare_category_breadcrumb} end local parents = {bare_category_parent} if addl_bare_category_parents then m_table.extend(parents, addl_bare_category_parents) end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = "{{{langname}}} " .. ptdesc .. ".", breadcrumb = bare_category_breadcrumb, parents = parents, } elseif ptdesc == false then mw.log(("Display form for canon_label %s is false, can't categorize"):format(dump(canon_label))) end end end) local function fetch_primary_placetype(key, spec) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if not placetype then internal_error("No placetype specified or defaulted for key %s, spec %s", key, spec) end return placetype end --[==[ Construct an appropriately linked location based on the full or elliptical placename, preceded by `"the "`` if appropriate. Specifically: Fetch the full and elliptical_placenames. If they are the same, just link to the placename directly. Otherwise, check if the full placename exists; if so link to it. Otherwise, if the elliptical placename exists, link to it but display it as the full placename. Finally, if neither full placename nor elliptical placename exists, fall back to linking to the full placename. That way, we prefer full placenames to elliptical placenames if both or neither exist as Wiktionary entries, but if only one exists, we link to that one rather than have a red link. ]==] local function construct_linked_location(group, key, spec) local full_placename, elliptical_placename = m_locations.key_to_placename(group, key) local linked_placename if elliptical_placename ~= full_placename then local full_placename_title = mw.title.new(full_placename) if full_placename_title and full_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, full_placename) else local elliptical_placename_title = mw.title.new(elliptical_placename) if elliptical_placename_title and elliptical_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, elliptical_placename, full_placename) end end end return linked_placename or m_locations.construct_linked_placename(spec, full_placename) end --[==[ Construct the description of a location, including its container trail either to the end or until we encounter a `no_include_container_in_desc` setting. For example, for the city of [[Birmingham]], the description will read `"[[Birmingham]], a [[city]] in the [[West Midlands]] (which is a [[county]] of [[England]], which is a [[constituent country]] of the [[United Kingdom]], which is a [[country]] in [[Europe]])"`. FIXME: Possibly we should adopt the way city descriptions used to read, which was similar to `"the city of [[Birmingham]], in the county of the [[West Midlands]], in the [[constituent country]] of [[England]], in the [[country]] of the [[United Kingdom]], in [[Europe]]"`. ]==] local function construct_location_desc(group, key, spec) local parts = {} local function ins(txt) insert(parts, txt) end ins(construct_linked_location(group, key, spec)) local iteration = 0 local need_closing_paren = false local containers = {{group = group, key = key, spec = spec}} local container_iterator = m_locations.iterate_containers(group, key, spec) while true do iteration = iteration + 1 local include_container_in_desc = false for _, container in ipairs(containers) do if not container.spec.no_include_container_in_desc then include_container_in_desc = true break end end if not include_container_in_desc then break end local next_containers = container_iterator() if not next_containers then break end local is_former = nil for _, container in ipairs(containers) do local this_is_former = container.spec.is_former_place if is_former == nil then is_former = this_is_former elseif is_former ~= this_is_former then internal_error("When processing container trail of key %s, found a mixture of former and non-former " .. "containers: %s", key, containers) end end if #containers > 1 then local placetypes = {} local prepositions = {} for _, container in ipairs(containers) do local container_type = fetch_primary_placetype(container.key, container.spec) m_table.insertIfNot(placetypes, m_placetypes.singularize_placetype(container_type)) m_table.insertIfNot(prepositions, m_placetypes.get_placetype_entry_preposition(container_type)) end if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which are ") need_closing_paren = true else ins(", which are ") end if is_former then ins("former ") end ins(m_table.serialCommaJoin(placetypes)) ins(" ") ins(concat(prepositions, "/")) else if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which is ") need_closing_paren = true else ins(", which is ") end local container_type = fetch_primary_placetype(containers[1].key, containers[1].spec) if is_former then ins("a former ") else ins(m_placetypes.get_placetype_article(container_type)) ins(" ") end ins(container_type) ins(" ") ins(m_placetypes.get_placetype_entry_preposition(container_type)) end ins(" ") first_container = false containers = next_containers local container_locations = {} for _, container in ipairs(containers) do insert(container_locations, construct_linked_location(container.group, container.key, container.spec)) end ins(m_table.serialCommaJoin(container_locations)) end if need_closing_paren then ins(")") end return concat(parts) end -- Fetch or construct the description of the location specified by `key`. If the `keydesc` property is specified, -- use it directly but substitute any occurrence of `+++` with the auto-constructed location description, which -- mentions the placename corresponding to the key, its placetype and container, and repeats the description up -- the container trail until either there are no more containers or (more usually) the `no_include_container_in_desc` -- setting is found (which is set on all continents and continent-level regions). 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 val = val or "+++" if val:find("%+%+%+") then val = gsub_literally(val, "+++", construct_location_desc(group, key, spec)) end return val end local function normalize_cat_as(cat_as, div) if type(cat_as) ~= "table" or cat_as.type then cat_as = {cat_as} end local ret_cat_as = {} for _, pt_cat_as in ipairs(cat_as) do if type(pt_cat_as) == "string" then pt_cat_as = {type = pt_cat_as} end insert(ret_cat_as, {type = pt_cat_as.type, prep = pt_cat_as.prep or div.prep or "của"}) end return ret_cat_as end -- Find the specified plural placetype among the divs for a given known location. Return a list of cat_as specs, where -- each spec is of the form {type = "PLURAL_PLACETYPE", prep = "PREP"} indicating the plural placetype to use when -- categorizing and the preposition to follow. local function find_placetype_cat_as(divs, pl_placetype) if divs then if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) == "string" then div = {type = div} end if div.type == pl_placetype then local cat_as = div.cat_as or div.type return normalize_cat_as(cat_as, div) end end end return nil end -- Handler for bare placename categories for known locations in `locations` in [[Module:place/locations]]. insert(handlers, function(label) for _, canon_label in ipairs { label, lcfirst(label) } do local group, spec = m_locations.find_canonical_key(canon_label) if group then -- wp= defaults to true (Wikipedia article matches location's full placename) local wp = spec.wp if wp == nil then wp = true end -- wpcat= defaults to wp= (if Wikipedia article has its own name, Wikipedia category and Commons category -- generally follow) local wpcat = spec.wpcat if wpcat == nil then wpcat = wp end -- commonscat= defaults to wpcat= (if Wikipedia category has its own name, Commons category generally -- follows) local commonscat = spec.commonscat if commonscat == nil then commonscat = wpcat end local parents = {} local bare_label_parents = spec.overriding_bare_label_parents local container_iterator = m_locations.iterate_containers(group, canon_label, spec) local containers = container_iterator() if not bare_label_parents then bare_label_parents = {"+++"} end local full_location_placename, elliptical_location_placename = m_locations.key_to_placename(group, canon_label) local full_container_placename if containers then full_container_placename, _ = m_locations.key_to_placename(containers[1].group, containers[1].key) end local inserted_containers = false for _, parent in ipairs(bare_label_parents) do if parent == "+++" then parent = "PL_PLACETYPE PREP CONTAINER" end if parent:find("CONTAINER") then if not containers then internal_error("Parent category %s needs the container of %s but no containers specified: %s", parent, canon_label, spec) end local location_type = fetch_primary_placetype(canon_label, spec) local pl_location_type = m_placetypes.singularize_placetype(location_type) for _, container in ipairs(containers) do local per_container_parent = parent local cat_as_list if per_container_parent:find("PL_PLACETYPE") then if spec.bare_category_parent_type then cat_as_list = normalize_cat_as(spec.bare_category_parent_type, spec) else cat_as_list = find_placetype_cat_as(container.spec.divs, pl_location_type) or find_placetype_cat_as(container.spec.addl_divs, pl_location_type) end end if not cat_as_list then local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(location_type, "from category") if not canon_placetype or not (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then internal_error("Unable to locate plural location type %s among the divs or addl_divs " .. "for container key %s spec %s, and the location type is either not in placetype_data or " .. "not identified as a generic placetype", pl_location_type, container.key, container.spec) end cat_as_list = {{type = pl_location_type, prep = m_placetypes.get_placetype_entry_preposition(location_type)}} end local prefixed_key = m_placetypes.get_prefixed_key(container.key, container.spec) per_container_parent = gsub_literally(per_container_parent, "CONTAINER", prefixed_key) for _, cat_as in ipairs(cat_as_list) do local per_container_per_placetype_parent = per_container_parent per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PL_PLACETYPE", cat_as.type) per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PREP", cat_as.prep) m_table.insertIfNot(parents, per_container_per_placetype_parent) end end inserted_containers = true else m_table.insertIfNot(parents, parent) end end if not inserted_containers and containers then -- If we didn't insert the containers above in some form, insert them now as bare categories. Note that -- this may be different categories from the container categories inserted above. for _, container in ipairs(containers) do m_table.insertIfNot(parents, container.key) end end if spec.addl_parents then for _, parent in ipairs(spec.addl_parents) do m_table.insertIfNot(parents, parent) end end local function format_boxval(val, specname) if val == true then val = "%l" end if type(val) == "string" then val = gsub_literally(val, "%l", full_location_placename) val = gsub_literally(val, "%e", elliptical_location_placename) if val:find("%%c") then if not full_container_placename then internal_error("Wikipedia/Commons spec %s = %s has %%c in it but key %s has no " .. "containers: %s", specname, val, canon_label, spec) end val = gsub_literally(val, "%c", full_container_placename) end end return val end local description = spec.fulldesc or ( "{{{langname}}} terms related to the people, culture, or territory of " .. fetch_or_construct_location_desc(group, canon_label, spec) .. ".") local full_placename, _ = m_locations.key_to_placename(group, canon_label) return { type = "chủ đề thuộc nhóm phân loại", description = description, breadcrumb = full_placename, parents = parents, wp = format_boxval(wp, "wp"), wpcat = format_boxval(wpcat, "wpcat"), commonscat = format_boxval(commonscat, "commonscat"), } end end end) local function find_canonical_key_from_place(place, canon_label) local has_the = false local key if place:find("^ ") then key = place:gsub("^ ", "") has_the = true else key = place end local group, spec = m_locations.find_canonical_key(key) if group then local requires_the = spec.the or false if has_the ~= requires_the then if has_the then mw.log(("Mismatch in category name '%s', has 'the' in the category when it should not"):format( canon_label)) else mw.log(("Mismatch in category name '%s', should have 'the' in the category but does not"): format(canon_label)) end return nil end return group, key, spec end return nil end -- Handler for generic placetypes (those whose categories are added through category generation handlers or through -- explicit category specs in the placetype data) for known locations in [[Module:place/locations]]. All such -- placetypes have either a `generic_before_non_cities` setting (meaning they can occur before non-city locations) or -- `generic_before_cities` setting (meaning they can occur before cities), or both. Examples of such categories are -- "cities in the Bahamas" or "rivers in Western Australia, Australia", or (for city locations) -- "neighbourhoods of Hong Kong" or "places in Melbourne". insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") end if placetype then local normalized_placetype = placetype == "neighbourhoods" and "neighborhoods" or placetype local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(normalized_placetype, "from category") if canon_placetype and (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then -- Check whether the location uses British spelling, but also check all containers, because -- it's too hard to keep in sync the `british_spelling` setting for locations at all different -- levels (e.g. cities of various countries, first and second level administrative division, etc.), -- so we just set it at top level on the country. local uses_british_spelling = spec.british_spelling if uses_british_spelling == nil then for containers in m_locations.iterate_containers(group, key, spec) do local must_outer_break = false for _, container in ipairs(containers) 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 local allow_cat = true if placetype == "neighborhoods" and uses_british_spelling or placetype == "neighbourhoods" and not uses_british_spelling then mw.log(("Mismatch in spelling of placetype '%s' in category '%s', should be '%s'"):format( placetype, canon_label, uses_british_spelling and "neighbourhoods" or "neighborhoods")) allow_cat = false end if spec.is_former_place and placetype ~= "địa danh" then allow_cat = false end local expected_prep if spec.is_city then expected_prep = ptdata.generic_before_cities else expected_prep = ptdata.generic_before_non_cities end if not expected_prep then allow_cat = false end if allow_cat then if expected_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, expected_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) desc = "{{{langname}}} " .. desc .. "." local parents = {} insert(parents, key) if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = normalized_placetype, sort = key}) if spec.placetype == "quốc gia" or m_table.contains(spec.placetype, "quốc gia") then local category_class = m_placetypes.get_equiv_placetype_prop(normalized_placetype, function(pt) return m_placetypes.get_placetype_prop(pt, "class") end, { from_category = true, no_split_qualifiers = true, }) if not category_class then internal_error("Saw placetype %s that is either unknown or has no `class` " .. "setting in `placetype_data`", normalized_placetype) end if class_is_political_division[category_class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", category_class, normalized_placetype) end if class_is_political_division[category_class] then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do local container_prep if container.spec.is_city then container_prep = ptdata.generic_before_cities else container_prep = ptdata.generic_before_non_cities end if not container_prep then internal_error("For container key %s spec %s defines is_city = %s but " .. "there is no corresponding `generic_before_*` setting in the " .. "placedata for placetype %s", container.key, container.spec, container.spec.is_city, placetype) end insert(parents, { name = placetype .. " " .. container_prep .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = normalized_placetype, sort = key}) end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) -- Handler for "state capitals of the United States", "provincial capitals of Canada", etc. This must precede the next -- handler for specific political and misc (non-political) divisions of polities and subpolities, such as -- "provinces of the Philippines", because "departmental capitals" is listed in cat_as for French prefectures and so -- will trigger an error if that handler runs before this one. insert(handlers, function(label) label = lcfirst(label) local capital_cat, place = label:match("^([a-z%- ]- capitals) of (.*)$") -- Make sure we recognize the type of capital. if place and capital_cat_to_placetype[capital_cat] then local placetype = capital_cat_to_placetype[capital_cat] local pl_placetype = m_placetypes.singularize_placetype(placetype) -- Locate the container, fetch its known political divisions, and make sure the placetype corresponding to the -- type of capital is among the list. local group, key, spec = find_canonical_key_from_place(place, canon_label) if group and (spec.divs or spec.addl_divs) then local saw_match = false local variant_matches = {} 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 -- HACK. Currently if we don't find a match for the placetype, we map e.g. 'autonomous region' -- -> 'regional capitals' and 'union territory' -> 'territorial capitals'. When encountering a -- political division like 'autonomous region' or 'union territory', chop off everything up -- through a space to make things match. To make this clearer, we record all such -- "variant match" cases, and down below we insert a note into the category text indicating that -- such "variant matches" are included among the category. if pl_placetype == div.type or pl_placetype == div.type:gsub("^.* ", "") then saw_match = true if pl_placetype ~= div.type then insert(variant_matches, div.type) end end end end if saw_match then -- Everything checks out, construct the category description. local placetype_desc = m_placetypes.get_placetype_display_form(pl_placetype, placetype.is_city and "city" or "noncity") if placetype_desc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end if not placetype_desc then internal_error("Unrecognized plural placetype %s, generated as the plural of %s, which " .. "was found as the placetype of capital placetype %s in label %s", pl_placetype, placetype, capital_cat, label) end local variant_match_text = "" if variant_matches[1] then local real_variant_match_descs = {} for i, variant_match in ipairs(variant_matches) do local variant_match_desc = m_placetypes.get_placetype_display_form(variant_match, placetype.is_city and "city" or "noncity") if variant_match_desc == nil then internal_error("Unrecognized variant match plural placetype %s, coming from " .. "place key %s, data %s in label %s", variant_match, key, spec, label) end if variant_match_desc then -- skip those for which the description is `false`, like `ABBREVIATION_OF states` -- in the United States divs. insert(real_variant_match_descs, variant_match_desc) end end if real_variant_match_descs[1] then variant_match_text = " (bao gồm " .. m_table.serialCommaJoin(real_variant_match_descs) .. ")" end end local desc = "Tên gọi {{{langname}}} về thủ đô của " .. placetype_desc .. variant_match_text .. " trong " .. fetch_or_construct_location_desc(group, key, spec) .. "." local full_placename, _ = m_locations.key_to_placename(group, key) local parents = {} if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = capital_cat, sort = key}) else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = capital_cat .. " của " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = capital_cat, sort = key}) end end insert(parents, key) return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = desc, breadcrumb = full_placename, parents = parents, } end end end end) local overriding_category_descriptions = { ["autonomous cities of Spain"] = "the [[w:Autonomous communities of Spain#Autonomous_cities|autonomous cities of Spain]]", ["regions of Greece"] = "the regions ([[periphery|peripheries]]) of [[Greece]]", ["regions of North Macedonia"] = "the regions ([[periphery|peripheries]]) of [[North Macedonia]]", ["subprefectures of Japan"] = "[[subprefecture]]s of [[Japan]]ese [[prefecture]]s", } -- Handler for specific political and misc (non-political) divisions of locations (polities, subpolities, cities, etc.), -- such as "provinces of the Philippines", "counties of Wales", "municipalities of Tocantins, Brazil", -- "boroughs of New York City", etc. This does not handle categories for generic placetypes (cities, rivers, etc.) of -- locations, which are handled by different handlers above. insert(handlers, function(label) -- The label comes with an initial capitalization but we have to check both lowercase-initial and capital-initial -- versions of the placetype to handle e.g. [[:Category:en:Indian reserves of Canada]]. for _, canon_label in ipairs { label, lcfirst(label) } do for _, minimal_placetype in ipairs { true, false } do local match_quantifier = minimal_placetype and "-" or "+" -- Some categories have two "of"s in them, and depending on the category, it's correct to do either a greedy -- ([[:Category:en:Abbreviations of states of the United States]], with placetype `abbreviations of states`) -- or non-greedy ([[:Category:en:Provinces of the Democratic Republic of the Congo]], with placetype -- `provinces`) match. We can't know in advance which is correct so we try both possibilities, doing the -- non-greedy one first as it seems more common (there are many locations with "of" in them, but currently -- only `abbreviations of states` occurs with a following location). local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (ở) (.*)$") end if placetype then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then local function find_placetype(divs) if divs then 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" 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 if placetype == pt_cat_as.type then local div_parent = pt_cat_as.container_parent_type if div_parent == nil then -- allow false div_parent = div.container_parent_type end if div_parent == nil then div_parent = placetype end return div_parent, pt_cat_as.prep or div.prep or "của" end end end end return nil end local div_parent, div_prep = find_placetype(spec.divs) if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs) end if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs_for_categorization) end if div_parent ~= nil then if div_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, div_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end local desc = overriding_category_descriptions[canon_label] if not desc then desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) end desc = desc .. " {{{langname}}}." local parents = {} insert(parents, key) if div_parent then -- div_parent may be `false` if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = placetype, sort = " " .. key}) if spec.placetype == "quốc gia" or m_table.contains(spec.placetype, "quốc gia") then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = div_parent .. " " .. in_of .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = placetype, sort = " " .. key}) end end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) labels["ngoại danh"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} [[exonym]]s.", parents = {"địa danh"}, } labels["đơn vị hành chính theo quốc gia cụ thể"] = { type = "chủ đề phân nhóm", description = "{{{langname}}} categories for political divisions of specific countries.", parents = {"địa danh"}, } -- Misc. FIXME: Remove the need for this. labels["nomes of Ancient Egypt"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} names of the [[nome]]s of [[Ancient Egypt]].", breadcrumb = "nomes", parents = {"Ancient Egypt"}, } -- Sui generis place categories (mostly cross-jurisdictional subcontinental/transcontinental regions) -- FIXME: Everything here has been moved from [[Module:category tree/topic/Earth]]. Most should be removed. labels["Atlantic Ocean"] = { type = "related-to", description = "default with the", parents = {"Earth"}, } labels["British Isles"] = { type = "related-to", description = "=the people, culture, or territory of [[Great Britain]], [[Ireland]], and other nearby islands", parents = {"Europe", "islands"}, } labels["European Union"] = { type = "related-to", description = "default with the", parents = {"Europe"}, } labels["Gascony"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Indian subcontinent"] = { type = "related-to", description = "default with the", parents = {"South Asia"}, } labels["Bengal"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Bengal]].", parents = {"Indian subcontinent"}, } labels["Kashmir"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Kashmir]].", parents = {"Indian subcontinent"}, } labels["Kashmir, India"] = { type = "related-to", description = "{{{langname}}} names of places in {{w|Kashmir, India}}.", parents = {"India", "Kashmir"}, } labels["Korea"] = { type = "related-to", description = "=the people, culture, or territory of [[Korea]]", parents = {"Asia"}, } labels["Languedoc"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Lapland"] = { type = "related-to", description = "=[[Lapland]], a region in northernmost Europe", parents = {"Europe", "Finland", "Norway", "Russia", "Sweden"}, } labels["Middle East"] = { type = "related-to", description = "default with the", parents = {"Africa", "Asia"}, } labels["Netherlands Antilles"] = { type = "related-to", description = "=the people, culture, or territory of the [[Netherlands Antilles]]", parents = {"Netherlands", "North America"}, } labels["Overseas France"] = { type = "related-to", description = "={{w|Overseas France}} ({{m|fr||France d'outre-mer}})", parents = {"France"}, } labels["Provence"] = { type = "related-to", description = "default", parents = {"Provence-Alpes-Côte d'Azur, France"}, } labels["Polish People's Republic"] = { type = "related-to", description = "default", parents = {"Poland"}, } labels["South Asia"] = { type = "related-to", description = "default", parents = {"Eurasia", "Asia"}, } return {LABELS = labels, HANDLERS = handlers} rpkg6qn2oepufyieuc15iq7xdxpwkym 2349948 2349947 2026-05-03T14:06:26Z Hiyuune 50834 Restored revision 2349940 by [[Special:Contributions/Hiyuune|Hiyuune]] ([[en:w:User:BrandonXLF/Restorer|Restorer]]) 2349948 Scribunto text/plain local labels = {} local handlers = {} local m_table = require("Module:table") local en_utilities_module = "Module:en-utilities" local string_utilities_module = "Module:string utilities" local m_locations = require("Module:place/locations") local m_placetypes = require("Module:place/placetypes") local placetype_data = m_placetypes.placetype_data local internal_error = m_locations.internal_error local dump = mw.dumpObject local insert = table.insert local concat = table.concat local is_callable = require("Module:fun").is_callable --[==[ intro: This module is part of the category tree code and contains code to generate the descriptions of place-related categories such as [[Category:de:Hokkaido Prefecture, Japan]], [[Category:es:Cities in France]], [[Category:pt:Municipalities of Tocantins, Brazil]], etc.). Note that this module doesn't actually create the categories; that must be done separately, with the text "{{tl|auto cat}}" as the definition of the category. (This process should automatically happen periodically for non-empty categories, because they will appear in [[Special:WantedCategories]] and a bot will periodically examine that list and create any needed category.) There are two ways that category descriptions are specified: (1) by manually adding an entry to the `labels` table, keyed by the label (the category minus the language code) with a value consisting of a Lua table specifying the description text and the category's parents; (2) through handlers (pieces of Lua code) added to the `handlers` list, which recognize labels of a specific type (e.g. `Cities in France`) and generate the appropriate specification for that label on-the-fly. See [[Module:place]] for an introduction to the terminology associated with places along with a list of all the relevant modules, along with for more specific information on types of toponyms and placetypes and how their categorization works. ]==] local function lcfirst(label) return mw.getContentLanguage():lcfirst(label) end local function gsub_literally(str, from, to) local m_strutils = require(string_utilities_module) return (str:gsub(m_strutils.pattern_escape(from), m_strutils.replacement_escape(to))) end local class_to_bare_category_parent = { ["polity"] = "tổ chức chính trị", ["subpolity"] = "political divisions", ["settlement"] = "settlements", ["non-admin settlement"] = "settlements", ["capital"] = "capital cities", ["natural feature"] = "natural features", ["man-made structure"] = "man-made structures", ["geographic region"] = "geographic and cultural areas", } local class_is_political_division = { ["polity"] = true, -- strictly false but there are placetypes ambiguous between polity and subpolity ["subpolity"] = true, ["settlement"] = true, ["non-admin settlement"] = false, ["capital"] = true, ["natural feature"] = false, ["man-made structure"] = false, ["geographic region"] = false, ["generic place"] = false, } local capital_cat_to_placetype = {} for placetype, capital_cat in pairs(m_placetypes.placetype_to_capital_cat) do capital_cat_to_placetype[capital_cat] = placetype end -- Handler for bare categories for all types of capitals. This needs to precede the handler for bare placetype -- categories as some of the types of capitals exist as placetypes as well. insert(handlers, function(label) label = lcfirst(label) local capital_placetype = capital_cat_to_placetype[label] if capital_placetype then local pl_placetype = m_placetypes.pluralize_placetype(capital_placetype) local linkdesc = m_placetypes.get_placetype_display_form(pl_placetype, "top-level") if linkdesc == nil then internal_error("Unrecognized placetype %s when processing label %s", capital_placetype, label) end if linkdesc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = "{{{langname}}} names of [[capital]]s of " .. linkdesc .. ".", parents = {"capital cities"}, } end end) -- Handler for bare placetype categories. FIXME: Add wpcat= and commonscat= info. Previously we had it for various -- so-called "generic" placetypes, but sometimes the categories were wrong. insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local ptdesc, ptdata = m_placetypes.get_placetype_display_form(canon_label, "top-level", "return full") if ptdesc then local from_category_props = { from_category = true, no_split_qualifiers = true, } local bare_category_parent = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) local bare_category_parent = m_placetypes.get_placetype_prop(pt, "bare_category_parent") if bare_category_parent then return bare_category_parent end local class = m_placetypes.get_placetype_prop(pt, "class") if class then if class_to_bare_category_parent[class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", class, canon_label) end return class_to_bare_category_parent[class] end end, from_category_props) if not bare_category_parent then internal_error("Saw placetype %s without a `class` or `bare_category_parent` setting, either " .. "directly or through a fallback", canon_label) end local addl_bare_category_parents = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "addl_bare_category_parents") end, from_category_props) local bare_category_breadcrumb = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "bare_category_breadcrumb") end, from_category_props) if type(bare_category_parent) == "string" and bare_category_breadcrumb then bare_category_parent = {name = bare_category_parent, sort = bare_category_breadcrumb} end local parents = {bare_category_parent} if addl_bare_category_parents then m_table.extend(parents, addl_bare_category_parents) end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = "{{{langname}}} " .. ptdesc .. ".", breadcrumb = bare_category_breadcrumb, parents = parents, } elseif ptdesc == false then mw.log(("Display form for canon_label %s is false, can't categorize"):format(dump(canon_label))) end end end) local function fetch_primary_placetype(key, spec) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if not placetype then internal_error("No placetype specified or defaulted for key %s, spec %s", key, spec) end return placetype end --[==[ Construct an appropriately linked location based on the full or elliptical placename, preceded by `"the "`` if appropriate. Specifically: Fetch the full and elliptical_placenames. If they are the same, just link to the placename directly. Otherwise, check if the full placename exists; if so link to it. Otherwise, if the elliptical placename exists, link to it but display it as the full placename. Finally, if neither full placename nor elliptical placename exists, fall back to linking to the full placename. That way, we prefer full placenames to elliptical placenames if both or neither exist as Wiktionary entries, but if only one exists, we link to that one rather than have a red link. ]==] local function construct_linked_location(group, key, spec) local full_placename, elliptical_placename = m_locations.key_to_placename(group, key) local linked_placename if elliptical_placename ~= full_placename then local full_placename_title = mw.title.new(full_placename) if full_placename_title and full_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, full_placename) else local elliptical_placename_title = mw.title.new(elliptical_placename) if elliptical_placename_title and elliptical_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, elliptical_placename, full_placename) end end end return linked_placename or m_locations.construct_linked_placename(spec, full_placename) end --[==[ Construct the description of a location, including its container trail either to the end or until we encounter a `no_include_container_in_desc` setting. For example, for the city of [[Birmingham]], the description will read `"[[Birmingham]], a [[city]] in the [[West Midlands]] (which is a [[county]] of [[England]], which is a [[constituent country]] of the [[United Kingdom]], which is a [[country]] in [[Europe]])"`. FIXME: Possibly we should adopt the way city descriptions used to read, which was similar to `"the city of [[Birmingham]], in the county of the [[West Midlands]], in the [[constituent country]] of [[England]], in the [[country]] of the [[United Kingdom]], in [[Europe]]"`. ]==] local function construct_location_desc(group, key, spec) local parts = {} local function ins(txt) insert(parts, txt) end ins(construct_linked_location(group, key, spec)) local iteration = 0 local need_closing_paren = false local containers = {{group = group, key = key, spec = spec}} local container_iterator = m_locations.iterate_containers(group, key, spec) while true do iteration = iteration + 1 local include_container_in_desc = false for _, container in ipairs(containers) do if not container.spec.no_include_container_in_desc then include_container_in_desc = true break end end if not include_container_in_desc then break end local next_containers = container_iterator() if not next_containers then break end local is_former = nil for _, container in ipairs(containers) do local this_is_former = container.spec.is_former_place if is_former == nil then is_former = this_is_former elseif is_former ~= this_is_former then internal_error("When processing container trail of key %s, found a mixture of former and non-former " .. "containers: %s", key, containers) end end if #containers > 1 then local placetypes = {} local prepositions = {} for _, container in ipairs(containers) do local container_type = fetch_primary_placetype(container.key, container.spec) m_table.insertIfNot(placetypes, m_placetypes.pluralize_placetype(container_type)) m_table.insertIfNot(prepositions, m_placetypes.get_placetype_entry_preposition(container_type)) end if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which are ") need_closing_paren = true else ins(", which are ") end if is_former then ins("former ") end ins(m_table.serialCommaJoin(placetypes)) ins(" ") ins(concat(prepositions, "/")) else if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which is ") need_closing_paren = true else ins(", which is ") end local container_type = fetch_primary_placetype(containers[1].key, containers[1].spec) if is_former then ins("a former ") else ins(m_placetypes.get_placetype_article(container_type)) ins(" ") end ins(container_type) ins(" ") ins(m_placetypes.get_placetype_entry_preposition(container_type)) end ins(" ") first_container = false containers = next_containers local container_locations = {} for _, container in ipairs(containers) do insert(container_locations, construct_linked_location(container.group, container.key, container.spec)) end ins(m_table.serialCommaJoin(container_locations)) end if need_closing_paren then ins(")") end return concat(parts) end -- Fetch or construct the description of the location specified by `key`. If the `keydesc` property is specified, -- use it directly but substitute any occurrence of `+++` with the auto-constructed location description, which -- mentions the placename corresponding to the key, its placetype and container, and repeats the description up -- the container trail until either there are no more containers or (more usually) the `no_include_container_in_desc` -- setting is found (which is set on all continents and continent-level regions). 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 val = val or "+++" if val:find("%+%+%+") then val = gsub_literally(val, "+++", construct_location_desc(group, key, spec)) end return val end local function normalize_cat_as(cat_as, div) if type(cat_as) ~= "table" or cat_as.type then cat_as = {cat_as} end local ret_cat_as = {} for _, pt_cat_as in ipairs(cat_as) do if type(pt_cat_as) == "string" then pt_cat_as = {type = pt_cat_as} end insert(ret_cat_as, {type = pt_cat_as.type, prep = pt_cat_as.prep or div.prep or "của"}) end return ret_cat_as end -- Find the specified plural placetype among the divs for a given known location. Return a list of cat_as specs, where -- each spec is of the form {type = "PLURAL_PLACETYPE", prep = "PREP"} indicating the plural placetype to use when -- categorizing and the preposition to follow. local function find_placetype_cat_as(divs, pl_placetype) if divs then if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) == "string" then div = {type = div} end if div.type == pl_placetype then local cat_as = div.cat_as or div.type return normalize_cat_as(cat_as, div) end end end return nil end -- Handler for bare placename categories for known locations in `locations` in [[Module:place/locations]]. insert(handlers, function(label) for _, canon_label in ipairs { label, lcfirst(label) } do local group, spec = m_locations.find_canonical_key(canon_label) if group then -- wp= defaults to true (Wikipedia article matches location's full placename) local wp = spec.wp if wp == nil then wp = true end -- wpcat= defaults to wp= (if Wikipedia article has its own name, Wikipedia category and Commons category -- generally follow) local wpcat = spec.wpcat if wpcat == nil then wpcat = wp end -- commonscat= defaults to wpcat= (if Wikipedia category has its own name, Commons category generally -- follows) local commonscat = spec.commonscat if commonscat == nil then commonscat = wpcat end local parents = {} local bare_label_parents = spec.overriding_bare_label_parents local container_iterator = m_locations.iterate_containers(group, canon_label, spec) local containers = container_iterator() if not bare_label_parents then bare_label_parents = {"+++"} end local full_location_placename, elliptical_location_placename = m_locations.key_to_placename(group, canon_label) local full_container_placename if containers then full_container_placename, _ = m_locations.key_to_placename(containers[1].group, containers[1].key) end local inserted_containers = false for _, parent in ipairs(bare_label_parents) do if parent == "+++" then parent = "PL_PLACETYPE PREP CONTAINER" end if parent:find("CONTAINER") then if not containers then internal_error("Parent category %s needs the container of %s but no containers specified: %s", parent, canon_label, spec) end local location_type = fetch_primary_placetype(canon_label, spec) local pl_location_type = m_placetypes.pluralize_placetype(location_type) for _, container in ipairs(containers) do local per_container_parent = parent local cat_as_list if per_container_parent:find("PL_PLACETYPE") then if spec.bare_category_parent_type then cat_as_list = normalize_cat_as(spec.bare_category_parent_type, spec) else cat_as_list = find_placetype_cat_as(container.spec.divs, pl_location_type) or find_placetype_cat_as(container.spec.addl_divs, pl_location_type) end end if not cat_as_list then local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(location_type, "from category") if not canon_placetype or not (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then internal_error("Unable to locate plural location type %s among the divs or addl_divs " .. "for container key %s spec %s, and the location type is either not in placetype_data or " .. "not identified as a generic placetype", pl_location_type, container.key, container.spec) end cat_as_list = {{type = pl_location_type, prep = m_placetypes.get_placetype_entry_preposition(location_type)}} end local prefixed_key = m_placetypes.get_prefixed_key(container.key, container.spec) per_container_parent = gsub_literally(per_container_parent, "CONTAINER", prefixed_key) for _, cat_as in ipairs(cat_as_list) do local per_container_per_placetype_parent = per_container_parent per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PL_PLACETYPE", cat_as.type) per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PREP", cat_as.prep) m_table.insertIfNot(parents, per_container_per_placetype_parent) end end inserted_containers = true else m_table.insertIfNot(parents, parent) end end if not inserted_containers and containers then -- If we didn't insert the containers above in some form, insert them now as bare categories. Note that -- this may be different categories from the container categories inserted above. for _, container in ipairs(containers) do m_table.insertIfNot(parents, container.key) end end if spec.addl_parents then for _, parent in ipairs(spec.addl_parents) do m_table.insertIfNot(parents, parent) end end local function format_boxval(val, specname) if val == true then val = "%l" end if type(val) == "string" then val = gsub_literally(val, "%l", full_location_placename) val = gsub_literally(val, "%e", elliptical_location_placename) if val:find("%%c") then if not full_container_placename then internal_error("Wikipedia/Commons spec %s = %s has %%c in it but key %s has no " .. "containers: %s", specname, val, canon_label, spec) end val = gsub_literally(val, "%c", full_container_placename) end end return val end local description = spec.fulldesc or ( "{{{langname}}} terms related to the people, culture, or territory of " .. fetch_or_construct_location_desc(group, canon_label, spec) .. ".") local full_placename, _ = m_locations.key_to_placename(group, canon_label) return { type = "chủ đề thuộc nhóm phân loại", description = description, breadcrumb = full_placename, parents = parents, wp = format_boxval(wp, "wp"), wpcat = format_boxval(wpcat, "wpcat"), commonscat = format_boxval(commonscat, "commonscat"), } end end end) local function find_canonical_key_from_place(place, canon_label) local has_the = false local key if place:find("^ ") then key = place:gsub("^ ", "") has_the = true else key = place end local group, spec = m_locations.find_canonical_key(key) if group then local requires_the = spec.the or false if has_the ~= requires_the then if has_the then mw.log(("Mismatch in category name '%s', has 'the' in the category when it should not"):format( canon_label)) else mw.log(("Mismatch in category name '%s', should have 'the' in the category but does not"): format(canon_label)) end return nil end return group, key, spec end return nil end -- Handler for generic placetypes (those whose categories are added through category generation handlers or through -- explicit category specs in the placetype data) for known locations in [[Module:place/locations]]. All such -- placetypes have either a `generic_before_non_cities` setting (meaning they can occur before non-city locations) or -- `generic_before_cities` setting (meaning they can occur before cities), or both. Examples of such categories are -- "cities in the Bahamas" or "rivers in Western Australia, Australia", or (for city locations) -- "neighbourhoods of Hong Kong" or "places in Melbourne". insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") end if placetype then local normalized_placetype = placetype == "neighbourhoods" and "neighborhoods" or placetype local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(normalized_placetype, "from category") if canon_placetype and (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then -- Check whether the location uses British spelling, but also check all containers, because -- it's too hard to keep in sync the `british_spelling` setting for locations at all different -- levels (e.g. cities of various countries, first and second level administrative division, etc.), -- so we just set it at top level on the country. local uses_british_spelling = spec.british_spelling if uses_british_spelling == nil then for containers in m_locations.iterate_containers(group, key, spec) do local must_outer_break = false for _, container in ipairs(containers) 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 local allow_cat = true if placetype == "neighborhoods" and uses_british_spelling or placetype == "neighbourhoods" and not uses_british_spelling then mw.log(("Mismatch in spelling of placetype '%s' in category '%s', should be '%s'"):format( placetype, canon_label, uses_british_spelling and "neighbourhoods" or "neighborhoods")) allow_cat = false end if spec.is_former_place and placetype ~= "địa danh" then allow_cat = false end local expected_prep if spec.is_city then expected_prep = ptdata.generic_before_cities else expected_prep = ptdata.generic_before_non_cities end if not expected_prep then allow_cat = false end if allow_cat then if expected_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, expected_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) desc = "{{{langname}}} " .. desc .. "." local parents = {} insert(parents, key) if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = normalized_placetype, sort = key}) if spec.placetype == "quốc gia" or m_table.contains(spec.placetype, "quốc gia") then local category_class = m_placetypes.get_equiv_placetype_prop(normalized_placetype, function(pt) return m_placetypes.get_placetype_prop(pt, "class") end, { from_category = true, no_split_qualifiers = true, }) if not category_class then internal_error("Saw placetype %s that is either unknown or has no `class` " .. "setting in `placetype_data`", normalized_placetype) end if class_is_political_division[category_class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", category_class, normalized_placetype) end if class_is_political_division[category_class] then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do local container_prep if container.spec.is_city then container_prep = ptdata.generic_before_cities else container_prep = ptdata.generic_before_non_cities end if not container_prep then internal_error("For container key %s spec %s defines is_city = %s but " .. "there is no corresponding `generic_before_*` setting in the " .. "placedata for placetype %s", container.key, container.spec, container.spec.is_city, placetype) end insert(parents, { name = placetype .. " " .. container_prep .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = normalized_placetype, sort = key}) end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) -- Handler for "state capitals of the United States", "provincial capitals of Canada", etc. This must precede the next -- handler for specific political and misc (non-political) divisions of polities and subpolities, such as -- "provinces of the Philippines", because "departmental capitals" is listed in cat_as for French prefectures and so -- will trigger an error if that handler runs before this one. insert(handlers, function(label) label = lcfirst(label) local capital_cat, place = label:match("^([a-z%- ]- capitals) of (.*)$") -- Make sure we recognize the type of capital. if place and capital_cat_to_placetype[capital_cat] then local placetype = capital_cat_to_placetype[capital_cat] local pl_placetype = m_placetypes.pluralize_placetype(placetype) -- Locate the container, fetch its known political divisions, and make sure the placetype corresponding to the -- type of capital is among the list. local group, key, spec = find_canonical_key_from_place(place, canon_label) if group and (spec.divs or spec.addl_divs) then local saw_match = false local variant_matches = {} 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 -- HACK. Currently if we don't find a match for the placetype, we map e.g. 'autonomous region' -- -> 'regional capitals' and 'union territory' -> 'territorial capitals'. When encountering a -- political division like 'autonomous region' or 'union territory', chop off everything up -- through a space to make things match. To make this clearer, we record all such -- "variant match" cases, and down below we insert a note into the category text indicating that -- such "variant matches" are included among the category. if pl_placetype == div.type or pl_placetype == div.type:gsub("^.* ", "") then saw_match = true if pl_placetype ~= div.type then insert(variant_matches, div.type) end end end end if saw_match then -- Everything checks out, construct the category description. local placetype_desc = m_placetypes.get_placetype_display_form(pl_placetype, placetype.is_city and "city" or "noncity") if placetype_desc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end if not placetype_desc then internal_error("Unrecognized plural placetype %s, generated as the plural of %s, which " .. "was found as the placetype of capital placetype %s in label %s", pl_placetype, placetype, capital_cat, label) end local variant_match_text = "" if variant_matches[1] then local real_variant_match_descs = {} for i, variant_match in ipairs(variant_matches) do local variant_match_desc = m_placetypes.get_placetype_display_form(variant_match, placetype.is_city and "city" or "noncity") if variant_match_desc == nil then internal_error("Unrecognized variant match plural placetype %s, coming from " .. "place key %s, data %s in label %s", variant_match, key, spec, label) end if variant_match_desc then -- skip those for which the description is `false`, like `ABBREVIATION_OF states` -- in the United States divs. insert(real_variant_match_descs, variant_match_desc) end end if real_variant_match_descs[1] then variant_match_text = " (bao gồm " .. m_table.serialCommaJoin(real_variant_match_descs) .. ")" end end local desc = "Tên gọi {{{langname}}} về thủ đô của " .. placetype_desc .. variant_match_text .. " trong " .. fetch_or_construct_location_desc(group, key, spec) .. "." local full_placename, _ = m_locations.key_to_placename(group, key) local parents = {} if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = capital_cat, sort = key}) else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = capital_cat .. " của " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = capital_cat, sort = key}) end end insert(parents, key) return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = desc, breadcrumb = full_placename, parents = parents, } end end end end) local overriding_category_descriptions = { ["autonomous cities of Spain"] = "the [[w:Autonomous communities of Spain#Autonomous_cities|autonomous cities of Spain]]", ["regions of Greece"] = "the regions ([[periphery|peripheries]]) of [[Greece]]", ["regions of North Macedonia"] = "the regions ([[periphery|peripheries]]) of [[North Macedonia]]", ["subprefectures of Japan"] = "[[subprefecture]]s of [[Japan]]ese [[prefecture]]s", } -- Handler for specific political and misc (non-political) divisions of locations (polities, subpolities, cities, etc.), -- such as "provinces of the Philippines", "counties of Wales", "municipalities of Tocantins, Brazil", -- "boroughs of New York City", etc. This does not handle categories for generic placetypes (cities, rivers, etc.) of -- locations, which are handled by different handlers above. insert(handlers, function(label) -- The label comes with an initial capitalization but we have to check both lowercase-initial and capital-initial -- versions of the placetype to handle e.g. [[:Category:en:Indian reserves of Canada]]. for _, canon_label in ipairs { label, lcfirst(label) } do for _, minimal_placetype in ipairs { true, false } do local match_quantifier = minimal_placetype and "-" or "+" -- Some categories have two "of"s in them, and depending on the category, it's correct to do either a greedy -- ([[:Category:en:Abbreviations of states of the United States]], with placetype `abbreviations of states`) -- or non-greedy ([[:Category:en:Provinces of the Democratic Republic of the Congo]], with placetype -- `provinces`) match. We can't know in advance which is correct so we try both possibilities, doing the -- non-greedy one first as it seems more common (there are many locations with "of" in them, but currently -- only `abbreviations of states` occurs with a following location). local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (ở) (.*)$") end if placetype then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then local function find_placetype(divs) if divs then 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" 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 if placetype == pt_cat_as.type then local div_parent = pt_cat_as.container_parent_type if div_parent == nil then -- allow false div_parent = div.container_parent_type end if div_parent == nil then div_parent = placetype end return div_parent, pt_cat_as.prep or div.prep or "của" end end end end return nil end local div_parent, div_prep = find_placetype(spec.divs) if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs) end if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs_for_categorization) end if div_parent ~= nil then if div_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, div_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end local desc = overriding_category_descriptions[canon_label] if not desc then desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) end desc = desc .. " {{{langname}}}." local parents = {} insert(parents, key) if div_parent then -- div_parent may be `false` if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = placetype, sort = " " .. key}) if spec.placetype == "quốc gia" or m_table.contains(spec.placetype, "quốc gia") then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = div_parent .. " " .. in_of .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = placetype, sort = " " .. key}) end end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) labels["ngoại danh"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} [[exonym]]s.", parents = {"địa danh"}, } labels["đơn vị hành chính theo quốc gia cụ thể"] = { type = "chủ đề phân nhóm", description = "{{{langname}}} categories for political divisions of specific countries.", parents = {"địa danh"}, } -- Misc. FIXME: Remove the need for this. labels["nomes of Ancient Egypt"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} names of the [[nome]]s of [[Ancient Egypt]].", breadcrumb = "nomes", parents = {"Ancient Egypt"}, } -- Sui generis place categories (mostly cross-jurisdictional subcontinental/transcontinental regions) -- FIXME: Everything here has been moved from [[Module:category tree/topic/Earth]]. Most should be removed. labels["Atlantic Ocean"] = { type = "related-to", description = "default with the", parents = {"Earth"}, } labels["British Isles"] = { type = "related-to", description = "=the people, culture, or territory of [[Great Britain]], [[Ireland]], and other nearby islands", parents = {"Europe", "islands"}, } labels["European Union"] = { type = "related-to", description = "default with the", parents = {"Europe"}, } labels["Gascony"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Indian subcontinent"] = { type = "related-to", description = "default with the", parents = {"South Asia"}, } labels["Bengal"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Bengal]].", parents = {"Indian subcontinent"}, } labels["Kashmir"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Kashmir]].", parents = {"Indian subcontinent"}, } labels["Kashmir, India"] = { type = "related-to", description = "{{{langname}}} names of places in {{w|Kashmir, India}}.", parents = {"India", "Kashmir"}, } labels["Korea"] = { type = "related-to", description = "=the people, culture, or territory of [[Korea]]", parents = {"Asia"}, } labels["Languedoc"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Lapland"] = { type = "related-to", description = "=[[Lapland]], a region in northernmost Europe", parents = {"Europe", "Finland", "Norway", "Russia", "Sweden"}, } labels["Middle East"] = { type = "related-to", description = "default with the", parents = {"Africa", "Asia"}, } labels["Netherlands Antilles"] = { type = "related-to", description = "=the people, culture, or territory of the [[Netherlands Antilles]]", parents = {"Netherlands", "North America"}, } labels["Overseas France"] = { type = "related-to", description = "={{w|Overseas France}} ({{m|fr||France d'outre-mer}})", parents = {"France"}, } labels["Provence"] = { type = "related-to", description = "default", parents = {"Provence-Alpes-Côte d'Azur, France"}, } labels["Polish People's Republic"] = { type = "related-to", description = "default", parents = {"Poland"}, } labels["South Asia"] = { type = "related-to", description = "default", parents = {"Eurasia", "Asia"}, } return {LABELS = labels, HANDLERS = handlers} m8uvlh05g9tle2rx6fttu86076agy4c 2350129 2349948 2026-05-04T09:57:18Z TheHighFighter2 42988 2350129 Scribunto text/plain local labels = {} local handlers = {} local m_table = require("Module:table") local en_utilities_module = "Module:en-utilities" local string_utilities_module = "Module:string utilities" local m_locations = require("Module:place/locations") local m_placetypes = require("Module:place/placetypes") local placetype_data = m_placetypes.placetype_data local internal_error = m_locations.internal_error local dump = mw.dumpObject local insert = table.insert local concat = table.concat local is_callable = require("Module:fun").is_callable --[==[ intro: This module is part of the category tree code and contains code to generate the descriptions of place-related categories such as [[Category:de:Hokkaido Prefecture, Japan]], [[Category:es:Cities in France]], [[Category:pt:Municipalities of Tocantins, Brazil]], etc.). Note that this module doesn't actually create the categories; that must be done separately, with the text "{{tl|auto cat}}" as the definition of the category. (This process should automatically happen periodically for non-empty categories, because they will appear in [[Special:WantedCategories]] and a bot will periodically examine that list and create any needed category.) There are two ways that category descriptions are specified: (1) by manually adding an entry to the `labels` table, keyed by the label (the category minus the language code) with a value consisting of a Lua table specifying the description text and the category's parents; (2) through handlers (pieces of Lua code) added to the `handlers` list, which recognize labels of a specific type (e.g. `Cities in France`) and generate the appropriate specification for that label on-the-fly. See [[Module:place]] for an introduction to the terminology associated with places along with a list of all the relevant modules, along with for more specific information on types of toponyms and placetypes and how their categorization works. ]==] local function lcfirst(label) return mw.getContentLanguage():lcfirst(label) end local function gsub_literally(str, from, to) local m_strutils = require(string_utilities_module) return (str:gsub(m_strutils.pattern_escape(from), m_strutils.replacement_escape(to))) end local class_to_bare_category_parent = { ["polity"] = "tổ chức chính trị", ["subpolity"] = "political divisions", ["settlement"] = "settlements", ["non-admin settlement"] = "settlements", ["capital"] = "capital cities", ["natural feature"] = "natural features", ["man-made structure"] = "man-made structures", ["geographic region"] = "geographic and cultural areas", } local class_is_political_division = { ["polity"] = true, -- strictly false but there are placetypes ambiguous between polity and subpolity ["subpolity"] = true, ["settlement"] = true, ["non-admin settlement"] = false, ["capital"] = true, ["natural feature"] = false, ["man-made structure"] = false, ["geographic region"] = false, ["generic place"] = false, } local capital_cat_to_placetype = {} for placetype, capital_cat in pairs(m_placetypes.placetype_to_capital_cat) do capital_cat_to_placetype[capital_cat] = placetype end -- Handler for bare categories for all types of capitals. This needs to precede the handler for bare placetype -- categories as some of the types of capitals exist as placetypes as well. insert(handlers, function(label) label = lcfirst(label) local capital_placetype = capital_cat_to_placetype[label] if capital_placetype then local pl_placetype = m_placetypes.pluralize_placetype(capital_placetype) local linkdesc = m_placetypes.get_placetype_display_form(pl_placetype, "top-level") if linkdesc == nil then internal_error("Unrecognized placetype %s when processing label %s", capital_placetype, label) end if linkdesc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = "{{{langname}}} names of [[capital]]s of " .. linkdesc .. ".", parents = {"capital cities"}, } end end) -- Handler for bare placetype categories. FIXME: Add wpcat= and commonscat= info. Previously we had it for various -- so-called "generic" placetypes, but sometimes the categories were wrong. insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local ptdesc, ptdata = m_placetypes.get_placetype_display_form(canon_label, "top-level", "return full") if ptdesc then local from_category_props = { from_category = true, no_split_qualifiers = true, } local bare_category_parent = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) local bare_category_parent = m_placetypes.get_placetype_prop(pt, "bare_category_parent") if bare_category_parent then return bare_category_parent end local class = m_placetypes.get_placetype_prop(pt, "class") if class then if class_to_bare_category_parent[class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", class, canon_label) end return class_to_bare_category_parent[class] end end, from_category_props) if not bare_category_parent then internal_error("Saw placetype %s without a `class` or `bare_category_parent` setting, either " .. "directly or through a fallback", canon_label) end local addl_bare_category_parents = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "addl_bare_category_parents") end, from_category_props) local bare_category_breadcrumb = m_placetypes.get_equiv_placetype_prop(canon_label, function(pt) return m_placetypes.get_placetype_prop(pt, "bare_category_breadcrumb") end, from_category_props) if type(bare_category_parent) == "string" and bare_category_breadcrumb then bare_category_parent = {name = bare_category_parent, sort = bare_category_breadcrumb} end local parents = {bare_category_parent} if addl_bare_category_parents then m_table.extend(parents, addl_bare_category_parents) end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = "{{{langname}}} " .. ptdesc .. ".", breadcrumb = bare_category_breadcrumb, parents = parents, } elseif ptdesc == false then mw.log(("Display form for canon_label %s is false, can't categorize"):format(dump(canon_label))) end end end) local function fetch_primary_placetype(key, spec) local placetype = spec.placetype if type(placetype) == "table" then placetype = placetype[1] end if not placetype then internal_error("No placetype specified or defaulted for key %s, spec %s", key, spec) end return placetype end --[==[ Construct an appropriately linked location based on the full or elliptical placename, preceded by `"the "`` if appropriate. Specifically: Fetch the full and elliptical_placenames. If they are the same, just link to the placename directly. Otherwise, check if the full placename exists; if so link to it. Otherwise, if the elliptical placename exists, link to it but display it as the full placename. Finally, if neither full placename nor elliptical placename exists, fall back to linking to the full placename. That way, we prefer full placenames to elliptical placenames if both or neither exist as Wiktionary entries, but if only one exists, we link to that one rather than have a red link. ]==] local function construct_linked_location(group, key, spec) local full_placename, elliptical_placename = m_locations.key_to_placename(group, key) local linked_placename if elliptical_placename ~= full_placename then local full_placename_title = mw.title.new(full_placename) if full_placename_title and full_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, full_placename) else local elliptical_placename_title = mw.title.new(elliptical_placename) if elliptical_placename_title and elliptical_placename_title.exists then linked_placename = m_locations.construct_linked_placename(spec, elliptical_placename, full_placename) end end end return linked_placename or m_locations.construct_linked_placename(spec, full_placename) end --[==[ Construct the description of a location, including its container trail either to the end or until we encounter a `no_include_container_in_desc` setting. For example, for the city of [[Birmingham]], the description will read `"[[Birmingham]], a [[city]] in the [[West Midlands]] (which is a [[county]] of [[England]], which is a [[constituent country]] of the [[United Kingdom]], which is a [[country]] in [[Europe]])"`. FIXME: Possibly we should adopt the way city descriptions used to read, which was similar to `"the city of [[Birmingham]], in the county of the [[West Midlands]], in the [[constituent country]] of [[England]], in the [[country]] of the [[United Kingdom]], in [[Europe]]"`. ]==] local function construct_location_desc(group, key, spec) local parts = {} local function ins(txt) insert(parts, txt) end ins(construct_linked_location(group, key, spec)) local iteration = 0 local need_closing_paren = false local containers = {{group = group, key = key, spec = spec}} local container_iterator = m_locations.iterate_containers(group, key, spec) while true do iteration = iteration + 1 local include_container_in_desc = false for _, container in ipairs(containers) do if not container.spec.no_include_container_in_desc then include_container_in_desc = true break end end if not include_container_in_desc then break end local next_containers = container_iterator() if not next_containers then break end local is_former = nil for _, container in ipairs(containers) do local this_is_former = container.spec.is_former_place if is_former == nil then is_former = this_is_former elseif is_former ~= this_is_former then internal_error("When processing container trail of key %s, found a mixture of former and non-former " .. "containers: %s", key, containers) end end if #containers > 1 then local placetypes = {} local prepositions = {} for _, container in ipairs(containers) do local container_type = fetch_primary_placetype(container.key, container.spec) m_table.insertIfNot(placetypes, m_placetypes.pluralize_placetype(container_type)) m_table.insertIfNot(prepositions, m_placetypes.get_placetype_entry_preposition(container_type)) end if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which are ") need_closing_paren = true else ins(", which are ") end if is_former then ins("former ") end ins(m_table.serialCommaJoin(placetypes)) ins(" ") ins(concat(prepositions, "/")) else if iteration == 1 then ins(", ") elseif iteration == 2 then ins(" (which is ") need_closing_paren = true else ins(", which is ") end local container_type = fetch_primary_placetype(containers[1].key, containers[1].spec) if is_former then ins("a former ") else ins(m_placetypes.get_placetype_article(container_type)) ins(" ") end ins(container_type) ins(" ") ins(m_placetypes.get_placetype_entry_preposition(container_type)) end ins(" ") first_container = false containers = next_containers local container_locations = {} for _, container in ipairs(containers) do insert(container_locations, construct_linked_location(container.group, container.key, container.spec)) end ins(m_table.serialCommaJoin(container_locations)) end if need_closing_paren then ins(")") end return concat(parts) end -- Fetch or construct the description of the location specified by `key`. If the `keydesc` property is specified, -- use it directly but substitute any occurrence of `+++` with the auto-constructed location description, which -- mentions the placename corresponding to the key, its placetype and container, and repeats the description up -- the container trail until either there are no more containers or (more usually) the `no_include_container_in_desc` -- setting is found (which is set on all continents and continent-level regions). 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 val = val or "+++" if val:find("%+%+%+") then val = gsub_literally(val, "+++", construct_location_desc(group, key, spec)) end return val end local function normalize_cat_as(cat_as, div) if type(cat_as) ~= "table" or cat_as.type then cat_as = {cat_as} end local ret_cat_as = {} for _, pt_cat_as in ipairs(cat_as) do if type(pt_cat_as) == "string" then pt_cat_as = {type = pt_cat_as} end insert(ret_cat_as, {type = pt_cat_as.type, prep = pt_cat_as.prep or div.prep or "của"}) end return ret_cat_as end -- Find the specified plural placetype among the divs for a given known location. Return a list of cat_as specs, where -- each spec is of the form {type = "PLURAL_PLACETYPE", prep = "PREP"} indicating the plural placetype to use when -- categorizing and the preposition to follow. local function find_placetype_cat_as(divs, pl_placetype) if divs then if type(divs) ~= "table" then divs = {divs} end for _, div in ipairs(divs) do if type(div) == "string" then div = {type = div} end if div.type == pl_placetype then local cat_as = div.cat_as or div.type return normalize_cat_as(cat_as, div) end end end return nil end -- Handler for bare placename categories for known locations in `locations` in [[Module:place/locations]]. insert(handlers, function(label) for _, canon_label in ipairs { label, lcfirst(label) } do local group, spec = m_locations.find_canonical_key(canon_label) if group then -- wp= defaults to true (Wikipedia article matches location's full placename) local wp = spec.wp if wp == nil then wp = true end -- wpcat= defaults to wp= (if Wikipedia article has its own name, Wikipedia category and Commons category -- generally follow) local wpcat = spec.wpcat if wpcat == nil then wpcat = wp end -- commonscat= defaults to wpcat= (if Wikipedia category has its own name, Commons category generally -- follows) local commonscat = spec.commonscat if commonscat == nil then commonscat = wpcat end local parents = {} local bare_label_parents = spec.overriding_bare_label_parents local container_iterator = m_locations.iterate_containers(group, canon_label, spec) local containers = container_iterator() if not bare_label_parents then bare_label_parents = {"+++"} end local full_location_placename, elliptical_location_placename = m_locations.key_to_placename(group, canon_label) local full_container_placename if containers then full_container_placename, _ = m_locations.key_to_placename(containers[1].group, containers[1].key) end local inserted_containers = false for _, parent in ipairs(bare_label_parents) do if parent == "+++" then parent = "PL_PLACETYPE PREP CONTAINER" end if parent:find("CONTAINER") then if not containers then internal_error("Parent category %s needs the container of %s but no containers specified: %s", parent, canon_label, spec) end local location_type = fetch_primary_placetype(canon_label, spec) local pl_location_type = m_placetypes.pluralize_placetype(location_type) for _, container in ipairs(containers) do local per_container_parent = parent local cat_as_list if per_container_parent:find("PL_PLACETYPE") then if spec.bare_category_parent_type then cat_as_list = normalize_cat_as(spec.bare_category_parent_type, spec) else cat_as_list = find_placetype_cat_as(container.spec.divs, pl_location_type) or find_placetype_cat_as(container.spec.addl_divs, pl_location_type) end end if not cat_as_list then local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(location_type, "from category") if not canon_placetype or not (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then internal_error("Unable to locate plural location type %s among the divs or addl_divs " .. "for container key %s spec %s, and the location type is either not in placetype_data or " .. "not identified as a generic placetype", pl_location_type, container.key, container.spec) end cat_as_list = {{type = pl_location_type, prep = m_placetypes.get_placetype_entry_preposition(location_type)}} end local prefixed_key = m_placetypes.get_prefixed_key(container.key, container.spec) per_container_parent = gsub_literally(per_container_parent, "CONTAINER", prefixed_key) for _, cat_as in ipairs(cat_as_list) do local per_container_per_placetype_parent = per_container_parent per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PL_PLACETYPE", cat_as.type) per_container_per_placetype_parent = gsub_literally(per_container_per_placetype_parent, "PREP", cat_as.prep) m_table.insertIfNot(parents, per_container_per_placetype_parent) end end inserted_containers = true else m_table.insertIfNot(parents, parent) end end if not inserted_containers and containers then -- If we didn't insert the containers above in some form, insert them now as bare categories. Note that -- this may be different categories from the container categories inserted above. for _, container in ipairs(containers) do m_table.insertIfNot(parents, container.key) end end if spec.addl_parents then for _, parent in ipairs(spec.addl_parents) do m_table.insertIfNot(parents, parent) end end local function format_boxval(val, specname) if val == true then val = "%l" end if type(val) == "string" then val = gsub_literally(val, "%l", full_location_placename) val = gsub_literally(val, "%e", elliptical_location_placename) if val:find("%%c") then if not full_container_placename then internal_error("Wikipedia/Commons spec %s = %s has %%c in it but key %s has no " .. "containers: %s", specname, val, canon_label, spec) end val = gsub_literally(val, "%c", full_container_placename) end end return val end local description = spec.fulldesc or ( "{{{langname}}} terms related to the people, culture, or territory of " .. fetch_or_construct_location_desc(group, canon_label, spec) .. ".") local full_placename, _ = m_locations.key_to_placename(group, canon_label) return { type = "chủ đề", description = description, breadcrumb = full_placename, parents = parents, wp = format_boxval(wp, "wp"), wpcat = format_boxval(wpcat, "wpcat"), commonscat = format_boxval(commonscat, "commonscat"), } end end end) local function find_canonical_key_from_place(place, canon_label) local has_the = false local key if place:find("^ ") then key = place:gsub("^ ", "") has_the = true else key = place end local group, spec = m_locations.find_canonical_key(key) if group then local requires_the = spec.the or false if has_the ~= requires_the then if has_the then mw.log(("Mismatch in category name '%s', has 'the' in the category when it should not"):format( canon_label)) else mw.log(("Mismatch in category name '%s', should have 'the' in the category but does not"): format(canon_label)) end return nil end return group, key, spec end return nil end -- Handler for generic placetypes (those whose categories are added through category generation handlers or through -- explicit category specs in the placetype data) for known locations in [[Module:place/locations]]. All such -- placetypes have either a `generic_before_non_cities` setting (meaning they can occur before non-city locations) or -- `generic_before_cities` setting (meaning they can occur before cities), or both. Examples of such categories are -- "cities in the Bahamas" or "rivers in Western Australia, Australia", or (for city locations) -- "neighbourhoods of Hong Kong" or "places in Melbourne". insert(handlers, function(label) for _, canon_label in ipairs { lcfirst(label), label } do local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]-) (của) (.*)$") end if placetype then local normalized_placetype = placetype == "neighbourhoods" and "neighborhoods" or placetype local canon_placetype, ptdata, ptmatch = m_placetypes.get_placetype_data(normalized_placetype, "from category") if canon_placetype and (ptdata.generic_before_non_cities or ptdata.generic_before_cities) then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then -- Check whether the location uses British spelling, but also check all containers, because -- it's too hard to keep in sync the `british_spelling` setting for locations at all different -- levels (e.g. cities of various countries, first and second level administrative division, etc.), -- so we just set it at top level on the country. local uses_british_spelling = spec.british_spelling if uses_british_spelling == nil then for containers in m_locations.iterate_containers(group, key, spec) do local must_outer_break = false for _, container in ipairs(containers) 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 local allow_cat = true if placetype == "neighborhoods" and uses_british_spelling or placetype == "neighbourhoods" and not uses_british_spelling then mw.log(("Mismatch in spelling of placetype '%s' in category '%s', should be '%s'"):format( placetype, canon_label, uses_british_spelling and "neighbourhoods" or "neighborhoods")) allow_cat = false end if spec.is_former_place and placetype ~= "địa danh" then allow_cat = false end local expected_prep if spec.is_city then expected_prep = ptdata.generic_before_cities else expected_prep = ptdata.generic_before_non_cities end if not expected_prep then allow_cat = false end if allow_cat then if expected_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, expected_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) desc = "{{{langname}}} " .. desc .. "." local parents = {} insert(parents, key) if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = normalized_placetype, sort = key}) if spec.placetype == "quốc gia" or m_table.contains(spec.placetype, "quốc gia") then local category_class = m_placetypes.get_equiv_placetype_prop(normalized_placetype, function(pt) return m_placetypes.get_placetype_prop(pt, "class") end, { from_category = true, no_split_qualifiers = true, }) if not category_class then internal_error("Saw placetype %s that is either unknown or has no `class` " .. "setting in `placetype_data`", normalized_placetype) end if class_is_political_division[category_class] == nil then internal_error("Saw unknown category class %s derived from placetype %s", category_class, normalized_placetype) end if class_is_political_division[category_class] then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do local container_prep if container.spec.is_city then container_prep = ptdata.generic_before_cities else container_prep = ptdata.generic_before_non_cities end if not container_prep then internal_error("For container key %s spec %s defines is_city = %s but " .. "there is no corresponding `generic_before_*` setting in the " .. "placedata for placetype %s", container.key, container.spec, container.spec.is_city, placetype) end insert(parents, { name = placetype .. " " .. container_prep .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = normalized_placetype, sort = key}) end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) -- Handler for "state capitals of the United States", "provincial capitals of Canada", etc. This must precede the next -- handler for specific political and misc (non-political) divisions of polities and subpolities, such as -- "provinces of the Philippines", because "departmental capitals" is listed in cat_as for French prefectures and so -- will trigger an error if that handler runs before this one. insert(handlers, function(label) label = lcfirst(label) local capital_cat, place = label:match("^([a-z%- ]- capitals) of (.*)$") -- Make sure we recognize the type of capital. if place and capital_cat_to_placetype[capital_cat] then local placetype = capital_cat_to_placetype[capital_cat] local pl_placetype = m_placetypes.pluralize_placetype(placetype) -- Locate the container, fetch its known political divisions, and make sure the placetype corresponding to the -- type of capital is among the list. local group, key, spec = find_canonical_key_from_place(place, canon_label) if group and (spec.divs or spec.addl_divs) then local saw_match = false local variant_matches = {} 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 -- HACK. Currently if we don't find a match for the placetype, we map e.g. 'autonomous region' -- -> 'regional capitals' and 'union territory' -> 'territorial capitals'. When encountering a -- political division like 'autonomous region' or 'union territory', chop off everything up -- through a space to make things match. To make this clearer, we record all such -- "variant match" cases, and down below we insert a note into the category text indicating that -- such "variant matches" are included among the category. if pl_placetype == div.type or pl_placetype == div.type:gsub("^.* ", "") then saw_match = true if pl_placetype ~= div.type then insert(variant_matches, div.type) end end end end if saw_match then -- Everything checks out, construct the category description. local placetype_desc = m_placetypes.get_placetype_display_form(pl_placetype, placetype.is_city and "city" or "noncity") if placetype_desc == false then mw.log(("Display form for pl_placetype %s is false, can't categorize"):format(dump(pl_placetype))) return nil end if not placetype_desc then internal_error("Unrecognized plural placetype %s, generated as the plural of %s, which " .. "was found as the placetype of capital placetype %s in label %s", pl_placetype, placetype, capital_cat, label) end local variant_match_text = "" if variant_matches[1] then local real_variant_match_descs = {} for i, variant_match in ipairs(variant_matches) do local variant_match_desc = m_placetypes.get_placetype_display_form(variant_match, placetype.is_city and "city" or "noncity") if variant_match_desc == nil then internal_error("Unrecognized variant match plural placetype %s, coming from " .. "place key %s, data %s in label %s", variant_match, key, spec, label) end if variant_match_desc then -- skip those for which the description is `false`, like `ABBREVIATION_OF states` -- in the United States divs. insert(real_variant_match_descs, variant_match_desc) end end if real_variant_match_descs[1] then variant_match_text = " (bao gồm " .. m_table.serialCommaJoin(real_variant_match_descs) .. ")" end end local desc = "Tên gọi {{{langname}}} về thủ đô của " .. placetype_desc .. variant_match_text .. " trong " .. fetch_or_construct_location_desc(group, key, spec) .. "." local full_placename, _ = m_locations.key_to_placename(group, key) local parents = {} if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = capital_cat, sort = key}) else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = capital_cat .. " của " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = capital_cat, sort = key}) end end insert(parents, key) return { type = "chủ đề thuộc nhóm tên gọi", topic = label, description = desc, breadcrumb = full_placename, parents = parents, } end end end end) local overriding_category_descriptions = { ["autonomous cities of Spain"] = "the [[w:Autonomous communities of Spain#Autonomous_cities|autonomous cities of Spain]]", ["regions of Greece"] = "the regions ([[periphery|peripheries]]) of [[Greece]]", ["regions of North Macedonia"] = "the regions ([[periphery|peripheries]]) of [[North Macedonia]]", ["subprefectures of Japan"] = "[[subprefecture]]s of [[Japan]]ese [[prefecture]]s", } -- Handler for specific political and misc (non-political) divisions of locations (polities, subpolities, cities, etc.), -- such as "provinces of the Philippines", "counties of Wales", "municipalities of Tocantins, Brazil", -- "boroughs of New York City", etc. This does not handle categories for generic placetypes (cities, rivers, etc.) of -- locations, which are handled by different handlers above. insert(handlers, function(label) -- The label comes with an initial capitalization but we have to check both lowercase-initial and capital-initial -- versions of the placetype to handle e.g. [[:Category:en:Indian reserves of Canada]]. for _, canon_label in ipairs { label, lcfirst(label) } do for _, minimal_placetype in ipairs { true, false } do local match_quantifier = minimal_placetype and "-" or "+" -- Some categories have two "of"s in them, and depending on the category, it's correct to do either a greedy -- ([[:Category:en:Abbreviations of states of the United States]], with placetype `abbreviations of states`) -- or non-greedy ([[:Category:en:Provinces of the Democratic Republic of the Congo]], with placetype -- `provinces`) match. We can't know in advance which is correct so we try both possibilities, doing the -- non-greedy one first as it seems more common (there are many locations with "of" in them, but currently -- only `abbreviations of states` occurs with a following location). local placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (của) (.*)$") if not placetype then placetype, in_of, place = canon_label:match("^([A-Za-z%- ]" .. match_quantifier .. ") (ở) (.*)$") end if placetype then local group, key, spec = find_canonical_key_from_place(place, canon_label) if group then local function find_placetype(divs) if divs then 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" 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 if placetype == pt_cat_as.type then local div_parent = pt_cat_as.container_parent_type if div_parent == nil then -- allow false div_parent = div.container_parent_type end if div_parent == nil then div_parent = placetype end return div_parent, pt_cat_as.prep or div.prep or "của" end end end end return nil end local div_parent, div_prep = find_placetype(spec.divs) if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs) end if div_parent == nil then -- allow false div_parent, div_prep = find_placetype(spec.addl_divs_for_categorization) end if div_parent ~= nil then if div_prep ~= in_of then mw.log(("Mismatch in category name '%s', has '%s' when it should have '%s'"):format( canon_label, in_of, div_prep)) return nil end local linkdesc = m_placetypes.get_placetype_display_form(placetype, spec.is_city and "city" or "noncity", "return full") if linkdesc == false then mw.log(("Display form for placetype %s is false, can't categorize"):format(dump(placetype))) return nil end if not linkdesc then internal_error("Unrecognized placetype %s when processing key %s, data %s, label %s", placetype, key, spec, canon_label) end local desc = overriding_category_descriptions[canon_label] if not desc then desc = linkdesc .. " " .. in_of .. " " .. fetch_or_construct_location_desc(group, key, spec) end desc = desc .. " {{{langname}}}." local parents = {} insert(parents, key) if div_parent then -- div_parent may be `false` if spec.no_container_parent then -- top-level country, constituent country, continent or the like insert(parents, {name = placetype, sort = " " .. key}) if spec.placetype == "quốc gia" or m_table.contains(spec.placetype, "quốc gia") then insert(parents, "đơn vị hành chính theo quốc gia cụ thể") end else local container_iterator = m_locations.iterate_containers(group, key, spec) local next_containers = container_iterator() if next_containers then for _, container in ipairs(next_containers) do insert(parents, { name = div_parent .. " " .. in_of .. " " .. m_placetypes.get_prefixed_key( container.key, container.spec), sort = key }) end else -- unrecognized countries or the like insert(parents, {name = placetype, sort = " " .. key}) end end end return { type = "chủ đề thuộc nhóm tên gọi", topic = canon_label, description = desc, breadcrumb = placetype, parents = parents, } end end end end end end) labels["ngoại danh"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} [[exonym]]s.", parents = {"địa danh"}, } labels["đơn vị hành chính theo quốc gia cụ thể"] = { type = "chủ đề phân nhóm", description = "{{{langname}}} categories for political divisions of specific countries.", parents = {"địa danh"}, } -- Misc. FIXME: Remove the need for this. labels["nomes of Ancient Egypt"] = { type = "chủ đề thuộc nhóm tên gọi", -- special-cased description description = "{{{langname}}} names of the [[nome]]s of [[Ancient Egypt]].", breadcrumb = "nomes", parents = {"Ancient Egypt"}, } -- Sui generis place categories (mostly cross-jurisdictional subcontinental/transcontinental regions) -- FIXME: Everything here has been moved from [[Module:category tree/topic/Earth]]. Most should be removed. labels["Atlantic Ocean"] = { type = "related-to", description = "default with the", parents = {"Earth"}, } labels["British Isles"] = { type = "related-to", description = "=the people, culture, or territory of [[Great Britain]], [[Ireland]], and other nearby islands", parents = {"Europe", "islands"}, } labels["European Union"] = { type = "related-to", description = "default with the", parents = {"Europe"}, } labels["Gascony"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Indian subcontinent"] = { type = "related-to", description = "default with the", parents = {"South Asia"}, } labels["Bengal"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Bengal]].", parents = {"Indian subcontinent"}, } labels["Kashmir"] = { type = "related-to", description = "{{{langname}}} terms related to the people, culture, or territory of [[Kashmir]].", parents = {"Indian subcontinent"}, } labels["Kashmir, India"] = { type = "related-to", description = "{{{langname}}} names of places in {{w|Kashmir, India}}.", parents = {"India", "Kashmir"}, } labels["Korea"] = { type = "related-to", description = "=the people, culture, or territory of [[Korea]]", parents = {"Asia"}, } labels["Languedoc"] = { type = "related-to", description = "default", parents = {"Occitania, France"}, } labels["Lapland"] = { type = "related-to", description = "=[[Lapland]], a region in northernmost Europe", parents = {"Europe", "Finland", "Norway", "Russia", "Sweden"}, } labels["Middle East"] = { type = "related-to", description = "default with the", parents = {"Africa", "Asia"}, } labels["Netherlands Antilles"] = { type = "related-to", description = "=the people, culture, or territory of the [[Netherlands Antilles]]", parents = {"Netherlands", "North America"}, } labels["Overseas France"] = { type = "related-to", description = "={{w|Overseas France}} ({{m|fr||France d'outre-mer}})", parents = {"France"}, } labels["Provence"] = { type = "related-to", description = "default", parents = {"Provence-Alpes-Côte d'Azur, France"}, } labels["Polish People's Republic"] = { type = "related-to", description = "default", parents = {"Poland"}, } labels["South Asia"] = { type = "related-to", description = "default", parents = {"Eurasia", "Asia"}, } return {LABELS = labels, HANDLERS = handlers} lmk5wa2epnn8w2yhu536j67c0okc2o8 Mô đun:category tree/topic 828 342422 2350130 2329434 2026-05-04T09:58:58Z TheHighFighter2 42988 2350130 Scribunto text/plain local raw_handlers = {} local raw_categories = {} --[=[ This module implements the topic category subsystem. It is currently implemented with a single raw handler that handlers both language-specific and umbrella topic categories, and a corresponding handler for thesaurus categories. The topmost topic category [[:Category:All topics]] is special and potentially could be handled as a separate raw category, but currently it's handled as part of the raw topic handler. The topmost thesaurus category [[:Category:Thesaurus]] is in fact handled as a raw category. ]=] local functions_module = "Module:fun" local labels_utilities_module = "Module:labels/utilities" local languages_module = "Module:languages" local string_pattern_escape_module = "Module:string/patternEscape" local string_replacement_escape_module = "Module:string/replacementEscape" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local topic_data_module = "Module:category tree/topic/data" local topic_utilities_module = "Module:category tree/topic/utilities" local thesaurus_data_module = "Module:category tree/topic/thesaurus data" local concat = table.concat local insert = table.insert local dump = mw.dumpObject local is_callable = require(functions_module).is_callable local pattern_escape = require(string_pattern_escape_module) local replacement_escape = require(string_pattern_escape_module) local split = require(string_utilities_module).split local type_data = { ["chủ đề thuộc nhóm liên quan"] = { desc = "Mục từ liên quan đến", additional = "'''LƯU Ý''': Đây là chủ đề thuộc nhóm liên quan. Nó chỉ nên chứa các mục từ liên quan đến " .. "{{{topic}}}. Vui lòng không đưa các mục từ chỉ có liên quan nhỏ đến chủ đề {{{topic}}}. " .. "Để ý các mục từ liên quan đến loại hoặc ví dụ liên quan đến chủ đề này thường có thể đưa vào một thể loại khác.", }, ["chủ đề thuộc nhóm tập hợp"] = { desc = "Mục từ chủ đề thuộc nhóm tập hợp", additional = "'''LƯU Ý''': Đây là chủ đề thuộc nhóm tập hợp. It should contain terms for {{{topic}}}, not merely " .. "terms related to {{{topic}}}. It may contain more general terms (e.g. types of {{{topic}}}) or more " .. "specific terms (e.g. names of specific {{{topic}}}), although there may be related categories ".. "specifically for these types of terms.", }, ["chủ đề thuộc nhóm tên gọi"] = { desc = "Mục từ chủ đề thuộc nhóm tên gọi", additional = "'''LƯU Ý''': This is a name category. It should contain names of specific {{{topic}}}, not " .. "merely terms related to {{{topic}}}, and should also not contain general terms for types of {{{topic}}}.", }, ["chủ đề thuộc nhóm loại hình"] = { desc = "Mục từ chủ đề thuộc nhóm loại hình", additional = "'''LƯU Ý''': This is a type category. It should contain terms for types of {{{topic}}}, not " .. "merely terms related to {{{topic}}}, and should also not contain names of specific {{{topic}}}.", }, ["chủ đề phân nhóm"] = { desc = "categories concerning more specific variants of", additional = "'''LƯU Ý''': This is a grouping category. It should not directly contain any terms, but " .. "only subcategories. If there are any terms directly in this category, please move them to a subcategory.", }, toplevel = { desc = "UNUSED", -- all categories of this type hardcode their description additional = "'''LƯU Ý''': Đây là chủ đề thuộc nhóm hàng đầu. Nó không chứa trực tiếp các mục từ, và " .. "chỉ có ở {{{topic}}}.", }, ["chủ đề thuộc nhóm hỗn hợp"] = { desc = "Tất cả chủ đề khả dụng ở nhiều lĩnh vực khác nhau {{{langname}}}.", }, } local function invalid_type(types) local valid_types = {} for typ, _ in pairs(type_data) do insert(valid_types, ("'%s'"):format(typ)) end error(("Loại chủ đề không hợp lệ: '%s'; bắt buộc phải là một trong các nhóm sau đây: %s") :format(types, mw.text.listToText(valid_types))) end local function split_types(types) types = types or "chủ đề" local splitvals = split(types, "%s*,%s*") for i, typ in ipairs(splitvals) do -- FIXME: Temporary if typ == "chủ đề" then typ = "chủ đề thuộc nhóm liên quan" end if not type_data[typ] then invalid_type(types) end splitvals[i] = typ end return splitvals end local function gsub_escaping_replacement(str, from, to) return (str:gsub(pattern_escape(from), replacement_escape(to))) end function ucfirst(txt) local italics, raw_txt = txt:match("^('*)(.-)$") return italics .. mw.getContentLanguage():ucfirst(raw_txt) end function lcfirst(txt) local italics, raw_txt = txt:match("^('*)(.-)$") return italics .. mw.getContentLanguage():lcfirst(raw_txt) end local function convert_spec_to_string(data, desc) if not desc then return desc end local desc_type = type(desc) if desc_type == "string" then return desc elseif desc_type == "number" then return tostring(desc) elseif not is_callable(desc) then error("Internal error: `desc` must be a string, number, function, callable table or nil; received a " .. desc_type) end desc = desc { lang = data.lang, sc = data.sc, label = data.label, category = data.category, topic_data = data.topdata, } if not desc then return desc end desc_type = type(desc) if desc_type == "string" then return desc end error("Internal error: the value returned by `desc` must be a string or nil; received a " .. desc_type) end local function get_and_cache(data, obj, key) local val = convert_spec_to_string(data, obj[key]) obj[key] = val return val end local function process_default(desc) local stripped_desc = desc local no_singularize, wikify, add_the while true do local new_stripped_desc = stripped_desc:match("^(.+) no singularize$") if new_stripped_desc then no_singularize = true end if not new_stripped_desc then new_stripped_desc = stripped_desc:match("^(.+) wikify$") if new_stripped_desc then wikify = true end end if not new_stripped_desc then new_stripped_desc = stripped_desc:match("^(.+) with the$") if new_stripped_desc then add_the = true end end if new_stripped_desc then stripped_desc = new_stripped_desc else break end end if stripped_desc == "default" then return true, no_singularize, wikify, add_the else return false end end local function format_desc(data, desc) local desc_parts = {} local types = split_types(data.topdata.type) for _, typ in ipairs(types) do insert(desc_parts, type_data[typ].desc .. " " .. desc) end return require(table_module).serialCommaJoin(desc_parts) .. " {{{langname}}}." end local substitute_template_specs local function format_displaytitle(data, include_lang_prefix, upcase) local topdata, lang, label = data.topdata, data.lang, data.label local displaytitle = substitute_template_specs(data, topdata.displaytitle) if not displaytitle then return nil end if upcase then displaytitle = ucfirst(displaytitle) end if include_lang_prefix and lang then displaytitle = ("%s:%s"):format(lang:getCode(), displaytitle) end return displaytitle end local function get_breadcrumb(data) local topdata, lang, label = data.topdata, data.lang, data.label local ret if lang then ret = topdata.breadcrumb or format_displaytitle(data, false, "upcase") else ret = topdata.umbrella and topdata.umbrella.breadcrumb or topdata.breadcrumb or format_displaytitle(data, false, "upcase") end if not ret then ret = label end if type(ret) == "string" or type(ret) == "number" then ret = {name = ret} end local name = substitute_template_specs(data, ret.name) local nocap = ret.nocap return {name = name, nocap = nocap} end local function make_category_name(lang, label) if lang then return lang:getCode() .. ":" .. ucfirst(label) else return ucfirst(label) end end local function replace_special_descriptions(data, desc) if not desc then return desc end if desc:find("^=") then desc = desc:gsub("^=", "") return format_desc(data, desc) end local is_default, no_singularize, wikify, add_the = process_default(desc) if is_default then local linked_label = require(topic_utilities_module).link_label(data.label, no_singularize, wikify) if add_the then linked_label = "the " .. linked_label end return format_desc(data, linked_label) else return desc end end local function get_displaytitle_or_label(data) return format_displaytitle(data, false) or data.label end local function process_default_add_the(data, topic) local is_default, _, _, add_the = process_default(topic) if is_default then topic = get_displaytitle_or_label(data) if add_the then topic = "the " .. topic end end return topic, is_default end substitute_template_specs = function(data, desc) desc = convert_spec_to_string(data, desc) if not desc then return nil end local topdata, lang, label = data.topdata, data.lang, data.label if desc:find("{{{umbrella_msg}}}") then local catname = ucfirst(label) desc = gsub_escaping_replacement(desc, "{{{umbrella_msg}}}", "This category contains no dictionary entries, only other categories. The subcategories are of two " .. "sorts:\n\n* Subcategories named like \"{{{thespref}}}aa:" .. catname .. "\" (with a prefixed language code) are categories of terms in specific languages. " .. "You may be interested especially in [[:Category:{{{thespref}}}en:" .. catname .. "]], for English terms.\n" .. "* Subcategories of this one named without the prefixed language code are further categories just like " .. "this one, but devoted to finer topics." ) end if desc:find("{{{topic}}}") then -- Compute the value for {{{topic}}}. If the user specified `topic`, use it. (If we're an umbrella category, -- allow a separate value for `umbrella.topic`, falling back to `topic`.) Otherwise, see if the description -- was specified as 'default' or a variant; if so, parse it to determine whether to add "the" to the label. -- Otherwise, just use the label directly. local topic = not lang and topdata.umbrella and topdata.umbrella.topic or topdata.topic if topic then topic = process_default_add_the(data, topic) else local desc if not lang then desc = topdata.umbrella and get_and_cache(data, topdata.umbrella, "description") or get_and_cache(data, topdata, "umbrella_description") end desc = desc or get_and_cache(data, topdata, "description") local defaulted_desc, is_default = process_default_add_the(data, desc) if is_default then topic = defaulted_desc else topic = get_displaytitle_or_label(data) end end desc = gsub_escaping_replacement(desc, "{{{topic}}}", topic) end desc = desc:gsub("{{{thespref}}}", data.thesaurus_data and "Kho từ vựng:" or "") return desc end local function process_box(data, def_topright_parts, val, pattern) if not val then return end local defval = ucfirst(data.label) if type(val) ~= "table" then val = {val} end for _, v in ipairs(val) do if v == true then insert(def_topright_parts, pattern:format(defval)) else insert(def_topright_parts, pattern:format(v)) end end end local function get_topright(data) local topdata, lang = data.topdata, data.lang local def_topright_parts = {} process_box(data, def_topright_parts, topdata.wp, "{{wikipedia|%s}}") process_box(data, def_topright_parts, topdata.wpcat, "{{wikipedia|category=%s}}") process_box(data, def_topright_parts, topdata.commonscat, "{{commonscat|%s}}") local def_topright if #def_topright_parts > 0 then def_topright = concat(def_topright_parts, "\n") end if lang then return substitute_template_specs(data, topdata.topright or def_topright) else return topdata.umbrella and substitute_template_specs(data, topdata.umbrella.topright) or substitute_template_specs(data, def_topright) end end local function remove_lang_params(desc) desc = desc:gsub("^{{{langname}}} ", "") desc = desc:gsub("{{{langcode}}}:", "") desc = desc:gsub("^{{{langcode}}} ", "") desc = desc:gsub("^{{{langcat}}} ", "") return desc end local function get_additional_msg(data) local types = split_types(data.topdata.type) if #types > 1 then local parts = {"'''NOTE''': This is a mixed category. It may contain terms of any of the following category types:"} for i, typ in ipairs(types) do insert(parts, ("* %s {{{topic}}}%s"):format(type_data[typ].desc, i == #types and "." or ";")) end insert(parts, "'''WARNING''': Such categories are strongly dispreferred and should be split into separate per-type categories.") return concat(parts, "\n") elseif label == "Tất cả chủ đề" then return "'''NOTE''': This is the topmost topic category for {{{langname}}}. It should not directly contain " .. "any terms, but only lists of topic categories organized by type." else return type_data[types[1]].additional end end local function get_labels_categorizing(data) local m_labels_utilities = require(labels_utilities_module) return m_labels_utilities.format_labels_categorizing( m_labels_utilities.find_labels_for_category(data.label, "chủ đề thuộc nhóm liên quan", data.lang), nil, data.lang) end -- Return the description along with the text following and preceding the description. The description and additional -- (i.e. following) text are returned in the form of closures so the work of calculating the text (which can be -- expensive, especially in the case of the additional text, where get_labels_categorizing() scans the entire set of -- labels for any that categorize into this category) is not done when not needed, e.g. in higher levels of the -- breadcrumb chain, where only the breadcrumb and parents (in fact, really just the first parent) are actually needed. local function get_description_additional_preceding(data) local topdata, lang, label = data.topdata, data.lang, data.label local desc, additional, preceding -- This is kind of hacky, but it works for now. local function postprocess_thesaurus(txt) if not txt then return nil end if not data.thesaurus_data then return txt end txt = txt:gsub(" terms([ .,])", " thesaurus entries%1") return txt end if lang then desc = function() return postprocess_thesaurus(substitute_template_specs(data, replace_special_descriptions(data, get_and_cache(data, topdata, "description")))) end preceding = topdata.preceding additional = function() local additional_parts = {} if topdata.additional then insert(additional_parts, topdata.additional) end if not data.thesaurus_data then insert(additional_parts, get_additional_msg(data)) local labels_msg = get_labels_categorizing(data) if labels_msg then insert(additional_parts, labels_msg) end end return postprocess_thesaurus(substitute_template_specs(data, concat(additional_parts, "\n\n"))) end else if label == "Tất cả chủ đề" then desc = "Dưới đây là các chủ đề dành cho tất cả ngôn ngữ trên Wiktionary." additional = "It contains no dictionary entries, only other categories. The subcategories are of two " .. "sorts:\n\n" .. "* Subcategories listed at the beginning, without a prefixed language code, are grouping " .. "categories similar to this category, but are devoted to general subject areas. Under them are " .. "finer-grained subject areas.\n" .. "* Subcategories named like \"aa:All topics\" (with a prefixed language code) are top-level " .. "categories like this one, but for specific languages. You may be interested especially in " .. "[[:Thể loại:Tất cả chủ đề/Tiếng Việt]], đối với mục từ tiếng Việt.\n" .. "Note that categories under this tree categorize terms semantically rather than grammatically. " .. "Grammatical categories (such as all French verbs, or all English irregular plural forms) " .. "have a different naming structure, with the language name spelled out, such as " .. "[[:Thể loại:Động từ tiếng Pháp]] hoặc [[:Thể loại:Động từ bất quy tắc tiếng Anh]]." return desc, additional end -- Assume that if the description field contains a function, the function will return non-nil, so we don't -- have to call the function at this point (in case it is heavyweight). local has_umbrella_desc = topdata.umbrella and topdata.umbrella.description or topdata.umbrella_description desc = function() local desc = topdata.umbrella and get_and_cache(data, topdata.umbrella, "description") or get_and_cache(data, topdata, "umbrella_description") if not desc then desc = get_and_cache(data, topdata, "description") if desc then desc = replace_special_descriptions(data, desc) desc = remove_lang_params(desc) desc = desc:gsub("%.$", "") desc = "Chủ đề của thể loại này là: " .. desc .. "." end end if not desc then desc = "Categories concerning " .. label .. " in various specific languages." end return postprocess_thesaurus(substitute_template_specs(data, desc)) end preceding = topdata.umbrella and topdata.umbrella.preceding or not has_umbrella_desc and topdata.preceding if preceding then preceding = remove_lang_params(preceding) end additional = function() local additional_parts = {} local topdata_additional = topdata.umbrella and topdata.umbrella.additional or not has_umbrella_desc and topdata.additional if topdata_additional then insert(additional_parts, remove_lang_params(topdata_additional)) end insert(additional_parts, "{{{umbrella_msg}}}") if not data.thesaurus_data then insert(additional_parts, get_additional_msg(data)) local labels_msg = get_labels_categorizing(data) if labels_msg then insert(additional_parts, labels_msg) end end return postprocess_thesaurus(substitute_template_specs(data, concat(additional_parts, "\n\n"))) end end preceding = substitute_template_specs(data, preceding) return desc, additional, preceding end local function normalize_sort_key(data, sort) local lang, label = data.lang, data.label if not sort then -- When defaulting sort key to label, strip 'The ' (e.g. in 'The Matrix', 'The Hunger Games') -- and 'A ' (e.g. in 'A Song of Ice and Fire', 'A Christmas Carol') from label. local stripped_sort = label:match("^[Tt]he (.*)$") if stripped_sort then sort = stripped_sort end if not stripped_sort then stripped_sort = label:match("^[Aa] (.*)$") if stripped_sort then sort = stripped_sort end end if not stripped_sort then sort = label end end sort = substitute_template_specs(data, sort) if not lang then sort = " " .. sort end return sort end local function get_topic_parents(data) local topdata, lang, label = data.topdata, data.lang, data.label local parents = topdata.parents if not lang and label == "Tất cả chủ đề" then return {{ name = "Category:Tất cả", sort = "topics" }} end if not parents or #parents == 0 then return nil end local ret = {} for _, parent in ipairs(parents) do parent = mw.clone(parent) if type(parent) ~= "table" then parent = {name = parent} end parent.sort = normalize_sort_key(data, parent.sort) if type(parent.name) ~= "string" then error(("Internal error: parent.name is not a string: parent = %s"):format(dump(parent))) end if parent.name:find("^Thể loại:") or parent.nontopic then -- leave as-is parent.nontopic = nil else parent.name = make_category_name(lang, parent.name) end parent.name = substitute_template_specs(data, parent.name) insert(ret, parent) end local function make_list_of_type_parent(typ) return { name = make_category_name(lang, ("Danh sách %s"):format(typ)), sort = (not lang and " " or "") .. label, } end if topdata.type ~= "toplevel" then local types = split_types(topdata.type) for _, typ in ipairs(types) do insert(ret, make_list_of_type_parent(typ)) end if #types > 1 then insert(ret, make_list_of_type_parent("chủ đề thuộc nhóm hỗn hợp")) end end -- Add umbrella category. if lang then insert(ret, { name = make_category_name(nil, label), sort = lang:getCanonicalName(), }) end return ret end local function get_thesaurus_parents(data) local topdata, lang, label = data.topdata, data.lang, data.label local parent_substitutions = data.thesaurus_data.parent_substitutions local parents = topdata.parents if not parents or #parents == 0 then return nil end local ret = {} for _, parent in ipairs(parents) do -- Process parent categories as follows: -- 1. skip non-topic cats and meta-categories that start with "List of" -- 2. map "en:All topics" to "English thesaurus entries" (and same for other languages), but map "All topics" itself to the root "Thesaurus" category -- 3. check if this parent is to be substituted, if so, substitute it -- 4. prepend "Thesaurus:" to all other category names parent = mw.clone(parent) if type(parent) ~= "table" then parent = {name = parent} end parent.sort = normalize_sort_key(data, parent.sort) if type(parent.name) ~= "string" then error(("Internal error: parent.name is not a string: parent = %s"):format(dump(parent))) end if parent.name:find("^Thể loại:") or parent.nontopic then -- skip elseif parent.name == "Tất cả chủ đề" or parent_substitutions[parent.name] == "Tất cả chủ đề" then if not lang then insert(ret, { name = "Thesaurus", sort = label, }) else insert(ret, { name = "Kho từ vựng", sort = parent.sort, lang = lang:getCode(), is_label = true, }) end else parent.name = "Kho từ vựng:" .. make_category_name(lang, parent_substitutions[parent.name] or parent.name) parent.name = substitute_template_specs(data, parent.name) insert(ret, parent) end end -- Add the non-thesaurus version of this category as a parent, unless it is a thesaurus-only category. if not topdata.thesaurusonly then insert(ret, { name = make_category_name(lang, label), sort = " " }) end -- Add umbrella category. if lang then insert(ret, { name = "Kho từ vựng:" .. make_category_name(nil, label), sort = lang:getCanonicalName(), }) end return ret end local function generate_spec(category, lang, upcase_label, thesaurus_data) local label_data = require(topic_data_module) local label -- Convert label to lowercase if possible local lowercase_label = mw.getContentLanguage():lcfirst(upcase_label) -- Check if the label exists local labels = label_data["LABELS"] if labels[lowercase_label] then label = lowercase_label else label = upcase_label end local topdata = labels[label] -- Go through handlers if not topdata then for _, handler in ipairs(label_data["HANDLERS"]) do topdata = handler.handler(label) if topdata then topdata.module = handler.module break end end end if not topdata then return nil end local data = { category = category, lang = lang, label = label, topdata = topdata, thesaurus_data = thesaurus_data, } local description, additional, preceding = get_description_additional_preceding(data) local parents if thesaurus_data then parents = get_thesaurus_parents(data) else parents = get_topic_parents(data) end return { lang = lang and lang:getCode() or nil, description = description, additional = additional, preceding = preceding, parents = parents, breadcrumb = get_breadcrumb(data), displaytitle = format_displaytitle(data, "include lang prefix", "upcase"), topright = get_topright(data), module = topdata.module, can_be_empty = not lang, hidden = false, } end -- Handler for `Thesaurus:...` categories. table.insert(raw_handlers, function(data) local code, upcase_label = data.category:match("^Kho từ vựng:(%l[%a-]*%a):(.+)$") local lang if code then lang = require(languages_module).getByCode(code) if not lang then mw.log(("Category '%s' looks like a language-specific thesaurus category but unable to match language prefix"): format(data.category)) return nil end else upcase_label = data.category:match("^Kho từ vựng:(.+)$") end if upcase_label then local thesaurus_data = require(thesaurus_data_module) -- substituted category names are not allowed if thesaurus_data.parent_substitutions[lcfirst(upcase_label)] then error(("Category is not allowed as a Thesaurus category: %s (see the list of parent substitutions at " .. "[[Module:category tree/topic/thesaurus]])"):format(data.category)) end return generate_spec(data.category, lang, upcase_label, thesaurus_data) end end) -- Handler for regular topic categories. table.insert(raw_handlers, function(data) local code, upcase_label = data.category:match("^(%l[%a-]*%a):(.+)$") local lang if code then lang = require(languages_module).getByCode(code) if not lang then mw.log(("Category '%s' looks like a language-specific topic category but unable to match language prefix"): format(data.category)) return nil end else upcase_label = data.category end return generate_spec(data.category, lang, upcase_label) end) ----------------------------------------------------------------------------- -- -- -- RAW CATEGORIES -- -- -- ----------------------------------------------------------------------------- raw_categories["Kho từ vựng"] = { description = "Category for entries of the Wiktionary thesaurus, located in a separate namespace.", additional = [=[ Có 3 cách để duyệt Kho từ vựng: * Nhấn vào '''[[:Thể loại:Kho từ vựng theo ngôn ngữ]]''' để bắt đầu. * Sử dụng hộp tìm kiếm ở dưới. * Browse the thesaurus by topic using the links under "Subcategories" below. Trang chính dự án này là [[Wiktionary:Kho từ vựng]]. {{ws header|<nowiki/>|link=}}]=], parents = { "Category:Tất cả", "Category:Dự án Wiktionary", }, } return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers} ohqwfb3a3s3mdhu2qs84hyh82lml9uj Bản mẫu:tg-infl-noun/inflection 10 346743 2350008 2325456 2026-05-04T00:35:40Z Hiyuune 50834 2350008 wikitext text/x-wiki {{inflection-table-top|palette=blue|title=Biến tố của {{m-self|tg|{{PAGENAME}}|tr=-}}|tall=yes}} ! {{#if:{{{broken|}}}|rowspan="2"|}} class="outer" colspan="2" | ! style="{{#ifeq:{{{nb}}}|pl|display:none|}}" {{#if:{{{broken|}}}|rowspan="2"|}} class="outer" | số ít ! style="{{#ifeq:{{{nb}}}|sg|display:none|}}" {{#if:{{{broken2|}}}|colspan="3"|{{#if:{{{broken|}}}|colspan="2"|}}}} class="outer" | số nhiều |- ! class="secondary" style="{{#if:{{{broken|}}}||display:none}}" | thanh ! class="secondary" style="{{#if:{{{broken|}}}||display:none}}" | đứt gãy<sup>{{#if:{{{anim|}}}|2|1}}</sup> ! class="secondary" style="{{#if:{{{broken2|}}}||display:none}}" | hoặc đứt gãy<sup>{{#if:{{{anim|}}}|2|1}}</sup> |- ! colspan="2" | nguyên mẫu | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{{1|{{PAGENAME}}}}}}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}н|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳо}}|accel-form=pl}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{{broken|}}}|accel-form=broken{{!}}pl}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{{broken2|}}}|accel-form=broken{{!}}pl}} |- ! colspan="2" | tân ngữ<br>xác định | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ро|accel-form=def{{!}}obj{{!}}sg}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}н|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳо}}ро|accel-form=def{{!}}obj{{!}}pl}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}и|{{{broken|}}}}}ро|accel-form=broken{{!}}def{{!}}obj{{!}}pl}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}и|{{{broken2|}}}}}ро|accel-form=broken{{!}}def{{!}}obj{{!}}pl}} |- ! colspan="2" | [[:w:en:Tajik grammar#Izofa-construction|bổ sung]] | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}и|accel-form=izofa{{!}}sg}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}н|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳо}}и|accel-form=izofa{{!}}pl}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}и|{{{broken|}}}}}и|accel-form=broken{{!}}izofa{{!}}pl}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}и|{{{broken2|}}}}}и|accel-form=broken{{!}}izofa{{!}}pl}} |- ! rowspan="2" | bất định,<br>xác định<br>quan hệ ! class="secondary" | nguyên mẫu | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}е|accel-form=indef{{!}};{{!}}def{{!}}relative{{!}}bare}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | — | style="{{#if:{{{broken|}}}||display:none}}" | — | style="{{#if:{{{broken2|}}}||display:none}}" | — |- ! class="secondary" | tân ngữ | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}еро|accel-form=indef{{!}};{{!}}def{{!}}relative{{!}}object}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | — | style="{{#if:{{{broken|}}}||display:none}}" | — | style="{{#if:{{{broken2|}}}||display:none}}" | — {{inflection-table-bottom|notes={{#if:{{{anim|}}}|<sup>1</sup>Dạng số nhiều {{mention|tg|-ҳо}} ({{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳо|accel-form=pl}}), thường được chấp nhận.}}{{#if:{{{broken|}}}|{{#if:{{{anim|}}}|<br><sup>2|<sup>1}}</sup>Broken plurals are generally much less common than sound plurals.}}}} r9rfhitw4l9tvqwmf9lzaoqbem60qfw Thể loại:hy:Địa danh của Việt Nam 14 355792 2349897 2259797 2026-05-03T12:43:58Z Hiyuune 50834 Hiyuune đã đổi [[Thể loại:Địa danh của Việt Nam/Tiếng Armenia]] thành [[Thể loại:hy:Địa danh của Việt Nam]] 2259797 wikitext text/x-wiki [[Thể loại:Việt Nam/Tiếng Armenia]] [[Thể loại:Địa danh/Tiếng Armenia]] [[Thể loại:Danh sách chủ đề thuộc nhóm tên gọi/Tiếng Armenia]] [[Thể loại:Địa danh của Việt Nam|A]] ejuxwvj0zb24yonn98e441w30qlsaye 2349899 2349897 2026-05-03T12:44:22Z Hiyuune 50834 2349899 wikitext text/x-wiki [[Thể loại:hy:Việt Nam]] [[Thể loại:hy:Địa danh]] [[Thể loại:hy:Danh sách chủ đề thuộc nhóm tên gọi]] [[Thể loại:Địa danh của Việt Nam|A]] t5dum7d1ttbrfnjvpqvge5ezzt7wm7h Thể loại:hy:Việt Nam 14 355794 2349900 2259801 2026-05-03T12:44:35Z Hiyuune 50834 Hiyuune đã đổi [[Thể loại:Việt Nam/Tiếng Armenia]] thành [[Thể loại:hy:Việt Nam]] 2259801 wikitext text/x-wiki [[Thể loại:Quốc gia của châu Á/Tiếng Armenia]] [[Thể loại:Quốc gia/Tiếng Armenia]] [[Thể loại:Danh sách chủ đề thuộc nhóm liên quan/Tiếng Armenia]] [[Thể loại:Việt Nam|A]] nyvfuvkq6m5dtkw33f1jxvzbpslsd2n 2349902 2349900 2026-05-03T12:45:17Z Hiyuune 50834 Thay cả nội dung bằng “{{auto cat}}” 2349902 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx choh 0 363940 2349872 2285849 2026-05-03T12:08:51Z WhoAlone 40420 2349872 wikitext text/x-wiki =={{langname|kta}}== ==={{ĐM|verb}}=== {{head|kta|Động từ}} # [[đến]]. ==={{ĐM|ref}}=== * Smith, Kenneth D. (1970) ''Vietnam word list (revised): Kơtua''. SIL International. =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[đá]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} kelrh9kpnnqz0vpxd0ziv0ekj5veq89 apan 0 367996 2349924 2295616 2026-05-03T13:48:59Z WhoAlone 40420 2349924 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[cầm]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} =={{langname|pac}}== ==={{ĐM|n}}=== {{head|pac|Danh từ}} # [[bát]] [[loa]], [[tô]] [[đại]]. #:{{ux|pac|Pânh mooi '''apan '''dooi|Cơm đầy một '''bát loa'''}} ==={{ĐM|ref}}=== * Tạ Văn Thông và cộng sự. ''[https://www.webonary.org/pacoh_vietnamese_english_dic/ Từ điển Pa Cô - Việt - Anh]''. 63x0erz1fsyx4we34tnvq1kvdv17mjc Bản mẫu:tg-infl-noun/possessive 10 371556 2350009 2303524 2026-05-04T00:36:19Z Hiyuune 50834 2350009 wikitext text/x-wiki {{inflection-table-top|palette=blue|title=Dạng sở hữu của {{m-self|tg|{{PAGENAME}}|tr=-}}|tall=yes}} ! {{#if:{{{broken|}}}|rowspan="2"|}} class="outer" colspan="2" | ! style="{{#ifeq:{{{nb}}}|pl|display:none|}}" {{#if:{{{broken|}}}|rowspan="2"|}} class="outer" | số ít ! style="{{#ifeq:{{{nb}}}|sg|display:none|}}" {{#if:{{{broken2|}}}|colspan="3"|{{#if:{{{broken|}}}|colspan="2"|}}}} class="outer" | số nhiều |- ! class="secondary" style="{{#if:{{{broken|}}}||display:none}}" | thanh ! class="secondary" style="{{#if:{{{broken|}}}||display:none}}" | đứt gãy<sup>{{#if:{{{anim|}}}|2|1}}</sup> ! class="secondary" style="{{#if:{{{broken2|}}}||display:none}}" | đứt gãy<sup>{{#if:{{{anim|}}}|2|1}}</sup> |- ! rowspan="6" | nguyên mẫu ! class="secondary" | ngôi thứ nhất số ít | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{1|{{PAGENAME}}}}}я|{{{1|{{PAGENAME}}}}}а}}м|accel-form=1s{{!}}spos}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}нам|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳоям}}|accel-form=1s{{!}}mpos}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken|}}}я|{{{broken|}}}а}}м|accel-form=1s{{!}}broken{{!}}mpos}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken2|}}}я|{{{broken2|}}}а}}м|accel-form=1s{{!}}broken{{!}}mpos}} |- ! class="secondary" | ngôi thứ hai số ít | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{1|{{PAGENAME}}}}}я|{{{1|{{PAGENAME}}}}}а}}т|accel-form=2s{{!}}spos}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}нат|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳоят}}|accel-form=2s{{!}}mpos}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken|}}}я|{{{broken|}}}а}}т|accel-form=2s{{!}}broken{{!}}mpos}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken2|}}}я|{{{broken2|}}}а}}т|accel-form=2s{{!}}broken{{!}}mpos}} |- ! class="secondary" | ngôi thứ ba số ít | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{1|{{PAGENAME}}}}}я|{{{1|{{PAGENAME}}}}}а}}ш|accel-form=3s{{!}}spos}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}наш|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳояш}}|accel-form=3s{{!}}mpos}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken|}}}я|{{{broken|}}}а}}ш|accel-form=3s{{!}}broken{{!}}mpos}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken2|}}}я|{{{broken2|}}}а}}ш|accel-form=3s{{!}}broken{{!}}mpos}} |- ! class="secondary" | ngôi thứ nhất số nhiều | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{1|{{PAGENAME}}}}}я|{{{1|{{PAGENAME}}}}}а}}мон|accel-form=1p{{!}}spos}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}намон|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳоямон}}|accel-form=1p{{!}}mpos}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken|}}}я|{{{broken|}}}а}}мон|accel-form=1p{{!}}broken{{!}}mpos}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken2|}}}я|{{{broken2|}}}а}}мон|accel-form=1p{{!}}broken{{!}}mpos}} |- ! class="secondary" | ngôi thứ hai số nhiều | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{1|{{PAGENAME}}}}}я|{{{1|{{PAGENAME}}}}}а}}тон|accel-form=2p{{!}}spos}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}натон|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳоятон}}|accel-form=2p{{!}}mpos}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken|}}}я|{{{broken|}}}а}}тон|accel-form=2p{{!}}broken{{!}}mpos}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken2|}}}я|{{{broken2|}}}а}}тон|accel-form=2p{{!}}broken{{!}}mpos}} |- ! class="secondary" | ngôi thứ ba số nhiều | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{1|{{PAGENAME}}}}}я|{{{1|{{PAGENAME}}}}}а}}шон|accel-form=3p{{!}}spos}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}нашон|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳояшон}}|accel-form=3p{{!}}mpos}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken|}}}я|{{{broken|}}}а}}шон|accel-form=3p{{!}}broken{{!}}mpos}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken2|}}}я|{{{broken2|}}}а}}шон|accel-form=3p{{!}}broken{{!}}mpos}} |- ! colspan="999" class="separator" | |- ! {{#if:{{{broken|}}}|rowspan="2"|}} class="outer" colspan="2" | ! style="{{#ifeq:{{{nb}}}|pl|display:none|}}" {{#if:{{{broken|}}}|rowspan="2"|}} class="outer" | số ít ! style="{{#ifeq:{{{nb}}}|sg|display:none|}}" {{#if:{{{broken2|}}}|colspan="3"|{{#if:{{{broken|}}}|colspan="2"|}}}} class="outer" | số nhiều |- ! class="secondary" style="{{#if:{{{broken|}}}||display:none}}" | thanh ! class="secondary" style="{{#if:{{{broken|}}}||display:none}}" | đứt gãy<sup>{{#if:{{{anim|}}}|2|1}}</sup> ! class="secondary" style="{{#if:{{{broken2|}}}||display:none}}" | đứt gãy<sup>{{#if:{{{anim|}}}|2|1}}</sup> |- ! rowspan="6" | tân ngữ xác định ! class="secondary" | ngôi thứ nhất số ít | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{1|{{PAGENAME}}}}}я|{{{1|{{PAGENAME}}}}}а}}мро|accel-form=def{{!}}obj{{!}}1s{{!}}spos}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}намро|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳоямро}}|accel-form=def{{!}}obj{{!}}1s{{!}}mpos}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken|}}}я|{{{broken|}}}а}}мро|accel-form=def{{!}}obj{{!}}1s{{!}}broken{{!}}mpos}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken2|}}}я|{{{broken2|}}}а}}мро|accel-form=def{{!}}obj{{!}}1s{{!}}broken{{!}}mpos}} |- ! class="secondary" | ngôi thứ hai số ít | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{1|{{PAGENAME}}}}}я|{{{1|{{PAGENAME}}}}}а}}тро|accel-form=def{{!}}obj{{!}}2s{{!}}spos}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}натро|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳоятро}}|accel-form=def{{!}}obj{{!}}2s{{!}}mpos}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken|}}}я|{{{broken|}}}а}}тро|accel-form=def{{!}}obj{{!}}2s{{!}}broken{{!}}mpos}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken2|}}}я|{{{broken2|}}}а}}тро|accel-form=def{{!}}obj{{!}}2s{{!}}broken{{!}}mpos}} |- ! class="secondary" | ngôi thứ ba số ít | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{1|{{PAGENAME}}}}}я|{{{1|{{PAGENAME}}}}}а}}шро|accel-form=def{{!}}obj{{!}}3s{{!}}spos}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}нашро|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳояшро}}|accel-form=def{{!}}obj{{!}}3s{{!}}mpos}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken|}}}я|{{{broken|}}}а}}шро|accel-form=def{{!}}obj{{!}}3s{{!}}broken{{!}}mpos}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken2|}}}я|{{{broken2|}}}а}}шро|accel-form=def{{!}}obj{{!}}3s{{!}}broken{{!}}mpos}} |- ! class="secondary" | ngôi thứ nhất số nhiều | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{1|{{PAGENAME}}}}}я|{{{1|{{PAGENAME}}}}}а}}монро|accel-form=def{{!}}obj{{!}}1p{{!}}spos}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}намонро|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳоямонро}}|accel-form=def{{!}}obj{{!}}1p{{!}}mpos}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken|}}}я|{{{broken|}}}а}}монро|accel-form=def{{!}}obj{{!}}1p{{!}}broken{{!}}mpos}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken2|}}}я|{{{broken2|}}}а}}монро|accel-form=def{{!}}obj{{!}}1p{{!}}broken{{!}}mpos}} |- ! class="secondary" | ngôi thứ hai số nhiều | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{1|{{PAGENAME}}}}}я|{{{1|{{PAGENAME}}}}}а}}тонро|accel-form=def{{!}}obj{{!}}2p{{!}}spos}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}натонро|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳоятонро}}|accel-form=def{{!}}obj{{!}}2p{{!}}mpos}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken|}}}я|{{{broken|}}}а}}тонро|accel-form=def{{!}}obj{{!}}2p{{!}}broken{{!}}mpos}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken2|}}}я|{{{broken2|}}}а}}тонро|accel-form=def{{!}}obj{{!}}2p{{!}}broken{{!}}mpos}} |- ! class="secondary" | ngôi thứ ba số nhiều | style="{{#ifeq:{{{nb}}}|pl|display:none|}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{1|{{PAGENAME}}}}}я|{{{1|{{PAGENAME}}}}}а}}шонро|accel-form=def{{!}}obj{{!}}3p{{!}}spos}} | style="{{#ifeq:{{{nb}}}|sg|display:none|}}" | {{l-self|tg|{{#if:{{{anim|}}}|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}иё|ӯ|ё|о={{{1|{{PAGENAME}}}}}ё|ю|у={{{1|{{PAGENAME}}}}}во|я|а={{{1|{{PAGENAME}}}}}го|{{{1|{{PAGENAME}}}}}о}}нашонро|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳояшонро}}|accel-form=def{{!}}obj{{!}}3p{{!}}{{!}}mpos}}{{#if:{{{anim|}}}|<sup>1</sup>|}} | style="{{#if:{{{broken|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken|}}}я|{{{broken|}}}а}}шонро|accel-form=def{{!}}obj{{!}}3p{{!}}broken{{!}}mpos}} | style="{{#if:{{{broken2|}}}||display:none}}" | {{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{broken2|}}}}}|ӣ={{tg-infl-noun/stem|{{{broken2|}}}}}ия|а|я|е|э|и|о|ё|у|ю={{{broken2|}}}я|{{{broken2|}}}а}}шонро|accel-form=def{{!}}obj{{!}}3p{{!}}broken{{!}}mpos}} {{inflection-table-bottom|notes={{#if:{{{anim|}}}|<sup>1</sup>Dạng số nhiều của {{mention|tg|-ҳо}} ({{l-self|tg|{{#switch:{{tg-infl-noun/last|{{{1|{{PAGENAME}}}}}}}|ӣ={{tg-infl-noun/stem|{{{1|{{PAGENAME}}}}}}}и|{{{1|{{PAGENAME}}}}}}}ҳо|accel-form=pl}}), có thể chấp nhận.}}{{#if:{{{broken|}}}|{{#if:{{{anim|}}}|<br><sup>2|<sup>1}}</sup>Số nhiều đứt gãy thường ít phổ biến hơn thanh số nhiều.}}}} dudem772v37jo6azgguyace68opx3ms xóc lọ 0 371615 2350002 2331522 2026-05-03T16:15:53Z TheHighFighter2 42988 /* Tiếng Việt */ 2350002 wikitext text/x-wiki =={{langname|vi}}== ==={{ĐM|alt}}=== * {{alter|vi|sóc lọ}} ==={{ĐM|etym}}=== Có khả năng là cách nói tượng trưng của việc xóc một vật có hình trụ như một chiếc lọ. Xem [[xóc]], [[lọ]]. ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|verb}}=== {{vi-verb}} # {{lb|vi|lóng}} Dùng [[tay]] [[nắm]] quanh [[dương vật]] rồi [[di chuyển]] theo [[chuyển động]] [[ra vào]] nhằm [[kích thích]], tạo [[khoái cảm]] [[tình dục]]; [[thủ dâm]]. #: {{syn|vi|thủ dâm|lọ|bắt sóc bỏ lọ|tự sướng|tự xử}} ===={{ĐM|trans}}==== {{trans-top|{{pagename}}}} * {{langname|en}}: {{t+|en|jack off}} {{trans-bottom}} ==={{ĐM|see}}=== * {{l|vi|lọ chéo}} 1qhawbfwurot6wqxmr0jqx0an7j77ql anit 0 382145 2349921 2325401 2026-05-03T13:45:25Z WhoAlone 40420 2349921 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[thương]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} =={{langname|rog}}== ==={{ĐM|adj}}=== {{head|rog|Tính từ}} # [[dễ thương]]. 621d9e8d1cangzzcp13r84a1i71z4p9 pơla 0 383472 2349965 2327651 2026-05-03T14:18:54Z WhoAlone 40420 2349965 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[trồng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} =={{langname|hro}}== ==={{ĐM|verb}}=== {{head|hro|Động từ}} # [[trồng]]. 3fot2wvqh6zza48kli70h3yaeme5c27 khàr 0 395595 2349873 2026-05-03T12:09:58Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[chai]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349873 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[chai]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} td2hrs9x4xg37m6a6grj7j04kz1drcw mòr 0 395596 2349879 2026-05-03T12:16:15Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[bò]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349879 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[bò]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} kfpdzf0arvb9k4dpbjqckpc1wvve09r 0 395597 2349880 2026-05-03T12:16:49Z Lcsnes 40261 Trang mới: “{{minitoc}} {{-Ethi-}} {{character info}} ==={{ĐM|translit}}=== *{{Latn}}: '''ʾ''' hoặc '''ʾä''' ==={{ĐM|etym}}=== *{{etym-from|lang=chữ Nam Ả Rập|term=𐩱}}. Tận cùng là từ {{m+|egy|𓃾}}. ==={{ĐM|letter}}=== {{head|mul|Chữ cái}} #[[chữ cái|Chữ cái]] thứ 13 trong bảng chữ cái [[abjad]] [[Geʽez]], chuyển tự là ''[[ʾ]]'' ==={{ĐM|syllable}}=== {{head|mul|Âm tiết}} #Chữ cái [[âm tiết]] ''ʾä'' trong bảng chữ cái …” 2349880 wikitext text/x-wiki {{minitoc}} {{-Ethi-}} {{character info}} ==={{ĐM|translit}}=== *{{Latn}}: '''ʾ''' hoặc '''ʾä''' ==={{ĐM|etym}}=== *{{etym-from|lang=chữ Nam Ả Rập|term=𐩱}}. Tận cùng là từ {{m+|egy|𓃾}}. ==={{ĐM|letter}}=== {{head|mul|Chữ cái}} #[[chữ cái|Chữ cái]] thứ 13 trong bảng chữ cái [[abjad]] [[Geʽez]], chuyển tự là ''[[ʾ]]'' ==={{ĐM|syllable}}=== {{head|mul|Âm tiết}} #Chữ cái [[âm tiết]] ''ʾä'' trong bảng chữ cái [[abugida]] [[Geʽez]]. ==={{ĐM|ref}}=== *{{Chú thích web|en|author=Gabriella F. Scelta|work=[https://web.archive.org/web/20220408124414/http://www.thisisgabes.com/images/stories/docs/gscelta_geez.pdf The Comparative Origin and Usage of the Ge'ez writing system of Ethiopia]|year=2001|page=5}} *{{Chú thích sách|en|author=Peter T. Daniels, William Bright|title=The world's writing systems|publisher=Oxford University Press|location=New York|year=1996|page=574|pageurl=https://archive.org/details/isbn_9780195079937/page/573}} =={{langname|aiw}}== ==={{ĐM|pron}}=== *{{IPA4|aiw|[ʔa]}} ==={{ĐM|letter}}=== {{head|aiw|Chữ cái|tr='a}} #Chữ cái âm tiết '''a'' trong bộ chữ Geʽez tiếng Aari. #:{{ux|aiw|'''አ'''ፋን፡ኣሪ፡|tr='''A'''fan āri|tiếng Aari|inline=1}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Aari'') [[ሀ#Tiếng_Aari|ሀ]], [[ሁ#Tiếng_Aari|ሁ]], [[ሂ#Tiếng_Aari|ሂ]], [[ሃ#Tiếng_Aari|ሃ]], [[ሄ#Tiếng_Aari|ሄ]], [[ህ#Tiếng_Aari|ህ]], [[ሆ#Tiếng_Aari|ሆ]], [[ለ#Tiếng_Aari|ለ]], [[ሉ#Tiếng_Aari|ሉ]], [[ሊ#Tiếng_Aari|ሊ]], [[ላ#Tiếng_Aari|ላ]], [[ሌ#Tiếng_Aari|ሌ]], [[ል#Tiếng_Aari|ል]], [[ሎ#Tiếng_Aari|ሎ]], [[መ#Tiếng_Aari|መ]], [[ሙ#Tiếng_Aari|ሙ]], [[ሚ#Tiếng_Aari|ሚ]], [[ማ#Tiếng_Aari|ማ]], [[ሜ#Tiếng_Aari|ሜ]], [[ም#Tiếng_Aari|ም]], [[ሞ#Tiếng_Aari|ሞ]], [[ሠ#Tiếng_Aari|ሠ]], [[ሡ#Tiếng_Aari|ሡ]], [[ሢ#Tiếng_Aari|ሢ]], [[ሣ#Tiếng_Aari|ሣ]], [[ሤ#Tiếng_Aari|ሤ]], [[ሥ#Tiếng_Aari|ሥ]], [[ሦ#Tiếng_Aari|ሦ]], [[ረ#Tiếng_Aari|ረ]], [[ሩ#Tiếng_Aari|ሩ]], [[ሪ#Tiếng_Aari|ሪ]], [[ራ#Tiếng_Aari|ራ]], [[ሬ#Tiếng_Aari|ሬ]], [[ር#Tiếng_Aari|ር]], [[ሮ#Tiếng_Aari|ሮ]], [[ሰ#Tiếng_Aari|ሰ]], [[ሱ#Tiếng_Aari|ሱ]], [[ሲ#Tiếng_Aari|ሲ]], [[ሳ#Tiếng_Aari|ሳ]], [[ሴ#Tiếng_Aari|ሴ]], [[ስ#Tiếng_Aari|ስ]], [[ሶ#Tiếng_Aari|ሶ]], [[ቀ#Tiếng_Aari|ቀ]], [[ቁ#Tiếng_Aari|ቁ]], [[ቂ#Tiếng_Aari|ቂ]], [[ቃ#Tiếng_Aari|ቃ]], [[ቄ#Tiếng_Aari|ቄ]], [[ቅ#Tiếng_Aari|ቅ]], [[ቆ#Tiếng_Aari|ቆ]], [[በ#Tiếng_Aari|በ]], [[ቡ#Tiếng_Aari|ቡ]], [[ቢ#Tiếng_Aari|ቢ]], [[ባ#Tiếng_Aari|ባ]], [[ቤ#Tiếng_Aari|ቤ]], [[ብ#Tiếng_Aari|ብ]], [[ቦ#Tiếng_Aari|ቦ]], [[ተ#Tiếng_Aari|ተ]], [[ቱ#Tiếng_Aari|ቱ]], [[ቲ#Tiếng_Aari|ቲ]], [[ታ#Tiếng_Aari|ታ]], [[ቴ#Tiếng_Aari|ቴ]], [[ት#Tiếng_Aari|ት]], [[ቶ#Tiếng_Aari|ቶ]], [[ቸ#Tiếng_Aari|ቸ]], [[ቹ#Tiếng_Aari|ቹ]], [[ቺ#Tiếng_Aari|ቺ]], [[ቻ#Tiếng_Aari|ቻ]], [[ቼ#Tiếng_Aari|ቼ]], [[ች#Tiếng_Aari|ች]], [[ቾ#Tiếng_Aari|ቾ]], [[ነ#Tiếng_Aari|ነ]], [[ኑ#Tiếng_Aari|ኑ]], [[ኒ#Tiếng_Aari|ኒ]], [[ና#Tiếng_Aari|ና]], [[ኔ#Tiếng_Aari|ኔ]], [[ን#Tiếng_Aari|ን]], [[ኖ#Tiếng_Aari|ኖ]], [[ኘ#Tiếng_Aari|ኘ]], [[ኙ#Tiếng_Aari|ኙ]], [[ኚ#Tiếng_Aari|ኚ]], [[ኛ#Tiếng_Aari|ኛ]], [[ኜ#Tiếng_Aari|ኜ]], [[ኝ#Tiếng_Aari|ኝ]], [[ኞ#Tiếng_Aari|ኞ]], [[አ#Tiếng_Aari|አ]], [[ኡ#Tiếng_Aari|ኡ]], [[ኢ#Tiếng_Aari|ኢ]], [[ኣ#Tiếng_Aari|ኣ]], [[ኤ#Tiếng_Aari|ኤ]], [[እ#Tiếng_Aari|እ]], [[ኦ#Tiếng_Aari|ኦ]], [[ከ#Tiếng_Aari|ከ]], [[ኩ#Tiếng_Aari|ኩ]], [[ኪ#Tiếng_Aari|ኪ]], [[ካ#Tiếng_Aari|ካ]], [[ኬ#Tiếng_Aari|ኬ]], [[ክ#Tiếng_Aari|ክ]], [[ኮ#Tiếng_Aari|ኮ]], [[ወ#Tiếng_Aari|ወ]], [[ዉ#Tiếng_Aari|ዉ]], [[ዊ#Tiếng_Aari|ዊ]], [[ዋ#Tiếng_Aari|ዋ]], [[ዌ#Tiếng_Aari|ዌ]], [[ው#Tiếng_Aari|ው]], [[ዎ#Tiếng_Aari|ዎ]], [[ዐ#Tiếng_Aari|ዐ]], [[ዑ#Tiếng_Aari|ዑ]], [[ዒ#Tiếng_Aari|ዒ]], [[ዓ#Tiếng_Aari|ዓ]], [[ዔ#Tiếng_Aari|ዔ]], [[ዕ#Tiếng_Aari|ዕ]], [[ዖ#Tiếng_Aari|ዖ]], [[ዘ#Tiếng_Aari|ዘ]], [[ዙ#Tiếng_Aari|ዙ]], [[ዚ#Tiếng_Aari|ዚ]], [[ዛ#Tiếng_Aari|ዛ]], [[ዜ#Tiếng_Aari|ዜ]], [[ዝ#Tiếng_Aari|ዝ]], [[ዞ#Tiếng_Aari|ዞ]], [[ዠ#Tiếng_Aari|ዠ]], [[ዡ#Tiếng_Aari|ዡ]], [[ዢ#Tiếng_Aari|ዢ]], [[ዣ#Tiếng_Aari|ዣ]], [[ዤ#Tiếng_Aari|ዤ]], [[ዥ#Tiếng_Aari|ዥ]], [[ዦ#Tiếng_Aari|ዦ]], [[የ#Tiếng_Aari|የ]], [[ዩ#Tiếng_Aari|ዩ]], [[ዪ#Tiếng_Aari|ዪ]], [[ያ#Tiếng_Aari|ያ]], [[ዬ#Tiếng_Aari|ዬ]], [[ይ#Tiếng_Aari|ይ]], [[ዮ#Tiếng_Aari|ዮ]], [[ደ#Tiếng_Aari|ደ]], [[ዱ#Tiếng_Aari|ዱ]], [[ዲ#Tiếng_Aari|ዲ]], [[ዳ#Tiếng_Aari|ዳ]], [[ዴ#Tiếng_Aari|ዴ]], [[ድ#Tiếng_Aari|ድ]], [[ዶ#Tiếng_Aari|ዶ]], [[ዸ#Tiếng_Aari|ዸ]], [[ዹ#Tiếng_Aari|ዹ]], [[ዺ#Tiếng_Aari|ዺ]], [[ዻ#Tiếng_Aari|ዻ]], [[ዼ#Tiếng_Aari|ዼ]], [[ዽ#Tiếng_Aari|ዽ]], [[ዾ#Tiếng_Aari|ዾ]], [[ጀ#Tiếng_Aari|ጀ]], [[ጁ#Tiếng_Aari|ጁ]], [[ጂ#Tiếng_Aari|ጂ]], [[ጃ#Tiếng_Aari|ጃ]], [[ጄ#Tiếng_Aari|ጄ]], [[ጅ#Tiếng_Aari|ጅ]], [[ጆ#Tiếng_Aari|ጆ]], [[ገ#Tiếng_Aari|ገ]], [[ጉ#Tiếng_Aari|ጉ]], [[ጊ#Tiếng_Aari|ጊ]], [[ጋ#Tiếng_Aari|ጋ]], [[ጌ#Tiếng_Aari|ጌ]], [[ግ#Tiếng_Aari|ግ]], [[ጎ#Tiếng_Aari|ጎ]], [[ጠ#Tiếng_Aari|ጠ]], [[ጡ#Tiếng_Aari|ጡ]], [[ጢ#Tiếng_Aari|ጢ]], [[ጣ#Tiếng_Aari|ጣ]], [[ጤ#Tiếng_Aari|ጤ]], [[ጥ#Tiếng_Aari|ጥ]], [[ጦ#Tiếng_Aari|ጦ]], [[ጨ#Tiếng_Aari|ጨ]], [[ጩ#Tiếng_Aari|ጩ]], [[ጪ#Tiếng_Aari|ጪ]], [[ጫ#Tiếng_Aari|ጫ]], [[ጬ#Tiếng_Aari|ጬ]], [[ጭ#Tiếng_Aari|ጭ]], [[ጮ#Tiếng_Aari|ጮ]], [[ጰ#Tiếng_Aari|ጰ]], [[ጱ#Tiếng_Aari|ጱ]], [[ጲ#Tiếng_Aari|ጲ]], [[ጳ#Tiếng_Aari|ጳ]], [[ጴ#Tiếng_Aari|ጴ]], [[ጵ#Tiếng_Aari|ጵ]], [[ጶ#Tiếng_Aari|ጶ]], [[ጸ#Tiếng_Aari|ጸ]], [[ጹ#Tiếng_Aari|ጹ]], [[ጺ#Tiếng_Aari|ጺ]], [[ጻ#Tiếng_Aari|ጻ]], [[ጼ#Tiếng_Aari|ጼ]], [[ጽ#Tiếng_Aari|ጽ]], [[ጾ#Tiếng_Aari|ጾ]], [[ፈ#Tiếng_Aari|ፈ]], [[ፉ#Tiếng_Aari|ፉ]], [[ፊ#Tiếng_Aari|ፊ]], [[ፋ#Tiếng_Aari|ፋ]], [[ፌ#Tiếng_Aari|ፌ]], [[ፍ#Tiếng_Aari|ፍ]], [[ፎ#Tiếng_Aari|ፎ]], [[ፐ#Tiếng_Aari|ፐ]], [[ፑ#Tiếng_Aari|ፑ]], [[ፒ#Tiếng_Aari|ፒ]], [[ፓ#Tiếng_Aari|ፓ]], [[ፔ#Tiếng_Aari|ፔ]], [[ፕ#Tiếng_Aari|ፕ]], [[ፖ#Tiếng_Aari|ፖ]] ==={{ĐM|ref}}=== *{{Chú thích sách|aiw|author=The Bible Society of Ethiopia|title=[https://web.archive.org/web/20190506084050/http://books.good-amharic-books.com/aari-matt.pdf ክለ ጫቀ]|year=1997}} =={{langname|alw}}== ==={{ĐM|pron}}=== *{{IPA4|alw|[ʔa]}} ==={{ĐM|letter}}=== {{head|alw|Chữ cái|tr=ä}} #Chữ cái âm tiết ''ä'' trong bộ chữ Geʽez tiếng Alaba-K’abeena. #:{{quote|alw|ኩ ጠዉ ጉዕሙንኩ እሀኖ ወክቱ ግደኑ እኮቤቺሃ ከ ራግ ላገተ '''አ'''ነበበኖሁ ማሰ'''አ'''ሞእሃን፤ ህትን ከ ራግስ ላገተ ሞጮጭታእሩለከ ከን ራግ ላገ ኣዜን ከተበሞሃ '''አ'''ታእሩ ማሰ'''አ'''ንቶእራን።|tr=ku ṭäwu guʿmunku ʾəhäno wäktu gədänu ʾəkobečiha kä rag lagätä '''ʾä'''näbäbänohu masä'''ʾä'''moʾhan; hətn kä rags lagätä moč̣oč̣taʾruläkä kän rag lagä ʾazen kätäbämoha '''ʾä'''taʾru masä'''ʾä'''nətoʾran.|Phước cho kẻ đọc cùng những kẻ nghe lời tiên-tri nầy, và giữ theo đều đã viết ra đây. Vì thì-giờ đã gần rồi. ([[s:Khải huyền/1#1:3|Khải huyền 1:3]])}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Alaba-K’abeena'') [[ሀ#Tiếng_Alaba-K’abeena|ሀ]], [[ሁ#Tiếng_Alaba-K’abeena|ሁ]], [[ሂ#Tiếng_Alaba-K’abeena|ሂ]], [[ሃ#Tiếng_Alaba-K’abeena|ሃ]], [[ሄ#Tiếng_Alaba-K’abeena|ሄ]], [[ሆ#Tiếng_Alaba-K’abeena|ሆ]], [[ለ#Tiếng_Alaba-K’abeena|ለ]], [[ሉ#Tiếng_Alaba-K’abeena|ሉ]], [[ሊ#Tiếng_Alaba-K’abeena|ሊ]], [[ላ#Tiếng_Alaba-K’abeena|ላ]], [[ሌ#Tiếng_Alaba-K’abeena|ሌ]], [[ሎ#Tiếng_Alaba-K’abeena|ሎ]], [[መ#Tiếng_Alaba-K’abeena|መ]], [[ሙ#Tiếng_Alaba-K’abeena|ሙ]], [[ሚ#Tiếng_Alaba-K’abeena|ሚ]], [[ማ#Tiếng_Alaba-K’abeena|ማ]], [[ሜ#Tiếng_Alaba-K’abeena|ሜ]], [[ሞ#Tiếng_Alaba-K’abeena|ሞ]], [[ረ#Tiếng_Alaba-K’abeena|ረ]], [[ሩ#Tiếng_Alaba-K’abeena|ሩ]], [[ሪ#Tiếng_Alaba-K’abeena|ሪ]], [[ራ#Tiếng_Alaba-K’abeena|ራ]], [[ሬ#Tiếng_Alaba-K’abeena|ሬ]], [[ሮ#Tiếng_Alaba-K’abeena|ሮ]], [[ሰ#Tiếng_Alaba-K’abeena|ሰ]], [[ሱ#Tiếng_Alaba-K’abeena|ሱ]], [[ሲ#Tiếng_Alaba-K’abeena|ሲ]], [[ሳ#Tiếng_Alaba-K’abeena|ሳ]], [[ሴ#Tiếng_Alaba-K’abeena|ሴ]], [[ሶ#Tiếng_Alaba-K’abeena|ሶ]], [[ሸ#Tiếng_Alaba-K’abeena|ሸ]], [[ሹ#Tiếng_Alaba-K’abeena|ሹ]], [[ሺ#Tiếng_Alaba-K’abeena|ሺ]], [[ሻ#Tiếng_Alaba-K’abeena|ሻ]], [[ሼ#Tiếng_Alaba-K’abeena|ሼ]], [[ሾ#Tiếng_Alaba-K’abeena|ሾ]], [[ቀ#Tiếng_Alaba-K’abeena|ቀ]], [[ቁ#Tiếng_Alaba-K’abeena|ቁ]], [[ቂ#Tiếng_Alaba-K’abeena|ቂ]], [[ቃ#Tiếng_Alaba-K’abeena|ቃ]], [[ቄ#Tiếng_Alaba-K’abeena|ቄ]], [[ቆ#Tiếng_Alaba-K’abeena|ቆ]], [[በ#Tiếng_Alaba-K’abeena|በ]], [[ቡ#Tiếng_Alaba-K’abeena|ቡ]], [[ቢ#Tiếng_Alaba-K’abeena|ቢ]], [[ባ#Tiếng_Alaba-K’abeena|ባ]], [[ቤ#Tiếng_Alaba-K’abeena|ቤ]], [[ቦ#Tiếng_Alaba-K’abeena|ቦ]], [[ተ#Tiếng_Alaba-K’abeena|ተ]], [[ቱ#Tiếng_Alaba-K’abeena|ቱ]], [[ቲ#Tiếng_Alaba-K’abeena|ቲ]], [[ታ#Tiếng_Alaba-K’abeena|ታ]], [[ቴ#Tiếng_Alaba-K’abeena|ቴ]], [[ቶ#Tiếng_Alaba-K’abeena|ቶ]], [[ቸ#Tiếng_Alaba-K’abeena|ቸ]], [[ቹ#Tiếng_Alaba-K’abeena|ቹ]], [[ቺ#Tiếng_Alaba-K’abeena|ቺ]], [[ቻ#Tiếng_Alaba-K’abeena|ቻ]], [[ቼ#Tiếng_Alaba-K’abeena|ቼ]], [[ቾ#Tiếng_Alaba-K’abeena|ቾ]], [[ነ#Tiếng_Alaba-K’abeena|ነ]], [[ኑ#Tiếng_Alaba-K’abeena|ኑ]], [[ኒ#Tiếng_Alaba-K’abeena|ኒ]], [[ና#Tiếng_Alaba-K’abeena|ና]], [[ኔ#Tiếng_Alaba-K’abeena|ኔ]], [[ኖ#Tiếng_Alaba-K’abeena|ኖ]], [[ከ#Tiếng_Alaba-K’abeena|ከ]], [[ኩ#Tiếng_Alaba-K’abeena|ኩ]], [[ኪ#Tiếng_Alaba-K’abeena|ኪ]], [[ካ#Tiếng_Alaba-K’abeena|ካ]], [[ኬ#Tiếng_Alaba-K’abeena|ኬ]], [[ኮ#Tiếng_Alaba-K’abeena|ኮ]], [[ወ#Tiếng_Alaba-K’abeena|ወ]], [[ዉ#Tiếng_Alaba-K’abeena|ዉ]], [[ዊ#Tiếng_Alaba-K’abeena|ዊ]], [[ዋ#Tiếng_Alaba-K’abeena|ዋ]], [[ዌ#Tiếng_Alaba-K’abeena|ዌ]], [[ዎ#Tiếng_Alaba-K’abeena|ዎ]], [[ዐ#Tiếng_Alaba-K’abeena|ዐ]], [[ዑ#Tiếng_Alaba-K’abeena|ዑ]], [[ዒ#Tiếng_Alaba-K’abeena|ዒ]], [[ዓ#Tiếng_Alaba-K’abeena|ዓ]], [[ዔ#Tiếng_Alaba-K’abeena|ዔ]], [[ዖ#Tiếng_Alaba-K’abeena|ዖ]], [[ዘ#Tiếng_Alaba-K’abeena|ዘ]], [[ዙ#Tiếng_Alaba-K’abeena|ዙ]], [[ዚ#Tiếng_Alaba-K’abeena|ዚ]], [[ዛ#Tiếng_Alaba-K’abeena|ዛ]], [[ዜ#Tiếng_Alaba-K’abeena|ዜ]], [[ዞ#Tiếng_Alaba-K’abeena|ዞ]], [[ዠ#Tiếng_Alaba-K’abeena|ዠ]], [[ዡ#Tiếng_Alaba-K’abeena|ዡ]], [[ዢ#Tiếng_Alaba-K’abeena|ዢ]], [[ዣ#Tiếng_Alaba-K’abeena|ዣ]], [[ዤ#Tiếng_Alaba-K’abeena|ዤ]], [[ዦ#Tiếng_Alaba-K’abeena|ዦ]], [[የ#Tiếng_Alaba-K’abeena|የ]], [[ዩ#Tiếng_Alaba-K’abeena|ዩ]], [[ዪ#Tiếng_Alaba-K’abeena|ዪ]], [[ያ#Tiếng_Alaba-K’abeena|ያ]], [[ዬ#Tiếng_Alaba-K’abeena|ዬ]], [[ዮ#Tiếng_Alaba-K’abeena|ዮ]], [[ደ#Tiếng_Alaba-K’abeena|ደ]], [[ዱ#Tiếng_Alaba-K’abeena|ዱ]], [[ዲ#Tiếng_Alaba-K’abeena|ዲ]], [[ዳ#Tiếng_Alaba-K’abeena|ዳ]], [[ዴ#Tiếng_Alaba-K’abeena|ዴ]], [[ዶ#Tiếng_Alaba-K’abeena|ዶ]], [[ጀ#Tiếng_Alaba-K’abeena|ጀ]], [[ጁ#Tiếng_Alaba-K’abeena|ጁ]], [[ጂ#Tiếng_Alaba-K’abeena|ጂ]], [[ጃ#Tiếng_Alaba-K’abeena|ጃ]], [[ጄ#Tiếng_Alaba-K’abeena|ጄ]], [[ጆ#Tiếng_Alaba-K’abeena|ጆ]], [[ገ#Tiếng_Alaba-K’abeena|ገ]], [[ጉ#Tiếng_Alaba-K’abeena|ጉ]], [[ጊ#Tiếng_Alaba-K’abeena|ጊ]], [[ጋ#Tiếng_Alaba-K’abeena|ጋ]], [[ጌ#Tiếng_Alaba-K’abeena|ጌ]], [[ጎ#Tiếng_Alaba-K’abeena|ጎ]], [[ጠ#Tiếng_Alaba-K’abeena|ጠ]], [[ጡ#Tiếng_Alaba-K’abeena|ጡ]], [[ጢ#Tiếng_Alaba-K’abeena|ጢ]], [[ጣ#Tiếng_Alaba-K’abeena|ጣ]], [[ጤ#Tiếng_Alaba-K’abeena|ጤ]], [[ጦ#Tiếng_Alaba-K’abeena|ጦ]], [[ጨ#Tiếng_Alaba-K’abeena|ጨ]], [[ጩ#Tiếng_Alaba-K’abeena|ጩ]], [[ጪ#Tiếng_Alaba-K’abeena|ጪ]], [[ጫ#Tiếng_Alaba-K’abeena|ጫ]], [[ጬ#Tiếng_Alaba-K’abeena|ጬ]], [[ጮ#Tiếng_Alaba-K’abeena|ጮ]], [[ጰ#Tiếng_Alaba-K’abeena|ጰ]], [[ጱ#Tiếng_Alaba-K’abeena|ጱ]], [[ጲ#Tiếng_Alaba-K’abeena|ጲ]], [[ጳ#Tiếng_Alaba-K’abeena|ጳ]], [[ጴ#Tiếng_Alaba-K’abeena|ጴ]], [[ጶ#Tiếng_Alaba-K’abeena|ጶ]], [[ፈ#Tiếng_Alaba-K’abeena|ፈ]], [[ፉ#Tiếng_Alaba-K’abeena|ፉ]], [[ፊ#Tiếng_Alaba-K’abeena|ፊ]], [[ፋ#Tiếng_Alaba-K’abeena|ፋ]], [[ፌ#Tiếng_Alaba-K’abeena|ፌ]], [[ፎ#Tiếng_Alaba-K’abeena|ፎ]], [[ፐ#Tiếng_Alaba-K’abeena|ፐ]], [[ፑ#Tiếng_Alaba-K’abeena|ፑ]], [[ፒ#Tiếng_Alaba-K’abeena|ፒ]], [[ፓ#Tiếng_Alaba-K’abeena|ፓ]], [[ፔ#Tiếng_Alaba-K’abeena|ፔ]], [[ፖ#Tiếng_Alaba-K’abeena|ፖ]] ==={{ĐM|ref}}=== *{{Chú thích web|author=The Word for the World International|work=Halaba New Testament|entryurl=https://www.bible.com/bible/4138/REV.1.HLB|entry=ያህይ ለዕዮ መናመተ 1|year=2025}} =={{langname|am}}== {{wikipedia|am:}} ==={{ĐM|pron}}=== *{{IPA4|am|[ʔa]}} ==={{ĐM|letter}}=== {{head|am|Chữ cái}} #Chữ cái âm tiết ''ä'' trong bảng chữ cái ''fidäl'' tiếng Amhara. #:{{ux|am|[[አቧራ#Tiếng_Amhara|'''አ'''ቧራ]]|[[bụi]]|inline=1}} ===={{ĐM|see}}==== *{{letters|lang=am|sc=Ethi|qual=Bảng chữ cái fidäl|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|ሏ|ሐ|ሑ|ሒ|ሓ|ሔ|ሕ|ሖ|ሗ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ሟ|ሠ|ሡ|ሢ|ሣ|ሤ|ሥ|ሦ|ሧ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሯ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሷ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ሿ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|ቈ|ቊ|ቋ|ቌ|ቍ|በ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ቧ|ቨ|ቩ|ቪ|ቫ|ቬ|ቭ|ቮ|ቯ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቷ|ቸ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ቿ|ኀ|ኁ|ኂ|ኃ|ኄ|ኅ|ኆ|ኈ|ኊ|ኋ|ኌ|ኍ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|ኗ|ኘ|ኙ|ኚ|ኛ|ኜ|ኝ|ኞ|ኟ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ኧ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ኰ|ኲ|ኳ|ኴ|ኵ|ኸ|ኹ|ኺ|ኻ|ኼ|ኽ|ኾ|ዀ|ዂ|ዃ|ዄ|ዅ|ወ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዐ|ዑ|ዒ|ዓ|ዔ|ዕ|ዖ|ዘ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|ዟ|ዠ|ዡ|ዢ|ዣ|ዤ|ዥ|ዦ|ዧ|የ|ዩ|ዪ|ያ|ዬ|ይ|ዮ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ዷ|ጀ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ጇ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጐ|ጒ|ጓ|ጔ|ጕ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጧ|ጨ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ጯ|ጰ|ጱ|ጲ|ጳ|ጴ|ጵ|ጶ|ጷ|ጸ|ጹ|ጺ|ጻ|ጼ|ጽ|ጾ|ጿ|ፀ|ፁ|ፂ|ፃ|ፄ|ፅ|ፆ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ|ፏ|ፐ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ|ፗ}} ==={{ĐM|ref}}=== *{{Chú thích web|en|work=Amharic Teacher|entry=አ|entryurl=https://amharicteacher.com/list/%E1%8A%A0|year=2026}} =={{langname|anu}}== ==={{ĐM|pron}}=== *{{IPA4|anu|[ʔa]}} ==={{ĐM|letter}}=== {{head|anu|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Anuak. #:{{ux|anu|የ'''አ'''ኝዋክ|tr=ye'''a'''nyiwaki|tiếng Anuak|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích web|anu|author=Bible Society of Ethiopia|work=Wëël Jwøk|year=2026|entry=Acther 1|entryurl=https://www.bible.com/bible/3201/EST.1.ANYUB}} =={{langname|agj}}== ==={{ĐM|pron}}=== *{{IPA4|agj|[ʔə]}} ==={{ĐM|letter}}=== {{head|agj|Chữ cái|tr=ä}} #Chữ cái âm tiết ''ä'' trong bộ chữ Geʽez tiếng Argobba. #:{{ux|agj|'''አ'''ዓርጎባ፡ኣፍ፡|tr='''’Ä'''-‛argobba ’af|tiếng Argobba|inline=1}} ===={{ĐM|see}}==== *{{letters|lang=agj|sc=Ethi|qual=Bảng chữ cái Geʽez tiếng Argobba|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|ሐ|ሑ|ሒ|ሓ|ሔ|ሕ|ሖ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቸ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ወ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዐ|ዑ|ዒ|ዓ|ዔ|ዕ|ዖ|ዘ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|የ|ዩ|ዪ|ያ|ዮ|ይ|ዮ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ጀ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ|ፐ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Wolf Leslau|title=Ethiopic Documents: Argobba: Grammar and Dictionary|publisher=Otto Harrassowitz Verlag|location=Wiesbaden|year=1997|isbn=978-3-447-03955-0|pageurl=https://books.google.com/books?id=vIV4yog4e9kC&pg=PA188|page=188}} =={{langname|awn}}== ==={{ĐM|pron}}=== *{{IPA4|awn|[a]|[ɑ]}} ==={{ĐM|letter}}=== {{head|awn|Chữ cái|tr=’a}} #Chữ cái âm tiết ''’a'' trong bộ chữ Geʽez tiếng Awngi. #:{{ux|awn|'''አ'''ውጚ|tr='''a'''wṅi|Awngi|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=awn|sc=Ethi|qual=Bảng chữ cái Geʽez tiếng Awngi|ሀ|ሁ|ሂ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ሌ|ል|ሎ|መ|ሙ|ሚ|ሜ|ም|ሞ|ረ|ሩ|ሪ|ሬ|ር|ሮ|ሰ|ሱ|ሲ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሼ|ሽ|ሾ|ቐ|ቑ|ቒ|ቔ|ቕ|ቖ|ቘ|ቚ|ቜ|ቝ|በ|ቡ|ቢ|ቤ|ብ|ቦ|ቨ|ቩ|ቪ|ቬ|ቭ|ቮ|ተ|ቱ|ቲ|ቴ|ት|ቶ|ቸ|ቹ|ቺ|ቼ|ች|ቾ|ነ|ኑ|ኒ|ኔ|ን|ኖ|አ|ኡ|ኢ|ኤ|እ|ኦ|ከ|ኩ|ኪ|ኬ|ክ|ኮ|ኰ|ኲ|ኴ|ኵ|ኸ|ኹ|ኺ|ኼ|ኽ|ኾ|ዀ|ዂ|ዄ|ዅ|ወ|ዉ|ዊ|ዌ|ው|ዎ|ዘ|ዙ|ዚ|ዜ|ዝ|ዞ|የ|ዩ|ዪ|ዬ|ይ|ዮ|ደ|ዱ|ዲ|ዴ|ድ|ዶ|ጀ|ጁ|ጂ|ጄ|ጅ|ጆ|ገ|ጉ|ጊ|ጌ|ግ|ጎ|ጐ|ጒ|ጔ|ጕ|ጘ|ጙ|ጚ|ጜ|ጝ|ጞ|ⶓ|ⶔ|ⶕ|ⶖ|ፀ|ፁ|ፂ|ፄ|ፅ|ፆ|ፈ|ፉ|ፊ|ፌ|ፍ|ፎ|ፐ|ፑ|ፒ|ፔ|ፕ|ፖ}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Andreas Joswig|title=[https://web.archive.org/web/20201212173742/https://www.sil.org/system/files/reapdata/85/80/86/85808610450908625222845020214713662117/silewp2010_003.pdf The phonology of Awngi]|publisher=SIL International|year=2010}} =={{langname|bsw}}== ==={{ĐM|pron}}=== *{{IPA4|bsw|[a]}} ==={{ĐM|letter}}=== {{head|bsw|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Baiso. #:{{quote|bsw|“ህክና፥ ዴለልትቲ ፋቶ ቶታይናታ ባባርትትና ኡሙልናታ መገኬሳና '''አ'''ማኑኤል '''አ'''ማምናራ፥” ፉረንና “ዋ ኖኔ ዎታ ግራ '''አ'''ማኖያ።”|tr=«Hikkina, deeleeltiti fato tootaayinatta babbaartitina umulnatta megekkeessana '''a'''manuɂeeli '''a'''maminnara,» fureeninna «Waa noonne wota gira '''a'''manoyya.»|Mọi việc đã xảy ra như vậy, để cho ứng-nghiệm lời Chúa đã dùng đấng tiên-tri mà phán rằng: ([[s:Ma-thi-ơ/1#1:23|Ma-thi-ơ 1:23]])}} ==={{ĐM|ref}}=== *{{Chú thích web|bsw|author=The Word for the World International|work=አማቶ ኦኡሱብ|year=2025|entry=ማቶሳ 1|entryurl=https://www.bible.com/bible/4064/MAT.1.BAYNTETH}} *{{Chú thích web|bsw|author=The Word for the World International|work=Ammato O?usub|year=2025|entry=Matoosa 1|entryurl=https://www.bible.com/bible/4068/MAT.1.BAYNT}} =={{langname|bcq}}== ==={{ĐM|pron}}=== *{{IPA4|bcq|[ʔə]}} ==={{ĐM|letter}}=== {{head|bcq|Chữ cái|tr=a}} #Chữ cái âm tiết ''q'' trong bộ chữ Geʽez tiếng Bench. #:{{ux|bcq|'''አ'''ብ|tr='''a'''b|[[ngày]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=bcq|sc=Ethi|qual=Bảng chữ cái Geʽez tiếng Bench|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ሉ|ሊ|ላ|ሌ|ል|ሎ|ሑ|ሒ|ሓ|ሔ|ሕ|ሖ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ሡ|ሢ|ሣ|ሤ|ሥ|ሦ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ⶡ|ⶢ|ⶣ|ⶤ|ⶥ|ⶦ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ⶩ|ⶪ|ⶫ|ⶬ|ⶭ|ⶮ|ኑ|ኒ|ና|ኔ|ን|ኖ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|ዡ|ዢ|ዣ|ዤ|ዥ|ዦ|ⶱ|ⶲ|ⶳ|ⶴ|ⶵ|ⶶ|ዩ|ዪ|ያ|ዬ|ይ|ዮ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ⶹ|ⶺ|ⶻ|ⶼ|ⶽ|ⶾ|ጱ|ጲ|ጳ|ጴ|ጵ|ጶ|ጹ|ጺ|ጻ|ጼ|ጽ|ጾ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Mizan-Aman, Tekle Gizaw|title=[https://www.sil.org/system/files/reapdata/65/19/22/65192258469084216414974946247994088627/English_Benc_non_Amharic_School_Dictionary.pdf English-Benc’non-Amharic School Dictionary]|publisher=SIL Ethiopia|year=2015|page=224}} *{{Chú thích web|author=The Bible Society of Ethiopia|year=1990|entryurl=https://live.bible.is/bible/BCQBEN/PHP/1|entry=ፒልጲስዮስ 1|work=1990 Bible Society of Ethiopia}} =={{langname|byn}}== ==={{ĐM|pron}}=== *{{IPA4|byn|[ʔə]}} ==={{ĐM|letter}}=== {{head|byn|Chữ cái}} #Chữ cái âm tiết ''ä'' trong bộ chữ Geʽez tiếng Bilen. #:{{ux|byn|[[አንካላሊ#Tiếng_Bilen|'''አ'''ንካላሊ]]|[[tình bạn]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=byn|sc=Ethi|qual=Bảng chữ cái Geʽez tiếng Bilen|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|ሐ|ሑ|ሒ|ሓ|ሔ|ሕ|ሖ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|በ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ኸ|ኹ|ኺ|ኻ|ኼ|ኽ|ኾ|ወ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዐ|ዑ|ዒ|ዓ|ዔ|ዕ|ዖ|የ|ዩ|ዪ|ያ|ዮ|ይ|ዮ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ጀ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጘ|ጙ|ጚ|ጛ|ጜ|ጝ|ጞ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጨ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ|ዘ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|ቸ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ፐ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ|ቨ|ቩ|ቪ|ቫ|ቬ|ቭ|ቮ|ቈ|ቊ|ቋ|ቌ|ቍ|ኰ|ኲ|ኳ|ኴ|ኵ|ዀ|ዂ|ዃ|ዄ|ዅ|ጐ|ጒ|ጓ|ጔ|ጕ|ⶓ|ⶔ|ጟ|ⶕ|ⶖ}} ==={{ĐM|ref}}=== *{{Chú thích sách|it|author=Giuseppe Verfasser Sapeto|title=Viaggio e missione cattolica fra i Mensâ, i Bogos e gli Habab con un cenno geografico e storico dell' Abissinia|publisher=Roma Congreg. di Propaganda Fide|year=1857|page=508|pageurl=https://archive.org/details/bub_gb_zG2jbr2523oC/page/508}} =={{langname|bji}}== ==={{ĐM|pron}}=== *{{IPA4|bji|[a]}} ==={{ĐM|letter}}=== {{head|bji|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Burji. #:{{ux|bji|'''አ'''ኒ|tr='''a'''ni|[[tôi]]|inline=1}} ===={{ĐM|see}}==== *{{letters|lang=bji|sc=Ethi|qual=Chữ Geʽez tiếng Burji|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ሠ|ሡ|ሢ|ሣ|ሤ|ሥ|ሦ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|በ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቸ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|ኘ|ኙ|ኚ|ኛ|ኜ|ኝ|ኞ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ኸ|ኹ|ኺ|ኻ|ኼ|ኽ|ኾ|ወ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዘ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|የ|ዩ|ዪ|ያ|ዬ|ይ|ዮ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ዸ|ዹ|ዺ|ዻ|ዼ|ዽ|ዾ|ጀ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጨ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ጰ|ጱ|ጲ|ጳ|ጴ|ጵ|ጶ|ጸ|ጹ|ጺ|ጻ|ጼ|ጽ|ጾ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ|ፐ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ}} ==={{ĐM|ref}}=== *{{cite-book|en|author=Allan R. Bomhard|title=Sasse - An Etymological Dictionary of Burji|year=1982|publisher=Buske|location=Hamburg|isbn=3-87118-561-2|pageurl=https://archive.org/details/sasseanetymologicaldictionaryofburji1982/page/n41|page=26}} *{{cite-book|en|author=Roba Dame & Charlotte Wedekind|title=[https://web.archive.org/web/20160108035641/http://www.kwedekind.de/Eingang1/PdfFiles/2008_Burji_Dictionary_of_1994.pdf Burji Dictionary]|year=2008|page=4}} =={{langname|dox}}== ==={{ĐM|pron}}=== *{{IPA4|dox|[a]}} ==={{ĐM|letter}}=== {{head|dox|Chữ cái|tr=a/aa}} #Chữ cái âm tiết ''a/aa'' trong bộ chữ Geʽez tiếng Bussa. #:{{ux|dox|'''አ'''ሆቸ|tr='''a'''hocha|[[ông]]|inline=1}} ==={{ĐM|ref}}=== *{{cite-book|en|author=Brittney Balfour|title=[https://www.sil.org/system/files/reapdata/11/83/96/118396933329433245941912560797291352266/Mosiye_Grammar_Shellbook.pdf A Brief Grammar of the Mositacha Language]|year=2021|page=6|location=Addis Ababa, Ethiopia|publisher=Mositacha Project}} =={{langname|dlk}}== ==={{ĐM|pron}}=== *{{IPA4|dlk|[a]}} ==={{ĐM|letter}}=== {{head|dlk|Chữ cái}} #Chữ cái âm tiết ''ä'' trong bộ chữ Geʽez ghi tiếng Dahalik. #:{{ux|dlk|[[አና#Tiếng_Dahalik|'''አ'''ና]]|[[tôi]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=dlk|sc=Ethi|qual=Chữ Geʽez tiếng Dahalik|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|ሐ|ሑ|ሒ|ሓ|ሔ|ሕ|ሖ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|በ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቸ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ኀ|ኁ|ኂ|ኃ|ኄ|ኅ|ኆ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ወ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዐ|ዑ|ዒ|ዓ|ዔ|ዕ|ዖ|ዘ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|ዠ|ዡ|ዢ|ዣ|ዤ|ዥ|ዦ|የ|ዩ|ዪ|ያ|ዬ|ይ|ዮ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ጀ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጨ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ጰ|ጱ|ጲ|ጳ|ጴ|ጵ|ጶ|ጸ|ጹ|ጺ|ጻ|ጼ|ጽ|ጾ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ|ፐ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ|ቈ|ቊ|ቋ|ቌ|ቍ|ኈ|ኊ|ኋ|ኌ|ኍ|ኰ|ኲ|ኳ|ኴ|ኵ|ጐ|ጒ|ጓ|ጔ|ጕ}} =={{langname|gdl}}== ==={{ĐM|pron}}=== *{{IPA4|gdl|[a]}} ==={{ĐM|letter}}=== {{head|gdl|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Dirasha. #:{{ux|gdl|'''አ'''ፉር|tr=[[afur#Tiếng_Dirasha|'''a'''fur]]|[[bốn]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=gdl|sc=Ethi|qual=Chữ Geʽez tiếng Dirasha|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቸ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|ኘ|ኙ|ኚ|ኛ|ኜ|ኝ|ኞ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ወ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|የ|ዩ|ዪ|ያ|ዬ|ይ|ዮ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ጰ|ጱ|ጲ|ጳ|ጴ|ጵ|ጶ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|ጨ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ኸ|ኹ|ኺ|ኻ|ኼ|ኽ|ኾ|ፐ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Serawit Wolde|title=[https://www.sil.org/system/files/reapdata/93/60/80/93608061087986068351745870816128651972/English_Dhirayytta_Amharic_School_Dictionary_2022.pdf English – Dhirayyitta – Amharic School Dictionary]|year=2022|publisher=SIL Ethiopia Language Development and Multilingual Education Project|page=195}} =={{langname|mdx}}== ==={{ĐM|pron}}=== *{{IPA4|mdx|[ɛ~ə]}} ==={{ĐM|letter}}=== {{head|mdx|Chữ cái|tr=ɛ}} #Chữ cái âm tiết ''ɛ'' trong bộ chữ Geʽez tiếng Dizi. #:{{ux|mdx|'''አ'''ል|tr='''a:'''l|[[lửa]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=mdx|sc=Ethi|qual=Bảng chữ cái Geʽez tiếng Dizi|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ⶠ|ⶡ|ⶢ|ⶣ|ⶤ|ⶥ|ⶦ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|በ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቸ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ⶨ|ⶩ|ⶪ|ⶫ|ⶬ|ⶭ|ⶮ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|አ|ኡ|ኢ|ኣ|ኤ|ኦ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ወ|ዉ|ዊ|ዋ|ዌ|ዎ|ዘ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|ዠ|ዡ|ዢ|ዣ|ዤ|ዥ|ዦ|ⶰ|ⶱ|ⶲ|ⶳ|ⶴ|ⶵ|ⶶ|የ|ዩ|ዪ|ያ|ዬ|ዮ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ጀ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጘ|ጙ|ጚ|ጛ|ጜ|ጝ|ጞ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጨ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ⶸ|ⶹ|ⶺ|ⶻ|ⶼ|ⶽ|ⶾ|ጰ|ጱ|ጲ|ጳ|ጴ|ጵ|ጶ|ጸ|ጹ|ጺ|ጻ|ጼ|ጽ|ጾ|ፀ|ፁ|ፂ|ፃ|ፄ|ፅ|ፆ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ|ፐ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Marvin Dean Beachy|title=[https://web.archive.org/web/20230411125858/https://rc.library.uta.edu/uta-ir/bitstream/handle/10106/206/umi-uta-1121.pdf An Overview of Central Dizin Phonology and Morphology]|publisher=The University of Texas at Arlington|year=2010|page=163}} =={{langname|gwd}}== ==={{ĐM|pron}}=== *{{IPA4|gwd|[a]}} ==={{ĐM|letter}}=== {{head|gwd|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Gawwada. #:{{ux|gwd|'''አ'''ሞ|tr='''a'''mo|[[cổ]]|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Aysama Atuusho|title=[https://www.sil.org/system/files/reapdata/12/72/14/127214110424237014249185824690439912767/English_Ale_Amharic_School_Dictionary_2022.pdf Xawwadhdho K’aalathadhdhe Manne Kollinkitona Inkilsanynya – Qalunte – Amaaranynyay: Koppe theemmay]|publisher=SIL Ethiopia Language Development and Multilingual Education Project|year=2022|page=198}} =={{langname|gyl}}== ==={{ĐM|pron}}=== *{{IPA4|gyl|[ʔə]}} ==={{ĐM|letter}}=== {{head|gyl|Chữ cái|tr=ʾä}} #Chữ cái âm tiết ''ʾä'' trong bộ chữ Geʽez tiếng Gayil. #:{{quote|gyl|ጋልደጵነረ ክታ '''አ'''ንናሬ። ኖየረ ይንታ ቆይደንም ቦድሶ ኡርስተሬ። ይንታ ዘርግንመረ ቡለናር ኦይተሬ፥ ምሰንም ማቼ ካይዳክን ኖሄካ '''አ'''ችዝዴ” ከደር ጋይሴ።|tr=galdäp̣närä kəta '''ʾä'''nnare. noyärä yənta ḳoydänm bodso ʾursətäre. yənta zärgənmärä bulänar ʾoytäre: məsänm mače kaydakn noheka '''ʾä'''čzəde” kädär gayse.|Tay Ngài cầm-nia mà dê thật sạch sân lúa mình, và Ngài sẽ chứa lúa vào kho, còn rơm-rạ thì đốt trong lửa chẳng hề tắt. ([[s:Ma-thi-ơ/3#3:12|Ma-thi-ơ 3:12]])}} ==={{ĐM|ref}}=== *{{Chú thích web|gyl|author=The Word for the World International|entryurl=https://www.bible.com/bible/4130/MAT.3.GYLNTETH|entry=ማቶስ 3|year=2025|work=ጋይል አዲስ ኪዳን}} =={{langname|drs}}== ==={{ĐM|pron}}=== *{{IPA4|drs|[ʔa]}} ==={{ĐM|letter}}=== {{head|drs|Chữ cái|tr=a/aa}} #Chữ cái âm tiết ''a/aa'' trong bộ chữ Geʽez tiếng Gedeo. #:{{ux|drs|'''አ'''መ'''አ'''|tr='''a'''ma'''a'''|cầy mangut|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=drs|sc=Ethi|qual=Chữ Geʽez tiếng Gedeo|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|በ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቸ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ወ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዐ|ዑ|ዒ|ዓ|ዔ|ዕ|ዖ|የ|ዩ|ዪ|ያ|ዬ|ይ|ዮ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ዸ|ዹ|ዺ|ዻ|ዼ|ዽ|ዾ|ጀ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጨ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ጰ|ጱ|ጲ|ጳ|ጴ|ጵ|ጶ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ}} ==={{ĐM|ref}}=== *{{cite-book|author=Klaus Wedekind|title=[https://web.archive.org/web/20110719054040/http://www.kwedekind.de/Eingang1/PdfFiles/2008_Gedeo_Dictionary_of_1978_by_Categories.pdf Gedeo Dictionary]|year=2008|page=5}} =={{langname|gez}}== ==={{ĐM|pron}}=== *{{IPA4|gez|[ʔæ]}} ==={{ĐM|letter}}=== {{head|gez|Chữ cái}} #Chữ cái âm tiết ''ʾä'' trong bảng chữ cái Geʽez. #:{{ux|gez|'''አ'''ጽም'''አ'''|làm [[khát]]|inline=1}} ===={{ĐM|see}}==== *{{letters|lang=gez|sc=Ethi|qual=Chữ Geʽez|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|ሏ|ሐ|ሑ|ሒ|ሓ|ሔ|ሕ|ሖ|ሗ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ሟ|ፙ|ሠ|ሡ|ሢ|ሣ|ሤ|ሥ|ሦ|ሧ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሯ|ፘ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሷ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|ቇ|በ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ቧ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቷ|ኀ|ኁ|ኂ|ኃ|ኄ|ኅ|ኆ|ኇ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|ኗ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ኧ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ኯ|ወ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዏ|ዐ|ዑ|ዒ|ዓ|ዔ|ዕ|ዖ|ዘ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|ዟ|የ|ዩ|ዪ|ያ|ዬ|ይ|ዮ|ዯ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ዷ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጏ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጧ|ጰ|ጱ|ጲ|ጳ|ጴ|ጵ|ጶ|ጷ|ጸ|ጹ|ጺ|ጻ|ጼ|ጽ|ጾ|ጿ|ፀ|ፁ|ፂ|ፃ|ፄ|ፅ|ፆ|ፇ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ|ፏ|ፚ|ፐ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ|ፗ|ቈ|ቊ|ቋ|ቌ|ቍ|ቘ|ቚ|ቛ|ቜ|ቝ|ኈ|ኊ|ኋ|ኌ|ኍ|ኰ|ኲ|ኳ|ኴ|ኵ|ጐ|ጒ|ጓ|ጔ|ጕ}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Wolf Leslau|title=Comparative Dictionary of Geʻez|publisher=Otto Harrassowitz Verlag|year=1987|pageurl=https://archive.org/details/leslau-comparative-dictionary-of-geez-1987/page/557|page=557}} =={{langname|guk}}== ==={{ĐM|pron}}=== *{{IPA4|guk|[ʔə]}} ==={{ĐM|letter}}=== {{head|guk|Chữ cái|tr=ʾä}} #Chữ cái âm tiết ''ʾä'' trong bộ chữ Geʽez tiếng Gumuz. #:{{ux|guk|መደዳ '''አ'''ል ሰ ገትገ ክርስቶስ|tr=mädäda '''ʾä'''lə sä gätgä kərsətos|[[s:Công vụ các Sứ đồ|Công vụ các Sứ đồ]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=guk|sc=Ethi|qual=Bảng chữ cái Geʽez tiếng Gumuz|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ሠ|ሣ|ሤ|ሥ|ሦ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|ቊ|ቌ|በ|ቢ|ባ|ቤ|ብ|ቦ|ቧ|ꬨ|ꬩ|ꬪ|ꬫ|ꬬ|ꬭ|ꬮ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቸ|ቹ|ቻ|ቼ|ች|ቾ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|ኘ|ኙ|ኚ|ኛ|ኜ|ኝ|ኞ|ኟ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ኳ|ኸ|ኹ|ኺ|ኻ|ኼ|ኽ|ኾ|ኲ|ኴ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዘ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|ዠ|ዡ|ዢ|ዣ|ዤ|ዥ|ዦ|የ|ዩ|ዪ|ያ|ዬ|ይ|ዮ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ዸ|ዹ|ዺ|ዻ|ዼ|ዽ|ዾ|ጀ|ጂ|ጃ|ጅ|ጆ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጓ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጨ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ꬠ|ꬡ|ꬢ|ꬣ|ꬤ|ꬥ|ꬦ|ጴ|ጵ|ጶ|ጸ|ጹ|ጺ|ጻ|ጼ|ጽ|ጾ|ፀ|ፁ|ፂ|ፃ|ፄ|ፅ|ፆ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ|ፐ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Benishangul-Gumuz Language Development Project|title=[https://web.archive.org/web/20220520095045/https://www.sil.org/system/files/reapdata/14/44/90/14449051384291666498977318954309907671/Gumuz_School_Dictionary.pdf Gumuz School Dictionary]|publisher=SIL Ethiopia|year=2015}} *{{Chú thích web|guk|author=Bible Society of Ethiopia|work=ማኝገሲል ኽኻ - The New Testament in Gumuz|location=Addis Ababa|year=2003|entry=መደዳ አል ሰ ገትገ ክርስቶስ 1|entryurl=https://live.bible.is/bible/GUKBSE/ACT/1}} =={{langname|hdy}}== ==={{ĐM|pron}}=== *{{IPA4|hdy|[ʔa]}} ==={{ĐM|letter}}=== {{head|hdy|Chữ cái|tr=ʾä}} #Chữ cái âm tiết ''ʾä'' trong bộ chữ Geʽez tiếng Hadiyya. #:{{ux|am|'''አ'''ሴ'''አ'''ማዕን በጥ መጣፈ|tr='''ʾä'''se'''ʾä'''maʿn bäṭ mäṭafä|[[s:Công vụ các Sứ đồ|Công vụ các Sứ đồ]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=hdy|sc=Ethi|qual=Chữ Geʽez tiếng Hadiyya|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|ሐ|ሑ|ሒ|ሓ|ሔ|ሕ|ሖ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ሠ|ሡ|ሢ|ሣ|ሤ|ሥ|ሦ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|በ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቸ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ኀ|ኁ|ኂ|ኃ|ኄ|ኅ|ኆ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ወ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዐ|ዑ|ዒ|ዓ|ዔ|ዕ|ዖ|ዘ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|የ|ዩ|ዪ|ያ|ዬ|ይ|ዮ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ጀ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጨ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ጰ|ጱ|ጲ|ጳ|ጴ|ጵ|ጶ|ጸ|ጹ|ጺ|ጻ|ጼ|ጽ|ጾ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ}} ==={{ĐM|ref}}=== *{{Chú thích sách|author=Stefan Ritter|title=[https://hadiyajourney.com/wp-content/uploads/2018/12/Hadiyya-Engl-Dict-2007.10-short-form.pdf Hadiyyisa-English Dictionary]|year=2018}} *{{Chú thích web|hdy|author=Bible Society of Ethiopia|work=Bible.is|year=1992|entry=አሴአማዕን በጥ መጣፈ 1|entryurl=https://live.bible.is/bible/HDYHDY/ACT/1}} =={{langname|amf}}== ==={{ĐM|pron}}=== *{{IPA4|amf|[ʔə]}} ==={{ĐM|letter}}=== {{head|amf|Chữ cái|tr=ʾä}} #Chữ cái âm tiết ''ʾä'' trong bộ chữ Geʽez tiếng Hamer-Banna. #:{{ux|amf|'''አ'''ን|tr='''ʾä'''n|[[tay]]|inline=1}} ===={{ĐM|see}}==== *(''Chữ Geʽez tiếng Hamer-Banna'') [[ሀ#Tiếng_Hamer-Banna|ሀ]], [[ሁ#Tiếng_Hamer-Banna|ሁ]], [[ሂ#Tiếng_Hamer-Banna|ሂ]], [[ሃ#Tiếng_Hamer-Banna|ሃ]], [[ሄ#Tiếng_Hamer-Banna|ሄ]], [[ህ#Tiếng_Hamer-Banna|ህ]], [[ሆ#Tiếng_Hamer-Banna|ሆ]], [[ለ#Tiếng_Hamer-Banna|ለ]], [[ሉ#Tiếng_Hamer-Banna|ሉ]], [[ሊ#Tiếng_Hamer-Banna|ሊ]], [[ላ#Tiếng_Hamer-Banna|ላ]], [[ሌ#Tiếng_Hamer-Banna|ሌ]], [[ል#Tiếng_Hamer-Banna|ል]], [[ሎ#Tiếng_Hamer-Banna|ሎ]], [[ሏ#Tiếng_Hamer-Banna|ሏ]], [[ሐ#Tiếng_Hamer-Banna|ሐ]], [[ሑ#Tiếng_Hamer-Banna|ሑ]], [[ሒ#Tiếng_Hamer-Banna|ሒ]], [[ሓ#Tiếng_Hamer-Banna|ሓ]], [[ሔ#Tiếng_Hamer-Banna|ሔ]], [[ሕ#Tiếng_Hamer-Banna|ሕ]], [[ሖ#Tiếng_Hamer-Banna|ሖ]], [[ሗ#Tiếng_Hamer-Banna|ሗ]], [[መ#Tiếng_Hamer-Banna|መ]], [[ሙ#Tiếng_Hamer-Banna|ሙ]], [[ሚ#Tiếng_Hamer-Banna|ሚ]], [[ማ#Tiếng_Hamer-Banna|ማ]], [[ሜ#Tiếng_Hamer-Banna|ሜ]], [[ም#Tiếng_Hamer-Banna|ም]], [[ሞ#Tiếng_Hamer-Banna|ሞ]], [[ሟ#Tiếng_Hamer-Banna|ሟ]], [[ፙ#Tiếng_Hamer-Banna|ፙ]], [[ሠ#Tiếng_Hamer-Banna|ሠ]], [[ሡ#Tiếng_Hamer-Banna|ሡ]], [[ሢ#Tiếng_Hamer-Banna|ሢ]], [[ሣ#Tiếng_Hamer-Banna|ሣ]], [[ሤ#Tiếng_Hamer-Banna|ሤ]], [[ሥ#Tiếng_Hamer-Banna|ሥ]], [[ሦ#Tiếng_Hamer-Banna|ሦ]], [[ሧ#Tiếng_Hamer-Banna|ሧ]], [[ረ#Tiếng_Hamer-Banna|ረ]], [[ሩ#Tiếng_Hamer-Banna|ሩ]], [[ሪ#Tiếng_Hamer-Banna|ሪ]], [[ራ#Tiếng_Hamer-Banna|ራ]], [[ሬ#Tiếng_Hamer-Banna|ሬ]], [[ር#Tiếng_Hamer-Banna|ር]], [[ሮ#Tiếng_Hamer-Banna|ሮ]], [[ሯ#Tiếng_Hamer-Banna|ሯ]], [[ፘ#Tiếng_Hamer-Banna|ፘ]], [[ሰ#Tiếng_Hamer-Banna|ሰ]], [[ሱ#Tiếng_Hamer-Banna|ሱ]], [[ሲ#Tiếng_Hamer-Banna|ሲ]], [[ሳ#Tiếng_Hamer-Banna|ሳ]], [[ሴ#Tiếng_Hamer-Banna|ሴ]], [[ስ#Tiếng_Hamer-Banna|ስ]], [[ሶ#Tiếng_Hamer-Banna|ሶ]], [[ሷ#Tiếng_Hamer-Banna|ሷ]], [[ቀ#Tiếng_Hamer-Banna|ቀ]], [[ቁ#Tiếng_Hamer-Banna|ቁ]], [[ቂ#Tiếng_Hamer-Banna|ቂ]], [[ቃ#Tiếng_Hamer-Banna|ቃ]], [[ቄ#Tiếng_Hamer-Banna|ቄ]], [[ቅ#Tiếng_Hamer-Banna|ቅ]], [[ቆ#Tiếng_Hamer-Banna|ቆ]], [[ቋ#Tiếng_Hamer-Banna|ቋ]], [[በ#Tiếng_Hamer-Banna|በ]], [[ቡ#Tiếng_Hamer-Banna|ቡ]], [[ቢ#Tiếng_Hamer-Banna|ቢ]], [[ባ#Tiếng_Hamer-Banna|ባ]], [[ቤ#Tiếng_Hamer-Banna|ቤ]], [[ብ#Tiếng_Hamer-Banna|ብ]], [[ቦ#Tiếng_Hamer-Banna|ቦ]], [[ቧ#Tiếng_Hamer-Banna|ቧ]], [[በ፟#Tiếng_Hamer-Banna|በ፟]], [[ቡ፟#Tiếng_Hamer-Banna|ቡ፟]], [[ቢ፟#Tiếng_Hamer-Banna|ቢ፟]], [[ባ፟#Tiếng_Hamer-Banna|ባ፟]], [[ቤ፟#Tiếng_Hamer-Banna|ቤ፟]], [[ብ፟#Tiếng_Hamer-Banna|ብ፟]], [[ቦ፟#Tiếng_Hamer-Banna|ቦ፟]], [[ቧ፟#Tiếng_Hamer-Banna|ቧ፟]], [[ተ#Tiếng_Hamer-Banna|ተ]], [[ቱ#Tiếng_Hamer-Banna|ቱ]], [[ቲ#Tiếng_Hamer-Banna|ቲ]], [[ታ#Tiếng_Hamer-Banna|ታ]], [[ቴ#Tiếng_Hamer-Banna|ቴ]], [[ት#Tiếng_Hamer-Banna|ት]], [[ቶ#Tiếng_Hamer-Banna|ቶ]], [[ቷ#Tiếng_Hamer-Banna|ቷ]], [[ቸ#Tiếng_Hamer-Banna|ቸ]], [[ቹ#Tiếng_Hamer-Banna|ቹ]], [[ቺ#Tiếng_Hamer-Banna|ቺ]], [[ቻ#Tiếng_Hamer-Banna|ቻ]], [[ቼ#Tiếng_Hamer-Banna|ቼ]], [[ች#Tiếng_Hamer-Banna|ች]], [[ቾ#Tiếng_Hamer-Banna|ቾ]], [[ቿ#Tiếng_Hamer-Banna|ቿ]], [[ነ#Tiếng_Hamer-Banna|ነ]], [[ኑ#Tiếng_Hamer-Banna|ኑ]], [[ኒ#Tiếng_Hamer-Banna|ኒ]], [[ና#Tiếng_Hamer-Banna|ና]], [[ኔ#Tiếng_Hamer-Banna|ኔ]], [[ን#Tiếng_Hamer-Banna|ን]], [[ኖ#Tiếng_Hamer-Banna|ኖ]], [[ኗ#Tiếng_Hamer-Banna|ኗ]], [[አ#Tiếng_Hamer-Banna|አ]], [[ኡ#Tiếng_Hamer-Banna|ኡ]], [[ኢ#Tiếng_Hamer-Banna|ኢ]], [[ኣ#Tiếng_Hamer-Banna|ኣ]], [[ኤ#Tiếng_Hamer-Banna|ኤ]], [[እ#Tiếng_Hamer-Banna|እ]], [[ኦ#Tiếng_Hamer-Banna|ኦ]], [[ኧ#Tiếng_Hamer-Banna|ኧ]], [[ከ#Tiếng_Hamer-Banna|ከ]], [[ኩ#Tiếng_Hamer-Banna|ኩ]], [[ኪ#Tiếng_Hamer-Banna|ኪ]], [[ካ#Tiếng_Hamer-Banna|ካ]], [[ኬ#Tiếng_Hamer-Banna|ኬ]], [[ክ#Tiếng_Hamer-Banna|ክ]], [[ኮ#Tiếng_Hamer-Banna|ኮ]], [[ኳ#Tiếng_Hamer-Banna|ኳ]], [[ወ#Tiếng_Hamer-Banna|ወ]], [[ዉ#Tiếng_Hamer-Banna|ዉ]], [[ዊ#Tiếng_Hamer-Banna|ዊ]], [[ዋ#Tiếng_Hamer-Banna|ዋ]], [[ዌ#Tiếng_Hamer-Banna|ዌ]], [[ው#Tiếng_Hamer-Banna|ው]], [[ዎ#Tiếng_Hamer-Banna|ዎ]], [[ዐ#Tiếng_Hamer-Banna|ዐ]], [[ዑ#Tiếng_Hamer-Banna|ዑ]], [[ዒ#Tiếng_Hamer-Banna|ዒ]], [[ዓ#Tiếng_Hamer-Banna|ዓ]], [[ዔ#Tiếng_Hamer-Banna|ዔ]], [[ዕ#Tiếng_Hamer-Banna|ዕ]], [[ዖ#Tiếng_Hamer-Banna|ዖ]], [[ዘ#Tiếng_Hamer-Banna|ዘ]], [[ዙ#Tiếng_Hamer-Banna|ዙ]], [[ዚ#Tiếng_Hamer-Banna|ዚ]], [[ዛ#Tiếng_Hamer-Banna|ዛ]], [[ዜ#Tiếng_Hamer-Banna|ዜ]], [[ዝ#Tiếng_Hamer-Banna|ዝ]], [[ዞ#Tiếng_Hamer-Banna|ዞ]], [[ዟ#Tiếng_Hamer-Banna|ዟ]], [[የ#Tiếng_Hamer-Banna|የ]], [[ዩ#Tiếng_Hamer-Banna|ዩ]], [[ዪ#Tiếng_Hamer-Banna|ዪ]], [[ያ#Tiếng_Hamer-Banna|ያ]], [[ዬ#Tiếng_Hamer-Banna|ዬ]], [[ይ#Tiếng_Hamer-Banna|ይ]], [[ዮ#Tiếng_Hamer-Banna|ዮ]], [[ደ#Tiếng_Hamer-Banna|ደ]], [[ዱ#Tiếng_Hamer-Banna|ዱ]], [[ዲ#Tiếng_Hamer-Banna|ዲ]], [[ዳ#Tiếng_Hamer-Banna|ዳ]], [[ዴ#Tiếng_Hamer-Banna|ዴ]], [[ድ#Tiếng_Hamer-Banna|ድ]], [[ዶ#Tiếng_Hamer-Banna|ዶ]], [[ዷ#Tiếng_Hamer-Banna|ዷ]], [[ጀ#Tiếng_Hamer-Banna|ጀ]], [[ጁ#Tiếng_Hamer-Banna|ጁ]], [[ጂ#Tiếng_Hamer-Banna|ጂ]], [[ጃ#Tiếng_Hamer-Banna|ጃ]], [[ጄ#Tiếng_Hamer-Banna|ጄ]], [[ጅ#Tiếng_Hamer-Banna|ጅ]], [[ጆ#Tiếng_Hamer-Banna|ጆ]], [[ጇ#Tiếng_Hamer-Banna|ጇ]], [[ደ፟#Tiếng_Hamer-Banna|ደ፟]], [[ዱ፟#Tiếng_Hamer-Banna|ዱ፟]], [[ዲ፟#Tiếng_Hamer-Banna|ዲ፟]], [[ዳ፟#Tiếng_Hamer-Banna|ዳ፟]], [[ዴ፟#Tiếng_Hamer-Banna|ዴ፟]], [[ድ፟#Tiếng_Hamer-Banna|ድ፟]], [[ዶ፟#Tiếng_Hamer-Banna|ዶ፟]], [[ዷ፟#Tiếng_Hamer-Banna|ዷ፟]], [[ገ#Tiếng_Hamer-Banna|ገ]], [[ጉ#Tiếng_Hamer-Banna|ጉ]], [[ጊ#Tiếng_Hamer-Banna|ጊ]], [[ጋ#Tiếng_Hamer-Banna|ጋ]], [[ጌ#Tiếng_Hamer-Banna|ጌ]], [[ግ#Tiếng_Hamer-Banna|ግ]], [[ጎ#Tiếng_Hamer-Banna|ጎ]], [[ጓ#Tiếng_Hamer-Banna|ጓ]], [[ገ፟#Tiếng_Hamer-Banna|ገ፟]], [[ጉ፟#Tiếng_Hamer-Banna|ጉ፟]], [[ጊ፟#Tiếng_Hamer-Banna|ጊ፟]], [[ጋ፟#Tiếng_Hamer-Banna|ጋ፟]], [[ጌ፟#Tiếng_Hamer-Banna|ጌ፟]], [[ግ፟#Tiếng_Hamer-Banna|ግ፟]], [[ጎ፟#Tiếng_Hamer-Banna|ጎ፟]], [[ጓ፟#Tiếng_Hamer-Banna|ጓ፟]], [[ጸ#Tiếng_Hamer-Banna|ጸ]], [[ጹ#Tiếng_Hamer-Banna|ጹ]], [[ጺ#Tiếng_Hamer-Banna|ጺ]], [[ጻ#Tiếng_Hamer-Banna|ጻ]], [[ጼ#Tiếng_Hamer-Banna|ጼ]], [[ጽ#Tiếng_Hamer-Banna|ጽ]], [[ጾ#Tiếng_Hamer-Banna|ጾ]], [[ጿ#Tiếng_Hamer-Banna|ጿ]], [[ፈ#Tiếng_Hamer-Banna|ፈ]], [[ፉ#Tiếng_Hamer-Banna|ፉ]], [[ፊ#Tiếng_Hamer-Banna|ፊ]], [[ፋ#Tiếng_Hamer-Banna|ፋ]], [[ፌ#Tiếng_Hamer-Banna|ፌ]], [[ፍ#Tiếng_Hamer-Banna|ፍ]], [[ፎ#Tiếng_Hamer-Banna|ፎ]], [[ፏ#Tiếng_Hamer-Banna|ፏ]], [[ፚ#Tiếng_Hamer-Banna|ፚ]], [[ፐ#Tiếng_Hamer-Banna|ፐ]], [[ፑ#Tiếng_Hamer-Banna|ፑ]], [[ፒ#Tiếng_Hamer-Banna|ፒ]], [[ፓ#Tiếng_Hamer-Banna|ፓ]], [[ፔ#Tiếng_Hamer-Banna|ፔ]], [[ፕ#Tiếng_Hamer-Banna|ፕ]], [[ፖ#Tiếng_Hamer-Banna|ፖ]], [[ፗ#Tiếng_Hamer-Banna|ፗ]] ==={{ĐM|ref}}=== *{{Chú thích báo|en|author=Yona Takahashi|title=[https://jael.info/SEL/pub/2015/Takahashi-2015.pdf A Small Dictionary of Hamar with Some Lexical Notes on Banna and Karo]|year=2015|journal=Studies in Ethiopia Languages|issue=4|page=41}} =={{langname|har}}== ==={{ĐM|pron}}=== *{{IPA4|har|[æ]|[ʔæ]}} ==={{ĐM|letter}}=== {{head|har|Chữ cái}} #Chữ cái âm tiết ''ä'' trong bộ chữ Geʽez tiếng Harari. #:{{ux|har|'''አ'''ፍ|[[miệng]]|inline=1}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Harari'') [[ሀ#Tiếng_Harari|ሀ]], [[ሁ#Tiếng_Harari|ሁ]], [[ሁ፞#Tiếng_Harari|ሁ፞]], [[ሂ#Tiếng_Harari|ሂ]], [[ሂ፞#Tiếng_Harari|ሂ፞]], [[ሃ#Tiếng_Harari|ሃ]], [[ሄ#Tiếng_Harari|ሄ]], [[ሄ፞#Tiếng_Harari|ሄ፞]], [[ህ#Tiếng_Harari|ህ]], [[ሆ#Tiếng_Harari|ሆ]], [[ሆ፞#Tiếng_Harari|ሆ፞]], [[ለ#Tiếng_Harari|ለ]], [[ሉ#Tiếng_Harari|ሉ]], [[ሉ፞#Tiếng_Harari|ሉ፞]], [[ሊ#Tiếng_Harari|ሊ]], [[ሊ፞#Tiếng_Harari|ሊ፞]], [[ላ#Tiếng_Harari|ላ]], [[ሌ#Tiếng_Harari|ሌ]], [[ሌ፞#Tiếng_Harari|ሌ፞]], [[ል#Tiếng_Harari|ል]], [[ሎ#Tiếng_Harari|ሎ]], [[ሎ፞#Tiếng_Harari|ሎ፞]], [[ሐ#Tiếng_Harari|ሐ]], [[ሑ#Tiếng_Harari|ሑ]], [[ሑ፞#Tiếng_Harari|ሑ፞]], [[ሒ#Tiếng_Harari|ሒ]], [[ሒ፞#Tiếng_Harari|ሒ፞]], [[ሓ#Tiếng_Harari|ሓ]], [[ሔ#Tiếng_Harari|ሔ]], [[ሔ፞#Tiếng_Harari|ሔ፞]], [[ሕ#Tiếng_Harari|ሕ]], [[ሖ#Tiếng_Harari|ሖ]], [[ሖ፞#Tiếng_Harari|ሖ፞]], [[መ#Tiếng_Harari|መ]], [[ሙ#Tiếng_Harari|ሙ]], [[ሙ፞#Tiếng_Harari|ሙ፞]], [[ሚ#Tiếng_Harari|ሚ]], [[ሚ፞#Tiếng_Harari|ሚ፞]], [[ማ#Tiếng_Harari|ማ]], [[ሜ#Tiếng_Harari|ሜ]], [[ሜ፞#Tiếng_Harari|ሜ፞]], [[ም#Tiếng_Harari|ም]], [[ሞ#Tiếng_Harari|ሞ]], [[ሞ፞#Tiếng_Harari|ሞ፞]], [[ሠ#Tiếng_Harari|ሠ]], [[ሡ#Tiếng_Harari|ሡ]], [[ሡ፞#Tiếng_Harari|ሡ፞]], [[ሢ#Tiếng_Harari|ሢ]], [[ሢ፞#Tiếng_Harari|ሢ፞]], [[ሣ#Tiếng_Harari|ሣ]], [[ሤ#Tiếng_Harari|ሤ]], [[ሤ፞#Tiếng_Harari|ሤ፞]], [[ሥ#Tiếng_Harari|ሥ]], [[ሦ#Tiếng_Harari|ሦ]], [[ሦ፞#Tiếng_Harari|ሦ፞]], [[ረ#Tiếng_Harari|ረ]], [[ሩ#Tiếng_Harari|ሩ]], [[ሩ፞#Tiếng_Harari|ሩ፞]], [[ሪ#Tiếng_Harari|ሪ]], [[ሪ፞#Tiếng_Harari|ሪ፞]], [[ራ#Tiếng_Harari|ራ]], [[ሬ#Tiếng_Harari|ሬ]], [[ሬ፞#Tiếng_Harari|ሬ፞]], [[ር#Tiếng_Harari|ር]], [[ሮ#Tiếng_Harari|ሮ]], [[ሮ፞#Tiếng_Harari|ሮ፞]], [[ሰ#Tiếng_Harari|ሰ]], [[ሱ#Tiếng_Harari|ሱ]], [[ሱ፞#Tiếng_Harari|ሱ፞]], [[ሲ#Tiếng_Harari|ሲ]], [[ሲ፞#Tiếng_Harari|ሲ፞]], [[ሳ#Tiếng_Harari|ሳ]], [[ሴ#Tiếng_Harari|ሴ]], [[ሴ፞#Tiếng_Harari|ሴ፞]], [[ስ#Tiếng_Harari|ስ]], [[ሶ#Tiếng_Harari|ሶ]], [[ሶ፞#Tiếng_Harari|ሶ፞]], [[ሸ#Tiếng_Harari|ሸ]], [[ሹ#Tiếng_Harari|ሹ]], [[ሹ፞#Tiếng_Harari|ሹ፞]], [[ሺ#Tiếng_Harari|ሺ]], [[ሺ፞#Tiếng_Harari|ሺ፞]], [[ሻ#Tiếng_Harari|ሻ]], [[ሼ#Tiếng_Harari|ሼ]], [[ሼ፞#Tiếng_Harari|ሼ፞]], [[ሽ#Tiếng_Harari|ሽ]], [[ሾ#Tiếng_Harari|ሾ]], [[ሾ፞#Tiếng_Harari|ሾ፞]], [[ቀ#Tiếng_Harari|ቀ]], [[ቁ#Tiếng_Harari|ቁ]], [[ቁ፞#Tiếng_Harari|ቁ፞]], [[ቂ#Tiếng_Harari|ቂ]], [[ቂ፞#Tiếng_Harari|ቂ፞]], [[ቃ#Tiếng_Harari|ቃ]], [[ቄ#Tiếng_Harari|ቄ]], [[ቄ፞#Tiếng_Harari|ቄ፞]], [[ቅ#Tiếng_Harari|ቅ]], [[ቆ#Tiếng_Harari|ቆ]], [[ቆ፞#Tiếng_Harari|ቆ፞]], [[በ#Tiếng_Harari|በ]], [[ቡ#Tiếng_Harari|ቡ]], [[ቡ፞#Tiếng_Harari|ቡ፞]], [[ቢ#Tiếng_Harari|ቢ]], [[ቢ፞#Tiếng_Harari|ቢ፞]], [[ባ#Tiếng_Harari|ባ]], [[ቤ#Tiếng_Harari|ቤ]], [[ቤ፞#Tiếng_Harari|ቤ፞]], [[ብ#Tiếng_Harari|ብ]], [[ቦ#Tiếng_Harari|ቦ]], [[ቦ፞#Tiếng_Harari|ቦ፞]], [[ቨ#Tiếng_Harari|ቨ]], [[ቩ#Tiếng_Harari|ቩ]], [[ቩ፞#Tiếng_Harari|ቩ፞]], [[ቪ#Tiếng_Harari|ቪ]], [[ቪ፞#Tiếng_Harari|ቪ፞]], [[ቫ#Tiếng_Harari|ቫ]], [[ቬ#Tiếng_Harari|ቬ]], [[ቬ፞#Tiếng_Harari|ቬ፞]], [[ቭ#Tiếng_Harari|ቭ]], [[ቮ#Tiếng_Harari|ቮ]], [[ቮ፞#Tiếng_Harari|ቮ፞]], [[ተ#Tiếng_Harari|ተ]], [[ቱ#Tiếng_Harari|ቱ]], [[ቱ፞#Tiếng_Harari|ቱ፞]], [[ቲ#Tiếng_Harari|ቲ]], [[ቲ፞#Tiếng_Harari|ቲ፞]], [[ታ#Tiếng_Harari|ታ]], [[ቴ#Tiếng_Harari|ቴ]], [[ቴ፞#Tiếng_Harari|ቴ፞]], [[ት#Tiếng_Harari|ት]], [[ቶ#Tiếng_Harari|ቶ]], [[ቶ፞#Tiếng_Harari|ቶ፞]], [[ቸ#Tiếng_Harari|ቸ]], [[ቹ#Tiếng_Harari|ቹ]], [[ቹ፞#Tiếng_Harari|ቹ፞]], [[ቺ#Tiếng_Harari|ቺ]], [[ቺ፞#Tiếng_Harari|ቺ፞]], [[ቻ#Tiếng_Harari|ቻ]], [[ቼ#Tiếng_Harari|ቼ]], [[ቼ፞#Tiếng_Harari|ቼ፞]], [[ች#Tiếng_Harari|ች]], [[ቾ#Tiếng_Harari|ቾ]], [[ቾ፞#Tiếng_Harari|ቾ፞]], [[ኀ#Tiếng_Harari|ኀ]], [[ኁ#Tiếng_Harari|ኁ]], [[ኁ፞#Tiếng_Harari|ኁ፞]], [[ኂ#Tiếng_Harari|ኂ]], [[ኂ፞#Tiếng_Harari|ኂ፞]], [[ኃ#Tiếng_Harari|ኃ]], [[ኄ#Tiếng_Harari|ኄ]], [[ኄ፞#Tiếng_Harari|ኄ፞]], [[ኅ#Tiếng_Harari|ኅ]], [[ኆ#Tiếng_Harari|ኆ]], [[ኆ፞#Tiếng_Harari|ኆ፞]], [[ነ#Tiếng_Harari|ነ]], [[ኑ#Tiếng_Harari|ኑ]], [[ኑ፞#Tiếng_Harari|ኑ፞]], [[ኒ#Tiếng_Harari|ኒ]], [[ኒ፞#Tiếng_Harari|ኒ፞]], [[ና#Tiếng_Harari|ና]], [[ኔ#Tiếng_Harari|ኔ]], [[ኔ፞#Tiếng_Harari|ኔ፞]], [[ን#Tiếng_Harari|ን]], [[ኖ#Tiếng_Harari|ኖ]], [[ኖ፞#Tiếng_Harari|ኖ፞]], [[ኘ#Tiếng_Harari|ኘ]], [[ኙ#Tiếng_Harari|ኙ]], [[ኙ፞#Tiếng_Harari|ኙ፞]], [[ኚ#Tiếng_Harari|ኚ]], [[ኚ፞#Tiếng_Harari|ኚ፞]], [[ኛ#Tiếng_Harari|ኛ]], [[ኜ#Tiếng_Harari|ኜ]], [[ኜ፞#Tiếng_Harari|ኜ፞]], [[ኝ#Tiếng_Harari|ኝ]], [[ኞ#Tiếng_Harari|ኞ]], [[ኞ፞#Tiếng_Harari|ኞ፞]], [[አ#Tiếng_Harari|አ]], [[ኡ#Tiếng_Harari|ኡ]], [[ኡ፞#Tiếng_Harari|ኡ፞]], [[ኢ#Tiếng_Harari|ኢ]], [[ኢ፞#Tiếng_Harari|ኢ፞]], [[ኣ#Tiếng_Harari|ኣ]], [[ኤ#Tiếng_Harari|ኤ]], [[ኤ፞#Tiếng_Harari|ኤ፞]], [[እ#Tiếng_Harari|እ]], [[ኦ#Tiếng_Harari|ኦ]], [[ኦ፞#Tiếng_Harari|ኦ፞]], [[ከ#Tiếng_Harari|ከ]], [[ኩ#Tiếng_Harari|ኩ]], [[ኩ፞#Tiếng_Harari|ኩ፞]], [[ኪ#Tiếng_Harari|ኪ]], [[ኪ፞#Tiếng_Harari|ኪ፞]], [[ካ#Tiếng_Harari|ካ]], [[ኬ#Tiếng_Harari|ኬ]], [[ኬ፞#Tiếng_Harari|ኬ፞]], [[ክ#Tiếng_Harari|ክ]], [[ኮ#Tiếng_Harari|ኮ]], [[ኮ፞#Tiếng_Harari|ኮ፞]], [[ኸ#Tiếng_Harari|ኸ]], [[ኹ#Tiếng_Harari|ኹ]], [[ኹ፞#Tiếng_Harari|ኹ፞]], [[ኺ#Tiếng_Harari|ኺ]], [[ኺ፞#Tiếng_Harari|ኺ፞]], [[ኻ#Tiếng_Harari|ኻ]], [[ኼ#Tiếng_Harari|ኼ]], [[ኼ፞#Tiếng_Harari|ኼ፞]], [[ኽ#Tiếng_Harari|ኽ]], [[ኾ#Tiếng_Harari|ኾ]], [[ኾ፞#Tiếng_Harari|ኾ፞]], [[ወ#Tiếng_Harari|ወ]], [[ዉ#Tiếng_Harari|ዉ]], [[ዉ፞#Tiếng_Harari|ዉ፞]], [[ዊ#Tiếng_Harari|ዊ]], [[ዊ፞#Tiếng_Harari|ዊ፞]], [[ዋ#Tiếng_Harari|ዋ]], [[ዌ#Tiếng_Harari|ዌ]], [[ዌ፞#Tiếng_Harari|ዌ፞]], [[ው#Tiếng_Harari|ው]], [[ዎ#Tiếng_Harari|ዎ]], [[ዎ፞#Tiếng_Harari|ዎ፞]], [[ዐ#Tiếng_Harari|ዐ]], [[ዑ#Tiếng_Harari|ዑ]], [[ዑ፞#Tiếng_Harari|ዑ፞]], [[ዒ#Tiếng_Harari|ዒ]], [[ዒ፞#Tiếng_Harari|ዒ፞]], [[ዓ#Tiếng_Harari|ዓ]], [[ዔ#Tiếng_Harari|ዔ]], [[ዔ፞#Tiếng_Harari|ዔ፞]], [[ዕ#Tiếng_Harari|ዕ]], [[ዖ#Tiếng_Harari|ዖ]], [[ዖ፞#Tiếng_Harari|ዖ፞]], [[ዘ#Tiếng_Harari|ዘ]], [[ዙ#Tiếng_Harari|ዙ]], [[ዙ፞#Tiếng_Harari|ዙ፞]], [[ዚ#Tiếng_Harari|ዚ]], [[ዚ፞#Tiếng_Harari|ዚ፞]], [[ዛ#Tiếng_Harari|ዛ]], [[ዜ#Tiếng_Harari|ዜ]], [[ዜ፞#Tiếng_Harari|ዜ፞]], [[ዝ#Tiếng_Harari|ዝ]], [[ዞ#Tiếng_Harari|ዞ]], [[ዞ፞#Tiếng_Harari|ዞ፞]], [[ዠ#Tiếng_Harari|ዠ]], [[ዡ#Tiếng_Harari|ዡ]], [[ዡ፞#Tiếng_Harari|ዡ፞]], [[ዢ#Tiếng_Harari|ዢ]], [[ዢ፞#Tiếng_Harari|ዢ፞]], [[ዣ#Tiếng_Harari|ዣ]], [[ዤ#Tiếng_Harari|ዤ]], [[ዤ፞#Tiếng_Harari|ዤ፞]], [[ዥ#Tiếng_Harari|ዥ]], [[ፆ#Tiếng_Harari|ፆ]], [[ፆ፞#Tiếng_Harari|ፆ፞]], [[የ#Tiếng_Harari|የ]], [[ዩ#Tiếng_Harari|ዩ]], [[ዩ፞#Tiếng_Harari|ዩ፞]], [[ዪ#Tiếng_Harari|ዪ]], [[ዪ፞#Tiếng_Harari|ዪ፞]], [[ያ#Tiếng_Harari|ያ]], [[ዬ#Tiếng_Harari|ዬ]], [[ዬ፞#Tiếng_Harari|ዬ፞]], [[ይ#Tiếng_Harari|ይ]], [[ዮ#Tiếng_Harari|ዮ]], [[ዮ፞#Tiếng_Harari|ዮ፞]], [[ደ#Tiếng_Harari|ደ]], [[ዱ#Tiếng_Harari|ዱ]], [[ዱ፞#Tiếng_Harari|ዱ፞]], [[ዲ#Tiếng_Harari|ዲ]], [[ዲ፞#Tiếng_Harari|ዲ፞]], [[ዳ#Tiếng_Harari|ዳ]], [[ዴ#Tiếng_Harari|ዴ]], [[ዴ፞#Tiếng_Harari|ዴ፞]], [[ድ#Tiếng_Harari|ድ]], [[ዶ#Tiếng_Harari|ዶ]], [[ዶ፞#Tiếng_Harari|ዶ፞]], [[ዸ#Tiếng_Harari|ዸ]], [[ዹ#Tiếng_Harari|ዹ]], [[ዹ፞#Tiếng_Harari|ዹ፞]], [[ዺ#Tiếng_Harari|ዺ]], [[ዺ፞#Tiếng_Harari|ዺ፞]], [[ዻ#Tiếng_Harari|ዻ]], [[ዼ#Tiếng_Harari|ዼ]], [[ዼ፞#Tiếng_Harari|ዼ፞]], [[ዽ#Tiếng_Harari|ዽ]], [[ዾ#Tiếng_Harari|ዾ]], [[ዾ፞#Tiếng_Harari|ዾ፞]], [[ጀ#Tiếng_Harari|ጀ]], [[ጁ#Tiếng_Harari|ጁ]], [[ጁ፞#Tiếng_Harari|ጁ፞]], [[ጂ#Tiếng_Harari|ጂ]], [[ጂ፞#Tiếng_Harari|ጂ፞]], [[ጃ#Tiếng_Harari|ጃ]], [[ጄ#Tiếng_Harari|ጄ]], [[ጄ፞#Tiếng_Harari|ጄ፞]], [[ጅ#Tiếng_Harari|ጅ]], [[ጆ#Tiếng_Harari|ጆ]], [[ጆ፞#Tiếng_Harari|ጆ፞]], [[ገ#Tiếng_Harari|ገ]], [[ጉ#Tiếng_Harari|ጉ]], [[ጉ፞#Tiếng_Harari|ጉ፞]], [[ጊ#Tiếng_Harari|ጊ]], [[ጊ፞#Tiếng_Harari|ጊ፞]], [[ጋ#Tiếng_Harari|ጋ]], [[ጌ#Tiếng_Harari|ጌ]], [[ጌ፞#Tiếng_Harari|ጌ፞]], [[ግ#Tiếng_Harari|ግ]], [[ጎ#Tiếng_Harari|ጎ]], [[ጎ፞#Tiếng_Harari|ጎ፞]], [[ጠ#Tiếng_Harari|ጠ]], [[ጡ#Tiếng_Harari|ጡ]], [[ጡ፞#Tiếng_Harari|ጡ፞]], [[ጢ#Tiếng_Harari|ጢ]], [[ጢ፞#Tiếng_Harari|ጢ፞]], [[ጣ#Tiếng_Harari|ጣ]], [[ጤ#Tiếng_Harari|ጤ]], [[ጤ፞#Tiếng_Harari|ጤ፞]], [[ጥ#Tiếng_Harari|ጥ]], [[ጦ#Tiếng_Harari|ጦ]], [[ጦ፞#Tiếng_Harari|ጦ፞]], [[ጨ#Tiếng_Harari|ጨ]], [[ጩ#Tiếng_Harari|ጩ]], [[ጩ፞#Tiếng_Harari|ጩ፞]], [[ጪ#Tiếng_Harari|ጪ]], [[ጪ፞#Tiếng_Harari|ጪ፞]], [[ጫ#Tiếng_Harari|ጫ]], [[ጬ#Tiếng_Harari|ጬ]], [[ጬ፞#Tiếng_Harari|ጬ፞]], [[ጭ#Tiếng_Harari|ጭ]], [[ጮ#Tiếng_Harari|ጮ]], [[ጮ፞#Tiếng_Harari|ጮ፞]], [[ጰ#Tiếng_Harari|ጰ]], [[ጱ#Tiếng_Harari|ጱ]], [[ጱ፞#Tiếng_Harari|ጱ፞]], [[ጲ#Tiếng_Harari|ጲ]], [[ጲ፞#Tiếng_Harari|ጲ፞]], [[ጳ#Tiếng_Harari|ጳ]], [[ጴ#Tiếng_Harari|ጴ]], [[ጴ፞#Tiếng_Harari|ጴ፞]], [[ጵ#Tiếng_Harari|ጵ]], [[ጶ#Tiếng_Harari|ጶ]], [[ጶ፞#Tiếng_Harari|ጶ፞]], [[ጸ#Tiếng_Harari|ጸ]], [[ጹ#Tiếng_Harari|ጹ]], [[ጹ፞#Tiếng_Harari|ጹ፞]], [[ጺ#Tiếng_Harari|ጺ]], [[ጺ፞#Tiếng_Harari|ጺ፞]], [[ጻ#Tiếng_Harari|ጻ]], [[ጼ#Tiếng_Harari|ጼ]], [[ጼ፞#Tiếng_Harari|ጼ፞]], [[ጽ#Tiếng_Harari|ጽ]], [[ጾ#Tiếng_Harari|ጾ]], [[ጾ፞#Tiếng_Harari|ጾ፞]], [[ፀ#Tiếng_Harari|ፀ]], [[ፁ#Tiếng_Harari|ፁ]], [[ፁ፞#Tiếng_Harari|ፁ፞]], [[ፂ#Tiếng_Harari|ፂ]], [[ፂ፞#Tiếng_Harari|ፂ፞]], [[ፃ#Tiếng_Harari|ፃ]], [[ፄ#Tiếng_Harari|ፄ]], [[ፄ፞#Tiếng_Harari|ፄ፞]], [[ፅ#Tiếng_Harari|ፅ]], [[ዦ#Tiếng_Harari|ዦ]], [[ዦ፞#Tiếng_Harari|ዦ፞]], [[ፈ#Tiếng_Harari|ፈ]], [[ፉ#Tiếng_Harari|ፉ]], [[ፉ፞#Tiếng_Harari|ፉ፞]], [[ፊ#Tiếng_Harari|ፊ]], [[ፊ፞#Tiếng_Harari|ፊ፞]], [[ፋ#Tiếng_Harari|ፋ]], [[ፌ#Tiếng_Harari|ፌ]], [[ፌ፞#Tiếng_Harari|ፌ፞]], [[ፍ#Tiếng_Harari|ፍ]], [[ፎ#Tiếng_Harari|ፎ]], [[ፎ፞#Tiếng_Harari|ፎ፞]], [[ፐ#Tiếng_Harari|ፐ]], [[ፑ#Tiếng_Harari|ፑ]], [[ፑ፞#Tiếng_Harari|ፑ፞]], [[ፒ#Tiếng_Harari|ፒ]], [[ፒ፞#Tiếng_Harari|ፒ፞]], [[ፓ#Tiếng_Harari|ፓ]], [[ፔ#Tiếng_Harari|ፔ]], [[ፔ፞#Tiếng_Harari|ፔ፞]], [[ፕ#Tiếng_Harari|ፕ]], [[ፖ#Tiếng_Harari|ፖ]], [[ፖ፞#Tiếng_Harari|ፖ፞]], [[ⶰ#Tiếng_Harari|ⶰ]], [[ⶱ#Tiếng_Harari|ⶱ]], [[ⶱ፞#Tiếng_Harari|ⶱ፞]], [[ⶲ#Tiếng_Harari|ⶲ]], [[ⶲ፞#Tiếng_Harari|ⶲ፞]], [[ⶳ#Tiếng_Harari|ⶳ]], [[ⶴ#Tiếng_Harari|ⶴ]], [[ⶴ፞#Tiếng_Harari|ⶴ፞]], [[ⶵ#Tiếng_Harari|ⶵ]], [[ⶶ#Tiếng_Harari|ⶶ]], [[ⶶ፞#Tiếng_Harari|ⶶ፞]] ==={{ĐM|ref}}=== *{{Chú thích sách|am|author=ቁራስ|title=[https://everythingharar.com/wp-content/uploads/2017/02/HarariDictionary-quraseh.pdf ጩቅቲ ኪታብ]|year=2002|page=62}} =={{langname|ior}}== ==={{ĐM|pron}}=== *{{IPA4|ior|[ʔæ]}} ==={{ĐM|letter}}=== {{head|ior|Chữ cái|tr=ʾä}} #Chữ cái âm tiết ''ʾä'' trong bộ chữ Geʽez tiếng Inor. #:{{ux|ior|'''አ'''ች|tr='''ä'''č|[[cậu bé]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=ior|sc=Ethi|qual=Bảng chữ cái Geʽez tiếng Inor|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ᎀ|ᎁ|ሟ|ᎂ|ᎃ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ⶠ|ⶡ|ⶢ|ⶣ|ⶤ|ⶥ|ⶦ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|ቈ|ቊ|ቋ|ቌ|ቍ|በ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ᎄ|ᎅ|ቧ|ᎆ|ᎇ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቸ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ኀ|ኁ|ኂ|ኃ|ኄ|ኅ|ኆ|ኈ|ኊ|ኋ|ኌ|ኍ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|ኘ|ኙ|ኚ|ኛ|ኜ|ኝ|ኞ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ኧ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ⷈ|ⷉ|ⷊ|ⷋ|ⷌ|ⷍ|ⷎ|ኰ|ኲ|ኳ|ኴ|ኵ|ⷐ|ⷑ|ⷒ|ⷓ|ⷔ|ⷕ|ⷖ|ወ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዘ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|ዠ|ዡ|ዢ|ዣ|ዤ|ዥ|ዦ|የ|ዩ|ዪ|ያ|ዬ|ዮ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ጀ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ⷘ|ⷙ|ⷚ|ⷛ|ⷜ|ⷝ|ⷞ|ጐ|ጒ|ጓ|ጔ|ጕ|ጘ|ጙ|ጚ|ጛ|ጜ|ጝ|ጞ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጨ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ|ᎈ|ᎉ|ፏ|ᎊ|ᎋ|ፐ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ|ᎌ|ᎍ|ፗ|ᎎ|ᎏ}} ==={{ĐM|prep}}=== {{head|ior|Giới từ|tr=ʾä}} #[[cho|Cho]], [[để]], [[của]], [[tới]]. ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Wolf Leslau|title=Etymological Dictionary of Gurage (Ethiopic)|year=1979|location=Wiesbaden|publisher=Otto Harrassowitz|ISBN=3-447-02041-5|pageurl=https://books.google.com/books?id=S7ckMbbwiHQC&pg=PA267|page=267}} =={{langname|kbr}}== ==={{ĐM|pron}}=== *{{IPA4|kbr|[ʔa]}} ==={{ĐM|letter}}=== {{head|kbr|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Kafa. #:{{ux|kbr|'''አ'''ቢዲዪ|tr='''A'''bidiyi|[[s:Áp-đia|Áp-đia]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=kbr|sc=Ethi|qual=Chữ Geʽez tiếng Kafa|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ሉ|ሊ|ላ|ሌ|ል|ሎ|ሑ|ሒ|ሓ|ሔ|ሕ|ሖ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ሡ|ሢ|ሣ|ሤ|ሥ|ሦ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ⶡ|ⶢ|ⶣ|ⶤ|ⶥ|ⶦ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ⶩ|ⶪ|ⶫ|ⶬ|ⶭ|ⶮ|ኑ|ኒ|ና|ኔ|ን|ኖ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|ዡ|ዢ|ዣ|ዤ|ዥ|ዦ|ⶱ|ⶲ|ⶳ|ⶴ|ⶵ|ⶶ|ዩ|ዪ|ያ|ዬ|ይ|ዮ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ⶹ|ⶺ|ⶻ|ⶼ|ⶽ|ⶾ|ጱ|ጲ|ጳ|ጴ|ጵ|ጶ|ጹ|ጺ|ጻ|ጼ|ጽ|ጾ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ}} ==={{ĐM|ref}}=== *{{Chú thích web|kbr|author=SIM International|entryurl=https://www.bible.com/bible/2763/OBA.1.KBRC|entry=Abidiyi 1|year=1999|work=Kafa Linguistics Project|publisher=KBRC Publisher}} =={{langname|ktb}}== ==={{ĐM|pron}}=== *{{IPA4|ktb|[ʔa]}} ==={{ĐM|letter}}=== {{head|ktb|Chữ cái|tr=ʾä}} #Chữ cái âm tiết ''ʾä'' trong bộ chữ Geʽez tiếng Kambaata. #:{{quote|ktb|ህከኒ ዮሴፍ ግሰናች በቅዬ ጃተ መገን ሰሜ ሶቀማንቹ '''አ'''ዘጆስገን ማራሜ ኤበቄእ።|tr=həkäni yosef gəsänač bäḳye ǧatä mägän säme soḳämanču '''ʾä'''zäǧosgän marame ʾebäḳeʾ.|Khi Giô-sép thức dậy rồi, thì làm y như lời thiên-sứ của Chúa đã dặn, mà đem vợ về với mình; ([[s:Ma-thi-ơ/1#1:24|Ma-thi-ơ 1:24]])}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Kambaata'') [[ሀ#Tiếng_Kambaata|ሀ]], [[ሁ#Tiếng_Kambaata|ሁ]], [[ሂ#Tiếng_Kambaata|ሂ]], [[ሃ#Tiếng_Kambaata|ሃ]], [[ሄ#Tiếng_Kambaata|ሄ]], [[ህ#Tiếng_Kambaata|ህ]], [[ሆ#Tiếng_Kambaata|ሆ]], [[ለ#Tiếng_Kambaata|ለ]], [[ሉ#Tiếng_Kambaata|ሉ]], [[ሊ#Tiếng_Kambaata|ሊ]], [[ላ#Tiếng_Kambaata|ላ]], [[ሌ#Tiếng_Kambaata|ሌ]], [[ል#Tiếng_Kambaata|ል]], [[ሎ#Tiếng_Kambaata|ሎ]], [[ሐ#Tiếng_Kambaata|ሐ]], [[ሑ#Tiếng_Kambaata|ሑ]], [[ሒ#Tiếng_Kambaata|ሒ]], [[ሓ#Tiếng_Kambaata|ሓ]], [[ሔ#Tiếng_Kambaata|ሔ]], [[ሕ#Tiếng_Kambaata|ሕ]], [[ሖ#Tiếng_Kambaata|ሖ]], [[መ#Tiếng_Kambaata|መ]], [[ሙ#Tiếng_Kambaata|ሙ]], [[ሚ#Tiếng_Kambaata|ሚ]], [[ማ#Tiếng_Kambaata|ማ]], [[ሜ#Tiếng_Kambaata|ሜ]], [[ም#Tiếng_Kambaata|ም]], [[ሞ#Tiếng_Kambaata|ሞ]], [[ሠ#Tiếng_Kambaata|ሠ]], [[ሡ#Tiếng_Kambaata|ሡ]], [[ሢ#Tiếng_Kambaata|ሢ]], [[ሣ#Tiếng_Kambaata|ሣ]], [[ሤ#Tiếng_Kambaata|ሤ]], [[ሥ#Tiếng_Kambaata|ሥ]], [[ሦ#Tiếng_Kambaata|ሦ]], [[ረ#Tiếng_Kambaata|ረ]], [[ሩ#Tiếng_Kambaata|ሩ]], [[ሪ#Tiếng_Kambaata|ሪ]], [[ራ#Tiếng_Kambaata|ራ]], [[ሬ#Tiếng_Kambaata|ሬ]], [[ር#Tiếng_Kambaata|ር]], [[ሮ#Tiếng_Kambaata|ሮ]], [[ሰ#Tiếng_Kambaata|ሰ]], [[ሱ#Tiếng_Kambaata|ሱ]], [[ሲ#Tiếng_Kambaata|ሲ]], [[ሳ#Tiếng_Kambaata|ሳ]], [[ሴ#Tiếng_Kambaata|ሴ]], [[ስ#Tiếng_Kambaata|ስ]], [[ሶ#Tiếng_Kambaata|ሶ]], [[ሸ#Tiếng_Kambaata|ሸ]], [[ሹ#Tiếng_Kambaata|ሹ]], [[ሺ#Tiếng_Kambaata|ሺ]], [[ሻ#Tiếng_Kambaata|ሻ]], [[ሼ#Tiếng_Kambaata|ሼ]], [[ሽ#Tiếng_Kambaata|ሽ]], [[ሾ#Tiếng_Kambaata|ሾ]], [[ቀ#Tiếng_Kambaata|ቀ]], [[ቁ#Tiếng_Kambaata|ቁ]], [[ቂ#Tiếng_Kambaata|ቂ]], [[ቃ#Tiếng_Kambaata|ቃ]], [[ቄ#Tiếng_Kambaata|ቄ]], [[ቅ#Tiếng_Kambaata|ቅ]], [[ቆ#Tiếng_Kambaata|ቆ]], [[በ#Tiếng_Kambaata|በ]], [[ቡ#Tiếng_Kambaata|ቡ]], [[ቢ#Tiếng_Kambaata|ቢ]], [[ባ#Tiếng_Kambaata|ባ]], [[ቤ#Tiếng_Kambaata|ቤ]], [[ብ#Tiếng_Kambaata|ብ]], [[ቦ#Tiếng_Kambaata|ቦ]], [[ተ#Tiếng_Kambaata|ተ]], [[ቱ#Tiếng_Kambaata|ቱ]], [[ቲ#Tiếng_Kambaata|ቲ]], [[ታ#Tiếng_Kambaata|ታ]], [[ቴ#Tiếng_Kambaata|ቴ]], [[ት#Tiếng_Kambaata|ት]], [[ቶ#Tiếng_Kambaata|ቶ]], [[ቸ#Tiếng_Kambaata|ቸ]], [[ቹ#Tiếng_Kambaata|ቹ]], [[ቺ#Tiếng_Kambaata|ቺ]], [[ቻ#Tiếng_Kambaata|ቻ]], [[ቼ#Tiếng_Kambaata|ቼ]], [[ች#Tiếng_Kambaata|ች]], [[ቾ#Tiếng_Kambaata|ቾ]], [[ኀ#Tiếng_Kambaata|ኀ]], [[ኁ#Tiếng_Kambaata|ኁ]], [[ኂ#Tiếng_Kambaata|ኂ]], [[ኃ#Tiếng_Kambaata|ኃ]], [[ኄ#Tiếng_Kambaata|ኄ]], [[ኅ#Tiếng_Kambaata|ኅ]], [[ኆ#Tiếng_Kambaata|ኆ]], [[ነ#Tiếng_Kambaata|ነ]], [[ኑ#Tiếng_Kambaata|ኑ]], [[ኒ#Tiếng_Kambaata|ኒ]], [[ና#Tiếng_Kambaata|ና]], [[ኔ#Tiếng_Kambaata|ኔ]], [[ን#Tiếng_Kambaata|ን]], [[ኖ#Tiếng_Kambaata|ኖ]], [[ኘ#Tiếng_Kambaata|ኘ]], [[ኙ#Tiếng_Kambaata|ኙ]], [[ኚ#Tiếng_Kambaata|ኚ]], [[ኛ#Tiếng_Kambaata|ኛ]], [[ኜ#Tiếng_Kambaata|ኜ]], [[ኝ#Tiếng_Kambaata|ኝ]], [[ኞ#Tiếng_Kambaata|ኞ]], [[አ#Tiếng_Kambaata|አ]], [[ኡ#Tiếng_Kambaata|ኡ]], [[ኢ#Tiếng_Kambaata|ኢ]], [[ኣ#Tiếng_Kambaata|ኣ]], [[ኤ#Tiếng_Kambaata|ኤ]], [[እ#Tiếng_Kambaata|እ]], [[ኦ#Tiếng_Kambaata|ኦ]], [[ኧ#Tiếng_Kambaata|ኧ]], [[ከ#Tiếng_Kambaata|ከ]], [[ኩ#Tiếng_Kambaata|ኩ]], [[ኪ#Tiếng_Kambaata|ኪ]], [[ካ#Tiếng_Kambaata|ካ]], [[ኬ#Tiếng_Kambaata|ኬ]], [[ክ#Tiếng_Kambaata|ክ]], [[ኮ#Tiếng_Kambaata|ኮ]], [[ኸ#Tiếng_Kambaata|ኸ]], [[ኹ#Tiếng_Kambaata|ኹ]], [[ኺ#Tiếng_Kambaata|ኺ]], [[ኻ#Tiếng_Kambaata|ኻ]], [[ኼ#Tiếng_Kambaata|ኼ]], [[ኽ#Tiếng_Kambaata|ኽ]], [[ኾ#Tiếng_Kambaata|ኾ]], [[ወ#Tiếng_Kambaata|ወ]], [[ዉ#Tiếng_Kambaata|ዉ]], [[ዊ#Tiếng_Kambaata|ዊ]], [[ዋ#Tiếng_Kambaata|ዋ]], [[ዌ#Tiếng_Kambaata|ዌ]], [[ው#Tiếng_Kambaata|ው]], [[ዎ#Tiếng_Kambaata|ዎ]], [[ዐ#Tiếng_Kambaata|ዐ]], [[ዑ#Tiếng_Kambaata|ዑ]], [[ዒ#Tiếng_Kambaata|ዒ]], [[ዓ#Tiếng_Kambaata|ዓ]], [[ዔ#Tiếng_Kambaata|ዔ]], [[ዕ#Tiếng_Kambaata|ዕ]], [[ዖ#Tiếng_Kambaata|ዖ]], [[ዘ#Tiếng_Kambaata|ዘ]], [[ዙ#Tiếng_Kambaata|ዙ]], [[ዚ#Tiếng_Kambaata|ዚ]], [[ዛ#Tiếng_Kambaata|ዛ]], [[ዜ#Tiếng_Kambaata|ዜ]], [[ዝ#Tiếng_Kambaata|ዝ]], [[ዞ#Tiếng_Kambaata|ዞ]], [[ዠ#Tiếng_Kambaata|ዠ]], [[ዡ#Tiếng_Kambaata|ዡ]], [[ዢ#Tiếng_Kambaata|ዢ]], [[ዣ#Tiếng_Kambaata|ዣ]], [[ዤ#Tiếng_Kambaata|ዤ]], [[ዥ#Tiếng_Kambaata|ዥ]], [[ዦ#Tiếng_Kambaata|ዦ]], [[የ#Tiếng_Kambaata|የ]], [[ዩ#Tiếng_Kambaata|ዩ]], [[ዪ#Tiếng_Kambaata|ዪ]], [[ያ#Tiếng_Kambaata|ያ]], [[ዬ#Tiếng_Kambaata|ዬ]], [[ይ#Tiếng_Kambaata|ይ]], [[ዮ#Tiếng_Kambaata|ዮ]], [[ደ#Tiếng_Kambaata|ደ]], [[ዱ#Tiếng_Kambaata|ዱ]], [[ዲ#Tiếng_Kambaata|ዲ]], [[ዳ#Tiếng_Kambaata|ዳ]], [[ዴ#Tiếng_Kambaata|ዴ]], [[ድ#Tiếng_Kambaata|ድ]], [[ዶ#Tiếng_Kambaata|ዶ]], [[ዸ#Tiếng_Kambaata|ዸ]], [[ዹ#Tiếng_Kambaata|ዹ]], [[ዺ#Tiếng_Kambaata|ዺ]], [[ዻ#Tiếng_Kambaata|ዻ]], [[ዼ#Tiếng_Kambaata|ዼ]], [[ዽ#Tiếng_Kambaata|ዽ]], [[ዾ#Tiếng_Kambaata|ዾ]], [[ጀ#Tiếng_Kambaata|ጀ]], [[ጁ#Tiếng_Kambaata|ጁ]], [[ጂ#Tiếng_Kambaata|ጂ]], [[ጃ#Tiếng_Kambaata|ጃ]], [[ጄ#Tiếng_Kambaata|ጄ]], [[ጅ#Tiếng_Kambaata|ጅ]], [[ጆ#Tiếng_Kambaata|ጆ]], [[ገ#Tiếng_Kambaata|ገ]], [[ጉ#Tiếng_Kambaata|ጉ]], [[ጊ#Tiếng_Kambaata|ጊ]], [[ጋ#Tiếng_Kambaata|ጋ]], [[ጌ#Tiếng_Kambaata|ጌ]], [[ግ#Tiếng_Kambaata|ግ]], [[ጎ#Tiếng_Kambaata|ጎ]], [[ጠ#Tiếng_Kambaata|ጠ]], [[ጡ#Tiếng_Kambaata|ጡ]], [[ጢ#Tiếng_Kambaata|ጢ]], [[ጣ#Tiếng_Kambaata|ጣ]], [[ጤ#Tiếng_Kambaata|ጤ]], [[ጥ#Tiếng_Kambaata|ጥ]], [[ጦ#Tiếng_Kambaata|ጦ]], [[ጨ#Tiếng_Kambaata|ጨ]], [[ጩ#Tiếng_Kambaata|ጩ]], [[ጪ#Tiếng_Kambaata|ጪ]], [[ጫ#Tiếng_Kambaata|ጫ]], [[ጬ#Tiếng_Kambaata|ጬ]], [[ጭ#Tiếng_Kambaata|ጭ]], [[ጮ#Tiếng_Kambaata|ጮ]], [[ጰ#Tiếng_Kambaata|ጰ]], [[ጱ#Tiếng_Kambaata|ጱ]], [[ጲ#Tiếng_Kambaata|ጲ]], [[ጳ#Tiếng_Kambaata|ጳ]], [[ጴ#Tiếng_Kambaata|ጴ]], [[ጵ#Tiếng_Kambaata|ጵ]], [[ጶ#Tiếng_Kambaata|ጶ]], [[ጸ#Tiếng_Kambaata|ጸ]], [[ጹ#Tiếng_Kambaata|ጹ]], [[ጺ#Tiếng_Kambaata|ጺ]], [[ጻ#Tiếng_Kambaata|ጻ]], [[ጼ#Tiếng_Kambaata|ጼ]], [[ጽ#Tiếng_Kambaata|ጽ]], [[ጾ#Tiếng_Kambaata|ጾ]], [[ፈ#Tiếng_Kambaata|ፈ]], [[ፉ#Tiếng_Kambaata|ፉ]], [[ፊ#Tiếng_Kambaata|ፊ]], [[ፋ#Tiếng_Kambaata|ፋ]], [[ፌ#Tiếng_Kambaata|ፌ]], [[ፍ#Tiếng_Kambaata|ፍ]], [[ፎ#Tiếng_Kambaata|ፎ]], [[ፐ#Tiếng_Kambaata|ፐ]], [[ፑ#Tiếng_Kambaata|ፑ]], [[ፒ#Tiếng_Kambaata|ፒ]], [[ፓ#Tiếng_Kambaata|ፓ]], [[ፔ#Tiếng_Kambaata|ፔ]], [[ፕ#Tiếng_Kambaata|ፕ]], [[ፖ#Tiếng_Kambaata|ፖ]] ==={{ĐM|ref}}=== *{{Chú thích web|ktb|author=Bible Society of Ethiopia|entryurl=https://live.bible.is/bible/KTBBSE/MAT/1|entry=ቀርቾ ዬሱስ ክርስቶስተኔ ማቶስ ጣፎ ምሽራች መጣፈ 1|year=2011|work=Kambaata}} =={{langname|kxh}}== ==={{ĐM|pron}}=== *{{IPA4|kxh|[ʔa]}} ==={{ĐM|letter}}=== {{head|kxh|Chữ cái|tr=ʾä}} #Chữ cái âm tiết ''ʾä'' trong bộ chữ Geʽez tiếng Karo. #:{{quote|kxh|ኖኻሞ '''አ'''ጋዛራ ሙልካምባሮኻ ፓሺዲና።|tr=noxamo '''ʾä'''gazara mulkambaroxa pašidina.|Bấy giờ là ngày sắm-sửa, nghĩa là hôm trước ngày Sa-bát; khi đã chiều tối, ([[s:Mác/1#1:42|Mác 1:42]])}} ==={{ĐM|ref}}=== *{{Chú thích web|entryurl=https://www.karaethiopia.com/libraries/pdfjs-dist-viewer-min/build/minified/web/viewer.html?file=%2Fsites%2Fwww.karaethiopia.com%2Ffiles%2FMarkos%25201.pdf|entry=Markos 1|year=2025|work=ኑንቆንካ ሻያያ የዋንስሳ ታማርኖ|publisher=Kara Ethiopia}} =={{langname|gru}}== ==={{ĐM|pron}}=== *{{IPA4|gru|[ʔa]}} ==={{ĐM|letter}}=== {{head|gru|Chữ cái|tr=ʾa}} #Chữ cái âm tiết ''ʾa'' trong bộ chữ Geʽez tiếng Kistane. #:{{ux|gru|'''አ'''ዲ|tr='''a'''di|[[tôi]]|inline=1}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Kistane'') [[ኸ#Tiếng_Kistane|ኸ]], [[ኹ#Tiếng_Kistane|ኹ]], [[ኺ#Tiếng_Kistane|ኺ]], [[ኻ#Tiếng_Kistane|ኻ]], [[ኼ#Tiếng_Kistane|ኼ]], [[ኽ#Tiếng_Kistane|ኽ]], [[ኾ#Tiếng_Kistane|ኾ]], [[ዀ#Tiếng_Kistane|ዀ]], [[ዂ#Tiếng_Kistane|ዂ]], [[ዃ#Tiếng_Kistane|ዃ]], [[ዄ#Tiếng_Kistane|ዄ]], [[ዅ#Tiếng_Kistane|ዅ]], [[ⷐ#Tiếng_Kistane|ⷐ]], [[ⷑ#Tiếng_Kistane|ⷑ]], [[ⷒ#Tiếng_Kistane|ⷒ]], [[ⷓ#Tiếng_Kistane|ⷓ]], [[ⷔ#Tiếng_Kistane|ⷔ]], [[ⷕ#Tiếng_Kistane|ⷕ]], [[ⷖ#Tiếng_Kistane|ⷖ]], [[ለ#Tiếng_Kistane|ለ]], [[ሉ#Tiếng_Kistane|ሉ]], [[ሊ#Tiếng_Kistane|ሊ]], [[ላ#Tiếng_Kistane|ላ]], [[ሌ#Tiếng_Kistane|ሌ]], [[ል#Tiếng_Kistane|ል]], [[ሎ#Tiếng_Kistane|ሎ]], [[ሏ#Tiếng_Kistane|ሏ]], [[መ#Tiếng_Kistane|መ]], [[ሙ#Tiếng_Kistane|ሙ]], [[ሚ#Tiếng_Kistane|ሚ]], [[ማ#Tiếng_Kistane|ማ]], [[ሜ#Tiếng_Kistane|ሜ]], [[ም#Tiếng_Kistane|ም]], [[ሞ#Tiếng_Kistane|ሞ]], [[ᎀ#Tiếng_Kistane|ᎀ]], [[ᎁ#Tiếng_Kistane|ᎁ]], [[ሟ#Tiếng_Kistane|ሟ]], [[ᎂ#Tiếng_Kistane|ᎂ]], [[ᎃ#Tiếng_Kistane|ᎃ]], [[ረ#Tiếng_Kistane|ረ]], [[ሩ#Tiếng_Kistane|ሩ]], [[ሪ#Tiếng_Kistane|ሪ]], [[ራ#Tiếng_Kistane|ራ]], [[ሬ#Tiếng_Kistane|ሬ]], [[ር#Tiếng_Kistane|ር]], [[ሮ#Tiếng_Kistane|ሮ]], [[ሯ#Tiếng_Kistane|ሯ]], [[ሰ#Tiếng_Kistane|ሰ]], [[ሱ#Tiếng_Kistane|ሱ]], [[ሲ#Tiếng_Kistane|ሲ]], [[ሳ#Tiếng_Kistane|ሳ]], [[ሴ#Tiếng_Kistane|ሴ]], [[ስ#Tiếng_Kistane|ስ]], [[ሶ#Tiếng_Kistane|ሶ]], [[ሷ#Tiếng_Kistane|ሷ]], [[ሸ#Tiếng_Kistane|ሸ]], [[ሹ#Tiếng_Kistane|ሹ]], [[ሺ#Tiếng_Kistane|ሺ]], [[ሻ#Tiếng_Kistane|ሻ]], [[ሼ#Tiếng_Kistane|ሼ]], [[ሽ#Tiếng_Kistane|ሽ]], [[ሾ#Tiếng_Kistane|ሾ]], [[ሿ#Tiếng_Kistane|ሿ]], [[ቀ#Tiếng_Kistane|ቀ]], [[ቁ#Tiếng_Kistane|ቁ]], [[ቂ#Tiếng_Kistane|ቂ]], [[ቃ#Tiếng_Kistane|ቃ]], [[ቄ#Tiếng_Kistane|ቄ]], [[ቅ#Tiếng_Kistane|ቅ]], [[ቆ#Tiếng_Kistane|ቆ]], [[ቈ#Tiếng_Kistane|ቈ]], [[ቊ#Tiếng_Kistane|ቊ]], [[ቋ#Tiếng_Kistane|ቋ]], [[ቌ#Tiếng_Kistane|ቌ]], [[ቍ#Tiếng_Kistane|ቍ]], [[ⷀ#Tiếng_Kistane|ⷀ]], [[ⷁ#Tiếng_Kistane|ⷁ]], [[ⷂ#Tiếng_Kistane|ⷂ]], [[ⷃ#Tiếng_Kistane|ⷃ]], [[ⷄ#Tiếng_Kistane|ⷄ]], [[ⷅ#Tiếng_Kistane|ⷅ]], [[ⷆ#Tiếng_Kistane|ⷆ]], [[በ#Tiếng_Kistane|በ]], [[ቡ#Tiếng_Kistane|ቡ]], [[ቢ#Tiếng_Kistane|ቢ]], [[ባ#Tiếng_Kistane|ባ]], [[ቤ#Tiếng_Kistane|ቤ]], [[ብ#Tiếng_Kistane|ብ]], [[ቦ#Tiếng_Kistane|ቦ]], [[ᎄ#Tiếng_Kistane|ᎄ]], [[ᎅ#Tiếng_Kistane|ᎅ]], [[ቧ#Tiếng_Kistane|ቧ]], [[ᎆ#Tiếng_Kistane|ᎆ]], [[ᎇ#Tiếng_Kistane|ᎇ]], [[ተ#Tiếng_Kistane|ተ]], [[ቱ#Tiếng_Kistane|ቱ]], [[ቲ#Tiếng_Kistane|ቲ]], [[ታ#Tiếng_Kistane|ታ]], [[ቴ#Tiếng_Kistane|ቴ]], [[ት#Tiếng_Kistane|ት]], [[ቶ#Tiếng_Kistane|ቶ]], [[ቷ#Tiếng_Kistane|ቷ]], [[ቸ#Tiếng_Kistane|ቸ]], [[ቹ#Tiếng_Kistane|ቹ]], [[ቺ#Tiếng_Kistane|ቺ]], [[ቻ#Tiếng_Kistane|ቻ]], [[ቼ#Tiếng_Kistane|ቼ]], [[ች#Tiếng_Kistane|ች]], [[ቾ#Tiếng_Kistane|ቾ]], [[ቿ#Tiếng_Kistane|ቿ]], [[ነ#Tiếng_Kistane|ነ]], [[ኑ#Tiếng_Kistane|ኑ]], [[ኒ#Tiếng_Kistane|ኒ]], [[ና#Tiếng_Kistane|ና]], [[ኔ#Tiếng_Kistane|ኔ]], [[ን#Tiếng_Kistane|ን]], [[ኖ#Tiếng_Kistane|ኖ]], [[ኗ#Tiếng_Kistane|ኗ]], [[ኘ#Tiếng_Kistane|ኘ]], [[ኙ#Tiếng_Kistane|ኙ]], [[ኚ#Tiếng_Kistane|ኚ]], [[ኛ#Tiếng_Kistane|ኛ]], [[ኜ#Tiếng_Kistane|ኜ]], [[ኝ#Tiếng_Kistane|ኝ]], [[ኞ#Tiếng_Kistane|ኞ]], [[ኟ#Tiếng_Kistane|ኟ]], [[ኧ#Tiếng_Kistane|ኧ]], [[ኡ#Tiếng_Kistane|ኡ]], [[ኢ#Tiếng_Kistane|ኢ]], [[አ#Tiếng_Kistane|አ]], [[ኤ#Tiếng_Kistane|ኤ]], [[እ#Tiếng_Kistane|እ]], [[ኦ#Tiếng_Kistane|ኦ]], [[ከ#Tiếng_Kistane|ከ]], [[ኩ#Tiếng_Kistane|ኩ]], [[ኪ#Tiếng_Kistane|ኪ]], [[ካ#Tiếng_Kistane|ካ]], [[ኬ#Tiếng_Kistane|ኬ]], [[ክ#Tiếng_Kistane|ክ]], [[ኮ#Tiếng_Kistane|ኮ]], [[ኰ#Tiếng_Kistane|ኰ]], [[ኲ#Tiếng_Kistane|ኲ]], [[ኳ#Tiếng_Kistane|ኳ]], [[ኴ#Tiếng_Kistane|ኴ]], [[ኵ#Tiếng_Kistane|ኵ]], [[ⷈ#Tiếng_Kistane|ⷈ]], [[ⷉ#Tiếng_Kistane|ⷉ]], [[ⷊ#Tiếng_Kistane|ⷊ]], [[ⷋ#Tiếng_Kistane|ⷋ]], [[ⷌ#Tiếng_Kistane|ⷌ]], [[ⷍ#Tiếng_Kistane|ⷍ]], [[ⷎ#Tiếng_Kistane|ⷎ]], [[ወ#Tiếng_Kistane|ወ]], [[ዉ#Tiếng_Kistane|ዉ]], [[ዊ#Tiếng_Kistane|ዊ]], [[ዋ#Tiếng_Kistane|ዋ]], [[ዌ#Tiếng_Kistane|ዌ]], [[ው#Tiếng_Kistane|ው]], [[ዎ#Tiếng_Kistane|ዎ]], [[ዘ#Tiếng_Kistane|ዘ]], [[ዙ#Tiếng_Kistane|ዙ]], [[ዚ#Tiếng_Kistane|ዚ]], [[ዛ#Tiếng_Kistane|ዛ]], [[ዜ#Tiếng_Kistane|ዜ]], [[ዝ#Tiếng_Kistane|ዝ]], [[ዞ#Tiếng_Kistane|ዞ]], [[ዟ#Tiếng_Kistane|ዟ]], [[ዠ#Tiếng_Kistane|ዠ]], [[ዡ#Tiếng_Kistane|ዡ]], [[ዢ#Tiếng_Kistane|ዢ]], [[ዣ#Tiếng_Kistane|ዣ]], [[ዤ#Tiếng_Kistane|ዤ]], [[ዥ#Tiếng_Kistane|ዥ]], [[ዦ#Tiếng_Kistane|ዦ]], [[ዧ#Tiếng_Kistane|ዧ]], [[የ#Tiếng_Kistane|የ]], [[ዩ#Tiếng_Kistane|ዩ]], [[ዪ#Tiếng_Kistane|ዪ]], [[ያ#Tiếng_Kistane|ያ]], [[ዬ#Tiếng_Kistane|ዬ]], [[ይ#Tiếng_Kistane|ይ]], [[ዮ#Tiếng_Kistane|ዮ]], [[ደ#Tiếng_Kistane|ደ]], [[ዱ#Tiếng_Kistane|ዱ]], [[ዲ#Tiếng_Kistane|ዲ]], [[ዳ#Tiếng_Kistane|ዳ]], [[ዴ#Tiếng_Kistane|ዴ]], [[ድ#Tiếng_Kistane|ድ]], [[ዶ#Tiếng_Kistane|ዶ]], [[ዷ#Tiếng_Kistane|ዷ]], [[ጀ#Tiếng_Kistane|ጀ]], [[ጁ#Tiếng_Kistane|ጁ]], [[ጂ#Tiếng_Kistane|ጂ]], [[ጃ#Tiếng_Kistane|ጃ]], [[ጄ#Tiếng_Kistane|ጄ]], [[ጅ#Tiếng_Kistane|ጅ]], [[ጆ#Tiếng_Kistane|ጆ]], [[ጇ#Tiếng_Kistane|ጇ]], [[ገ#Tiếng_Kistane|ገ]], [[ጉ#Tiếng_Kistane|ጉ]], [[ጊ#Tiếng_Kistane|ጊ]], [[ጋ#Tiếng_Kistane|ጋ]], [[ጌ#Tiếng_Kistane|ጌ]], [[ግ#Tiếng_Kistane|ግ]], [[ጎ#Tiếng_Kistane|ጎ]], [[ጐ#Tiếng_Kistane|ጐ]], [[ጒ#Tiếng_Kistane|ጒ]], [[ጓ#Tiếng_Kistane|ጓ]], [[ጔ#Tiếng_Kistane|ጔ]], [[ጕ#Tiếng_Kistane|ጕ]], [[ⷘ#Tiếng_Kistane|ⷘ]], [[ⷙ#Tiếng_Kistane|ⷙ]], [[ⷚ#Tiếng_Kistane|ⷚ]], [[ⷛ#Tiếng_Kistane|ⷛ]], [[ⷜ#Tiếng_Kistane|ⷜ]], [[ⷝ#Tiếng_Kistane|ⷝ]], [[ⷞ#Tiếng_Kistane|ⷞ]], [[ጠ#Tiếng_Kistane|ጠ]], [[ጡ#Tiếng_Kistane|ጡ]], [[ጢ#Tiếng_Kistane|ጢ]], [[ጣ#Tiếng_Kistane|ጣ]], [[ጤ#Tiếng_Kistane|ጤ]], [[ጥ#Tiếng_Kistane|ጥ]], [[ጦ#Tiếng_Kistane|ጦ]], [[ጧ#Tiếng_Kistane|ጧ]], [[ጨ#Tiếng_Kistane|ጨ]], [[ጩ#Tiếng_Kistane|ጩ]], [[ጪ#Tiếng_Kistane|ጪ]], [[ጫ#Tiếng_Kistane|ጫ]], [[ጬ#Tiếng_Kistane|ጬ]], [[ጭ#Tiếng_Kistane|ጭ]], [[ጮ#Tiếng_Kistane|ጮ]], [[ጯ#Tiếng_Kistane|ጯ]], [[ጰ#Tiếng_Kistane|ጰ]], [[ጱ#Tiếng_Kistane|ጱ]], [[ጲ#Tiếng_Kistane|ጲ]], [[ጳ#Tiếng_Kistane|ጳ]], [[ጴ#Tiếng_Kistane|ጴ]], [[ጵ#Tiếng_Kistane|ጵ]], [[ጶ#Tiếng_Kistane|ጶ]], [[ጷ#Tiếng_Kistane|ጷ]], [[ፀ#Tiếng_Kistane|ፀ]], [[ፁ#Tiếng_Kistane|ፁ]], [[ፂ#Tiếng_Kistane|ፂ]], [[ፃ#Tiếng_Kistane|ፃ]], [[ፄ#Tiếng_Kistane|ፄ]], [[ፅ#Tiếng_Kistane|ፅ]], [[ፆ#Tiếng_Kistane|ፆ]], [[ፈ#Tiếng_Kistane|ፈ]], [[ፉ#Tiếng_Kistane|ፉ]], [[ፊ#Tiếng_Kistane|ፊ]], [[ፋ#Tiếng_Kistane|ፋ]], [[ፌ#Tiếng_Kistane|ፌ]], [[ፍ#Tiếng_Kistane|ፍ]], [[ፎ#Tiếng_Kistane|ፎ]], [[ᎈ#Tiếng_Kistane|ᎈ]], [[ᎉ#Tiếng_Kistane|ᎉ]], [[ፏ#Tiếng_Kistane|ፏ]], [[ᎊ#Tiếng_Kistane|ᎊ]], [[ᎋ#Tiếng_Kistane|ᎋ]], [[ፐ#Tiếng_Kistane|ፐ]], [[ፑ#Tiếng_Kistane|ፑ]], [[ፒ#Tiếng_Kistane|ፒ]], [[ፓ#Tiếng_Kistane|ፓ]], [[ፔ#Tiếng_Kistane|ፔ]], [[ፕ#Tiếng_Kistane|ፕ]], [[ፖ#Tiếng_Kistane|ፖ]], [[ᎌ#Tiếng_Kistane|ᎌ]], [[ᎍ#Tiếng_Kistane|ᎍ]], [[ፗ#Tiếng_Kistane|ፗ]], [[ᎎ#Tiếng_Kistane|ᎎ]], [[ᎏ#Tiếng_Kistane|ᎏ]] =={{langname|kxc}}== ==={{ĐM|pron}}=== *{{IPA4|kxc|[ʔa]}} ==={{ĐM|letter}}=== {{head|kxc|Chữ cái|tr=ʾa}} #Chữ cái âm tiết ''ʾa'' trong bộ chữ Geʽez tiếng Konso. #:{{ux|kxc|[[አፈ ኾንሶ#Tiếng_Konso|'''አ'''ፈ ኾንሶ]]|tr='''ä'''fä honəso|tiếng Konso|inline=1}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Konso'') [[ሀ#Tiếng_Konso|ሀ]], [[ሁ#Tiếng_Konso|ሁ]], [[ሂ#Tiếng_Konso|ሂ]], [[ሃ#Tiếng_Konso|ሃ]], [[ሄ#Tiếng_Konso|ሄ]], [[ህ#Tiếng_Konso|ህ]], [[ሆ#Tiếng_Konso|ሆ]], [[ለ#Tiếng_Konso|ለ]], [[ሉ#Tiếng_Konso|ሉ]], [[ሊ#Tiếng_Konso|ሊ]], [[ላ#Tiếng_Konso|ላ]], [[ሌ#Tiếng_Konso|ሌ]], [[ል#Tiếng_Konso|ል]], [[ሎ#Tiếng_Konso|ሎ]], [[መ#Tiếng_Konso|መ]], [[ሙ#Tiếng_Konso|ሙ]], [[ሚ#Tiếng_Konso|ሚ]], [[ማ#Tiếng_Konso|ማ]], [[ሜ#Tiếng_Konso|ሜ]], [[ም#Tiếng_Konso|ም]], [[ሞ#Tiếng_Konso|ሞ]], [[ረ#Tiếng_Konso|ረ]], [[ሩ#Tiếng_Konso|ሩ]], [[ሪ#Tiếng_Konso|ሪ]], [[ራ#Tiếng_Konso|ራ]], [[ሬ#Tiếng_Konso|ሬ]], [[ር#Tiếng_Konso|ር]], [[ሮ#Tiếng_Konso|ሮ]], [[ሰ#Tiếng_Konso|ሰ]], [[ሱ#Tiếng_Konso|ሱ]], [[ሲ#Tiếng_Konso|ሲ]], [[ሳ#Tiếng_Konso|ሳ]], [[ሴ#Tiếng_Konso|ሴ]], [[ስ#Tiếng_Konso|ስ]], [[ሶ#Tiếng_Konso|ሶ]], [[ሸ#Tiếng_Konso|ሸ]], [[ሹ#Tiếng_Konso|ሹ]], [[ሺ#Tiếng_Konso|ሺ]], [[ሻ#Tiếng_Konso|ሻ]], [[ሼ#Tiếng_Konso|ሼ]], [[ሽ#Tiếng_Konso|ሽ]], [[ሾ#Tiếng_Konso|ሾ]], [[ተ#Tiếng_Konso|ተ]], [[ቱ#Tiếng_Konso|ቱ]], [[ቲ#Tiếng_Konso|ቲ]], [[ታ#Tiếng_Konso|ታ]], [[ቴ#Tiếng_Konso|ቴ]], [[ት#Tiếng_Konso|ት]], [[ቶ#Tiếng_Konso|ቶ]], [[ቸ#Tiếng_Konso|ቸ]], [[ቹ#Tiếng_Konso|ቹ]], [[ቺ#Tiếng_Konso|ቺ]], [[ቻ#Tiếng_Konso|ቻ]], [[ቼ#Tiếng_Konso|ቼ]], [[ች#Tiếng_Konso|ች]], [[ቾ#Tiếng_Konso|ቾ]], [[ነ#Tiếng_Konso|ነ]], [[ኑ#Tiếng_Konso|ኑ]], [[ኒ#Tiếng_Konso|ኒ]], [[ና#Tiếng_Konso|ና]], [[ኔ#Tiếng_Konso|ኔ]], [[ን#Tiếng_Konso|ን]], [[ኖ#Tiếng_Konso|ኖ]], [[ኘ#Tiếng_Konso|ኘ]], [[ኙ#Tiếng_Konso|ኙ]], [[ኚ#Tiếng_Konso|ኚ]], [[ኛ#Tiếng_Konso|ኛ]], [[ኜ#Tiếng_Konso|ኜ]], [[ኝ#Tiếng_Konso|ኝ]], [[ኞ#Tiếng_Konso|ኞ]], [[አ#Tiếng_Konso|አ]], [[ኡ#Tiếng_Konso|ኡ]], [[ኢ#Tiếng_Konso|ኢ]], [[ኣ#Tiếng_Konso|ኣ]], [[ኤ#Tiếng_Konso|ኤ]], [[እ#Tiếng_Konso|እ]], [[ኦ#Tiếng_Konso|ኦ]], [[ከ#Tiếng_Konso|ከ]], [[ኩ#Tiếng_Konso|ኩ]], [[ኪ#Tiếng_Konso|ኪ]], [[ካ#Tiếng_Konso|ካ]], [[ኬ#Tiếng_Konso|ኬ]], [[ክ#Tiếng_Konso|ክ]], [[ኮ#Tiếng_Konso|ኮ]], [[ወ#Tiếng_Konso|ወ]], [[ዉ#Tiếng_Konso|ዉ]], [[ዊ#Tiếng_Konso|ዊ]], [[ዋ#Tiếng_Konso|ዋ]], [[ዌ#Tiếng_Konso|ዌ]], [[ው#Tiếng_Konso|ው]], [[ዎ#Tiếng_Konso|ዎ]], [[የ#Tiếng_Konso|የ]], [[ዩ#Tiếng_Konso|ዩ]], [[ዪ#Tiếng_Konso|ዪ]], [[ያ#Tiếng_Konso|ያ]], [[ዬ#Tiếng_Konso|ዬ]], [[ይ#Tiếng_Konso|ይ]], [[ዮ#Tiếng_Konso|ዮ]], [[ፈ#Tiếng_Konso|ፈ]], [[ፉ#Tiếng_Konso|ፉ]], [[ፊ#Tiếng_Konso|ፊ]], [[ፋ#Tiếng_Konso|ፋ]], [[ፌ#Tiếng_Konso|ፌ]], [[ፍ#Tiếng_Konso|ፍ]], [[ፎ#Tiếng_Konso|ፎ]], [[ደ#Tiếng_Konso|ደ]], [[ዱ#Tiếng_Konso|ዱ]], [[ዲ#Tiếng_Konso|ዲ]], [[ዳ#Tiếng_Konso|ዳ]], [[ዴ#Tiếng_Konso|ዴ]], [[ድ#Tiếng_Konso|ድ]], [[ዶ#Tiếng_Konso|ዶ]], [[ጰ#Tiếng_Konso|ጰ]], [[ጱ#Tiếng_Konso|ጱ]], [[ጲ#Tiếng_Konso|ጲ]], [[ጳ#Tiếng_Konso|ጳ]], [[ጴ#Tiếng_Konso|ጴ]], [[ጵ#Tiếng_Konso|ጵ]], [[ጶ#Tiếng_Konso|ጶ]], [[ቀ#Tiếng_Konso|ቀ]], [[ቁ#Tiếng_Konso|ቁ]], [[ቂ#Tiếng_Konso|ቂ]], [[ቃ#Tiếng_Konso|ቃ]], [[ቄ#Tiếng_Konso|ቄ]], [[ቅ#Tiếng_Konso|ቅ]], [[ቆ#Tiếng_Konso|ቆ]], [[ጨ#Tiếng_Konso|ጨ]], [[ጩ#Tiếng_Konso|ጩ]], [[ጪ#Tiếng_Konso|ጪ]], [[ጫ#Tiếng_Konso|ጫ]], [[ጬ#Tiếng_Konso|ጬ]], [[ጭ#Tiếng_Konso|ጭ]], [[ጮ#Tiếng_Konso|ጮ]], [[ኸ#Tiếng_Konso|ኸ]], [[ኹ#Tiếng_Konso|ኹ]], [[ኺ#Tiếng_Konso|ኺ]], [[ኻ#Tiếng_Konso|ኻ]], [[ኼ#Tiếng_Konso|ኼ]], [[ኽ#Tiếng_Konso|ኽ]], [[ኾ#Tiếng_Konso|ኾ]], [[ፐ#Tiếng_Konso|ፐ]], [[ፑ#Tiếng_Konso|ፑ]], [[ፒ#Tiếng_Konso|ፒ]], [[ፓ#Tiếng_Konso|ፓ]], [[ፔ#Tiếng_Konso|ፔ]], [[ፕ#Tiếng_Konso|ፕ]], [[ፖ#Tiếng_Konso|ፖ]] ==={{ĐM|ref}}=== *{{Chú thích web|kxc|author=Bible Society of Ethiopia|entryurl=https://live.bible.is/bible/KXCBSE/MRK/1|entry=መርቆስ 1|year=2001|work=Bible.is}} *{{Chú thích sách|kxc|author=Borale Matewos|title=[https://www.sil.org/system/files/reapdata/12/07/70/120770007088788814762090621972698906243/English_Afaa_Xonso_Amharic_School_Dictionary_2022.pdf English - Afaa Xonso - Amharic School Dictionary]|year=2022|publisher=SIL Ethiopia, SNNPRS Education|page=236}} =={{langname|kqy}}== ==={{ĐM|pron}}=== *{{IPA4|kqy|[ʔa]}} ==={{ĐM|letter}}=== {{head|kqy|Chữ cái|tr=ʾä}} #Chữ cái âm tiết ''ʾä'' trong bộ chữ Geʽez tiếng Koore. #:{{ux|kqy|'''አ'''ንሡታስት ሀንተ|tr='''ʾä'''nəśutast häntä|[[s:Công vụ các Sứ đồ|Công vụ các Sứ đồ]]|inline=1}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Koore'') [[ሀ#Tiếng_Koore|ሀ]], [[ሁ#Tiếng_Koore|ሁ]], [[ሂ#Tiếng_Koore|ሂ]], [[ሃ#Tiếng_Koore|ሃ]], [[ሄ#Tiếng_Koore|ሄ]], [[ህ#Tiếng_Koore|ህ]], [[ሆ#Tiếng_Koore|ሆ]], [[ለ#Tiếng_Koore|ለ]], [[ሉ#Tiếng_Koore|ሉ]], [[ሊ#Tiếng_Koore|ሊ]], [[ላ#Tiếng_Koore|ላ]], [[ሌ#Tiếng_Koore|ሌ]], [[ል#Tiếng_Koore|ል]], [[ሎ#Tiếng_Koore|ሎ]], [[መ#Tiếng_Koore|መ]], [[ሙ#Tiếng_Koore|ሙ]], [[ሚ#Tiếng_Koore|ሚ]], [[ማ#Tiếng_Koore|ማ]], [[ሜ#Tiếng_Koore|ሜ]], [[ም#Tiếng_Koore|ም]], [[ሞ#Tiếng_Koore|ሞ]], [[ሠ#Tiếng_Koore|ሠ]], [[ሡ#Tiếng_Koore|ሡ]], [[ሢ#Tiếng_Koore|ሢ]], [[ሣ#Tiếng_Koore|ሣ]], [[ሤ#Tiếng_Koore|ሤ]], [[ሥ#Tiếng_Koore|ሥ]], [[ሦ#Tiếng_Koore|ሦ]], [[ረ#Tiếng_Koore|ረ]], [[ሩ#Tiếng_Koore|ሩ]], [[ሪ#Tiếng_Koore|ሪ]], [[ራ#Tiếng_Koore|ራ]], [[ሬ#Tiếng_Koore|ሬ]], [[ር#Tiếng_Koore|ር]], [[ሮ#Tiếng_Koore|ሮ]], [[ሰ#Tiếng_Koore|ሰ]], [[ሱ#Tiếng_Koore|ሱ]], [[ሲ#Tiếng_Koore|ሲ]], [[ሳ#Tiếng_Koore|ሳ]], [[ሴ#Tiếng_Koore|ሴ]], [[ስ#Tiếng_Koore|ስ]], [[ሶ#Tiếng_Koore|ሶ]], [[ሸ#Tiếng_Koore|ሸ]], [[ሹ#Tiếng_Koore|ሹ]], [[ሺ#Tiếng_Koore|ሺ]], [[ሻ#Tiếng_Koore|ሻ]], [[ሼ#Tiếng_Koore|ሼ]], [[ሽ#Tiếng_Koore|ሽ]], [[ሾ#Tiếng_Koore|ሾ]], [[ቀ#Tiếng_Koore|ቀ]], [[ቁ#Tiếng_Koore|ቁ]], [[ቂ#Tiếng_Koore|ቂ]], [[ቃ#Tiếng_Koore|ቃ]], [[ቄ#Tiếng_Koore|ቄ]], [[ቅ#Tiếng_Koore|ቅ]], [[ቆ#Tiếng_Koore|ቆ]], [[በ#Tiếng_Koore|በ]], [[ቡ#Tiếng_Koore|ቡ]], [[ቢ#Tiếng_Koore|ቢ]], [[ባ#Tiếng_Koore|ባ]], [[ቤ#Tiếng_Koore|ቤ]], [[ብ#Tiếng_Koore|ብ]], [[ቦ#Tiếng_Koore|ቦ]], [[ተ#Tiếng_Koore|ተ]], [[ቱ#Tiếng_Koore|ቱ]], [[ቲ#Tiếng_Koore|ቲ]], [[ታ#Tiếng_Koore|ታ]], [[ቴ#Tiếng_Koore|ቴ]], [[ት#Tiếng_Koore|ት]], [[ቶ#Tiếng_Koore|ቶ]], [[ቸ#Tiếng_Koore|ቸ]], [[ቹ#Tiếng_Koore|ቹ]], [[ቺ#Tiếng_Koore|ቺ]], [[ቻ#Tiếng_Koore|ቻ]], [[ቼ#Tiếng_Koore|ቼ]], [[ች#Tiếng_Koore|ች]], [[ቾ#Tiếng_Koore|ቾ]], [[ነ#Tiếng_Koore|ነ]], [[ኑ#Tiếng_Koore|ኑ]], [[ኒ#Tiếng_Koore|ኒ]], [[ና#Tiếng_Koore|ና]], [[ኔ#Tiếng_Koore|ኔ]], [[ን#Tiếng_Koore|ን]], [[ኖ#Tiếng_Koore|ኖ]], [[አ#Tiếng_Koore|አ]], [[ኡ#Tiếng_Koore|ኡ]], [[ኢ#Tiếng_Koore|ኢ]], [[ኣ#Tiếng_Koore|ኣ]], [[ኤ#Tiếng_Koore|ኤ]], [[እ#Tiếng_Koore|እ]], [[ኦ#Tiếng_Koore|ኦ]], [[ከ#Tiếng_Koore|ከ]], [[ኩ#Tiếng_Koore|ኩ]], [[ኪ#Tiếng_Koore|ኪ]], [[ካ#Tiếng_Koore|ካ]], [[ኬ#Tiếng_Koore|ኬ]], [[ክ#Tiếng_Koore|ክ]], [[ኮ#Tiếng_Koore|ኮ]], [[ወ#Tiếng_Koore|ወ]], [[ዉ#Tiếng_Koore|ዉ]], [[ዊ#Tiếng_Koore|ዊ]], [[ዋ#Tiếng_Koore|ዋ]], [[ዌ#Tiếng_Koore|ዌ]], [[ው#Tiếng_Koore|ው]], [[ዎ#Tiếng_Koore|ዎ]], [[ዘ#Tiếng_Koore|ዘ]], [[ዙ#Tiếng_Koore|ዙ]], [[ዚ#Tiếng_Koore|ዚ]], [[ዛ#Tiếng_Koore|ዛ]], [[ዜ#Tiếng_Koore|ዜ]], [[ዝ#Tiếng_Koore|ዝ]], [[ዞ#Tiếng_Koore|ዞ]], [[ዠ#Tiếng_Koore|ዠ]], [[ዡ#Tiếng_Koore|ዡ]], [[ዢ#Tiếng_Koore|ዢ]], [[ዣ#Tiếng_Koore|ዣ]], [[ዤ#Tiếng_Koore|ዤ]], [[ዥ#Tiếng_Koore|ዥ]], [[ዦ#Tiếng_Koore|ዦ]], [[የ#Tiếng_Koore|የ]], [[ዩ#Tiếng_Koore|ዩ]], [[ዪ#Tiếng_Koore|ዪ]], [[ያ#Tiếng_Koore|ያ]], [[ዬ#Tiếng_Koore|ዬ]], [[ይ#Tiếng_Koore|ይ]], [[ዮ#Tiếng_Koore|ዮ]], [[ደ#Tiếng_Koore|ደ]], [[ዱ#Tiếng_Koore|ዱ]], [[ዲ#Tiếng_Koore|ዲ]], [[ዳ#Tiếng_Koore|ዳ]], [[ዴ#Tiếng_Koore|ዴ]], [[ድ#Tiếng_Koore|ድ]], [[ዶ#Tiếng_Koore|ዶ]], [[ጀ#Tiếng_Koore|ጀ]], [[ጁ#Tiếng_Koore|ጁ]], [[ጂ#Tiếng_Koore|ጂ]], [[ጃ#Tiếng_Koore|ጃ]], [[ጄ#Tiếng_Koore|ጄ]], [[ጅ#Tiếng_Koore|ጅ]], [[ጆ#Tiếng_Koore|ጆ]], [[ዸ#Tiếng_Koore|ዸ]], [[ዹ#Tiếng_Koore|ዹ]], [[ዺ#Tiếng_Koore|ዺ]], [[ዻ#Tiếng_Koore|ዻ]], [[ዼ#Tiếng_Koore|ዼ]], [[ዽ#Tiếng_Koore|ዽ]], [[ዾ#Tiếng_Koore|ዾ]], [[ገ#Tiếng_Koore|ገ]], [[ጉ#Tiếng_Koore|ጉ]], [[ጊ#Tiếng_Koore|ጊ]], [[ጋ#Tiếng_Koore|ጋ]], [[ጌ#Tiếng_Koore|ጌ]], [[ግ#Tiếng_Koore|ግ]], [[ጎ#Tiếng_Koore|ጎ]], [[ጨ#Tiếng_Koore|ጨ]], [[ጩ#Tiếng_Koore|ጩ]], [[ጪ#Tiếng_Koore|ጪ]], [[ጫ#Tiếng_Koore|ጫ]], [[ጬ#Tiếng_Koore|ጬ]], [[ጭ#Tiếng_Koore|ጭ]], [[ጮ#Tiếng_Koore|ጮ]], [[ጰ#Tiếng_Koore|ጰ]], [[ጱ#Tiếng_Koore|ጱ]], [[ጲ#Tiếng_Koore|ጲ]], [[ጳ#Tiếng_Koore|ጳ]], [[ጴ#Tiếng_Koore|ጴ]], [[ጵ#Tiếng_Koore|ጵ]], [[ጶ#Tiếng_Koore|ጶ]], [[ጸ#Tiếng_Koore|ጸ]], [[ጹ#Tiếng_Koore|ጹ]], [[ጺ#Tiếng_Koore|ጺ]], [[ጻ#Tiếng_Koore|ጻ]], [[ጼ#Tiếng_Koore|ጼ]], [[ጽ#Tiếng_Koore|ጽ]], [[ጾ#Tiếng_Koore|ጾ]], [[ፈ#Tiếng_Koore|ፈ]], [[ፉ#Tiếng_Koore|ፉ]], [[ፊ#Tiếng_Koore|ፊ]], [[ፋ#Tiếng_Koore|ፋ]], [[ፌ#Tiếng_Koore|ፌ]], [[ፍ#Tiếng_Koore|ፍ]], [[ፎ#Tiếng_Koore|ፎ]], [[ፐ#Tiếng_Koore|ፐ]], [[ፑ#Tiếng_Koore|ፑ]], [[ፒ#Tiếng_Koore|ፒ]], [[ፓ#Tiếng_Koore|ፓ]], [[ፔ#Tiếng_Koore|ፔ]], [[ፕ#Tiếng_Koore|ፕ]], [[ፖ#Tiếng_Koore|ፖ]] ==={{ĐM|ref}}=== *{{Chú thích web|kqy|author=Bible Society of Ethiopia|entryurl=https://live.bible.is/bible/KQYBSE/ACT/1|entry=አንሡታስት ሀንተ 1|year=2001|work=Bible.is}} *{{Chú thích sách|kqy|editor=Girma Seyoum Gelchu|title=[https://www.sil.org/system/files/reapdata/10/48/21/104821441593609927722414943761089651147/English_Koorete_Amharic_School_Dictionary_2022.pdf English - Koorete - Amharic School Dictionary]|year=2022|publisher=SIL Ethiopia, SNNPRS Education}} =={{langname|mpe}}== ==={{ĐM|pron}}=== *{{IPA4|mpe|[ʔa]}} ==={{ĐM|letter}}=== {{head|mpe|Chữ cái|tr=ʾa}} #Chữ cái âm tiết ''ʾa'' trong bộ chữ Geʽez tiếng Majang. #:{{ux|mpe|'''አ'''ቤ|tr='''á'''bέ|[[sung]], [[vả]]|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Andreas Joswig|title=The Majang Language|year=2019|publisher=LOT|url=https://www.lotpublications.nl/Documents/536_fulltext.pdf|page=437}} *{{Chú thích web|mpe|author=Bible Society of Ethiopia|work=Kuumeet Sinɔ Tɔɔnuk Ad Majaŋeeroŋk|entryurl=https://www.bible.com/bible/3180/JHN.1.KSTM|entry=Yowanis 1|year=2025}} =={{langname|mym}}== ==={{ĐM|pron}}=== *{{IPA4|mym|[ʔa]}} ==={{ĐM|letter}}=== {{head|mym|Chữ cái|tr=ʾaa}} #Chữ cái âm tiết ''ʾaa'' trong bộ chữ Geʽez tiếng Me'en. ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Me'en'') [[ሀ#Tiếng_Me'en|ሀ]], [[ሁ#Tiếng_Me'en|ሁ]], [[ሂ#Tiếng_Me'en|ሂ]], [[ሃ#Tiếng_Me'en|ሃ]], [[ሄ#Tiếng_Me'en|ሄ]], [[ህ#Tiếng_Me'en|ህ]], [[ሆ#Tiếng_Me'en|ሆ]], [[ሇ#Tiếng_Me'en|ሇ]], [[ለ#Tiếng_Me'en|ለ]], [[ሉ#Tiếng_Me'en|ሉ]], [[ሊ#Tiếng_Me'en|ሊ]], [[ላ#Tiếng_Me'en|ላ]], [[ሌ#Tiếng_Me'en|ሌ]], [[ል#Tiếng_Me'en|ል]], [[ሎ#Tiếng_Me'en|ሎ]], [[ⶀ#Tiếng_Me'en|ⶀ]], [[መ#Tiếng_Me'en|መ]], [[ሙ#Tiếng_Me'en|ሙ]], [[ሚ#Tiếng_Me'en|ሚ]], [[ማ#Tiếng_Me'en|ማ]], [[ሜ#Tiếng_Me'en|ሜ]], [[ም#Tiếng_Me'en|ም]], [[ሞ#Tiếng_Me'en|ሞ]], [[ⶁ#Tiếng_Me'en|ⶁ]], [[ረ#Tiếng_Me'en|ረ]], [[ሩ#Tiếng_Me'en|ሩ]], [[ሪ#Tiếng_Me'en|ሪ]], [[ራ#Tiếng_Me'en|ራ]], [[ሬ#Tiếng_Me'en|ሬ]], [[ር#Tiếng_Me'en|ር]], [[ሮ#Tiếng_Me'en|ሮ]], [[ⶂ#Tiếng_Me'en|ⶂ]], [[ሰ#Tiếng_Me'en|ሰ]], [[ሱ#Tiếng_Me'en|ሱ]], [[ሲ#Tiếng_Me'en|ሲ]], [[ሳ#Tiếng_Me'en|ሳ]], [[ሴ#Tiếng_Me'en|ሴ]], [[ስ#Tiếng_Me'en|ስ]], [[ሶ#Tiếng_Me'en|ሶ]], [[ⶃ#Tiếng_Me'en|ⶃ]], [[ሸ#Tiếng_Me'en|ሸ]], [[ሹ#Tiếng_Me'en|ሹ]], [[ሺ#Tiếng_Me'en|ሺ]], [[ሻ#Tiếng_Me'en|ሻ]], [[ሼ#Tiếng_Me'en|ሼ]], [[ሽ#Tiếng_Me'en|ሽ]], [[ሾ#Tiếng_Me'en|ሾ]], [[ⶄ#Tiếng_Me'en|ⶄ]], [[ቀ#Tiếng_Me'en|ቀ]], [[ቁ#Tiếng_Me'en|ቁ]], [[ቂ#Tiếng_Me'en|ቂ]], [[ቃ#Tiếng_Me'en|ቃ]], [[ቄ#Tiếng_Me'en|ቄ]], [[ቅ#Tiếng_Me'en|ቅ]], [[ቆ#Tiếng_Me'en|ቆ]], [[ቇ#Tiếng_Me'en|ቇ]], [[በ#Tiếng_Me'en|በ]], [[ቡ#Tiếng_Me'en|ቡ]], [[ቢ#Tiếng_Me'en|ቢ]], [[ባ#Tiếng_Me'en|ባ]], [[ቤ#Tiếng_Me'en|ቤ]], [[ብ#Tiếng_Me'en|ብ]], [[ቦ#Tiếng_Me'en|ቦ]], [[ⶅ#Tiếng_Me'en|ⶅ]], [[ተ#Tiếng_Me'en|ተ]], [[ቱ#Tiếng_Me'en|ቱ]], [[ቲ#Tiếng_Me'en|ቲ]], [[ታ#Tiếng_Me'en|ታ]], [[ቴ#Tiếng_Me'en|ቴ]], [[ት#Tiếng_Me'en|ት]], [[ቶ#Tiếng_Me'en|ቶ]], [[ⶆ#Tiếng_Me'en|ⶆ]], [[ቸ#Tiếng_Me'en|ቸ]], [[ቹ#Tiếng_Me'en|ቹ]], [[ቺ#Tiếng_Me'en|ቺ]], [[ቻ#Tiếng_Me'en|ቻ]], [[ቼ#Tiếng_Me'en|ቼ]], [[ች#Tiếng_Me'en|ች]], [[ቾ#Tiếng_Me'en|ቾ]], [[ⶇ#Tiếng_Me'en|ⶇ]], [[ኀ#Tiếng_Me'en|ኀ]], [[ኁ#Tiếng_Me'en|ኁ]], [[ኂ#Tiếng_Me'en|ኂ]], [[ኃ#Tiếng_Me'en|ኃ]], [[ኄ#Tiếng_Me'en|ኄ]], [[ኅ#Tiếng_Me'en|ኅ]], [[ኆ#Tiếng_Me'en|ኆ]], [[ኇ#Tiếng_Me'en|ኇ]], [[ነ#Tiếng_Me'en|ነ]], [[ኑ#Tiếng_Me'en|ኑ]], [[ኒ#Tiếng_Me'en|ኒ]], [[ና#Tiếng_Me'en|ና]], [[ኔ#Tiếng_Me'en|ኔ]], [[ን#Tiếng_Me'en|ን]], [[ኖ#Tiếng_Me'en|ኖ]], [[ⶈ#Tiếng_Me'en|ⶈ]], [[ኘ#Tiếng_Me'en|ኘ]], [[ኙ#Tiếng_Me'en|ኙ]], [[ኚ#Tiếng_Me'en|ኚ]], [[ኛ#Tiếng_Me'en|ኛ]], [[ኜ#Tiếng_Me'en|ኜ]], [[ኝ#Tiếng_Me'en|ኝ]], [[ኞ#Tiếng_Me'en|ኞ]], [[ⶉ#Tiếng_Me'en|ⶉ]], [[አ#Tiếng_Me'en|አ]], [[ኡ#Tiếng_Me'en|ኡ]], [[ኢ#Tiếng_Me'en|ኢ]], [[ኣ#Tiếng_Me'en|ኣ]], [[ኤ#Tiếng_Me'en|ኤ]], [[እ#Tiếng_Me'en|እ]], [[ኦ#Tiếng_Me'en|ኦ]], [[ⶊ#Tiếng_Me'en|ⶊ]], [[ከ#Tiếng_Me'en|ከ]], [[ኩ#Tiếng_Me'en|ኩ]], [[ኪ#Tiếng_Me'en|ኪ]], [[ካ#Tiếng_Me'en|ካ]], [[ኬ#Tiếng_Me'en|ኬ]], [[ክ#Tiếng_Me'en|ክ]], [[ኮ#Tiếng_Me'en|ኮ]], [[ኯ#Tiếng_Me'en|ኯ]], [[ወ#Tiếng_Me'en|ወ]], [[ዉ#Tiếng_Me'en|ዉ]], [[ዊ#Tiếng_Me'en|ዊ]], [[ዋ#Tiếng_Me'en|ዋ]], [[ዌ#Tiếng_Me'en|ዌ]], [[ው#Tiếng_Me'en|ው]], [[ዎ#Tiếng_Me'en|ዎ]], [[ዏ#Tiếng_Me'en|ዏ]], [[ዘ#Tiếng_Me'en|ዘ]], [[ዙ#Tiếng_Me'en|ዙ]], [[ዚ#Tiếng_Me'en|ዚ]], [[ዛ#Tiếng_Me'en|ዛ]], [[ዜ#Tiếng_Me'en|ዜ]], [[ዝ#Tiếng_Me'en|ዝ]], [[ዞ#Tiếng_Me'en|ዞ]], [[ⶋ#Tiếng_Me'en|ⶋ]], [[የ#Tiếng_Me'en|የ]], [[ዩ#Tiếng_Me'en|ዩ]], [[ዪ#Tiếng_Me'en|ዪ]], [[ያ#Tiếng_Me'en|ያ]], [[ዬ#Tiếng_Me'en|ዬ]], [[ይ#Tiếng_Me'en|ይ]], [[ዮ#Tiếng_Me'en|ዮ]], [[ዯ#Tiếng_Me'en|ዯ]], [[ደ#Tiếng_Me'en|ደ]], [[ዱ#Tiếng_Me'en|ዱ]], [[ዲ#Tiếng_Me'en|ዲ]], [[ዳ#Tiếng_Me'en|ዳ]], [[ዴ#Tiếng_Me'en|ዴ]], [[ድ#Tiếng_Me'en|ድ]], [[ዶ#Tiếng_Me'en|ዶ]], [[ⶌ#Tiếng_Me'en|ⶌ]], [[ዸ#Tiếng_Me'en|ዸ]], [[ዹ#Tiếng_Me'en|ዹ]], [[ዺ#Tiếng_Me'en|ዺ]], [[ዻ#Tiếng_Me'en|ዻ]], [[ዼ#Tiếng_Me'en|ዼ]], [[ዽ#Tiếng_Me'en|ዽ]], [[ዾ#Tiếng_Me'en|ዾ]], [[ⶍ#Tiếng_Me'en|ⶍ]], [[ጀ#Tiếng_Me'en|ጀ]], [[ጁ#Tiếng_Me'en|ጁ]], [[ጂ#Tiếng_Me'en|ጂ]], [[ጃ#Tiếng_Me'en|ጃ]], [[ጄ#Tiếng_Me'en|ጄ]], [[ጅ#Tiếng_Me'en|ጅ]], [[ጆ#Tiếng_Me'en|ጆ]], [[ⶎ#Tiếng_Me'en|ⶎ]], [[ገ#Tiếng_Me'en|ገ]], [[ጉ#Tiếng_Me'en|ጉ]], [[ጊ#Tiếng_Me'en|ጊ]], [[ጋ#Tiếng_Me'en|ጋ]], [[ጌ#Tiếng_Me'en|ጌ]], [[ግ#Tiếng_Me'en|ግ]], [[ጎ#Tiếng_Me'en|ጎ]], [[ጏ#Tiếng_Me'en|ጏ]], [[ጠ#Tiếng_Me'en|ጠ]], [[ጡ#Tiếng_Me'en|ጡ]], [[ጢ#Tiếng_Me'en|ጢ]], [[ጣ#Tiếng_Me'en|ጣ]], [[ጤ#Tiếng_Me'en|ጤ]], [[ጥ#Tiếng_Me'en|ጥ]], [[ጦ#Tiếng_Me'en|ጦ]], [[ⶏ#Tiếng_Me'en|ⶏ]], [[ጨ#Tiếng_Me'en|ጨ]], [[ጩ#Tiếng_Me'en|ጩ]], [[ጪ#Tiếng_Me'en|ጪ]], [[ጫ#Tiếng_Me'en|ጫ]], [[ጬ#Tiếng_Me'en|ጬ]], [[ጭ#Tiếng_Me'en|ጭ]], [[ጮ#Tiếng_Me'en|ጮ]], [[ⶐ#Tiếng_Me'en|ⶐ]], [[ጰ#Tiếng_Me'en|ጰ]], [[ጱ#Tiếng_Me'en|ጱ]], [[ጲ#Tiếng_Me'en|ጲ]], [[ጳ#Tiếng_Me'en|ጳ]], [[ጴ#Tiếng_Me'en|ጴ]], [[ጵ#Tiếng_Me'en|ጵ]], [[ጶ#Tiếng_Me'en|ጶ]], [[ⶑ#Tiếng_Me'en|ⶑ]], [[ፐ#Tiếng_Me'en|ፐ]], [[ፑ#Tiếng_Me'en|ፑ]], [[ፒ#Tiếng_Me'en|ፒ]], [[ፓ#Tiếng_Me'en|ፓ]], [[ፔ#Tiếng_Me'en|ፔ]], [[ፕ#Tiếng_Me'en|ፕ]], [[ፖ#Tiếng_Me'en|ፖ]], [[ⶒ#Tiếng_Me'en|ⶒ]], [[ፀ#Tiếng_Me'en|ፀ]], [[ፁ#Tiếng_Me'en|ፁ]], [[ፂ#Tiếng_Me'en|ፂ]], [[ፃ#Tiếng_Me'en|ፃ]], [[ፄ#Tiếng_Me'en|ፄ]], [[ፅ#Tiếng_Me'en|ፅ]], [[ፆ#Tiếng_Me'en|ፆ]], [[ፇ#Tiếng_Me'en|ፇ]], [[ዕ#Tiếng_Me'en|ዕ]] ==={{ĐM|n}}=== {{head|mym|Danh từ|tr=ʾaa}} #[[dụng cụ|Dụng cụ]], [[vật liệu]], [[đối tượng]]. ==={{ĐM|ref}}=== *{{Chú thích sách|en|editor=Tuluwa Amaro & Fajiyo Mekonen|title=[https://www.sil.org/system/files/reapdata/14/95/60/149560491689026119775712598373206832386/English_Me_enen_Amharic_School_Dictionary.pdf Dikshinaride Mɛ'ɛnɛnun de kesude Icɔcɔnun]|year=2015|publisher=SIL Bench Maji Multilingual Education Project|location=Ethiopia|page=215}} =={{langname|mfx}}== ==={{ĐM|pron}}=== *{{IPA4|mfx|[ʔa]}} ==={{ĐM|letter}}=== {{head|mfx|Chữ cái|tr=a/7a}} #Chữ cái âm tiết ''a/7a'' trong bộ chữ Geʽez tiếng Melo. #:{{quote|mfx|የ ዎንግላይ '''አ'''ሾር ዳዉተ ሼሻፕ የልንቴዝ፥ ጾስ ና'''አ'''፥ ኑ ጎዳ የሱስ ክርስቶሳ ባጋ ኦድዛ።|tr=Ye Wonggilay '''a'''shor Dawute sheeshapp yelintteez, Xooss Na'''7a''', nu Goda Yesuus Kiristtoosa bagga odiza.|([[s:Rô-ma/1#1:3|Rô-ma 1:3]])}} ==={{ĐM|ref}}=== *{{Chú thích web|mfx|author=The Word for the World International|work=ኦሮ ጫቆ|year=2025|entry=ኦሮመ 1|entryurl=https://www.bible.com/bible/4134/ROM.1.MELONTETH}} *{{Chú thích web|mfx|author=The Word for the World International|work=Oroth Caaqo|year=2025|entry=Oroome 1|entryurl=https://www.bible.com/bible/4133/ROM.1.MELONTL}} =={{langname|mvz}}== ==={{ĐM|pron}}=== *{{IPA4|mvz|[ʔə]}} ==={{ĐM|letter}}=== {{head|mvz|Chữ cái|tr=ʾä}} #Chữ cái âm tiết ''ʾä'' trong bộ chữ Geʽez tiếng Mesqan. =={{langname|muz}}== ==={{ĐM|pron}}=== *{{IPA4|muz|/ʔa/}} ==={{ĐM|letter}}=== {{head|muz|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Mursi. #:{{ux|muz|'''አ'''ጋ|tr='''a'''ga|[[nấu]]|inline=1}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Mursi'') [[ሀ#Tiếng_Mursi|ሀ]], [[ሁ#Tiếng_Mursi|ሁ]], [[ሂ#Tiếng_Mursi|ሂ]], [[ሃ#Tiếng_Mursi|ሃ]], [[ሄ#Tiếng_Mursi|ሄ]], [[ህ#Tiếng_Mursi|ህ]], [[ሆ#Tiếng_Mursi|ሆ]], [[ሇ#Tiếng_Mursi|ሇ]], [[ለ#Tiếng_Mursi|ለ]], [[ሉ#Tiếng_Mursi|ሉ]], [[ሊ#Tiếng_Mursi|ሊ]], [[ላ#Tiếng_Mursi|ላ]], [[ሌ#Tiếng_Mursi|ሌ]], [[ል#Tiếng_Mursi|ል]], [[ሎ#Tiếng_Mursi|ሎ]], [[ⶀ#Tiếng_Mursi|ⶀ]], [[መ#Tiếng_Mursi|መ]], [[ሙ#Tiếng_Mursi|ሙ]], [[ሚ#Tiếng_Mursi|ሚ]], [[ማ#Tiếng_Mursi|ማ]], [[ሜ#Tiếng_Mursi|ሜ]], [[ም#Tiếng_Mursi|ም]], [[ሞ#Tiếng_Mursi|ሞ]], [[ⶁ#Tiếng_Mursi|ⶁ]], [[ረ#Tiếng_Mursi|ረ]], [[ሩ#Tiếng_Mursi|ሩ]], [[ሪ#Tiếng_Mursi|ሪ]], [[ራ#Tiếng_Mursi|ራ]], [[ሬ#Tiếng_Mursi|ሬ]], [[ር#Tiếng_Mursi|ር]], [[ሮ#Tiếng_Mursi|ሮ]], [[ⶂ#Tiếng_Mursi|ⶂ]], [[ሰ#Tiếng_Mursi|ሰ]], [[ሱ#Tiếng_Mursi|ሱ]], [[ሲ#Tiếng_Mursi|ሲ]], [[ሳ#Tiếng_Mursi|ሳ]], [[ሴ#Tiếng_Mursi|ሴ]], [[ስ#Tiếng_Mursi|ስ]], [[ሶ#Tiếng_Mursi|ሶ]], [[ⶃ#Tiếng_Mursi|ⶃ]], [[ሸ#Tiếng_Mursi|ሸ]], [[ሹ#Tiếng_Mursi|ሹ]], [[ሺ#Tiếng_Mursi|ሺ]], [[ሻ#Tiếng_Mursi|ሻ]], [[ሼ#Tiếng_Mursi|ሼ]], [[ሽ#Tiếng_Mursi|ሽ]], [[ሾ#Tiếng_Mursi|ሾ]], [[ⶄ#Tiếng_Mursi|ⶄ]], [[ቀ#Tiếng_Mursi|ቀ]], [[ቁ#Tiếng_Mursi|ቁ]], [[ቂ#Tiếng_Mursi|ቂ]], [[ቃ#Tiếng_Mursi|ቃ]], [[ቄ#Tiếng_Mursi|ቄ]], [[ቅ#Tiếng_Mursi|ቅ]], [[ቆ#Tiếng_Mursi|ቆ]], [[ቇ#Tiếng_Mursi|ቇ]], [[በ#Tiếng_Mursi|በ]], [[ቡ#Tiếng_Mursi|ቡ]], [[ቢ#Tiếng_Mursi|ቢ]], [[ባ#Tiếng_Mursi|ባ]], [[ቤ#Tiếng_Mursi|ቤ]], [[ብ#Tiếng_Mursi|ብ]], [[ቦ#Tiếng_Mursi|ቦ]], [[ⶅ#Tiếng_Mursi|ⶅ]], [[ተ#Tiếng_Mursi|ተ]], [[ቱ#Tiếng_Mursi|ቱ]], [[ቲ#Tiếng_Mursi|ቲ]], [[ታ#Tiếng_Mursi|ታ]], [[ቴ#Tiếng_Mursi|ቴ]], [[ት#Tiếng_Mursi|ት]], [[ቶ#Tiếng_Mursi|ቶ]], [[ⶆ#Tiếng_Mursi|ⶆ]], [[ቸ#Tiếng_Mursi|ቸ]], [[ቹ#Tiếng_Mursi|ቹ]], [[ቺ#Tiếng_Mursi|ቺ]], [[ቻ#Tiếng_Mursi|ቻ]], [[ቼ#Tiếng_Mursi|ቼ]], [[ች#Tiếng_Mursi|ች]], [[ቾ#Tiếng_Mursi|ቾ]], [[ⶇ#Tiếng_Mursi|ⶇ]], [[ኀ#Tiếng_Mursi|ኀ]], [[ኁ#Tiếng_Mursi|ኁ]], [[ኂ#Tiếng_Mursi|ኂ]], [[ኃ#Tiếng_Mursi|ኃ]], [[ኄ#Tiếng_Mursi|ኄ]], [[ኅ#Tiếng_Mursi|ኅ]], [[ኆ#Tiếng_Mursi|ኆ]], [[ኇ#Tiếng_Mursi|ኇ]], [[ነ#Tiếng_Mursi|ነ]], [[ኑ#Tiếng_Mursi|ኑ]], [[ኒ#Tiếng_Mursi|ኒ]], [[ና#Tiếng_Mursi|ና]], [[ኔ#Tiếng_Mursi|ኔ]], [[ን#Tiếng_Mursi|ን]], [[ኖ#Tiếng_Mursi|ኖ]], [[ⶈ#Tiếng_Mursi|ⶈ]], [[ኘ#Tiếng_Mursi|ኘ]], [[ኙ#Tiếng_Mursi|ኙ]], [[ኚ#Tiếng_Mursi|ኚ]], [[ኛ#Tiếng_Mursi|ኛ]], [[ኜ#Tiếng_Mursi|ኜ]], [[ኝ#Tiếng_Mursi|ኝ]], [[ኞ#Tiếng_Mursi|ኞ]], [[ⶉ#Tiếng_Mursi|ⶉ]], [[አ#Tiếng_Mursi|አ]], [[ኡ#Tiếng_Mursi|ኡ]], [[ኢ#Tiếng_Mursi|ኢ]], [[ኣ#Tiếng_Mursi|ኣ]], [[ኤ#Tiếng_Mursi|ኤ]], [[እ#Tiếng_Mursi|እ]], [[ኦ#Tiếng_Mursi|ኦ]], [[ⶊ#Tiếng_Mursi|ⶊ]], [[ከ#Tiếng_Mursi|ከ]], [[ኩ#Tiếng_Mursi|ኩ]], [[ኪ#Tiếng_Mursi|ኪ]], [[ካ#Tiếng_Mursi|ካ]], [[ኬ#Tiếng_Mursi|ኬ]], [[ክ#Tiếng_Mursi|ክ]], [[ኮ#Tiếng_Mursi|ኮ]], [[ኯ#Tiếng_Mursi|ኯ]], [[ወ#Tiếng_Mursi|ወ]], [[ዉ#Tiếng_Mursi|ዉ]], [[ዊ#Tiếng_Mursi|ዊ]], [[ዋ#Tiếng_Mursi|ዋ]], [[ዌ#Tiếng_Mursi|ዌ]], [[ው#Tiếng_Mursi|ው]], [[ዎ#Tiếng_Mursi|ዎ]], [[ዏ#Tiếng_Mursi|ዏ]], [[ዘ#Tiếng_Mursi|ዘ]], [[ዙ#Tiếng_Mursi|ዙ]], [[ዚ#Tiếng_Mursi|ዚ]], [[ዛ#Tiếng_Mursi|ዛ]], [[ዜ#Tiếng_Mursi|ዜ]], [[ዝ#Tiếng_Mursi|ዝ]], [[ዞ#Tiếng_Mursi|ዞ]], [[ⶋ#Tiếng_Mursi|ⶋ]], [[የ#Tiếng_Mursi|የ]], [[ዩ#Tiếng_Mursi|ዩ]], [[ዪ#Tiếng_Mursi|ዪ]], [[ያ#Tiếng_Mursi|ያ]], [[ዬ#Tiếng_Mursi|ዬ]], [[ይ#Tiếng_Mursi|ይ]], [[ዮ#Tiếng_Mursi|ዮ]], [[ዯ#Tiếng_Mursi|ዯ]], [[ደ#Tiếng_Mursi|ደ]], [[ዱ#Tiếng_Mursi|ዱ]], [[ዲ#Tiếng_Mursi|ዲ]], [[ዳ#Tiếng_Mursi|ዳ]], [[ዴ#Tiếng_Mursi|ዴ]], [[ድ#Tiếng_Mursi|ድ]], [[ዶ#Tiếng_Mursi|ዶ]], [[ⶌ#Tiếng_Mursi|ⶌ]], [[ዸ#Tiếng_Mursi|ዸ]], [[ዹ#Tiếng_Mursi|ዹ]], [[ዺ#Tiếng_Mursi|ዺ]], [[ዻ#Tiếng_Mursi|ዻ]], [[ዼ#Tiếng_Mursi|ዼ]], [[ዽ#Tiếng_Mursi|ዽ]], [[ዾ#Tiếng_Mursi|ዾ]], [[ⶍ#Tiếng_Mursi|ⶍ]], [[ጀ#Tiếng_Mursi|ጀ]], [[ጁ#Tiếng_Mursi|ጁ]], [[ጂ#Tiếng_Mursi|ጂ]], [[ጃ#Tiếng_Mursi|ጃ]], [[ጄ#Tiếng_Mursi|ጄ]], [[ጅ#Tiếng_Mursi|ጅ]], [[ጆ#Tiếng_Mursi|ጆ]], [[ⶎ#Tiếng_Mursi|ⶎ]], [[ገ#Tiếng_Mursi|ገ]], [[ጉ#Tiếng_Mursi|ጉ]], [[ጊ#Tiếng_Mursi|ጊ]], [[ጋ#Tiếng_Mursi|ጋ]], [[ጌ#Tiếng_Mursi|ጌ]], [[ግ#Tiếng_Mursi|ግ]], [[ጎ#Tiếng_Mursi|ጎ]], [[ጏ#Tiếng_Mursi|ጏ]], [[ጠ#Tiếng_Mursi|ጠ]], [[ጡ#Tiếng_Mursi|ጡ]], [[ጢ#Tiếng_Mursi|ጢ]], [[ጣ#Tiếng_Mursi|ጣ]], [[ጤ#Tiếng_Mursi|ጤ]], [[ጥ#Tiếng_Mursi|ጥ]], [[ጦ#Tiếng_Mursi|ጦ]], [[ⶏ#Tiếng_Mursi|ⶏ]], [[ጨ#Tiếng_Mursi|ጨ]], [[ጩ#Tiếng_Mursi|ጩ]], [[ጪ#Tiếng_Mursi|ጪ]], [[ጫ#Tiếng_Mursi|ጫ]], [[ጬ#Tiếng_Mursi|ጬ]], [[ጭ#Tiếng_Mursi|ጭ]], [[ጮ#Tiếng_Mursi|ጮ]], [[ⶐ#Tiếng_Mursi|ⶐ]], [[ጰ#Tiếng_Mursi|ጰ]], [[ጱ#Tiếng_Mursi|ጱ]], [[ጲ#Tiếng_Mursi|ጲ]], [[ጳ#Tiếng_Mursi|ጳ]], [[ጴ#Tiếng_Mursi|ጴ]], [[ጵ#Tiếng_Mursi|ጵ]], [[ጶ#Tiếng_Mursi|ጶ]], [[ⶑ#Tiếng_Mursi|ⶑ]], [[ፐ#Tiếng_Mursi|ፐ]], [[ፑ#Tiếng_Mursi|ፑ]], [[ፒ#Tiếng_Mursi|ፒ]], [[ፓ#Tiếng_Mursi|ፓ]], [[ፔ#Tiếng_Mursi|ፔ]], [[ፕ#Tiếng_Mursi|ፕ]], [[ፖ#Tiếng_Mursi|ፖ]], [[ⶒ#Tiếng_Mursi|ⶒ]], [[ፀ#Tiếng_Mursi|ፀ]], [[ፁ#Tiếng_Mursi|ፁ]], [[ፂ#Tiếng_Mursi|ፂ]], [[ፃ#Tiếng_Mursi|ፃ]], [[ፄ#Tiếng_Mursi|ፄ]], [[ፅ#Tiếng_Mursi|ፅ]], [[ፆ#Tiếng_Mursi|ፆ]], [[ፇ#Tiếng_Mursi|ፇ]], [[ዕ#Tiếng_Mursi|ዕ]] ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=David Turton, Moges Yigezu & Olisarali Olibui|title=[https://www.mursi.org/pdf/dictionary.pdf Mursi-English-Amharic Dictionary]|year=2008|publisher=Ermias Advertising|location=Addis Ababa, Ethiopia|isbn=978-99944-831-0-5|page=22}} =={{langname|om}}== ==={{ĐM|pron}}=== *{{IPA4|om|[ʔɐ]|[ɐ]}} ==={{ĐM|letter}}=== {{head|om|Chữ cái|tr=(')a}} #Chữ cái âm tiết ''(')a'' trong bộ chữ Geʽez tiếng Oromo. #:{{ux|om|'''አ'''ሞስ|tr='''a'''mosi|[[s:A-mốt|A-mốt]]|inline=1}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Oromo'') [[ሀ#Tiếng_Oromo|ሀ]], [[ሁ#Tiếng_Oromo|ሁ]], [[ሁ፞#Tiếng_Oromo|ሁ፞]], [[ሂ#Tiếng_Oromo|ሂ]], [[ሂ፞#Tiếng_Oromo|ሂ፞]], [[ሃ#Tiếng_Oromo|ሃ]], [[ሄ#Tiếng_Oromo|ሄ]], [[ሄ፞#Tiếng_Oromo|ሄ፞]], [[ህ#Tiếng_Oromo|ህ]], [[ሆ#Tiếng_Oromo|ሆ]], [[ሆ፞#Tiếng_Oromo|ሆ፞]], [[ለ#Tiếng_Oromo|ለ]], [[ሉ#Tiếng_Oromo|ሉ]], [[ሉ፞#Tiếng_Oromo|ሉ፞]], [[ሊ#Tiếng_Oromo|ሊ]], [[ሊ፞#Tiếng_Oromo|ሊ፞]], [[ላ#Tiếng_Oromo|ላ]], [[ሌ#Tiếng_Oromo|ሌ]], [[ሌ፞#Tiếng_Oromo|ሌ፞]], [[ል#Tiếng_Oromo|ል]], [[ሎ#Tiếng_Oromo|ሎ]], [[ሎ፞#Tiếng_Oromo|ሎ፞]], [[መ#Tiếng_Oromo|መ]], [[ሙ#Tiếng_Oromo|ሙ]], [[ሙ፞#Tiếng_Oromo|ሙ፞]], [[ሚ#Tiếng_Oromo|ሚ]], [[ሚ፞#Tiếng_Oromo|ሚ፞]], [[ማ#Tiếng_Oromo|ማ]], [[ሜ#Tiếng_Oromo|ሜ]], [[ሜ፞#Tiếng_Oromo|ሜ፞]], [[ም#Tiếng_Oromo|ም]], [[ሞ#Tiếng_Oromo|ሞ]], [[ሞ፞#Tiếng_Oromo|ሞ፞]], [[ረ#Tiếng_Oromo|ረ]], [[ሩ#Tiếng_Oromo|ሩ]], [[ሩ፞#Tiếng_Oromo|ሩ፞]], [[ሪ#Tiếng_Oromo|ሪ]], [[ሪ፞#Tiếng_Oromo|ሪ፞]], [[ራ#Tiếng_Oromo|ራ]], [[ሬ#Tiếng_Oromo|ሬ]], [[ሬ፞#Tiếng_Oromo|ሬ፞]], [[ር#Tiếng_Oromo|ር]], [[ሮ#Tiếng_Oromo|ሮ]], [[ሮ፞#Tiếng_Oromo|ሮ፞]], [[ሰ#Tiếng_Oromo|ሰ]], [[ሱ#Tiếng_Oromo|ሱ]], [[ሱ፞#Tiếng_Oromo|ሱ፞]], [[ሲ#Tiếng_Oromo|ሲ]], [[ሲ፞#Tiếng_Oromo|ሲ፞]], [[ሳ#Tiếng_Oromo|ሳ]], [[ሴ#Tiếng_Oromo|ሴ]], [[ሴ፞#Tiếng_Oromo|ሴ፞]], [[ስ#Tiếng_Oromo|ስ]], [[ሶ#Tiếng_Oromo|ሶ]], [[ሶ፞#Tiếng_Oromo|ሶ፞]], [[ሸ#Tiếng_Oromo|ሸ]], [[ሹ#Tiếng_Oromo|ሹ]], [[ሹ፞#Tiếng_Oromo|ሹ፞]], [[ሺ#Tiếng_Oromo|ሺ]], [[ሺ፞#Tiếng_Oromo|ሺ፞]], [[ሻ#Tiếng_Oromo|ሻ]], [[ሼ#Tiếng_Oromo|ሼ]], [[ሼ፞#Tiếng_Oromo|ሼ፞]], [[ሽ#Tiếng_Oromo|ሽ]], [[ሾ#Tiếng_Oromo|ሾ]], [[ሾ፞#Tiếng_Oromo|ሾ፞]], [[ቀ#Tiếng_Oromo|ቀ]], [[ቁ#Tiếng_Oromo|ቁ]], [[ቁ፞#Tiếng_Oromo|ቁ፞]], [[ቂ#Tiếng_Oromo|ቂ]], [[ቂ፞#Tiếng_Oromo|ቂ፞]], [[ቃ#Tiếng_Oromo|ቃ]], [[ቄ#Tiếng_Oromo|ቄ]], [[ቄ፞#Tiếng_Oromo|ቄ፞]], [[ቅ#Tiếng_Oromo|ቅ]], [[ቆ#Tiếng_Oromo|ቆ]], [[ቆ፞#Tiếng_Oromo|ቆ፞]], [[በ#Tiếng_Oromo|በ]], [[ቡ#Tiếng_Oromo|ቡ]], [[ቡ፞#Tiếng_Oromo|ቡ፞]], [[ቢ#Tiếng_Oromo|ቢ]], [[ቢ፞#Tiếng_Oromo|ቢ፞]], [[ባ#Tiếng_Oromo|ባ]], [[ቤ#Tiếng_Oromo|ቤ]], [[ቤ፞#Tiếng_Oromo|ቤ፞]], [[ብ#Tiếng_Oromo|ብ]], [[ቦ#Tiếng_Oromo|ቦ]], [[ቦ፞#Tiếng_Oromo|ቦ፞]], [[ቨ#Tiếng_Oromo|ቨ]], [[ቩ#Tiếng_Oromo|ቩ]], [[ቩ፞#Tiếng_Oromo|ቩ፞]], [[ቪ#Tiếng_Oromo|ቪ]], [[ቪ፞#Tiếng_Oromo|ቪ፞]], [[ቫ#Tiếng_Oromo|ቫ]], [[ቬ#Tiếng_Oromo|ቬ]], [[ቬ፞#Tiếng_Oromo|ቬ፞]], [[ቭ#Tiếng_Oromo|ቭ]], [[ቮ#Tiếng_Oromo|ቮ]], [[ቮ፞#Tiếng_Oromo|ቮ፞]], [[ተ#Tiếng_Oromo|ተ]], [[ቱ#Tiếng_Oromo|ቱ]], [[ቱ፞#Tiếng_Oromo|ቱ፞]], [[ቲ#Tiếng_Oromo|ቲ]], [[ቲ፞#Tiếng_Oromo|ቲ፞]], [[ታ#Tiếng_Oromo|ታ]], [[ቴ#Tiếng_Oromo|ቴ]], [[ቴ፞#Tiếng_Oromo|ቴ፞]], [[ት#Tiếng_Oromo|ት]], [[ቶ#Tiếng_Oromo|ቶ]], [[ቶ፞#Tiếng_Oromo|ቶ፞]], [[ቸ#Tiếng_Oromo|ቸ]], [[ቹ#Tiếng_Oromo|ቹ]], [[ቹ፞#Tiếng_Oromo|ቹ፞]], [[ቺ#Tiếng_Oromo|ቺ]], [[ቺ፞#Tiếng_Oromo|ቺ፞]], [[ቻ#Tiếng_Oromo|ቻ]], [[ቼ#Tiếng_Oromo|ቼ]], [[ቼ፞#Tiếng_Oromo|ቼ፞]], [[ች#Tiếng_Oromo|ች]], [[ቾ#Tiếng_Oromo|ቾ]], [[ቾ፞#Tiếng_Oromo|ቾ፞]], [[ነ#Tiếng_Oromo|ነ]], [[ኑ#Tiếng_Oromo|ኑ]], [[ኑ፞#Tiếng_Oromo|ኑ፞]], [[ኒ#Tiếng_Oromo|ኒ]], [[ኒ፞#Tiếng_Oromo|ኒ፞]], [[ና#Tiếng_Oromo|ና]], [[ኔ#Tiếng_Oromo|ኔ]], [[ኔ፞#Tiếng_Oromo|ኔ፞]], [[ን#Tiếng_Oromo|ን]], [[ኖ#Tiếng_Oromo|ኖ]], [[ኖ፞#Tiếng_Oromo|ኖ፞]], [[ኘ#Tiếng_Oromo|ኘ]], [[ኙ#Tiếng_Oromo|ኙ]], [[ኙ፞#Tiếng_Oromo|ኙ፞]], [[ኚ#Tiếng_Oromo|ኚ]], [[ኚ፞#Tiếng_Oromo|ኚ፞]], [[ኛ#Tiếng_Oromo|ኛ]], [[ኜ#Tiếng_Oromo|ኜ]], [[ኜ፞#Tiếng_Oromo|ኜ፞]], [[ኝ#Tiếng_Oromo|ኝ]], [[ኞ#Tiếng_Oromo|ኞ]], [[ኞ፞#Tiếng_Oromo|ኞ፞]], [[አ#Tiếng_Oromo|አ]], [[ኡ#Tiếng_Oromo|ኡ]], [[ኡ፞#Tiếng_Oromo|ኡ፞]], [[ኢ#Tiếng_Oromo|ኢ]], [[ኢ፞#Tiếng_Oromo|ኢ፞]], [[ኣ#Tiếng_Oromo|ኣ]], [[ኤ#Tiếng_Oromo|ኤ]], [[ኤ፞#Tiếng_Oromo|ኤ፞]], [[እ#Tiếng_Oromo|እ]], [[ኦ#Tiếng_Oromo|ኦ]], [[ኦ፞#Tiếng_Oromo|ኦ፞]], [[ከ#Tiếng_Oromo|ከ]], [[ኩ#Tiếng_Oromo|ኩ]], [[ኩ፞#Tiếng_Oromo|ኩ፞]], [[ኪ#Tiếng_Oromo|ኪ]], [[ኪ፞#Tiếng_Oromo|ኪ፞]], [[ካ#Tiếng_Oromo|ካ]], [[ኬ#Tiếng_Oromo|ኬ]], [[ኬ፞#Tiếng_Oromo|ኬ፞]], [[ክ#Tiếng_Oromo|ክ]], [[ኮ#Tiếng_Oromo|ኮ]], [[ኮ፞#Tiếng_Oromo|ኮ፞]], [[ወ#Tiếng_Oromo|ወ]], [[ዉ#Tiếng_Oromo|ዉ]], [[ዉ፞#Tiếng_Oromo|ዉ፞]], [[ዊ#Tiếng_Oromo|ዊ]], [[ዊ፞#Tiếng_Oromo|ዊ፞]], [[ዋ#Tiếng_Oromo|ዋ]], [[ዌ#Tiếng_Oromo|ዌ]], [[ዌ፞#Tiếng_Oromo|ዌ፞]], [[ው#Tiếng_Oromo|ው]], [[ዎ#Tiếng_Oromo|ዎ]], [[ዎ፞#Tiếng_Oromo|ዎ፞]], [[ዘ#Tiếng_Oromo|ዘ]], [[ዙ#Tiếng_Oromo|ዙ]], [[ዙ፞#Tiếng_Oromo|ዙ፞]], [[ዚ#Tiếng_Oromo|ዚ]], [[ዚ፞#Tiếng_Oromo|ዚ፞]], [[ዛ#Tiếng_Oromo|ዛ]], [[ዜ#Tiếng_Oromo|ዜ]], [[ዜ፞#Tiếng_Oromo|ዜ፞]], [[ዝ#Tiếng_Oromo|ዝ]], [[ዞ#Tiếng_Oromo|ዞ]], [[ዞ፞#Tiếng_Oromo|ዞ፞]], [[የ#Tiếng_Oromo|የ]], [[ዩ#Tiếng_Oromo|ዩ]], [[ዩ፞#Tiếng_Oromo|ዩ፞]], [[ዪ#Tiếng_Oromo|ዪ]], [[ዪ፞#Tiếng_Oromo|ዪ፞]], [[ያ#Tiếng_Oromo|ያ]], [[ዬ#Tiếng_Oromo|ዬ]], [[ዬ፞#Tiếng_Oromo|ዬ፞]], [[ይ#Tiếng_Oromo|ይ]], [[ዮ#Tiếng_Oromo|ዮ]], [[ዮ፞#Tiếng_Oromo|ዮ፞]], [[ደ#Tiếng_Oromo|ደ]], [[ዱ#Tiếng_Oromo|ዱ]], [[ዱ፞#Tiếng_Oromo|ዱ፞]], [[ዲ#Tiếng_Oromo|ዲ]], [[ዲ፞#Tiếng_Oromo|ዲ፞]], [[ዳ#Tiếng_Oromo|ዳ]], [[ዴ#Tiếng_Oromo|ዴ]], [[ዴ፞#Tiếng_Oromo|ዴ፞]], [[ድ#Tiếng_Oromo|ድ]], [[ዶ#Tiếng_Oromo|ዶ]], [[ዶ፞#Tiếng_Oromo|ዶ፞]], [[ጀ#Tiếng_Oromo|ጀ]], [[ጁ#Tiếng_Oromo|ጁ]], [[ጁ፞#Tiếng_Oromo|ጁ፞]], [[ጂ#Tiếng_Oromo|ጂ]], [[ጂ፞#Tiếng_Oromo|ጂ፞]], [[ጃ#Tiếng_Oromo|ጃ]], [[ጄ#Tiếng_Oromo|ጄ]], [[ጄ፞#Tiếng_Oromo|ጄ፞]], [[ጅ#Tiếng_Oromo|ጅ]], [[ጆ#Tiếng_Oromo|ጆ]], [[ጆ፞#Tiếng_Oromo|ጆ፞]], [[ገ#Tiếng_Oromo|ገ]], [[ጉ#Tiếng_Oromo|ጉ]], [[ጉ፞#Tiếng_Oromo|ጉ፞]], [[ጊ#Tiếng_Oromo|ጊ]], [[ጊ፞#Tiếng_Oromo|ጊ፞]], [[ጋ#Tiếng_Oromo|ጋ]], [[ጌ#Tiếng_Oromo|ጌ]], [[ጌ፞#Tiếng_Oromo|ጌ፞]], [[ግ#Tiếng_Oromo|ግ]], [[ጎ#Tiếng_Oromo|ጎ]], [[ጎ፞#Tiếng_Oromo|ጎ፞]], [[ጠ#Tiếng_Oromo|ጠ]], [[ጡ#Tiếng_Oromo|ጡ]], [[ጡ፞#Tiếng_Oromo|ጡ፞]], [[ጢ#Tiếng_Oromo|ጢ]], [[ጢ፞#Tiếng_Oromo|ጢ፞]], [[ጣ#Tiếng_Oromo|ጣ]], [[ጤ#Tiếng_Oromo|ጤ]], [[ጤ፞#Tiếng_Oromo|ጤ፞]], [[ጥ#Tiếng_Oromo|ጥ]], [[ጦ#Tiếng_Oromo|ጦ]], [[ጦ፞#Tiếng_Oromo|ጦ፞]], [[ጨ#Tiếng_Oromo|ጨ]], [[ጩ#Tiếng_Oromo|ጩ]], [[ጩ፞#Tiếng_Oromo|ጩ፞]], [[ጪ#Tiếng_Oromo|ጪ]], [[ጪ፞#Tiếng_Oromo|ጪ፞]], [[ጫ#Tiếng_Oromo|ጫ]], [[ጬ#Tiếng_Oromo|ጬ]], [[ጬ፞#Tiếng_Oromo|ጬ፞]], [[ጭ#Tiếng_Oromo|ጭ]], [[ጮ#Tiếng_Oromo|ጮ]], [[ጮ፞#Tiếng_Oromo|ጮ፞]], [[ጰ#Tiếng_Oromo|ጰ]], [[ጱ#Tiếng_Oromo|ጱ]], [[ጱ፞#Tiếng_Oromo|ጱ፞]], [[ጲ#Tiếng_Oromo|ጲ]], [[ጲ፞#Tiếng_Oromo|ጲ፞]], [[ጳ#Tiếng_Oromo|ጳ]], [[ጴ#Tiếng_Oromo|ጴ]], [[ጴ፞#Tiếng_Oromo|ጴ፞]], [[ጵ#Tiếng_Oromo|ጵ]], [[ጶ#Tiếng_Oromo|ጶ]], [[ጶ፞#Tiếng_Oromo|ጶ፞]], [[ፀ#Tiếng_Oromo|ፀ]], [[ፁ#Tiếng_Oromo|ፁ]], [[ፁ፞#Tiếng_Oromo|ፁ፞]], [[ፂ#Tiếng_Oromo|ፂ]], [[ፂ፞#Tiếng_Oromo|ፂ፞]], [[ፃ#Tiếng_Oromo|ፃ]], [[ፄ#Tiếng_Oromo|ፄ]], [[ፄ፞#Tiếng_Oromo|ፄ፞]], [[ፅ#Tiếng_Oromo|ፅ]], [[ፆ#Tiếng_Oromo|ፆ]], [[ፆ፞#Tiếng_Oromo|ፆ፞]], [[ፈ#Tiếng_Oromo|ፈ]], [[ፉ#Tiếng_Oromo|ፉ]], [[ፉ፞#Tiếng_Oromo|ፉ፞]], [[ፊ#Tiếng_Oromo|ፊ]], [[ፊ፞#Tiếng_Oromo|ፊ፞]], [[ፋ#Tiếng_Oromo|ፋ]], [[ፌ#Tiếng_Oromo|ፌ]], [[ፌ፞#Tiếng_Oromo|ፌ፞]], [[ፍ#Tiếng_Oromo|ፍ]], [[ፎ#Tiếng_Oromo|ፎ]], [[ፎ፞#Tiếng_Oromo|ፎ፞]], [[ፐ#Tiếng_Oromo|ፐ]], [[ፑ#Tiếng_Oromo|ፑ]], [[ፑ፞#Tiếng_Oromo|ፑ፞]], [[ፒ#Tiếng_Oromo|ፒ]], [[ፒ፞#Tiếng_Oromo|ፒ፞]], [[ፓ#Tiếng_Oromo|ፓ]], [[ፔ#Tiếng_Oromo|ፔ]], [[ፔ፞#Tiếng_Oromo|ፔ፞]], [[ፕ#Tiếng_Oromo|ፕ]], [[ፖ#Tiếng_Oromo|ፖ]], [[ፖ፞#Tiếng_Oromo|ፖ፞]] ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Aquilina Mawadza, Amanuel Alemayehu Ayanso|title=Oromo Dictionary & Phrasebook|location=New York|publisher=Hippocrene Books, Inc.|year=2017|pageurl=https://archive.org/details/english-oromo/page/51|page=51}} *{{Chú thích web|om|author=Biblica, Inc.|work=ክታበ ቁልቁሉ፣ ሂካ አመያ ሃራ|year=2025|entryurl=https://www.bible.com/bible/3725/AMO.1.NOCV|entry=አሞስ 1}} =={{langname|oyd}}== ==={{ĐM|pron}}=== *{{IPA4|oyd|[ʔa]|[a]}} ==={{ĐM|letter}}=== {{head|oyd|Chữ cái|tr=a/7a}} #Chữ cái âm tiết ''a/7a'' trong bộ chữ Geʽez tiếng Oyda. #:{{quote|oyd|ማህ ኤ ፋ ጌሽ '''አ'''ያናራ Ꮉይቆፓ ደንዲ፥ ጾዘ ና'''አ''' ማቅዳኖ ዳማ ዎልቃራ ቤዝዳ።|tr=Mahi E fa geeshi '''a'''yyaanara hyayqoppa denddii, Xoozze na'''7a''' maaqqidanno damma wolqqara beezida.|theo thần-linh của thánh-đức, thì bởi sự sống lại của Ngài từ trong kẻ chết, được tỏ ra là Con Đức Chúa Trời có quyền-phép, tức là Đức Chúa Jêsus-Christ, Chúa chúng ta, ([[s:Rô-ma/1#1:4|Rô-ma 1:4]])}} ==={{ĐM|ref}}=== *{{Chú thích web|oyd|author=The Word for the World International|work=ኦይዳ አዲስ ኪዳን|year=2025|entry=ሮመ 1|entryurl=https://www.bible.com/bible/4136/ROM.1.OYDANTE}} *{{Chú thích web|oyd|author=The Word for the World International|work=Oyda New Testament|year=2025|entry=Rome 1|entryurl=https://www.bible.com/bible/4135/ROM.1.OYDANTL}} =={{langname|ahg}}== ==={{ĐM|pron}}=== *{{IPA4|ahg|[a]}} ==={{ĐM|letter}}=== {{head|ahg|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Qimant. #:{{ux|ahg|'''አ'''ን|tr='''a'''n|[[tôi]]|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Zelealem Leyew|title=[https://www.sil.org/system/files/reapdata/82/50/37/82503750131869653658187802019944910984/SILESR2002_062.pdf First report on a survey of the Shinasha and Agew dialects and languages]|year=2002|page=6|publisher=SIL International}} =={{langname|ssy}}== ==={{ĐM|pron}}=== *{{ssy-IPA|a}} ==={{ĐM|letter}}=== {{head|ssy|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Saho ở Ethiopia. #:{{ux|muz|'''አ'''ቦ|tr={{l|ssy|'''a'''bo}}|[[ông]]|inline=1}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Saho'') [[ሀ#Tiếng_Saho|ሀ]], [[ሁ#Tiếng_Saho|ሁ]], [[ሂ#Tiếng_Saho|ሂ]], [[ሃ#Tiếng_Saho|ሃ]], [[ህ#Tiếng_Saho|ህ]], [[ሆ#Tiếng_Saho|ሆ]], [[ለ#Tiếng_Saho|ለ]], [[ሉ#Tiếng_Saho|ሉ]], [[ሊ#Tiếng_Saho|ሊ]], [[ላ#Tiếng_Saho|ላ]], [[ል#Tiếng_Saho|ል]], [[ሎ#Tiếng_Saho|ሎ]], [[ሐ#Tiếng_Saho|ሐ]], [[ሑ#Tiếng_Saho|ሑ]], [[ሒ#Tiếng_Saho|ሒ]], [[ሓ#Tiếng_Saho|ሓ]], [[ሕ#Tiếng_Saho|ሕ]], [[ሖ#Tiếng_Saho|ሖ]], [[መ#Tiếng_Saho|መ]], [[ሙ#Tiếng_Saho|ሙ]], [[ሚ#Tiếng_Saho|ሚ]], [[ማ#Tiếng_Saho|ማ]], [[ም#Tiếng_Saho|ም]], [[ሞ#Tiếng_Saho|ሞ]], [[ረ#Tiếng_Saho|ረ]], [[ሩ#Tiếng_Saho|ሩ]], [[ሪ#Tiếng_Saho|ሪ]], [[ራ#Tiếng_Saho|ራ]], [[ር#Tiếng_Saho|ር]], [[ሮ#Tiếng_Saho|ሮ]], [[ሰ#Tiếng_Saho|ሰ]], [[ሱ#Tiếng_Saho|ሱ]], [[ሲ#Tiếng_Saho|ሲ]], [[ሳ#Tiếng_Saho|ሳ]], [[ስ#Tiếng_Saho|ስ]], [[ሶ#Tiếng_Saho|ሶ]], [[ሸ#Tiếng_Saho|ሸ]], [[ሹ#Tiếng_Saho|ሹ]], [[ሺ#Tiếng_Saho|ሺ]], [[ሻ#Tiếng_Saho|ሻ]], [[ሽ#Tiếng_Saho|ሽ]], [[ሾ#Tiếng_Saho|ሾ]], [[ቀ#Tiếng_Saho|ቀ]], [[ቁ#Tiếng_Saho|ቁ]], [[ቂ#Tiếng_Saho|ቂ]], [[ቃ#Tiếng_Saho|ቃ]], [[ቅ#Tiếng_Saho|ቅ]], [[ቆ#Tiếng_Saho|ቆ]], [[ቐ#Tiếng_Saho|ቐ]], [[ቑ#Tiếng_Saho|ቑ]], [[ቒ#Tiếng_Saho|ቒ]], [[ቓ#Tiếng_Saho|ቓ]], [[ቕ#Tiếng_Saho|ቕ]], [[ቖ#Tiếng_Saho|ቖ]], [[በ#Tiếng_Saho|በ]], [[ቡ#Tiếng_Saho|ቡ]], [[ቢ#Tiếng_Saho|ቢ]], [[ባ#Tiếng_Saho|ባ]], [[ብ#Tiếng_Saho|ብ]], [[ቦ#Tiếng_Saho|ቦ]], [[ተ#Tiếng_Saho|ተ]], [[ቱ#Tiếng_Saho|ቱ]], [[ቲ#Tiếng_Saho|ቲ]], [[ታ#Tiếng_Saho|ታ]], [[ት#Tiếng_Saho|ት]], [[ቶ#Tiếng_Saho|ቶ]], [[ቸ#Tiếng_Saho|ቸ]], [[ቹ#Tiếng_Saho|ቹ]], [[ቺ#Tiếng_Saho|ቺ]], [[ቻ#Tiếng_Saho|ቻ]], [[ች#Tiếng_Saho|ች]], [[ቾ#Tiếng_Saho|ቾ]], [[ነ#Tiếng_Saho|ነ]], [[ኑ#Tiếng_Saho|ኑ]], [[ኒ#Tiếng_Saho|ኒ]], [[ና#Tiếng_Saho|ና]], [[ን#Tiếng_Saho|ን]], [[ኖ#Tiếng_Saho|ኖ]], [[ኘ#Tiếng_Saho|ኘ]], [[ኙ#Tiếng_Saho|ኙ]], [[ኚ#Tiếng_Saho|ኚ]], [[ኛ#Tiếng_Saho|ኛ]], [[ኝ#Tiếng_Saho|ኝ]], [[ኞ#Tiếng_Saho|ኞ]], [[አ#Tiếng_Saho|አ]], [[ኡ#Tiếng_Saho|ኡ]], [[ኢ#Tiếng_Saho|ኢ]], [[ኣ#Tiếng_Saho|ኣ]], [[እ#Tiếng_Saho|እ]], [[ኦ#Tiếng_Saho|ኦ]], [[ከ#Tiếng_Saho|ከ]], [[ኩ#Tiếng_Saho|ኩ]], [[ኪ#Tiếng_Saho|ኪ]], [[ካ#Tiếng_Saho|ካ]], [[ክ#Tiếng_Saho|ክ]], [[ኮ#Tiếng_Saho|ኮ]], [[ኸ#Tiếng_Saho|ኸ]], [[ኹ#Tiếng_Saho|ኹ]], [[ኺ#Tiếng_Saho|ኺ]], [[ኻ#Tiếng_Saho|ኻ]], [[ኽ#Tiếng_Saho|ኽ]], [[ኾ#Tiếng_Saho|ኾ]], [[ወ#Tiếng_Saho|ወ]], [[ዉ#Tiếng_Saho|ዉ]], [[ዊ#Tiếng_Saho|ዊ]], [[ዋ#Tiếng_Saho|ዋ]], [[ው#Tiếng_Saho|ው]], [[ዎ#Tiếng_Saho|ዎ]], [[ዐ#Tiếng_Saho|ዐ]], [[ዑ#Tiếng_Saho|ዑ]], [[ዒ#Tiếng_Saho|ዒ]], [[ዓ#Tiếng_Saho|ዓ]], [[ዕ#Tiếng_Saho|ዕ]], [[ዖ#Tiếng_Saho|ዖ]], [[ዘ#Tiếng_Saho|ዘ]], [[ዙ#Tiếng_Saho|ዙ]], [[ዚ#Tiếng_Saho|ዚ]], [[ዛ#Tiếng_Saho|ዛ]], [[ዝ#Tiếng_Saho|ዝ]], [[ዞ#Tiếng_Saho|ዞ]], [[የ#Tiếng_Saho|የ]], [[ዩ#Tiếng_Saho|ዩ]], [[ዪ#Tiếng_Saho|ዪ]], [[ያ#Tiếng_Saho|ያ]], [[ይ#Tiếng_Saho|ይ]], [[ዮ#Tiếng_Saho|ዮ]], [[ደ#Tiếng_Saho|ደ]], [[ዱ#Tiếng_Saho|ዱ]], [[ዲ#Tiếng_Saho|ዲ]], [[ዳ#Tiếng_Saho|ዳ]], [[ድ#Tiếng_Saho|ድ]], [[ዶ#Tiếng_Saho|ዶ]], [[ጀ#Tiếng_Saho|ጀ]], [[ጁ#Tiếng_Saho|ጁ]], [[ጂ#Tiếng_Saho|ጂ]], [[ጃ#Tiếng_Saho|ጃ]], [[ጅ#Tiếng_Saho|ጅ]], [[ጆ#Tiếng_Saho|ጆ]], [[ገ#Tiếng_Saho|ገ]], [[ጉ#Tiếng_Saho|ጉ]], [[ጊ#Tiếng_Saho|ጊ]], [[ጋ#Tiếng_Saho|ጋ]], [[ግ#Tiếng_Saho|ግ]], [[ጎ#Tiếng_Saho|ጎ]], [[ጠ#Tiếng_Saho|ጠ]], [[ጡ#Tiếng_Saho|ጡ]], [[ጢ#Tiếng_Saho|ጢ]], [[ጣ#Tiếng_Saho|ጣ]], [[ጥ#Tiếng_Saho|ጥ]], [[ጦ#Tiếng_Saho|ጦ]], [[ጨ#Tiếng_Saho|ጨ]], [[ጩ#Tiếng_Saho|ጩ]], [[ጪ#Tiếng_Saho|ጪ]], [[ጫ#Tiếng_Saho|ጫ]], [[ጭ#Tiếng_Saho|ጭ]], [[ጮ#Tiếng_Saho|ጮ]], [[ጸ#Tiếng_Saho|ጸ]], [[ጹ#Tiếng_Saho|ጹ]], [[ጺ#Tiếng_Saho|ጺ]], [[ጻ#Tiếng_Saho|ጻ]], [[ጽ#Tiếng_Saho|ጽ]], [[ጾ#Tiếng_Saho|ጾ]], [[ፀ#Tiếng_Saho|ፀ]], [[ፁ#Tiếng_Saho|ፁ]], [[ፂ#Tiếng_Saho|ፂ]], [[ፃ#Tiếng_Saho|ፃ]], [[ፅ#Tiếng_Saho|ፅ]], [[ፆ#Tiếng_Saho|ፆ]], [[ፈ#Tiếng_Saho|ፈ]], [[ፉ#Tiếng_Saho|ፉ]], [[ፊ#Tiếng_Saho|ፊ]], [[ፋ#Tiếng_Saho|ፋ]], [[ፍ#Tiếng_Saho|ፍ]], [[ፎ#Tiếng_Saho|ፎ]], [[ፐ#Tiếng_Saho|ፐ]], [[ፑ#Tiếng_Saho|ፑ]], [[ፒ#Tiếng_Saho|ፒ]], [[ፓ#Tiếng_Saho|ፓ]], [[ፕ#Tiếng_Saho|ፕ]], [[ፖ#Tiếng_Saho|ፖ]], [[ቨ#Tiếng_Saho|ቨ]], [[ቩ#Tiếng_Saho|ቩ]], [[ቪ#Tiếng_Saho|ቪ]], [[ቫ#Tiếng_Saho|ቫ]], [[ቭ#Tiếng_Saho|ቭ]], [[ቮ#Tiếng_Saho|ቮ]] ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Moreno Vergari & Roberta Vergari|title=[http://www.sahoarchive.org/wp-content/uploads/2014/08/BSEID__3rd_edition__2007_.2.pdf A basic Saho-English-Italian Dictionary]|year=2003|location=Asmara|publisher=Sabur Printing Services|page=5}} *[http://www.sahoarchive.org/wp-content/uploads/2014/12/Table.pdf Bảng so sánh chữ viết Eritrea và Ethiopia của tiếng Saho] =={{langname|sgw}}== ==={{ĐM|pron}}=== *{{IPA4|sgw|[ɐ]}} ==={{ĐM|letter}}=== {{head|sgw|Chữ cái|tr=’ä}} #Chữ cái âm tiết ''’ä'' trong bộ chữ Geʽez tiếng Sebat Bet Gurage. #:{{ux|sgw|'''አ'''ስ|tr='''’ä'''si|[[s:Ê-xơ-tê|Ê-xơ-tê]]|inline=1}} ==={{ĐM|see}}=== *(''Chữ Geʽez phương ngữ Chaha'') [[ሀ#Tiếng_Sebat_Bet_Gurage|ሀ]], [[ሁ#Tiếng_Sebat_Bet_Gurage|ሁ]], [[ሂ#Tiếng_Sebat_Bet_Gurage|ሂ]], [[ሃ#Tiếng_Sebat_Bet_Gurage|ሃ]], [[ሄ#Tiếng_Sebat_Bet_Gurage|ሄ]], [[ህ#Tiếng_Sebat_Bet_Gurage|ህ]], [[ሆ#Tiếng_Sebat_Bet_Gurage|ሆ]], [[ለ#Tiếng_Sebat_Bet_Gurage|ለ]], [[ሉ#Tiếng_Sebat_Bet_Gurage|ሉ]], [[ሊ#Tiếng_Sebat_Bet_Gurage|ሊ]], [[ላ#Tiếng_Sebat_Bet_Gurage|ላ]], [[ሌ#Tiếng_Sebat_Bet_Gurage|ሌ]], [[ሎ#Tiếng_Sebat_Bet_Gurage|ሎ]], [[መ#Tiếng_Sebat_Bet_Gurage|መ]], [[ሙ#Tiếng_Sebat_Bet_Gurage|ሙ]], [[ሚ#Tiếng_Sebat_Bet_Gurage|ሚ]], [[ማ#Tiếng_Sebat_Bet_Gurage|ማ]], [[ሜ#Tiếng_Sebat_Bet_Gurage|ሜ]], [[ም#Tiếng_Sebat_Bet_Gurage|ም]], [[ሞ#Tiếng_Sebat_Bet_Gurage|ሞ]], [[ᎀ#Tiếng_Sebat_Bet_Gurage|ᎀ]], [[ᎁ#Tiếng_Sebat_Bet_Gurage|ᎁ]], [[ሟ#Tiếng_Sebat_Bet_Gurage|ሟ]], [[ᎂ#Tiếng_Sebat_Bet_Gurage|ᎂ]], [[ᎃ#Tiếng_Sebat_Bet_Gurage|ᎃ]], [[ረ#Tiếng_Sebat_Bet_Gurage|ረ]], [[ሩ#Tiếng_Sebat_Bet_Gurage|ሩ]], [[ሪ#Tiếng_Sebat_Bet_Gurage|ሪ]], [[ራ#Tiếng_Sebat_Bet_Gurage|ራ]], [[ሬ#Tiếng_Sebat_Bet_Gurage|ሬ]], [[ር#Tiếng_Sebat_Bet_Gurage|ር]], [[ሮ#Tiếng_Sebat_Bet_Gurage|ሮ]], [[ሰ#Tiếng_Sebat_Bet_Gurage|ሰ]], [[ሱ#Tiếng_Sebat_Bet_Gurage|ሱ]], [[ሲ#Tiếng_Sebat_Bet_Gurage|ሲ]], [[ሳ#Tiếng_Sebat_Bet_Gurage|ሳ]], [[ሴ#Tiếng_Sebat_Bet_Gurage|ሴ]], [[ስ#Tiếng_Sebat_Bet_Gurage|ስ]], [[ሶ#Tiếng_Sebat_Bet_Gurage|ሶ]], [[ሸ#Tiếng_Sebat_Bet_Gurage|ሸ]], [[ሹ#Tiếng_Sebat_Bet_Gurage|ሹ]], [[ሺ#Tiếng_Sebat_Bet_Gurage|ሺ]], [[ሻ#Tiếng_Sebat_Bet_Gurage|ሻ]], [[ሼ#Tiếng_Sebat_Bet_Gurage|ሼ]], [[ሽ#Tiếng_Sebat_Bet_Gurage|ሽ]], [[ሾ#Tiếng_Sebat_Bet_Gurage|ሾ]], [[ቀ#Tiếng_Sebat_Bet_Gurage|ቀ]], [[ቁ#Tiếng_Sebat_Bet_Gurage|ቁ]], [[ቂ#Tiếng_Sebat_Bet_Gurage|ቂ]], [[ቃ#Tiếng_Sebat_Bet_Gurage|ቃ]], [[ቄ#Tiếng_Sebat_Bet_Gurage|ቄ]], [[ቅ#Tiếng_Sebat_Bet_Gurage|ቅ]], [[ቆ#Tiếng_Sebat_Bet_Gurage|ቆ]], [[ⷀ#Tiếng_Sebat_Bet_Gurage|ⷀ]], [[ⷁ#Tiếng_Sebat_Bet_Gurage|ⷁ]], [[ⷂ#Tiếng_Sebat_Bet_Gurage|ⷂ]], [[ⷃ#Tiếng_Sebat_Bet_Gurage|ⷃ]], [[ⷄ#Tiếng_Sebat_Bet_Gurage|ⷄ]], [[ⷅ#Tiếng_Sebat_Bet_Gurage|ⷅ]], [[ⷆ#Tiếng_Sebat_Bet_Gurage|ⷆ]], [[ቈ#Tiếng_Sebat_Bet_Gurage|ቈ]], [[ቊ#Tiếng_Sebat_Bet_Gurage|ቊ]], [[ቋ#Tiếng_Sebat_Bet_Gurage|ቋ]], [[ቌ#Tiếng_Sebat_Bet_Gurage|ቌ]], [[ቍ#Tiếng_Sebat_Bet_Gurage|ቍ]], [[በ#Tiếng_Sebat_Bet_Gurage|በ]], [[ቡ#Tiếng_Sebat_Bet_Gurage|ቡ]], [[ቢ#Tiếng_Sebat_Bet_Gurage|ቢ]], [[ባ#Tiếng_Sebat_Bet_Gurage|ባ]], [[ቤ#Tiếng_Sebat_Bet_Gurage|ቤ]], [[ብ#Tiếng_Sebat_Bet_Gurage|ብ]], [[ቦ#Tiếng_Sebat_Bet_Gurage|ቦ]], [[ᎄ#Tiếng_Sebat_Bet_Gurage|ᎄ]], [[ᎅ#Tiếng_Sebat_Bet_Gurage|ᎅ]], [[ቧ#Tiếng_Sebat_Bet_Gurage|ቧ]], [[ᎆ#Tiếng_Sebat_Bet_Gurage|ᎆ]], [[ᎇ#Tiếng_Sebat_Bet_Gurage|ᎇ]], [[ተ#Tiếng_Sebat_Bet_Gurage|ተ]], [[ቱ#Tiếng_Sebat_Bet_Gurage|ቱ]], [[ቲ#Tiếng_Sebat_Bet_Gurage|ቲ]], [[ታ#Tiếng_Sebat_Bet_Gurage|ታ]], [[ቴ#Tiếng_Sebat_Bet_Gurage|ቴ]], [[ት#Tiếng_Sebat_Bet_Gurage|ት]], [[ቶ#Tiếng_Sebat_Bet_Gurage|ቶ]], [[ቸ#Tiếng_Sebat_Bet_Gurage|ቸ]], [[ቹ#Tiếng_Sebat_Bet_Gurage|ቹ]], [[ቺ#Tiếng_Sebat_Bet_Gurage|ቺ]], [[ቻ#Tiếng_Sebat_Bet_Gurage|ቻ]], [[ቼ#Tiếng_Sebat_Bet_Gurage|ቼ]], [[ች#Tiếng_Sebat_Bet_Gurage|ች]], [[ቾ#Tiếng_Sebat_Bet_Gurage|ቾ]], [[ኀ#Tiếng_Sebat_Bet_Gurage|ኀ]], [[ኁ#Tiếng_Sebat_Bet_Gurage|ኁ]], [[ኂ#Tiếng_Sebat_Bet_Gurage|ኂ]], [[ኃ#Tiếng_Sebat_Bet_Gurage|ኃ]], [[ኄ#Tiếng_Sebat_Bet_Gurage|ኄ]], [[ኅ#Tiếng_Sebat_Bet_Gurage|ኅ]], [[ኆ#Tiếng_Sebat_Bet_Gurage|ኆ]], [[ኈ#Tiếng_Sebat_Bet_Gurage|ኈ]], [[ኊ#Tiếng_Sebat_Bet_Gurage|ኊ]], [[ኋ#Tiếng_Sebat_Bet_Gurage|ኋ]], [[ኌ#Tiếng_Sebat_Bet_Gurage|ኌ]], [[ኍ#Tiếng_Sebat_Bet_Gurage|ኍ]], [[ነ#Tiếng_Sebat_Bet_Gurage|ነ]], [[ኑ#Tiếng_Sebat_Bet_Gurage|ኑ]], [[ኒ#Tiếng_Sebat_Bet_Gurage|ኒ]], [[ና#Tiếng_Sebat_Bet_Gurage|ና]], [[ኔ#Tiếng_Sebat_Bet_Gurage|ኔ]], [[ን#Tiếng_Sebat_Bet_Gurage|ን]], [[ኖ#Tiếng_Sebat_Bet_Gurage|ኖ]], [[አ#Tiếng_Sebat_Bet_Gurage|አ]], [[ኡ#Tiếng_Sebat_Bet_Gurage|ኡ]], [[ኢ#Tiếng_Sebat_Bet_Gurage|ኢ]], [[ኣ#Tiếng_Sebat_Bet_Gurage|ኣ]], [[ኤ#Tiếng_Sebat_Bet_Gurage|ኤ]], [[እ#Tiếng_Sebat_Bet_Gurage|እ]], [[ኦ#Tiếng_Sebat_Bet_Gurage|ኦ]], [[ከ#Tiếng_Sebat_Bet_Gurage|ከ]], [[ኩ#Tiếng_Sebat_Bet_Gurage|ኩ]], [[ኪ#Tiếng_Sebat_Bet_Gurage|ኪ]], [[ካ#Tiếng_Sebat_Bet_Gurage|ካ]], [[ኬ#Tiếng_Sebat_Bet_Gurage|ኬ]], [[ክ#Tiếng_Sebat_Bet_Gurage|ክ]], [[ኮ#Tiếng_Sebat_Bet_Gurage|ኮ]], [[ⷈ#Tiếng_Sebat_Bet_Gurage|ⷈ]], [[ⷉ#Tiếng_Sebat_Bet_Gurage|ⷉ]], [[ⷊ#Tiếng_Sebat_Bet_Gurage|ⷊ]], [[ⷋ#Tiếng_Sebat_Bet_Gurage|ⷋ]], [[ⷌ#Tiếng_Sebat_Bet_Gurage|ⷌ]], [[ⷍ#Tiếng_Sebat_Bet_Gurage|ⷍ]], [[ⷎ#Tiếng_Sebat_Bet_Gurage|ⷎ]], [[ኰ#Tiếng_Sebat_Bet_Gurage|ኰ]], [[ኲ#Tiếng_Sebat_Bet_Gurage|ኲ]], [[ኳ#Tiếng_Sebat_Bet_Gurage|ኳ]], [[ኴ#Tiếng_Sebat_Bet_Gurage|ኴ]], [[ኵ#Tiếng_Sebat_Bet_Gurage|ኵ]], [[ⷐ#Tiếng_Sebat_Bet_Gurage|ⷐ]], [[ⷑ#Tiếng_Sebat_Bet_Gurage|ⷑ]], [[ⷒ#Tiếng_Sebat_Bet_Gurage|ⷒ]], [[ⷓ#Tiếng_Sebat_Bet_Gurage|ⷓ]], [[ⷔ#Tiếng_Sebat_Bet_Gurage|ⷔ]], [[ⷕ#Tiếng_Sebat_Bet_Gurage|ⷕ]], [[ⷖ#Tiếng_Sebat_Bet_Gurage|ⷖ]], [[ወ#Tiếng_Sebat_Bet_Gurage|ወ]], [[ዉ#Tiếng_Sebat_Bet_Gurage|ዉ]], [[ዊ#Tiếng_Sebat_Bet_Gurage|ዊ]], [[ዋ#Tiếng_Sebat_Bet_Gurage|ዋ]], [[ዌ#Tiếng_Sebat_Bet_Gurage|ዌ]], [[ው#Tiếng_Sebat_Bet_Gurage|ው]], [[ዎ#Tiếng_Sebat_Bet_Gurage|ዎ]], [[ዘ#Tiếng_Sebat_Bet_Gurage|ዘ]], [[ዙ#Tiếng_Sebat_Bet_Gurage|ዙ]], [[ዚ#Tiếng_Sebat_Bet_Gurage|ዚ]], [[ዛ#Tiếng_Sebat_Bet_Gurage|ዛ]], [[ዜ#Tiếng_Sebat_Bet_Gurage|ዜ]], [[ዝ#Tiếng_Sebat_Bet_Gurage|ዝ]], [[ዞ#Tiếng_Sebat_Bet_Gurage|ዞ]], [[ዠ#Tiếng_Sebat_Bet_Gurage|ዠ]], [[ዡ#Tiếng_Sebat_Bet_Gurage|ዡ]], [[ዢ#Tiếng_Sebat_Bet_Gurage|ዢ]], [[ዣ#Tiếng_Sebat_Bet_Gurage|ዣ]], [[ዤ#Tiếng_Sebat_Bet_Gurage|ዤ]], [[ዥ#Tiếng_Sebat_Bet_Gurage|ዥ]], [[ዦ#Tiếng_Sebat_Bet_Gurage|ዦ]], [[የ#Tiếng_Sebat_Bet_Gurage|የ]], [[ዩ#Tiếng_Sebat_Bet_Gurage|ዩ]], [[ዪ#Tiếng_Sebat_Bet_Gurage|ዪ]], [[ያ#Tiếng_Sebat_Bet_Gurage|ያ]], [[ዬ#Tiếng_Sebat_Bet_Gurage|ዬ]], [[ይ#Tiếng_Sebat_Bet_Gurage|ይ]], [[ዮ#Tiếng_Sebat_Bet_Gurage|ዮ]], [[ደ#Tiếng_Sebat_Bet_Gurage|ደ]], [[ዱ#Tiếng_Sebat_Bet_Gurage|ዱ]], [[ዲ#Tiếng_Sebat_Bet_Gurage|ዲ]], [[ዳ#Tiếng_Sebat_Bet_Gurage|ዳ]], [[ዴ#Tiếng_Sebat_Bet_Gurage|ዴ]], [[ድ#Tiếng_Sebat_Bet_Gurage|ድ]], [[ዶ#Tiếng_Sebat_Bet_Gurage|ዶ]], [[ጀ#Tiếng_Sebat_Bet_Gurage|ጀ]], [[ጁ#Tiếng_Sebat_Bet_Gurage|ጁ]], [[ጂ#Tiếng_Sebat_Bet_Gurage|ጂ]], [[ጃ#Tiếng_Sebat_Bet_Gurage|ጃ]], [[ጄ#Tiếng_Sebat_Bet_Gurage|ጄ]], [[ጅ#Tiếng_Sebat_Bet_Gurage|ጅ]], [[ጆ#Tiếng_Sebat_Bet_Gurage|ጆ]], [[ገ#Tiếng_Sebat_Bet_Gurage|ገ]], [[ጉ#Tiếng_Sebat_Bet_Gurage|ጉ]], [[ጊ#Tiếng_Sebat_Bet_Gurage|ጊ]], [[ጋ#Tiếng_Sebat_Bet_Gurage|ጋ]], [[ጌ#Tiếng_Sebat_Bet_Gurage|ጌ]], [[ግ#Tiếng_Sebat_Bet_Gurage|ግ]], [[ጎ#Tiếng_Sebat_Bet_Gurage|ጎ]], [[ⷘ#Tiếng_Sebat_Bet_Gurage|ⷘ]], [[ⷙ#Tiếng_Sebat_Bet_Gurage|ⷙ]], [[ⷚ#Tiếng_Sebat_Bet_Gurage|ⷚ]], [[ⷛ#Tiếng_Sebat_Bet_Gurage|ⷛ]], [[ⷜ#Tiếng_Sebat_Bet_Gurage|ⷜ]], [[ⷝ#Tiếng_Sebat_Bet_Gurage|ⷝ]], [[ⷞ#Tiếng_Sebat_Bet_Gurage|ⷞ]], [[ጐ#Tiếng_Sebat_Bet_Gurage|ጐ]], [[ጒ#Tiếng_Sebat_Bet_Gurage|ጒ]], [[ጓ#Tiếng_Sebat_Bet_Gurage|ጓ]], [[ጔ#Tiếng_Sebat_Bet_Gurage|ጔ]], [[ጕ#Tiếng_Sebat_Bet_Gurage|ጕ]], [[ጠ#Tiếng_Sebat_Bet_Gurage|ጠ]], [[ጡ#Tiếng_Sebat_Bet_Gurage|ጡ]], [[ጢ#Tiếng_Sebat_Bet_Gurage|ጢ]], [[ጣ#Tiếng_Sebat_Bet_Gurage|ጣ]], [[ጤ#Tiếng_Sebat_Bet_Gurage|ጤ]], [[ጥ#Tiếng_Sebat_Bet_Gurage|ጥ]], [[ጦ#Tiếng_Sebat_Bet_Gurage|ጦ]], [[ጨ#Tiếng_Sebat_Bet_Gurage|ጨ]], [[ጩ#Tiếng_Sebat_Bet_Gurage|ጩ]], [[ጪ#Tiếng_Sebat_Bet_Gurage|ጪ]], [[ጫ#Tiếng_Sebat_Bet_Gurage|ጫ]], [[ጬ#Tiếng_Sebat_Bet_Gurage|ጬ]], [[ጭ#Tiếng_Sebat_Bet_Gurage|ጭ]], [[ጮ#Tiếng_Sebat_Bet_Gurage|ጮ]], [[ፈ#Tiếng_Sebat_Bet_Gurage|ፈ]], [[ፉ#Tiếng_Sebat_Bet_Gurage|ፉ]], [[ፊ#Tiếng_Sebat_Bet_Gurage|ፊ]], [[ፋ#Tiếng_Sebat_Bet_Gurage|ፋ]], [[ፌ#Tiếng_Sebat_Bet_Gurage|ፌ]], [[ፍ#Tiếng_Sebat_Bet_Gurage|ፍ]], [[ፎ#Tiếng_Sebat_Bet_Gurage|ፎ]], [[ᎈ#Tiếng_Sebat_Bet_Gurage|ᎈ]], [[ᎉ#Tiếng_Sebat_Bet_Gurage|ᎉ]], [[ፏ#Tiếng_Sebat_Bet_Gurage|ፏ]], [[ᎊ#Tiếng_Sebat_Bet_Gurage|ᎊ]], [[ᎋ#Tiếng_Sebat_Bet_Gurage|ᎋ]], [[ፐ#Tiếng_Sebat_Bet_Gurage|ፐ]], [[ፑ#Tiếng_Sebat_Bet_Gurage|ፑ]], [[ፒ#Tiếng_Sebat_Bet_Gurage|ፒ]], [[ፓ#Tiếng_Sebat_Bet_Gurage|ፓ]], [[ፔ#Tiếng_Sebat_Bet_Gurage|ፔ]], [[ፕ#Tiếng_Sebat_Bet_Gurage|ፕ]], [[ፖ#Tiếng_Sebat_Bet_Gurage|ፖ]], [[ᎌ#Tiếng_Sebat_Bet_Gurage|ᎌ]], [[ᎍ#Tiếng_Sebat_Bet_Gurage|ᎍ]], [[ፗ#Tiếng_Sebat_Bet_Gurage|ፗ]], [[ᎎ#Tiếng_Sebat_Bet_Gurage|ᎎ]], [[ᎏ#Tiếng_Sebat_Bet_Gurage|ᎏ]] ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Wolf Leslau|title=Etymological Dictionary of Gurage (Ethiopic)|year=1979|location=Wiesbaden|publisher=Otto Harrassowitz|ISBN=3-447-02041-5|pageurl=https://books.google.com/books?id=S7ckMbbwiHQC&pg=PA1|page=1}} *{{Chú thích web|sgw|author=The Bible Society of Ethiopia|entryurl=https://www.bible.com/bible/3203/EST.1.%25E1%2588%2598%25E1%2589%2585%25E1%258C%2589|entry=አስ 1|year=2022|work=መጣፍ ቅዱስ በጉራጌኛ (መቅጉ)}} =={{langname|bwo}}== ==={{ĐM|pron}}=== *{{IPA4|bwo|[a]}} ==={{ĐM|letter}}=== {{head|bwo|Chữ cái|tr=aa}} #Chữ cái âm tiết ''aa'' trong bộ chữ Geʽez tiếng Shinasha. #:{{ux|bwo|'''አ'''ና|tr='''aa'''na|[[trở lại]]|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích web|en|editor=David Ford|work=Borna - Amharic - English Dictionary|year=2020|entry=a|entryurl=https://www.webonary.org/borna-shinasha/browse/?letter=a&key=bwo-x-NEDIS|publisher=SIL International}} =={{langname|sid}}== ==={{ĐM|pron}}=== *{{IPA4|sid|[a]}} ==={{ĐM|letter}}=== {{head|sid|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Sidamo. #:{{ux|sid|'''አ'''ዶ|tr='''a'''do|[[sữa]]|inline=1}} ===={{ĐM|see}}==== *(''Chữ Geʽez tiếng Sidamo'') [[ሀ#Tiếng_Sidamo|ሀ]], [[ሁ#Tiếng_Sidamo|ሁ]], [[ሂ#Tiếng_Sidamo|ሂ]], [[ሃ#Tiếng_Sidamo|ሃ]], [[ሄ#Tiếng_Sidamo|ሄ]], [[ህ#Tiếng_Sidamo|ህ]], [[ሆ#Tiếng_Sidamo|ሆ]], [[ለ#Tiếng_Sidamo|ለ]], [[ሉ#Tiếng_Sidamo|ሉ]], [[ሊ#Tiếng_Sidamo|ሊ]], [[ላ#Tiếng_Sidamo|ላ]], [[ሌ#Tiếng_Sidamo|ሌ]], [[ል#Tiếng_Sidamo|ል]], [[ሎ#Tiếng_Sidamo|ሎ]], [[መ#Tiếng_Sidamo|መ]], [[ሙ#Tiếng_Sidamo|ሙ]], [[ሚ#Tiếng_Sidamo|ሚ]], [[ማ#Tiếng_Sidamo|ማ]], [[ሜ#Tiếng_Sidamo|ሜ]], [[ም#Tiếng_Sidamo|ም]], [[ሞ#Tiếng_Sidamo|ሞ]], [[ሰ#Tiếng_Sidamo|ሰ]], [[ሱ#Tiếng_Sidamo|ሱ]], [[ሲ#Tiếng_Sidamo|ሲ]], [[ሳ#Tiếng_Sidamo|ሳ]], [[ሴ#Tiếng_Sidamo|ሴ]], [[ስ#Tiếng_Sidamo|ስ]], [[ሶ#Tiếng_Sidamo|ሶ]], [[ረ#Tiếng_Sidamo|ረ]], [[ሩ#Tiếng_Sidamo|ሩ]], [[ሪ#Tiếng_Sidamo|ሪ]], [[ራ#Tiếng_Sidamo|ራ]], [[ሬ#Tiếng_Sidamo|ሬ]], [[ር#Tiếng_Sidamo|ር]], [[ሮ#Tiếng_Sidamo|ሮ]], [[ሸ#Tiếng_Sidamo|ሸ]], [[ሹ#Tiếng_Sidamo|ሹ]], [[ሺ#Tiếng_Sidamo|ሺ]], [[ሻ#Tiếng_Sidamo|ሻ]], [[ሼ#Tiếng_Sidamo|ሼ]], [[ሽ#Tiếng_Sidamo|ሽ]], [[ሾ#Tiếng_Sidamo|ሾ]], [[ቀ#Tiếng_Sidamo|ቀ]], [[ቁ#Tiếng_Sidamo|ቁ]], [[ቂ#Tiếng_Sidamo|ቂ]], [[ቃ#Tiếng_Sidamo|ቃ]], [[ቄ#Tiếng_Sidamo|ቄ]], [[ቅ#Tiếng_Sidamo|ቅ]], [[ቆ#Tiếng_Sidamo|ቆ]], [[በ#Tiếng_Sidamo|በ]], [[ቡ#Tiếng_Sidamo|ቡ]], [[ቢ#Tiếng_Sidamo|ቢ]], [[ባ#Tiếng_Sidamo|ባ]], [[ቤ#Tiếng_Sidamo|ቤ]], [[ብ#Tiếng_Sidamo|ብ]], [[ቦ#Tiếng_Sidamo|ቦ]], [[ተ#Tiếng_Sidamo|ተ]], [[ቱ#Tiếng_Sidamo|ቱ]], [[ቲ#Tiếng_Sidamo|ቲ]], [[ታ#Tiếng_Sidamo|ታ]], [[ቴ#Tiếng_Sidamo|ቴ]], [[ት#Tiếng_Sidamo|ት]], [[ቶ#Tiếng_Sidamo|ቶ]], [[ቸ#Tiếng_Sidamo|ቸ]], [[ቹ#Tiếng_Sidamo|ቹ]], [[ቺ#Tiếng_Sidamo|ቺ]], [[ቻ#Tiếng_Sidamo|ቻ]], [[ቼ#Tiếng_Sidamo|ቼ]], [[ች#Tiếng_Sidamo|ች]], [[ቾ#Tiếng_Sidamo|ቾ]], [[አ#Tiếng_Sidamo|አ]], [[ኡ#Tiếng_Sidamo|ኡ]], [[ኢ#Tiếng_Sidamo|ኢ]], [[ኣ#Tiếng_Sidamo|ኣ]], [[ኤ#Tiếng_Sidamo|ኤ]], [[እ#Tiếng_Sidamo|እ]], [[ኦ#Tiếng_Sidamo|ኦ]], [[ነ#Tiếng_Sidamo|ነ]], [[ኑ#Tiếng_Sidamo|ኑ]], [[ኒ#Tiếng_Sidamo|ኒ]], [[ና#Tiếng_Sidamo|ና]], [[ኔ#Tiếng_Sidamo|ኔ]], [[ን#Tiếng_Sidamo|ን]], [[ኖ#Tiếng_Sidamo|ኖ]], [[ኘ#Tiếng_Sidamo|ኘ]], [[ኙ#Tiếng_Sidamo|ኙ]], [[ኚ#Tiếng_Sidamo|ኚ]], [[ኛ#Tiếng_Sidamo|ኛ]], [[ኜ#Tiếng_Sidamo|ኜ]], [[ኝ#Tiếng_Sidamo|ኝ]], [[ኞ#Tiếng_Sidamo|ኞ]], [[ከ#Tiếng_Sidamo|ከ]], [[ኩ#Tiếng_Sidamo|ኩ]], [[ኪ#Tiếng_Sidamo|ኪ]], [[ካ#Tiếng_Sidamo|ካ]], [[ኬ#Tiếng_Sidamo|ኬ]], [[ክ#Tiếng_Sidamo|ክ]], [[ኮ#Tiếng_Sidamo|ኮ]], [[ወ#Tiếng_Sidamo|ወ]], [[ዉ#Tiếng_Sidamo|ዉ]], [[ዊ#Tiếng_Sidamo|ዊ]], [[ዋ#Tiếng_Sidamo|ዋ]], [[ዌ#Tiếng_Sidamo|ዌ]], [[ው#Tiếng_Sidamo|ው]], [[ዎ#Tiếng_Sidamo|ዎ]], [[የ#Tiếng_Sidamo|የ]], [[ዩ#Tiếng_Sidamo|ዩ]], [[ዪ#Tiếng_Sidamo|ዪ]], [[ያ#Tiếng_Sidamo|ያ]], [[ዬ#Tiếng_Sidamo|ዬ]], [[ይ#Tiếng_Sidamo|ይ]], [[ዮ#Tiếng_Sidamo|ዮ]], [[ዸ#Tiếng_Sidamo|ዸ]], [[ዹ#Tiếng_Sidamo|ዹ]], [[ዺ#Tiếng_Sidamo|ዺ]], [[ዻ#Tiếng_Sidamo|ዻ]], [[ዼ#Tiếng_Sidamo|ዼ]], [[ዽ#Tiếng_Sidamo|ዽ]], [[ዾ#Tiếng_Sidamo|ዾ]], [[ጀ#Tiếng_Sidamo|ጀ]], [[ጁ#Tiếng_Sidamo|ጁ]], [[ጂ#Tiếng_Sidamo|ጂ]], [[ጃ#Tiếng_Sidamo|ጃ]], [[ጄ#Tiếng_Sidamo|ጄ]], [[ጅ#Tiếng_Sidamo|ጅ]], [[ጆ#Tiếng_Sidamo|ጆ]], [[ገ#Tiếng_Sidamo|ገ]], [[ጉ#Tiếng_Sidamo|ጉ]], [[ጊ#Tiếng_Sidamo|ጊ]], [[ጋ#Tiếng_Sidamo|ጋ]], [[ጌ#Tiếng_Sidamo|ጌ]], [[ግ#Tiếng_Sidamo|ግ]], [[ጎ#Tiếng_Sidamo|ጎ]], [[ጠ#Tiếng_Sidamo|ጠ]], [[ጡ#Tiếng_Sidamo|ጡ]], [[ጢ#Tiếng_Sidamo|ጢ]], [[ጣ#Tiếng_Sidamo|ጣ]], [[ጤ#Tiếng_Sidamo|ጤ]], [[ጥ#Tiếng_Sidamo|ጥ]], [[ጦ#Tiếng_Sidamo|ጦ]], [[ጨ#Tiếng_Sidamo|ጨ]], [[ጩ#Tiếng_Sidamo|ጩ]], [[ጪ#Tiếng_Sidamo|ጪ]], [[ጫ#Tiếng_Sidamo|ጫ]], [[ጬ#Tiếng_Sidamo|ጬ]], [[ጭ#Tiếng_Sidamo|ጭ]], [[ጮ#Tiếng_Sidamo|ጮ]], [[ጰ#Tiếng_Sidamo|ጰ]], [[ጱ#Tiếng_Sidamo|ጱ]], [[ጲ#Tiếng_Sidamo|ጲ]], [[ጳ#Tiếng_Sidamo|ጳ]], [[ጴ#Tiếng_Sidamo|ጴ]], [[ጵ#Tiếng_Sidamo|ጵ]], [[ጶ#Tiếng_Sidamo|ጶ]], [[ፈ#Tiếng_Sidamo|ፈ]], [[ፉ#Tiếng_Sidamo|ፉ]], [[ፊ#Tiếng_Sidamo|ፊ]], [[ፋ#Tiếng_Sidamo|ፋ]], [[ፌ#Tiếng_Sidamo|ፌ]], [[ፍ#Tiếng_Sidamo|ፍ]], [[ፎ#Tiếng_Sidamo|ፎ]] ==={{ĐM|ref}}=== *{{cite-book|editor=Gizaw Shimelis|title=Sidaama-Amharic-English dictionary|year=2007|publisher=Sidama Information and Culture department|location=Addis Ababa|entryurl=https://changingtheoldgame.wordpress.com/wp-content/uploads/2013/04/sidaama-amharic-english-dictionary-a-b1.pdf|entry=A—B|page=1}} =={{langname|stv}}== ==={{ĐM|pron}}=== *{{IPA4|stv|[ʔə]|[ʔa]}} ==={{ĐM|letter}}=== {{head|stv|Chữ cái|tr=’a}} #Chữ cái âm tiết ''’a'' trong bộ chữ Geʽez tiếng Siltʼe. #:{{ux|stv|[[አመል#Tiếng_Siltʼe|'''አ'''መል]]|tr='''’a'''mal|sự [[nghiện]]|inline=1}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Siltʼe'') [[ሀ#Tiếng_Siltʼe|ሀ]], [[ሁ#Tiếng_Siltʼe|ሁ]], [[ሂ#Tiếng_Siltʼe|ሂ]], [[ሃ#Tiếng_Siltʼe|ሃ]], [[ሄ#Tiếng_Siltʼe|ሄ]], [[ህ#Tiếng_Siltʼe|ህ]], [[ሆ#Tiếng_Siltʼe|ሆ]], [[ለ#Tiếng_Siltʼe|ለ]], [[ሉ#Tiếng_Siltʼe|ሉ]], [[ሊ#Tiếng_Siltʼe|ሊ]], [[ላ#Tiếng_Siltʼe|ላ]], [[ሌ#Tiếng_Siltʼe|ሌ]], [[ሎ#Tiếng_Siltʼe|ሎ]], [[መ#Tiếng_Siltʼe|መ]], [[ሙ#Tiếng_Siltʼe|ሙ]], [[ሚ#Tiếng_Siltʼe|ሚ]], [[ማ#Tiếng_Siltʼe|ማ]], [[ሜ#Tiếng_Siltʼe|ሜ]], [[ም#Tiếng_Siltʼe|ም]], [[ሞ#Tiếng_Siltʼe|ሞ]], [[ረ#Tiếng_Siltʼe|ረ]], [[ሩ#Tiếng_Siltʼe|ሩ]], [[ሪ#Tiếng_Siltʼe|ሪ]], [[ራ#Tiếng_Siltʼe|ራ]], [[ሬ#Tiếng_Siltʼe|ሬ]], [[ር#Tiếng_Siltʼe|ር]], [[ሮ#Tiếng_Siltʼe|ሮ]], [[ሰ#Tiếng_Siltʼe|ሰ]], [[ሱ#Tiếng_Siltʼe|ሱ]], [[ሲ#Tiếng_Siltʼe|ሲ]], [[ሳ#Tiếng_Siltʼe|ሳ]], [[ሴ#Tiếng_Siltʼe|ሴ]], [[ስ#Tiếng_Siltʼe|ስ]], [[ሶ#Tiếng_Siltʼe|ሶ]], [[ሸ#Tiếng_Siltʼe|ሸ]], [[ሹ#Tiếng_Siltʼe|ሹ]], [[ሺ#Tiếng_Siltʼe|ሺ]], [[ሻ#Tiếng_Siltʼe|ሻ]], [[ሼ#Tiếng_Siltʼe|ሼ]], [[ሽ#Tiếng_Siltʼe|ሽ]], [[ሾ#Tiếng_Siltʼe|ሾ]], [[ቀ#Tiếng_Siltʼe|ቀ]], [[ቁ#Tiếng_Siltʼe|ቁ]], [[ቂ#Tiếng_Siltʼe|ቂ]], [[ቃ#Tiếng_Siltʼe|ቃ]], [[ቄ#Tiếng_Siltʼe|ቄ]], [[ቅ#Tiếng_Siltʼe|ቅ]], [[ቆ#Tiếng_Siltʼe|ቆ]], [[በ#Tiếng_Siltʼe|በ]], [[ቡ#Tiếng_Siltʼe|ቡ]], [[ቢ#Tiếng_Siltʼe|ቢ]], [[ባ#Tiếng_Siltʼe|ባ]], [[ቤ#Tiếng_Siltʼe|ቤ]], [[ብ#Tiếng_Siltʼe|ብ]], [[ቦ#Tiếng_Siltʼe|ቦ]], [[ተ#Tiếng_Siltʼe|ተ]], [[ቱ#Tiếng_Siltʼe|ቱ]], [[ቲ#Tiếng_Siltʼe|ቲ]], [[ታ#Tiếng_Siltʼe|ታ]], [[ቴ#Tiếng_Siltʼe|ቴ]], [[ት#Tiếng_Siltʼe|ት]], [[ቶ#Tiếng_Siltʼe|ቶ]], [[ቸ#Tiếng_Siltʼe|ቸ]], [[ቹ#Tiếng_Siltʼe|ቹ]], [[ቺ#Tiếng_Siltʼe|ቺ]], [[ቻ#Tiếng_Siltʼe|ቻ]], [[ቼ#Tiếng_Siltʼe|ቼ]], [[ች#Tiếng_Siltʼe|ች]], [[ቾ#Tiếng_Siltʼe|ቾ]], [[ነ#Tiếng_Siltʼe|ነ]], [[ኑ#Tiếng_Siltʼe|ኑ]], [[ኒ#Tiếng_Siltʼe|ኒ]], [[ና#Tiếng_Siltʼe|ና]], [[ኔ#Tiếng_Siltʼe|ኔ]], [[ን#Tiếng_Siltʼe|ን]], [[ኖ#Tiếng_Siltʼe|ኖ]], [[ኘ#Tiếng_Siltʼe|ኘ]], [[ኙ#Tiếng_Siltʼe|ኙ]], [[ኚ#Tiếng_Siltʼe|ኚ]], [[ኛ#Tiếng_Siltʼe|ኛ]], [[ኜ#Tiếng_Siltʼe|ኜ]], [[ኝ#Tiếng_Siltʼe|ኝ]], [[ኞ#Tiếng_Siltʼe|ኞ]], [[አ#Tiếng_Siltʼe|አ]], [[ኡ#Tiếng_Siltʼe|ኡ]], [[ኢ#Tiếng_Siltʼe|ኢ]], [[ኣ#Tiếng_Siltʼe|ኣ]], [[ኤ#Tiếng_Siltʼe|ኤ]], [[እ#Tiếng_Siltʼe|እ]], [[ኦ#Tiếng_Siltʼe|ኦ]], [[ከ#Tiếng_Siltʼe|ከ]], [[ኩ#Tiếng_Siltʼe|ኩ]], [[ኪ#Tiếng_Siltʼe|ኪ]], [[ካ#Tiếng_Siltʼe|ካ]], [[ኬ#Tiếng_Siltʼe|ኬ]], [[ክ#Tiếng_Siltʼe|ክ]], [[ኮ#Tiếng_Siltʼe|ኮ]], [[ወ#Tiếng_Siltʼe|ወ]], [[ዉ#Tiếng_Siltʼe|ዉ]], [[ዊ#Tiếng_Siltʼe|ዊ]], [[ዋ#Tiếng_Siltʼe|ዋ]], [[ዌ#Tiếng_Siltʼe|ዌ]], [[ው#Tiếng_Siltʼe|ው]], [[ዎ#Tiếng_Siltʼe|ዎ]], [[ዐ#Tiếng_Siltʼe|ዐ]], [[ዑ#Tiếng_Siltʼe|ዑ]], [[ዒ#Tiếng_Siltʼe|ዒ]], [[ዓ#Tiếng_Siltʼe|ዓ]], [[ዔ#Tiếng_Siltʼe|ዔ]], [[ዕ#Tiếng_Siltʼe|ዕ]], [[ዖ#Tiếng_Siltʼe|ዖ]], [[ዘ#Tiếng_Siltʼe|ዘ]], [[ዙ#Tiếng_Siltʼe|ዙ]], [[ዚ#Tiếng_Siltʼe|ዚ]], [[ዛ#Tiếng_Siltʼe|ዛ]], [[ዜ#Tiếng_Siltʼe|ዜ]], [[ዝ#Tiếng_Siltʼe|ዝ]], [[ዞ#Tiếng_Siltʼe|ዞ]], [[ዠ#Tiếng_Siltʼe|ዠ]], [[ዡ#Tiếng_Siltʼe|ዡ]], [[ዢ#Tiếng_Siltʼe|ዢ]], [[ዣ#Tiếng_Siltʼe|ዣ]], [[ዤ#Tiếng_Siltʼe|ዤ]], [[ዥ#Tiếng_Siltʼe|ዥ]], [[ዦ#Tiếng_Siltʼe|ዦ]], [[የ#Tiếng_Siltʼe|የ]], [[ዩ#Tiếng_Siltʼe|ዩ]], [[ዪ#Tiếng_Siltʼe|ዪ]], [[ያ#Tiếng_Siltʼe|ያ]], [[ዬ#Tiếng_Siltʼe|ዬ]], [[ይ#Tiếng_Siltʼe|ይ]], [[ዮ#Tiếng_Siltʼe|ዮ]], [[ደ#Tiếng_Siltʼe|ደ]], [[ዱ#Tiếng_Siltʼe|ዱ]], [[ዲ#Tiếng_Siltʼe|ዲ]], [[ዳ#Tiếng_Siltʼe|ዳ]], [[ዴ#Tiếng_Siltʼe|ዴ]], [[ድ#Tiếng_Siltʼe|ድ]], [[ዶ#Tiếng_Siltʼe|ዶ]], [[ጀ#Tiếng_Siltʼe|ጀ]], [[ጁ#Tiếng_Siltʼe|ጁ]], [[ጂ#Tiếng_Siltʼe|ጂ]], [[ጃ#Tiếng_Siltʼe|ጃ]], [[ጄ#Tiếng_Siltʼe|ጄ]], [[ጅ#Tiếng_Siltʼe|ጅ]], [[ጆ#Tiếng_Siltʼe|ጆ]], [[ገ#Tiếng_Siltʼe|ገ]], [[ጉ#Tiếng_Siltʼe|ጉ]], [[ጊ#Tiếng_Siltʼe|ጊ]], [[ጋ#Tiếng_Siltʼe|ጋ]], [[ጌ#Tiếng_Siltʼe|ጌ]], [[ግ#Tiếng_Siltʼe|ግ]], [[ጎ#Tiếng_Siltʼe|ጎ]], [[ጠ#Tiếng_Siltʼe|ጠ]], [[ጡ#Tiếng_Siltʼe|ጡ]], [[ጢ#Tiếng_Siltʼe|ጢ]], [[ጣ#Tiếng_Siltʼe|ጣ]], [[ጤ#Tiếng_Siltʼe|ጤ]], [[ጥ#Tiếng_Siltʼe|ጥ]], [[ጦ#Tiếng_Siltʼe|ጦ]], [[ጨ#Tiếng_Siltʼe|ጨ]], [[ጩ#Tiếng_Siltʼe|ጩ]], [[ጪ#Tiếng_Siltʼe|ጪ]], [[ጫ#Tiếng_Siltʼe|ጫ]], [[ጬ#Tiếng_Siltʼe|ጬ]], [[ጭ#Tiếng_Siltʼe|ጭ]], [[ጮ#Tiếng_Siltʼe|ጮ]], [[ፈ#Tiếng_Siltʼe|ፈ]], [[ፉ#Tiếng_Siltʼe|ፉ]], [[ፊ#Tiếng_Siltʼe|ፊ]], [[ፋ#Tiếng_Siltʼe|ፋ]], [[ፌ#Tiếng_Siltʼe|ፌ]], [[ፍ#Tiếng_Siltʼe|ፍ]], [[ፎ#Tiếng_Siltʼe|ፎ]], [[ፐ#Tiếng_Siltʼe|ፐ]], [[ፑ#Tiếng_Siltʼe|ፑ]], [[ፒ#Tiếng_Siltʼe|ፒ]], [[ፓ#Tiếng_Siltʼe|ፓ]], [[ፔ#Tiếng_Siltʼe|ፔ]], [[ፕ#Tiếng_Siltʼe|ፕ]], [[ፖ#Tiếng_Siltʼe|ፖ]] ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Wolf Leslau|title=Etymological Dictionary of Gurage (Ethiopic)|year=1979|location=Wiesbaden|publisher=Otto Harrassowitz|ISBN=3-447-02041-5|pageurl=https://books.google.com/books?id=S7ckMbbwiHQC&pg=PA999|page=999}} *{{Chú thích sách|stv|author=Hussein Mohammed Musa|title=[https://www.sil.org/system/files/reapdata/99/62/00/996200115143047615596035705835365028/Amharic_Silte_Lexicon.pdf የአማርኘ-ስልጥኘ ቃሙስ]|year=2014|location=Addis Ababa, Ethiopia|publisher=SIL Ethiopia}} =={{langname|suq}}== ==={{ĐM|pron}}=== *{{IPA4|suq|[ʔa]}} ==={{ĐM|letter}}=== {{head|suq|Chữ cái|tr=’a}} #Chữ cái âm tiết ''’a'' trong bộ chữ Geʽez tiếng Suri. #:{{ux|suq|'''አ'''ሪ|tr='''a'''ri|[[bê]], [[nghé]] [[đực]]|inline=1}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Suri'') [[ሀ#Tiếng_Suri|ሀ]], [[ሁ#Tiếng_Suri|ሁ]], [[ሂ#Tiếng_Suri|ሂ]], [[ሃ#Tiếng_Suri|ሃ]], [[ሄ#Tiếng_Suri|ሄ]], [[ህ#Tiếng_Suri|ህ]], [[ሆ#Tiếng_Suri|ሆ]], [[ሇ#Tiếng_Suri|ሇ]], [[ለ#Tiếng_Suri|ለ]], [[ሉ#Tiếng_Suri|ሉ]], [[ሊ#Tiếng_Suri|ሊ]], [[ላ#Tiếng_Suri|ላ]], [[ሌ#Tiếng_Suri|ሌ]], [[ል#Tiếng_Suri|ል]], [[ሎ#Tiếng_Suri|ሎ]], [[ⶀ#Tiếng_Suri|ⶀ]], [[መ#Tiếng_Suri|መ]], [[ሙ#Tiếng_Suri|ሙ]], [[ሚ#Tiếng_Suri|ሚ]], [[ማ#Tiếng_Suri|ማ]], [[ሜ#Tiếng_Suri|ሜ]], [[ም#Tiếng_Suri|ም]], [[ሞ#Tiếng_Suri|ሞ]], [[ⶁ#Tiếng_Suri|ⶁ]], [[ረ#Tiếng_Suri|ረ]], [[ሩ#Tiếng_Suri|ሩ]], [[ሪ#Tiếng_Suri|ሪ]], [[ራ#Tiếng_Suri|ራ]], [[ሬ#Tiếng_Suri|ሬ]], [[ር#Tiếng_Suri|ር]], [[ሮ#Tiếng_Suri|ሮ]], [[ⶂ#Tiếng_Suri|ⶂ]], [[ሰ#Tiếng_Suri|ሰ]], [[ሱ#Tiếng_Suri|ሱ]], [[ሲ#Tiếng_Suri|ሲ]], [[ሳ#Tiếng_Suri|ሳ]], [[ሴ#Tiếng_Suri|ሴ]], [[ስ#Tiếng_Suri|ስ]], [[ሶ#Tiếng_Suri|ሶ]], [[ⶃ#Tiếng_Suri|ⶃ]], [[ሸ#Tiếng_Suri|ሸ]], [[ሹ#Tiếng_Suri|ሹ]], [[ሺ#Tiếng_Suri|ሺ]], [[ሻ#Tiếng_Suri|ሻ]], [[ሼ#Tiếng_Suri|ሼ]], [[ሽ#Tiếng_Suri|ሽ]], [[ሾ#Tiếng_Suri|ሾ]], [[ⶄ#Tiếng_Suri|ⶄ]], [[ቀ#Tiếng_Suri|ቀ]], [[ቁ#Tiếng_Suri|ቁ]], [[ቂ#Tiếng_Suri|ቂ]], [[ቃ#Tiếng_Suri|ቃ]], [[ቄ#Tiếng_Suri|ቄ]], [[ቅ#Tiếng_Suri|ቅ]], [[ቆ#Tiếng_Suri|ቆ]], [[ቇ#Tiếng_Suri|ቇ]], [[በ#Tiếng_Suri|በ]], [[ቡ#Tiếng_Suri|ቡ]], [[ቢ#Tiếng_Suri|ቢ]], [[ባ#Tiếng_Suri|ባ]], [[ቤ#Tiếng_Suri|ቤ]], [[ብ#Tiếng_Suri|ብ]], [[ቦ#Tiếng_Suri|ቦ]], [[ⶅ#Tiếng_Suri|ⶅ]], [[ተ#Tiếng_Suri|ተ]], [[ቱ#Tiếng_Suri|ቱ]], [[ቲ#Tiếng_Suri|ቲ]], [[ታ#Tiếng_Suri|ታ]], [[ቴ#Tiếng_Suri|ቴ]], [[ት#Tiếng_Suri|ት]], [[ቶ#Tiếng_Suri|ቶ]], [[ⶆ#Tiếng_Suri|ⶆ]], [[ቸ#Tiếng_Suri|ቸ]], [[ቹ#Tiếng_Suri|ቹ]], [[ቺ#Tiếng_Suri|ቺ]], [[ቻ#Tiếng_Suri|ቻ]], [[ቼ#Tiếng_Suri|ቼ]], [[ች#Tiếng_Suri|ች]], [[ቾ#Tiếng_Suri|ቾ]], [[ⶇ#Tiếng_Suri|ⶇ]], [[ኀ#Tiếng_Suri|ኀ]], [[ኁ#Tiếng_Suri|ኁ]], [[ኂ#Tiếng_Suri|ኂ]], [[ኃ#Tiếng_Suri|ኃ]], [[ኄ#Tiếng_Suri|ኄ]], [[ኅ#Tiếng_Suri|ኅ]], [[ኆ#Tiếng_Suri|ኆ]], [[ኇ#Tiếng_Suri|ኇ]], [[ነ#Tiếng_Suri|ነ]], [[ኑ#Tiếng_Suri|ኑ]], [[ኒ#Tiếng_Suri|ኒ]], [[ና#Tiếng_Suri|ና]], [[ኔ#Tiếng_Suri|ኔ]], [[ን#Tiếng_Suri|ን]], [[ኖ#Tiếng_Suri|ኖ]], [[ⶈ#Tiếng_Suri|ⶈ]], [[ኘ#Tiếng_Suri|ኘ]], [[ኙ#Tiếng_Suri|ኙ]], [[ኚ#Tiếng_Suri|ኚ]], [[ኛ#Tiếng_Suri|ኛ]], [[ኜ#Tiếng_Suri|ኜ]], [[ኝ#Tiếng_Suri|ኝ]], [[ኞ#Tiếng_Suri|ኞ]], [[ⶉ#Tiếng_Suri|ⶉ]], [[አ#Tiếng_Suri|አ]], [[ኡ#Tiếng_Suri|ኡ]], [[ኢ#Tiếng_Suri|ኢ]], [[ኣ#Tiếng_Suri|ኣ]], [[ኤ#Tiếng_Suri|ኤ]], [[እ#Tiếng_Suri|እ]], [[ኦ#Tiếng_Suri|ኦ]], [[ⶊ#Tiếng_Suri|ⶊ]], [[ከ#Tiếng_Suri|ከ]], [[ኩ#Tiếng_Suri|ኩ]], [[ኪ#Tiếng_Suri|ኪ]], [[ካ#Tiếng_Suri|ካ]], [[ኬ#Tiếng_Suri|ኬ]], [[ክ#Tiếng_Suri|ክ]], [[ኮ#Tiếng_Suri|ኮ]], [[ኯ#Tiếng_Suri|ኯ]], [[ወ#Tiếng_Suri|ወ]], [[ዉ#Tiếng_Suri|ዉ]], [[ዊ#Tiếng_Suri|ዊ]], [[ዋ#Tiếng_Suri|ዋ]], [[ዌ#Tiếng_Suri|ዌ]], [[ው#Tiếng_Suri|ው]], [[ዎ#Tiếng_Suri|ዎ]], [[ዏ#Tiếng_Suri|ዏ]], [[ዘ#Tiếng_Suri|ዘ]], [[ዙ#Tiếng_Suri|ዙ]], [[ዚ#Tiếng_Suri|ዚ]], [[ዛ#Tiếng_Suri|ዛ]], [[ዜ#Tiếng_Suri|ዜ]], [[ዝ#Tiếng_Suri|ዝ]], [[ዞ#Tiếng_Suri|ዞ]], [[ⶋ#Tiếng_Suri|ⶋ]], [[የ#Tiếng_Suri|የ]], [[ዩ#Tiếng_Suri|ዩ]], [[ዪ#Tiếng_Suri|ዪ]], [[ያ#Tiếng_Suri|ያ]], [[ዬ#Tiếng_Suri|ዬ]], [[ይ#Tiếng_Suri|ይ]], [[ዮ#Tiếng_Suri|ዮ]], [[ዯ#Tiếng_Suri|ዯ]], [[ደ#Tiếng_Suri|ደ]], [[ዱ#Tiếng_Suri|ዱ]], [[ዲ#Tiếng_Suri|ዲ]], [[ዳ#Tiếng_Suri|ዳ]], [[ዴ#Tiếng_Suri|ዴ]], [[ድ#Tiếng_Suri|ድ]], [[ዶ#Tiếng_Suri|ዶ]], [[ⶌ#Tiếng_Suri|ⶌ]], [[ዸ#Tiếng_Suri|ዸ]], [[ዹ#Tiếng_Suri|ዹ]], [[ዺ#Tiếng_Suri|ዺ]], [[ዻ#Tiếng_Suri|ዻ]], [[ዼ#Tiếng_Suri|ዼ]], [[ዽ#Tiếng_Suri|ዽ]], [[ዾ#Tiếng_Suri|ዾ]], [[ⶍ#Tiếng_Suri|ⶍ]], [[ጀ#Tiếng_Suri|ጀ]], [[ጁ#Tiếng_Suri|ጁ]], [[ጂ#Tiếng_Suri|ጂ]], [[ጃ#Tiếng_Suri|ጃ]], [[ጄ#Tiếng_Suri|ጄ]], [[ጅ#Tiếng_Suri|ጅ]], [[ጆ#Tiếng_Suri|ጆ]], [[ⶎ#Tiếng_Suri|ⶎ]], [[ገ#Tiếng_Suri|ገ]], [[ጉ#Tiếng_Suri|ጉ]], [[ጊ#Tiếng_Suri|ጊ]], [[ጋ#Tiếng_Suri|ጋ]], [[ጌ#Tiếng_Suri|ጌ]], [[ግ#Tiếng_Suri|ግ]], [[ጎ#Tiếng_Suri|ጎ]], [[ጏ#Tiếng_Suri|ጏ]], [[ጠ#Tiếng_Suri|ጠ]], [[ጡ#Tiếng_Suri|ጡ]], [[ጢ#Tiếng_Suri|ጢ]], [[ጣ#Tiếng_Suri|ጣ]], [[ጤ#Tiếng_Suri|ጤ]], [[ጥ#Tiếng_Suri|ጥ]], [[ጦ#Tiếng_Suri|ጦ]], [[ⶏ#Tiếng_Suri|ⶏ]], [[ጨ#Tiếng_Suri|ጨ]], [[ጩ#Tiếng_Suri|ጩ]], [[ጪ#Tiếng_Suri|ጪ]], [[ጫ#Tiếng_Suri|ጫ]], [[ጬ#Tiếng_Suri|ጬ]], [[ጭ#Tiếng_Suri|ጭ]], [[ጮ#Tiếng_Suri|ጮ]], [[ⶐ#Tiếng_Suri|ⶐ]], [[ጰ#Tiếng_Suri|ጰ]], [[ጱ#Tiếng_Suri|ጱ]], [[ጲ#Tiếng_Suri|ጲ]], [[ጳ#Tiếng_Suri|ጳ]], [[ጴ#Tiếng_Suri|ጴ]], [[ጵ#Tiếng_Suri|ጵ]], [[ጶ#Tiếng_Suri|ጶ]], [[ⶑ#Tiếng_Suri|ⶑ]], [[ፐ#Tiếng_Suri|ፐ]], [[ፑ#Tiếng_Suri|ፑ]], [[ፒ#Tiếng_Suri|ፒ]], [[ፓ#Tiếng_Suri|ፓ]], [[ፔ#Tiếng_Suri|ፔ]], [[ፕ#Tiếng_Suri|ፕ]], [[ፖ#Tiếng_Suri|ፖ]], [[ⶒ#Tiếng_Suri|ⶒ]], [[ፀ#Tiếng_Suri|ፀ]], [[ፁ#Tiếng_Suri|ፁ]], [[ፂ#Tiếng_Suri|ፂ]], [[ፃ#Tiếng_Suri|ፃ]], [[ፄ#Tiếng_Suri|ፄ]], [[ፅ#Tiếng_Suri|ፅ]], [[ፆ#Tiếng_Suri|ፆ]], [[ፇ#Tiếng_Suri|ፇ]], [[ዕ#Tiếng_Suri|ዕ]] ==={{ĐM|v}}=== {{head|suq|Động từ|tr=a}} #[[là|Là]]. ==={{ĐM|ref}}=== *{{Chú thích sách|author=Michael Bryant, Kite Siralugu|page=5|year=2013|title=[https://www.suriethiopia.com/en/suri-amharic-english-dictionary Suri-Amharic-English/English-Suri Dictionary]}} =={{langname|tig}}== ==={{ĐM|pron}}=== *{{IPA4|tig|[ʔɐ]|[ɐ]}} ==={{ĐM|letter}}=== {{head|tig|Chữ cái}} #Chữ cái âm tiết ''ä'' trong bộ chữ Geʽez tiếng Tigre. #:{{ux|tig|'''አ'''ባ|[[từ chối]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=tig|sc=Ethi|qual=Bảng chữ cái Geʽez tiếng Tigre|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|ሐ|ሑ|ሒ|ሓ|ሔ|ሕ|ሖ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|በ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቸ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ኀ|ኁ|ኂ|ኃ|ኄ|ኅ|ኆ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ወ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዐ|ዑ|ዒ|ዓ|ዔ|ዕ|ዖ|ዘ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|ዠ|ዡ|ዢ|ዣ|ዤ|ዥ|ዦ|የ|ዩ|ዪ|ያ|ዬ|ይ|ዮ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ጀ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጨ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ጰ|ጱ|ጲ|ጳ|ጴ|ጵ|ጶ|ጸ|ጹ|ጺ|ጻ|ጼ|ጽ|ጾ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ|ፐ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ|ቈ|ቊ|ቋ|ቌ|ቍ|ኈ|ኊ|ኋ|ኌ|ኍ|ኰ|ኲ|ኳ|ኴ|ኵ|ጐ|ጒ|ጓ|ጔ|ጕ}} ==={{ĐM|ref}}=== *{{Chú thích sách|de|author=Enno Litman & Maria Höfner|title=Wörterbuch der Tigrē-Sprache|publisher=Franz Steiner Verlag GMBH|pageurl=https://archive.org/details/enno-littmann-und-maria-hofner-worterbuch-der-tigre-sprache-tigre-corrected/page/n221|page=427|year=1962|location=Wiesbaden}} =={{langname|ti}}== ==={{ĐM|pron}}=== *{{IPA4|ti|[ʔɐ]}} ==={{ĐM|letter}}=== {{head|ti|Chữ cái}} #Chữ cái âm tiết ''ä'' trong bộ chữ Geʽez tiếng Tigrinya. #:{{ux|ti|[[w:ti:አልጀሪያ|'''አ'''ልጀሪያ]]|[[Algeria]]|inline=1}} ==={{ĐM|see}}=== *{{letters|lang=ti|sc=Ethi|qual=Bảng chữ cái Geʽez tiếng Tigrinya|ሀ|ሁ|ሂ|ሃ|ሄ|ህ|ሆ|ለ|ሉ|ሊ|ላ|ሌ|ል|ሎ|ሐ|ሑ|ሒ|ሓ|ሔ|ሕ|ሖ|መ|ሙ|ሚ|ማ|ሜ|ም|ሞ|ረ|ሩ|ሪ|ራ|ሬ|ር|ሮ|ሰ|ሱ|ሲ|ሳ|ሴ|ስ|ሶ|ሸ|ሹ|ሺ|ሻ|ሼ|ሽ|ሾ|ቀ|ቁ|ቂ|ቃ|ቄ|ቅ|ቆ|ቈ|ቊ|ቋ|ቌ|ቍ|ቐ|ቑ|ቒ|ቓ|ቔ|ቕ|ቖ|ቘ|ቚ|ቛ|ቜ|ቝ|በ|ቡ|ቢ|ባ|ቤ|ብ|ቦ|ተ|ቱ|ቲ|ታ|ቴ|ት|ቶ|ቸ|ቹ|ቺ|ቻ|ቼ|ች|ቾ|ነ|ኑ|ኒ|ና|ኔ|ን|ኖ|ኘ|ኙ|ኚ|ኛ|ኜ|ኝ|ኞ|አ|ኡ|ኢ|ኣ|ኤ|እ|ኦ|ከ|ኩ|ኪ|ካ|ኬ|ክ|ኮ|ኰ|ኲ|ኳ|ኴ|ኵ|ዀ||ዂ|ዃ|ዄ|ዅ|ወ|ዉ|ዊ|ዋ|ዌ|ው|ዎ|ዐ|ዑ|ዒ|ዓ|ዔ|ዕ|ዖ|ዘ|ዙ|ዚ|ዛ|ዜ|ዝ|ዞ|ዠ|ዡ|ዢ|ዣ|ዤ|ዥ|ዦ|የ|ዩ|ዪ|ያ|ዬ|ይ|ዮ|ደ|ዱ|ዲ|ዳ|ዴ|ድ|ዶ|ጀ|ጁ|ጂ|ጃ|ጄ|ጅ|ጆ|ገ|ጉ|ጊ|ጋ|ጌ|ግ|ጎ|ጐ|ጒ|ጓ|ጔ|ጕ|ጠ|ጡ|ጢ|ጣ|ጤ|ጥ|ጦ|ጨ|ጩ|ጪ|ጫ|ጬ|ጭ|ጮ|ጰ|ጱ|ጲ|ጳ|ጴ|ጵ|ጶ|ጸ|ጹ|ጺ|ጻ|ጼ|ጽ|ጾ|ፈ|ፉ|ፊ|ፋ|ፌ|ፍ|ፎ|ፐ|ፑ|ፒ|ፓ|ፔ|ፕ|ፖ|ቨ|ቩ|ቪ|ቫ|ቬ|ቭ|ቮ}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|title=Tigrigna-English Dictionary|publisher=NIGUSS Digital Library|pageurl=https://archive.org/details/mezgebe-qalat-tigrinya-amharic-yohannes-gebre-egziabher/Tigrigna-English-Dictionary/page/26|page=26|year=2002}} =={{langname|wle}}== ==={{ĐM|pron}}=== *{{IPA4|wle|[ʔə]|[ʔa]}} ==={{ĐM|letter}}=== {{head|wle|Chữ cái|tr=ä}} #Chữ cái âm tiết ''ä'' trong bộ chữ Geʽez tiếng Wolane. #:{{ux|wle|'''እ'''ገድሎ|tr='''ä'''gädlo|cây wesse|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích sách|en|author=Wolf Leslau|title=Etymological Dictionary of Gurage (Ethiopic)|year=1979|location=Wiesbaden|publisher=Otto Harrassowitz|ISBN=3-447-02041-5|pageurl=https://books.google.com/books?id=S7ckMbbwiHQC&pg=PA1123|page=1123}} =={{langname|wal}}== ==={{ĐM|pron}}=== *{{IPA4|wal|[ʔa]}} ==={{ĐM|letter}}=== {{head|wal|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Wolaytta. #:{{ux|wal|'''አ'''ጁታ|tr='''A'''jjuutaa|[[s:Khải huyền|Khải huyền]]|inline=1}} ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Wolaytta'') [[ሀ#Tiếng_Wolaytta|ሀ]], [[ሁ#Tiếng_Wolaytta|ሁ]], [[ሂ#Tiếng_Wolaytta|ሂ]], [[ሃ#Tiếng_Wolaytta|ሃ]], [[ሄ#Tiếng_Wolaytta|ሄ]], [[ህ#Tiếng_Wolaytta|ህ]], [[ሆ#Tiếng_Wolaytta|ሆ]], [[ሇ#Tiếng_Wolaytta|ሇ]], [[ለ#Tiếng_Wolaytta|ለ]], [[ሉ#Tiếng_Wolaytta|ሉ]], [[ሊ#Tiếng_Wolaytta|ሊ]], [[ላ#Tiếng_Wolaytta|ላ]], [[ሌ#Tiếng_Wolaytta|ሌ]], [[ል#Tiếng_Wolaytta|ል]], [[ሎ#Tiếng_Wolaytta|ሎ]], [[ⶀ#Tiếng_Wolaytta|ⶀ]], [[ሏ#Tiếng_Wolaytta|ሏ]], [[ሐ#Tiếng_Wolaytta|ሐ]], [[ሑ#Tiếng_Wolaytta|ሑ]], [[ሒ#Tiếng_Wolaytta|ሒ]], [[ሓ#Tiếng_Wolaytta|ሓ]], [[ሔ#Tiếng_Wolaytta|ሔ]], [[ሕ#Tiếng_Wolaytta|ሕ]], [[ሖ#Tiếng_Wolaytta|ሖ]], [[ሗ#Tiếng_Wolaytta|ሗ]], [[መ#Tiếng_Wolaytta|መ]], [[ሙ#Tiếng_Wolaytta|ሙ]], [[ሚ#Tiếng_Wolaytta|ሚ]], [[ማ#Tiếng_Wolaytta|ማ]], [[ሜ#Tiếng_Wolaytta|ሜ]], [[ም#Tiếng_Wolaytta|ም]], [[ሞ#Tiếng_Wolaytta|ሞ]], [[ⶁ#Tiếng_Wolaytta|ⶁ]], [[ᎀ#Tiếng_Wolaytta|ᎀ]], [[ᎁ#Tiếng_Wolaytta|ᎁ]], [[ሟ#Tiếng_Wolaytta|ሟ]], [[ᎂ#Tiếng_Wolaytta|ᎂ]], [[ᎃ#Tiếng_Wolaytta|ᎃ]], [[ፙ#Tiếng_Wolaytta|ፙ]], [[ሠ#Tiếng_Wolaytta|ሠ]], [[ሡ#Tiếng_Wolaytta|ሡ]], [[ሢ#Tiếng_Wolaytta|ሢ]], [[ሣ#Tiếng_Wolaytta|ሣ]], [[ሤ#Tiếng_Wolaytta|ሤ]], [[ሥ#Tiếng_Wolaytta|ሥ]], [[ሦ#Tiếng_Wolaytta|ሦ]], [[ሧ#Tiếng_Wolaytta|ሧ]], [[ረ#Tiếng_Wolaytta|ረ]], [[ሩ#Tiếng_Wolaytta|ሩ]], [[ሪ#Tiếng_Wolaytta|ሪ]], [[ራ#Tiếng_Wolaytta|ራ]], [[ሬ#Tiếng_Wolaytta|ሬ]], [[ር#Tiếng_Wolaytta|ር]], [[ሮ#Tiếng_Wolaytta|ሮ]], [[ⶂ#Tiếng_Wolaytta|ⶂ]], [[ሯ#Tiếng_Wolaytta|ሯ]], [[ፘ#Tiếng_Wolaytta|ፘ]], [[ሰ#Tiếng_Wolaytta|ሰ]], [[ሱ#Tiếng_Wolaytta|ሱ]], [[ሲ#Tiếng_Wolaytta|ሲ]], [[ሳ#Tiếng_Wolaytta|ሳ]], [[ሴ#Tiếng_Wolaytta|ሴ]], [[ስ#Tiếng_Wolaytta|ስ]], [[ሶ#Tiếng_Wolaytta|ሶ]], [[ⶃ#Tiếng_Wolaytta|ⶃ]], [[ሷ#Tiếng_Wolaytta|ሷ]], [[ሸ#Tiếng_Wolaytta|ሸ]], [[ሹ#Tiếng_Wolaytta|ሹ]], [[ሺ#Tiếng_Wolaytta|ሺ]], [[ሻ#Tiếng_Wolaytta|ሻ]], [[ሼ#Tiếng_Wolaytta|ሼ]], [[ሽ#Tiếng_Wolaytta|ሽ]], [[ሾ#Tiếng_Wolaytta|ሾ]], [[ⶄ#Tiếng_Wolaytta|ⶄ]], [[ሿ#Tiếng_Wolaytta|ሿ]], [[ⶠ#Tiếng_Wolaytta|ⶠ]], [[ⶡ#Tiếng_Wolaytta|ⶡ]], [[ⶢ#Tiếng_Wolaytta|ⶢ]], [[ⶣ#Tiếng_Wolaytta|ⶣ]], [[ⶤ#Tiếng_Wolaytta|ⶤ]], [[ⶥ#Tiếng_Wolaytta|ⶥ]], [[ⶦ#Tiếng_Wolaytta|ⶦ]], [[ቀ#Tiếng_Wolaytta|ቀ]], [[ቁ#Tiếng_Wolaytta|ቁ]], [[ቂ#Tiếng_Wolaytta|ቂ]], [[ቃ#Tiếng_Wolaytta|ቃ]], [[ቄ#Tiếng_Wolaytta|ቄ]], [[ቅ#Tiếng_Wolaytta|ቅ]], [[ቆ#Tiếng_Wolaytta|ቆ]], [[ቇ#Tiếng_Wolaytta|ቇ]], [[ቈ#Tiếng_Wolaytta|ቈ]], [[ቊ#Tiếng_Wolaytta|ቊ]], [[ቋ#Tiếng_Wolaytta|ቋ]], [[ቌ#Tiếng_Wolaytta|ቌ]], [[ቍ#Tiếng_Wolaytta|ቍ]], [[ቐ#Tiếng_Wolaytta|ቐ]], [[ቑ#Tiếng_Wolaytta|ቑ]], [[ቒ#Tiếng_Wolaytta|ቒ]], [[ቓ#Tiếng_Wolaytta|ቓ]], [[ቔ#Tiếng_Wolaytta|ቔ]], [[ቕ#Tiếng_Wolaytta|ቕ]], [[ቖ#Tiếng_Wolaytta|ቖ]], [[ቘ#Tiếng_Wolaytta|ቘ]], [[ቚ#Tiếng_Wolaytta|ቚ]], [[ቛ#Tiếng_Wolaytta|ቛ]], [[ቜ#Tiếng_Wolaytta|ቜ]], [[ቝ#Tiếng_Wolaytta|ቝ]], [[ⷀ#Tiếng_Wolaytta|ⷀ]], [[ⷁ#Tiếng_Wolaytta|ⷁ]], [[ⷂ#Tiếng_Wolaytta|ⷂ]], [[ⷃ#Tiếng_Wolaytta|ⷃ]], [[ⷄ#Tiếng_Wolaytta|ⷄ]], [[ⷅ#Tiếng_Wolaytta|ⷅ]], [[ⷆ#Tiếng_Wolaytta|ⷆ]], [[በ#Tiếng_Wolaytta|በ]], [[ቡ#Tiếng_Wolaytta|ቡ]], [[ቢ#Tiếng_Wolaytta|ቢ]], [[ባ#Tiếng_Wolaytta|ባ]], [[ቤ#Tiếng_Wolaytta|ቤ]], [[ብ#Tiếng_Wolaytta|ብ]], [[ቦ#Tiếng_Wolaytta|ቦ]], [[ⶅ#Tiếng_Wolaytta|ⶅ]], [[ᎄ#Tiếng_Wolaytta|ᎄ]], [[ᎅ#Tiếng_Wolaytta|ᎅ]], [[ቧ#Tiếng_Wolaytta|ቧ]], [[ᎆ#Tiếng_Wolaytta|ᎆ]], [[ᎇ#Tiếng_Wolaytta|ᎇ]], [[ቨ#Tiếng_Wolaytta|ቨ]], [[ቩ#Tiếng_Wolaytta|ቩ]], [[ቪ#Tiếng_Wolaytta|ቪ]], [[ቫ#Tiếng_Wolaytta|ቫ]], [[ቬ#Tiếng_Wolaytta|ቬ]], [[ቭ#Tiếng_Wolaytta|ቭ]], [[ቮ#Tiếng_Wolaytta|ቮ]], [[ቯ#Tiếng_Wolaytta|ቯ]], [[ተ#Tiếng_Wolaytta|ተ]], [[ቱ#Tiếng_Wolaytta|ቱ]], [[ቲ#Tiếng_Wolaytta|ቲ]], [[ታ#Tiếng_Wolaytta|ታ]], [[ቴ#Tiếng_Wolaytta|ቴ]], [[ት#Tiếng_Wolaytta|ት]], [[ቶ#Tiếng_Wolaytta|ቶ]], [[ⶆ#Tiếng_Wolaytta|ⶆ]], [[ቷ#Tiếng_Wolaytta|ቷ]], [[ቸ#Tiếng_Wolaytta|ቸ]], [[ቹ#Tiếng_Wolaytta|ቹ]], [[ቺ#Tiếng_Wolaytta|ቺ]], [[ቻ#Tiếng_Wolaytta|ቻ]], [[ቼ#Tiếng_Wolaytta|ቼ]], [[ች#Tiếng_Wolaytta|ች]], [[ቾ#Tiếng_Wolaytta|ቾ]], [[ⶇ#Tiếng_Wolaytta|ⶇ]], [[ቿ#Tiếng_Wolaytta|ቿ]], [[ⶨ#Tiếng_Wolaytta|ⶨ]], [[ⶩ#Tiếng_Wolaytta|ⶩ]], [[ⶪ#Tiếng_Wolaytta|ⶪ]], [[ⶫ#Tiếng_Wolaytta|ⶫ]], [[ⶬ#Tiếng_Wolaytta|ⶬ]], [[ⶭ#Tiếng_Wolaytta|ⶭ]], [[ⶮ#Tiếng_Wolaytta|ⶮ]], [[ኀ#Tiếng_Wolaytta|ኀ]], [[ኁ#Tiếng_Wolaytta|ኁ]], [[ኂ#Tiếng_Wolaytta|ኂ]], [[ኃ#Tiếng_Wolaytta|ኃ]], [[ኄ#Tiếng_Wolaytta|ኄ]], [[ኅ#Tiếng_Wolaytta|ኅ]], [[ኆ#Tiếng_Wolaytta|ኆ]], [[ኇ#Tiếng_Wolaytta|ኇ]], [[ኈ#Tiếng_Wolaytta|ኈ]], [[ኊ#Tiếng_Wolaytta|ኊ]], [[ኋ#Tiếng_Wolaytta|ኋ]], [[ኌ#Tiếng_Wolaytta|ኌ]], [[ኍ#Tiếng_Wolaytta|ኍ]], [[ነ#Tiếng_Wolaytta|ነ]], [[ኑ#Tiếng_Wolaytta|ኑ]], [[ኒ#Tiếng_Wolaytta|ኒ]], [[ና#Tiếng_Wolaytta|ና]], [[ኔ#Tiếng_Wolaytta|ኔ]], [[ን#Tiếng_Wolaytta|ን]], [[ኖ#Tiếng_Wolaytta|ኖ]], [[ⶈ#Tiếng_Wolaytta|ⶈ]], [[ኗ#Tiếng_Wolaytta|ኗ]], [[ኘ#Tiếng_Wolaytta|ኘ]], [[ኙ#Tiếng_Wolaytta|ኙ]], [[ኚ#Tiếng_Wolaytta|ኚ]], [[ኛ#Tiếng_Wolaytta|ኛ]], [[ኜ#Tiếng_Wolaytta|ኜ]], [[ኝ#Tiếng_Wolaytta|ኝ]], [[ኞ#Tiếng_Wolaytta|ኞ]], [[ⶉ#Tiếng_Wolaytta|ⶉ]], [[ኟ#Tiếng_Wolaytta|ኟ]], [[አ#Tiếng_Wolaytta|አ]], [[ኡ#Tiếng_Wolaytta|ኡ]], [[ኢ#Tiếng_Wolaytta|ኢ]], [[ኣ#Tiếng_Wolaytta|ኣ]], [[ኤ#Tiếng_Wolaytta|ኤ]], [[እ#Tiếng_Wolaytta|እ]], [[ኦ#Tiếng_Wolaytta|ኦ]], [[ⶊ#Tiếng_Wolaytta|ⶊ]], [[ኧ#Tiếng_Wolaytta|ኧ]], [[ከ#Tiếng_Wolaytta|ከ]], [[ኩ#Tiếng_Wolaytta|ኩ]], [[ኪ#Tiếng_Wolaytta|ኪ]], [[ካ#Tiếng_Wolaytta|ካ]], [[ኬ#Tiếng_Wolaytta|ኬ]], [[ክ#Tiếng_Wolaytta|ክ]], [[ኮ#Tiếng_Wolaytta|ኮ]], [[ኯ#Tiếng_Wolaytta|ኯ]], [[ኰ#Tiếng_Wolaytta|ኰ]], [[ኲ#Tiếng_Wolaytta|ኲ]], [[ኳ#Tiếng_Wolaytta|ኳ]], [[ኴ#Tiếng_Wolaytta|ኴ]], [[ኵ#Tiếng_Wolaytta|ኵ]], [[ⷈ#Tiếng_Wolaytta|ⷈ]], [[ⷉ#Tiếng_Wolaytta|ⷉ]], [[ⷊ#Tiếng_Wolaytta|ⷊ]], [[ⷋ#Tiếng_Wolaytta|ⷋ]], [[ⷌ#Tiếng_Wolaytta|ⷌ]], [[ⷍ#Tiếng_Wolaytta|ⷍ]], [[ⷎ#Tiếng_Wolaytta|ⷎ]], [[ወ#Tiếng_Wolaytta|ወ]], [[ዉ#Tiếng_Wolaytta|ዉ]], [[ዊ#Tiếng_Wolaytta|ዊ]], [[ዋ#Tiếng_Wolaytta|ዋ]], [[ዌ#Tiếng_Wolaytta|ዌ]], [[ው#Tiếng_Wolaytta|ው]], [[ዎ#Tiếng_Wolaytta|ዎ]], [[ዏ#Tiếng_Wolaytta|ዏ]], [[ዐ#Tiếng_Wolaytta|ዐ]], [[ዑ#Tiếng_Wolaytta|ዑ]], [[ዒ#Tiếng_Wolaytta|ዒ]], [[ዓ#Tiếng_Wolaytta|ዓ]], [[ዔ#Tiếng_Wolaytta|ዔ]], [[ዕ#Tiếng_Wolaytta|ዕ]], [[ዖ#Tiếng_Wolaytta|ዖ]], [[ዘ#Tiếng_Wolaytta|ዘ]], [[ዙ#Tiếng_Wolaytta|ዙ]], [[ዚ#Tiếng_Wolaytta|ዚ]], [[ዛ#Tiếng_Wolaytta|ዛ]], [[ዜ#Tiếng_Wolaytta|ዜ]], [[ዝ#Tiếng_Wolaytta|ዝ]], [[ዞ#Tiếng_Wolaytta|ዞ]], [[ⶋ#Tiếng_Wolaytta|ⶋ]], [[ዟ#Tiếng_Wolaytta|ዟ]], [[ዠ#Tiếng_Wolaytta|ዠ]], [[ዡ#Tiếng_Wolaytta|ዡ]], [[ዢ#Tiếng_Wolaytta|ዢ]], [[ዣ#Tiếng_Wolaytta|ዣ]], [[ዤ#Tiếng_Wolaytta|ዤ]], [[ዥ#Tiếng_Wolaytta|ዥ]], [[ዦ#Tiếng_Wolaytta|ዦ]], [[ዧ#Tiếng_Wolaytta|ዧ]], [[ⶰ#Tiếng_Wolaytta|ⶰ]], [[ⶱ#Tiếng_Wolaytta|ⶱ]], [[ⶲ#Tiếng_Wolaytta|ⶲ]], [[ⶳ#Tiếng_Wolaytta|ⶳ]], [[ⶴ#Tiếng_Wolaytta|ⶴ]], [[ⶵ#Tiếng_Wolaytta|ⶵ]], [[ⶶ#Tiếng_Wolaytta|ⶶ]], [[የ#Tiếng_Wolaytta|የ]], [[ዩ#Tiếng_Wolaytta|ዩ]], [[ዪ#Tiếng_Wolaytta|ዪ]], [[ያ#Tiếng_Wolaytta|ያ]], [[ዬ#Tiếng_Wolaytta|ዬ]], [[ይ#Tiếng_Wolaytta|ይ]], [[ዮ#Tiếng_Wolaytta|ዮ]], [[ዯ#Tiếng_Wolaytta|ዯ]], [[ደ#Tiếng_Wolaytta|ደ]], [[ዱ#Tiếng_Wolaytta|ዱ]], [[ዲ#Tiếng_Wolaytta|ዲ]], [[ዳ#Tiếng_Wolaytta|ዳ]], [[ዴ#Tiếng_Wolaytta|ዴ]], [[ድ#Tiếng_Wolaytta|ድ]], [[ዶ#Tiếng_Wolaytta|ዶ]], [[ⶌ#Tiếng_Wolaytta|ⶌ]], [[ዷ#Tiếng_Wolaytta|ዷ]], [[ዸ#Tiếng_Wolaytta|ዸ]], [[ዹ#Tiếng_Wolaytta|ዹ]], [[ዺ#Tiếng_Wolaytta|ዺ]], [[ዻ#Tiếng_Wolaytta|ዻ]], [[ዴ#Tiếng_Wolaytta|ዴ]], [[ድ#Tiếng_Wolaytta|ድ]], [[ዾ#Tiếng_Wolaytta|ዾ]], [[ⶍ#Tiếng_Wolaytta|ⶍ]], [[ዿ#Tiếng_Wolaytta|ዿ]], [[ጀ#Tiếng_Wolaytta|ጀ]], [[ጁ#Tiếng_Wolaytta|ጁ]], [[ጂ#Tiếng_Wolaytta|ጂ]], [[ጃ#Tiếng_Wolaytta|ጃ]], [[ጄ#Tiếng_Wolaytta|ጄ]], [[ጅ#Tiếng_Wolaytta|ጅ]], [[ጆ#Tiếng_Wolaytta|ጆ]], [[ⶎ#Tiếng_Wolaytta|ⶎ]], [[ጇ#Tiếng_Wolaytta|ጇ]], [[ገ#Tiếng_Wolaytta|ገ]], [[ጉ#Tiếng_Wolaytta|ጉ]], [[ጊ#Tiếng_Wolaytta|ጊ]], [[ጋ#Tiếng_Wolaytta|ጋ]], [[ጌ#Tiếng_Wolaytta|ጌ]], [[ግ#Tiếng_Wolaytta|ግ]], [[ጎ#Tiếng_Wolaytta|ጎ]], [[ጏ#Tiếng_Wolaytta|ጏ]], [[ጐ#Tiếng_Wolaytta|ጐ]], [[ጒ#Tiếng_Wolaytta|ጒ]], [[ጓ#Tiếng_Wolaytta|ጓ]], [[ጔ#Tiếng_Wolaytta|ጔ]], [[ጕ#Tiếng_Wolaytta|ጕ]], [[ⷘ#Tiếng_Wolaytta|ⷘ]], [[ⷙ#Tiếng_Wolaytta|ⷙ]], [[ⷚ#Tiếng_Wolaytta|ⷚ]], [[ⷛ#Tiếng_Wolaytta|ⷛ]], [[ⷜ#Tiếng_Wolaytta|ⷜ]], [[ⷝ#Tiếng_Wolaytta|ⷝ]], [[ⷞ#Tiếng_Wolaytta|ⷞ]], [[ጘ#Tiếng_Wolaytta|ጘ]], [[ጙ#Tiếng_Wolaytta|ጙ]], [[ጚ#Tiếng_Wolaytta|ጚ]], [[ጛ#Tiếng_Wolaytta|ጛ]], [[ጜ#Tiếng_Wolaytta|ጜ]], [[ጝ#Tiếng_Wolaytta|ጝ]], [[ጞ#Tiếng_Wolaytta|ጞ]], [[ጟ#Tiếng_Wolaytta|ጟ]], [[ⶓ#Tiếng_Wolaytta|ⶓ]], [[ⶔ#Tiếng_Wolaytta|ⶔ]], [[ⶕ#Tiếng_Wolaytta|ⶕ]], [[ⶖ#Tiếng_Wolaytta|ⶖ]], [[ጠ#Tiếng_Wolaytta|ጠ]], [[ጡ#Tiếng_Wolaytta|ጡ]], [[ጢ#Tiếng_Wolaytta|ጢ]], [[ጣ#Tiếng_Wolaytta|ጣ]], [[ጤ#Tiếng_Wolaytta|ጤ]], [[ጥ#Tiếng_Wolaytta|ጥ]], [[ጦ#Tiếng_Wolaytta|ጦ]], [[ⶏ#Tiếng_Wolaytta|ⶏ]], [[ጧ#Tiếng_Wolaytta|ጧ]], [[ጨ#Tiếng_Wolaytta|ጨ]], [[ጩ#Tiếng_Wolaytta|ጩ]], [[ጪ#Tiếng_Wolaytta|ጪ]], [[ጫ#Tiếng_Wolaytta|ጫ]], [[ጬ#Tiếng_Wolaytta|ጬ]], [[ጭ#Tiếng_Wolaytta|ጭ]], [[ጮ#Tiếng_Wolaytta|ጮ]], [[ⶐ#Tiếng_Wolaytta|ⶐ]], [[ጯ#Tiếng_Wolaytta|ጯ]], [[ⶸ#Tiếng_Wolaytta|ⶸ]], [[ⶹ#Tiếng_Wolaytta|ⶹ]], [[ⶺ#Tiếng_Wolaytta|ⶺ]], [[ⶻ#Tiếng_Wolaytta|ⶻ]], [[ⶼ#Tiếng_Wolaytta|ⶼ]], [[ⶽ#Tiếng_Wolaytta|ⶽ]], [[ⶾ#Tiếng_Wolaytta|ⶾ]], [[ጰ#Tiếng_Wolaytta|ጰ]], [[ጱ#Tiếng_Wolaytta|ጱ]], [[ጲ#Tiếng_Wolaytta|ጲ]], [[ጳ#Tiếng_Wolaytta|ጳ]], [[ጴ#Tiếng_Wolaytta|ጴ]], [[ጵ#Tiếng_Wolaytta|ጵ]], [[ጶ#Tiếng_Wolaytta|ጶ]], [[ⶑ#Tiếng_Wolaytta|ⶑ]], [[ጷ#Tiếng_Wolaytta|ጷ]], [[ጸ#Tiếng_Wolaytta|ጸ]], [[ጹ#Tiếng_Wolaytta|ጹ]], [[ጺ#Tiếng_Wolaytta|ጺ]], [[ጻ#Tiếng_Wolaytta|ጻ]], [[ጼ#Tiếng_Wolaytta|ጼ]], [[ጽ#Tiếng_Wolaytta|ጽ]], [[ጾ#Tiếng_Wolaytta|ጾ]], [[ጿ#Tiếng_Wolaytta|ጿ]], [[ፀ#Tiếng_Wolaytta|ፀ]], [[ፁ#Tiếng_Wolaytta|ፁ]], [[ፂ#Tiếng_Wolaytta|ፂ]], [[ፃ#Tiếng_Wolaytta|ፃ]], [[ፄ#Tiếng_Wolaytta|ፄ]], [[ፅ#Tiếng_Wolaytta|ፅ]], [[ፆ#Tiếng_Wolaytta|ፆ]], [[ፇ#Tiếng_Wolaytta|ፇ]], [[ፈ#Tiếng_Wolaytta|ፈ]], [[ፉ#Tiếng_Wolaytta|ፉ]], [[ፊ#Tiếng_Wolaytta|ፊ]], [[ፋ#Tiếng_Wolaytta|ፋ]], [[ፌ#Tiếng_Wolaytta|ፌ]], [[ፍ#Tiếng_Wolaytta|ፍ]], [[ፎ#Tiếng_Wolaytta|ፎ]], [[ᎈ#Tiếng_Wolaytta|ᎈ]], [[ᎉ#Tiếng_Wolaytta|ᎉ]], [[ፏ#Tiếng_Wolaytta|ፏ]], [[ᎊ#Tiếng_Wolaytta|ᎊ]], [[ᎋ#Tiếng_Wolaytta|ᎋ]], [[ፚ#Tiếng_Wolaytta|ፚ]], [[ፐ#Tiếng_Wolaytta|ፐ]], [[ፑ#Tiếng_Wolaytta|ፑ]], [[ፒ#Tiếng_Wolaytta|ፒ]], [[ፓ#Tiếng_Wolaytta|ፓ]], [[ፔ#Tiếng_Wolaytta|ፔ]], [[ፕ#Tiếng_Wolaytta|ፕ]], [[ፖ#Tiếng_Wolaytta|ፖ]], [[ⶒ#Tiếng_Wolaytta|ⶒ]], [[ᎌ#Tiếng_Wolaytta|ᎌ]], [[ፗ#Tiếng_Wolaytta|ፗ]], [[ᎍ#Tiếng_Wolaytta|ᎍ]], [[ᎎ#Tiếng_Wolaytta|ᎎ]], [[ᎏ#Tiếng_Wolaytta|ᎏ]], [[ኸ#Tiếng_Wolaytta|ኸ]], [[ኹ#Tiếng_Wolaytta|ኹ]], [[ኺ#Tiếng_Wolaytta|ኺ]], [[ኻ#Tiếng_Wolaytta|ኻ]], [[ኼ#Tiếng_Wolaytta|ኼ]], [[ኽ#Tiếng_Wolaytta|ኽ]], [[ኾ#Tiếng_Wolaytta|ኾ]], [[ዀ#Tiếng_Wolaytta|ዀ]], [[ዂ#Tiếng_Wolaytta|ዂ]], [[ዃ#Tiếng_Wolaytta|ዃ]], [[ዄ#Tiếng_Wolaytta|ዄ]], [[ዅ#Tiếng_Wolaytta|ዅ]], [[ⷐ#Tiếng_Wolaytta|ⷐ]], [[ⷑ#Tiếng_Wolaytta|ⷑ]], [[ⷒ#Tiếng_Wolaytta|ⷒ]], [[ⷓ#Tiếng_Wolaytta|ⷓ]], [[ⷔ#Tiếng_Wolaytta|ⷔ]], [[ⷕ#Tiếng_Wolaytta|ⷕ]], [[ⷖ#Tiếng_Wolaytta|ⷖ]] ==={{ĐM|ref}}=== *{{Chú thích web|wal|author=Kale Heywet Church / SIM|entryurl=https://live.bible.is/bible/WALSIME/REV/1|entry=አጁታ 1|year=2004|work=Bible.is}} *{{Chú thích web|wal|author=Kale Heywet Church / SIM|entryurl=https://live.bible.is/bible/WALSIM/REV/1|entry=Ajjuutaa 1|year=2004|work=Bible.is}} =={{langname|xan}}== ==={{ĐM|pron}}=== *{{IPA4|xan|[ə]}} ==={{ĐM|letter}}=== {{head|xan|Chữ cái|tr=ä}} #Chữ cái âm tiết ''ä'' trong bộ chữ Geʽez tiếng Xamtanga. ==={{ĐM|see}}=== *(''Chữ Geʽez tiếng Xamtanga'') [[ሀ#Tiếng_Xamtanga|ሀ]], [[ሁ#Tiếng_Xamtanga|ሁ]], [[ሂ#Tiếng_Xamtanga|ሂ]], [[ሃ#Tiếng_Xamtanga|ሃ]], [[ህ#Tiếng_Xamtanga|ህ]], [[ለ#Tiếng_Xamtanga|ለ]], [[ሉ#Tiếng_Xamtanga|ሉ]], [[ሊ#Tiếng_Xamtanga|ሊ]], [[ላ#Tiếng_Xamtanga|ላ]], [[ል#Tiếng_Xamtanga|ል]], [[መ#Tiếng_Xamtanga|መ]], [[ሙ#Tiếng_Xamtanga|ሙ]], [[ሚ#Tiếng_Xamtanga|ሚ]], [[ማ#Tiếng_Xamtanga|ማ]], [[ም#Tiếng_Xamtanga|ም]], [[ረ#Tiếng_Xamtanga|ረ]], [[ሩ#Tiếng_Xamtanga|ሩ]], [[ሪ#Tiếng_Xamtanga|ሪ]], [[ራ#Tiếng_Xamtanga|ራ]], [[ር#Tiếng_Xamtanga|ር]], [[ሰ#Tiếng_Xamtanga|ሰ]], [[ሱ#Tiếng_Xamtanga|ሱ]], [[ሲ#Tiếng_Xamtanga|ሲ]], [[ሳ#Tiếng_Xamtanga|ሳ]], [[ስ#Tiếng_Xamtanga|ስ]], [[ሸ#Tiếng_Xamtanga|ሸ]], [[ሹ#Tiếng_Xamtanga|ሹ]], [[ሺ#Tiếng_Xamtanga|ሺ]], [[ሻ#Tiếng_Xamtanga|ሻ]], [[ሽ#Tiếng_Xamtanga|ሽ]], [[ቀ#Tiếng_Xamtanga|ቀ]], [[ቁ#Tiếng_Xamtanga|ቁ]], [[ቂ#Tiếng_Xamtanga|ቂ]], [[ቃ#Tiếng_Xamtanga|ቃ]], [[ቅ#Tiếng_Xamtanga|ቅ]], [[ቈ#Tiếng_Xamtanga|ቈ]], [[ቊ#Tiếng_Xamtanga|ቊ]], [[ቋ#Tiếng_Xamtanga|ቋ]], [[ቍ#Tiếng_Xamtanga|ቍ]], [[በ#Tiếng_Xamtanga|በ]], [[ቡ#Tiếng_Xamtanga|ቡ]], [[ቢ#Tiếng_Xamtanga|ቢ]], [[ባ#Tiếng_Xamtanga|ባ]], [[ብ#Tiếng_Xamtanga|ብ]], [[ተ#Tiếng_Xamtanga|ተ]], [[ቱ#Tiếng_Xamtanga|ቱ]], [[ቲ#Tiếng_Xamtanga|ቲ]], [[ታ#Tiếng_Xamtanga|ታ]], [[ት#Tiếng_Xamtanga|ት]], [[ቸ#Tiếng_Xamtanga|ቸ]], [[ቹ#Tiếng_Xamtanga|ቹ]], [[ቺ#Tiếng_Xamtanga|ቺ]], [[ቻ#Tiếng_Xamtanga|ቻ]], [[ች#Tiếng_Xamtanga|ች]], [[ኀ#Tiếng_Xamtanga|ኀ]], [[ኁ#Tiếng_Xamtanga|ኁ]], [[ኂ#Tiếng_Xamtanga|ኂ]], [[ኃ#Tiếng_Xamtanga|ኃ]], [[ኅ#Tiếng_Xamtanga|ኅ]], [[ኈ#Tiếng_Xamtanga|ኈ]], [[ኊ#Tiếng_Xamtanga|ኊ]], [[ኋ#Tiếng_Xamtanga|ኋ]], [[ኍ#Tiếng_Xamtanga|ኍ]], [[ነ#Tiếng_Xamtanga|ነ]], [[ኑ#Tiếng_Xamtanga|ኑ]], [[ኒ#Tiếng_Xamtanga|ኒ]], [[ና#Tiếng_Xamtanga|ና]], [[ን#Tiếng_Xamtanga|ን]], [[አ#Tiếng_Xamtanga|አ]], [[ኡ#Tiếng_Xamtanga|ኡ]], [[ኢ#Tiếng_Xamtanga|ኢ]], [[ኣ#Tiếng_Xamtanga|ኣ]], [[እ#Tiếng_Xamtanga|እ]], [[ከ#Tiếng_Xamtanga|ከ]], [[ኩ#Tiếng_Xamtanga|ኩ]], [[ኪ#Tiếng_Xamtanga|ኪ]], [[ካ#Tiếng_Xamtanga|ካ]], [[ክ#Tiếng_Xamtanga|ክ]], [[ኰ#Tiếng_Xamtanga|ኰ]], [[ኲ#Tiếng_Xamtanga|ኲ]], [[ኳ#Tiếng_Xamtanga|ኳ]], [[ኵ#Tiếng_Xamtanga|ኵ]], [[ኸ#Tiếng_Xamtanga|ኸ]], [[ኹ#Tiếng_Xamtanga|ኹ]], [[ኺ#Tiếng_Xamtanga|ኺ]], [[ኻ#Tiếng_Xamtanga|ኻ]], [[ኽ#Tiếng_Xamtanga|ኽ]], [[ዀ#Tiếng_Xamtanga|ዀ]], [[ዂ#Tiếng_Xamtanga|ዂ]], [[ዃ#Tiếng_Xamtanga|ዃ]], [[ዅ#Tiếng_Xamtanga|ዅ]], [[ወ#Tiếng_Xamtanga|ወ]], [[ዉ#Tiếng_Xamtanga|ዉ]], [[ዊ#Tiếng_Xamtanga|ዊ]], [[ዋ#Tiếng_Xamtanga|ዋ]], [[ው#Tiếng_Xamtanga|ው]], [[ዘ#Tiếng_Xamtanga|ዘ]], [[ዙ#Tiếng_Xamtanga|ዙ]], [[ዚ#Tiếng_Xamtanga|ዚ]], [[ዛ#Tiếng_Xamtanga|ዛ]], [[ዝ#Tiếng_Xamtanga|ዝ]], [[የ#Tiếng_Xamtanga|የ]], [[ዩ#Tiếng_Xamtanga|ዩ]], [[ዪ#Tiếng_Xamtanga|ዪ]], [[ያ#Tiếng_Xamtanga|ያ]], [[ይ#Tiếng_Xamtanga|ይ]], [[ደ#Tiếng_Xamtanga|ደ]], [[ዱ#Tiếng_Xamtanga|ዱ]], [[ዲ#Tiếng_Xamtanga|ዲ]], [[ዳ#Tiếng_Xamtanga|ዳ]], [[ድ#Tiếng_Xamtanga|ድ]], [[ጀ#Tiếng_Xamtanga|ጀ]], [[ጁ#Tiếng_Xamtanga|ጁ]], [[ጂ#Tiếng_Xamtanga|ጂ]], [[ጃ#Tiếng_Xamtanga|ጃ]], [[ጅ#Tiếng_Xamtanga|ጅ]], [[ገ#Tiếng_Xamtanga|ገ]], [[ጉ#Tiếng_Xamtanga|ጉ]], [[ጊ#Tiếng_Xamtanga|ጊ]], [[ጋ#Tiếng_Xamtanga|ጋ]], [[ግ#Tiếng_Xamtanga|ግ]], [[ጐ#Tiếng_Xamtanga|ጐ]], [[ጒ#Tiếng_Xamtanga|ጒ]], [[ጓ#Tiếng_Xamtanga|ጓ]], [[ጕ#Tiếng_Xamtanga|ጕ]], [[ጘ#Tiếng_Xamtanga|ጘ]], [[ጙ#Tiếng_Xamtanga|ጙ]], [[ጚ#Tiếng_Xamtanga|ጚ]], [[ጛ#Tiếng_Xamtanga|ጛ]], [[ጝ#Tiếng_Xamtanga|ጝ]], [[ⶓ#Tiếng_Xamtanga|ⶓ]], [[ⶔ#Tiếng_Xamtanga|ⶔ]], [[ⶕ#Tiếng_Xamtanga|ⶕ]], [[ⶖ#Tiếng_Xamtanga|ⶖ]], [[ጠ#Tiếng_Xamtanga|ጠ]], [[ጡ#Tiếng_Xamtanga|ጡ]], [[ጢ#Tiếng_Xamtanga|ጢ]], [[ጣ#Tiếng_Xamtanga|ጣ]], [[ጥ#Tiếng_Xamtanga|ጥ]], [[ጨ#Tiếng_Xamtanga|ጨ]], [[ጩ#Tiếng_Xamtanga|ጩ]], [[ጪ#Tiếng_Xamtanga|ጪ]], [[ጫ#Tiếng_Xamtanga|ጫ]], [[ጭ#Tiếng_Xamtanga|ጭ]], [[ጸ#Tiếng_Xamtanga|ጸ]], [[ጹ#Tiếng_Xamtanga|ጹ]], [[ጺ#Tiếng_Xamtanga|ጺ]], [[ጻ#Tiếng_Xamtanga|ጻ]], [[ጽ#Tiếng_Xamtanga|ጽ]], [[ፈ#Tiếng_Xamtanga|ፈ]], [[ፉ#Tiếng_Xamtanga|ፉ]], [[ፊ#Tiếng_Xamtanga|ፊ]], [[ፋ#Tiếng_Xamtanga|ፋ]], [[ፍ#Tiếng_Xamtanga|ፍ]] ==={{ĐM|ref}}=== *{{Chú thích web|xan|author=The Bible Society of Ethiopia|entryurl=https://www.bible.com/bible/3182/1TI.1.%25E1%258A%25BD%25E1%2588%259D%25E1%258C%25A3%25E1%258A%25A3%25E1%258A%25AA|entry=1ጢመቲወስስ 1|year=2022|work=ኽምጣጘ ኣይር ኪዳን (ኽምጣኣኪ)}} =={{langname|jnj}}== ==={{ĐM|pron}}=== *{{IPA4|jnj|[ʔa]}} ==={{ĐM|letter}}=== {{head|jnj|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Yemsa. #:{{quote|jnj|'''አ'''ይታሳክቶኖ! ኡልፍንቶ ዳም የሱስ ክርስቶስኒክ '''አ'''ማነር ስንፋትነ '''አ'''ሱኒን ኮሩትታዋ።|tr='''A'''ytaasakitono! Ulfinto Daamni Yesus Kiristoosnik '''a'''maner sinfaatine '''a'''sunin korutiitawa.|Hỡi anh em, anh em đã tin đến Đức Chúa Jêsus-Christ, là Chúa vinh-hiển chúng ta, thì chớ có tây-vị người nào. ([[s:Gia-cơ/2#2:1|Gia-cơ 2:1]])}} ==={{ĐM|ref}}=== *{{Chú thích web|jnj|author=The Word for the World International|entryurl=https://www.bible.com/bible/4131/JAS.2.YEMNTETH|entry=ያቆብ 2|year=2025|work=ጋዶ ቴያ}} *{{Chú thích web|jnj|author=The Word for the World International|entryurl=https://www.bible.com/bible/4132/JAS.2.YEMSANTL|entry=Yaqob 2|year=2025|work=Gaddo Teyya}} =={{langname|zwa}}== ==={{ĐM|pron}}=== *{{IPA4|zwa|[ʔa]}} ==={{ĐM|letter}}=== {{head|zwa|Chữ cái|tr=a}} #Chữ cái âm tiết ''a'' trong bộ chữ Geʽez tiếng Zay. #:{{ux|zwa|'''አ'''ራቡ|tr='''a'''rabu|cái [[trống]]|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích sách|author=Klaus & Charlotte Wedekind|title=[https://www.sil.org/system/files/reapdata/68/95/65/68956514609264733434917100988561906547/SILESR2002_063.pdf Initial SLLE survey of the Zway area]|publisher=Initial SLLE Survey of the Zway Area|year=2002|page=5}} =={{langname|zay}}== ==={{ĐM|pron}}=== *{{IPA4|zay|[a]}} ==={{ĐM|letter}}=== {{head|zay|Chữ cái|tr=aa}} #Chữ cái âm tiết ''aa'' trong bộ chữ Geʽez tiếng Zayse-Zergulla. #:{{ux|zay|'''አ'''ፈ|tr='''aa'''fe|[[mắt]]|inline=1}} ==={{ĐM|ref}}=== *{{Chú thích web|author=Zayse Chamber|url=https://www.zayseguura.com/en/educational-materilas/dictionary|entry=A - a|year=2025|work=dictionary}} [[Thể loại:Khối ký tự Ethiopic|A0]] gxyku24p0ye2rxzm8dxb043nx6a6awe nhàr 0 395598 2349882 2026-05-03T12:18:06Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[dẻo]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349882 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[dẻo]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 971bov4y8dbtvi6225w2pxf3jc9yxie ngèr 0 395599 2349883 2026-05-03T12:18:28Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[lườm]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349883 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[lườm]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 1hr5sf3waqigqrbalf3uidpsy3z3inn sơdah 0 395600 2349884 2026-05-03T12:23:52Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[sáng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349884 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[sáng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} g8qb85n5eamqci8xxz3asn707fll5qn harda 0 395601 2349885 2026-05-03T12:24:14Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[ngực]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349885 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[ngực]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 1ykeu911zmca8c4dgzezz9rgohudzjl mơya 0 395602 2349888 2026-05-03T12:26:00Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|conj}}=== {{head|cje|Liên từ}} # [[nhưng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349888 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|conj}}=== {{head|cje|Liên từ}} # [[nhưng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 2wzf7tr4lod51dhlypfjepbemyptz79 Thể loại:Liên từ tiếng Chu Ru 14 395603 2349889 2026-05-03T12:26:13Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2349889 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx tendensernas 0 395604 2349890 2026-05-03T12:33:01Z Hiyuune 50834 + sv 2349890 wikitext text/x-wiki =={{langname|sv}}== ==={{section|noun}}=== {{head|sv|Biến thể hình thái danh từ}} # {{noun form of|sv|tendens||gen|def|p}} hvqbs63t776umvh1zk4yz3k9rdb4oip tendentes 0 395605 2349891 2026-05-03T12:34:38Z Hiyuune 50834 + la, es 2349891 wikitext text/x-wiki =={{langname|la}}== ==={{section|ptcp}}=== {{head|la|Biến thể hình thái phân từ|head=tendentēs}} # {{inflection of|la|tendēns||nom//acc//voc|ở|m//f|p}} =={{langname|es}}== ==={{section|adj}}=== {{head|es|Biến thể hình thái phân từ|g=m-p|g2=f-p}} # {{plural of|es|tendente}} 8cj9v4cjc031a5u69jyapx0ko60fen8 riebiej 0 395606 2349892 2026-05-03T12:36:24Z Hiyuune 50834 Trang mới: “=={{langname|sju}}== ==={{section|etym}}=== {{rfe|sju}} ==={section|n}}=== {{head|sju|noun}} # [[cáo đỏ|Cáo đỏ]], {{taxfmt|Vulpes vulpes|loài}} ===={{section|infl}}==== {{rfinfl|sju|danh từ}} ===={{section|further}}==== * {{R:Álgu|48357}}” 2349892 wikitext text/x-wiki =={{langname|sju}}== ==={{section|etym}}=== {{rfe|sju}} ==={section|n}}=== {{head|sju|noun}} # [[cáo đỏ|Cáo đỏ]], {{taxfmt|Vulpes vulpes|loài}} ===={{section|infl}}==== {{rfinfl|sju|danh từ}} ===={{section|further}}==== * {{R:Álgu|48357}} 8tph72lvorn7l48lkb6kl0ktbm66pq3 2349893 2349892 2026-05-03T12:36:33Z Hiyuune 50834 /* {section|n}} */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2349893 wikitext text/x-wiki =={{langname|sju}}== ==={{section|etym}}=== {{rfe|sju}} ==={{section|n}}=== {{head|sju|noun}} # [[cáo đỏ|Cáo đỏ]], {{taxfmt|Vulpes vulpes|loài}} ===={{section|infl}}==== {{rfinfl|sju|danh từ}} ===={{section|further}}==== * {{R:Álgu|48357}} retkubfip77ahm1aea2293f7y6nwzdn Vulpes vulpes 0 395607 2349894 2026-05-03T12:40:29Z Hiyuune 50834 Trang mới: “=={{langname|mul}}== [[File:Fox at the British Wildlife Centre, Newchapel, Surrey - geograph.org.uk - 2221750.jpg|thumb|''[[Vulpes vulpes]]'']] ==={{section|etym}}=== {{der|mul|la|vulpes||cáo}} ==={{section|pr-noun}}=== {{taxoninfl|g=f|i=1|head=[[Vulpes]] {{epinew|Vulpes|vulpes|mul}}}} # {{taxon|loài|họ|Canidae}} ===={{section|hyper}}==== * {{sense|loài}} bộ {{--}} {{taxfmt|Carnivora|bộ}}; phân bộ {{--}} {{taxfmt|Caniformia|phân bộ}}; họ {{--}}{{taxfm…” 2349894 wikitext text/x-wiki =={{langname|mul}}== [[File:Fox at the British Wildlife Centre, Newchapel, Surrey - geograph.org.uk - 2221750.jpg|thumb|''[[Vulpes vulpes]]'']] ==={{section|etym}}=== {{der|mul|la|vulpes||cáo}} ==={{section|pr-noun}}=== {{taxoninfl|g=f|i=1|head=[[Vulpes]] {{epinew|Vulpes|vulpes|mul}}}} # {{taxon|loài|họ|Canidae}} ===={{section|hyper}}==== * {{sense|loài}} bộ {{--}} {{taxfmt|Carnivora|bộ}}; phân bộ {{--}} {{taxfmt|Caniformia|phân bộ}}; họ {{--}}{{taxfmt|Canidae|họ}}; chi {{--}} {{taxfmt|Vulpes|chi}} ===={{section|hypo}}==== * {{sense|loài}} Để biết phân loài, xem {{R:Mammals|14000892}} * {{sense|đột biến màu sắc}} [[bastard fox]], [[brant-fox]], [[cross fox]], [[silver fox]], [[silver vixen]], [[platinum fox]], [[Samson fox]], [[marble fox]] ==={{section|further}}=== * {{pedia|Red fox|lang=en}} * {{specieslite|i=1}} * {{comcatlite|i=1}} * {{R:Mammals|14000892}} {{C|mul|Cáo}} n8h4umamzy7616qjotav28s4diyyaa9 2349895 2349894 2026-05-03T12:40:41Z Hiyuune 50834 /* Đa ngữ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]) 2349895 wikitext text/x-wiki =={{langname|mul}}== [[File:Fox at the British Wildlife Centre, Newchapel, Surrey - geograph.org.uk - 2221750.jpg|thumb|''[[Vulpes vulpes]]'']] ==={{section|etym}}=== Từ {{der|mul|la|vulpes||cáo}} ==={{section|pr-noun}}=== {{taxoninfl|g=f|i=1|head=[[Vulpes]] {{epinew|Vulpes|vulpes|mul}}}} # {{taxon|loài|họ|Canidae}} ===={{section|hyper}}==== * {{sense|loài}} bộ {{--}} {{taxfmt|Carnivora|bộ}}; phân bộ {{--}} {{taxfmt|Caniformia|phân bộ}}; họ {{--}}{{taxfmt|Canidae|họ}}; chi {{--}} {{taxfmt|Vulpes|chi}} ===={{section|hypo}}==== * {{sense|loài}} Để biết phân loài, xem {{R:Mammals|14000892}} * {{sense|đột biến màu sắc}} [[bastard fox]], [[brant-fox]], [[cross fox]], [[silver fox]], [[silver vixen]], [[platinum fox]], [[Samson fox]], [[marble fox]] ==={{section|further}}=== * {{pedia|Red fox|lang=en}} * {{specieslite|i=1}} * {{comcatlite|i=1}} * {{R:Mammals|14000892}} {{C|mul|Cáo}} oeo7odtb38aaofk0ng0qlj6ndm3qe1g Thể loại:mul:Cáo 14 395608 2349896 2026-05-03T12:41:44Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2349896 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Địa danh của Việt Nam/Tiếng Armenia 14 395609 2349898 2026-05-03T12:43:58Z Hiyuune 50834 Hiyuune đã đổi [[Thể loại:Địa danh của Việt Nam/Tiếng Armenia]] thành [[Thể loại:hy:Địa danh của Việt Nam]] 2349898 wikitext text/x-wiki {{Đổi hướng thể loại|Thể loại:hy:Địa danh của Việt Nam}} 4yzuar0n1r3cunncrojtwyvvlm4af24 Thể loại:Việt Nam/Tiếng Armenia 14 395610 2349901 2026-05-03T12:44:35Z Hiyuune 50834 Hiyuune đã đổi [[Thể loại:Việt Nam/Tiếng Armenia]] thành [[Thể loại:hy:Việt Nam]] 2349901 wikitext text/x-wiki {{Đổi hướng thể loại|Thể loại:hy:Việt Nam}} 3omk9m9wjuzq05ch5i0aujz1o7r52c8 Thể loại:hy:Địa danh 14 395611 2349903 2026-05-03T12:45:44Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2349903 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Quốc gia châu Phi 14 395612 2349906 2026-05-03T13:14:05Z Hiyuune 50834 Hiyuune đã đổi [[Thể loại:Quốc gia châu Phi]] thành [[Thể loại:Quốc gia của châu Phi]] 2349906 wikitext text/x-wiki {{Đổi hướng thể loại|Thể loại:Quốc gia của châu Phi}} pfvtwcfwrnmg09wonjn6fj9cccb40bq Thể loại:Châu Âu 14 395613 2349908 2026-05-03T13:15:05Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2349908 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx chreh 0 395614 2349911 2026-05-03T13:28:13Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[vạch]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349911 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[vạch]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} mgwm786m4qv2v7newtfz9fq2nrxnlit jro 0 395615 2349912 2026-05-03T13:28:42Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[chóe]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349912 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[chóe]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 5edyxenurskyu80o88krn84j3xpcycz ia bring 0 395616 2349914 2026-05-03T13:32:27Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[nước]] [[phèn]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349914 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[nước]] [[phèn]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} jjcs1xfkbcxvad8j2nj7097f9gyzs9w kơmlah 0 395617 2349915 2026-05-03T13:34:37Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[từ chối]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349915 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[từ chối]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} t3cyn8pfowju5x03zd188u5ti246ivg mrềt 0 395618 2349916 2026-05-03T13:35:21Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[lạnh]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349916 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[lạnh]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 12ela87x3grs85kbqquckd0yhx1ezpa klà 0 395619 2349917 2026-05-03T13:37:31Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[bỏ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349917 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[bỏ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} qfhdumy72og2c3bd7t0i7j3gslcm04d chơmrơp 0 395620 2349919 2026-05-03T13:38:15Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[bắt đầu]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349919 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[bắt đầu]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} ee03ym6e21tolzy4wyxmkkwrqo927k4 apùng 0 395621 2349925 2026-05-03T13:49:13Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[rơm]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349925 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[rơm]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 4al5q4yfrrcbu2evaeztuo4jns6ubqv ừn ngài 0 395622 2349927 2026-05-03T13:50:21Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[cảm ơn]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349927 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[cảm ơn]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} hudvytyqjoq5hc9621dazoapl8wc400 dơr 0 395623 2349931 2026-05-03T13:55:34Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[lấp]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349931 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[lấp]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 6s9gpn874ou1q2qhcnkjsqrjqdpsxkk Thể loại:Đại từ tiếng Chu Ru 14 395624 2349934 2026-05-03T13:57:49Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2349934 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx chơê 0 395625 2349937 2026-05-03T13:59:33Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[núi]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349937 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[núi]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 6r84niitwrr4pjzmcqr3vhjsyrcl3qc 0 395626 2349939 2026-05-03T14:00:31Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[chém]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349939 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[chém]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 3jxlo5eeprmoiico2p03pi11rdj21u2 nră 0 395627 2349941 2026-05-03T14:01:10Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[hà thủ ô]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349941 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[hà thủ ô]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 46ybbacndnxzk9q5ndmwe39j34t8np9 tơsă 0 395628 2349942 2026-05-03T14:02:19Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[chín]] (thức ăn). ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349942 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[chín]] (thức ăn). ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 7aokkwcty4a623zkz3rc0cyiankuur2 0 395629 2349944 2026-05-03T14:04:49Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[điếc]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349944 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[điếc]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} jbgg22eb88766clayfvi9fzyyvkbh7r Thể loại:Latvia 14 395630 2349945 2026-05-03T14:05:06Z Hiyuune 50834 Trang mới: “{{auto cat}}” 2349945 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx 0 395631 2349946 2026-05-03T14:05:49Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|pronoun}}=== {{head|cje|Đại từ}} # [[mày]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349946 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|pronoun}}=== {{head|cje|Đại từ}} # [[mày]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} ivqvy8k3sbee74e5e7zb4hzuf71plj0 srẽ 0 395632 2349949 2026-05-03T14:06:44Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[nợ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349949 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[nợ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 7w3uma1cpxga5a310az8dx3jfppvg24 mơnhĩ 0 395633 2349950 2026-05-03T14:08:17Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[kêu]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349950 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[kêu]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} c4ru6k93gk109ok92j13f6inh0bbg7v buơl làng 0 395634 2349952 2026-05-03T14:10:26Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[dân làng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349952 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[dân làng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} a7uk25jaui8nd8ozwm9y7wz682xessc jiã 0 395635 2349953 2026-05-03T14:11:06Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[thuế]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349953 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[thuế]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} irf3fjlmj964tld8yrm76u4h1x0s3o3 dio 0 395636 2349954 2026-05-03T14:11:27Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[rình]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349954 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[rình]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} h4omms4ijbr0vnute88ofh40bfjbhoz dien 0 395637 2349956 2026-05-03T14:11:56Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[mướp]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349956 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[mướp]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} cgu30m7mxte8h4yhq2lqn1howrjhunp lơdiơu 0 395638 2349957 2026-05-03T14:12:42Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[héo]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349957 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[héo]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} q1r89dj5xizue3h82eb2bu7t067g2xt miãu 0 395639 2349958 2026-05-03T14:13:12Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[mèo]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349958 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[mèo]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 4tu3bd1t53ywel6b2ovppobme7ghgiv kiơêu 0 395640 2349959 2026-05-03T14:13:55Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[nhái]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349959 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[nhái]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} oq6stwdqxm1bqnbc5qbwljhu4k6bhx9 huơêi 0 395641 2349960 2026-05-03T14:14:31Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[sợ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349960 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[sợ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} sshbngd2jj194a0nlg8pjx7xgtxoa4x Thể loại:Yêu cầu mục từ tiếng Tajik 14 395642 2349962 2026-05-03T14:16:21Z Kelly zhrm 58416 Trang mới: “{{auto cat}}” 2349962 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx tàl 0 395643 2349964 2026-05-03T14:17:03Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[đánh dấu]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349964 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[đánh dấu]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} k1p1ui4sphpey1p9i4wx2331muitvbm abau 0 395644 2349967 2026-05-03T14:21:11Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[ốc]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349967 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[ốc]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 363ixhvgpbds7ph24qxeyjan8vbo1ji wàr 0 395645 2349968 2026-05-03T14:21:39Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[chuồng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349968 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[chuồng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} m7phviawbh1suv9bezl1b8wyokr1ys6 joh 0 395646 2349971 2026-05-03T14:24:57Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[bẻ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349971 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[bẻ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} i0fulu8m448ljtai97ml867hippp9wh lơnàng 0 395647 2349972 2026-05-03T14:29:14Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[rộng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349972 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[rộng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} qp0wzeny87pdu8bg9aqh4nwwrf7h428 rơê 0 395648 2349973 2026-05-03T14:30:52Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[cỏ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349973 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[cỏ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} iti1iy6kkmel9iqallse4kd4gqwy1dv chùr 0 395649 2349974 2026-05-03T14:33:09Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[vôi]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349974 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[vôi]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} b22g4jynfx7lirf1nxpvnn9gwa1p2zn nhũ 0 395650 2349975 2026-05-03T14:33:36Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|pronoun}}=== {{head|cje|Đại từ}} # [[nó]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349975 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|pronoun}}=== {{head|cje|Đại từ}} # [[nó]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 4eitpy0omf2ffinx4wzrect718dn5w0 hơbơi 0 395651 2349978 2026-05-03T14:36:55Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[khoai]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349978 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[khoai]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 5lf8r0laenhuxdulvcw0xbfzz5jqks5 mrai 0 395652 2349979 2026-05-03T14:43:38Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|adv}}=== {{head|cje|Phó từ}} # [[lại]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349979 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|adv}}=== {{head|cje|Phó từ}} # [[lại]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 61eoadigel51cs6nhrnk43crajtfetv Thể loại:Phó từ tiếng Chu Ru 14 395653 2349980 2026-05-03T14:44:03Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2349980 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx dơgak 0 395654 2349984 2026-05-03T14:52:09Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[xà gạc]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349984 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[xà gạc]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 79uc8v32xvy4lj47xu19tewe1pie4xz tơmư 0 395655 2349987 2026-05-03T14:56:54Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[mạnh dạn]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349987 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[mạnh dạn]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 4ve3eahk6hsobil2x73eofqnt6azm9b lềng làng 0 395656 2349989 2026-05-03T14:59:18Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[bậy bạ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2349989 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[bậy bạ]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} b3n1rppbjkavzdbovzfh33zvr6hntq3 brơyan 0 395657 2349992 2026-05-03T15:00:54Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[mùa]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} {{c|cje|Mùa}}” 2349992 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[mùa]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} {{c|cje|Mùa}} l3du8ov2lh71y6lvrs2547cjovby8rp Thể loại:cje:Mùa 14 395658 2349993 2026-05-03T15:01:51Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2349993 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:cje:Sự kiện theo chu kỳ 14 395659 2349994 2026-05-03T15:01:58Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2349994 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thành viên:Hiyuune/Ngôn ngữ 2 395660 2349996 2026-05-03T15:13:21Z Hiyuune 50834 /* */ 2349996 wikitext text/x-wiki {{#babel:|vi-4|mul-4|la-3|no-3|et-3|en-2|ja-2|tl-2|my-2|ain-1|sv-1|da-1|sa-1}} a5nhde19di5dpjqzlx36nc6fxrvhipv 2349997 2349996 2026-05-03T15:16:59Z Hiyuune 50834 /* */ 2349997 wikitext text/x-wiki {{#babel:|vi-4|mul-4|la-3|no-3|et-3|ca-2|eu-2|de-2|en-2|ja-2|tl-2|my-2|ain-1|sv-1|da-1|sa-1}} dq3se4h8zka5qt4dbh9lcistdx5e5zc Mô đun:dialect synonyms/pl/historia 828 395661 2350003 2026-05-03T16:18:49Z Hiyuune 50834 Trang mới: “local export = {} export.title = "" export.meaning = "lịch sử" export.note = "" export.syns = { ["Standard"] = { "historia", "historya<l:pl-pre-1816>", "historja<l:pl-pre-1936>" }, ["Middle Polish"] = { "historyja<alt:historyjá>", "istoryja<alt:istoryjá>" }, ["Zakopane"] = { "jistoryja" }, ["Lasovia"] = { "krystoryja" }, ["Ropczyce"] = { "krystoryja" }, ["Podegrodzie"] = { "kfisteryja" }, } return export” 2350003 Scribunto text/plain local export = {} export.title = "" export.meaning = "lịch sử" export.note = "" export.syns = { ["Standard"] = { "historia", "historya<l:pl-pre-1816>", "historja<l:pl-pre-1936>" }, ["Middle Polish"] = { "historyja<alt:historyjá>", "istoryja<alt:istoryjá>" }, ["Zakopane"] = { "jistoryja" }, ["Lasovia"] = { "krystoryja" }, ["Ropczyce"] = { "krystoryja" }, ["Podegrodzie"] = { "kfisteryja" }, } return export hykmkbchdb6de4it2fhwcwkee6y2cea Jozefino 0 395662 2350004 2026-05-03T16:21:44Z Hiyuune 50834 /* */ + eo 2350004 wikitext text/x-wiki =={{langname|eo}}== ==={{section|pron}}=== {{eo-pr}} ==={{section|pr-noun}}=== {{eo-head}} # {{given name|eo|nữ|eq=Josephine}}. dp9k4huz640mbw6fmaxewktz2hinlow abakterian 0 395663 2350005 2026-05-03T16:23:07Z Hiyuune 50834 Trang mới: “=={{langname|eo}}== ==={{section|adj}}=== {{eo-head}} # {{eo-form of|abakteri|an}}” 2350005 wikitext text/x-wiki =={{langname|eo}}== ==={{section|adj}}=== {{eo-head}} # {{eo-form of|abakteri|an}} lagza4x5cov1gjtogv1w3ey3nfpd85i ҷамъро 0 395664 2350010 2026-05-04T00:37:20Z Hiyuune 50834 Trang mới: “=={{langname|tg}}== ==={{ĐM|n}}=== {{head|tg|Biến thể hình thái danh từ}} # {{infl of|tg|ҷамъ||obj|def|sg}}” 2350010 wikitext text/x-wiki =={{langname|tg}}== ==={{ĐM|n}}=== {{head|tg|Biến thể hình thái danh từ}} # {{infl of|tg|ҷамъ||obj|def|sg}} 53xvwsg5y60xn44lwjxy7pr7dc0o6no pơrpau 0 395665 2350011 2026-05-04T00:42:35Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[vò]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2350011 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[vò]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} lyr6lvutfx5n13i1vxn6dd54pfaj3sf pơmdơh 0 395666 2350013 2026-05-04T00:45:24Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[đánh thức]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2350013 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[đánh thức]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} dhfyi0ud7slkarywze8pol17f1j9qz6 sơrbil 0 395667 2350014 2026-05-04T00:46:21Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[táo bạo]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2350014 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|adj}}=== {{head|cje|Tính từ}} # [[táo bạo]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 4i3ab2xkxu4vynyaw9qgwmr0n7xluf1 kơryuơn 0 395668 2350016 2026-05-04T00:50:46Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[xoáy]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2350016 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[xoáy]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} qc6ceoyfd771g0uqarh1y88mvna49xr dơrgloh nong 0 395669 2350017 2026-05-04T00:52:56Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[nổi giận]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2350017 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|verb}}=== {{head|cje|Động từ}} # [[nổi giận]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} j9rk3qlwmgyimvipeez10d1eepm6clh õhuga 0 395670 2350018 2026-05-04T02:07:12Z Hiyuune 50834 + et 2350018 wikitext text/x-wiki =={{langname|et}}== ==={{section|n}}=== {{head|et|Biến thể hình thái danh từ}} # {{noun form of|et|õhk||com|s}} i5b8yjsjaga2fayom1mg3f2flx8gjf0 õhuna 0 395671 2350019 2026-05-04T02:07:49Z Hiyuune 50834 + et 2350019 wikitext text/x-wiki =={{langname|et}}== ==={{section|n}}=== {{head|et|Biến thể hình thái danh từ}} # {{noun form of|et|õhk||ess|s}} hmjptajl1u3y2uc89berny18893yo5u õhust 0 395672 2350020 2026-05-04T02:08:27Z Hiyuune 50834 + et 2350020 wikitext text/x-wiki =={{langname|et}}== ==={{section|n}}=== {{head|et|Biến thể hình thái danh từ}} # {{noun form of|et|õhk||ela|s}} gj7d5ulihg9qh1schgjv9njf2jd8cro julho 0 395673 2350021 2026-05-04T03:00:42Z Kelly zhrm 58416 Trang mới: “{{also|Julho}} =={{langname|pt}}== ==={{ĐM|alt}}=== * {{alt|pt|jul.||abbreviation}} * {{alt|pt|Julho||pre-1990|Portugal}} ==={{ĐM|etym}}=== {{inh+|pt|roa-opt|julio|jullo, julio}}, từ {{inh|pt|la|iulius}}. ==={{ĐM|pron}}=== {{pt-IPA}} * {{rhymes|pt|uʎu|s=2}} * {{hyphenation|pt|ju|lho}} ==={{ĐM|n}}=== {{pt-noun|m}} # [[tháng Bảy|Tháng Bảy]]. ===={{ĐM|drv}}==== {{col|pt|Julho Amarelo|}} ===={{ĐM|rel}}==== {{col|pt|julino}} ===={{ĐM|desc}}==== * {{desc…” 2350021 wikitext text/x-wiki {{also|Julho}} =={{langname|pt}}== ==={{ĐM|alt}}=== * {{alt|pt|jul.||abbreviation}} * {{alt|pt|Julho||pre-1990|Portugal}} ==={{ĐM|etym}}=== {{inh+|pt|roa-opt|julio|jullo, julio}}, từ {{inh|pt|la|iulius}}. ==={{ĐM|pron}}=== {{pt-IPA}} * {{rhymes|pt|uʎu|s=2}} * {{hyphenation|pt|ju|lho}} ==={{ĐM|n}}=== {{pt-noun|m}} # [[tháng Bảy|Tháng Bảy]]. ===={{ĐM|drv}}==== {{col|pt|Julho Amarelo|}} ===={{ĐM|rel}}==== {{col|pt|julino}} ===={{ĐM|desc}}==== * {{desc|kea|julhu}} * {{desc|kok|ज्यूल|जूल|bor=1}} * {{desc|tet|jullu|bor=1}} ===={{ĐM|see}}==== {{list:Gregorian calendar months/pt}} rc7fru8t4py63i5262wigv3tl8qte0t kơyơu pơla 0 395674 2350022 2026-05-04T03:05:28Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[cây trồng]]. #:{{ux|cje|'''Kơyơu pơla''' tơma srồh mơtah, tơmuh kơpàl.|'''Cây trồng''' đã bắt đầu xanh tốt, mọc dày.}} ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet…” 2350022 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[cây trồng]]. #:{{ux|cje|'''Kơyơu pơla''' tơma srồh mơtah, tơmuh kơpàl.|'''Cây trồng''' đã bắt đầu xanh tốt, mọc dày.}} ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} npo99a79r5jwta18rgi22qc3pgv3xoc thàn 0 395675 2350023 2026-05-04T03:07:03Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[cành]], [[nhánh]]. #:{{ux|cje|treh bờt '''thàn '''brơi kơyơu dơgù glòng|tỉa bớt '''nhánh '''cho cây vươn cao}} ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-…” 2350023 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[cành]], [[nhánh]]. #:{{ux|cje|treh bờt '''thàn '''brơi kơyơu dơgù glòng|tỉa bớt '''nhánh '''cho cây vươn cao}} ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} gdp2l14zie3kjsgu4hsfzg3uuasheeg kơyơu glai 0 395676 2350024 2026-05-04T03:08:28Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[cây]] [[rừng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}}” 2350024 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[cây]] [[rừng]]. ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 154wp2gwyczrxvpvjlhz5zcxqre7lcw jơtài jơtung 0 395677 2350025 2026-05-04T03:10:16Z WhoAlone 40420 Trang mới: “=={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[tài sản]]. #:{{ux|cje|Glai la '''jơtài jơtung''', glai yơu mừh.|Rừng là '''tài sản''', rừng như vàng.}} ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-ph…” 2350025 wikitext text/x-wiki =={{langname|cje}}== ==={{ĐM|noun}}=== {{head|cje|Danh từ}} # [[tài sản]]. #:{{ux|cje|Glai la '''jơtài jơtung''', glai yơu mừh.|Rừng là '''tài sản''', rừng như vàng.}} ==={{ĐM|ref}}=== * {{Chú thích web|author=Ủy ban Nhân dân tỉnh Lâm Đồng|title=Quyết định Phê duyệt phương án chữ viết tiếng Chu Ru|work=Thư viện Pháp luật|date=10-04-2007|url=https://thuvienphapluat.vn/van-ban/Giao-duc/Quyet-dinh-15-2007-QD-UBND-phe-duyet-Phuong-an-chu-viet-tieng-Chu-Ru-102173.aspx}} 1hoispwfzfuk3mrwq6uca9g56wcbauz agosto 0 395678 2350026 2026-05-04T03:14:27Z Kelly zhrm 58416 - 2350026 wikitext text/x-wiki {{also|Agosto}} =={{langname|an}}== ==={{ĐM|etym}}=== Từ {{inh|an|la-vul|agustus}}, từ {{inh|an|la|augustus}}. ==={{ĐM|pron}}=== {{an-pr}} ==={{ĐM|n}}=== {{an-noun/new|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|see}}==== {{list:Gregorian calendar months/an}} ==={{ĐM|ref}}=== * {{R:an:Aragonario|es=agosto}} =={{langname|cim}}== ==={{ĐM|etym}}=== Vay mượn từ {{bor|cim|it|agosto}}, từ {{der|cim|la|augustus}}. ==={{ĐM|n}}=== {{cim-noun|m}} # {{lb|cim|Luserna}} [[tháng Tám|Tháng Tám]]. #: {{syn|cim|agòsten|snittmånat}} ==={{ĐM|see}}=== {{list:Gregorian calendar months/cim/Luserna}} ==={{ĐM|ref}}=== * {{R:Patuzzi}} {{c|cim|Tháng}} =={{langname|nhe}}== ==={{ĐM|etym}}=== Vay mượn từ {{bor|nhe|es|agosto}}. ==={{ĐM|n}}=== {{head|nhe|Danh từ}} # [[tháng Tám|Tháng Tám]]. {{c|nhe|Tháng}} =={{langname|gl}}== {{wp|gl:}} ==={{ĐM|alt}}=== * {{alt|gl|ago.||abbreviation}} ==={{ĐM|etym}}=== Từ {{inh|gl|roa-opt|agosto}}, từ {{inh|gl|la-vul|agustus}}, từ {{inh|gl|la|augustus}}. ==={{ĐM|pron}}=== {{gl-pr|agôsto}} * {{hyph|gl|a|gos|to}} ==={{ĐM|n}}=== {{gl-noun|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|see}}==== {{list:Gregorian calendar months/gl}} ==={{ĐM|further}}=== * {{R:gl:DRAG}} * {{R:gl:Estraviz}} =={{langname|io}}== ==={{ĐM|n}}=== {{io-noun|agost}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|see}}=== {{list:Gregorian calendar months/io}} =={{langname|ilo}}== ==={{ĐM|etym}}=== Từ {{bor|ilo|es|agosto}}, từ {{der|ilo|la-vul|agustus}}, từ {{der|ilo|la|augustus}}. ==={{ĐM|n}}=== {{ilo-noun}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|see}}=== {{list:Gregorian calendar months/ilo}} =={{langname|ist}}== ==={{ĐM|etym}}=== Từ {{inh|ist|la-vul|agustus}}, từ {{inh|ist|la|augustus}}. ==={{ĐM|n}}=== {{head|ist|Danh từ|g=m}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|ref}}=== *{{cite-book|author=Antonio Pellizzer|title=Vocabulario del dialetto di Rovigno d'Istria|page=39|passage=|year=1992|author2=Giovanni Pellizzer}} * {{cite-book|author=Sandro Cergna|title=Vocabolario del dialetto di Valle d'Istria|page=22|passage=|year=2015|isbn=9789537891114}} =={{langname|lad}}== ==={{ĐM|etym}}=== Từ {{inh|lad|la|augustus}}. ==={{ĐM|n}}=== {{lad-noun|g=m}} # [[August]] {{c|lad|Months}} ==Old Galician-Portuguese== ===Etymology=== {{etymon|roa-opt|id=month|:inh|la-vul:agustus<ety:der<la:augustus>>}} From {{inh|roa-opt|la-vul|agustus}}, from {{inh|roa-opt|la|augustus}}. ===Pronunciation=== * {{q|Galicia}} {{IPA|roa-opt|/aˈɡos̺.to/}} * {{q|Portugal}} {{IPA|roa-opt|/aˈɡos̺.tʊ/}} ===Noun=== {{roa-opt-noun|m}} # {{l|en|August}} #* {{RQ:roa-opt:Cantigas de Santa Maria|E|419|http://www.pbm.com/~lindahl/cantigas/facsimiles/To/bob093small.gif|passage=Eſto foi en '''agoſto''' en meyante do mes|translation=This happened in the middle of the month of '''August'''}} ====Descendants==== * {{desc|fax|agostu}} * {{desc|gl|agosto}} * {{desc|pt|agosto}} {{see desc}} ===See also=== {{list:Gregorian calendar months/roa-opt}} {{c|roa-opt|Months}} ==Portuguese== ===Alternative forms=== * {{alt|pt|ago.||abbreviation}} * {{alt|pt|Agosto||pre-1990}} * {{alt|pt|agôsto<!--|Agôsto-->||pre-reform}} ===Etymology=== {{etymon|pt|id=month|:inh|roa-opt:agosto}} {{inh+|pt|roa-opt|agosto}}, from {{inh|pt|la-vul|agustus}}, from {{inh|pt|la|augustus}}. {{doublet|pt|augusto}}. ===Pronunciation=== {{pt-IPA|[osto:ôsto]}} * {{rhymes|pt|ostu|q1=Brazil|oʃtu|q2=Portugal, Rio de Janeiro|s=3}} * {{hmp|pt|a gosto}} * {{hyph|pt|a|gos|to}} ===Noun=== {{pt-noun|m}} # [[August]] ====Descendants==== * {{desc|pov|Agostu}} * {{desc|kea|agostu}} * {{desc|inc-hnd|-|der=1}} ** {{desc|hi|अगस्त}} ** {{desc|ur|اَگَسْت}} * {{desc|mr|आगस्त|der=1|ll=dated}} * {{desc|kok|आगोस्त|bor=1}} * {{desc|ml|അഗൊസ്തു|bor=1}} * {{desc|si|අගෝස්තු|bor=1}} * {{desc|tet|agostu|bor=1}} ====See also==== {{list:Gregorian calendar months/pt}} ===Further reading=== * {{R:pt:Aulete}} ==San Pedro Amuzgos Amuzgo== ===Etymology=== Borrowed from {{bor|azg|es|agosto}}, from {{der|azg|la|augustus}}. ===Noun=== {{head|azg|noun}} # [[August]] {{topics|azg|Months}} ===References=== * {{R:Stewart et al. 2000}} ==Spanish== ===Pronunciation=== {{es-pr}} ===Etymology 1=== {{inh+|es|la-vul|agustus}}, from {{inh|es|la|augustus}}. ====Alternative forms==== * {{alt|es|ago.|ago||abbreviation}} ====Noun==== {{es-noun|m}} # [[August]] =====Derived terms===== {{col|es |agostar |agosteño |agostero |agostino |hacer su agosto }} =====Related terms===== {{col|es|augusto|Augusto}} =====Descendants===== * {{desc|bcl|Agosto|bor=1}} * {{desc|ceb|Agosto|bor=1}} * {{desc|ch|Ågosto|bor=1}} * {{desc|cbk|Agosto|bor=1}} * {{desc|hnn|Agusto|bor=1}} * {{desc|ilo|Agosto|bor=1}} * {{desc|pam|Agostu|bor=1}} * {{desc|pag|Agosto|bor=1}} * {{desc|tl|Agosto|bor=1}} * {{desc|war|Agosto|bor=1}} * {{desc|zpq|agost|bor=1}} =====See also===== {{list:Gregorian calendar months/es}} ===Etymology 2=== ====Verb==== {{head|es|verb form}} # {{es-verb form of|agostar}} ===Further reading=== * {{R:es:DRAE}} * {{pedia|lang=es}} ==Venetan== ===Etymology=== From {{inh|vec|la-vul|agustus}}, from {{inh|vec|la|augustus}}. Compare {{cog|it|agosto}}. ===Noun=== {{wp|vec:}} {{vec-noun|agost|m|o|i}} # [[August]] {{c|vec|Months}} =={{langname|it}}== ==={{ĐM|alt}}=== * {{alt|it|ago.|ago||abbreviation}} ==={{ĐM|etym}}=== Từ {{inh|it|la-vul|agustus}}, từ {{inh|it|la|augustus}}. {{doublet|it|Augusto}}. ==={{ĐM|pron}}=== {{it-pr|agósto<audio:It-agosto.ogg>}} ==={{ĐM|n}}=== {{it-noun|m|-}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|drv}}==== * {{l|it|agostamento}} ===={{ĐM|desc}}==== * {{desc|cim|agosto|bor=1}} * {{desc|so|agoosto|bor=1}} ===={{ĐM|see}}==== {{list:Gregorian calendar months/it}} ===={{ĐM|ref}}==== *[https://www.treccani.it/enciclopedia/nomi-difettivi_(La-grammatica-italiana)/ ''nomi difettivi'', in ''La grammatica italiana "Treccani"''] *[https://dizionari.repubblica.it/Italiano/A/agosto.html ''"agosto"'', in ''Dizionario di italiano "Hoepli"''] 1y2zbvlf83kxlk381i47uil3mh1nta0 2350034 2350026 2026-05-04T03:23:31Z Kelly zhrm 58416 2350034 wikitext text/x-wiki {{also|Agosto}} =={{langname|an}}== ==={{ĐM|etym}}=== Từ {{inh|an|la-vul|agustus}}, từ {{inh|an|la|augustus}}. ==={{ĐM|pron}}=== {{an-pr}} ==={{ĐM|n}}=== {{an-noun/new|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|see}}==== {{list:Gregorian calendar months/an}} ==={{ĐM|ref}}=== * {{R:an:Aragonario|es=agosto}} =={{langname|cim}}== ==={{ĐM|etym}}=== Vay mượn từ {{bor|cim|it|agosto}}, từ {{der|cim|la|augustus}}. ==={{ĐM|n}}=== {{cim-noun|m}} # {{lb|cim|Luserna}} [[tháng Tám|Tháng Tám]]. #: {{syn|cim|agòsten|snittmånat}} ==={{ĐM|see}}=== {{list:Gregorian calendar months/cim/Luserna}} ==={{ĐM|ref}}=== * {{R:Patuzzi}} {{c|cim|Tháng}} =={{langname|nhe}}== ==={{ĐM|etym}}=== Vay mượn từ {{bor|nhe|es|agosto}}. ==={{ĐM|n}}=== {{head|nhe|Danh từ}} # [[tháng Tám|Tháng Tám]]. {{c|nhe|Tháng}} =={{langname|gl}}== {{wp|gl:}} ==={{ĐM|alt}}=== * {{alt|gl|ago.||abbreviation}} ==={{ĐM|etym}}=== Từ {{inh|gl|roa-opt|agosto}}, từ {{inh|gl|la-vul|agustus}}, từ {{inh|gl|la|augustus}}. ==={{ĐM|pron}}=== {{gl-pr|agôsto}} * {{hyph|gl|a|gos|to}} ==={{ĐM|n}}=== {{gl-noun|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|see}}==== {{list:Gregorian calendar months/gl}} ==={{ĐM|further}}=== * {{R:gl:DRAG}} * {{R:gl:Estraviz}} =={{langname|io}}== ==={{ĐM|n}}=== {{io-noun|agost}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|see}}=== {{list:Gregorian calendar months/io}} =={{langname|ilo}}== ==={{ĐM|etym}}=== Từ {{bor|ilo|es|agosto}}, từ {{der|ilo|la-vul|agustus}}, từ {{der|ilo|la|augustus}}. ==={{ĐM|n}}=== {{ilo-noun}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|see}}=== {{list:Gregorian calendar months/ilo}} =={{langname|ist}}== ==={{ĐM|etym}}=== Từ {{inh|ist|la-vul|agustus}}, từ {{inh|ist|la|augustus}}. ==={{ĐM|n}}=== {{head|ist|Danh từ|g=m}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|ref}}=== *{{cite-book|author=Antonio Pellizzer|title=Vocabulario del dialetto di Rovigno d'Istria|page=39|passage=|year=1992|author2=Giovanni Pellizzer}} * {{cite-book|author=Sandro Cergna|title=Vocabolario del dialetto di Valle d'Istria|page=22|passage=|year=2015|isbn=9789537891114}} =={{langname|lad}}== ==={{ĐM|etym}}=== Từ {{inh|lad|la|augustus}}. ==={{ĐM|n}}=== {{lad-noun|g=m}} # [[tháng Tám|Tháng Tám]]. {{c|lad|Tháng}} =={{langname|roa-opt}}== ==={{ĐM|etym}}=== {{etymon|roa-opt|id=month|:inh|la-vul:agustus<ety:der<la:augustus>>}} Từ {{inh|roa-opt|la-vul|agustus}}, từ {{inh|roa-opt|la|augustus}}. ==={{ĐM|pron}}=== * {{q|Galicia}} {{IPA4|roa-opt|/aˈɡos̺.to/}} * {{q|Bồ Đào Nha}} {{IPA4|roa-opt|/aˈɡos̺.tʊ/}} ==={{ĐM|n}}=== {{roa-opt-noun|m}} # [[tháng Tám|Tháng Tám]]. #* {{RQ:roa-opt:Cantigas de Santa Maria|E|419|http://www.pbm.com/~lindahl/cantigas/facsimiles/To/bob093small.gif|passage=Eſto foi en '''agoſto''' en meyante do mes|translation=Việc này xảy ra vào giữa '''tháng Tám'''}} ===={{ĐM|desc}}==== * {{desc|fax|agostu}} * {{desc|gl|agosto}} * {{desc|pt|agosto}} {{see desc}} ==={{ĐM|see}}=== {{list:Gregorian calendar months/roa-opt}} {{c|roa-opt|Tháng}} =={{langname|pt}}== ==={{ĐM|alt}}=== * {{alt|pt|ago.||abbreviation}} * {{alt|pt|Agosto||pre-1990}} * {{alt|pt|agôsto<!--|Agôsto-->||pre-reform}} ==={{ĐM|etym}}=== {{etymon|pt|id=month|:inh|roa-opt:agosto}} {{inh+|pt|roa-opt|agosto}}, từ {{inh|pt|la-vul|agustus}}, từ {{inh|pt|la|augustus}}. {{doublet|pt|augusto}}. ==={{ĐM|pron}}=== {{pt-IPA|[osto:ôsto]}} * {{rhymes|pt|ostu|q1=Brazil|oʃtu|q2=Portugal, Rio de Janeiro|s=3}} * {{hmp|pt|a gosto}} * {{hyph|pt|a|gos|to}} ==={{ĐM|n}}=== {{pt-noun|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|desc}}==== * {{desc|pov|Agostu}} * {{desc|kea|agostu}} * {{desc|inc-hnd|-|der=1}} ** {{desc|hi|अगस्त}} ** {{desc|ur|اَگَسْت}} * {{desc|mr|आगस्त|der=1|ll=dated}} * {{desc|kok|आगोस्त|bor=1}} * {{desc|ml|അഗൊസ്തു|bor=1}} * {{desc|si|අගෝස්තු|bor=1}} * {{desc|tet|agostu|bor=1}} ===={{ĐM|see}}==== {{list:Gregorian calendar months/pt}} ==={{ĐM|further}}=== * {{R:pt:Aulete}} =={{langname|azg}}== ===Etymology=== Borrowed from {{bor|azg|es|agosto}}, from {{der|azg|la|augustus}}. ===Noun=== {{head|azg|noun}} # [[August]] {{topics|azg|Months}} ===References=== * {{R:Stewart et al. 2000}} =={{langname|es}}== ==={{ĐM|pron}}=== {{es-pr}} ==={{ĐM|etym}} 1=== {{inh+|es|la-vul|agustus}}, từ {{inh|es|la|augustus}}. ===={{ĐM|alt}}==== * {{alt|es|ago.|ago||abbreviation}} ===={{ĐM|n}}==== {{es-noun|m}} # [[tháng Tám|Tháng Tám]]. ====={{ĐM|drv}}===== {{col|es |agostar |agosteño |agostero |agostino |hacer su agosto }} ====={{ĐM|rel}}===== {{col|es|augusto|Augusto}} ====={{ĐM|desc}}===== * {{desc|bcl|Agosto|bor=1}} * {{desc|ceb|Agosto|bor=1}} * {{desc|ch|Ågosto|bor=1}} * {{desc|cbk|Agosto|bor=1}} * {{desc|hnn|Agusto|bor=1}} * {{desc|ilo|Agosto|bor=1}} * {{desc|pam|Agostu|bor=1}} * {{desc|pag|Agosto|bor=1}} * {{desc|tl|Agosto|bor=1}} * {{desc|war|Agosto|bor=1}} * {{desc|zpq|agost|bor=1}} ====={{ĐM|see}}===== {{list:Gregorian calendar months/es}} ==={{ĐM|etym}} 2=== ===={{ĐM|v}}==== {{head|es|Biến thể hình thái động từ}} # {{es-verb form of|agostar}} ==={{ĐM|further}}=== * {{R:es:DRAE}} * {{pedia|lang=es}} =={{langname|vec}}== ==={{ĐM|etym}}=== Từ {{inh|vec|la-vul|agustus}}, từ {{inh|vec|la|augustus}}. Compare {{cog|it|agosto}}. ==={{ĐM|n}}=== {{wp|vec:}} {{vec-noun|agost|m|o|i}} # [[tháng Tám|Tháng Tám]]. {{c|vec|Tháng}} =={{langname|it}}== ==={{ĐM|alt}}=== * {{alt|it|ago.|ago||abbreviation}} ==={{ĐM|etym}}=== Từ {{inh|it|la-vul|agustus}}, từ {{inh|it|la|augustus}}. {{doublet|it|Augusto}}. ==={{ĐM|pron}}=== {{it-pr|agósto<audio:It-agosto.ogg>}} ==={{ĐM|n}}=== {{it-noun|m|-}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|drv}}==== * {{l|it|agostamento}} ===={{ĐM|desc}}==== * {{desc|cim|agosto|bor=1}} * {{desc|so|agoosto|bor=1}} ===={{ĐM|see}}==== {{list:Gregorian calendar months/it}} ===={{ĐM|ref}}==== *[https://www.treccani.it/enciclopedia/nomi-difettivi_(La-grammatica-italiana)/ ''nomi difettivi'', in ''La grammatica italiana "Treccani"''] *[https://dizionari.repubblica.it/Italiano/A/agosto.html ''"agosto"'', in ''Dizionario di italiano "Hoepli"''] o5fbyv27ya936dd5h0si6qbptqsto8w 2350038 2350034 2026-05-04T03:25:50Z Kelly zhrm 58416 2350038 wikitext text/x-wiki {{also|Agosto}} =={{langname|an}}== ==={{ĐM|etym}}=== Từ {{inh|an|la-vul|agustus}}, từ {{inh|an|la|augustus}}. ==={{ĐM|pron}}=== {{an-pr}} ==={{ĐM|n}}=== {{an-noun/new|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|see}}==== {{list:Gregorian calendar months/an}} ==={{ĐM|ref}}=== * {{R:an:Aragonario|es=agosto}} =={{langname|pt}}== ==={{ĐM|alt}}=== * {{alt|pt|ago.||abbreviation}} * {{alt|pt|Agosto||pre-1990}} * {{alt|pt|agôsto<!--|Agôsto-->||pre-reform}} ==={{ĐM|etym}}=== {{etymon|pt|id=month|:inh|roa-opt:agosto}} {{inh+|pt|roa-opt|agosto}}, từ {{inh|pt|la-vul|agustus}}, từ {{inh|pt|la|augustus}}. {{doublet|pt|augusto}}. ==={{ĐM|pron}}=== {{pt-IPA|[osto:ôsto]}} * {{rhymes|pt|ostu|q1=Brazil|oʃtu|q2=Bồ Đào Nha, Rio de Janeiro|s=3}} * {{hmp|pt|a gosto}} * {{hyph|pt|a|gos|to}} ==={{ĐM|n}}=== {{pt-noun|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|desc}}==== * {{desc|pov|Agostu}} * {{desc|kea|agostu}} * {{desc|inc-hnd|-|der=1}} ** {{desc|hi|अगस्त}} ** {{desc|ur|اَگَسْت}} * {{desc|mr|आगस्त|der=1|ll=dated}} * {{desc|kok|आगोस्त|bor=1}} * {{desc|ml|അഗൊസ്തു|bor=1}} * {{desc|si|අගෝස්තු|bor=1}} * {{desc|tet|agostu|bor=1}} ===={{ĐM|see}}==== {{list:Gregorian calendar months/pt}} ==={{ĐM|further}}=== * {{R:pt:Aulete}} =={{langname|cim}}== ==={{ĐM|etym}}=== Vay mượn từ {{bor|cim|it|agosto}}, từ {{der|cim|la|augustus}}. ==={{ĐM|n}}=== {{cim-noun|m}} # {{lb|cim|Luserna}} [[tháng Tám|Tháng Tám]]. #: {{syn|cim|agòsten|snittmånat}} ==={{ĐM|see}}=== {{list:Gregorian calendar months/cim/Luserna}} ==={{ĐM|ref}}=== * {{R:Patuzzi}} {{c|cim|Tháng}} =={{langname|nhe}}== ==={{ĐM|etym}}=== Vay mượn từ {{bor|nhe|es|agosto}}. ==={{ĐM|n}}=== {{head|nhe|Danh từ}} # [[tháng Tám|Tháng Tám]]. {{c|nhe|Tháng}} =={{langname|gl}}== {{wp|gl:}} ==={{ĐM|alt}}=== * {{alt|gl|ago.||abbreviation}} ==={{ĐM|etym}}=== Từ {{inh|gl|roa-opt|agosto}}, từ {{inh|gl|la-vul|agustus}}, từ {{inh|gl|la|augustus}}. ==={{ĐM|pron}}=== {{gl-pr|agôsto}} * {{hyph|gl|a|gos|to}} ==={{ĐM|n}}=== {{gl-noun|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|see}}==== {{list:Gregorian calendar months/gl}} ==={{ĐM|further}}=== * {{R:gl:DRAG}} * {{R:gl:Estraviz}} =={{langname|io}}== ==={{ĐM|n}}=== {{io-noun|agost}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|see}}=== {{list:Gregorian calendar months/io}} =={{langname|ilo}}== ==={{ĐM|etym}}=== Từ {{bor|ilo|es|agosto}}, từ {{der|ilo|la-vul|agustus}}, từ {{der|ilo|la|augustus}}. ==={{ĐM|n}}=== {{ilo-noun}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|see}}=== {{list:Gregorian calendar months/ilo}} =={{langname|ist}}== ==={{ĐM|etym}}=== Từ {{inh|ist|la-vul|agustus}}, từ {{inh|ist|la|augustus}}. ==={{ĐM|n}}=== {{head|ist|Danh từ|g=m}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|ref}}=== *{{cite-book|author=Antonio Pellizzer|title=Vocabulario del dialetto di Rovigno d'Istria|page=39|passage=|year=1992|author2=Giovanni Pellizzer}} * {{cite-book|author=Sandro Cergna|title=Vocabolario del dialetto di Valle d'Istria|page=22|passage=|year=2015|isbn=9789537891114}} =={{langname|lad}}== ==={{ĐM|etym}}=== Từ {{inh|lad|la|augustus}}. ==={{ĐM|n}}=== {{lad-noun|g=m}} # [[tháng Tám|Tháng Tám]]. {{c|lad|Tháng}} =={{langname|roa-opt}}== ==={{ĐM|etym}}=== {{etymon|roa-opt|id=month|:inh|la-vul:agustus<ety:der<la:augustus>>}} Từ {{inh|roa-opt|la-vul|agustus}}, từ {{inh|roa-opt|la|augustus}}. ==={{ĐM|pron}}=== * {{q|Galicia}} {{IPA4|roa-opt|/aˈɡos̺.to/}} * {{q|Bồ Đào Nha}} {{IPA4|roa-opt|/aˈɡos̺.tʊ/}} ==={{ĐM|n}}=== {{roa-opt-noun|m}} # [[tháng Tám|Tháng Tám]]. #* {{RQ:roa-opt:Cantigas de Santa Maria|E|419|http://www.pbm.com/~lindahl/cantigas/facsimiles/To/bob093small.gif|passage=Eſto foi en '''agoſto''' en meyante do mes|translation=Việc này xảy ra vào giữa '''tháng Tám'''}} ===={{ĐM|desc}}==== * {{desc|fax|agostu}} * {{desc|gl|agosto}} * {{desc|pt|agosto}} {{see desc}} ==={{ĐM|see}}=== {{list:Gregorian calendar months/roa-opt}} {{c|roa-opt|Tháng}} =={{langname|es}}== ==={{ĐM|pron}}=== {{es-pr}} ==={{ĐM|etym}} 1=== {{inh+|es|la-vul|agustus}}, từ {{inh|es|la|augustus}}. ===={{ĐM|alt}}==== * {{alt|es|ago.|ago||abbreviation}} ===={{ĐM|n}}==== {{es-noun|m}} # [[tháng Tám|Tháng Tám]]. ====={{ĐM|drv}}===== {{col|es |agostar |agosteño |agostero |agostino |hacer su agosto }} ====={{ĐM|rel}}===== {{col|es|augusto|Augusto}} ====={{ĐM|desc}}===== * {{desc|bcl|Agosto|bor=1}} * {{desc|ceb|Agosto|bor=1}} * {{desc|ch|Ågosto|bor=1}} * {{desc|cbk|Agosto|bor=1}} * {{desc|hnn|Agusto|bor=1}} * {{desc|ilo|Agosto|bor=1}} * {{desc|pam|Agostu|bor=1}} * {{desc|pag|Agosto|bor=1}} * {{desc|tl|Agosto|bor=1}} * {{desc|war|Agosto|bor=1}} * {{desc|zpq|agost|bor=1}} ====={{ĐM|see}}===== {{list:Gregorian calendar months/es}} ==={{ĐM|etym}} 2=== ===={{ĐM|v}}==== {{head|es|Biến thể hình thái động từ}} # {{es-verb form of|agostar}} ==={{ĐM|further}}=== * {{R:es:DRAE}} * {{pedia|lang=es}} =={{langname|vec}}== ==={{ĐM|etym}}=== Từ {{inh|vec|la-vul|agustus}}, từ {{inh|vec|la|augustus}}. So sánh với {{cog|it|agosto}}. ==={{ĐM|n}}=== {{wp|vec:}} {{vec-noun|agost|m|o|i}} # [[tháng Tám|Tháng Tám]]. {{c|vec|Tháng}} =={{langname|it}}== ==={{ĐM|alt}}=== * {{alt|it|ago.|ago||abbreviation}} ==={{ĐM|etym}}=== Từ {{inh|it|la-vul|agustus}}, từ {{inh|it|la|augustus}}. {{doublet|it|Augusto}}. ==={{ĐM|pron}}=== {{it-pr|agósto<audio:It-agosto.ogg>}} ==={{ĐM|n}}=== {{it-noun|m|-}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|drv}}==== * {{l|it|agostamento}} ===={{ĐM|desc}}==== * {{desc|cim|agosto|bor=1}} * {{desc|so|agoosto|bor=1}} ===={{ĐM|see}}==== {{list:Gregorian calendar months/it}} ===={{ĐM|ref}}==== *[https://www.treccani.it/enciclopedia/nomi-difettivi_(La-grammatica-italiana)/ ''nomi difettivi'', in ''La grammatica italiana "Treccani"''] *[https://dizionari.repubblica.it/Italiano/A/agosto.html ''"agosto"'', in ''Dizionario di italiano "Hoepli"''] sf503fe96rezxlpy3vqtov34q0ru3w7 2350039 2350038 2026-05-04T03:26:16Z Kelly zhrm 58416 /* {{ĐM|pron}} */ 2350039 wikitext text/x-wiki {{also|Agosto}} =={{langname|an}}== ==={{ĐM|etym}}=== Từ {{inh|an|la-vul|agustus}}, từ {{inh|an|la|augustus}}. ==={{ĐM|pron}}=== {{an-pr}} ==={{ĐM|n}}=== {{an-noun/new|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|see}}==== {{list:Gregorian calendar months/an}} ==={{ĐM|ref}}=== * {{R:an:Aragonario|es=agosto}} =={{langname|pt}}== ==={{ĐM|alt}}=== * {{alt|pt|ago.||abbreviation}} * {{alt|pt|Agosto||pre-1990}} * {{alt|pt|agôsto<!--|Agôsto-->||pre-reform}} ==={{ĐM|etym}}=== {{etymon|pt|id=month|:inh|roa-opt:agosto}} {{inh+|pt|roa-opt|agosto}}, từ {{inh|pt|la-vul|agustus}}, từ {{inh|pt|la|augustus}}. {{doublet|pt|augusto}}. ==={{ĐM|pron}}=== {{pt-IPA|[osto:ôsto]}} * {{rhymes|pt|ostu|q1=Brasil|oʃtu|q2=Bồ Đào Nha, Rio de Janeiro|s=3}} * {{hmp|pt|a gosto}} * {{hyph|pt|a|gos|to}} ==={{ĐM|n}}=== {{pt-noun|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|desc}}==== * {{desc|pov|Agostu}} * {{desc|kea|agostu}} * {{desc|inc-hnd|-|der=1}} ** {{desc|hi|अगस्त}} ** {{desc|ur|اَگَسْت}} * {{desc|mr|आगस्त|der=1|ll=dated}} * {{desc|kok|आगोस्त|bor=1}} * {{desc|ml|അഗൊസ്തു|bor=1}} * {{desc|si|අගෝස්තු|bor=1}} * {{desc|tet|agostu|bor=1}} ===={{ĐM|see}}==== {{list:Gregorian calendar months/pt}} ==={{ĐM|further}}=== * {{R:pt:Aulete}} =={{langname|cim}}== ==={{ĐM|etym}}=== Vay mượn từ {{bor|cim|it|agosto}}, từ {{der|cim|la|augustus}}. ==={{ĐM|n}}=== {{cim-noun|m}} # {{lb|cim|Luserna}} [[tháng Tám|Tháng Tám]]. #: {{syn|cim|agòsten|snittmånat}} ==={{ĐM|see}}=== {{list:Gregorian calendar months/cim/Luserna}} ==={{ĐM|ref}}=== * {{R:Patuzzi}} {{c|cim|Tháng}} =={{langname|nhe}}== ==={{ĐM|etym}}=== Vay mượn từ {{bor|nhe|es|agosto}}. ==={{ĐM|n}}=== {{head|nhe|Danh từ}} # [[tháng Tám|Tháng Tám]]. {{c|nhe|Tháng}} =={{langname|gl}}== {{wp|gl:}} ==={{ĐM|alt}}=== * {{alt|gl|ago.||abbreviation}} ==={{ĐM|etym}}=== Từ {{inh|gl|roa-opt|agosto}}, từ {{inh|gl|la-vul|agustus}}, từ {{inh|gl|la|augustus}}. ==={{ĐM|pron}}=== {{gl-pr|agôsto}} * {{hyph|gl|a|gos|to}} ==={{ĐM|n}}=== {{gl-noun|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|see}}==== {{list:Gregorian calendar months/gl}} ==={{ĐM|further}}=== * {{R:gl:DRAG}} * {{R:gl:Estraviz}} =={{langname|io}}== ==={{ĐM|n}}=== {{io-noun|agost}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|see}}=== {{list:Gregorian calendar months/io}} =={{langname|ilo}}== ==={{ĐM|etym}}=== Từ {{bor|ilo|es|agosto}}, từ {{der|ilo|la-vul|agustus}}, từ {{der|ilo|la|augustus}}. ==={{ĐM|n}}=== {{ilo-noun}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|see}}=== {{list:Gregorian calendar months/ilo}} =={{langname|ist}}== ==={{ĐM|etym}}=== Từ {{inh|ist|la-vul|agustus}}, từ {{inh|ist|la|augustus}}. ==={{ĐM|n}}=== {{head|ist|Danh từ|g=m}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|ref}}=== *{{cite-book|author=Antonio Pellizzer|title=Vocabulario del dialetto di Rovigno d'Istria|page=39|passage=|year=1992|author2=Giovanni Pellizzer}} * {{cite-book|author=Sandro Cergna|title=Vocabolario del dialetto di Valle d'Istria|page=22|passage=|year=2015|isbn=9789537891114}} =={{langname|lad}}== ==={{ĐM|etym}}=== Từ {{inh|lad|la|augustus}}. ==={{ĐM|n}}=== {{lad-noun|g=m}} # [[tháng Tám|Tháng Tám]]. {{c|lad|Tháng}} =={{langname|roa-opt}}== ==={{ĐM|etym}}=== {{etymon|roa-opt|id=month|:inh|la-vul:agustus<ety:der<la:augustus>>}} Từ {{inh|roa-opt|la-vul|agustus}}, từ {{inh|roa-opt|la|augustus}}. ==={{ĐM|pron}}=== * {{q|Galicia}} {{IPA4|roa-opt|/aˈɡos̺.to/}} * {{q|Bồ Đào Nha}} {{IPA4|roa-opt|/aˈɡos̺.tʊ/}} ==={{ĐM|n}}=== {{roa-opt-noun|m}} # [[tháng Tám|Tháng Tám]]. #* {{RQ:roa-opt:Cantigas de Santa Maria|E|419|http://www.pbm.com/~lindahl/cantigas/facsimiles/To/bob093small.gif|passage=Eſto foi en '''agoſto''' en meyante do mes|translation=Việc này xảy ra vào giữa '''tháng Tám'''}} ===={{ĐM|desc}}==== * {{desc|fax|agostu}} * {{desc|gl|agosto}} * {{desc|pt|agosto}} {{see desc}} ==={{ĐM|see}}=== {{list:Gregorian calendar months/roa-opt}} {{c|roa-opt|Tháng}} =={{langname|es}}== ==={{ĐM|pron}}=== {{es-pr}} ==={{ĐM|etym}} 1=== {{inh+|es|la-vul|agustus}}, từ {{inh|es|la|augustus}}. ===={{ĐM|alt}}==== * {{alt|es|ago.|ago||abbreviation}} ===={{ĐM|n}}==== {{es-noun|m}} # [[tháng Tám|Tháng Tám]]. ====={{ĐM|drv}}===== {{col|es |agostar |agosteño |agostero |agostino |hacer su agosto }} ====={{ĐM|rel}}===== {{col|es|augusto|Augusto}} ====={{ĐM|desc}}===== * {{desc|bcl|Agosto|bor=1}} * {{desc|ceb|Agosto|bor=1}} * {{desc|ch|Ågosto|bor=1}} * {{desc|cbk|Agosto|bor=1}} * {{desc|hnn|Agusto|bor=1}} * {{desc|ilo|Agosto|bor=1}} * {{desc|pam|Agostu|bor=1}} * {{desc|pag|Agosto|bor=1}} * {{desc|tl|Agosto|bor=1}} * {{desc|war|Agosto|bor=1}} * {{desc|zpq|agost|bor=1}} ====={{ĐM|see}}===== {{list:Gregorian calendar months/es}} ==={{ĐM|etym}} 2=== ===={{ĐM|v}}==== {{head|es|Biến thể hình thái động từ}} # {{es-verb form of|agostar}} ==={{ĐM|further}}=== * {{R:es:DRAE}} * {{pedia|lang=es}} =={{langname|vec}}== ==={{ĐM|etym}}=== Từ {{inh|vec|la-vul|agustus}}, từ {{inh|vec|la|augustus}}. So sánh với {{cog|it|agosto}}. ==={{ĐM|n}}=== {{wp|vec:}} {{vec-noun|agost|m|o|i}} # [[tháng Tám|Tháng Tám]]. {{c|vec|Tháng}} =={{langname|it}}== ==={{ĐM|alt}}=== * {{alt|it|ago.|ago||abbreviation}} ==={{ĐM|etym}}=== Từ {{inh|it|la-vul|agustus}}, từ {{inh|it|la|augustus}}. {{doublet|it|Augusto}}. ==={{ĐM|pron}}=== {{it-pr|agósto<audio:It-agosto.ogg>}} ==={{ĐM|n}}=== {{it-noun|m|-}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|drv}}==== * {{l|it|agostamento}} ===={{ĐM|desc}}==== * {{desc|cim|agosto|bor=1}} * {{desc|so|agoosto|bor=1}} ===={{ĐM|see}}==== {{list:Gregorian calendar months/it}} ===={{ĐM|ref}}==== *[https://www.treccani.it/enciclopedia/nomi-difettivi_(La-grammatica-italiana)/ ''nomi difettivi'', in ''La grammatica italiana "Treccani"''] *[https://dizionari.repubblica.it/Italiano/A/agosto.html ''"agosto"'', in ''Dizionario di italiano "Hoepli"''] 78duwlaq9azciqcisx53a897t453423 2350040 2350039 2026-05-04T03:26:57Z Kelly zhrm 58416 /* {{langname|nhe}} */ 2350040 wikitext text/x-wiki {{also|Agosto}} =={{langname|an}}== ==={{ĐM|etym}}=== Từ {{inh|an|la-vul|agustus}}, từ {{inh|an|la|augustus}}. ==={{ĐM|pron}}=== {{an-pr}} ==={{ĐM|n}}=== {{an-noun/new|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|see}}==== {{list:Gregorian calendar months/an}} ==={{ĐM|ref}}=== * {{R:an:Aragonario|es=agosto}} =={{langname|pt}}== ==={{ĐM|alt}}=== * {{alt|pt|ago.||abbreviation}} * {{alt|pt|Agosto||pre-1990}} * {{alt|pt|agôsto<!--|Agôsto-->||pre-reform}} ==={{ĐM|etym}}=== {{etymon|pt|id=month|:inh|roa-opt:agosto}} {{inh+|pt|roa-opt|agosto}}, từ {{inh|pt|la-vul|agustus}}, từ {{inh|pt|la|augustus}}. {{doublet|pt|augusto}}. ==={{ĐM|pron}}=== {{pt-IPA|[osto:ôsto]}} * {{rhymes|pt|ostu|q1=Brasil|oʃtu|q2=Bồ Đào Nha, Rio de Janeiro|s=3}} * {{hmp|pt|a gosto}} * {{hyph|pt|a|gos|to}} ==={{ĐM|n}}=== {{pt-noun|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|desc}}==== * {{desc|pov|Agostu}} * {{desc|kea|agostu}} * {{desc|inc-hnd|-|der=1}} ** {{desc|hi|अगस्त}} ** {{desc|ur|اَگَسْت}} * {{desc|mr|आगस्त|der=1|ll=dated}} * {{desc|kok|आगोस्त|bor=1}} * {{desc|ml|അഗൊസ്തു|bor=1}} * {{desc|si|අගෝස්තු|bor=1}} * {{desc|tet|agostu|bor=1}} ===={{ĐM|see}}==== {{list:Gregorian calendar months/pt}} ==={{ĐM|further}}=== * {{R:pt:Aulete}} =={{langname|cim}}== ==={{ĐM|etym}}=== Vay mượn từ {{bor|cim|it|agosto}}, từ {{der|cim|la|augustus}}. ==={{ĐM|n}}=== {{cim-noun|m}} # {{lb|cim|Luserna}} [[tháng Tám|Tháng Tám]]. #: {{syn|cim|agòsten|snittmånat}} ==={{ĐM|see}}=== {{list:Gregorian calendar months/cim/Luserna}} ==={{ĐM|ref}}=== * {{R:Patuzzi}} {{c|cim|Tháng}} =={{langname|gl}}== {{wp|gl:}} ==={{ĐM|alt}}=== * {{alt|gl|ago.||abbreviation}} ==={{ĐM|etym}}=== Từ {{inh|gl|roa-opt|agosto}}, từ {{inh|gl|la-vul|agustus}}, từ {{inh|gl|la|augustus}}. ==={{ĐM|pron}}=== {{gl-pr|agôsto}} * {{hyph|gl|a|gos|to}} ==={{ĐM|n}}=== {{gl-noun|m}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|see}}==== {{list:Gregorian calendar months/gl}} ==={{ĐM|further}}=== * {{R:gl:DRAG}} * {{R:gl:Estraviz}} =={{langname|io}}== ==={{ĐM|n}}=== {{io-noun|agost}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|see}}=== {{list:Gregorian calendar months/io}} =={{langname|ilo}}== ==={{ĐM|etym}}=== Từ {{bor|ilo|es|agosto}}, từ {{der|ilo|la-vul|agustus}}, từ {{der|ilo|la|augustus}}. ==={{ĐM|n}}=== {{ilo-noun}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|see}}=== {{list:Gregorian calendar months/ilo}} =={{langname|ist}}== ==={{ĐM|etym}}=== Từ {{inh|ist|la-vul|agustus}}, từ {{inh|ist|la|augustus}}. ==={{ĐM|n}}=== {{head|ist|Danh từ|g=m}} # [[tháng Tám|Tháng Tám]]. ==={{ĐM|ref}}=== *{{cite-book|author=Antonio Pellizzer|title=Vocabulario del dialetto di Rovigno d'Istria|page=39|passage=|year=1992|author2=Giovanni Pellizzer}} * {{cite-book|author=Sandro Cergna|title=Vocabolario del dialetto di Valle d'Istria|page=22|passage=|year=2015|isbn=9789537891114}} =={{langname|lad}}== ==={{ĐM|etym}}=== Từ {{inh|lad|la|augustus}}. ==={{ĐM|n}}=== {{lad-noun|g=m}} # [[tháng Tám|Tháng Tám]]. {{c|lad|Tháng}} =={{langname|roa-opt}}== ==={{ĐM|etym}}=== {{etymon|roa-opt|id=month|:inh|la-vul:agustus<ety:der<la:augustus>>}} Từ {{inh|roa-opt|la-vul|agustus}}, từ {{inh|roa-opt|la|augustus}}. ==={{ĐM|pron}}=== * {{q|Galicia}} {{IPA4|roa-opt|/aˈɡos̺.to/}} * {{q|Bồ Đào Nha}} {{IPA4|roa-opt|/aˈɡos̺.tʊ/}} ==={{ĐM|n}}=== {{roa-opt-noun|m}} # [[tháng Tám|Tháng Tám]]. #* {{RQ:roa-opt:Cantigas de Santa Maria|E|419|http://www.pbm.com/~lindahl/cantigas/facsimiles/To/bob093small.gif|passage=Eſto foi en '''agoſto''' en meyante do mes|translation=Việc này xảy ra vào giữa '''tháng Tám'''}} ===={{ĐM|desc}}==== * {{desc|fax|agostu}} * {{desc|gl|agosto}} * {{desc|pt|agosto}} {{see desc}} ==={{ĐM|see}}=== {{list:Gregorian calendar months/roa-opt}} {{c|roa-opt|Tháng}} =={{langname|es}}== ==={{ĐM|pron}}=== {{es-pr}} ==={{ĐM|etym}} 1=== {{inh+|es|la-vul|agustus}}, từ {{inh|es|la|augustus}}. ===={{ĐM|alt}}==== * {{alt|es|ago.|ago||abbreviation}} ===={{ĐM|n}}==== {{es-noun|m}} # [[tháng Tám|Tháng Tám]]. ====={{ĐM|drv}}===== {{col|es |agostar |agosteño |agostero |agostino |hacer su agosto }} ====={{ĐM|rel}}===== {{col|es|augusto|Augusto}} ====={{ĐM|desc}}===== * {{desc|bcl|Agosto|bor=1}} * {{desc|ceb|Agosto|bor=1}} * {{desc|ch|Ågosto|bor=1}} * {{desc|cbk|Agosto|bor=1}} * {{desc|hnn|Agusto|bor=1}} * {{desc|ilo|Agosto|bor=1}} * {{desc|pam|Agostu|bor=1}} * {{desc|pag|Agosto|bor=1}} * {{desc|tl|Agosto|bor=1}} * {{desc|war|Agosto|bor=1}} * {{desc|zpq|agost|bor=1}} ====={{ĐM|see}}===== {{list:Gregorian calendar months/es}} ==={{ĐM|etym}} 2=== ===={{ĐM|v}}==== {{head|es|Biến thể hình thái động từ}} # {{es-verb form of|agostar}} ==={{ĐM|further}}=== * {{R:es:DRAE}} * {{pedia|lang=es}} =={{langname|vec}}== ==={{ĐM|etym}}=== Từ {{inh|vec|la-vul|agustus}}, từ {{inh|vec|la|augustus}}. So sánh với {{cog|it|agosto}}. ==={{ĐM|n}}=== {{wp|vec:}} {{vec-noun|agost|m|o|i}} # [[tháng Tám|Tháng Tám]]. {{c|vec|Tháng}} =={{langname|it}}== ==={{ĐM|alt}}=== * {{alt|it|ago.|ago||abbreviation}} ==={{ĐM|etym}}=== Từ {{inh|it|la-vul|agustus}}, từ {{inh|it|la|augustus}}. {{doublet|it|Augusto}}. ==={{ĐM|pron}}=== {{it-pr|agósto<audio:It-agosto.ogg>}} ==={{ĐM|n}}=== {{it-noun|m|-}} # [[tháng Tám|Tháng Tám]]. ===={{ĐM|drv}}==== * {{l|it|agostamento}} ===={{ĐM|desc}}==== * {{desc|cim|agosto|bor=1}} * {{desc|so|agoosto|bor=1}} ===={{ĐM|see}}==== {{list:Gregorian calendar months/it}} ===={{ĐM|ref}}==== *[https://www.treccani.it/enciclopedia/nomi-difettivi_(La-grammatica-italiana)/ ''nomi difettivi'', in ''La grammatica italiana "Treccani"''] *[https://dizionari.repubblica.it/Italiano/A/agosto.html ''"agosto"'', in ''Dizionario di italiano "Hoepli"''] c90o7m7gj9mgyyxh2ipy0a298gv5yyz さくや 0 395679 2350027 2026-05-04T03:14:59Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== ==={{ĐM|etym}} 1=== ===={{ĐM|pron}}==== {{ja-pron}} ===={{ĐM|pr-noun}}==== {{ja-pos|proper}} # {{given name|ja|nữ}} ==={{ĐM|etym}} 2=== {{ja-see-kango|昨夜}}” 2350027 wikitext text/x-wiki =={{langname|ja}}== ==={{ĐM|etym}} 1=== ===={{ĐM|pron}}==== {{ja-pron}} ===={{ĐM|pr-noun}}==== {{ja-pos|proper}} # {{given name|ja|nữ}} ==={{ĐM|etym}} 2=== {{ja-see-kango|昨夜}} 3dx13gnzlgujlgplpl433u9h3veoyvf Sakuya 0 395680 2350028 2026-05-04T03:17:38Z WhoAlone 40420 Trang mới: “{{also|sakuya}} =={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|さくや}}” 2350028 wikitext text/x-wiki {{also|sakuya}} =={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|さくや}} 6gojtq2n95uue15avy8c6zitpb7q58r sakuya 0 395681 2350029 2026-05-04T03:18:09Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|さくや}}” 2350029 wikitext text/x-wiki =={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|さくや}} 1rl8exqne17din7tbb5iso51t8dh4q1 咲夜 0 395682 2350030 2026-05-04T03:19:39Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-kanjitab|さ|o1=く|や}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さくや}} # {{given name|ja|nữ|sort=さくや}}” 2350030 wikitext text/x-wiki =={{langname|ja}}== {{ja-kanjitab|さ|o1=く|や}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さくや}} # {{given name|ja|nữ|sort=さくや}} je4v9zjegp6hd3uy1ju071xi6zsotc8 2350105 2350030 2026-05-04T05:08:17Z WhoAlone 40420 2350105 wikitext text/x-wiki =={{langname|ja}}== {{ja-kanjitab|さ|o1=く|や|y=kanon}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さくや}} # {{given name|ja|nữ|sort=さくや}} e9gujl24dt7cviurtc9xn6b7mxqn76u Thể loại:Từ đánh vần với 咲 là さ tiếng Nhật 14 395683 2350031 2026-05-04T03:21:03Z WhoAlone 40420 Trang mới: “{{auto cat|kun|nanori}}” 2350031 wikitext text/x-wiki {{auto cat|kun|nanori}} qs5y6a8knsysrkzmaqpk4gs5r6kqis5 Thể loại:Từ đánh vần với 咲 tiếng Nhật 14 395684 2350032 2026-05-04T03:21:32Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2350032 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Từ đánh vần với 咲 theo ngôn ngữ 14 395685 2350033 2026-05-04T03:22:50Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2350033 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Từ đánh vần với 夜 là や tiếng Nhật 14 395686 2350035 2026-05-04T03:23:51Z WhoAlone 40420 Trang mới: “{{auto cat|on}}” 2350035 wikitext text/x-wiki {{auto cat|on}} irnidilxpyzph26fxce9qlrz5zy5gor Thể loại:Từ đánh vần với 夜 tiếng Nhật 14 395687 2350036 2026-05-04T03:24:29Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2350036 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Từ đánh vần với 夜 theo ngôn ngữ 14 395688 2350037 2026-05-04T03:25:12Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2350037 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Từ kế thừa từ tiếng Latinh tiếng Ý 14 395689 2350041 2026-05-04T03:28:01Z Kelly zhrm 58416 Trang mới: “{{auto cat}}” 2350041 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx さおり 0 395690 2350042 2026-05-04T03:28:35Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== ==={{ĐM|pr-noun}}=== {{ja-pos|proper}} # {{given name|ja|nữ}} ===={{ĐM|usage}}==== Tên này có thể được viết dưới nhiều dạng kanji, một số được liệt kê bên dưới. {{col4|ja|title=Kanji spellings of さおり|沙緒理|早織|沙央理|沙織|佐織|紗織|沙保里}}” 2350042 wikitext text/x-wiki =={{langname|ja}}== ==={{ĐM|pr-noun}}=== {{ja-pos|proper}} # {{given name|ja|nữ}} ===={{ĐM|usage}}==== Tên này có thể được viết dưới nhiều dạng kanji, một số được liệt kê bên dưới. {{col4|ja|title=Kanji spellings of さおり|沙緒理|早織|沙央理|沙織|佐織|紗織|沙保里}} er56jg1ibi65w9m4goeldxv5fd0zwr4 2350045 2350042 2026-05-04T03:31:34Z WhoAlone 40420 2350045 wikitext text/x-wiki =={{langname|ja}}== ==={{ĐM|pr-noun}}=== {{ja-pos|proper}} # {{given name|ja|nữ}} ===={{ĐM|usage}}==== Tên này có thể được viết dưới nhiều dạng kanji, một số được liệt kê bên dưới. {{col4|ja|title=Các dạng kanji của さおり|沙緒理|早織|沙央理|沙織|佐織|紗織|沙保里}} buoeyxyo09cqjg14i4hd9jds2qdu8nk Saori 0 395691 2350043 2026-05-04T03:29:48Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|さおり}}” 2350043 wikitext text/x-wiki =={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|さおり}} ap78zcktvauw4meh1xoidrm3zg961du さお梨 0 395692 2350044 2026-05-04T03:31:05Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-kanjitab|り}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}}” 2350044 wikitext text/x-wiki =={{langname|ja}}== {{ja-kanjitab|り}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}} qes5bred3hb2ulju3be21db55fcwuaq 沙緒理 0 395693 2350046 2026-05-04T03:32:04Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-kanjitab|さ|お|り}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}}” 2350046 wikitext text/x-wiki =={{langname|ja}}== {{ja-kanjitab|さ|お|り}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}} g8s65lh9i24thiy8p800bpbd2pjbxcf 沙緖理 0 395694 2350047 2026-05-04T03:32:23Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-see|沙緒理}}” 2350047 wikitext text/x-wiki =={{langname|ja}}== {{ja-see|沙緒理}} 4ohslirt4jibp2x8i4umqsico75giq3 Bản mẫu:cim-noun 10 395695 2350048 2026-05-04T03:32:42Z Kelly zhrm 58416 Trang mới: “{{#invoke:checkparams|error}}<!-- Validate template parameters -->{{head|cim|noun<!-- -->|head={{{head|}}}<!-- -->|cat2={{{cat2|}}}<!-- -->|g={{#switch:{{{1|}}}<!-- -->|m|f|n|m-p|f-p|n-p|p={{{1}}}<!-- -->|#default=?<!-- -->}}<!-- -->|g2={{#switch:{{{g2}}}<!-- -->|m|f|n|m-p|f-p|n-p|p={{{g2}}}<!-- -->|<!-- -->}}<!-- -->}}<!-- -->{{#if:{{{2|}}}<!-- -->|&nbsp;(''<!-- -->{{#switch:{{{2}}}<!-- -->|-=uncountable''Thể loại:Danh từ khôn…” 2350048 wikitext text/x-wiki {{#invoke:checkparams|error}}<!-- Validate template parameters -->{{head|cim|noun<!-- -->|head={{{head|}}}<!-- -->|cat2={{{cat2|}}}<!-- -->|g={{#switch:{{{1|}}}<!-- -->|m|f|n|m-p|f-p|n-p|p={{{1}}}<!-- -->|#default=?<!-- -->}}<!-- -->|g2={{#switch:{{{g2}}}<!-- -->|m|f|n|m-p|f-p|n-p|p={{{g2}}}<!-- -->|<!-- -->}}<!-- -->}}<!-- -->{{#if:{{{2|}}}<!-- -->|&nbsp;(''<!-- -->{{#switch:{{{2}}}<!-- -->|-=uncountable''[[Thể loại:Danh từ không đếm được tiếng Cimbri]]<!-- -->|pt=plurale tantum''[[Thể loại:Cimbrian pluralia tantum]]<!-- -->|#default=plural'' '''{{l-self|cim|{{{2}}}}}'''<!-- -->}}<!-- -->{{#if:{{{pl2|}}}<!-- -->|&nbsp;''or''&nbsp;'''{{l-self|cim|{{{pl2}}}}}'''<!-- -->}}<!-- -->{{#if:{{{3|}}}{{{f|}}}{{{m|}}}<!-- -->|,&nbsp;<!-- -->|)<!-- -->}}<!-- -->}}<!-- -->{{#if:{{{3|}}}<!-- -->|{{#if:{{{2|}}}<!-- -->|<!-- -->|&nbsp;(<!-- -->}}<!-- -->''diminutive'' '''{{l-self|cim|{{{3}}}}}'''<!-- -->{{#if:{{{f|}}}{{{m|}}}<!-- -->|,&nbsp;<!-- -->|)<!-- -->}}<!-- -->|<!-- -->}}<!-- -->{{#if:{{{f|}}}<!-- -->|{{#if:{{{2|}}}{{{3|}}}<!-- -->|<!-- -->|&nbsp;(<!-- -->}}<!-- -->''feminine'' '''{{l-self|cim|{{{f}}}}}''')<!-- -->}}<!-- -->{{#if:{{{m|}}}<!-- -->|{{#if:{{{2|}}}{{{3|}}}<!-- -->|<!-- -->|&nbsp;(<!-- -->}}<!-- -->''masculine'' '''{{l-self|cim|{{{m}}}}}''')<!-- -->}}<!-- --><noinclude>{{documentation}} </noinclude> 2db7osfdxlhec1fsfk6xp8kgehkcr0o 2350052 2350048 2026-05-04T03:34:22Z Kelly zhrm 58416 2350052 wikitext text/x-wiki {{#invoke:checkparams|error}}<!-- Validate template parameters -->{{head|cim|Danh từ<!-- -->|head={{{head|}}}<!-- -->|cat2={{{cat2|}}}<!-- -->|g={{#switch:{{{1|}}}<!-- -->|m|f|n|m-p|f-p|n-p|p={{{1}}}<!-- -->|#default=?<!-- -->}}<!-- -->|g2={{#switch:{{{g2}}}<!-- -->|m|f|n|m-p|f-p|n-p|p={{{g2}}}<!-- -->|<!-- -->}}<!-- -->}}<!-- -->{{#if:{{{2|}}}<!-- -->|&nbsp;(''<!-- -->{{#switch:{{{2}}}<!-- -->|-=không đếm được''[[Thể loại:Danh từ không đếm được tiếng Cimbri]]<!-- -->|pt=plurale tantum''[[Thể loại:Cimbrian pluralia tantum]]<!-- -->|#default=plural'' '''{{l-self|cim|{{{2}}}}}'''<!-- -->}}<!-- -->{{#if:{{{pl2|}}}<!-- -->|&nbsp;''or''&nbsp;'''{{l-self|cim|{{{pl2}}}}}'''<!-- -->}}<!-- -->{{#if:{{{3|}}}{{{f|}}}{{{m|}}}<!-- -->|,&nbsp;<!-- -->|)<!-- -->}}<!-- -->}}<!-- -->{{#if:{{{3|}}}<!-- -->|{{#if:{{{2|}}}<!-- -->|<!-- -->|&nbsp;(<!-- -->}}<!-- -->''giảm nhẹ nghĩa'' '''{{l-self|cim|{{{3}}}}}'''<!-- -->{{#if:{{{f|}}}{{{m|}}}<!-- -->|,&nbsp;<!-- -->|)<!-- -->}}<!-- -->|<!-- -->}}<!-- -->{{#if:{{{f|}}}<!-- -->|{{#if:{{{2|}}}{{{3|}}}<!-- -->|<!-- -->|&nbsp;(<!-- -->}}<!-- -->''giống cái'' '''{{l-self|cim|{{{f}}}}}''')<!-- -->}}<!-- -->{{#if:{{{m|}}}<!-- -->|{{#if:{{{2|}}}{{{3|}}}<!-- -->|<!-- -->|&nbsp;(<!-- -->}}<!-- -->''giống đực'' '''{{l-self|cim|{{{m}}}}}''')<!-- -->}}<!-- --><noinclude>{{documentation}} </noinclude> 83f9c76zqomobl2tuh9zp45hg88p3q8 2350054 2350052 2026-05-04T03:35:00Z Kelly zhrm 58416 2350054 wikitext text/x-wiki {{#invoke:checkparams|error}}<!-- Validate template parameters -->{{head|cim|Danh từ<!-- -->|head={{{head|}}}<!-- -->|cat2={{{cat2|}}}<!-- -->|g={{#switch:{{{1|}}}<!-- -->|m|f|n|m-p|f-p|n-p|p={{{1}}}<!-- -->|#default=?<!-- -->}}<!-- -->|g2={{#switch:{{{g2}}}<!-- -->|m|f|n|m-p|f-p|n-p|p={{{g2}}}<!-- -->|<!-- -->}}<!-- -->}}<!-- -->{{#if:{{{2|}}}<!-- -->|&nbsp;(''<!-- -->{{#switch:{{{2}}}<!-- -->|-=không đếm được''[[Thể loại:Danh từ không đếm được tiếng Cimbri]]<!-- -->|pt=plurale tantum''[[Thể loại:Cimbrian pluralia tantum]]<!-- -->|#default=plural'' '''{{l-self|cim|{{{2}}}}}'''<!-- -->}}<!-- -->{{#if:{{{pl2|}}}<!-- -->|&nbsp;''or''&nbsp;'''{{l-self|cim|{{{pl2}}}}}'''<!-- -->}}<!-- -->{{#if:{{{3|}}}{{{f|}}}{{{m|}}}<!-- -->|,&nbsp;<!-- -->|)<!-- -->}}<!-- -->}}<!-- -->{{#if:{{{3|}}}<!-- -->|{{#if:{{{2|}}}<!-- -->|<!-- -->|&nbsp;(<!-- -->}}<!-- -->''giảm nhẹ nghĩa'' '''{{l-self|cim|{{{3}}}}}'''<!-- -->{{#if:{{{f|}}}{{{m|}}}<!-- -->|,&nbsp;<!-- -->|)<!-- -->}}<!-- -->|<!-- -->}}<!-- -->{{#if:{{{f|}}}<!-- -->|{{#if:{{{2|}}}{{{3|}}}<!-- -->|<!-- -->|&nbsp;(<!-- -->}}<!-- -->''giống cái'' '''{{l-self|cim|{{{f}}}}}''')<!-- -->}}<!-- -->{{#if:{{{m|}}}<!-- -->|{{#if:{{{2|}}}{{{3|}}}<!-- -->|<!-- -->|&nbsp;(<!-- -->}}<!-- -->''giống đực'' '''{{l-self|cim|{{{m}}}}}''')<!-- -->}}<!-- --><noinclude>{{documentation}}{{tcat|hw}} </noinclude> 9bna1vubycppr8hh85tfce4fixjwrfp 早織 0 395696 2350049 2026-05-04T03:32:56Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-kanjitab|さ|おり}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ}}” 2350049 wikitext text/x-wiki =={{langname|ja}}== {{ja-kanjitab|さ|おり}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ}} 2a5flvipubg6hewx9say15pcngxlts8 沙央理 0 395697 2350050 2026-05-04T03:33:29Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-kanjitab|さ|お|り}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}}” 2350050 wikitext text/x-wiki =={{langname|ja}}== {{ja-kanjitab|さ|お|り}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}} g8s65lh9i24thiy8p800bpbd2pjbxcf 沙織 0 395698 2350051 2026-05-04T03:34:00Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-kanjitab|さ|おり|yomi=ok}} ==={{ĐM|pron}}=== {{ja-pron|さおり}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}}” 2350051 wikitext text/x-wiki =={{langname|ja}}== {{ja-kanjitab|さ|おり|yomi=ok}} ==={{ĐM|pron}}=== {{ja-pron|さおり}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}} o4qkwmhhuvn2idf62yy0fzh5z12f3l8 佐織 0 395699 2350053 2026-05-04T03:34:29Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-kanjitab|さ|おり}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}}” 2350053 wikitext text/x-wiki =={{langname|ja}}== {{ja-kanjitab|さ|おり}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}} ms8dqha8ehklsbip0db7578av3j6a71 紗織 0 395700 2350055 2026-05-04T03:36:12Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-kanjitab|さ|おり|yomi=ok}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}}” 2350055 wikitext text/x-wiki =={{langname|ja}}== {{ja-kanjitab|さ|おり|yomi=ok}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}} 9bfivqjxgg5cexe6fxm9aaw699ttr3n Thể loại:Danh từ tiếng Cimbri 14 395701 2350056 2026-05-04T03:36:29Z Kelly zhrm 58416 Trang mới: “{{auto cat}}” 2350056 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx 沙保里 0 395702 2350057 2026-05-04T03:36:49Z WhoAlone 40420 Trang mới: “=={{langname|ja}}== {{ja-kanjitab|さ|ほ|k2=お|り}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}}” 2350057 wikitext text/x-wiki =={{langname|ja}}== {{ja-kanjitab|さ|ほ|k2=お|り}} ==={{ĐM|pr-noun}}=== {{ja-pos|proper|さおり}} # {{given name|ja|nữ|sort=さおり}} 8uyigsph2197zignf6svpfwlcxael05 Thể loại:Từ đánh vần với 保 là ほ tiếng Nhật 14 395703 2350058 2026-05-04T03:37:47Z WhoAlone 40420 Trang mới: “{{auto cat|kan'yōon}}” 2350058 wikitext text/x-wiki {{auto cat|kan'yōon}} sjwsr6nx7ob2tnchjq60dd3e20p028v Thể loại:Từ đánh vần với 織 là おり tiếng Nhật 14 395704 2350059 2026-05-04T03:38:47Z WhoAlone 40420 Trang mới: “{{auto cat|kun}}” 2350059 wikitext text/x-wiki {{auto cat|kun}} 6sgynwa4ww4n7ynr3errc7yhla69lb0 Thể loại:Từ đánh vần với 緒 là お tiếng Nhật 14 395705 2350060 2026-05-04T03:40:05Z WhoAlone 40420 Trang mới: “{{auto cat|kun}}” 2350060 wikitext text/x-wiki {{auto cat|kun}} 6sgynwa4ww4n7ynr3errc7yhla69lb0 Thể loại:Từ đánh vần với 緒 tiếng Nhật 14 395706 2350061 2026-05-04T03:40:50Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2350061 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Từ đánh vần với 緒 theo ngôn ngữ 14 395707 2350062 2026-05-04T03:41:15Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2350062 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx agostos 0 395708 2350063 2026-05-04T03:43:43Z Kelly zhrm 58416 Trang mới: “=={{langname|an}}== ==={{ĐM|n}}=== {{head|an|Biến thể hình thái danh từ}} # {{plural of|an|agosto}} =={{langname|ast}}== ==={{ĐM|n}}=== {{head|ast|Biến thể hình thái danh từ}} # {{plural of|ast|agostu}} =={{langname|pt}}== ==={{ĐM|n}}=== {{head|pt|Biến thể hình thái danh từ}} # {{plural of|pt|agosto}} =={{langname|ca}}== ==={{ĐM|alt}}=== * {{l|ca|agosts}} ==={{ĐM|n}}=== {{head|ca|Biến thể hình thái danh từ}} # {{plural of|c…” 2350063 wikitext text/x-wiki =={{langname|an}}== ==={{ĐM|n}}=== {{head|an|Biến thể hình thái danh từ}} # {{plural of|an|agosto}} =={{langname|ast}}== ==={{ĐM|n}}=== {{head|ast|Biến thể hình thái danh từ}} # {{plural of|ast|agostu}} =={{langname|pt}}== ==={{ĐM|n}}=== {{head|pt|Biến thể hình thái danh từ}} # {{plural of|pt|agosto}} =={{langname|ca}}== ==={{ĐM|alt}}=== * {{l|ca|agosts}} ==={{ĐM|n}}=== {{head|ca|Biến thể hình thái danh từ}} # {{plural of|ca|agost}} =={{langname|es}}== ==={{ĐM|n}}=== {{head|es|Biến thể hình thái danh từ}} # {{plural of|es|agosto}} 5qlwhspzpwfu4ifymjr7z0577kiigtq Bản mẫu:arg-pr 10 395709 2350065 2026-05-04T03:46:07Z Kelly zhrm 58416 Kelly zhrm đã đổi [[Bản mẫu:arg-pr]] thành [[Bản mẫu:an-pr]] qua đổi hướng 2350065 wikitext text/x-wiki #đổi [[Bản mẫu:an-pr]] rl3drhx9bznem859noy7znj4yqj7aga disèmber 0 395710 2350066 2026-05-04T03:52:32Z Kelly zhrm 58416 Trang mới: “{{also|Disember}} =={{langname|cim}}== ==={{ĐM|etym}}=== {{root|cim|ine-pro|*meh₁-}} Từ {{der|cim|la|December}}. Cùng gốc với {{cog|de|Dezember}}. ==={{ĐM|n}}=== {{cim-noun|m}} # {{lb|cim|7}} [[tháng Mười hai|Tháng Mười hai]]. #: {{syn|cim|ditzembre|sègante maanont|kristmånat}} ==={{ĐM|see}}=== {{list:Gregorian_calendar_months/cim/7}} ==={{ĐM|ref}}=== * {{R:Martalar1974}}” 2350066 wikitext text/x-wiki {{also|Disember}} =={{langname|cim}}== ==={{ĐM|etym}}=== {{root|cim|ine-pro|*meh₁-}} Từ {{der|cim|la|December}}. Cùng gốc với {{cog|de|Dezember}}. ==={{ĐM|n}}=== {{cim-noun|m}} # {{lb|cim|7}} [[tháng Mười hai|Tháng Mười hai]]. #: {{syn|cim|ditzembre|sègante maanont|kristmånat}} ==={{ĐM|see}}=== {{list:Gregorian_calendar_months/cim/7}} ==={{ĐM|ref}}=== * {{R:Martalar1974}} oe6xphw6ga8eu8yfouef822lfo0pci0 păk 0 395711 2350068 2026-05-04T03:57:35Z WhoAlone 40420 Trang mới: “=={{langname|rmx}}== ==={{ĐM|verb}}=== {{head|rmx|Động từ}} # [[mở]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''.” 2350068 wikitext text/x-wiki =={{langname|rmx}}== ==={{ĐM|verb}}=== {{head|rmx|Động từ}} # [[mở]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. fcbxt7nrya6v2j8u8uagfw0hwtd5sij Thể loại:Động từ tiếng Rơ Măm 14 395712 2350069 2026-05-04T03:59:09Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2350069 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx luk 0 395713 2350070 2026-05-04T04:00:35Z WhoAlone 40420 Trang mới: “=={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[vũng]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''.” 2350070 wikitext text/x-wiki =={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[vũng]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. 5ddblny612ev55qm4r1avei3k4trgi6 bih buh 0 395714 2350072 2026-05-04T04:02:34Z WhoAlone 40420 Trang mới: “=={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[cuốn chiếu]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''.” 2350072 wikitext text/x-wiki =={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[cuốn chiếu]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. 9w1vmvz9x5o3sroe5l2o81t5dz6okxe Thể loại:Số từ tiếng Rơ Măm 14 395715 2350073 2026-05-04T04:02:42Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2350073 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx Thể loại:Mục từ có chứa nhiều từ tiếng Rơ Măm 14 395716 2350075 2026-05-04T04:04:31Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2350075 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx săk 0 395717 2350076 2026-05-04T04:04:52Z WhoAlone 40420 Trang mới: “=={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[lông]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''.” 2350076 wikitext text/x-wiki =={{langname|rmx}}== ==={{ĐM|noun}}=== {{head|rmx|Danh từ}} # [[lông]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. svxu8ik9whj1f8ch3ksnujwllvmxlfr nat 0 395718 2350081 2026-05-04T04:11:46Z WhoAlone 40420 Trang mới: “=={{langname|rmx}}== ==={{ĐM|verb}}=== {{head|rmx|Động từ}} # [[quát]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''.” 2350081 wikitext text/x-wiki =={{langname|rmx}}== ==={{ĐM|verb}}=== {{head|rmx|Động từ}} # [[quát]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. gs9yrczma7g4wepty98bg2f8jz4kcjk bluh 0 395719 2350082 2026-05-04T04:12:10Z WhoAlone 40420 Trang mới: “=={{langname|rmx}}== ==={{ĐM|verb}}=== {{head|rmx|Động từ}} # [[nổi]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''.” 2350082 wikitext text/x-wiki =={{langname|rmx}}== ==={{ĐM|verb}}=== {{head|rmx|Động từ}} # [[nổi]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. 171pxw7w70jjub8gftbldey1jaz5k2q mmuh 0 395720 2350088 2026-05-04T04:17:40Z WhoAlone 40420 Trang mới: “=={{langname|rmx}}== ==={{ĐM|adj}}=== {{head|rmx|Tính từ}} # [[cùn]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''.” 2350088 wikitext text/x-wiki =={{langname|rmx}}== ==={{ĐM|adj}}=== {{head|rmx|Tính từ}} # [[cùn]]. ==={{ĐM|ref}}=== * Võ Đức Tám. ''Âm tiết trong tiếng Rơ-măm''. ie08wk32yvym432iuo72a3oq4ypr0cm Thể loại:Tính từ tiếng Rơ Măm 14 395721 2350089 2026-05-04T04:17:52Z WhoAlone 40420 Trang mới: “{{auto cat}}” 2350089 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx kơchuâp 0 395722 2350090 2026-05-04T04:32:59Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[móng]]. #:{{ux|sed|bro '''kơchuâp '''xêi|đóng '''móng '''ngựa}} ==={{đm|ref}}=== {{R:VOV}}” 2350090 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[móng]]. #:{{ux|sed|bro '''kơchuâp '''xêi|đóng '''móng '''ngựa}} ==={{đm|ref}}=== {{R:VOV}} 1nfy0stv9wn9x81ybl1kgl2pvtc98mp kơnêi kŏng 0 395723 2350091 2026-05-04T04:37:55Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[móng tay]]. #:{{ux|sed|Pôe '''kơnêi kŏng''' ăm o kŭn|Cắt '''móng tay''' cho bé}} ==={{đm|ref}}=== {{R:VOV}}” 2350091 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[móng tay]]. #:{{ux|sed|Pôe '''kơnêi kŏng''' ăm o kŭn|Cắt '''móng tay''' cho bé}} ==={{đm|ref}}=== {{R:VOV}} 82o38803f830e184fj3710y0k2b6teq kái 0 395724 2350092 2026-05-04T04:39:48Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[sừng]]. #:{{ux|sed|túa kuăn kiâ rêh tung kong ki ai '''kái'''|Một số loài thú có '''sừng'''}} ==={{đm|ref}}=== {{R:VOV}}” 2350092 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[sừng]]. #:{{ux|sed|túa kuăn kiâ rêh tung kong ki ai '''kái'''|Một số loài thú có '''sừng'''}} ==={{đm|ref}}=== {{R:VOV}} jeaf8r964tn8o1hpavvkn8092xsxy96 kuăn kiâ 0 395725 2350093 2026-05-04T04:46:43Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[con vật]]. #:{{ux|sed|chó cho '''kuăn kiâ''' ki păn achê ƀă kuăn mơngế|Chó là '''con vật''' nuôi gần gũi với con người}} #:{{syn|sed|tơmeăm khoăng}} ==={{đm|ref}}=== {{R:VOV}}” 2350093 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[con vật]]. #:{{ux|sed|chó cho '''kuăn kiâ''' ki păn achê ƀă kuăn mơngế|Chó là '''con vật''' nuôi gần gũi với con người}} #:{{syn|sed|tơmeăm khoăng}} ==={{đm|ref}}=== {{R:VOV}} jxgb0u53gwggmksqapeoc3oc6ls3ybg tơmeăm khoăng 0 395726 2350094 2026-05-04T04:47:01Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[con vật]]. #:{{syn|sed|kuăn kiâ}} ==={{đm|ref}}=== {{R:VOV}}” 2350094 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[con vật]]. #:{{syn|sed|kuăn kiâ}} ==={{đm|ref}}=== {{R:VOV}} 3wjcih53ulrj5sxdkg8nntmuamcbktq chó prâi 0 395727 2350097 2026-05-04T04:49:41Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[chó sói]]. #:{{ux|sed|'''chó prâi''' hiăng mot tung kong|'''Chó sói''' đã về rừng}} ==={{đm|ref}}=== {{R:VOV}} {{c|sed|Họ Chó}}” 2350097 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[chó sói]]. #:{{ux|sed|'''chó prâi''' hiăng mot tung kong|'''Chó sói''' đã về rừng}} ==={{đm|ref}}=== {{R:VOV}} {{c|sed|Họ Chó}} 13xvoxmzht0a4xn7irgxj958o5wh17j kơnhéa 0 395728 2350098 2026-05-04T04:56:33Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|adj}}=== {{head|sed|Tính từ}} # [[chói]]. #:{{ux|sed|tô trâ '''kơnhéa '''mâ|nắng '''chói''' vào mặt}} ==={{đm|ref}}=== {{R:VOV}}” 2350098 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|adj}}=== {{head|sed|Tính từ}} # [[chói]]. #:{{ux|sed|tô trâ '''kơnhéa '''mâ|nắng '''chói''' vào mặt}} ==={{đm|ref}}=== {{R:VOV}} duf77qyszhtahnvwvxmai4g342uo9t3 eăng tôu 0 395729 2350099 2026-05-04T04:57:24Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|adj}}=== {{head|sed|Tính từ}} # [[chói chang]]. #:{{ux|sed|'''eăng tôu''' mâ hâi kơnhéa ó|Ánh mặt trời '''chói chang'''}} ==={{đm|ref}}=== {{R:VOV}}” 2350099 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|adj}}=== {{head|sed|Tính từ}} # [[chói chang]]. #:{{ux|sed|'''eăng tôu''' mâ hâi kơnhéa ó|Ánh mặt trời '''chói chang'''}} ==={{đm|ref}}=== {{R:VOV}} 98tlxvse5up51rfambvvc7niyv1k1i5 eăng kơnhéa 0 395730 2350100 2026-05-04T04:58:50Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|adj}}=== {{head|sed|Tính từ}} # [[chói lòa]]. #:{{ux|sed|'''eăng kơnhéa''' ó khât|Ánh sáng '''chói lòa'''}} ==={{đm|ref}}=== {{R:VOV}}” 2350100 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|adj}}=== {{head|sed|Tính từ}} # [[chói lòa]]. #:{{ux|sed|'''eăng kơnhéa''' ó khât|Ánh sáng '''chói lòa'''}} ==={{đm|ref}}=== {{R:VOV}} bl8lg6ni5a93leykwdi7h8sku09szwx Thể loại:Từ vay mượn từ tiếng Pháp tiếng Anh 14 395731 2350102 2026-05-04T05:00:51Z Kelly zhrm 58416 Trang mới: “{{auto cat}}” 2350102 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx trâ hleăng lĕm 0 395732 2350103 2026-05-04T05:04:45Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|adj}}=== {{head|sed|Tính từ}} # [[chói lọi]]. #:{{ux|sed|'''trâ hleăng lĕm''' ó khât|Ánh sáng '''chói lọi'''}} ==={{đm|ref}}=== {{R:VOV}}” 2350103 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|adj}}=== {{head|sed|Tính từ}} # [[chói lọi]]. #:{{ux|sed|'''trâ hleăng lĕm''' ó khât|Ánh sáng '''chói lọi'''}} ==={{đm|ref}}=== {{R:VOV}} spzeq5sj5rkad8n07ggsyfj1cldr113 rĕng 0 395733 2350104 2026-05-04T05:06:53Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|adj}}=== {{head|sed|Tính từ}} # [[chóng]]. #:{{ux|sed|kâ kơchâi '''rĕng '''kơklêa|ăn rau '''chóng '''đói}} ==={{đm|ref}}=== {{R:VOV}}” 2350104 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|adj}}=== {{head|sed|Tính từ}} # [[chóng]]. #:{{ux|sed|kâ kơchâi '''rĕng '''kơklêa|ăn rau '''chóng '''đói}} ==={{đm|ref}}=== {{R:VOV}} p0pitgmf8nc7szes8cm4hq7fy717ond pôu mâ 0 395734 2350106 2026-05-04T05:08:52Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|adj}}=== {{head|sed|Tính từ}} # [[chóng mặt]]. #:{{ux|sed|á tro '''pôu mâ'''|Tôi bị '''chóng mặt'''}} ==={{đm|ref}}=== {{R:VOV}}” 2350106 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|adj}}=== {{head|sed|Tính từ}} # [[chóng mặt]]. #:{{ux|sed|á tro '''pôu mâ'''|Tôi bị '''chóng mặt'''}} ==={{đm|ref}}=== {{R:VOV}} o5j0l2kr8i36nqb6x2qlxgbatgnipss kối 0 395735 2350107 2026-05-04T05:12:28Z WhoAlone 40420 Trang mới: “=={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[chóp]]. #:{{ux|sed|đoan hiăng tơ'nhiê '''kối'''|Chiếc nón hỏng '''chóp'''}} ==={{đm|ref}}=== {{R:VOV}}” 2350107 wikitext text/x-wiki =={{langname|sed}}== ==={{ĐM|noun}}=== {{head|sed|Danh từ}} # [[chóp]]. #:{{ux|sed|đoan hiăng tơ'nhiê '''kối'''|Chiếc nón hỏng '''chóp'''}} ==={{đm|ref}}=== {{R:VOV}} grmym36xxhrw5vmfl0l6aawc8rtyvi7 nêh răm 0 395736 2350108 2026-05-04T05:17:27Z WhoAlone 40420 Trang mới: “=={{langname|mng}}== ==={{ĐM|pron}}=== * {{IPA4|mng|/neh ram/}} ==={{ĐM|noun}}=== {{head|mng|Danh từ}} # {{label|mng|Rơlơm}} [[người lớn]]. ==={{ĐM|ref}}=== * [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Mnong&sort=gloss&format=html Tiếng M'Nông] tại Cơ sở Dữ liệu Môn-Khmer. {{c|mng|Mọi người}}” 2350108 wikitext text/x-wiki =={{langname|mng}}== ==={{ĐM|pron}}=== * {{IPA4|mng|/neh ram/}} ==={{ĐM|noun}}=== {{head|mng|Danh từ}} # {{label|mng|Rơlơm}} [[người lớn]]. ==={{ĐM|ref}}=== * [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Mnong&sort=gloss&format=html Tiếng M'Nông] tại Cơ sở Dữ liệu Môn-Khmer. {{c|mng|Mọi người}} l0gl28uh38by9wlzjrcxsmesx7njloi ngại giùm 0 395737 2350109 2026-05-04T05:42:44Z ~2026-27051-32 61174 ([[Mediawiki:Gadget-start.js|Trang mới]]) +vi:phrase:# [[cảm thấy|Cảm thấy]] [[xấu hổ]] [[thay]] cho [[người khác]] khi [[họ]] có [[hành vi]], [[lời nói]] không [[phù hợp]], [[gây]] [[xấu]] [[mặt]] hoặc [[khó xử]] ở [[nơi]] [[công cộng]]. 2350109 wikitext text/x-wiki =={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|phrase}}=== {{vi-phrase}} # [[cảm thấy|Cảm thấy]] [[xấu hổ]] [[thay]] cho [[người khác]] khi [[họ]] có [[hành vi]], [[lời nói]] không [[phù hợp]], [[gây]] [[xấu]] [[mặt]] hoặc [[khó xử]] ở [[nơi]] [[công cộng]]. ===={{ĐM|trans}}==== {{trans-top}} * {{langname|en}}: {{t|en|secondhand embarrassment}} {{trans-bottom}} {{mẫu}} ox4yggsorm9oizrgkcuf9d8tqseflgp 2350110 2350109 2026-05-04T05:43:07Z ~2026-27051-32 61174 2350110 wikitext text/x-wiki =={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|phrase}}=== {{vi-phrase}} # [[cảm thấy|Cảm thấy]] [[xấu hổ]] [[thay]] cho [[người khác]] khi họ có [[hành vi]], [[lời nói]] không [[phù hợp]], [[gây]] [[xấu]] [[mặt]] hoặc [[khó xử]] ở nơi [[công cộng]]. ===={{ĐM|trans}}==== {{trans-top}} * {{langname|en}}: {{t|en|secondhand embarrassment}} {{trans-bottom}} {{mẫu}} 5c3iuz4zs5nodc3fm6o48b7vrf4xehj கால்விரல் 0 395738 2350111 2026-05-04T05:58:40Z Hiyuune 50834 Trang mới: “=={{langname|ta}}== ==={{section|etym}}=== {{ety|ta|id=ngón chân|:af|கால்<id:chân; cẳng>|விரல்<id:ngón tay>|tree=1}} {{com+|ta|pos=Danh từ|கால்<t:chân; cẳng>|விரல்<t:ngón tay>}}. Cùng gốc với {{cog|ml|കാൽവിരൽ}}. ==={{section|pron}}=== {{ta-IPA}} ==={{section|n}}=== {{ta-noun}} # {{lb|ta|anatomy}} [[ngón chân|Ngón chân]]. ===={{section|decl}}==== {{ta-decl|type=root}} ==={{section|ref}}=== * {{R:T…” 2350111 wikitext text/x-wiki =={{langname|ta}}== ==={{section|etym}}=== {{ety|ta|id=ngón chân|:af|கால்<id:chân; cẳng>|விரல்<id:ngón tay>|tree=1}} {{com+|ta|pos=Danh từ|கால்<t:chân; cẳng>|விரல்<t:ngón tay>}}. Cùng gốc với {{cog|ml|കാൽവിരൽ}}. ==={{section|pron}}=== {{ta-IPA}} ==={{section|n}}=== {{ta-noun}} # {{lb|ta|anatomy}} [[ngón chân|Ngón chân]]. ===={{section|decl}}==== {{ta-decl|type=root}} ==={{section|ref}}=== * {{R:TAL}} p7fpedb9e2lr77o0413b4fs8c4l0a2f Bản mẫu:ta-con 10 395739 2350112 2026-05-04T06:05:23Z Hiyuune 50834 Trang mới: “{{#invoke:ta-headword|show|Liên từ}}<noinclude>{{tài liệu}}</noinclude>” 2350112 wikitext text/x-wiki {{#invoke:ta-headword|show|Liên từ}}<noinclude>{{tài liệu}}</noinclude> pksank2p9kp3ih3rnkhwmgdzr6q8bai கால் 0 395740 2350113 2026-05-04T06:18:34Z Hiyuune 50834 Trang mới: “{{also|கலை|குலை}} =={{langname|ta}}== ==={{section|pron}}=== {{ta-IPA}} * {{audio|ta|ta-கால்.ogg}} ==={{section|pron}} 1=== {{ety|ta|id=chân|:inh|dra-pro:*kāl<id:chân>}} {{inh+|ta|dra-pro|*kāl||[[chân]]}}. Cùng gốc với {{cog|kn|ಕಾಲು}}, {{cog|ml|കാൽ}}, {{cog|te|కాలు}}, {{cog|tcy|ಕಾರ್}}. ===={{section|n}}==== {{ta-noun}} # {{lb|ta|anatomy}} [[chân|Chân]]. # {{lb|ta|anatomy}} [[cẳng|Cẳng]]. #: {{syn|ta|…” 2350113 wikitext text/x-wiki {{also|கலை|குலை}} =={{langname|ta}}== ==={{section|pron}}=== {{ta-IPA}} * {{audio|ta|ta-கால்.ogg}} ==={{section|pron}} 1=== {{ety|ta|id=chân|:inh|dra-pro:*kāl<id:chân>}} {{inh+|ta|dra-pro|*kāl||[[chân]]}}. Cùng gốc với {{cog|kn|ಕಾಲು}}, {{cog|ml|കാൽ}}, {{cog|te|కాలు}}, {{cog|tcy|ಕಾರ್}}. ===={{section|n}}==== {{ta-noun}} # {{lb|ta|anatomy}} [[chân|Chân]]. # {{lb|ta|anatomy}} [[cẳng|Cẳng]]. #: {{syn|ta|பாதம்|அடி}} # [[một|Một]] phần [[tư]]; [[¼]]. # Nền [[móng]]; [[đáy]]; phía [[dưới]] #: {{syn|ta|அடி}} # Cuống [[hoa]]. #: {{syn|ta|தாள்}} # Sự [[chống]] [[đỡ]], [[hỗ trợ]]. #: {{syn|ta|ஊன்று|முட்டு}} # Tên của ký tự {{mention|ta|ா}} #: {{syn|ta|துணைக்கால்}} #: {{hypernyms|ta|கொம்புக்கால்}} # Cái [[móc]]; cái [[ghim]]; [[cọc]]. #: {{syn|ta|குறுந்தறி}} # [[cột trụ|Cột trụ]]. #: {{syn|ta|கம்பம்|தூண்}} # [[nguồn gốc|Nguồn gốc]] của [[địa điểm]]. #: {{syn|ta|பிறப்பிடம்}} # Đường [[mòn]], [[đường]] đi; đường nhỏ. #: {{syn|ta|வழி}} # [[buống|Buồng]], [[phòng]]. #: {{syn|ta|இடம்}} # [[con trai|Con trai]]. #: {{syn|ta|மகன்}} # [[bánh xe|Bánh xe]]. #: {{syn|ta|சக்கரம்}} # {{lb|ta|weaving}} [[bàn đạp|Bàn đạp]]. #: {{syn|ta|கால்மிதி}} # [[nước|Nước]] [[kiệu]] của [[ngựa]]. #: {{syn|ta|நடை}} ====={{section|decl}}===== {{ta-decl|type=root}} ====={{section|drv}}===== {{col|ta|கால்நடை|காலணி|காலாள்|காலுறை|முக்கால்|முக்காலி|நாற்காலி|உள்ளங்கால்|காலடி|கால்மிதி|துணைக்கால்|கணுக்கால்|முழங்கால்|கருங்காலி|அட்டங்கால்|காலிலி|அட்டணைக்கால்|சம்மணங்கால்|சப்பணங்கால்|முட்டுக்கால்|துடுப்புக்காலி|எட்டுக்கால் பூச்சி|நெட்டைக்காலி|காற்புள்ளி|கால்கட்டு|காலாழி|கால்விலங்கு|கால்விரல்|குதிகால்|குதிங்கால்|தேர்க்கால்|காலாடு|காலாறு|கடைகால்|கொம்புக்கால்|பொய்க்கால்|காலிறுதி|காற்சுவடு|கால்வாசி|கால்வழி|கால்மட்டம்|முன்னங்கால்|பின்னங்கால்|பந்தற்கால்}} ====={{section|desc}}===== * {{desc|si|කාලය|bor=1}} ==={{section|etym}} 2=== {{ety|ta|id=kênh|:inh|dra-pro:*kāl<id:kênh>}} {{inh+|ta|dra-pro|*kāl||[[kênh]]}}. ===={{section|n}}==== {{ta-noun}} # [[suối|Suối]] [[nhỏ]], [[ngòi]] [[nhỏ]]. #: {{syn|ta|வாய்க்கால்}} ====={{section|decl}}===== {{ta-decl|type=root}} ====={{section|drv}}===== {{col|ta|பாய்கால்|வாய்க்கால்|கால்வாய்|வடிகால்|நீர்க்கால்|சேற்றுக்கால்|வெள்ளக்கால்|ஏற்றக்கால்}} ==={{section|etym}} 3=== Cuối cùng từ {{der|ta|dra-pro|*kā||[[rừng]]}}. ===={{section|n}}==== {{ta-noun}} # [[rừng|Rừng]]. #: {{syn|ta|Kho từ vựng:காடு}} ====={{section|decl}}===== {{ta-decl|type=root}} ==={{section|etym}} 4=== Cùng gốc với {{cog|kn|ಗಾಳಿ}}, {{cog|ml|കാറ്റ്}}, {{cog|te|గాలి}}, {{cog|tcy|ಗಾಳಿ}}. Liên quan đến {{mention|ta|காற்று||gió; không khí, khí quyển}}. ===={{section|n}}==== {{ta-noun}} # [[gió|Gió]], [[không khí]], [[khí quyển]]. #: {{syn|ta|காற்று}} ====={{section|decl}}===== {{ta-decl|num=sg|type=root}} ====={{section|drv}}===== {{col|ta|கானெறி}} ==={{section|etym}} 5=== {{ety|ta|id=thời gian|:bor|sa:काल<id:time>}} Từ {{bor|ta|sa|काल|t=thời gian}}. {{dbt|ta|காலம்|காலன்}}. ===={{section|n}}==== {{ta-noun}} # [[thời gian|Thời gian]]. #: {{syn|ta|பொழுது}} # Sự ra [[hoa]]; sự nở [[hoa]], [[sắc đẹp]]. #: {{syn|ta|செவ்வி}} ====={{section|decl}}===== {{ta-decl|num=sg|type=root}} ==={{section|etym}} 6=== ===={{section|conj}}==== {{ta-con}} {{tlb|ta|literary}} # {{lb|ta|sau tính phân từ}} [[nếu|Nếu]], [[miễn là]], [[trong khi]], [[khi]]. #: {{syn|ta|போது}} ==={{section|ref}}=== * {{R:TAL}} * {{R:Cre-A 1992}} ==={{section|further}}=== * {{R:Winslow}} * {{R:Fabricius}} * {{R:Pillai}} odijc9ez6giv4cip78ck7to5fnbbybi ngại dùm 0 395741 2350116 2026-05-04T08:34:15Z .nhals8 60584 ([[Mediawiki:Gadget-start.js|Trang mới]]) +vi:phrase:# [[viết|Viết]] theo cách [[phát âm]] của '''[[giùm]]'''. 2350116 wikitext text/x-wiki =={{langname|vi}}== ==={{ĐM|pron}}=== {{vi-pron}} ==={{ĐM|phrase}}=== {{vi-phrase}} # [[viết|Viết]] theo cách [[phát âm]] của '''[[ngại giùm]]'''. {{mẫu}} ofmh5swu1gm73za9sd9x6hob4pro9dj Thành viên:PANG450m 2 395742 2350117 2026-05-04T08:37:15Z PANG450m 61175 Trang mới: “[[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]].~~~~” 2350117 wikitext text/x-wiki [[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]].[[Thành viên:PANG450m|PANG450m]] ([[Thảo luận Thành viên:PANG450m|thảo luận]]) 08:36, ngày 4 tháng 5 năm 2026 (UTC) tktvufmrhvmeofb1p5cbajzs60g8pj7 Thảo luận Thành viên:PANG450m 3 395743 2350118 2026-05-04T08:37:41Z PANG450m 61175 Trang mới: “[[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]]” 2350118 wikitext text/x-wiki [[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]] 5zocbrao17type0jq63m1brrqrwmvv9 Thành viên:PANG450n 2 395744 2350120 2026-05-04T09:09:15Z PANG450n 61176 Trang mới: “[[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]]” 2350120 wikitext text/x-wiki [[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]] 5zocbrao17type0jq63m1brrqrwmvv9 Thảo luận Thành viên:PANG450n 3 395745 2350121 2026-05-04T09:09:36Z PANG450n 61176 Trang mới: “[[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]]” 2350121 wikitext text/x-wiki [[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]] 5zocbrao17type0jq63m1brrqrwmvv9 Thảo luận Thành viên:PANG450 3 395746 2350126 2026-05-04T09:28:30Z PANG450n 61176 Trang mới: “[[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]]” 2350126 wikitext text/x-wiki [[Đặc_biệt:Đăng_nhập_trung_ương/PANG450v]] 5zocbrao17type0jq63m1brrqrwmvv9