Wikipedia testwiki https://test.wikipedia.org/wiki/Main_Page MediaWiki 1.47.0-wmf.6 first-letter Media Special Talk User User talk Wikipedia Wikipedia talk File File talk MediaWiki MediaWiki talk Template Template talk Help Help talk Category Category talk Thread Thread talk Summary Summary talk Test namespace 1 Test namespace 1 talk Test namespace 2 Test namespace 2 talk Draft Draft talk Campaign Campaign talk TimedText TimedText talk Module Module talk SecurePoll SecurePoll talk CNBanner CNBanner talk Translations Translations talk Event Event talk Topic Newsletter Newsletter talk Template:Both 10 41222 746259 409911 2024-06-15T14:15:23Z en>Explicit 0 [[Wikipedia:Templates for discussion/Log/2024 June 8#Template:Both]] closed as keep ([[WP:XFDC#4.0.15|XFDcloser]]) 409910 wikitext text/x-wiki {{SAFESUBST:<noinclude />#if:{{{1|}}}|{{SAFESUBST:<noinclude />#if:{{{2|}}}|1}}}}<noinclude> {{documentation}} </noinclude> a92g9dgn74wuyygsul02g6cnq29em4t 746260 746259 2026-06-12T21:56:12Z Robertsky 51025 1 revision imported from [[:en:Template:Both]] 409910 wikitext text/x-wiki {{SAFESUBST:<noinclude />#if:{{{1|}}}|{{SAFESUBST:<noinclude />#if:{{{2|}}}|1}}}}<noinclude> {{documentation}} </noinclude> a92g9dgn74wuyygsul02g6cnq29em4t Template:Location map 10 41284 746193 487035 2026-06-01T21:39:07Z en>Zackmann08 0 Undid revision [[Special:Diff/1357298296|1357298296]] by [[Special:Contributions/Zackmann08|Zackmann08]] ([[User talk:Zackmann08|talk]]) not fully flushed out 487034 wikitext text/x-wiki <includeonly>{{#invoke:Location map|main}}</includeonly><noinclude>{{documentation}}</noinclude> dg6vj3epjyfwx0m7tx62smhp6gs0y2u 746194 746193 2026-06-12T21:51:58Z Robertsky 51025 1 revision imported from [[:en:Template:Location_map]]: for workshop activity 487034 wikitext text/x-wiki <includeonly>{{#invoke:Location map|main}}</includeonly><noinclude>{{documentation}}</noinclude> dg6vj3epjyfwx0m7tx62smhp6gs0y2u Template:No 10 48562 746289 134819 2024-07-11T18:03:12Z en>Jonesey95 0 fix text color in dark mode; this generally works but may cause problems, in which case revert or try specifying a different CSS value 746289 wikitext text/x-wiki <noinclude>{| class="wikitable" |- |</noinclude>style="background:#FFC7C7;color:black;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-no"|{{{1|No}}}<noinclude> |} {{documentation}} </noinclude> nghoiochp86tws0qygulg4wjodf0sse 746290 746289 2026-06-12T21:56:16Z Robertsky 51025 1 revision imported from [[:en:Template:No]] 746289 wikitext text/x-wiki <noinclude>{| class="wikitable" |- |</noinclude>style="background:#FFC7C7;color:black;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-no"|{{{1|No}}}<noinclude> |} {{documentation}} </noinclude> nghoiochp86tws0qygulg4wjodf0sse Template:Yes 10 49171 746291 134829 2024-07-11T18:04:30Z en>Jonesey95 0 fix text color in dark mode; this generally works but may cause problems, in which case revert or try specifying a different CSS value 746291 wikitext text/x-wiki <noinclude> {| class="wikitable" |- |</noinclude>style="background:#9EFF9E;color:black;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-yes"|{{{1|Yes}}}<noinclude> |} {{documentation}} </noinclude> bgtt7vrln31bhly7j9zj7qq9axxg01v 746292 746291 2026-06-12T21:56:16Z Robertsky 51025 1 revision imported from [[:en:Template:Yes]] 746291 wikitext text/x-wiki <noinclude> {| class="wikitable" |- |</noinclude>style="background:#9EFF9E;color:black;vertical-align:middle;text-align:{{{align|center}}};{{{style|}}}" class="table-yes"|{{{1|Yes}}}<noinclude> |} {{documentation}} </noinclude> bgtt7vrln31bhly7j9zj7qq9axxg01v Template:Start date 10 65798 746187 637360 2025-03-11T11:58:05Z en>Primefac 0 Undid revision [[Special:Diff/1279926643|1279926643]] by [[Special:Contributions/Primefac|Primefac]] ([[User talk:Primefac|talk]]) bloody hell, the two of us have a ridiculous ability to edit-conflict (module updated two minutes ago) 746187 wikitext text/x-wiki <includeonly>{{#invoke:Date time|generate_date}}<!-- Tracking categories -->{{#invoke:Check for unknown parameters|check|unknown={{Main other|[[Category:Pages using start date with unknown parameters|_VALUE_]]}}|preview=Page using [[Template:Start date]] with unknown parameter "_VALUE_"|showblankpositional=1| 1 | 2 | 3 | 4 | 5 | 6 | 7 | df }}</includeonly><noinclude> {{documentation}} </noinclude> ryuirexkn63z8pry0gkvpkppv2541q9 746188 745055 2026-06-12T21:51:57Z Robertsky 51025 1 revision imported from [[:en:Template:Start_date]]: for workshop activity 745055 wikitext text/x-wiki <includeonly>{{#invoke:Date time|generate_date}}<!-- Tracking categories -->{{#invoke:Check for unknown parameters|check|unknown={{Main other|[[Category:Pages using start date with unknown parameters|_VALUE_]]}}|preview=Page using [[Template:Start date]] with unknown parameter "_VALUE_"|showblankpositional=1| 1 | 2 | 3 | 4 | 5 | 6 | 7 | df }}</includeonly><noinclude> {{documentation}} </noinclude> ryuirexkn63z8pry0gkvpkppv2541q9 Template:Infobox NRHP 10 68612 746297 164184 2026-04-24T16:14:22Z en>Epicgenius 0 /* */ add parameter for the edge case where a NRHP site is located in three districts 746297 wikitext text/x-wiki <includeonly>{{#ifeq:{{{embed|}}}|yes||{{main other|{{short description|United States historic place|noreplace}}}}}}</includeonly>{{Infobox |child={{#ifeq:{{{embed|}}}|yes|yes}} |bodystyle = border-spacing:1px;{{#if:{{{borderless|}}}|border-collapse:collapse; border-spacing:0px; border:none; width:100%; margin:0px; font-size:100%; clear:none; float:none}} |subheaderstyle = padding:0; border:none; |subheader = {{infobox|child=yes |data1 = <includeonly><div class="skin-nightmode-reset-color" style="width:100%; font-size:110%; font-weight:bold;color: var(--color-base); background:{{#invoke:Designation|color|nrhp}}; line-height:1.5">{{if empty|{{{name|}}}|{{PAGENAMEBASE}}}}</div></includeonly> |data2 = {{#ifeq:{{#invoke:String|find|source={{{refnum|}}}|target=^%s*(%d%d%d%d%d%d%d%d)|plain=false}}|0|{{#if:{{#switch:{{lc:{{{nrhp_type|}}}}}|cp|nhldcp=a}}{{#switch:{{lc:{{{nrhp_type2|}}}}}|cp|nhldcp=a}}{{#switch:{{lc:{{{nrhp_type3|}}}}}|cp|nhldcp=a}}{{#switch:{{lc:{{{nrhp_type4|}}}}}|cp|nhldcp=a}}||{{cat handler|main=[[Category:NRHP infobox needing cleanup]]}}}}|<div style="width:100%; text-align:center; line-height:1.5;color: var(--color-base); background:{{#if:{{{delisted|}}}|&#35;ddd|{{#invoke:Designation|color|nrhp}}}};">{{#if:{{{delisted|}}}|Formerly listed on the&nbsp;}}[[National Register of Historic Places|U.S. National Register of Historic Places]]</div>}} |data3 = {{#if:{{lc:{{{nrhp_type|}}}}}|{{#ifeq:{{lc:{{{nrhp_type}}}}}|nrhp||<div style="width:100%; text-align:center; line-height:1.4; color: var(--color-base); background:{{#invoke:Designation|color|{{{nrhp_type}}}}}">{{Infobox NRHP/conv|text|{{lc:{{{nrhp_type}}}}}|{{#if:{{{nocat|}}}|nocat|{{#if:{{{locmapin|}}}|{{#switch:{{{locmapin}}}|New York|New York#USA=New York (state)|USA Georgia=Georgia (U.S. state)|USA Washington|Washington=Washington (state)|District of Columbia|USA District of Columbia|Washington DC|Washington, DC|United States Washington, D.C.=Washington, D.C.|US Virgin Islands=the United States Virgin Islands|USA=the United States|{{{locmapin}}}}}|the United States}}}}}}</div>}}}} |data4 = {{#if:{{lc:{{{nrhp_type2|}}}}}|{{#ifeq:{{lc:{{{nrhp_type2}}}}}|nrhp||<div style="width:100%; text-align:center; line-height:1.5; color: var(--color-base);background:{{#invoke:Designation|color|{{{nrhp_type2}}}}}">{{Infobox NRHP/conv|text|{{lc:{{{nrhp_type2}}}}}|{{#if:{{{nocat|}}}|nocat|{{#if:{{{locmapin|}}}|{{#switch:{{{locmapin}}}|New York|New York#USA=New York (state)|USA Georgia=Georgia (U.S. state)|USA Washington|Washington=Washington (state)|District of Columbia|USA District of Columbia|Washington DC|Washington, DC|United States Washington, D.C.=Washington, D.C.|US Virgin Islands=the United States Virgin Islands|USA=the United States|{{{locmapin}}}}}|the United States}}}}}}</div>}}}} |data5 = {{#if:{{lc:{{{nrhp_type3|}}}}}|{{#ifeq:{{lc:{{{nrhp_type3}}}}}|nrhp||<div style="width:100%; text-align:center; line-height:1.5; color: var(--color-base);background:{{#invoke:Designation|color|{{{nrhp_type3}}}}}">{{Infobox NRHP/conv|text|{{lc:{{{nrhp_type3}}}}}|{{#if:{{{nocat|}}}|nocat|{{#if:{{{locmapin|}}}|{{#switch:{{{locmapin}}}|New York|New York#USA=New York (state)|USA Georgia=Georgia (U.S. state)|USA Washington|Washington=Washington (state)|District of Columbia|USA District of Columbia|Washington DC|Washington, DC|United States Washington, D.C.=Washington, D.C.|US Virgin Islands=the United States Virgin Islands|USA=the United States|{{{locmapin}}}}}|the United States}}}}}}</div>}}}} |data6 = {{#if:{{lc:{{{nrhp_type4|}}}}}|{{#ifeq:{{lc:{{{nrhp_type4}}}}}|nrhp||<div style="width:100%; text-align:center; line-height:1.5;color: var(--color-base); background:{{#invoke:Designation|color|{{{nrhp_type4}}}}}">{{Infobox NRHP/conv|text|{{lc:{{{nrhp_type4}}}}}|{{#if:{{{nocat|}}}|nocat|{{#if:{{{locmapin|}}}|{{#switch:{{{locmapin}}}|New York|New York#USA=New York (state)|USA Georgia=Georgia (U.S. state)|USA Washington|Washington=Washington (state)|District of Columbia|USA District of Columbia|Washington DC|Washington, DC|United States Washington, D.C.=Washington, D.C.|US Virgin Islands=the United States Virgin Islands|USA=the United States|{{{locmapin}}}}}|the United States}}}}}}</div>}}}} |data7 = {{#invoke:Designation|header|1}} |data8 = {{#invoke:Designation|header|2}} |data9 = {{#invoke:Designation|header|3}} }} |image1 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|size={{{image_size|}}}|sizedefault=frameless|upright=1.136|alt={{{alt|}}}}} |caption1 = {{{caption|}}} |image2 = {{#if:{{{district_map|}}} |{{#invoke:InfoboxImage|InfoboxImage|image={{{district_map|}}}|size={{{map_width|}}}|sizedefault=frameless|upright=1.136|alt={{{map_alt|}}}}} |{{#if:{{both|{{{locmapin|}}}|{{{coordinates|}}}{{#switch:{{#property:P625}}|unknown value|=|#default=1}}}}|{{Location map|{{if empty|{{{locmapin|}}}|USA}}|border=infobox|float=center|alt={{{map_alt|}}}|relief={{{locmap_relief|}}}|coordinates={{{coordinates|}}}|label={{if empty|{{{map_label|}}}|{{{locmap_label|}}}}}|label_width={{{label_width|}}}|label_size={{{label_size|}}}|position={{if empty|{{{label_position|}}}|{{{locmap_label_position|}}}}}|background={{{label_background|}}}|marksize=7|width={{if empty|{{{map_width|}}}|250}}|caption={{{map_caption|}}}}} }} }} |caption2 = {{#if:{{{district_map|}}}|{{{map_caption|}}}}} |image3 = {{#invoke:Infobox mapframe | autoWithCaption | mapframe-frame-width = 250 | mapframe-type = landmark | mapframe-caption = Interactive map of {{if empty|{{{name|}}}|{{PAGENAMEBASE}}}} }} |headerstyle=color: var(--color-base);background:{{#if:{{{delisted|}}}|&#35;ddd|{{#invoke:Designation|color|nrhp}}}} |datastyle = border: 0;<!---Style fix for when embedding in bordered infoboxes---> |labelstyle = font-weight:bold; border: 0; |label1 = Location |data1 = {{{location|}}} |label2 = Nearest city |data2 = {{{nearest_city|}}} <!--- Coordinates ---> |label3 = {{#ifeq:{{{coord_display}}}|title||Coordinates}} |data3 = {{#if:{{{coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates|}}}|type:landmark|region:{{Country abbreviation|United States|{{Infobox NRHP/locmapin2region|{{{locmapin|}}}}}}}}}|}} |label4 = Area |data4 = {{{area|}}} |label5 = Built |data5 = {{{built|}}} |label6 = Built by |data6 = {{{builder|}}} |label7 = Architect |data7 = {{{architect|}}} |label8 = Engineer |data8 = {{{engineer|}}} |label9 = {{{customarchitect_title|}}} |data9 = {{{customarchitect|}}} |label10 = Architectural&nbsp;style |data10 = {{{architecture|}}} |label11 = Demolished |data11 = {{{demolished|}}} |label12 = Restored |data12 = {{{restored|}}} |label13 = Restored by |data13 = {{{restored_by|}}} |label14 = Visitation |data14 = {{#if:{{{visitation_num|}}}|{{{visitation_num}}} {{#if:{{{visitation_year|}}}|({{{visitation_year}}})}}}}{{#if:{{{visitation_ref|}}}|{{{visitation_ref}}}}} |label15 = Website |data15 = {{{website|}}} <!-- leave space for possible future expansion of basic information parameters --> |label20 = Part of |data20 = {{#if:{{{partof2|}}} |{{Unbulleted list |1={{#if:{{{partof|}}}|{{auto link|{{{partof|}}}}} {{#if:{{{partof_refnum|}}}|({{#invoke:String|replace|{{{partof_refnum}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} ID%1]|1|false}})}}}} |2={{#if:{{{partof2|}}}|{{auto link|{{{partof2|}}}}} {{#if:{{{partof2_refnum|}}}|({{#invoke:String|replace|{{{partof2_refnum}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} ID%1]|1|false}})}}}} |3={{#if:{{{partof3|}}}|{{auto link|{{{partof3|}}}}} {{#if:{{{partof3_refnum|}}}|({{#invoke:String|replace|{{{partof3_refnum}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} ID%1]|1|false}})}}}} }} |{{#if:{{{partof|}}}|{{auto link|{{{partof|}}}}} {{#if:{{{partof_refnum|}}}|({{#invoke:String|replace|{{{partof_refnum}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} ID%1]|1|false}})}}}} }} |label21 = [[Multiple Property Submission|MPS]] |data21 = {{{mpsub|}}} |label22 = NRHP&nbsp;reference&nbsp;{{abbr|No.|number}} |data22 = {{#if:{{{refnum|}}}|{{#invoke:String|replace|{{{refnum}}}|^%s*(%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}}}{{#if:{{{increase_refnum|}}}{{{increase1_refnum|}}}|&nbsp;(original)<br />{{#invoke:String|replace|{{if empty|{{{increase_refnum|}}}|{{{increase1_refnum}}}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(increase{{#if:{{{increase2_refnum|}}}|&nbsp;1}}){{#if:{{{increase2_refnum|}}}|<br />{{#invoke:String|replace|{{{increase2_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(increase&nbsp;2)}}{{#if:{{{increase3_refnum|}}}|<br />{{#invoke:String|replace|{{{increase3_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(increase&nbsp;3)}}{{#if:{{{increase4_refnum|}}}|<br />{{#invoke:String|replace|{{{increase4_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(increase&nbsp;4)}}}} {{#if:{{{decrease_refnum|}}}{{{decrease1_refnum|}}}|<br />{{#invoke:String|replace|{{if empty|{{{decrease_refnum|}}}|{{{decrease1_refnum|}}}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(decrease{{#if:{{{decrease2_refnum|}}}|&nbsp;1}}){{#if:{{{decrease2_refnum|}}}|<br />{{#invoke:String|replace|{{{decrease2_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(decrease&nbsp;2)}}{{#if:{{{decrease3_refnum|}}}|<br />{{#invoke:String|replace|{{{decrease3_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(decrease&nbsp;3)}}{{#if:{{{decrease4_refnum|}}}|<br />{{#invoke:String|replace|{{{decrease4_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(decrease&nbsp;4)}}}} |label23 = {{#invoke:Designation|number|1}} |data23 = {{#ifeq:{{lc:{{{designated_other1_num_position}}}}}|top||{{{designated_other1_number|}}}}} |label24 = {{#invoke:Designation|number|2}} |data24 = {{#ifeq:{{lc:{{{designated_other2_num_position}}}}}|top||{{{designated_other2_number|}}}}} |label25 = {{#invoke:Designation|number|3}} |data25 = {{#ifeq:{{lc:{{{designated_other3_num_position}}}}}|top||{{{designated_other3_number|}}}}} <!--- Begin significant dates; more space for possible future expansion ---> |header30 = {{#ifexpr:0{{#if:{{{designated_other1_date|}}}|1}}{{#if:{{{designated_other2_date|}}}|1}}{{#if:{{{designated_other3_date|}}}|1}}{{#if:{{{added|}}}|1}}{{#if:{{{increase|}}}|1}}{{#if:{{{increase2|}}}|1}}{{#if:{{{increase3|}}}|1}}{{#if:{{{decrease|}}}|1}}{{#if:{{{decrease2|}}}|1}}{{#if:{{{decrease3|}}}|1}}{{#if:{{{designated_nrhp_type|}}}|1}}{{#if:{{{designated_nrhp_type2|}}}|1}}{{#if:{{{designated_nrhp_type3|}}}|1}}{{#if:{{{designated_nrhp_type4|}}}|1}}{{#if:{{{delisted|}}}|1}}{{#if:{{{delisted_nrhp_type|}}}|1}}{{#if:{{{delisted_nrhp_type2|}}}|1}}{{#if:{{{delisted_nrhp_type3|}}}|1}}{{#if:{{{delisted_nrhp_type4|}}}|1}}{{#if:{{{delisted_other1_date|}}}|1}}{{#if:{{{delisted_other2_date|}}}|1}}{{#if:{{{delisted_other3_date|}}}|1}}{{#if:{{{sigdate1|}}}{{{sigdate|}}}|1}}{{#if:{{{sigdate2|}}}|1}}{{#if:{{{sigdate3|}}}|1}}>1|Significant dates}} |label31 = {{if empty|{{{sigdate1_label|}}}|{{{sigdate_label|}}}}} |data31 = {{if empty|{{{sigdate1|}}}|{{{sigdate|}}}}} |label32 = {{{sigdate2_label|}}} |data32 = {{{sigdate2|}}} |label33 = {{{sigdate3_label|}}} |data33 = {{{sigdate3|}}} |label34 = Added to NRHP |data34 = {{{added|}}} |label35 = Boundary&nbsp;increase{{#if:{{{increase2|}}}|s}} |data35 = {{if empty|{{{increase|}}}|{{{increase1|}}}}}{{#if:{{{increase2|}}}|<br />{{{increase2}}}}}{{#if:{{{increase3|}}}|<br />{{{increase3}}}}}{{#if:{{{increase4|}}}|<br />{{{increase4}}}}} |label36 = Boundary&nbsp;decrease{{#if:{{{decrease2|}}}|s}} |data36 = {{if empty|{{{decrease|}}}|{{{decrease1|}}}}}{{#if:{{{decrease2|}}}|<br />{{{decrease2}}}}}{{#if:{{{decrease3|}}}|<br />{{{decrease3}}}}}{{#if:{{{decrease4|}}}|<br />{{{decrease4}}}}} |label37 = Designated&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type}}}}}}} |data37 = {{{designated_nrhp_type|}}} |label38 = Designated&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type2}}}}}}} |data38 = {{{designated_nrhp_type2|}}} |label39 = Designated&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type3}}}}}}} |data39 = {{{designated_nrhp_type3|}}} |label40 = Designated&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type4}}}}}}} |data40 = {{{designated_nrhp_type4|}}} |label41 = {{#invoke:Designation|label|1|Designated}} |data41 = {{{designated_other1_date|}}} |label42 = {{#invoke:Designation|label|2|Designated}} |data42 = {{{designated_other2_date|}}} |label43 = {{#invoke:Designation|label|3|Designated}} |data43 = {{{designated_other3_date|}}} |label44 = Removed from NRHP |data44 = {{{delisted|}}} |label45 = Delisted&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type}}}}}}} |data45 = {{{delisted_nrhp_type|}}} |label46 = Delisted&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type2}}}}}}} |data46 = {{{delisted_nrhp_type2|}}} |label47 = Delisted&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type3}}}}}}} |data47 = {{{delisted_nrhp_type3|}}} |label48 = Delisted&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type4}}}}}}} |data48 = {{{delisted_nrhp_type4|}}} |label49 = {{#invoke:Designation|label|1|Delisted}} |data49 = {{{delisted_other1_date|}}} |label50 = {{#invoke:Designation|label|2|Delisted}} |data50 = {{{delisted_other2_date|}}} |label51 = {{#invoke:Designation|label|3|Delisted}} |data51 = {{{delisted_other3_date|}}} |header52 = _BLANK_ |data53 = {{if empty|{{{embedded|}}}|{{{module|}}}}} }}<!--End of infobox-->{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox NRHP with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox NRHP]] with unknown parameter "_VALUE_"|ignoreblank=y|mapframe_args=y| added | alt | architect | architecture | area | borderless | builder | built | caption | coord_display | coordinates | customarchitect | customarchitect_title | decrease | decrease_refnum | decrease1 | decrease1_refnum | decrease2 | decrease2_refnum | decrease3 | decrease3_refnum | decrease4 | decrease4_refnum | delisted | delisted_nrhp_type | delisted_nrhp_type2 | delisted_nrhp_type3 | delisted_nrhp_type4 | delisted_other1_date | delisted_other2_date | delisted_other3_date | demolished | designated_nrhp_type | designated_nrhp_type2 | designated_nrhp_type3 | designated_nrhp_type4 | designated_other1 | designated_other1_abbr | designated_other1_color | designated_other1_date | designated_other1_link | designated_other1_name | designated_other1_num_position | designated_other1_number | designated_other1_textcolor | designated_other2 | designated_other2_abbr | designated_other2_color | designated_other2_date | designated_other2_link | designated_other2_name | designated_other2_num_position | designated_other2_number | designated_other2_textcolor | designated_other3 | designated_other3_abbr | designated_other3_color | designated_other3_date | designated_other3_link | designated_other3_name | designated_other3_num_position | designated_other3_number | designated_other3_textcolor | district_map | embed | embedded | engineer | image | image_size | increase | increase_refnum | increase1 | increase1_refnum | increase2 | increase2_refnum | increase3 | increase3_refnum | increase4 | increase4_refnum | label_background | label_position | label_size | label_width | location | locmap_label | locmap_label_position | locmap_relief | locmapin | map_alt | map_caption | map_label | map_width | module | mpsub | name | nearest_city | nocat | nrhp_type | nrhp_type2 | nrhp_type3 | nrhp_type4 | partof | partof_refnum | partof2 | partof2_refnum | partof3 | partof2_refnum | refnum | restored | restored_by | sigdate | sigdate_label | sigdate1 | sigdate1_label | sigdate2 | sigdate2_label | sigdate3 | sigdate3_label | visitation_num | visitation_ref | visitation_year | website }}<!-- -->{{Main other|{{#if:{{{nocat|}}}|[[Category:NRHP infobox with nocat]]}}}}{{#invoke:Check for conflicting parameters|check | template = [[Template:Infobox NRHP]] | cat = {{main other|Category:Pages using infobox NRHP with conflicting parameters}} | map_label; locmap_label | label_position; locmap_label_position | increase_refnum; increase1_refnum | decrease_refnum; decrease1_refnum | sigdate1_label; sigdate_label | sigdate1; sigdate | increase; increase1 | decrease; decrease1 | embedded; module }}<noinclude> {{documentation}} </noinclude> 5664viyu2wn7zpavtuvgtw0mucbyn5g 746298 746297 2026-06-12T21:56:17Z Robertsky 51025 1 revision imported from [[:en:Template:Infobox_NRHP]] 746297 wikitext text/x-wiki <includeonly>{{#ifeq:{{{embed|}}}|yes||{{main other|{{short description|United States historic place|noreplace}}}}}}</includeonly>{{Infobox |child={{#ifeq:{{{embed|}}}|yes|yes}} |bodystyle = border-spacing:1px;{{#if:{{{borderless|}}}|border-collapse:collapse; border-spacing:0px; border:none; width:100%; margin:0px; font-size:100%; clear:none; float:none}} |subheaderstyle = padding:0; border:none; |subheader = {{infobox|child=yes |data1 = <includeonly><div class="skin-nightmode-reset-color" style="width:100%; font-size:110%; font-weight:bold;color: var(--color-base); background:{{#invoke:Designation|color|nrhp}}; line-height:1.5">{{if empty|{{{name|}}}|{{PAGENAMEBASE}}}}</div></includeonly> |data2 = {{#ifeq:{{#invoke:String|find|source={{{refnum|}}}|target=^%s*(%d%d%d%d%d%d%d%d)|plain=false}}|0|{{#if:{{#switch:{{lc:{{{nrhp_type|}}}}}|cp|nhldcp=a}}{{#switch:{{lc:{{{nrhp_type2|}}}}}|cp|nhldcp=a}}{{#switch:{{lc:{{{nrhp_type3|}}}}}|cp|nhldcp=a}}{{#switch:{{lc:{{{nrhp_type4|}}}}}|cp|nhldcp=a}}||{{cat handler|main=[[Category:NRHP infobox needing cleanup]]}}}}|<div style="width:100%; text-align:center; line-height:1.5;color: var(--color-base); background:{{#if:{{{delisted|}}}|&#35;ddd|{{#invoke:Designation|color|nrhp}}}};">{{#if:{{{delisted|}}}|Formerly listed on the&nbsp;}}[[National Register of Historic Places|U.S. National Register of Historic Places]]</div>}} |data3 = {{#if:{{lc:{{{nrhp_type|}}}}}|{{#ifeq:{{lc:{{{nrhp_type}}}}}|nrhp||<div style="width:100%; text-align:center; line-height:1.4; color: var(--color-base); background:{{#invoke:Designation|color|{{{nrhp_type}}}}}">{{Infobox NRHP/conv|text|{{lc:{{{nrhp_type}}}}}|{{#if:{{{nocat|}}}|nocat|{{#if:{{{locmapin|}}}|{{#switch:{{{locmapin}}}|New York|New York#USA=New York (state)|USA Georgia=Georgia (U.S. state)|USA Washington|Washington=Washington (state)|District of Columbia|USA District of Columbia|Washington DC|Washington, DC|United States Washington, D.C.=Washington, D.C.|US Virgin Islands=the United States Virgin Islands|USA=the United States|{{{locmapin}}}}}|the United States}}}}}}</div>}}}} |data4 = {{#if:{{lc:{{{nrhp_type2|}}}}}|{{#ifeq:{{lc:{{{nrhp_type2}}}}}|nrhp||<div style="width:100%; text-align:center; line-height:1.5; color: var(--color-base);background:{{#invoke:Designation|color|{{{nrhp_type2}}}}}">{{Infobox NRHP/conv|text|{{lc:{{{nrhp_type2}}}}}|{{#if:{{{nocat|}}}|nocat|{{#if:{{{locmapin|}}}|{{#switch:{{{locmapin}}}|New York|New York#USA=New York (state)|USA Georgia=Georgia (U.S. state)|USA Washington|Washington=Washington (state)|District of Columbia|USA District of Columbia|Washington DC|Washington, DC|United States Washington, D.C.=Washington, D.C.|US Virgin Islands=the United States Virgin Islands|USA=the United States|{{{locmapin}}}}}|the United States}}}}}}</div>}}}} |data5 = {{#if:{{lc:{{{nrhp_type3|}}}}}|{{#ifeq:{{lc:{{{nrhp_type3}}}}}|nrhp||<div style="width:100%; text-align:center; line-height:1.5; color: var(--color-base);background:{{#invoke:Designation|color|{{{nrhp_type3}}}}}">{{Infobox NRHP/conv|text|{{lc:{{{nrhp_type3}}}}}|{{#if:{{{nocat|}}}|nocat|{{#if:{{{locmapin|}}}|{{#switch:{{{locmapin}}}|New York|New York#USA=New York (state)|USA Georgia=Georgia (U.S. state)|USA Washington|Washington=Washington (state)|District of Columbia|USA District of Columbia|Washington DC|Washington, DC|United States Washington, D.C.=Washington, D.C.|US Virgin Islands=the United States Virgin Islands|USA=the United States|{{{locmapin}}}}}|the United States}}}}}}</div>}}}} |data6 = {{#if:{{lc:{{{nrhp_type4|}}}}}|{{#ifeq:{{lc:{{{nrhp_type4}}}}}|nrhp||<div style="width:100%; text-align:center; line-height:1.5;color: var(--color-base); background:{{#invoke:Designation|color|{{{nrhp_type4}}}}}">{{Infobox NRHP/conv|text|{{lc:{{{nrhp_type4}}}}}|{{#if:{{{nocat|}}}|nocat|{{#if:{{{locmapin|}}}|{{#switch:{{{locmapin}}}|New York|New York#USA=New York (state)|USA Georgia=Georgia (U.S. state)|USA Washington|Washington=Washington (state)|District of Columbia|USA District of Columbia|Washington DC|Washington, DC|United States Washington, D.C.=Washington, D.C.|US Virgin Islands=the United States Virgin Islands|USA=the United States|{{{locmapin}}}}}|the United States}}}}}}</div>}}}} |data7 = {{#invoke:Designation|header|1}} |data8 = {{#invoke:Designation|header|2}} |data9 = {{#invoke:Designation|header|3}} }} |image1 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|size={{{image_size|}}}|sizedefault=frameless|upright=1.136|alt={{{alt|}}}}} |caption1 = {{{caption|}}} |image2 = {{#if:{{{district_map|}}} |{{#invoke:InfoboxImage|InfoboxImage|image={{{district_map|}}}|size={{{map_width|}}}|sizedefault=frameless|upright=1.136|alt={{{map_alt|}}}}} |{{#if:{{both|{{{locmapin|}}}|{{{coordinates|}}}{{#switch:{{#property:P625}}|unknown value|=|#default=1}}}}|{{Location map|{{if empty|{{{locmapin|}}}|USA}}|border=infobox|float=center|alt={{{map_alt|}}}|relief={{{locmap_relief|}}}|coordinates={{{coordinates|}}}|label={{if empty|{{{map_label|}}}|{{{locmap_label|}}}}}|label_width={{{label_width|}}}|label_size={{{label_size|}}}|position={{if empty|{{{label_position|}}}|{{{locmap_label_position|}}}}}|background={{{label_background|}}}|marksize=7|width={{if empty|{{{map_width|}}}|250}}|caption={{{map_caption|}}}}} }} }} |caption2 = {{#if:{{{district_map|}}}|{{{map_caption|}}}}} |image3 = {{#invoke:Infobox mapframe | autoWithCaption | mapframe-frame-width = 250 | mapframe-type = landmark | mapframe-caption = Interactive map of {{if empty|{{{name|}}}|{{PAGENAMEBASE}}}} }} |headerstyle=color: var(--color-base);background:{{#if:{{{delisted|}}}|&#35;ddd|{{#invoke:Designation|color|nrhp}}}} |datastyle = border: 0;<!---Style fix for when embedding in bordered infoboxes---> |labelstyle = font-weight:bold; border: 0; |label1 = Location |data1 = {{{location|}}} |label2 = Nearest city |data2 = {{{nearest_city|}}} <!--- Coordinates ---> |label3 = {{#ifeq:{{{coord_display}}}|title||Coordinates}} |data3 = {{#if:{{{coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates|}}}|type:landmark|region:{{Country abbreviation|United States|{{Infobox NRHP/locmapin2region|{{{locmapin|}}}}}}}}}|}} |label4 = Area |data4 = {{{area|}}} |label5 = Built |data5 = {{{built|}}} |label6 = Built by |data6 = {{{builder|}}} |label7 = Architect |data7 = {{{architect|}}} |label8 = Engineer |data8 = {{{engineer|}}} |label9 = {{{customarchitect_title|}}} |data9 = {{{customarchitect|}}} |label10 = Architectural&nbsp;style |data10 = {{{architecture|}}} |label11 = Demolished |data11 = {{{demolished|}}} |label12 = Restored |data12 = {{{restored|}}} |label13 = Restored by |data13 = {{{restored_by|}}} |label14 = Visitation |data14 = {{#if:{{{visitation_num|}}}|{{{visitation_num}}} {{#if:{{{visitation_year|}}}|({{{visitation_year}}})}}}}{{#if:{{{visitation_ref|}}}|{{{visitation_ref}}}}} |label15 = Website |data15 = {{{website|}}} <!-- leave space for possible future expansion of basic information parameters --> |label20 = Part of |data20 = {{#if:{{{partof2|}}} |{{Unbulleted list |1={{#if:{{{partof|}}}|{{auto link|{{{partof|}}}}} {{#if:{{{partof_refnum|}}}|({{#invoke:String|replace|{{{partof_refnum}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} ID%1]|1|false}})}}}} |2={{#if:{{{partof2|}}}|{{auto link|{{{partof2|}}}}} {{#if:{{{partof2_refnum|}}}|({{#invoke:String|replace|{{{partof2_refnum}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} ID%1]|1|false}})}}}} |3={{#if:{{{partof3|}}}|{{auto link|{{{partof3|}}}}} {{#if:{{{partof3_refnum|}}}|({{#invoke:String|replace|{{{partof3_refnum}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} ID%1]|1|false}})}}}} }} |{{#if:{{{partof|}}}|{{auto link|{{{partof|}}}}} {{#if:{{{partof_refnum|}}}|({{#invoke:String|replace|{{{partof_refnum}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} ID%1]|1|false}})}}}} }} |label21 = [[Multiple Property Submission|MPS]] |data21 = {{{mpsub|}}} |label22 = NRHP&nbsp;reference&nbsp;{{abbr|No.|number}} |data22 = {{#if:{{{refnum|}}}|{{#invoke:String|replace|{{{refnum}}}|^%s*(%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}}}{{#if:{{{increase_refnum|}}}{{{increase1_refnum|}}}|&nbsp;(original)<br />{{#invoke:String|replace|{{if empty|{{{increase_refnum|}}}|{{{increase1_refnum}}}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(increase{{#if:{{{increase2_refnum|}}}|&nbsp;1}}){{#if:{{{increase2_refnum|}}}|<br />{{#invoke:String|replace|{{{increase2_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(increase&nbsp;2)}}{{#if:{{{increase3_refnum|}}}|<br />{{#invoke:String|replace|{{{increase3_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(increase&nbsp;3)}}{{#if:{{{increase4_refnum|}}}|<br />{{#invoke:String|replace|{{{increase4_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(increase&nbsp;4)}}}} {{#if:{{{decrease_refnum|}}}{{{decrease1_refnum|}}}|<br />{{#invoke:String|replace|{{if empty|{{{decrease_refnum|}}}|{{{decrease1_refnum|}}}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(decrease{{#if:{{{decrease2_refnum|}}}|&nbsp;1}}){{#if:{{{decrease2_refnum|}}}|<br />{{#invoke:String|replace|{{{decrease2_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(decrease&nbsp;2)}}{{#if:{{{decrease3_refnum|}}}|<br />{{#invoke:String|replace|{{{decrease3_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(decrease&nbsp;3)}}{{#if:{{{decrease4_refnum|}}}|<br />{{#invoke:String|replace|{{{decrease4_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}}&nbsp;(decrease&nbsp;4)}}}} |label23 = {{#invoke:Designation|number|1}} |data23 = {{#ifeq:{{lc:{{{designated_other1_num_position}}}}}|top||{{{designated_other1_number|}}}}} |label24 = {{#invoke:Designation|number|2}} |data24 = {{#ifeq:{{lc:{{{designated_other2_num_position}}}}}|top||{{{designated_other2_number|}}}}} |label25 = {{#invoke:Designation|number|3}} |data25 = {{#ifeq:{{lc:{{{designated_other3_num_position}}}}}|top||{{{designated_other3_number|}}}}} <!--- Begin significant dates; more space for possible future expansion ---> |header30 = {{#ifexpr:0{{#if:{{{designated_other1_date|}}}|1}}{{#if:{{{designated_other2_date|}}}|1}}{{#if:{{{designated_other3_date|}}}|1}}{{#if:{{{added|}}}|1}}{{#if:{{{increase|}}}|1}}{{#if:{{{increase2|}}}|1}}{{#if:{{{increase3|}}}|1}}{{#if:{{{decrease|}}}|1}}{{#if:{{{decrease2|}}}|1}}{{#if:{{{decrease3|}}}|1}}{{#if:{{{designated_nrhp_type|}}}|1}}{{#if:{{{designated_nrhp_type2|}}}|1}}{{#if:{{{designated_nrhp_type3|}}}|1}}{{#if:{{{designated_nrhp_type4|}}}|1}}{{#if:{{{delisted|}}}|1}}{{#if:{{{delisted_nrhp_type|}}}|1}}{{#if:{{{delisted_nrhp_type2|}}}|1}}{{#if:{{{delisted_nrhp_type3|}}}|1}}{{#if:{{{delisted_nrhp_type4|}}}|1}}{{#if:{{{delisted_other1_date|}}}|1}}{{#if:{{{delisted_other2_date|}}}|1}}{{#if:{{{delisted_other3_date|}}}|1}}{{#if:{{{sigdate1|}}}{{{sigdate|}}}|1}}{{#if:{{{sigdate2|}}}|1}}{{#if:{{{sigdate3|}}}|1}}>1|Significant dates}} |label31 = {{if empty|{{{sigdate1_label|}}}|{{{sigdate_label|}}}}} |data31 = {{if empty|{{{sigdate1|}}}|{{{sigdate|}}}}} |label32 = {{{sigdate2_label|}}} |data32 = {{{sigdate2|}}} |label33 = {{{sigdate3_label|}}} |data33 = {{{sigdate3|}}} |label34 = Added to NRHP |data34 = {{{added|}}} |label35 = Boundary&nbsp;increase{{#if:{{{increase2|}}}|s}} |data35 = {{if empty|{{{increase|}}}|{{{increase1|}}}}}{{#if:{{{increase2|}}}|<br />{{{increase2}}}}}{{#if:{{{increase3|}}}|<br />{{{increase3}}}}}{{#if:{{{increase4|}}}|<br />{{{increase4}}}}} |label36 = Boundary&nbsp;decrease{{#if:{{{decrease2|}}}|s}} |data36 = {{if empty|{{{decrease|}}}|{{{decrease1|}}}}}{{#if:{{{decrease2|}}}|<br />{{{decrease2}}}}}{{#if:{{{decrease3|}}}|<br />{{{decrease3}}}}}{{#if:{{{decrease4|}}}|<br />{{{decrease4}}}}} |label37 = Designated&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type}}}}}}} |data37 = {{{designated_nrhp_type|}}} |label38 = Designated&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type2}}}}}}} |data38 = {{{designated_nrhp_type2|}}} |label39 = Designated&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type3}}}}}}} |data39 = {{{designated_nrhp_type3|}}} |label40 = Designated&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type4}}}}}}} |data40 = {{{designated_nrhp_type4|}}} |label41 = {{#invoke:Designation|label|1|Designated}} |data41 = {{{designated_other1_date|}}} |label42 = {{#invoke:Designation|label|2|Designated}} |data42 = {{{designated_other2_date|}}} |label43 = {{#invoke:Designation|label|3|Designated}} |data43 = {{{designated_other3_date|}}} |label44 = Removed from NRHP |data44 = {{{delisted|}}} |label45 = Delisted&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type}}}}}}} |data45 = {{{delisted_nrhp_type|}}} |label46 = Delisted&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type2}}}}}}} |data46 = {{{delisted_nrhp_type2|}}} |label47 = Delisted&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type3}}}}}}} |data47 = {{{delisted_nrhp_type3|}}} |label48 = Delisted&nbsp;{{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type4}}}}}}} |data48 = {{{delisted_nrhp_type4|}}} |label49 = {{#invoke:Designation|label|1|Delisted}} |data49 = {{{delisted_other1_date|}}} |label50 = {{#invoke:Designation|label|2|Delisted}} |data50 = {{{delisted_other2_date|}}} |label51 = {{#invoke:Designation|label|3|Delisted}} |data51 = {{{delisted_other3_date|}}} |header52 = _BLANK_ |data53 = {{if empty|{{{embedded|}}}|{{{module|}}}}} }}<!--End of infobox-->{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox NRHP with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox NRHP]] with unknown parameter "_VALUE_"|ignoreblank=y|mapframe_args=y| added | alt | architect | architecture | area | borderless | builder | built | caption | coord_display | coordinates | customarchitect | customarchitect_title | decrease | decrease_refnum | decrease1 | decrease1_refnum | decrease2 | decrease2_refnum | decrease3 | decrease3_refnum | decrease4 | decrease4_refnum | delisted | delisted_nrhp_type | delisted_nrhp_type2 | delisted_nrhp_type3 | delisted_nrhp_type4 | delisted_other1_date | delisted_other2_date | delisted_other3_date | demolished | designated_nrhp_type | designated_nrhp_type2 | designated_nrhp_type3 | designated_nrhp_type4 | designated_other1 | designated_other1_abbr | designated_other1_color | designated_other1_date | designated_other1_link | designated_other1_name | designated_other1_num_position | designated_other1_number | designated_other1_textcolor | designated_other2 | designated_other2_abbr | designated_other2_color | designated_other2_date | designated_other2_link | designated_other2_name | designated_other2_num_position | designated_other2_number | designated_other2_textcolor | designated_other3 | designated_other3_abbr | designated_other3_color | designated_other3_date | designated_other3_link | designated_other3_name | designated_other3_num_position | designated_other3_number | designated_other3_textcolor | district_map | embed | embedded | engineer | image | image_size | increase | increase_refnum | increase1 | increase1_refnum | increase2 | increase2_refnum | increase3 | increase3_refnum | increase4 | increase4_refnum | label_background | label_position | label_size | label_width | location | locmap_label | locmap_label_position | locmap_relief | locmapin | map_alt | map_caption | map_label | map_width | module | mpsub | name | nearest_city | nocat | nrhp_type | nrhp_type2 | nrhp_type3 | nrhp_type4 | partof | partof_refnum | partof2 | partof2_refnum | partof3 | partof2_refnum | refnum | restored | restored_by | sigdate | sigdate_label | sigdate1 | sigdate1_label | sigdate2 | sigdate2_label | sigdate3 | sigdate3_label | visitation_num | visitation_ref | visitation_year | website }}<!-- -->{{Main other|{{#if:{{{nocat|}}}|[[Category:NRHP infobox with nocat]]}}}}{{#invoke:Check for conflicting parameters|check | template = [[Template:Infobox NRHP]] | cat = {{main other|Category:Pages using infobox NRHP with conflicting parameters}} | map_label; locmap_label | label_position; locmap_label_position | increase_refnum; increase1_refnum | decrease_refnum; decrease1_refnum | sigdate1_label; sigdate_label | sigdate1; sigdate | increase; increase1 | decrease; decrease1 | embedded; module }}<noinclude> {{documentation}} </noinclude> 5664viyu2wn7zpavtuvgtw0mucbyn5g Template:UF-hcard-geo 10 68653 746217 164318 2026-05-11T14:08:13Z en>Colonies Chris 0 minor fixes 746217 wikitext text/x-wiki The HTML markup produced by this template includes an [[HCard| hCard microformat]], which makes the place-name and location [[Parsing|parsable]] by computers, either acting automatically to catalogue articles across Wikipedia, or via a browser tool operated by a person, to (for example) add the subject to an address book. Within the hCard is a [[Geo (microformat)|Geo microformat]], which additionally makes the [[Geographic coordinate system|coordinates]] (latitude & longitude) parsable, so that they can be, say, looked up on a map, or downloaded to a [[Global Positioning System|GPS]] unit. For more information about the use of [[microformat]]s on Wikipedia, please see [[Wikipedia:WikiProject Microformats|the microformat project]]. === Sub-templates === If the place or venue has "established", "founded", "opened" or similar dates, use {{template link|start date}} for the earliest of those dates [[Wikipedia:WikiProject Microformats/dates|unless the date is before 1583 CE]]. If it has a URL, use {{template link|URL}}. '''Please do not remove instances of these sub-templates.''' === Classes === hCard uses HTML classes including: {{Flatlist| *adr *agent *category *county-name *extended-address *fn *label *locality *nickname *note *org *region *street-address *uid *url *vcard }} Geo is produced by calling {{template link|coord}}, and uses HTML classes: {{Flatlist| *geo *latitude *longitude }} '''Please do not rename or remove these classes nor collapse nested elements which use them.''' === Precision === When giving coordinates, '''please use an [[Wikipedia:WikiProject Geographical coordinates#Precision|appropriate level of precision]]'''. Do '''not''' use {{template link|coord}}'s {{parameter|name}} parameter.<includeonly>{{#ifeq:{{SUBPAGENAME}}|doc | | [[Category:Templates with coordinates fields]] [[Category:Templates generating hCards and Geo]] }}</includeonly><noinclude>__NOTOC__{{documentation}}</noinclude> rjilsgluahf7viz7tcdgkr77y2jyaes 746218 746217 2026-06-12T21:52:01Z Robertsky 51025 1 revision imported from [[:en:Template:UF-hcard-geo]]: for workshop activity 746217 wikitext text/x-wiki The HTML markup produced by this template includes an [[HCard| hCard microformat]], which makes the place-name and location [[Parsing|parsable]] by computers, either acting automatically to catalogue articles across Wikipedia, or via a browser tool operated by a person, to (for example) add the subject to an address book. Within the hCard is a [[Geo (microformat)|Geo microformat]], which additionally makes the [[Geographic coordinate system|coordinates]] (latitude & longitude) parsable, so that they can be, say, looked up on a map, or downloaded to a [[Global Positioning System|GPS]] unit. For more information about the use of [[microformat]]s on Wikipedia, please see [[Wikipedia:WikiProject Microformats|the microformat project]]. === Sub-templates === If the place or venue has "established", "founded", "opened" or similar dates, use {{template link|start date}} for the earliest of those dates [[Wikipedia:WikiProject Microformats/dates|unless the date is before 1583 CE]]. If it has a URL, use {{template link|URL}}. '''Please do not remove instances of these sub-templates.''' === Classes === hCard uses HTML classes including: {{Flatlist| *adr *agent *category *county-name *extended-address *fn *label *locality *nickname *note *org *region *street-address *uid *url *vcard }} Geo is produced by calling {{template link|coord}}, and uses HTML classes: {{Flatlist| *geo *latitude *longitude }} '''Please do not rename or remove these classes nor collapse nested elements which use them.''' === Precision === When giving coordinates, '''please use an [[Wikipedia:WikiProject Geographical coordinates#Precision|appropriate level of precision]]'''. Do '''not''' use {{template link|coord}}'s {{parameter|name}} parameter.<includeonly>{{#ifeq:{{SUBPAGENAME}}|doc | | [[Category:Templates with coordinates fields]] [[Category:Templates generating hCards and Geo]] }}</includeonly><noinclude>__NOTOC__{{documentation}}</noinclude> rjilsgluahf7viz7tcdgkr77y2jyaes Module:Math 828 68657 746185 733254 2026-04-10T14:26:08Z en>Ahecht 0 Rewrite rounding and precision code to run faster, other code cleanup including removing unused variables. Please revert if this causes any unexpected side effects 746185 Scribunto text/plain --[[ This module provides a number of basic mathematical operations. ]] local yesno, getArgs -- lazily initialized local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules. local wrap = {} -- Holds wrapper functions that process arguments from #invoke. These act as intemediary between functions meant for #invoke and functions meant for Lua. --[[ Helper functions used to avoid redundant code. ]] local function err(msg) -- Generates wikitext error messages. return mw.ustring.format('<strong class="error">Formatting error: %s</strong>', msg) end local function unpackNumberArgs(args) -- Returns an unpacked list of arguments specified with numerical keys. local ret = {} for k, v in pairs(args) do if type(k) == 'number' then table.insert(ret, v) end end return unpack(ret) end local function makeArgArray(...) -- Makes an array of arguments from a list of arguments that might include nils. local args = {...} -- Table of arguments. It might contain nils or non-number values, so we can't use ipairs. local nums = {} -- Stores the numbers of valid numerical arguments. local ret = {} for k, v in pairs(args) do v = p._cleanNumber(v) if v then nums[#nums + 1] = k args[k] = v end end table.sort(nums) for i, num in ipairs(nums) do ret[#ret + 1] = args[num] end return ret end local function fold(func, ...) -- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters, -- and must return a number as an output. This number is then supplied as input to the next function call. local vals = makeArgArray(...) local count = #vals -- The number of valid arguments if count == 0 then return -- Exit if we have no valid args, otherwise removing the first arg would cause an error. nil, 0 end local ret = table.remove(vals, 1) for _, val in ipairs(vals) do ret = func(ret, val) end return ret, count end --[[ Fold arguments by selectively choosing values (func should return when to choose the current "dominant" value). ]] local function binary_fold(func, ...) local value = fold((function(a, b) if func(a, b) then return a else return b end end), ...) return value end --[[ random Generate a random number Usage: {{#invoke: Math | random }} {{#invoke: Math | random | maximum value }} {{#invoke: Math | random | minimum value | maximum value }} ]] function wrap.random(args) local first = p._cleanNumber(args[1]) local second = p._cleanNumber(args[2]) return p._random(first, second) end function p._random(first, second) math.randomseed(mw.site.stats.edits + mw.site.stats.pages + os.time() + math.floor(os.clock() * 1000000000)) -- math.random will throw an error if given an explicit nil parameter, so we need to use if statements to check the params. if first and second then if first <= second then -- math.random doesn't allow the first number to be greater than the second. return math.random(first, second) end elseif first then return math.random(first) else return math.random() end end --[[ order Determine order of magnitude of a number Usage: {{#invoke: Math | order | value }} ]] function wrap.order(args) local input_string = (args[1] or args.x or '0'); local input_number = p._cleanNumber(input_string); if input_number == nil then return err('order of magnitude input appears non-numeric') else return p._order(input_number) end end function p._order(x) if x == 0 then return 0 end return math.floor(math.log10(math.abs(x))) end --[[ precision Detemines the precision of a number using the string representation Usage: {{ #invoke: Math | precision | value }} ]] function wrap.precision(args) local input_string = (args[1] or args.x or '0'); local trap_fraction = args.check_fraction; if not yesno then yesno = require('Module:Yesno') end if yesno(trap_fraction, true) then -- Returns true for all input except nil, false, "no", "n", "0" and a few others. See [[Module:Yesno]]. local pos = string.find(input_string, '/', 1, true); if pos ~= nil then if string.find(input_string, '/', pos + 1, true) == nil then local denominator = string.sub(input_string, pos+1, -1); local denom_value = tonumber(denominator); if denom_value ~= nil then return math.log10(denom_value); end end end end local _, clean_string = p._cleanNumber(input_string); if clean_string == nil then return err('precision input appears non-numeric') else return p._precision(clean_string) end end function p._precision(x) if type(x) == 'number' then x = tostring(x) end local result = 0; --subtract exponent local _, _, coefficient, exponent = x:find("^(.*)[eE](.*)$") if coefficient then result = result - (tonumber(exponent) or 0) x = coefficient end --add decimal places local i, j = x:find('%..*$') if i then result = result + (j - i) return result end --subtract trailing zeroes i, j = x:find('[^0]0+$') if i then result = result - (j - i) end return result end --[[ max Finds the maximum argument Usage: {{#invoke:Math| max | value1 | value2 | ... }} Note, any values that do not evaluate to numbers are ignored. ]] function wrap.max(args) return p._max(unpackNumberArgs(args)) end function p._max(...) local max_value = binary_fold((function(a, b) return a > b end), ...) if max_value then return max_value end end --[[ median Find the median of set of numbers Usage: {{#invoke:Math | median | number1 | number2 | ...}} OR {{#invoke:Math | median }} ]] function wrap.median(args) return p._median(unpackNumberArgs(args)) end function p._median(...) local vals = makeArgArray(...) local count = #vals table.sort(vals) if count == 0 then return 0 end if p._mod(count, 2) == 0 then return (vals[count/2] + vals[count/2+1])/2 else return vals[math.ceil(count/2)] end end --[[ min Finds the minimum argument Usage: {{#invoke:Math| min | value1 | value2 | ... }} OR {{#invoke:Math| min }} When used with no arguments, it takes its input from the parent frame. Note, any values that do not evaluate to numbers are ignored. ]] function wrap.min(args) return p._min(unpackNumberArgs(args)) end function p._min(...) local min_value = binary_fold((function(a, b) return a < b end), ...) if min_value then return min_value end end --[[ sum Finds the sum Usage: {{#invoke:Math| sum | value1 | value2 | ... }} OR {{#invoke:Math| sum }} Note, any values that do not evaluate to numbers are ignored. ]] function wrap.sum(args) return p._sum(unpackNumberArgs(args)) end function p._sum(...) local sums = fold((function(a, b) return a + b end), ...) if not sums then return 0 else return sums end end --[[ average Finds the average Usage: {{#invoke:Math| average | value1 | value2 | ... }} OR {{#invoke:Math| average }} Note, any values that do not evaluate to numbers are ignored. ]] function wrap.average(args) return p._average(unpackNumberArgs(args)) end function p._average(...) local sum, count = fold((function(a, b) return a + b end), ...) if not sum then return 0 else return sum / count end end --[[ round Rounds a number to specified precision Usage: {{#invoke:Math | round | value | precision }} --]] function wrap.round(args) local value = p._cleanNumber(args[1] or args.value or 0) local precision = p._cleanNumber(args[2] or args.precision or 0) if value == nil or precision == nil then return err('round input appears non-numeric') else return p._round(value, precision) end end function p._round(value, precision) local rescale = math.pow(10, precision or 0); return math.floor(value * rescale + 0.5) / rescale; end --[[ log10 returns the log (base 10) of a number Usage: {{#invoke:Math | log10 | x }} ]] function wrap.log10(args) return math.log10(args[1]) end --[[ mod Implements the modulo operator Usage: {{#invoke:Math | mod | x | y }} --]] function wrap.mod(args) local x = p._cleanNumber(args[1]) local y = p._cleanNumber(args[2]) if not x then return err('first argument to mod appears non-numeric') elseif not y then return err('second argument to mod appears non-numeric') else return p._mod(x, y) end end function p._mod(x, y) local ret = x % y if not (0 <= ret and ret < y) then ret = 0 end return ret end --[[ gcd Calculates the greatest common divisor of multiple numbers Usage: {{#invoke:Math | gcd | value 1 | value 2 | value 3 | ... }} --]] function wrap.gcd(args) return p._gcd(unpackNumberArgs(args)) end function p._gcd(...) local function findGcd(a, b) local r = b local oldr = a while r ~= 0 do local quotient = math.floor(oldr / r) oldr, r = r, oldr - quotient * r end if oldr < 0 then oldr = oldr * -1 end return oldr end local result = fold(findGcd, ...) return result end --[[ precision_format Rounds a number to the specified precision and formats according to rules originally used for {{template:Rnd}}. Output is a string. Usage: {{#invoke: Math | precision_format | number | precision }} ]] function wrap.precision_format(args) local value_string = args[1] or 0 local precision = args[2] or 0 return p._precision_format(value_string, precision) end function p._precision_format(value_string, precision) -- For access to Mediawiki built-in formatter. local lang = mw.getContentLanguage(); local value value, value_string = p._cleanNumber(value_string) precision = p._cleanNumber(precision) -- Check for non-numeric input if value == nil or precision == nil then return err('invalid input when rounding') end local abs_value = math.abs(value) local current_precision = p._precision(value) local order = p._order(value) -- Due to round-off effects it is neccesary to limit the returned precision under -- some circumstances because the terminal digits will be inaccurately reported. if order + precision >= 14 then if order + p._precision(value_string) >= 14 then precision = 13 - order; end end -- If rounding off, truncate extra digits if precision < current_precision then value = p._round(value, precision) abs_value = math.abs(value) current_precision = p._precision(value) end local formatted_num = lang:formatNum(abs_value) -- Handle cases requiring scientific notation if math.abs(order) >= 9 or string.find(formatted_num, 'E', 1, true) then value = value * (10 ^ (-order)) abs_value = math.abs(value) current_precision = current_precision + order precision = precision + order formatted_num = lang:formatNum(abs_value) else order = 0; end -- Use proper unary minus sign rather than ASCII default formatted_num = ((value < 0) and '−' or '') .. formatted_num -- Pad with zeros, if needed if current_precision < precision then local padding if current_precision <= 0 then if precision > 0 then local zero_sep = lang:formatNum(1.1) formatted_num = formatted_num .. zero_sep:sub(2,2) padding = precision if padding > 20 then padding = 20 end formatted_num = formatted_num .. string.rep('0', padding) end else padding = precision - current_precision if padding > 20 then padding = 20 end formatted_num = formatted_num .. string.rep('0', padding) end end -- Add exponential notation, if necessary. if order ~= 0 then -- Use proper unary minus sign rather than ASCII default if order < 0 then order = '−' .. lang:formatNum(math.abs(order)) else order = lang:formatNum(order) end formatted_num = formatted_num .. '<span style="margin:0 .15em 0 .25em">×</span>10<sup>' .. order .. '</sup>' end return formatted_num end --[[ divide Implements the division operator Usage: {{#invoke:Math | divide | x | y | round= | precision= }} --]] function wrap.divide(args) local x = args[1] local y = args[2] local round = args.round local precision = args.precision if not yesno then yesno = require('Module:Yesno') end return p._divide(x, y, yesno(round), precision) end function p._divide(x, y, round, precision) if y == nil or y == "" then return err("Empty divisor") elseif not tonumber(y) then if type(y) == 'string' and string.sub(y, 1, 1) == '<' then return y else return err("Not a number: " .. y) end elseif x == nil or x == "" then return err("Empty dividend") elseif not tonumber(x) then if type(x) == 'string' and string.sub(x, 1, 1) == '<' then return x else return err("Not a number: " .. x) end else local z = x / y if round then return p._round(z, 0) elseif precision then return p._round(z, precision) else return z end end end --[[ Helper function that interprets the input numerically. If the input does not appear to be a number, attempts evaluating it as a parser functions expression. ]] function p._cleanNumber(number_string, unformat) if type(number_string) == 'number' then -- We were passed a number, so we don't need to do any processing. return number_string, tostring(number_string) elseif type(number_string) ~= 'string' or not number_string:find('%S') then -- We were passed a non-string or a blank string, so exit. return nil, nil; end -- Attempt basic conversion local number = tonumber(number_string) -- If failed, try unformatting the number_string if unformat and number == nil then -- Cannot use mw.language.getContentLanguage():parseFormattedNumber() -- because, unlike {{formatnum:|R}}, it won't ignore operators (it -- would return an error on "1,234+1,234" instead of "1234+1234") number_string = mw.getCurrentFrame():callParserFunction("formatnum", {number_string, "R"}) number = tonumber(number_string) end -- If failed, attempt to evaluate input as an expression if number == nil then local success, result = pcall(mw.ext.ParserFunctions.expr, number_string) if success then number = tonumber(result) number_string = tostring(number) else number = nil number_string = nil end else number_string = number_string:match("^%s*(.-)%s*$") -- String is valid but may contain padding, clean it. number_string = number_string:match("^%+(.*)$") or number_string -- Trim any leading + signs. if number_string:find('^%-?0[xX]') then -- Number is using 0xnnn notation to indicate base 16; use the number that Lua detected instead. number_string = tostring(number) end end return number, number_string end --[[ Wrapper function that does basic argument processing. This ensures that all functions from #invoke can use either the current frame or the parent frame, and it also trims whitespace for all arguments and removes blank arguments. ]] local mt = { __index = function(_, k) return function(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return wrap[k](getArgs(frame)) -- Argument processing is left to Module:Arguments. Whitespace is trimmed and blank arguments are removed. end end } return setmetatable(p, mt) f4r823qxvpkct3eikmvj99wyjq9cjkm 746186 746185 2026-06-12T21:51:57Z Robertsky 51025 1 revision imported from [[:en:Module:Math]]: for workshop activity 746185 Scribunto text/plain --[[ This module provides a number of basic mathematical operations. ]] local yesno, getArgs -- lazily initialized local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules. local wrap = {} -- Holds wrapper functions that process arguments from #invoke. These act as intemediary between functions meant for #invoke and functions meant for Lua. --[[ Helper functions used to avoid redundant code. ]] local function err(msg) -- Generates wikitext error messages. return mw.ustring.format('<strong class="error">Formatting error: %s</strong>', msg) end local function unpackNumberArgs(args) -- Returns an unpacked list of arguments specified with numerical keys. local ret = {} for k, v in pairs(args) do if type(k) == 'number' then table.insert(ret, v) end end return unpack(ret) end local function makeArgArray(...) -- Makes an array of arguments from a list of arguments that might include nils. local args = {...} -- Table of arguments. It might contain nils or non-number values, so we can't use ipairs. local nums = {} -- Stores the numbers of valid numerical arguments. local ret = {} for k, v in pairs(args) do v = p._cleanNumber(v) if v then nums[#nums + 1] = k args[k] = v end end table.sort(nums) for i, num in ipairs(nums) do ret[#ret + 1] = args[num] end return ret end local function fold(func, ...) -- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters, -- and must return a number as an output. This number is then supplied as input to the next function call. local vals = makeArgArray(...) local count = #vals -- The number of valid arguments if count == 0 then return -- Exit if we have no valid args, otherwise removing the first arg would cause an error. nil, 0 end local ret = table.remove(vals, 1) for _, val in ipairs(vals) do ret = func(ret, val) end return ret, count end --[[ Fold arguments by selectively choosing values (func should return when to choose the current "dominant" value). ]] local function binary_fold(func, ...) local value = fold((function(a, b) if func(a, b) then return a else return b end end), ...) return value end --[[ random Generate a random number Usage: {{#invoke: Math | random }} {{#invoke: Math | random | maximum value }} {{#invoke: Math | random | minimum value | maximum value }} ]] function wrap.random(args) local first = p._cleanNumber(args[1]) local second = p._cleanNumber(args[2]) return p._random(first, second) end function p._random(first, second) math.randomseed(mw.site.stats.edits + mw.site.stats.pages + os.time() + math.floor(os.clock() * 1000000000)) -- math.random will throw an error if given an explicit nil parameter, so we need to use if statements to check the params. if first and second then if first <= second then -- math.random doesn't allow the first number to be greater than the second. return math.random(first, second) end elseif first then return math.random(first) else return math.random() end end --[[ order Determine order of magnitude of a number Usage: {{#invoke: Math | order | value }} ]] function wrap.order(args) local input_string = (args[1] or args.x or '0'); local input_number = p._cleanNumber(input_string); if input_number == nil then return err('order of magnitude input appears non-numeric') else return p._order(input_number) end end function p._order(x) if x == 0 then return 0 end return math.floor(math.log10(math.abs(x))) end --[[ precision Detemines the precision of a number using the string representation Usage: {{ #invoke: Math | precision | value }} ]] function wrap.precision(args) local input_string = (args[1] or args.x or '0'); local trap_fraction = args.check_fraction; if not yesno then yesno = require('Module:Yesno') end if yesno(trap_fraction, true) then -- Returns true for all input except nil, false, "no", "n", "0" and a few others. See [[Module:Yesno]]. local pos = string.find(input_string, '/', 1, true); if pos ~= nil then if string.find(input_string, '/', pos + 1, true) == nil then local denominator = string.sub(input_string, pos+1, -1); local denom_value = tonumber(denominator); if denom_value ~= nil then return math.log10(denom_value); end end end end local _, clean_string = p._cleanNumber(input_string); if clean_string == nil then return err('precision input appears non-numeric') else return p._precision(clean_string) end end function p._precision(x) if type(x) == 'number' then x = tostring(x) end local result = 0; --subtract exponent local _, _, coefficient, exponent = x:find("^(.*)[eE](.*)$") if coefficient then result = result - (tonumber(exponent) or 0) x = coefficient end --add decimal places local i, j = x:find('%..*$') if i then result = result + (j - i) return result end --subtract trailing zeroes i, j = x:find('[^0]0+$') if i then result = result - (j - i) end return result end --[[ max Finds the maximum argument Usage: {{#invoke:Math| max | value1 | value2 | ... }} Note, any values that do not evaluate to numbers are ignored. ]] function wrap.max(args) return p._max(unpackNumberArgs(args)) end function p._max(...) local max_value = binary_fold((function(a, b) return a > b end), ...) if max_value then return max_value end end --[[ median Find the median of set of numbers Usage: {{#invoke:Math | median | number1 | number2 | ...}} OR {{#invoke:Math | median }} ]] function wrap.median(args) return p._median(unpackNumberArgs(args)) end function p._median(...) local vals = makeArgArray(...) local count = #vals table.sort(vals) if count == 0 then return 0 end if p._mod(count, 2) == 0 then return (vals[count/2] + vals[count/2+1])/2 else return vals[math.ceil(count/2)] end end --[[ min Finds the minimum argument Usage: {{#invoke:Math| min | value1 | value2 | ... }} OR {{#invoke:Math| min }} When used with no arguments, it takes its input from the parent frame. Note, any values that do not evaluate to numbers are ignored. ]] function wrap.min(args) return p._min(unpackNumberArgs(args)) end function p._min(...) local min_value = binary_fold((function(a, b) return a < b end), ...) if min_value then return min_value end end --[[ sum Finds the sum Usage: {{#invoke:Math| sum | value1 | value2 | ... }} OR {{#invoke:Math| sum }} Note, any values that do not evaluate to numbers are ignored. ]] function wrap.sum(args) return p._sum(unpackNumberArgs(args)) end function p._sum(...) local sums = fold((function(a, b) return a + b end), ...) if not sums then return 0 else return sums end end --[[ average Finds the average Usage: {{#invoke:Math| average | value1 | value2 | ... }} OR {{#invoke:Math| average }} Note, any values that do not evaluate to numbers are ignored. ]] function wrap.average(args) return p._average(unpackNumberArgs(args)) end function p._average(...) local sum, count = fold((function(a, b) return a + b end), ...) if not sum then return 0 else return sum / count end end --[[ round Rounds a number to specified precision Usage: {{#invoke:Math | round | value | precision }} --]] function wrap.round(args) local value = p._cleanNumber(args[1] or args.value or 0) local precision = p._cleanNumber(args[2] or args.precision or 0) if value == nil or precision == nil then return err('round input appears non-numeric') else return p._round(value, precision) end end function p._round(value, precision) local rescale = math.pow(10, precision or 0); return math.floor(value * rescale + 0.5) / rescale; end --[[ log10 returns the log (base 10) of a number Usage: {{#invoke:Math | log10 | x }} ]] function wrap.log10(args) return math.log10(args[1]) end --[[ mod Implements the modulo operator Usage: {{#invoke:Math | mod | x | y }} --]] function wrap.mod(args) local x = p._cleanNumber(args[1]) local y = p._cleanNumber(args[2]) if not x then return err('first argument to mod appears non-numeric') elseif not y then return err('second argument to mod appears non-numeric') else return p._mod(x, y) end end function p._mod(x, y) local ret = x % y if not (0 <= ret and ret < y) then ret = 0 end return ret end --[[ gcd Calculates the greatest common divisor of multiple numbers Usage: {{#invoke:Math | gcd | value 1 | value 2 | value 3 | ... }} --]] function wrap.gcd(args) return p._gcd(unpackNumberArgs(args)) end function p._gcd(...) local function findGcd(a, b) local r = b local oldr = a while r ~= 0 do local quotient = math.floor(oldr / r) oldr, r = r, oldr - quotient * r end if oldr < 0 then oldr = oldr * -1 end return oldr end local result = fold(findGcd, ...) return result end --[[ precision_format Rounds a number to the specified precision and formats according to rules originally used for {{template:Rnd}}. Output is a string. Usage: {{#invoke: Math | precision_format | number | precision }} ]] function wrap.precision_format(args) local value_string = args[1] or 0 local precision = args[2] or 0 return p._precision_format(value_string, precision) end function p._precision_format(value_string, precision) -- For access to Mediawiki built-in formatter. local lang = mw.getContentLanguage(); local value value, value_string = p._cleanNumber(value_string) precision = p._cleanNumber(precision) -- Check for non-numeric input if value == nil or precision == nil then return err('invalid input when rounding') end local abs_value = math.abs(value) local current_precision = p._precision(value) local order = p._order(value) -- Due to round-off effects it is neccesary to limit the returned precision under -- some circumstances because the terminal digits will be inaccurately reported. if order + precision >= 14 then if order + p._precision(value_string) >= 14 then precision = 13 - order; end end -- If rounding off, truncate extra digits if precision < current_precision then value = p._round(value, precision) abs_value = math.abs(value) current_precision = p._precision(value) end local formatted_num = lang:formatNum(abs_value) -- Handle cases requiring scientific notation if math.abs(order) >= 9 or string.find(formatted_num, 'E', 1, true) then value = value * (10 ^ (-order)) abs_value = math.abs(value) current_precision = current_precision + order precision = precision + order formatted_num = lang:formatNum(abs_value) else order = 0; end -- Use proper unary minus sign rather than ASCII default formatted_num = ((value < 0) and '−' or '') .. formatted_num -- Pad with zeros, if needed if current_precision < precision then local padding if current_precision <= 0 then if precision > 0 then local zero_sep = lang:formatNum(1.1) formatted_num = formatted_num .. zero_sep:sub(2,2) padding = precision if padding > 20 then padding = 20 end formatted_num = formatted_num .. string.rep('0', padding) end else padding = precision - current_precision if padding > 20 then padding = 20 end formatted_num = formatted_num .. string.rep('0', padding) end end -- Add exponential notation, if necessary. if order ~= 0 then -- Use proper unary minus sign rather than ASCII default if order < 0 then order = '−' .. lang:formatNum(math.abs(order)) else order = lang:formatNum(order) end formatted_num = formatted_num .. '<span style="margin:0 .15em 0 .25em">×</span>10<sup>' .. order .. '</sup>' end return formatted_num end --[[ divide Implements the division operator Usage: {{#invoke:Math | divide | x | y | round= | precision= }} --]] function wrap.divide(args) local x = args[1] local y = args[2] local round = args.round local precision = args.precision if not yesno then yesno = require('Module:Yesno') end return p._divide(x, y, yesno(round), precision) end function p._divide(x, y, round, precision) if y == nil or y == "" then return err("Empty divisor") elseif not tonumber(y) then if type(y) == 'string' and string.sub(y, 1, 1) == '<' then return y else return err("Not a number: " .. y) end elseif x == nil or x == "" then return err("Empty dividend") elseif not tonumber(x) then if type(x) == 'string' and string.sub(x, 1, 1) == '<' then return x else return err("Not a number: " .. x) end else local z = x / y if round then return p._round(z, 0) elseif precision then return p._round(z, precision) else return z end end end --[[ Helper function that interprets the input numerically. If the input does not appear to be a number, attempts evaluating it as a parser functions expression. ]] function p._cleanNumber(number_string, unformat) if type(number_string) == 'number' then -- We were passed a number, so we don't need to do any processing. return number_string, tostring(number_string) elseif type(number_string) ~= 'string' or not number_string:find('%S') then -- We were passed a non-string or a blank string, so exit. return nil, nil; end -- Attempt basic conversion local number = tonumber(number_string) -- If failed, try unformatting the number_string if unformat and number == nil then -- Cannot use mw.language.getContentLanguage():parseFormattedNumber() -- because, unlike {{formatnum:|R}}, it won't ignore operators (it -- would return an error on "1,234+1,234" instead of "1234+1234") number_string = mw.getCurrentFrame():callParserFunction("formatnum", {number_string, "R"}) number = tonumber(number_string) end -- If failed, attempt to evaluate input as an expression if number == nil then local success, result = pcall(mw.ext.ParserFunctions.expr, number_string) if success then number = tonumber(result) number_string = tostring(number) else number = nil number_string = nil end else number_string = number_string:match("^%s*(.-)%s*$") -- String is valid but may contain padding, clean it. number_string = number_string:match("^%+(.*)$") or number_string -- Trim any leading + signs. if number_string:find('^%-?0[xX]') then -- Number is using 0xnnn notation to indicate base 16; use the number that Lua detected instead. number_string = tostring(number) end end return number, number_string end --[[ Wrapper function that does basic argument processing. This ensures that all functions from #invoke can use either the current frame or the parent frame, and it also trims whitespace for all arguments and removes blank arguments. ]] local mt = { __index = function(_, k) return function(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return wrap[k](getArgs(frame)) -- Argument processing is left to Module:Arguments. Whitespace is trimmed and blank arguments are removed. end end } return setmetatable(p, mt) f4r823qxvpkct3eikmvj99wyjq9cjkm Template:Collapse top 10 74179 746189 691688 2026-04-01T12:40:03Z en>GoldRingChip 0 Reverted edits by [[Special:Contribs/GoldRingChip|GoldRingChip]] ([[User talk:GoldRingChip|talk]]) to last version by Explicit 691687 wikitext text/x-wiki {{ safesubst:<noinclude/>ifsubst||<templatestyles src="Template:Collapse_top/styles.css"/>}} <div style="margin-left:{{{indent|0}}}"><!-- NOTE: width renders incorrectly if added to main STYLE section --> {| role="presentation" <!-- Template:Collapse top --> class="mw-collapsible mw-archivedtalk {{<includeonly>safesubst:</includeonly>#if:{{{expand|{{{collapse|}}}}}}||mw-collapsed}} {{{class|}}}" style="color:inherit; background: {{{bg1|transparent}}}; text-align: left; border: {{{border|1px}}} solid {{{b-color|Silver}}}; margin: 0.2em auto auto; width:{{<includeonly>safesubst:</includeonly>#if:{{{width|}}}|{{{width}}}|100%}}; clear: {{{clear|both}}}; padding: 1px;" |- ! class="{{main other|cot-header-mainspace|cot-header-other}}" style="{{<includeonly>safesubst:</includeonly>#if:{{{bg|}}}|background:{{{bg}}}|{{ safesubst:<noinclude/>ifsubst|{{main other|background:#F0F2F5|background:#CCFFCC}}|}}}}; font-size:87%; padding:0.2em 0.3em; text-align:{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}|left|{{<includeonly>safesubst:</includeonly>#if:{{{align|}}}|left|center}}}}; {{<includeonly>safesubst:</includeonly>#if:{{{fc|}}}|color: {{{fc}}};|{{<includeonly>safesubst:</includeonly>#if:{{{bg|}}}|color:#202122|{{ safesubst:<noinclude/>ifsubst|color:black;|}}}}}}" | <div style="font-size:115%;{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}||margin:0 4em}}">{{{1|{{{title|{{{reason|{{{header|{{{heading|{{{result|Extended content}}}}}}}}}}}}}}}}}}</div> {{<includeonly>safesubst:</includeonly>#if:{{{warning|{{{2|}}}}}} |{{<includeonly>safesubst:</includeonly>!}}- {{<includeonly>safesubst:</includeonly>!}} style="text-align:center; font-style:italic;" {{<includeonly>safesubst:</includeonly>!}} {{{2|The following is a closed discussion. {{strongbad|Please do not modify it.}} }}} }} |- | style="color:inherit; border: solid {{{border2|1px Silver}}}; padding: {{{padding|0.6em}}}; background: {{{bg2|var(--background-color-base, #fff)}}};" {{<includeonly>safesubst:</includeonly>!}}<noinclude> {{lorem ipsum|3}} {{Collapse bottom}} {{Documentation}} </noinclude> 81u93un6q58tt6om5l86tbem971xsxy 746190 746189 2026-06-12T21:51:58Z Robertsky 51025 1 revision imported from [[:en:Template:Collapse_top]]: for workshop activity 691687 wikitext text/x-wiki {{ safesubst:<noinclude/>ifsubst||<templatestyles src="Template:Collapse_top/styles.css"/>}} <div style="margin-left:{{{indent|0}}}"><!-- NOTE: width renders incorrectly if added to main STYLE section --> {| role="presentation" <!-- Template:Collapse top --> class="mw-collapsible mw-archivedtalk {{<includeonly>safesubst:</includeonly>#if:{{{expand|{{{collapse|}}}}}}||mw-collapsed}} {{{class|}}}" style="color:inherit; background: {{{bg1|transparent}}}; text-align: left; border: {{{border|1px}}} solid {{{b-color|Silver}}}; margin: 0.2em auto auto; width:{{<includeonly>safesubst:</includeonly>#if:{{{width|}}}|{{{width}}}|100%}}; clear: {{{clear|both}}}; padding: 1px;" |- ! class="{{main other|cot-header-mainspace|cot-header-other}}" style="{{<includeonly>safesubst:</includeonly>#if:{{{bg|}}}|background:{{{bg}}}|{{ safesubst:<noinclude/>ifsubst|{{main other|background:#F0F2F5|background:#CCFFCC}}|}}}}; font-size:87%; padding:0.2em 0.3em; text-align:{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}|left|{{<includeonly>safesubst:</includeonly>#if:{{{align|}}}|left|center}}}}; {{<includeonly>safesubst:</includeonly>#if:{{{fc|}}}|color: {{{fc}}};|{{<includeonly>safesubst:</includeonly>#if:{{{bg|}}}|color:#202122|{{ safesubst:<noinclude/>ifsubst|color:black;|}}}}}}" | <div style="font-size:115%;{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}||margin:0 4em}}">{{{1|{{{title|{{{reason|{{{header|{{{heading|{{{result|Extended content}}}}}}}}}}}}}}}}}}</div> {{<includeonly>safesubst:</includeonly>#if:{{{warning|{{{2|}}}}}} |{{<includeonly>safesubst:</includeonly>!}}- {{<includeonly>safesubst:</includeonly>!}} style="text-align:center; font-style:italic;" {{<includeonly>safesubst:</includeonly>!}} {{{2|The following is a closed discussion. {{strongbad|Please do not modify it.}} }}} }} |- | style="color:inherit; border: solid {{{border2|1px Silver}}}; padding: {{{padding|0.6em}}}; background: {{{bg2|var(--background-color-base, #fff)}}};" {{<includeonly>safesubst:</includeonly>!}}<noinclude> {{lorem ipsum|3}} {{Collapse bottom}} {{Documentation}} </noinclude> 81u93un6q58tt6om5l86tbem971xsxy Module:Infobox 828 75811 746161 725092 2026-06-08T00:50:22Z en>Zackmann08 0 hiding un-needed blank rows that show up in child infoboxes per [[Template_talk:Infobox#Blank_rows_on_child_infoboxes....|talk page]] 746161 Scribunto text/plain local p = {} local args = {} local origArgs = {} local root local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]' local has_rows = false local yesno = require("Module:Yesno") local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Hlist/styles.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function isUntitledChildBox(sval) return sval and ( sval:match( '^%s*<%s*[Tt][Rr]' ) or sval:match( '^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*<%s*[Tt][Rr]' ) ) end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = '' end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass }) root :tag('tr') :addClass(rowArgs.rowclass) :addClass( isUntitledChildBox( rowArgs.header ) and 'infobox-hiddenrow' or nil ) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args.headerclass) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args.headerstyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) if rowArgs.data and not yesno(args.decat) then root:wikitext( '[[Category:Pages using infobox templates with ignored data cells]]' ) end elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args.labelstyle) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() else row:addClass( isUntitledChildBox( rowArgs.data ) and 'infobox-hiddenrow' or nil ) end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderTitle() if not args.title then return end has_rows = true has_list_class({args.titleclass}) root :tag('caption') :addClass('infobox-title') :addClass(args.titleclass) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args.titlestyle) :wikitext(args.title) end local function renderAboveRow() if not args.above then return end has_rows = true has_list_class({ args.aboveclass }) root :tag('tr') :addClass( isUntitledChildBox( args.above ) and 'infobox-hiddenrow' or nil ) :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args.aboveclass) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args.abovestyle) :wikitext(fixChildBoxes(args.above,'th')) end local function renderBelowRow() if not args.below then return end has_rows = true has_list_class({ args.belowclass }) root :tag('tr') :addClass( isUntitledChildBox( args.below ) and 'infobox-hiddenrow' or nil ) :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args.belowclass) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args.belowstyle) :wikitext(fixChildBoxes(args.below,'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) row:addClass( isUntitledChildBox( subheaderArgs.data ) and 'infobox-hiddenrow' or nil ) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args.subheader then args.subheader1 = args.subheader end if args.subheaderrowclass then args.subheaderrowclass1 = args.subheaderrowclass end local subheadernums = getArgNums('subheader') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['subheader' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args.subheaderstyle, rowcellstyle = args['subheaderstyle' .. tostring(num)], class = args.subheaderclass, rowclass = args['subheaderrowclass' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) row:addClass( isUntitledChildBox( imageArgs.data ) and 'infobox-hiddenrow' or nil ) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args.image then args.image1 = args.image end if args.caption then args.caption1 = args.caption end local imagenums = getArgNums('image') for k, num in ipairs(imagenums) do local caption = args['caption' .. tostring(num)] local data = mw.html.create():wikitext(args['image' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args.captionstyle) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args.imagestyle, class = args.imageclass, rowclass = args['imagerowclass' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args.autoheaders then return end local rownums = union(getArgNums('header'), getArgNums('data')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['header' .. tostring(num)] then if lastheader then args['header' .. tostring(lastheader)] = nil end lastheader = num elseif args['data' .. tostring(num)] and args['data' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ):match('^%S') then local data = args['data' .. tostring(num)] if data:gsub(category_in_empty_row_pattern, ''):match('%S') then lastheader = nil end end end if lastheader then args['header' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('header'), getArgNums('data')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['header' .. tostring(num)], label = args['label' .. tostring(num)], data = args['data' .. tostring(num)], datastyle = args.datastyle, class = args['class' .. tostring(num)], rowclass = args['rowclass' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['rowstyle' .. tostring(num)], rowcellstyle = args['rowcellstyle' .. tostring(num)] }) end end local function renderNavBar() if not args.name then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Module:Navbar')._navbar{ args.name, mini = 1, }) end local function renderItalicTitle() local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then root:wikitext(require('Module:Italic title')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end -- Render tracking categories. args.decat == turns off tracking categories. local function renderTrackingCategories() if yesno(args.decat) then return end if args.child == 'yes' then if args.title then root:wikitext( '[[Category:Pages using embedded infobox templates with the title parameter]]' ) end elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Category:Articles using infobox templates with no data rows]]') end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' } } local templatestyles = '' if args['templatestyles'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['templatestyles'] } } end local child_templatestyles = '' if args['child templatestyles'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['child templatestyles'] } } end local grandchild_templatestyles = '' if args['grandchild templatestyles'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['grandchild templatestyles'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderNavBar() renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if args.child ~= 'yes' then root = mw.html.create('table') root :addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox') :addClass(args.bodyclass) -- @deprecated next; target .infobox-<name> :cssText(args.bodystyle) has_list_class({ args.bodyclass }) renderTitle() renderAboveRow() else root = mw.html.create() root :wikitext(args.title) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Non-table value detected for the prefix table", 2) end if type(step) ~= 'number' then error("Invalid step value detected", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then error('Invalid input detected to preprocessArgs prefix table', 2) end preprocessSingleArg(v.prefix) -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Invalid "depend" parameter value detected in preprocessArgs') end preprocessSingleArg(dependValue) end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() preprocessSingleArg('autoheaders') preprocessSingleArg('child') preprocessSingleArg('bodyclass') preprocessSingleArg('subbox') preprocessSingleArg('bodystyle') preprocessSingleArg('title') preprocessSingleArg('titleclass') preprocessSingleArg('titlestyle') preprocessSingleArg('above') preprocessSingleArg('aboveclass') preprocessSingleArg('abovestyle') preprocessArgs({ {prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}} }, 10) preprocessSingleArg('subheaderstyle') preprocessSingleArg('subheaderclass') preprocessArgs({ {prefix = 'image', depend = {'caption', 'imagerowclass'}} }, 10) preprocessSingleArg('captionstyle') preprocessSingleArg('imagestyle') preprocessSingleArg('imageclass') preprocessArgs({ {prefix = 'header'}, {prefix = 'data', depend = {'label'}}, {prefix = 'rowclass'}, {prefix = 'rowstyle'}, {prefix = 'rowcellstyle'}, {prefix = 'class'} }, 50) preprocessSingleArg('headerclass') preprocessSingleArg('headerstyle') preprocessSingleArg('labelstyle') preprocessSingleArg('datastyle') preprocessSingleArg('below') preprocessSingleArg('belowclass') preprocessSingleArg('belowstyle') preprocessSingleArg('name') -- different behaviour for italics if blank or absent args['italic title'] = origArgs['italic title'] preprocessSingleArg('decat') preprocessSingleArg('templatestyles') preprocessSingleArg('child templatestyles') preprocessSingleArg('grandchild templatestyles') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p kueb5p6xeoq6x7bxu2zyyl7pmxgesrs 746162 745562 2026-06-12T21:51:53Z Robertsky 51025 1 revision imported from [[:en:Module:Infobox]]: for workshop activity 745562 Scribunto text/plain local p = {} local args = {} local origArgs = {} local root local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]' local has_rows = false local yesno = require("Module:Yesno") local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Hlist/styles.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function isUntitledChildBox(sval) return sval and ( sval:match( '^%s*<%s*[Tt][Rr]' ) or sval:match( '^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*<%s*[Tt][Rr]' ) ) end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = '' end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass }) root :tag('tr') :addClass(rowArgs.rowclass) :addClass( isUntitledChildBox( rowArgs.header ) and 'infobox-hiddenrow' or nil ) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args.headerclass) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args.headerstyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) if rowArgs.data and not yesno(args.decat) then root:wikitext( '[[Category:Pages using infobox templates with ignored data cells]]' ) end elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args.labelstyle) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() else row:addClass( isUntitledChildBox( rowArgs.data ) and 'infobox-hiddenrow' or nil ) end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderTitle() if not args.title then return end has_rows = true has_list_class({args.titleclass}) root :tag('caption') :addClass('infobox-title') :addClass(args.titleclass) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args.titlestyle) :wikitext(args.title) end local function renderAboveRow() if not args.above then return end has_rows = true has_list_class({ args.aboveclass }) root :tag('tr') :addClass( isUntitledChildBox( args.above ) and 'infobox-hiddenrow' or nil ) :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args.aboveclass) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args.abovestyle) :wikitext(fixChildBoxes(args.above,'th')) end local function renderBelowRow() if not args.below then return end has_rows = true has_list_class({ args.belowclass }) root :tag('tr') :addClass( isUntitledChildBox( args.below ) and 'infobox-hiddenrow' or nil ) :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args.belowclass) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args.belowstyle) :wikitext(fixChildBoxes(args.below,'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) row:addClass( isUntitledChildBox( subheaderArgs.data ) and 'infobox-hiddenrow' or nil ) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args.subheader then args.subheader1 = args.subheader end if args.subheaderrowclass then args.subheaderrowclass1 = args.subheaderrowclass end local subheadernums = getArgNums('subheader') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['subheader' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args.subheaderstyle, rowcellstyle = args['subheaderstyle' .. tostring(num)], class = args.subheaderclass, rowclass = args['subheaderrowclass' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) row:addClass( isUntitledChildBox( imageArgs.data ) and 'infobox-hiddenrow' or nil ) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args.image then args.image1 = args.image end if args.caption then args.caption1 = args.caption end local imagenums = getArgNums('image') for k, num in ipairs(imagenums) do local caption = args['caption' .. tostring(num)] local data = mw.html.create():wikitext(args['image' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args.captionstyle) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args.imagestyle, class = args.imageclass, rowclass = args['imagerowclass' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args.autoheaders then return end local rownums = union(getArgNums('header'), getArgNums('data')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['header' .. tostring(num)] then if lastheader then args['header' .. tostring(lastheader)] = nil end lastheader = num elseif args['data' .. tostring(num)] and args['data' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ):match('^%S') then local data = args['data' .. tostring(num)] if data:gsub(category_in_empty_row_pattern, ''):match('%S') then lastheader = nil end end end if lastheader then args['header' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('header'), getArgNums('data')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['header' .. tostring(num)], label = args['label' .. tostring(num)], data = args['data' .. tostring(num)], datastyle = args.datastyle, class = args['class' .. tostring(num)], rowclass = args['rowclass' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['rowstyle' .. tostring(num)], rowcellstyle = args['rowcellstyle' .. tostring(num)] }) end end local function renderNavBar() if not args.name then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Module:Navbar')._navbar{ args.name, mini = 1, }) end local function renderItalicTitle() local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then root:wikitext(require('Module:Italic title')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end -- Render tracking categories. args.decat == turns off tracking categories. local function renderTrackingCategories() if yesno(args.decat) then return end if args.child == 'yes' then if args.title then root:wikitext( '[[Category:Pages using embedded infobox templates with the title parameter]]' ) end elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Category:Articles using infobox templates with no data rows]]') end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' } } local templatestyles = '' if args['templatestyles'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['templatestyles'] } } end local child_templatestyles = '' if args['child templatestyles'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['child templatestyles'] } } end local grandchild_templatestyles = '' if args['grandchild templatestyles'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['grandchild templatestyles'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderNavBar() renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if args.child ~= 'yes' then root = mw.html.create('table') root :addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox') :addClass(args.bodyclass) -- @deprecated next; target .infobox-<name> :cssText(args.bodystyle) has_list_class({ args.bodyclass }) renderTitle() renderAboveRow() else root = mw.html.create() root :wikitext(args.title) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Non-table value detected for the prefix table", 2) end if type(step) ~= 'number' then error("Invalid step value detected", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then error('Invalid input detected to preprocessArgs prefix table', 2) end preprocessSingleArg(v.prefix) -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Invalid "depend" parameter value detected in preprocessArgs') end preprocessSingleArg(dependValue) end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() preprocessSingleArg('autoheaders') preprocessSingleArg('child') preprocessSingleArg('bodyclass') preprocessSingleArg('subbox') preprocessSingleArg('bodystyle') preprocessSingleArg('title') preprocessSingleArg('titleclass') preprocessSingleArg('titlestyle') preprocessSingleArg('above') preprocessSingleArg('aboveclass') preprocessSingleArg('abovestyle') preprocessArgs({ {prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}} }, 10) preprocessSingleArg('subheaderstyle') preprocessSingleArg('subheaderclass') preprocessArgs({ {prefix = 'image', depend = {'caption', 'imagerowclass'}} }, 10) preprocessSingleArg('captionstyle') preprocessSingleArg('imagestyle') preprocessSingleArg('imageclass') preprocessArgs({ {prefix = 'header'}, {prefix = 'data', depend = {'label'}}, {prefix = 'rowclass'}, {prefix = 'rowstyle'}, {prefix = 'rowcellstyle'}, {prefix = 'class'} }, 50) preprocessSingleArg('headerclass') preprocessSingleArg('headerstyle') preprocessSingleArg('labelstyle') preprocessSingleArg('datastyle') preprocessSingleArg('below') preprocessSingleArg('belowclass') preprocessSingleArg('belowstyle') preprocessSingleArg('name') -- different behaviour for italics if blank or absent args['italic title'] = origArgs['italic title'] preprocessSingleArg('decat') preprocessSingleArg('templatestyles') preprocessSingleArg('child templatestyles') preprocessSingleArg('grandchild templatestyles') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p kueb5p6xeoq6x7bxu2zyyl7pmxgesrs Template:C 10 77534 746181 461551 2024-06-02T14:03:48Z en>HouseBlaster 0 HouseBlaster moved page [[Template:C]] to [[Template:Category link without namespace]]: expand template name per [[WP:TPN]] 746181 wikitext text/x-wiki #REDIRECT [[Template:Category link without namespace]] {{Redirect category shell| {{R from move}} }} 3qa60t6mwxjkjff4k91jtkyn2wfm6h0 746182 746181 2026-06-12T21:51:56Z Robertsky 51025 1 revision imported from [[:en:Template:C]]: for workshop activity 746181 wikitext text/x-wiki #REDIRECT [[Template:Category link without namespace]] {{Redirect category shell| {{R from move}} }} 3qa60t6mwxjkjff4k91jtkyn2wfm6h0 Template:Plainlist 10 77581 746175 609810 2025-12-24T21:02:16Z en>Pppery 0 Add unknown params checking 746175 wikitext text/x-wiki <templatestyles src="Plainlist/styles.css"/><div class="plainlist {{{class|}}}" {{safesubst<noinclude />:#if:{{{style|}}}{{{indent|}}}|style="{{safesubst<noinclude />:#if:{{{indent|}}}|margin-left: {{safesubst<noinclude />:#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{safesubst<noinclude />:#if:{{{1|}}}| {{{1}}} </div>}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using plainlist with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Plainlist]] with unknown parameter "_VALUE_"|ignoreblank=y| class | style | indent | 1 }}<noinclude></div> {{documentation}} </noinclude> 3dxfjhodv9m8vibb93y5xdv5zsvp5nu 746176 734131 2026-06-12T21:51:55Z Robertsky 51025 1 revision imported from [[:en:Template:Plainlist]]: for workshop activity 734131 wikitext text/x-wiki <templatestyles src="Plainlist/styles.css"/><div class="plainlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}| {{{1}}} </div>}}<noinclude></div> {{documentation}} </noinclude> aauem8fvp0apfdx4hoaa24a9q951cds User talk:MusikAnimal 3 80021 746129 496837 2026-06-12T17:52:29Z Trialpears 43074 Notification: [[Wikipedia:Redirects for discussion/Log/2026 June 12#Test redirect|listing]] of [[:Test redirect]] at [[WP:Redirects for discussion]]. 746129 wikitext text/x-wiki == February 2015 == ANOTHER TEST == March 2015 == <div class="user-block" style="min-height: 40px"> [[File:Stop x nuvola with clock.svg|40px|left|alt=Stop icon with clock]] You have been '''[[WP:Blocking policy|blocked]]''' from editing for a period of '''3 hours''' for [[Wikipedia:What Wikipedia is not#Wikipedia is not a soapbox|advertising or self-promoting]] in violation of the [[Wikipedia:Conflict of interest|conflict of interest]] and [[Wikipedia:Notability (organizations and companies)|notability]] guidelines. Once the block has expired, you are welcome to [[WP:Five pillars|make useful contributions]]. If you think there are good reasons why you should be unblocked, you may [[WP:Appealing a block|appeal this block]] by first reading the [[WP:Guide to appealing blocks|guide to appealing blocks]], then adding the following text below this notice: <!-- Copy the text as it appears on your page, not as it appears in this edit area. Do not include the "tlx|" code. -->{{tlx|unblock|2=reason=''Your reason here &#126;&#126;&#126;&#126;''}}. &nbsp;[[User:Rahul amin roktim|Rahul amin roktim]] ([[User talk:Rahul amin roktim|talk]]) 03:16, 11 November 2015 (UTC)</div>[[Category:Wikipedians who have temporarily been blocked for advertising|{{PAGENAME}}]]<!-- Template:uw-adblock --> <div class="user-block" style="min-height: 40px"> [[File:Stop x nuvola with clock.svg|40px|left|alt=Stop icon with clock]] You have been '''[[WP:Blocking policy|blocked]]''' from editing for a period of '''3 hours''' for [[WP:Disruptive editing|abuse of editing privileges]]. Once the block has expired, you are welcome to [[WP:Five pillars|make useful contributions]]. If you think there are good reasons why you should be unblocked, you may [[WP:Appealing a block|appeal this block]] by first reading the [[WP:Guide to appealing blocks|guide to appealing blocks]], then adding the following text below this notice: <!-- Copy the text as it appears on your page, not as it appears in this edit area. Do not include the "tlx|" code. -->{{tlx|unblock|2=reason=''Your reason here &#126;&#126;&#126;&#126;''}}. &nbsp;[[User:Rahul amin roktim|Rahul amin roktim]] ([[User talk:Rahul amin roktim|talk]]) 03:16, 11 November 2015 (UTC)</div><!-- Template:uw-block --> <div class="user-block" style="min-height: 40px">[[File:Balance icon.svg|40px|left|alt=]]To enforce an [[Wikipedia:Arbitration|arbitration]] decision you have been '''[[Wikipedia:Blocking policy|blocked]]''' from editing for a period of '''3 hours''' from. You are welcome to edit once the block expires; however, please note that the repetition of similar behavior may result in a longer block or other sanctions. <p>If you believe this block is unjustified, please read the [[Wikipedia:Guide to appealing blocks|guide to appealing blocks]] (specifically [[Wikipedia:Guide to appealing blocks#Arbitration enforcement blocks|this section]]) before appealing. Place the following on your talk page: <!-- Copy the text as it appears on your page, not as it appears in this edit area. --><span style="font-size:97%;">{{tlx|unblock|2=reason=Please copy my appeal to the &#91;&#91;WP:AE{{!}}arbitration enforcement noticeboard&#93;&#93; or &#91;&#91;WP:AN{{!}}administrators' noticeboard&#93;&#93;. ''Your reason here OR place the reason below this template.'' &#126;&#126;&#126;&#126;}}</span>. If you intend to appeal on the arbitration enforcement noticeboard I suggest you use the [[Template:Arbitration enforcement appeal#Usage|arbitration enforcement appeals template]] on your talk page so it can be copied over easily. You may also appeal directly to me ([[Special:EmailUser/MediaWiki message delivery|by email]]), before or instead of appealing on your talk page.&nbsp;</p>[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|talk]]) 18:19, 4 January 2022 (UTC) <div class="sysop-show"><hr/><p style="line-height: 90%;"><small>'''Reminder to administrators:''' In May 2014, ArbCom adopted the following [[Wikipedia:Arbitration Committee/Procedures#Standard provision: appeals and modifications|procedure instructing administrators]] regarding Arbitration Enforcement blocks: "No administrator may modify a sanction placed by another administrator without: (1) the explicit prior affirmative consent of the enforcing administrator; or (2) prior affirmative agreement for the modification at (a) AE or (b) AN or (c) ARCA (see "Important notes" [in the procedure]). Administrators modifying sanctions out of process may at the discretion of the committee be desysopped."</small></p></div></div><!-- Template:uw-aeblock --> == how to use bot == hello sir, i want a wiki bot . please help me [[User:Rahul amin roktim|Rahul amin roktim]] ([[User talk:Rahul amin roktim|talk]]) 03:16, 11 November 2015 (UTC) :I'm not sure how to help you. On enwiki you can refer to [[en:w:WP:BOTS|WP:BOTS]], or if you want to request a bot you can do so at [[en:w:WP:BOTREQ|WP:BOTREQ]]. I'm not sure what the procedure is on your home wiki. Also testwiki is not the best place to get a hold of me, as this talk page may be deleted or blanked while I'm testing stuff. Sorry I could not assist you further <span style="font-family:sans-serif">&mdash; <span style="font-weight:bold">[[User:MusikAnimal|<span style="color:black; font-style:italic">MusikAnimal</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></span></span> 03:51, 11 November 2015 (UTC) == This week's [[Wikipedia:Today's articles for improvement|article for improvement]] (week 48, 2015) == {| style="width:100%; padding:2px;" class="TAFI-weekly" ! <div style="margin:0; background-color:#E2E7FF; border:1px solid blue; text-align:center; color:#082840; padding-left:0.4em; padding-top: 0.4em; padding-bottom: 0.4em; padding-right: 0.4em; font-weight:normal">{{TAFI/Picture box|week=2015/48}} '''Hello, MusikAnimal.''' The following is WikiProject [[Wikipedia:Today's articles for improvement|Today's articles for improvement]]'s weekly selection: <span style="font-size:140%;">'''{{Wikipedia:Today's articles for improvement/2015/48/1}}'''</span> Please be bold and help to improve this article! ---- Previous selections: {{Wikipedia:Today's articles for improvement/2015/47/1}}&nbsp;&bull; {{Wikipedia:Today's articles for improvement/2015/46/1}} ---- Get involved with the TAFI project. You can: [[Wikipedia:Today's articles for improvement/Nominations#Articles|Nominate an article]]{{•}} [[Wikipedia:Today's articles for improvement/Nominations#Instructions|Review nominations]] ---- <small>Posted by: <span style="font-family:sans-serif"><b>[[User:MusikBot|<span style="color:black; font-style:italic">MusikBot</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></b></span> using [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|talk]]) on behalf of WikiProject TAFI • {{edit|Wikipedia:Today's articles for improvement/Members/Notifications|Opt-out instructions}}</small></div> |}<!-- Substituted from Template:TAFI weekly selections notice --> <!-- Message sent by User:MusikBot@testwiki using the list at https://test.wikipedia.org/w/index.php?title=Wikipedia:Today%27s_articles_for_improvement/Members/Notifications&oldid=250141 --> == This week's [[Wikipedia:Today's articles for improvement|article for improvement]] (week 48, 2015) == {| style="width:100%; padding:2px;" class="TAFI-weekly" ! <div style="margin:0; background-color:#E2E7FF; border:1px solid blue; text-align:center; color:#082840; padding-left:0.4em; padding-top: 0.4em; padding-bottom: 0.4em; padding-right: 0.4em; font-weight:normal">{{TAFI/Picture box|week=2015/48}} '''Hello, MusikAnimal.''' The following is WikiProject [[Wikipedia:Today's articles for improvement|Today's articles for improvement]]'s weekly selection: <span style="font-size:140%;">'''{{Wikipedia:Today's articles for improvement/2015/48/1}}'''</span> Please be bold and help to improve this article! ---- Previous selections: {{Wikipedia:Today's articles for improvement/2015/47/1}}&nbsp;&bull; {{Wikipedia:Today's articles for improvement/2015/46/1}} ---- Get involved with the TAFI project. You can: [[Wikipedia:Today's articles for improvement/Nominations#Articles|Nominate an article]]{{•}} [[Wikipedia:Today's articles for improvement/Nominations#Instructions|Review nominations]] ---- <small>Posted by: <span style="font-family:sans-serif"><b>[[User:MusikBot|<span style="color:black; font-style:italic">MusikBot</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></b></span> using [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|talk]]) on behalf of WikiProject TAFI • {{edit|Wikipedia:Today's articles for improvement/Members/Notifications|Opt-out instructions}}</small></div> |}<!-- Substituted from Template:TAFI weekly selections notice --> <!-- Message sent by User:MusikBot@testwiki using the list at https://test.wikipedia.org/w/index.php?title=Wikipedia:Today%27s_articles_for_improvement/Members/Notifications&oldid=250141 --> == This week's [[Wikipedia:Today's articles for improvement|article for improvement]] (week 48, 2015) == {| style="width:100%; padding:2px;" class="TAFI-weekly" ! <div style="margin:0; background-color:#E2E7FF; border:1px solid blue; text-align:center; color:#082840; padding-left:0.4em; padding-top: 0.4em; padding-bottom: 0.4em; padding-right: 0.4em; font-weight:normal">{{TAFI/Picture box|week=2015/48}} '''Hello, MusikAnimal.''' The following is WikiProject [[Wikipedia:Today's articles for improvement|Today's articles for improvement]]'s weekly selection: <span style="font-size:140%;">'''{{Wikipedia:Today's articles for improvement/2015/48/1}}'''</span> Please be bold and help to improve this article! ---- Previous selections: {{Wikipedia:Today's articles for improvement/2015/47/1}}&nbsp;&bull; {{Wikipedia:Today's articles for improvement/2015/46/1}} ---- Get involved with the TAFI project. You can: [[Wikipedia:Today's articles for improvement/Nominations#Articles|Nominate an article]]{{•}} [[Wikipedia:Today's articles for improvement/Nominations#Instructions|Review nominations]] ---- <small>Posted by: <span style="font-family:sans-serif"><b>[[User:MusikBot|<span style="color:black; font-style:italic">MusikBot</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></b></span> using [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|talk]]) on behalf of WikiProject TAFI • {{edit|Wikipedia:Today's articles for improvement/Members/Notifications|Opt-out instructions}}</small></div> |}<!-- Substituted from Template:TAFI weekly selections notice --> <!-- Message sent by User:MusikBot@testwiki using the list at https://test.wikipedia.org/w/index.php?title=Wikipedia:Today%27s_articles_for_improvement/Members/Notifications&oldid=250141 --> == December 2015 == {{subst:uw-italicize}} <span style="font-family:sans-serif">&mdash; <span style="font-weight:bold">[[User:MusikAnimal|<span style="color:black; font-style:italic">MusikAnimal</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></span></span> 18:42, 15 December 2015 (UTC) == Wikipedia:Requests/Permissions == There are a few unattended requests at [[Wikipedia:Requests/Permissions]]. Could you check please? (I saw your name is "recent changes") --[[User:Titodutta|Titodutta]] ([[User talk:Titodutta|talk]]) 06:39, 18 January 2016 (UTC) :Re: Yes, I received your message. You may check recent changes, only admin tests are done here. Anyway, I replied on my request page too. '''I won't do any admin training unless I have a clear consensus from the admins here to do so.''' If you think it was a mistake from your side, feel free to remove the right :). --[[User:Titodutta|Titodutta]] ([[User talk:Titodutta|talk]]) 07:36, 18 January 2016 (UTC) ::{{ping|Titodutta}} That's the thing... I can't remove the right! That would require a steward. Not too concerned about it, just don't make the same mistake I did, and go by [[Wikipedia:What we do on this wiki]] and [[Wikipedia:What Test Wiki is not]]. Many thanks <span style="font-family:sans-serif">&mdash; <span style="font-weight:bold">[[User:MusikAnimal|<span style="color:black; font-style:italic">MusikAnimal</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></span></span> 17:33, 18 January 2016 (UTC) :::* Alright. --[[User:Titodutta|Titodutta]] ([[User talk:Titodutta|talk]]) 10:00, 22 January 2016 (UTC) * There are a few more unattended requests, could you take a look when you get a chance? :) -[[User:Riley Huntley|Riley Huntley]] [[Meta:SWMT|(SWMT)]] 05:35, 4 February 2016 (UTC) == February 2016 == {{subst:huggle/warn-test-1|1=Test|2=https://test.wikipedia.org/w/index.php?title=Test&diff=261861}} == Autopatrolled granted == {{subst:Autopatrolledgiven}} == Autopatrolled granted == {{subst:Autopatrolledgiven}} == Bureaucrat or adminst == {{ping|User:MusikAnimal}} Can you check my request? [[Wikipedia:Requests/Permissions/AYST201|This]] Thanks very much [[User:AYST201|AYST201]] ([[User talk:AYST201|talk]]) 07:58, 31 March 2016 (UTC) == Unattended Requests in [[Wikipedia:Requests/Permissions]] == Hi, currently there are 2 unattended requests on that page. If you have time could review them? Regards. —[[User:AlvaroMolina|<font color="#1406D0">'''Alvaro Molina'''</font>]] ([[User Talk:AlvaroMolina|<font color="#137500">'''✉'''</font>]] - [[Special:Contributions/AlvaroMolina|<font color="#137500">✔</font>]]) 12:07, 17 May 2017 (UTC) == Q == ok. I admit I was in the wrong here. I'm really sorry for creating a dump on the mainpage. I guess I'll show myself out of testwiki then. [[User:Artix Kreiger|Artix Kreiger]] ([[User talk:Artix Kreiger|talk]]) 20:14, 24 October 2017 (UTC) :Yeah I understand. I'll come back with actual test code next time. is that ok? [[User:Artix Kreiger|Artix Kreiger]] ([[User talk:Artix Kreiger|talk]]) 15:26, 25 October 2017 (UTC) {{subst:RFDNote|1=Test redirect}} <span style="font-family:sans-serif">&mdash; <span style="font-weight:bold">[[User:MusikAnimal|<span style="color:black; font-style:italic">MusikAnimal</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></span></span> 23:28, 11 November 2018 (UTC) == Protected edit request on MediaWiki:Cite link label group-thai-alphabetic == Could you please consider [[MediaWiki talk:Cite link label group-thai-alphabetic#Protected edit request on 22 November 2018|my edit request here]]? Thank you, --[[User:Ans|Ans]] ([[User talk:Ans|talk]]) 16:07, 22 November 2018 (UTC) :{{done}} I don't really know how this stuff works, but I see the characters are now being shown at [[User:Ans/sandbox/list-style]]. Best <span style="font-family:sans-serif">&mdash; <span style="font-weight:bold">[[User:MusikAnimal|<span style="color:black; font-style:italic">MusikAnimal</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></span></span> 20:25, 26 November 2018 (UTC) == I have sent you a note about a page you reviewed == {{subst:Sentnote-NPF|1=Test page foobar 123456|2=MusikAnimal|3=foobar}} <span style="font-family:sans-serif">&mdash; <span style="font-weight:bold">[[User:MusikAnimal|<span style="color:black; font-style:italic">MusikAnimal</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></span></span> 17:23, 17 December 2019 (UTC) == How we will see unregistered users == <section begin=content/> Hi! You get this message because you are an admin on a Wikimedia wiki. When someone edits a Wikimedia wiki without being logged in today, we show their IP address. As you may already know, we will not be able to do this in the future. This is a decision by the Wikimedia Foundation Legal department, because norms and regulations for privacy online have changed. Instead of the IP we will show a masked identity. You as an admin '''will still be able to access the IP'''. There will also be a new user right for those who need to see the full IPs of unregistered users to fight vandalism, harassment and spam without being admins. Patrollers will also see part of the IP even without this user right. We are also working on [[m:IP Editing: Privacy Enhancement and Abuse Mitigation/Improving tools|better tools]] to help. If you have not seen it before, you can [[m:IP Editing: Privacy Enhancement and Abuse Mitigation|read more on Meta]]. If you want to make sure you don’t miss technical changes on the Wikimedia wikis, you can [[m:Global message delivery/Targets/Tech ambassadors|subscribe]] to [[m:Tech/News|the weekly technical newsletter]]. We have [[m:IP Editing: Privacy Enhancement and Abuse Mitigation#IP Masking Implementation Approaches (FAQ)|two suggested ways]] this identity could work. '''We would appreciate your feedback''' on which way you think would work best for you and your wiki, now and in the future. You can [[m:Talk:IP Editing: Privacy Enhancement and Abuse Mitigation|let us know on the talk page]]. You can write in your language. The suggestions were posted in October and we will decide after 17 January. Thank you. /[[m:User:Johan (WMF)|Johan (WMF)]]<section end=content/> 18:19, 4 January 2022 (UTC) <!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Johan_(WMF)/Target_lists/Admins2022(7)&oldid=22532681 --> {{subst:rfd notice|1=Test redirect}} [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) 42dl2x3x32ynzd000zkw8y5nqossci0 746131 746129 2026-06-12T17:53:30Z Trialpears 43074 Didn't consider that I still was sending a notice sorry 746131 wikitext text/x-wiki == February 2015 == ANOTHER TEST == March 2015 == <div class="user-block" style="min-height: 40px"> [[File:Stop x nuvola with clock.svg|40px|left|alt=Stop icon with clock]] You have been '''[[WP:Blocking policy|blocked]]''' from editing for a period of '''3 hours''' for [[Wikipedia:What Wikipedia is not#Wikipedia is not a soapbox|advertising or self-promoting]] in violation of the [[Wikipedia:Conflict of interest|conflict of interest]] and [[Wikipedia:Notability (organizations and companies)|notability]] guidelines. Once the block has expired, you are welcome to [[WP:Five pillars|make useful contributions]]. If you think there are good reasons why you should be unblocked, you may [[WP:Appealing a block|appeal this block]] by first reading the [[WP:Guide to appealing blocks|guide to appealing blocks]], then adding the following text below this notice: <!-- Copy the text as it appears on your page, not as it appears in this edit area. Do not include the "tlx|" code. -->{{tlx|unblock|2=reason=''Your reason here &#126;&#126;&#126;&#126;''}}. &nbsp;[[User:Rahul amin roktim|Rahul amin roktim]] ([[User talk:Rahul amin roktim|talk]]) 03:16, 11 November 2015 (UTC)</div>[[Category:Wikipedians who have temporarily been blocked for advertising|{{PAGENAME}}]]<!-- Template:uw-adblock --> <div class="user-block" style="min-height: 40px"> [[File:Stop x nuvola with clock.svg|40px|left|alt=Stop icon with clock]] You have been '''[[WP:Blocking policy|blocked]]''' from editing for a period of '''3 hours''' for [[WP:Disruptive editing|abuse of editing privileges]]. Once the block has expired, you are welcome to [[WP:Five pillars|make useful contributions]]. If you think there are good reasons why you should be unblocked, you may [[WP:Appealing a block|appeal this block]] by first reading the [[WP:Guide to appealing blocks|guide to appealing blocks]], then adding the following text below this notice: <!-- Copy the text as it appears on your page, not as it appears in this edit area. Do not include the "tlx|" code. -->{{tlx|unblock|2=reason=''Your reason here &#126;&#126;&#126;&#126;''}}. &nbsp;[[User:Rahul amin roktim|Rahul amin roktim]] ([[User talk:Rahul amin roktim|talk]]) 03:16, 11 November 2015 (UTC)</div><!-- Template:uw-block --> <div class="user-block" style="min-height: 40px">[[File:Balance icon.svg|40px|left|alt=]]To enforce an [[Wikipedia:Arbitration|arbitration]] decision you have been '''[[Wikipedia:Blocking policy|blocked]]''' from editing for a period of '''3 hours''' from. You are welcome to edit once the block expires; however, please note that the repetition of similar behavior may result in a longer block or other sanctions. <p>If you believe this block is unjustified, please read the [[Wikipedia:Guide to appealing blocks|guide to appealing blocks]] (specifically [[Wikipedia:Guide to appealing blocks#Arbitration enforcement blocks|this section]]) before appealing. Place the following on your talk page: <!-- Copy the text as it appears on your page, not as it appears in this edit area. --><span style="font-size:97%;">{{tlx|unblock|2=reason=Please copy my appeal to the &#91;&#91;WP:AE{{!}}arbitration enforcement noticeboard&#93;&#93; or &#91;&#91;WP:AN{{!}}administrators' noticeboard&#93;&#93;. ''Your reason here OR place the reason below this template.'' &#126;&#126;&#126;&#126;}}</span>. If you intend to appeal on the arbitration enforcement noticeboard I suggest you use the [[Template:Arbitration enforcement appeal#Usage|arbitration enforcement appeals template]] on your talk page so it can be copied over easily. You may also appeal directly to me ([[Special:EmailUser/MediaWiki message delivery|by email]]), before or instead of appealing on your talk page.&nbsp;</p>[[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|talk]]) 18:19, 4 January 2022 (UTC) <div class="sysop-show"><hr/><p style="line-height: 90%;"><small>'''Reminder to administrators:''' In May 2014, ArbCom adopted the following [[Wikipedia:Arbitration Committee/Procedures#Standard provision: appeals and modifications|procedure instructing administrators]] regarding Arbitration Enforcement blocks: "No administrator may modify a sanction placed by another administrator without: (1) the explicit prior affirmative consent of the enforcing administrator; or (2) prior affirmative agreement for the modification at (a) AE or (b) AN or (c) ARCA (see "Important notes" [in the procedure]). Administrators modifying sanctions out of process may at the discretion of the committee be desysopped."</small></p></div></div><!-- Template:uw-aeblock --> == how to use bot == hello sir, i want a wiki bot . please help me [[User:Rahul amin roktim|Rahul amin roktim]] ([[User talk:Rahul amin roktim|talk]]) 03:16, 11 November 2015 (UTC) :I'm not sure how to help you. On enwiki you can refer to [[en:w:WP:BOTS|WP:BOTS]], or if you want to request a bot you can do so at [[en:w:WP:BOTREQ|WP:BOTREQ]]. I'm not sure what the procedure is on your home wiki. Also testwiki is not the best place to get a hold of me, as this talk page may be deleted or blanked while I'm testing stuff. Sorry I could not assist you further <span style="font-family:sans-serif">&mdash; <span style="font-weight:bold">[[User:MusikAnimal|<span style="color:black; font-style:italic">MusikAnimal</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></span></span> 03:51, 11 November 2015 (UTC) == This week's [[Wikipedia:Today's articles for improvement|article for improvement]] (week 48, 2015) == {| style="width:100%; padding:2px;" class="TAFI-weekly" ! <div style="margin:0; background-color:#E2E7FF; border:1px solid blue; text-align:center; color:#082840; padding-left:0.4em; padding-top: 0.4em; padding-bottom: 0.4em; padding-right: 0.4em; font-weight:normal">{{TAFI/Picture box|week=2015/48}} '''Hello, MusikAnimal.''' The following is WikiProject [[Wikipedia:Today's articles for improvement|Today's articles for improvement]]'s weekly selection: <span style="font-size:140%;">'''{{Wikipedia:Today's articles for improvement/2015/48/1}}'''</span> Please be bold and help to improve this article! ---- Previous selections: {{Wikipedia:Today's articles for improvement/2015/47/1}}&nbsp;&bull; {{Wikipedia:Today's articles for improvement/2015/46/1}} ---- Get involved with the TAFI project. You can: [[Wikipedia:Today's articles for improvement/Nominations#Articles|Nominate an article]]{{•}} [[Wikipedia:Today's articles for improvement/Nominations#Instructions|Review nominations]] ---- <small>Posted by: <span style="font-family:sans-serif"><b>[[User:MusikBot|<span style="color:black; font-style:italic">MusikBot</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></b></span> using [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|talk]]) on behalf of WikiProject TAFI • {{edit|Wikipedia:Today's articles for improvement/Members/Notifications|Opt-out instructions}}</small></div> |}<!-- Substituted from Template:TAFI weekly selections notice --> <!-- Message sent by User:MusikBot@testwiki using the list at https://test.wikipedia.org/w/index.php?title=Wikipedia:Today%27s_articles_for_improvement/Members/Notifications&oldid=250141 --> == This week's [[Wikipedia:Today's articles for improvement|article for improvement]] (week 48, 2015) == {| style="width:100%; padding:2px;" class="TAFI-weekly" ! <div style="margin:0; background-color:#E2E7FF; border:1px solid blue; text-align:center; color:#082840; padding-left:0.4em; padding-top: 0.4em; padding-bottom: 0.4em; padding-right: 0.4em; font-weight:normal">{{TAFI/Picture box|week=2015/48}} '''Hello, MusikAnimal.''' The following is WikiProject [[Wikipedia:Today's articles for improvement|Today's articles for improvement]]'s weekly selection: <span style="font-size:140%;">'''{{Wikipedia:Today's articles for improvement/2015/48/1}}'''</span> Please be bold and help to improve this article! ---- Previous selections: {{Wikipedia:Today's articles for improvement/2015/47/1}}&nbsp;&bull; {{Wikipedia:Today's articles for improvement/2015/46/1}} ---- Get involved with the TAFI project. You can: [[Wikipedia:Today's articles for improvement/Nominations#Articles|Nominate an article]]{{•}} [[Wikipedia:Today's articles for improvement/Nominations#Instructions|Review nominations]] ---- <small>Posted by: <span style="font-family:sans-serif"><b>[[User:MusikBot|<span style="color:black; font-style:italic">MusikBot</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></b></span> using [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|talk]]) on behalf of WikiProject TAFI • {{edit|Wikipedia:Today's articles for improvement/Members/Notifications|Opt-out instructions}}</small></div> |}<!-- Substituted from Template:TAFI weekly selections notice --> <!-- Message sent by User:MusikBot@testwiki using the list at https://test.wikipedia.org/w/index.php?title=Wikipedia:Today%27s_articles_for_improvement/Members/Notifications&oldid=250141 --> == This week's [[Wikipedia:Today's articles for improvement|article for improvement]] (week 48, 2015) == {| style="width:100%; padding:2px;" class="TAFI-weekly" ! <div style="margin:0; background-color:#E2E7FF; border:1px solid blue; text-align:center; color:#082840; padding-left:0.4em; padding-top: 0.4em; padding-bottom: 0.4em; padding-right: 0.4em; font-weight:normal">{{TAFI/Picture box|week=2015/48}} '''Hello, MusikAnimal.''' The following is WikiProject [[Wikipedia:Today's articles for improvement|Today's articles for improvement]]'s weekly selection: <span style="font-size:140%;">'''{{Wikipedia:Today's articles for improvement/2015/48/1}}'''</span> Please be bold and help to improve this article! ---- Previous selections: {{Wikipedia:Today's articles for improvement/2015/47/1}}&nbsp;&bull; {{Wikipedia:Today's articles for improvement/2015/46/1}} ---- Get involved with the TAFI project. You can: [[Wikipedia:Today's articles for improvement/Nominations#Articles|Nominate an article]]{{•}} [[Wikipedia:Today's articles for improvement/Nominations#Instructions|Review nominations]] ---- <small>Posted by: <span style="font-family:sans-serif"><b>[[User:MusikBot|<span style="color:black; font-style:italic">MusikBot</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></b></span> using [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|talk]]) on behalf of WikiProject TAFI • {{edit|Wikipedia:Today's articles for improvement/Members/Notifications|Opt-out instructions}}</small></div> |}<!-- Substituted from Template:TAFI weekly selections notice --> <!-- Message sent by User:MusikBot@testwiki using the list at https://test.wikipedia.org/w/index.php?title=Wikipedia:Today%27s_articles_for_improvement/Members/Notifications&oldid=250141 --> == December 2015 == {{subst:uw-italicize}} <span style="font-family:sans-serif">&mdash; <span style="font-weight:bold">[[User:MusikAnimal|<span style="color:black; font-style:italic">MusikAnimal</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></span></span> 18:42, 15 December 2015 (UTC) == Wikipedia:Requests/Permissions == There are a few unattended requests at [[Wikipedia:Requests/Permissions]]. Could you check please? (I saw your name is "recent changes") --[[User:Titodutta|Titodutta]] ([[User talk:Titodutta|talk]]) 06:39, 18 January 2016 (UTC) :Re: Yes, I received your message. You may check recent changes, only admin tests are done here. Anyway, I replied on my request page too. '''I won't do any admin training unless I have a clear consensus from the admins here to do so.''' If you think it was a mistake from your side, feel free to remove the right :). --[[User:Titodutta|Titodutta]] ([[User talk:Titodutta|talk]]) 07:36, 18 January 2016 (UTC) ::{{ping|Titodutta}} That's the thing... I can't remove the right! That would require a steward. Not too concerned about it, just don't make the same mistake I did, and go by [[Wikipedia:What we do on this wiki]] and [[Wikipedia:What Test Wiki is not]]. Many thanks <span style="font-family:sans-serif">&mdash; <span style="font-weight:bold">[[User:MusikAnimal|<span style="color:black; font-style:italic">MusikAnimal</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></span></span> 17:33, 18 January 2016 (UTC) :::* Alright. --[[User:Titodutta|Titodutta]] ([[User talk:Titodutta|talk]]) 10:00, 22 January 2016 (UTC) * There are a few more unattended requests, could you take a look when you get a chance? :) -[[User:Riley Huntley|Riley Huntley]] [[Meta:SWMT|(SWMT)]] 05:35, 4 February 2016 (UTC) == February 2016 == {{subst:huggle/warn-test-1|1=Test|2=https://test.wikipedia.org/w/index.php?title=Test&diff=261861}} == Autopatrolled granted == {{subst:Autopatrolledgiven}} == Autopatrolled granted == {{subst:Autopatrolledgiven}} == Bureaucrat or adminst == {{ping|User:MusikAnimal}} Can you check my request? [[Wikipedia:Requests/Permissions/AYST201|This]] Thanks very much [[User:AYST201|AYST201]] ([[User talk:AYST201|talk]]) 07:58, 31 March 2016 (UTC) == Unattended Requests in [[Wikipedia:Requests/Permissions]] == Hi, currently there are 2 unattended requests on that page. If you have time could review them? Regards. —[[User:AlvaroMolina|<font color="#1406D0">'''Alvaro Molina'''</font>]] ([[User Talk:AlvaroMolina|<font color="#137500">'''✉'''</font>]] - [[Special:Contributions/AlvaroMolina|<font color="#137500">✔</font>]]) 12:07, 17 May 2017 (UTC) == Q == ok. I admit I was in the wrong here. I'm really sorry for creating a dump on the mainpage. I guess I'll show myself out of testwiki then. [[User:Artix Kreiger|Artix Kreiger]] ([[User talk:Artix Kreiger|talk]]) 20:14, 24 October 2017 (UTC) :Yeah I understand. I'll come back with actual test code next time. is that ok? [[User:Artix Kreiger|Artix Kreiger]] ([[User talk:Artix Kreiger|talk]]) 15:26, 25 October 2017 (UTC) {{subst:RFDNote|1=Test redirect}} <span style="font-family:sans-serif">&mdash; <span style="font-weight:bold">[[User:MusikAnimal|<span style="color:black; font-style:italic">MusikAnimal</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></span></span> 23:28, 11 November 2018 (UTC) == Protected edit request on MediaWiki:Cite link label group-thai-alphabetic == Could you please consider [[MediaWiki talk:Cite link label group-thai-alphabetic#Protected edit request on 22 November 2018|my edit request here]]? Thank you, --[[User:Ans|Ans]] ([[User talk:Ans|talk]]) 16:07, 22 November 2018 (UTC) :{{done}} I don't really know how this stuff works, but I see the characters are now being shown at [[User:Ans/sandbox/list-style]]. Best <span style="font-family:sans-serif">&mdash; <span style="font-weight:bold">[[User:MusikAnimal|<span style="color:black; font-style:italic">MusikAnimal</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></span></span> 20:25, 26 November 2018 (UTC) == I have sent you a note about a page you reviewed == {{subst:Sentnote-NPF|1=Test page foobar 123456|2=MusikAnimal|3=foobar}} <span style="font-family:sans-serif">&mdash; <span style="font-weight:bold">[[User:MusikAnimal|<span style="color:black; font-style:italic">MusikAnimal</span>]] <sup>[[User talk:MusikAnimal|<span style="color:green">talk</span>]]</sup></span></span> 17:23, 17 December 2019 (UTC) == How we will see unregistered users == <section begin=content/> Hi! You get this message because you are an admin on a Wikimedia wiki. When someone edits a Wikimedia wiki without being logged in today, we show their IP address. As you may already know, we will not be able to do this in the future. This is a decision by the Wikimedia Foundation Legal department, because norms and regulations for privacy online have changed. Instead of the IP we will show a masked identity. You as an admin '''will still be able to access the IP'''. There will also be a new user right for those who need to see the full IPs of unregistered users to fight vandalism, harassment and spam without being admins. Patrollers will also see part of the IP even without this user right. We are also working on [[m:IP Editing: Privacy Enhancement and Abuse Mitigation/Improving tools|better tools]] to help. If you have not seen it before, you can [[m:IP Editing: Privacy Enhancement and Abuse Mitigation|read more on Meta]]. If you want to make sure you don’t miss technical changes on the Wikimedia wikis, you can [[m:Global message delivery/Targets/Tech ambassadors|subscribe]] to [[m:Tech/News|the weekly technical newsletter]]. We have [[m:IP Editing: Privacy Enhancement and Abuse Mitigation#IP Masking Implementation Approaches (FAQ)|two suggested ways]] this identity could work. '''We would appreciate your feedback''' on which way you think would work best for you and your wiki, now and in the future. You can [[m:Talk:IP Editing: Privacy Enhancement and Abuse Mitigation|let us know on the talk page]]. You can write in your language. The suggestions were posted in October and we will decide after 17 January. Thank you. /[[m:User:Johan (WMF)|Johan (WMF)]]<section end=content/> 18:19, 4 January 2022 (UTC) <!-- Message sent by User:Johan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Johan_(WMF)/Target_lists/Admins2022(7)&oldid=22532681 --> fzadoo6gs3qrm3i3bfyj8xfd71lw0eb Wikipédia:Escolha do artigo em destaque/teste/3 0 81014 746345 225575 2026-06-13T02:46:45Z MariaJDHicky and Astra on a open proxy 21 74412 746345 wikitext text/x-wiki {{EAD não concluída|20150504|cultura popular= |música= |canções= |álbuns= }}<!-- ADICIONE "sim" OU "s" À CATEGORIA QUE A CANDIDATURA MAIS SE IDENTIFICA, CASO SE APLIQUE --><!-- Substitua por {{Resultado EAD|1=data|tipo=...}} ao término da votação --> == [[teste]] == {{Wikipedia:Escolha do artigo em destaque/Ferramentas para artigos em destaque}} {{Artigo|teste}} ;Proponente e argumentação: * Indicação para: artigo destaque · <span id="cf-close-run">Fechar votação</span> dsa [[User:!Silent|!Silent]] ([[User talk:!Silent|talk]]) 21:05, 4 April 2015 (UTC) ;Prazo de votação (30 dias): das 21:05 '''UTC''' de 4 de April de 2015 até às <section begin="fim do prazo"/>21:05 '''UTC''' de 4 de May de 2015<section end="fim do prazo"/> === {{Voto artigo destacado}} === <!-- Remova essa opção de voto caso a indicação seja para artigo bom --> === {{Voto artigo bom}} === === {{Voto artigo normal}} === == Astrawiki sucks his asshole. == <!-- ESCREVA ACIMA DESTA LINHA. NÃO REMOVER ESTE AVISO --> <!-- {{Resultado EAD/2}} AO ENCERRAR ESTA VOTAÇÃO, REMOVA ESTE AVISO PARA DESOCULTAR A PREDEFINIÇÃO --> p0rlya3hoarvzgyum6d4lcsubf8kl0t 746365 746345 2026-06-13T06:17:57Z LuniZunie 71174 revert edit(s) 225575 wikitext text/x-wiki {{EAD não concluída|20150504|cultura popular= |música= |canções= |álbuns= }}<!-- ADICIONE "sim" OU "s" À CATEGORIA QUE A CANDIDATURA MAIS SE IDENTIFICA, CASO SE APLIQUE --><!-- Substitua por {{Resultado EAD|1=data|tipo=...}} ao término da votação --> == [[teste]] == {{Wikipedia:Escolha do artigo em destaque/Ferramentas para artigos em destaque}} {{Artigo|teste}} ;Proponente e argumentação: * Indicação para: artigo destaque · <span id="cf-close-run">Fechar votação</span> dsa [[User:!Silent|!Silent]] ([[User talk:!Silent|talk]]) 21:05, 4 April 2015 (UTC) ;Prazo de votação (30 dias): das 21:05 '''UTC''' de 4 de April de 2015 até às <section begin="fim do prazo"/>21:05 '''UTC''' de 4 de May de 2015<section end="fim do prazo"/> === {{Voto artigo destacado}} === <!-- Remova essa opção de voto caso a indicação seja para artigo bom --> === {{Voto artigo bom}} === === {{Voto artigo normal}} === == Comentários e sugestões == <!-- ESCREVA ACIMA DESTA LINHA. NÃO REMOVER ESTE AVISO --> <!-- {{Resultado EAD/2}} AO ENCERRAR ESTA VOTAÇÃO, REMOVA ESTE AVISO PARA DESOCULTAR A PREDEFINIÇÃO --> kqqy3ltkks2f2gbo1v545w1dch0api7 User:John Vandenberg/async test write 2 81547 746069 746063 2026-06-12T12:11:28Z Pywikibot-test 23124 Pywikibot 11.4.0.dev0 746069 wikitext text/x-wiki 1781266279.001815 qhgmlwdhgjydgi66s2gutf2omqahxgg User:John Vandenberg/appendtext test 2 81788 746068 746062 2026-06-12T12:11:18Z Pywikibot-test 23124 746068 wikitext text/x-wiki 1433650768.531433650922.331433651729.111433670166.311433675620.231434189298.391434190713.181434466819.82218051434544025.22135851434556196.60172341435173199.59346151435175699.59451271435227022.74044541435528701.75742911435530425.45590261435603389.080081437231694.72999551437247968.58793571437249806.3797741437298795.05681351437299498.54262071437301447.66920381437302227.7655441437303194.27986031437304101.72397661437310188.7074311437310950.0167771437312161.48824671437313010.34581731437313729.64502261437508795.02368621437509778.81783961437516631.40031891438256915.00195531438380338.75435851438383980.68647171438454064.30758831438457192.55998851438473558.4497151438475370.52737021438888563.82252121439048615.09364531439242551.86522051439284878.94054751439567068.00147221439645869.40761881439653355.34343361439892097.89366271439893989.92894151439937872.74017361439942911.25551271440071096.08264111440280762.25626281440718001.3262011440893319.42683861441040710.94389411441045094.56088661441367039.71286131441492543.00856571441494238.9647241443131370.03606581443212814.54482251454969098.621455143085.01455479939.331458010578.141667865282.52259731667886777.04896881667890384.16996771667891590.83226851667893076.91738251667895853.758761667903064.99619671667923005.8748951667928572.68390731667933784.59484671667953902.59001061667977923.4422121667980794.38768461667998421.35940931668010265.61172651668017452.821981668037264.28078271668060176.7066241668064765.02555161668074805.6843691668086298.94039751668146229.9122951668195362.96826151668202976.2808351668237144.36446861668334598.07503751668351702.72978881668355273.88250331668365870.03056961668380539.2045151668413384.79889971668425433.20089171668429428.62591481668429882.60904881668457667.70654341668457670.14254471668489259.42919141668489272.77256321668524787.90621761668619093.49428681668627855.24322251668715685.06132861668752284.64053461668846412.18063191668859062.45581651668861871.6680541668863624.53730581668906968.63125281668968346.827691669010411.7630731669034060.6490591669034135.1873461669111400.3310911669112565.91641261669115243.3388661669117792.36109231669147328.09415841669202489.4733361669207650.32954051669293250.78917381669293379.89944481669376126.44172071669383245.76502471669390928.33843281669456758.37305931669460552.29366331669466891.97368241669468483.16195921669507139.0193781669555832.00191161669561735.99639271669567236.94770341669575598.18926261669583250.82441161669589277.69016361669617066.74746061669623772.9824791669639778.26535651669648369.11541911669681417.00446221669694451.18411281669752632.77524021669790924.5213481669793446.41492681669806912.04391981669824036.82929231669872027.60449481669898227.71295671669898259.26809931669921155.98349361670061183.07913141670066507.8165841670077709.53290721670095550.83527471670107627.98861271670121136.95061851670138654.99623131670200104.08187131670230755.3226831670244520.57672931670244668.51782011670389975.82026081670390023.37481831670437142.29134321670474770.88995531670487246.87528041670502115.00278231670502920.1938131670847688.62029081670848465.75781231670851705.87951061671033970.25642091671040035.06844951671042864.6599261671372985.38839651671380314.9132991671397640.27274011671414714.3057121671436644.76151321671464740.28983191671471979.49879741671515351.36315011671534919.43988371671552136.73949381671567767.751751671633257.00196431671770826.36481481671831280.1013831671880464.16703251671892132.39851621671894047.95178441671895309.44157341671909181.81563191671915314.86987641671958262.78592091671964901.68418721672000091.18395731672040310.53217081672050418.50751851672064946.23232941672111553.61295031672117635.92343691672130442.62549381672242689.61853311672316734.83227941672317602.87131831672393398.53247791672410436.25166461672524792.27631931672607847.59926841672644463.87349151672646823.01231341672662689.7048611672663480.46076921672679608.50131681672683539.08552241672699544.1003541672732083.7852531672738571.41738751672756132.6532181672773164.29544851672819542.08460331672825014.19517781672905848.38628651672913462.50501871672919738.71067861672922430.75280711672923322.11899111672931497.2450511672932304.1778181672945954.7680341673031863.65857821673079844.9389911673088359.9833371673095552.19145581673097227.50064781673102532.33062361673103474.52100591673115502.80200391673170728.81979011673180084.83551031673186706.26281071673193236.3913051673204572.94682721673251372.26334931673257873.80217721673265157.1539221673268011.07930541673273333.41361331673278687.03390881673326768.0135041673336643.46683241673377550.0737211673406497.31679181673429347.03616951673442396.44323591673462031.40780231673475642.46197681673486662.78692481673494604.4536731673538992.12018081673597172.3338311673607749.57159781673612477.3083471673784155.33494331673792254.69903181673797192.45269541673805036.33327221673809787.90321951673820123.49186471673828737.7350961673845480.29922721673867388.29650971673871721.06576231673872705.55981831673881096.00600361673886092.39976671673901527.23546221673936700.1277911674024723.59655931674029565.17511731674112677.72348791674131134.36896941674131931.51858191674176788.94118571674205022.57874321674205892.4945881674207066.500241674237874.79511361674292792.7148671674300054.9405991674302649.25306581674315023.03331971674321156.4278271674330147.9499351674375033.1853471674379973.83156511674405785.2695661674460497.39998821674590174.95085531674599728.517341674918001.6330231674933771.13804131674942945.7791681674948667.64437911674994582.97465441675031208.62388441675082059.0771621675082116.2687371675107052.030031675108612.33305431675125215.25636861675257210.1793411675341484.38473531675341609.7052491675405564.5855741675453239.69066831675497461.10145021675528556.1533341675609308.2208911675687010.83857871675687111.48495861675814393.79852651675946118.90168211675946263.62637621676270319.42003041676413416.73733331676415638.60224561676550944.72917251676550988.86583191676811844.2470331676892937.27954441677156006.10806781677156012.4058921677404093.0326611677414534.3757681677422594.66884061677431827.26376751677502782.10921571677523601.2258471677532681.36643621677547559.68123271677665504.37648651677884342.66578171677941180.10126421677945698.08328151677946891.47642021678007696.49033051678013853.27689121678027514.350981678043805.73149591678052259.90557241678052643.0314441678106220.95231061678106343.42481541678133527.48043781678172110.71678571678365385.72825381678365409.99574831678764799.86219881678813325.91175081678813350.79962161679170545.65496781679450012.02785161679667672.31822281679744609.64862081679759956.30766031679761981.30153061679763749.89561941679767912.40684821679841243.24157331679932902.0535151679932917.83848141679940392.27980331679940406.82556631680053071.3510561680080183.73721581680082474.63970731680084259.96698951680086369.3228471680091872.83918521680118892.88375951680163589.5406531680163600.85161521680176046.1660681680176093.195821680203006.74859981680218432.4234941680218462.99551681680252349.87218141680259887.77778031680276784.21608421680363996.79403231680364030.12159371680461718.1685331680510128.81247231680523016.66201071680524491.84096381680535330.71197321680538614.16861461680540603.81350281680567879.27351781680584189.1618111680597522.02599571680611370.06081771680684863.62609741680702380.27745721680703768.80195071680724926.03246521680761509.16899231680781166.79312871680781181.85028271680802128.60378311680802968.58253961680810706.74496361680824056.68816421680858607.70792821680861050.77714251680866073.6807371680873834.65833931680876092.87447241680886191.0677981680893212.76874541680912955.40428971680931523.71085381680938348.89648771680946672.26258541680954488.31267331680957237.11845351680974132.6564441680981580.06852131680988103.15952011680998817.96175931681034799.03404331681040471.09055521681052004.54530671681126545.9002181681127117.2114981681132523.79209541681134369.85547611681139841.28229571681144411.1575561681148840.42879941681153937.74360161681160928.71128651681166905.73377011681187720.03183911681192405.11509941681227001.43019371681296338.53012781681298285.34920621681300548.25355361681399245.12391971681404166.32169871681450160.48757241681476226.65624211681482908.2132631681484907.63010051681488264.0226731681497922.02627541681516321.013621681550173.9751061681556873.35132771681634045.1093921681638556.73702431681643819.74579431681648142.90162351681654379.10618951681660670.91600231681663536.92180131681668105.8786741681697857.17983321681726412.36520551681728904.20325111681732377.95373061681732552.2726261681734122.47441771681739722.6026441681745392.19363141681752304.44942951681764534.25785851681834319.85117361681846787.53623871681860420.36393951681864973.31808471681875313.6030341681990891.22789741681990965.4691161682017923.75330021682021682.18149731682057250.76527521682059742.77901941682066226.93418961682076763.95251131682085198.28220251682144325.24995231682151599.1659521682171840.53873781682177076.96661421682183378.3197661682201845.24131771682207240.42407821682234649.83576371682237773.5109891682255562.43250821682256440.6314211682276533.21695041682307310.77357081682309188.4801751682327080.5300711682330112.66451981682335575.83368681682336670.2883251682364807.1775281682398596.78049471682412204.25284861682420579.50606181682438986.83246091682440038.89426971682460491.3521311682460514.15289761682486722.93688181682488779.60810041682526064.89231941682539359.5333161682594683.016191682595813.5718581682668022.43959161682669508.12358161682692147.2006271682757542.86185651682764905.5145551682772596.67823051682773643.5455011682784718.25319361682792198.62961861682846988.5308141682847360.08277031682855920.74403551682861011.37232731682866058.34553621682874046.51448271682874377.29042581682875782.05195261682880603.05094741682933872.46009541682935892.51180741682940017.87042071682941142.98671221682944638.7336221682968813.95042441683043013.224441683044388.7385881683079759.64020921683090931.4739611683122753.58097121683220168.91720751683220186.32398771683228402.15677021683229560.23437881683299138.82950661683545273.97475961683546542.5225811683639428.85272931683650636.34203671683805773.17751171683807026.16440961683929655.90975641683945251.3297731683945334.00193071683979199.57489941683989769.1559531684138199.31341811684138303.3588971684149417.94796661684150694.01225781684162796.8634221684166131.38370351684186491.90226461684251726.4504761684341513.18342381684408808.57671331684410199.48726771684489043.08548951684506392.8573881684675092.4285181684754267.71727821684755469.9380261684824482.14777731684830139.4911791684913767.22985341685013633.93379761685014938.77503231685102500.5862471685105187.50040251685186112.62153741685276024.9902461685359085.10708051685360365.34077381685452391.8990681685463350.18182641685464580.15679741685506240.55518721685507573.46218041685515091.31630541685618762.95992021685620191.40762351685686918.73273971685699127.00476841685700501.55954431685717478.4076761685734131.4306871685783480.31948381685784754.27991371685822284.17034241685826117.9924191685876410.60644561685899260.99922781685963819.95782521685965097.9749411686150851.77675581686223052.88230631686224433.3330841686232302.44289061686431729.6923871686484871.47790581686515043.2986561686569325.14197231686570601.30179381686829205.67923261686830619.36993621686858941.9247121686987477.50710231687163638.79776241687173445.39801721687174767.32710461687433296.5008811687434714.9197481687778668.3172251687780071.48142651687804721.06773691687804961.1013381687870703.48142171687880051.5818561687914862.05616451687945918.31335041687947395.06492521687953490.37763641687959324.18503831687975359.10666821687977529.40586021688005289.32374951688240380.11102061688282000.03003641688313546.3198141688475697.93261031688487946.15282921688516501.1861391688542375.87847381688542658.34382371688659572.67238471688989210.09367061689249540.64891221689516330.02128981689518572.78979041689583949.94965551689592901.34582541689607695.01970341689852040.93803671690180073.57848791690191138.51633981690321982.42092041690449914.8819191690455300.5934611690458478.94185231690465635.7540451690474689.47561761690539972.5845331690543686.42938161690568173.75836471690628964.38431071690634808.00196481690713940.84531521690740853.82095071690797462.8997041690802793.02018141690877446.66731241690889603.01329571690902576.47618631690960224.63360571690965952.47575381690985912.44080951690986558.72973781690988632.4453431691052503.35620671691059454.53480551691070774.57939621691155418.632231691252944.3855231691339134.81100341691400441.28892831691407321.69667531691432706.8650791691480503.51510481691481141.53991751691482868.38574171691653911.6456711691667067.58978751691677912.8174151691990311.52463151692012332.80747371692173850.40086171692259390.40197521692271662.9828511692354012.89279321692387939.37044841692450924.90117481692534492.76775311692541157.84960081692609941.4447311692613681.6871041692616885.06272461692862010.7047641692876369.23113751693053622.35440371693063667.55145881693149769.05626231693153142.6450571693216006.80971571693327074.38222051693400571.59087851693411769.74461581693475731.57202241693481027.00816321693491970.33835031693754058.26204921693826674.35946681694067456.52644161694086432.312941694086879.4216851694291429.4310971694431406.95781731694657927.28599861694659203.8303991694690891.68987661695036242.05242631695052511.6695451695073524.60868021695202102.93862631695206418.5803891695216347.58525681695221958.98424171695295594.74410271695320782.37095791695372272.756491695372628.97463751695378229.09218671695404004.23362351695634429.53836321695641055.01008581695761650.25719881695834309.91726141695927260.04524731695977453.164681695980141.0916121695994699.91543251696140618.86266831696336429.26674631696472860.44576241696505121.36730741696670716.8756681696689454.51658061696692541.47360921696850900.75192381697040191.60620881697097598.39965031697099236.2009691697144402.12478421697461393.63038371697527918.46235591697553804.78659531697815765.07235961697882531.84064671698051461.11684851698245633.10182791698508506.21113731698590537.26034331698771781.4928131698827472.40152741698827637.62499951698842362.84378241699091325.84301851699112379.118591699114243.11691121699184658.95015981699202708.55501941699205204.19041511699223592.85166761699283653.51198431699308697.88956881699632738.20176461699697040.08083271699706783.76506351699708540.52264861699878426.134871700605295.13594941700742428.27381941701453821.17849141701535213.18951851701596010.55240921701651782.60944631701676216.27204661701692980.01650791701786460.07426741701790394.30577541701794888.2957931701814293.08096051701829196.0474711701845925.83316681701848599.3431961701881057.82830721701954974.30711481701971095.83130741702043153.9835111702121022.79919271702122868.11675931702131140.8443211702209307.3005071702214096.37788411702297508.09620881702391057.6135691702476254.23142151702545723.33017161702556484.54818631702570523.91162061702584813.98265171702632851.84962561702767066.49533081702768384.77078131702786485.3929631702813757.61672471702976231.91704031702988046.03035161703007104.43871831703060641.49566441703061978.66786461703068432.47355061703161333.71216631703364778.24125841703400784.23487191703421297.88166571703422570.29016641703507209.10789851703681521.57480841703692553.249851703766399.7434331703852651.09494881703904819.15819121703906381.68961221703995904.11975221704121987.50157281704264435.08052851704282576.0567271704287308.40712621704298219.9210251704298836.44698121704303268.78285381704363509.4023921704370865.83305841704373191.9196831704446663.93405531704473306.82136271704556109.78341911704652663.27039841704703502.98144841705153078.2567631705171764.48118851705247919.4075471705321451.7373961705357661.07616421705461907.794251705752184.9362341705828818.60175251705830883.71437721705841015.54000781705844281.67964631705855451.01224971706185534.09338261706369476.87958551706371248.95242761706446636.12856911706448562.39597581706500837.33251021706622694.41761571706638400.31250291706643762.98329831706652657.88941431706698456.11485581706705858.3338771706775991.24169541706879091.59539581706959973.97395971706978466.78913071707041650.44565821707061227.6671281707135479.13930131707135774.83621931707138577.93408441707205349.07070681707210631.86285881707223177.35967421707234259.76761751707236462.89073851707298811.07813571707309485.17887141707324226.33939241707324395.90175751707324534.66345451707394969.43060231707473456.3788881707484017.54700971707509815.8565891707630003.67194221707650093.14672661707741016.75071951707843507.62747121707843972.63939711707891847.7828991707894042.62261721707894892.28781461708082572.46326521708270558.69651531708335825.3520781708343518.4265971708345382.65903431708346942.56566171708352754.41838361708355494.40021591708356544.03256871708357237.74094871708357678.17033841708523300.77632331708527433.11350181708597953.04801491708598048.15991881708600366.39798431708604576.4365961708610956.05604121708950178.1200671709014376.84691021709199311.14945361709209277.74335311709295953.42427751709372594.5523051709372731.93302561709372808.05139921709372973.60188251709374813.5571491709377109.42867421709484246.11830431709484785.2390241709533165.47048741709533819.17485741709534209.88706611709534926.47438381709538670.7195121709554858.88737061709556222.50437431709556406.85210971709564869.27713011709568887.47204641709573527.703281709629796.3196181709630611.95577671709630963.05990671709632191.8085871709632657.66816261709647467.98279861709660435.57397561709714867.27947381709717072.49129031709746877.2993021709805154.00563551709809459.23794721709814067.34054141709879953.99508521709884151.13086131709894214.31273981709902235.44790631709914532.75472951710159733.28755931710418921.42482541711628639.58727981711973782.74049451711974343.14418481711985794.7452041712014996.42285541712080693.69224641712155049.11888051712168399.60296921712169685.1040791712253703.75393061712502533.70237331712503293.1766331712505373.05488321712511056.70344231712511646.47766071712554342.8047431712578871.33526281712591147.02153471712593306.1449461712654643.9849731712672272.33918331712733238.39784071712773663.19977021712848308.0081541712860542.67349821713087332.46015721713121304.38284681713183849.22030931713372266.49107931713373136.88705831713417144.63786321713443071.2244371713541517.180411713541699.3184841713615294.52450591713619123.95877081713619984.8662581713620203.87909171713629353.7768171713693000.37563231713696953.16933941713701711.91550061713703518.66322571713708646.54834151713773912.73249241713776408.69481331713777146.3249111713784750.26938921713788549.0017581713803084.09800651713873378.93953251713874972.05580541713899910.39179831714006574.90925341714047778.38088851714214149.2920471714215604.62877371714218289.77900241714220302.95767071714231183.21794841714243696.78785441714305638.49526791714305731.21596931714311478.84540821714313996.51210671714485244.08302331714488946.5538881714652552.4470721714661325.34664131714665061.6320541714685108.3231281714709757.69277481714712589.13287451714717873.74175741714719260.34569121714908101.1871011714998038.7068751715004179.24228761715005017.33956381715011561.74028921715148898.65396171715244641.4409941715257241.7003561715271768.30176381715292152.86608841715330004.41626481715353713.42781571715353959.83065681715412668.46831631715421483.23257471715436334.75793931715520201.0295451715526648.21276971715527468.23268561715528972.9669821715529459.80643921715548182.89837461715602825.46457481715624287.64700171715666953.60590481715670258.04229781715681034.8107381715681373.08043051715862181.04882651715870345.8139851715870495.73219591715952418.20962721715953957.14005851716016439.23131821716026356.82077621716029493.3221591716031083.0943561716044060.71082471716107419.57978841716126517.3683791716131168.69529941716148891.67200921716149216.5821041716210413.7965631716312201.71627861716373672.36785031716374729.35419821716457578.06868461716467093.383061716559791.08338621716561161.53435441716649359.7539071716651785.40524051716723261.63200521716725596.59526781716732292.42133981716734447.8044291716738254.8956911716746654.24368071716795806.77896641716812563.0741851716892685.13354331716902147.31798151716903552.33264231716923921.77522521717066955.01724891717068917.04717661717072154.64399171717251267.23197651717259797.31061671717262953.80781751717328859.87784651717676565.94108441717861914.30391071717863020.84930681717927139.78493431717938355.69149681717953323.82942721717999765.11817811718009339.5952451718009454.02913121718009667.4100361718013654.53190851718016460.01057121718018761.15332411718020799.01913881718021245.15856621718025465.146841718026322.14862821718029950.58980631718041093.53587461718088975.1600171718098525.37702471718098991.82041171718099452.66476921718111343.16626361718114741.25173521718129965.94656441718167927.92333411718168560.61959651718170862.25188761718205019.47537661718206374.16787241718206647.1795651718208141.49481821718210905.61703281718270394.38123511718278706.33032561718287986.1937131718297994.59491591718336969.9835191718365449.34239961718449087.83051371718454283.21870951718456413.19333861718460153.46241951718462494.17207481718465987.28904911718467416.27678541718470343.79496341718477682.9318441718482373.43667821718515832.7972051718517249.02119351718517857.79042481718519972.8539831718522868.36958581718531550.47946141718536268.03831891718542101.57696131718544464.276851718619123.1634091718623185.88458681718636520.18447331718638800.48453331718731139.4622661718744170.95703461718774106.69617961718886170.088351718961712.35531521718968868.04600861718979695.67104221719060406.1220171719062040.21757941719067330.25522921719068089.06455061719076451.03764821719145795.36178421719151988.68255621719155248.8882151719162133.02871321719171629.7718651719242754.68141651719246705.8919081719255647.18871621719257347.07321881719298633.56316071719407710.83869461719491033.8175251719659127.47902351719661686.4932391719662640.99923061719664604.3216051719673418.46054081719677856.88689371719678098.51585631719678853.39937191719691556.0107241719694248.85178281719738870.07826381719739924.29021171719741111.60789011719742304.8520551719742716.78034661719745397.84074521719754662.89840941719760266.12941981719794972.6005541719825084.29679921719830253.9239311719836759.33914421719841637.71088621719842717.60566931719845321.64250181719847663.70107821719857525.72813531719993166.31000541720004409.5729961720018730.98016761720020182.87782071720076639.35904671720096106.61090231720113532.36414341720179036.01004391720265126.1817611720268654.5868861720282147.87318421720283309.32325241720286050.92650751720293539.3648961720348073.98572061720355917.47972461720362591.71961671720364407.29622911720429987.46009041720437485.89313361720441618.70600441720508195.45873951720518734.8392421720723289.42841981720871967.87330561720969642.51132971721145249.62304261721305348.6251181721379346.542811721406926.7735731721488540.2356821721496747.87938481721565527.91214751721574362.68826171721578502.43117141721580213.3311231721585283.3753051721628125.85017541721636883.68095471721651068.3836311721674353.60487581721711682.92611581721718456.25190661721736585.12386851721910443.05865841721911097.9222981721987871.73615431721989464.20908121722005684.10386231722009183.98562811722011469.2203711722014888.58855771722021975.44721461722083657.7424821722085815.53132181722096167.44949651722100696.7462071722149157.52232481722155656.36078931722163295.76613711722174676.3690631722242732.55940461722246601.0920391722252901.8107611722256046.73971531722258487.4373321722258901.9600681722263870.85462641722266409.4265291722267746.61000281722269621.92874881722269976.8815461722272080.77377251722279683.22267081722285241.02753781722286729.75908951722287985.7799481722299867.8714451722318171.4614381722346936.88357971722348798.46942781722350457.81067321722353627.2568861722357499.26558111722367575.99968431722373491.33078071722507532.24708371722515108.97734071722591849.9296011722703647.97711471722774371.71582841722860722.0833721722957642.21708731722965889.98333571722972359.45396161722984867.60560561723119754.11207841723125286.55064421723130127.51485061723134319.18638941723136059.16600351723137066.5406291723193843.56864331723198696.47698711723294038.37574581723295845.44823861723297533.78702881723303807.6631671723307181.10538461723311677.03078251723422079.64531681723457339.1525981723501078.41981941723503405.5784231723617569.60056951723639369.8436771723724588.10065871723789608.36872891723969341.08708981724070485.40928551724143436.30561071724158744.75811391724202777.0643011724301420.52415971724320167.54208281724326928.27127341724329651.45827651724339689.16775081724339990.81605431724341541.8335571724361752.17471031724675459.66274451724678562.51491741724679041.8596421724680019.75805571724740481.8159631724764160.67093681724772210.33077071724822514.46581531724931894.77922081725133285.29799841725140832.77638151725178025.79151321725179150.94023371725200755.48870351725202807.74458771725207502.73175141725208627.66635321725209216.05556461725210265.44690441725252365.3833031725281675.10662651725300399.91392231725540836.6651921725631556.60361741725822627.10982061725872571.50008231725884561.59261251726144055.4084121726302918.2109221726675560.78871441726731619.00652861726733403.45392541726734397.35323241726735635.69507741726747782.26425621726829193.35509751726830291.6796181726838130.2701831726852953.32955671726858668.94598631726904919.53113151726908011.78215241726911494.43632151726923822.73583151726924631.13999751726926654.4907061727094218.42981771727252570.93366581727281245.10181121727355214.64388871727355826.6178961727359034.26466751727360644.51546881727364225.8715341727365398.40147381727699176.51489191727760655.17109581727951236.031521727954405.64962171727957757.77329021727958178.89527631727959519.3105711728033650.33202581728045029.38966541728059516.23578881728060897.03357651728122955.8606541728129694.6456711728133522.16625431728139325.90391971728145836.68000821728194852.80935961728234083.04004381728241507.9161731728303752.22948271728337214.14192871728537254.20157051728732990.48960261728737796.45881251728739716.13933061728743550.084261728744005.3918461728745195.51385121728746301.37412671728747687.5570631728833762.35883451728835446.2922161728836591.77962781728837687.72793221728920301.63146951729092802.6129941729093469.09824441729093986.6930831729094596.3920461729096367.12394571729104951.39206271729127668.9245751729234880.59355141729257906.23548461729262780.74853061729333006.94400931729334137.91921041729336212.40924571729338537.22319481729339287.76037341729340708.85076141729342959.6031771729345579.34861141729352068.85322051729352424.3033391729355813.55383041729358559.69434331729367128.97711661729408008.7562531729410455.93828371729412778.66819211729447330.7101781729506929.79903321729550383.50321531729562047.72278021729772674.30436231729774243.54481581729788974.2966791729830363.88572481729956671.11215191729963276.13354231729964801.2759481730041059.24922511730042594.4898211730044967.31507661730052437.95801071730108706.1819951730118182.17060021730180022.8704031730203262.34906771730221702.35324031730275347.68835761730284724.74087071730285556.1908141730301942.04073381730374645.96319461730380770.90588331730404050.21319961730409146.01821851730413873.39013431730425842.61837341730477372.56358981730479560.97667481730551759.14125781730568814.75447271730572438.19093441730573549.2564731730579225.9238521730595578.01302431730646326.27951721730647944.81843971730737022.00499321730747490.06824851730807292.04786471730813368.64133481730818826.50661751730824558.75576351730832422.99776941730899305.0615351730901750.78711341730903102.00121621730971789.14266371730975168.8730961730982023.72336751731056436.06550221731059006.3753541731071324.57351161731148182.06626031731148462.44941141731155029.29867031731156907.49877831731167668.76448461731169795.64211731731171081.69893461731174489.80106231731229459.46800331731229698.89608241731233254.31718731731250434.28619031731481335.12306331731513305.40980241731593266.2619741731829257.91134291731859678.92372371731862005.49140671731922937.4808991731932247.01066061731932525.03579831731933290.09443261731935460.2790451731947768.1370441731963060.6405581731965814.97759751731997859.09550831732005512.74292661732031545.79197171732033235.34174281732036071.30061321732037983.13547731732041409.30651121732045107.55121021732263516.1040951732278310.46816371732288821.0565531732293225.38360171732383821.50968841732384069.83460351732391560.43771732433721.32781671732438713.17433931732441780.7008471732444579.79170161732451683.7766181732452619.78835271732457653.61890271732461172.61851021732467163.96287751732468839.23634151732469965.24506521732470239.99742651732470501.72090651732471055.29854061732520087.42624571732530123.6256731732536785.36732151732544673.93568091732553939.84375951732555010.63737251732562360.8003981732577912.6871631732579381.4846941732592567.86124521732594026.41688681732600123.13871861732605068.88938931732616986.9114541732619159.52321151732650631.55471561732720047.2405881732723299.8870821732728587.26730161732871729.11913281732948772.60584121732962637.1605561732975163.11275771732976290.6137441732985336.40084581732995963.96110731733080300.40849661733140107.68333481733155022.88794231733159221.4871291733168664.37563941733170027.81566981733170526.38246061733175309.14986661733219295.66059971733219681.74375251733224273.44269561733227643.3910411733228907.1991411733229826.99463961733234914.88147951733238777.20137861733242353.3587111733251189.9278881733255484.1180661733271589.04232071733293075.55299761733306828.96452671733309484.4286141733314197.22540021733315408.63991121733322593.26261733322805.56145381733333231.66890931733338012.36725621733557577.02903531733561313.32804731733565446.2815431733567333.90873651733567523.57054021733571119.16926811733573990.21949861733585274.73568651733585807.70079871733588017.7802691733593130.24049071733596018.95720121733609188.49137931733643746.43857721733650829.55517651733653518.41186571733656796.4539251733658330.072241733672789.5846831733673099.07036161733677665.48938061733732967.44802711733737559.55780841733739774.8239391733743548.28622531733743862.25829121733746858.26144361733748646.72557661733750237.3521711733761303.18399291733765178.02769851733822550.6699731733823340.01468631733826457.3003791733827822.37315151733833036.50665521733834839.1826851733836114.1890831733836604.02174851733840883.20230221733909333.22253161733909960.60128761734006546.8225221734015859.57260821734027149.3870951734036509.35217021734088813.24160461734092473.45144581734093224.58835391734159531.09753781734172373.82559251734177203.28432581734180637.15363741734189493.22910791734199074.094851734204520.1181031734215792.56901571734244208.42764541734262072.54748561734264107.63865041734268892.43243811734269365.42090751734271469.63599971734277423.22195431734290155.5247891734351728.73345951734367515.79722861734438331.95803671734439067.72983981734456547.34842541734461357.14716741734530139.5553771734588131.5415551734610976.74784561734693575.87978171734969824.56160281735013863.393161735215585.1146771735298797.99119881735300860.96658131735508440.68806081735560537.00754211735579463.11638711735594487.58908061735595948.66397571735597276.44437431735619132.0939121735711899.46031331735748282.272511735752879.14751721735771109.68907361735816480.08303861735818864.54984551735820574.48879741735845919.00464921735860298.96272641735905773.7076061735907315.48212431735920256.98129151735923066.94315771735927923.41648321735985947.44539171735987120.1806911735996630.83959561735997792.5823651735999950.93494461736005094.04602071736013959.72211721736091883.54373981736094621.82072661736109303.38124751736145589.5623011736158598.80606061736166007.97108551736240721.18058561736253866.97930461736259561.10710951736260639.09564881736326720.27908971736328441.73657161736441715.22370151736441948.95128971736448183.2816631736457756.60786081736667671.61953041736859448.04466371737053105.39502241737059294.32388951737218204.23131737230569.76234361737281191.78747031737308641.89546281737634796.05093771737661678.30621581737980414.56857161738176427.33152221738307157.1679331738509361.618441738511025.38118171738514914.97471881738516331.62643051738521441.32319571738525752.06775711738563699.85149531738565426.26452471738585137.30715081738597319.09383541738805958.55573341738865614.27569961739190092.90278551739725914.1677241739794922.60280971739988471.1611621740054329.53807951740079331.96067121740157595.89306021740220123.13252571740245134.83469081740306870.50918631740399755.20469451740424096.56160071740482149.7709031740504617.92714481740662913.58478671740698083.95707631740719951.12571741740758916.84956621740770227.28777481740838599.90834781740841180.05470851740846806.8733711740851730.32116771740864068.8188891740870144.50498751740909633.67035841740943265.17093921741538044.2799881741540280.86075281741615485.17051961742736965.52304531742812809.59154631742817938.266741742820838.3423121742833639.73128151742836382.87002781742890878.3034031742903231.48092751743006526.32749031743348943.7035481743704527.33931921744540122.66594081744542397.6184541744552562.3538921744553711.73710041745173335.05232761745238610.73597071745843195.26599981746226701.0918641746362227.3089311746371442.02811121746372752.96396041746447891.44518851746971136.59414241746972157.62861821746974457.8493371746976168.04008251747052875.46152851747480982.72086171747494506.47235631747495596.47780681747496096.58660771747501563.0468381747504104.17075041747506325.9508071747560842.93142221747572746.32942341747574020.4336941747574378.1243011747575177.46076971747579555.74680231747582533.39935111747582736.4808891747584502.74418571747590890.88166261747663855.65062121747762052.21985131748067768.55359531748070430.55718111748074382.30197071748084587.6802791748100243.06219581748262369.5918211748456997.30241161748502143.56055741748551733.06875921748559805.85630181748687418.24339271748692941.51643781748697135.5269361748702566.18927071748704892.67874261748707300.78871061748707718.06951361748710902.92918851748712630.29231881748772575.60379981748780746.9731851748787418.26495341748872035.61121321748878691.137971748896375.92971748900642.73245171749046627.53392841749098755.83221241749098959.20923261749099168.61557631749101223.54241181749119609.5599181749126667.21709511749136965.48203021749139791.37379071749205793.16769031749207480.8730421749207705.36759331749218861.07364541749271912.958471749280080.92087481749295870.75518011749309413.27836321749310948.2479821749322719.81444221749373678.24797731749375255.88597581749375475.07102351749390282.05390721749392292.0063081749411650.42451621749413965.12196371749475224.39129951749618675.85485481749622671.67921351749624056.94271451749627604.1784551749631181.01720761749632928.388051749633248.42225221749634804.01072031749635921.47261521749640795.06175831749655274.54887771749662043.67698741749712691.98407031749721876.21657251749732184.4471661749736626.7742331749739584.64724351749740402.61703251749747088.33462241749748466.53899031749750838.43557451749752305.12964371749783682.446221749811531.87015961749812424.43984911749815220.3855131749859800.50181271749861810.68900941749902117.18541221749904617.60818031749912253.1481761749913909.38116311750076587.25237131750112065.51739981750112549.35909461750113293.49248391750147068.9693321750147951.59855251750200400.22014521750319173.37273341750320656.22340271750335721.70233581750503005.99435231750505702.15230181750505889.32328081750516364.62822911750516682.09823581750520735.09064871750591072.01674371750619801.56257151750620371.7246161750622133.09173231750681332.28547381750940677.62030151751110771.93014931751115024.4489921751116291.45540211751189516.1089631751191203.62136581751197267.61229181751210591.699061751210808.46503661751286324.2863091751355187.47904781751545628.6297721751725864.76436571751730131.79488541751732922.95610931751740004.53788421751802693.42043191751853656.44941881751888514.45562741751977113.73002241751978375.45727251751980210.80578421751981578.71516081752053384.70437621752065147.01648551752066782.68813631752068878.81543951752205705.86502031752220216.62114951752246320.06772021752249909.7087711752317403.78078061752319959.82731491752406318.92591481752407259.95407271752421544.34403921752422710.55015231752425032.73874641752426826.2733981752428572.17700621752433706.0658221752470562.98645881752483585.27684041752484817.75912171752487219.72185131752581332.79816531752653249.8534491752655387.0071231752658130.9101921752659385.04600621752662426.3619591752668621.53872781752695270.23094871752755556.76991751752815643.08703021752824222.17550471752909383.60699961752912449.2338241752931172.30991841752932046.08516341752938425.21734791752979538.95104621753081962.70720271753090756.31310061753109911.16209861753527824.8208531753528157.58777211753528832.78555541753543391.409981753548006.04766771753555118.34784911753557058.28183871753607448.8085821753619533.97913721753621675.42673831753624357.04167771753628490.57589821753633928.4630891753634247.65696551753635835.1478181753637985.3761331753642657.74337051753705646.54954431753964966.3723731754036963.81071071754050075.4858231754051763.00968531754147508.76656821754147960.37546681754154766.89045071754161739.48721551754163737.6889791754210964.67577391754219537.72440741754222113.16079431754223091.64906881754223664.96145081754228602.35027861754229672.55927561754232636.3346941754233129.24810151754239954.64880471754241517.74627611754293618.73869231754310329.99401831754317864.02745131754318821.54698561754323102.69770261754326266.59494351754330431.04373651754334383.8229841754335714.09769081754394275.90666251754569461.6958781754638842.06614331754657332.2965881754661051.36486671754665334.8849631754718055.42017081754722367.38050371754836525.26578741754838348.94885041754838865.27615121754915063.0405931754922379.19625621754923244.57161741754929550.85405331754934157.59779951754989457.02608081754990760.36931751754998789.73707031755003472.47263961755091334.14983991755092562.45052361755103874.80169751755155650.49192211755157146.6223681755161682.15712331755166388.19822221755173045.7185681755174334.2213181755185779.42064291755186716.5619511755189286.1331981755242426.36476161755519872.06463531755528180.97155121755528528.62853481755528832.34833381755529449.05892421755529841.94665981755530424.19558621755531801.02439361755542591.2031921755546709.01237341755581286.38693331755683325.90864251755697406.07089071755767369.2794331755771352.36944061755779093.85620981755781792.09225491755786039.54400421755858394.51499061755864857.68235521755871908.5540961755872239.40110661755944972.05689141755963250.81905911755963438.96490861755965198.06602641755966671.70875931755967661.83248521756034035.27029371756051795.8273511756053720.38031081756062188.62394291756063534.1845211756068629.49149271756072172.11601281756125268.80325321756151453.8187271756310124.8685731756324844.69694781756482129.77022931756490613.15560961756492041.12433431756492297.4743671756513623.957081756514647.05277421756543727.9926171756545188.08750371756554689.8216321756560330.4979361756563740.7113121756565274.90660831756568027.52632161756623368.20361261756651846.51766971756657428.71791361756663741.77574421756668491.29928161756688997.64640711756705263.30104331756730683.43084431756812503.3911331756816382.50912021756880677.25349831757250586.60078881757252044.00713371757254258.84415481757315748.36797551757406692.55116631757427558.33150171757522892.84468961757593511.33569531757676782.52932741757759889.01814961757767620.0571711757769226.14481571757860829.75224731757861011.95556551757869302.40287541757870842.21012851757936618.8545211758094931.5402841758198530.53288751758272178.07883481758376917.19157841758379331.32556821758383837.43758921758384955.91952871758386059.87447021758387594.98469191758436846.8173221758444026.71285961758465789.753581758469660.50086121758470168.84960561758473722.39771131758789360.21657351758790715.03019021758803464.58468131758988044.04686881758991604.67435341759149102.85564831759492772.7183581759678936.99280551759680244.41957191759682618.7215971759997215.5191141760065958.82141760108993.57618381760110235.74441121760113550.87181661760177011.020731760181782.93854881760187005.60134651760192106.0860061760197207.4219841760199258.14967731760201985.65009261760203562.60572621760208440.80056051760260714.59390331760269934.64895941760285343.12197661760302129.65267131760328991.23364641760347755.98690061760350649.9220261760358687.67830591760362798.8370321760370432.53595111760424926.0255061760743184.63201121760744311.27082821760786622.23636051760788165.03988481760793302.1477371760793581.00444651760860182.22760991760863110.1014251760869362.4851031760869631.20522211760938861.72963521760972576.6875791761060407.88111571761060627.86563541761144889.48445651761148094.4665371761149201.68041321761219314.77552221761222483.27736571761295138.05956271761300300.05976561761311514.2513831761383799.72652271761391837.57163881761470800.4115141761501864.5615621761505443.42185241761568627.8543231761574494.27752451761580013.00882581761732663.23955371761733540.29735681761734029.47098021761736371.18000411761739191.4154661761739705.32874251761753667.99567171761756863.44928861761784016.66543271761815295.3384011761818717.73632571761828134.65532541761903405.21529581761907058.3059471761907853.07356211761916217.91197681761918750.98722891761919810.46501971761924888.20557641761931309.01599481761932455.5341991761943258.13832351761943965.9173671761998689.14334371762002422.82314631762003826.12135481762004604.3158771762010514.22436361762011210.89124921762016597.03093961762018766.23459271762020096.98681351762101868.87471441762105814.20747041762117386.51707461762172536.0202071762175528.28611851762182329.89773131762184577.847421762200953.02406841762253192.46915271762287934.7201151762422643.67606431762522533.03694341762528028.09290721762604673.09312731762616332.89323471762622168.34792021762622653.81842371762623239.4300881762685869.81218481762686662.3993391762687533.77702381762690043.77134161762690640.88656691762695418.03792051762709145.42883351763297104.580981763299241.28969961763302424.11725041763302843.86228871763303656.57493881763308095.12544541763314434.7122511763369939.32778621763382952.35389781763386880.2573951763389202.88072281763392117.76956531763546287.4585961763642087.21390341763659970.05781651763789967.2350981763795214.27324411763919897.74203251763924530.93485471763952917.04675961763987168.7900181764011135.03248621764218317.51825621764340352.97474771764360919.5237561764363105.4042141764526965.08457641765187128.96606761765355457.20101881765360544.06178261765361150.35600881765365518.7660051765557551.37651371765634926.0382451765640618.16870021765643253.3146741765643519.69737031765644942.7686081765650850.12580161765723889.33895751765725272.58981011765801621.52776551765879692.79019981765881108.2923851765890266.88562971765904510.36874341766061002.58671021766125878.0924161766175231.09851151766925374.73368381766996893.3731451767005790.16068861767008228.98308441767008524.3519591767008722.277691767009786.6732971767010541.95609551767013276.2328151767014306.68311551767015117.66693161767016373.33748561767086094.86997441767091943.21654251767092201.60667631767092814.322511767093453.33107881767270242.21536641767408827.13386231767450501.75768571767523607.15288781767524436.25480221767526671.70246891767540425.50893971767603172.05479241767608491.66707541767609798.80080491767780009.40121251767781869.36996481767783204.39632751767790049.159871767794832.20550161767797154.26203081767804637.35404421767805344.88099361767806485.79580351767862570.84585951767875104.49013021767876387.1385631767878636.14207961767880873.36738281767886064.7900161767887927.80501461767888628.77220651767894802.7501641767896425.17220471767954580.81757711767965181.28974031767970332.55244421767976705.94087121767978150.31396751767979970.38509061767982341.54357241768045908.30165961768048075.19306331768053087.31861191768053335.17539641768053645.28298431768057005.33032661768066054.97335241768079709.17248341768086210.00448131768134738.7489611768294958.7072611768308509.28162381768315525.73615461768317971.54583171768324985.50381061768384450.31180241768384903.74312451768388680.90803861768392012.94858881768393585.3805781768393995.64151621768397007.99611141768406785.83768421768407489.64632871768409265.181261768551967.76439951768562217.99268051768610315.5459591768648558.153921768750832.0425951768752477.22225881768754282.39400241768796055.877771769188973.98886591769356219.91804651769431235.54304531769520922.91533951769599853.44837931769601389.59619861769602998.44604521769608654.73905181769610587.53120471769613698.73730281769726072.5167361769754197.50043941769755012.88609891769788320.73522931769858771.11245351769880002.6400221769942094.34304521769950759.62865611770017332.54535651770029686.73525791770030911.36921741770035196.27489521770078295.91910531770155819.04716871770156062.72328571770198607.2284711770216427.27850631770217725.82147841770285886.35344841770290884.90398961770293022.25364641770293820.08989361770294246.49858431770296115.1938441770299476.89053541770304820.12695341770352845.59949111770360288.23392491770367647.6183741770375651.93329671770377722.19474721770388368.43299151770448360.88149361770474728.24455641770481662.81833741770482589.88003921770488483.83722141770547899.68135141770552992.3148081770630929.81703331770633593.05083631770639855.45341871770641556.83762381770666283.9656191770678866.937431770713538.44122551770808102.5597981770808949.6446791770809499.2195741770810416.91006471770899285.98089671771076383.70956751771153651.76371071771164919.83956381771165092.99137471771174054.22143321771175340.04150221771177045.09119531771185402.94351391771244500.35640861771600069.33150391771684144.1958011771757051.82674771771764404.84740111771780335.22727061771837797.45328641771839342.36841251771972863.80090481772004107.47609931772039629.94084841772097117.20003531772109451.20020151772125675.95705031772125857.190021772183872.96083351772280443.39041772295620.44625071772297315.33010551772298006.16521671772298862.35013271772328483.23607921772383354.17270871772383859.67349171772453976.5166041772713474.08007761772764991.76435041772787200.42355971772810020.21219421772905521.24598431772967859.26760581772984277.1005431772986433.85609721773059860.61029891773145094.80025391773145911.42583251773209770.56137851773327542.94483571773342123.46900181773389597.40498381773414356.9681911773416039.479741773416217.71348381773419126.79226261773433373.38669231773436829.7128131773496559.35769411773508591.08885051773526120.85893461773531469.85906171773532861.86214071773533352.6592681773664068.5733641773923117.08077051774116655.5106381774122638.22514531774123641.88898591774125088.17211991774165485.80263611774173634.33903151774178999.34086061774183816.01904231774191744.71987271774268550.01723621774527788.46656441774873687.7349881774875923.54350611774876751.77354171774880838.67538051774881356.113411775230959.73582771775232675.9200561775235024.41129371775242021.88784241775312892.665391775318498.7480911775319347.16049271775322263.85051471775381212.6245531775402348.91712781775462820.18094781775464128.60385511775478288.9307221775492883.68803621775494355.61733411775551100.70342451775737468.23703461776083199.4409181776342248.38125251776343741.35873751776344656.84962031776344823.2718941776494663.58264471776500579.0558131776513568.45815661776515798.23732261776521467.21749231776525755.44738361776530770.69265341776586552.67150241776602163.0317081776602999.49911571776688068.9822271776732694.04593831777121040.04677321777124071.1219561777126020.42327551777134818.39440461777287314.63329941777293598.26220231777363083.66518071777893423.46401861777895088.46678451777895860.43515851777897093.3858841777906171.800171777971134.0487721778058288.40560981778240440.64545181778329365.76004721778330451.60289481778332821.17423941778334531.54666111778342595.05410931778399875.18376181778419689.60360841778424127.0708861778487982.02455741778490235.47887951778512722.16216681778513868.5482841778514150.02312251778579208.82636931778579750.70454621778592818.33435651778593837.24621341778690465.584721778695987.13411741778697526.6658811778761332.9720331778822349.00370981778843702.19216871778918473.19561221778921342.1787031778931726.05583721778934249.29012421778934437.7146981778937818.14839361778942880.65417721778943688.6406221778945937.1907251778948525.945271779010660.48089271779012402.8849981779013545.70784571779014082.44581171779018379.58577371779019598.37050581779031500.34276341779032724.80927351779036530.4997151779039779.62068941779093071.12585621779097835.65313321779098505.47838691779100146.64374641779105919.20712781779107140.5768891779176813.17461751779177591.00395081779179103.9485821779179883.46228861779185903.12827781779188010.30328131779188332.78576521779199711.64825681779291274.87059261779375116.30314351779711775.9329841779718782.88222651779719462.58929511779720087.20665341779729556.75550171779729838.27185651779809157.15284131779811618.10328821779819147.38901331779821301.30405041779866487.12891531779872294.22598481779971079.62741731780155829.02630381780156437.50365951780156947.1906751780160264.74311021780167393.25985981780170098.30806231780172747.63186741780387294.64188241780398187.88314941780404797.27766011780815769.00067281780829125.25964361780848886.74698451780921520.99491741781093734.38310651781096055.84976481781098042.90676521781099588.2129331781102762.92132381781180914.85429571781261527.5583841781262166.32642581781262455.47228241781266268.5841415 bn9ip7f4ufopvtnn9fz0t41ukjbfttd Template:PAGENAMEBASE 10 86972 746261 390715 2024-10-28T10:45:21Z en>Dinoguy1000 0 fix "|=foo" bug 746261 wikitext text/x-wiki {{safesubst:<noinclude/>#invoke:String|replace|{{{1|{{safesubst:<noinclude/>PAGENAME}}}}}|%s+%b()$||1|false}}<noinclude> {{documentation}} </noinclude> hfmr5rmcuhdncvzny8x6n6ob8hddcpq 746262 746261 2026-06-12T21:56:13Z Robertsky 51025 1 revision imported from [[:en:Template:PAGENAMEBASE]] 746261 wikitext text/x-wiki {{safesubst:<noinclude/>#invoke:String|replace|{{{1|{{safesubst:<noinclude/>PAGENAME}}}}}|%s+%b()$||1|false}}<noinclude> {{documentation}} </noinclude> hfmr5rmcuhdncvzny8x6n6ob8hddcpq Template:Comma separated entries 10 90122 746263 492167 2025-10-30T02:02:07Z en>Zackmann08 0 Adding dataPlural flag so that [[Module:Detect singular]] will function properly. Should have no VISIBLE AFFECT 746263 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:Separated entries|comma|dataPlural=1}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> ichgwgsg1y2isqi98ldbbvhrytwpdgp 746264 746263 2026-06-12T21:56:13Z Robertsky 51025 1 revision imported from [[:en:Template:Comma_separated_entries]] 746263 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:Separated entries|comma|dataPlural=1}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> ichgwgsg1y2isqi98ldbbvhrytwpdgp Template:Parameter names example 10 93759 746319 463466 2025-04-23T18:00:14Z en>MusikBot II 0 Changed protection settings for "[[Template:Parameter names example]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 2501 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require extended confirmed access] (indefinite) [Move=Require extended confirmed access] (indefinite)) 746319 wikitext text/x-wiki <includeonly>{{#invoke:Parameter names example|main}}</includeonly><noinclude> {{documentation}}<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here --> </noinclude> 4dc1wzmglz31ir81jrn4ik3iy1v4jpt 746320 746319 2026-06-12T21:56:19Z Robertsky 51025 1 revision imported from [[:en:Template:Parameter_names_example]] 746319 wikitext text/x-wiki <includeonly>{{#invoke:Parameter names example|main}}</includeonly><noinclude> {{documentation}}<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here --> </noinclude> 4dc1wzmglz31ir81jrn4ik3iy1v4jpt Module:Parameter names example 828 93763 746317 463476 2025-04-23T18:00:35Z en>MusikBot II 0 Changed protection settings for "[[Module:Parameter names example]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 2500 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require extended confirmed access] (indefinite) [Move=Require extended confirmed access] (indefinite)) 746317 Scribunto text/plain -- This module implements {{parameter names example}}. local p = {} local function makeParam(s) local lb = '&#123;' local rb = '&#125;' return lb:rep(3) .. s .. rb:rep(3) end local function italicize(s) return "''" .. s .. "''" end local function plain(s) return s end function p._main(args, frame) -- Find how we want to format the arguments to the template. local formatFunc if args._display == 'italics' or args._display == 'italic' then formatFunc = italicize elseif args._display == 'plain' then formatFunc = plain else formatFunc = makeParam end -- Build the table of template arguments. local targs = {} for k, v in pairs(args) do if type(k) == 'number' then targs[v] = formatFunc(v) elseif not k:find('^_') then targs[k] = v end end --targs['nocat'] = 'yes'; --targs['categories'] = 'no'; --targs['demo'] = 'yes'; -- Find the template name. local template if args._template then template = args._template else local currentTitle = mw.title.getCurrentTitle() if currentTitle.prefixedText:find('/sandbox$') then template = currentTitle.prefixedText else template = currentTitle.basePageTitle.prefixedText end end -- Call the template with the arguments. frame = frame or mw.getCurrentFrame() local success, result = pcall( frame.expandTemplate, frame, {title = template, args = targs} ) if success then return result else return '' end end function p.main(frame) local args = require('Module:Arguments').getArgs(frame, { wrappers = 'Template:Parameter names example' }) return p._main(args, frame) end return p to0eolw8xx8fiql0ynvd8cfvp3ukqw4 746318 746317 2026-06-12T21:56:19Z Robertsky 51025 1 revision imported from [[:en:Module:Parameter_names_example]] 746317 Scribunto text/plain -- This module implements {{parameter names example}}. local p = {} local function makeParam(s) local lb = '&#123;' local rb = '&#125;' return lb:rep(3) .. s .. rb:rep(3) end local function italicize(s) return "''" .. s .. "''" end local function plain(s) return s end function p._main(args, frame) -- Find how we want to format the arguments to the template. local formatFunc if args._display == 'italics' or args._display == 'italic' then formatFunc = italicize elseif args._display == 'plain' then formatFunc = plain else formatFunc = makeParam end -- Build the table of template arguments. local targs = {} for k, v in pairs(args) do if type(k) == 'number' then targs[v] = formatFunc(v) elseif not k:find('^_') then targs[k] = v end end --targs['nocat'] = 'yes'; --targs['categories'] = 'no'; --targs['demo'] = 'yes'; -- Find the template name. local template if args._template then template = args._template else local currentTitle = mw.title.getCurrentTitle() if currentTitle.prefixedText:find('/sandbox$') then template = currentTitle.prefixedText else template = currentTitle.basePageTitle.prefixedText end end -- Call the template with the arguments. frame = frame or mw.getCurrentFrame() local success, result = pcall( frame.expandTemplate, frame, {title = template, args = targs} ) if success then return result else return '' end end function p.main(frame) local args = require('Module:Arguments').getArgs(frame, { wrappers = 'Template:Parameter names example' }) return p._main(args, frame) end return p to0eolw8xx8fiql0ynvd8cfvp3ukqw4 Module:Uses Wikidata 828 93796 746195 298522 2022-06-08T17:12:17Z en>Legoktm 0 fix capitalization of Wikidata and Wikipedia in query output 746195 Scribunto text/plain local p = {} function p.usesProperty(frame) local args = frame.getParent(frame).args or nil if mw.text.trim(args[1] or '') == '' then args = frame.args end local result = '<ul>' local ii = 1 while true do local p_num = mw.text.trim(args[ii] or '') if p_num ~= '' then local label = mw.wikibase.getLabel(p_num) or "NO LABEL" result = result .. "<li>[[File:Disc Plain blue dark.svg|middle|4px|link=|alt=]] <b><i>[[d:Property talk:" .. p_num .. "|" .. label .. " (" .. string.upper(p_num) .. ")]]</i></b> (see <span class='plainlinks'>[https://query.wikidata.org/embed.html#SELECT%20%3FWikidata_item_%20%3FWikidata_item_Label%20%3Fvalue%20%3FvalueLabel%20%3FEnglish_Wikipedia_article%20%23Show%20data%20in%20this%20order%0A%7B%0A%09%3FWikidata_item_%20wdt%3A" .. p_num .. "%20%3Fvalue%20.%20%23Collecting%20all%20items%20which%20have%20" .. p_num .. "%20data%2C%20from%20whole%20Wikidata%20item%20pages%0A%09OPTIONAL%20%7B%3FEnglish_Wikipedia_article%20schema%3Aabout%20%3FWikidata_item_%3B%20schema%3AisPartOf%20%3Chttps%3A%2F%2Fen.wikipedia.org%2F%3E%20.%7D%20%23If%20collected%20item%20has%20link%20to%20English%20Wikipedia%2C%20show%20that%0A%09SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%22%20%20%7D%20%23Show%20label%20in%20this%20language.%20%22en%22%20is%20English.%20%20%20%0A%7D%0ALIMIT%201000 uses]</span>)</li>" ii = ii + 1 else break end end result = result.."</ul>" return result end function p.tuProperty(frame) local parent = frame.getParent(frame) local result = '<ul>' local ii = 1 while true do local p_num = mw.text.trim(parent.args[ii] or '') if p_num ~= '' then local label = mw.wikibase.getLabel(p_num) or "NO LABEL" result = result .. "<li><span style='font-size:90%;line-height:1;'>●</span>&nbsp;&nbsp;<b>[[d:Property:" .. p_num .. "|" .. label .. "]]</b> <span style='font-size:90%;'>([[d:Property talk:" .. string.upper(p_num) .. "|" .. p_num .. "]])</span></li>" ii = ii + 1 else break end end result = result.."</ul>" return result end return p gad8tmz2g178xujb54f023qxaos8yw9 746196 746195 2026-06-12T21:51:58Z Robertsky 51025 1 revision imported from [[:en:Module:Uses_Wikidata]]: for workshop activity 746195 Scribunto text/plain local p = {} function p.usesProperty(frame) local args = frame.getParent(frame).args or nil if mw.text.trim(args[1] or '') == '' then args = frame.args end local result = '<ul>' local ii = 1 while true do local p_num = mw.text.trim(args[ii] or '') if p_num ~= '' then local label = mw.wikibase.getLabel(p_num) or "NO LABEL" result = result .. "<li>[[File:Disc Plain blue dark.svg|middle|4px|link=|alt=]] <b><i>[[d:Property talk:" .. p_num .. "|" .. label .. " (" .. string.upper(p_num) .. ")]]</i></b> (see <span class='plainlinks'>[https://query.wikidata.org/embed.html#SELECT%20%3FWikidata_item_%20%3FWikidata_item_Label%20%3Fvalue%20%3FvalueLabel%20%3FEnglish_Wikipedia_article%20%23Show%20data%20in%20this%20order%0A%7B%0A%09%3FWikidata_item_%20wdt%3A" .. p_num .. "%20%3Fvalue%20.%20%23Collecting%20all%20items%20which%20have%20" .. p_num .. "%20data%2C%20from%20whole%20Wikidata%20item%20pages%0A%09OPTIONAL%20%7B%3FEnglish_Wikipedia_article%20schema%3Aabout%20%3FWikidata_item_%3B%20schema%3AisPartOf%20%3Chttps%3A%2F%2Fen.wikipedia.org%2F%3E%20.%7D%20%23If%20collected%20item%20has%20link%20to%20English%20Wikipedia%2C%20show%20that%0A%09SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%22%20%20%7D%20%23Show%20label%20in%20this%20language.%20%22en%22%20is%20English.%20%20%20%0A%7D%0ALIMIT%201000 uses]</span>)</li>" ii = ii + 1 else break end end result = result.."</ul>" return result end function p.tuProperty(frame) local parent = frame.getParent(frame) local result = '<ul>' local ii = 1 while true do local p_num = mw.text.trim(parent.args[ii] or '') if p_num ~= '' then local label = mw.wikibase.getLabel(p_num) or "NO LABEL" result = result .. "<li><span style='font-size:90%;line-height:1;'>●</span>&nbsp;&nbsp;<b>[[d:Property:" .. p_num .. "|" .. label .. "]]</b> <span style='font-size:90%;'>([[d:Property talk:" .. string.upper(p_num) .. "|" .. p_num .. "]])</span></li>" ii = ii + 1 else break end end result = result.."</ul>" return result end return p gad8tmz2g178xujb54f023qxaos8yw9 Test redirect 0 101479 746130 470277 2026-06-12T17:52:29Z Trialpears 43074 Listed for discussion at [[:Wikipedia:Redirects for discussion/Log/2026 June 12#Test redirect]]. 746130 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:RfD|||month = June |day = 12 |year = 2026 |time = 17:52 |timestamp = 20260612175229 <!-- The above content is generated by {{subst:rfd}}. --> <!-- End of RFD message. Don't edit anything above here, but feel free to edit below here. -->|content= #REDIRECT [[Foo#Bar]] {{Redirect category shell| {{R from acronym}} {{R to section}} {{R from something else}} }} <!-- Don't add anything after this line unless you're drafting a disambiguation page or article to replace the redirect. --> }} mtigvb7668nr1x6t0mee43opba49isj 746134 746130 2026-06-12T17:54:03Z Trialpears 43074 [[Wikipedia:Redirects for discussion/Log/2026 June 12#Test redirect]] closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746134 wikitext text/x-wiki #REDIRECT [[Foo#Bar]] {{Redirect category shell| {{R from acronym}} {{R to section}} {{R from something else}} }} ap67bqps4pofrq0jwnf1438aaywcm0c Lemonade 0 101484 746071 666942 2026-06-12T12:17:30Z CommonsDelinker 629 Replacing Lemonade_(Lime_version).jpg with [[File:Limeade.jpg]] (by [[:c:User:CommonsDelinker|CommonsDelinker]] because: [[:c:COM:FR|File renamed]]: [[:c:COM:FR#FR2|Criterion 2]] (meaningless or ambiguous name)). 746071 wikitext text/x-wiki [[File:Limeade.jpg|thumb|A glass of lemonade.]] [[File:Limonada_-_Paloma.jpg|thumb|Popular lemonade served in the celebrations of summer of the Dove.]] The '''lemonade''' is a [[drink]] of elaboration usually homemade, with a base of [[lemon]], [[water]] and [[sugar]], which may or may not have contained [[Alcoholic drink|alcohol]]. In some languages, like [[German language|German]], is also called the lemonade to any refreshing drink, non-alcoholic, such as [[Soft drink|soda]]. == Composition == A prescription of [[United States|the united States]] and [[Canada]] (two of the largest consumers of this drink) say that they should mix the same amount in volume of [[lemon]] that of [[sugar]] and add [[water]] four times the volume of lemon or sugar release... [[Category:Pages with unreviewed translations]] lm8qzmx6i27gg9qtnu144aiu14c211h Template:Category link 10 102267 746283 609496 2026-03-28T17:08:14Z en>HouseBlaster 0 handle different namespace prefixes correctly 746283 wikitext text/x-wiki {{Category link/core|1={{#ifeq:{{NAMESPACE:{{{1}}} }}|Category|{{PAGENAME:{{{1}}} }}|{{{1}}} }}|2={{{2|Category:{{#ifeq:{{NAMESPACE:{{{1}}} }}|Category|{{PAGENAME:{{{1}}} }}|{{{1}}} }}}}}|count={{{count|no}}}|page_count={{PAGESINCAT:{{PAGENAME:{{{1}}}}}|{{UC:{{{count_type|ALL}}}}}|R}}|backlog={{{backlog|{{formatnum:{{NUMBEROFPAGES}}|R}}}}}}}<noinclude> {{Documentation}} </noinclude> shagm99jmb6xamiwd9dlpct8cch8cvp 746284 746283 2026-06-12T21:56:15Z Robertsky 51025 1 revision imported from [[:en:Template:Category_link]] 746283 wikitext text/x-wiki {{Category link/core|1={{#ifeq:{{NAMESPACE:{{{1}}} }}|Category|{{PAGENAME:{{{1}}} }}|{{{1}}} }}|2={{{2|Category:{{#ifeq:{{NAMESPACE:{{{1}}} }}|Category|{{PAGENAME:{{{1}}} }}|{{{1}}} }}}}}|count={{{count|no}}}|page_count={{PAGESINCAT:{{PAGENAME:{{{1}}}}}|{{UC:{{{count_type|ALL}}}}}|R}}|backlog={{{backlog|{{formatnum:{{NUMBEROFPAGES}}|R}}}}}}}<noinclude> {{Documentation}} </noinclude> shagm99jmb6xamiwd9dlpct8cch8cvp Module:Lang/data 828 107520 746159 733118 2026-05-03T21:40:57Z en>Trappist the monk 0 +crb; 746159 Scribunto text/plain local lang_obj = mw.language.getContentLanguage(); local this_wiki_lang_tag = lang_obj.code; -- get this wiki's language tag --[[--------------------------< L A N G _ N A M E _ T A B L E >------------------------------------------------ primary table of tables that decode: lang -> language tags and names script -> ISO 15924 script tags region -> ISO 3166 region tags variant -> IANA registered variant tags suppressed -> map of scripts tags and their associated language tags all of these data come from separate modules that are derived from the IANA language-subtag-registry file key_to_lower() avoids the metatable trap and sets all keys in the subtables to lowercase. Many language codes have multiple associated names; Module:lang is only concerned with the first name so key_to_lower() only fetches the first name. ]] local function key_to_lower (module, src_type) local out = {}; local source_t = (('var_sup' == src_type) and require (module)) or mw.loadData (module); -- fetch data from this module; require() avoids metatable trap for variant data if 'var_sup' == src_type then for k, v in pairs (source_t) do out[k:lower()] = v; -- for variant and suppressed everything is needed end elseif 'lang' == src_type and source_t.active then -- for ~/iana_languages (active) for k, v in pairs (source_t.active) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end elseif 'lang_dep' == src_type and source_t.deprecated then -- for ~/iana_languages (deprecated) for k, v in pairs (source_t.deprecated) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end else -- here for all other sources for k, v in pairs (source_t) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end end return out; end local lang_name_table_t = { lang = key_to_lower ('Module:Lang/data/iana languages', 'lang'), lang_dep = key_to_lower ('Module:Lang/data/iana languages', 'lang_dep'), script = key_to_lower ('Module:Lang/data/iana scripts'), -- script keys are capitalized; set to lower region = key_to_lower ('Module:Lang/data/iana regions'), -- region keys are uppercase; set to lower variant = key_to_lower ('Module:Lang/data/iana variants', 'var_sup'), suppressed = key_to_lower ('Module:Lang/data/iana suppressed scripts', 'var_sup'), -- script keys are capitalized; set to lower } --[[--------------------------< I 1 8 N M E D I A W I K I O V E R R I D E >-------------------------------- For internationalization; not used at en.wiki The language names taken from the IANA language-subtag-registry file are given in English. That may not be ideal. Translating ~8,000 language names is also not ideal. MediaWiki maintains (much) shorter lists of language names in most languages for which there is a Wikipedia edition. When desired, Module:Lang can use the MediaWiki language list for the local language. Caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all. When incomplete, MediaWiki's list will 'fall back' to another language (typically English). When that happens add an appropriate entry to the override table below. Caveat lector: the list of MediaWiki language names for your language may not be correct. At en.wiki, the MediaWiki language names do not agree with the IANA language names for these ISO 639-1 tags. Often it is simply spelling differences: bh: IANA: Bihari languages MW: Bhojpuri – the ISO 639-3 tag for Bhojpuri is bho bn: IANA: Bengali MW: Bangla – Bengali is the exonym, Bangla is the endonym dv: IANA: Dhivehi MW: Divehi el: IANA: Modern Greek MW: Greek ht: IANA: Haitian MW: Haitian Creole ky: IANA: Kirghiz MW: Kyrgyz li: IANA: Limburgan MW: Limburgish or: IANA: Oriya MW: Odia os: IANA: Ossetian MW: Ossetic "pa: IANA: Panjabi MW: Punjabi "ps: IANA: Pushto MW: Pashto "to: IANA: Tonga MW: Tongan "ug: IANA: Uighur MW: Uyghur use the override table to override language names that are incorrect for your project To see the list of names that MediaWiki has for your language, enter this in the Debug console: =mw.dumpObject (mw.language.fetchLanguageNames ('<tag>', 'all')) (replacing <tag> with the language tag for your language) Use of the MediaWiki language names lists is enabled when media_wiki_override_enable is set to boolean true. ]] local media_wiki_override_enable = false; -- set to true to override IANA names with MediaWiki names; always false at en.wiki -- caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all if true == media_wiki_override_enable then local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_lang_tag, 'all'); -- get a table of language tag/name pairs known to MediaWiki for tag, name in pairs (mw_languages_by_tag_t) do -- loop through each tag/name pair in the MediaWiki list if lang_name_table_t.lang[tag] then -- if the tag is in the main list lang_name_table_t.lang[tag] = name; -- overwrite existing name with the name from MediaWiki end end end --[[--------------------------< O V E R R I D E >-------------------------------------------------------------- Language codes and names in this table override the BCP47 names in lang_name_table. indexes in this table shall always be lower case ]] local override = { ------------------------------< I S O _ 6 3 9 - 1 >------------------------------------------------------------ ["ab"] = "Abkhaz", -- to match en.wiki article name ["ca-valencia"] = "Valencian", ["cu"] = "Church Slavonic", -- 2nd IANA name; ["de-at"] = "Austrian German", -- these code-region and code-variant tags to match en.wiki article names ["de-ch"] = "Swiss Standard German", ["en-au"] = "Australian English", ["en-ca"] = "Canadian English", ["en-emodeng"] = "Early Modern English", ["en-gb"] = "British English", ["en-ie"] = "Irish English", ["en-in"] = "Indian English", ["en-nz"] = "New Zealand English", ["en-us"] = "American English", ["en-za"] = "South African English", ["fr-ca"] = "Canadian French", ["fr-gallo"] = "Gallo", ["fy"] = "West Frisian", -- Western Frisian ["mo"] = "Moldovan", -- Moldavian (deprecated code); to match en.wiki article title ["nl-be"] = "Flemish", -- match MediaWiki ["oc-gascon"] = "Gascon", ["oc-provenc"] = "Provençal", ["ps"] = "Pashto", -- Pushto ["pt-br"] = "Brazilian Portuguese", -- match MediaWiki ["ro-md"] = "Moldovan", -- 'not deprecated' form ["ro-cyrl-md"] = "Moldovan", -- 'not deprecated' form ["tw-asante"] = "Asante Twi", ["ug"] = "Uyghur", -- 2nd IANA name; to match en.wiki article name -- these ISO 639-1 language-name overrides imported from Module:Language/data/wp_languages (since deleted) --<begin do-not-edit except to comment out>-- ["av"] = "Avar", -- Avaric ["bo"] = "Standard Tibetan", -- Tibetan ["el"] = "Greek", -- Modern Greek -- ["en-SA"] = "South African English", -- English; no; SA is not South Africa it Saudi Arabia; ZA is South Africa ["ff"] = "Fula", -- Fulah ["ht"] = "Haitian Creole", -- Haitian ["hz"] = "Otjiherero", -- Herero ["ii"] = "Yi", -- Sichuan Yi ["ki"] = "Gikuyu", -- Kikuyu ["kl"] = "Greenlandic", -- Kalaallisut ["ky"] = "Kyrgyz", -- Kirghiz ["lg"] = "Luganda", -- Ganda ["li"] = "Limburgish", -- Limburgan ["mi"] = "Māori", -- Maori ["na"] = "Nauruan", -- Nauru ["nb"] = "Bokmål", -- Norwegian Bokmål ["nd"] = "Northern Ndebele", -- North Ndebele ["nn"] = "Nynorsk", -- Norwegian Nynorsk ["nr"] = "Southern Ndebele", -- South Ndebele ["ny"] = "Chichewa", -- Nyanja ["oj"] = "Ojibwe", -- Ojibwa ["or"] = "Odia", -- Oriya ["pa"] = "Punjabi", -- Panjabi ["rn"] = "Kirundi", -- Rundi ["sl"] = "Slovene", -- Slovenian ["ss"] = "Swazi", -- Swati ["st"] = "Sotho", -- Southern Sotho ["to"] = "Tongan", -- Tonga --<end do-not-edit except to comment out>-- ------------------------------< I S O _ 6 3 9 - 2, - 3, - 5 >---------------------------------------------- ["alv"] = "Atlantic–Congo languages", -- to match en.wiki article title (endash) ["arc"] = "Imperial Aramaic (700-300 BCE)", -- Official Aramaic (700-300 BCE), Imperial Aramaic (700-300 BCE); to match en.wiki article title uses ISO639-2 'preferred' name ["art"] = "constructed", -- to match en.wiki article; lowercase for category name ["arx"] = "Aruá (Rondonia State)", -- Aruá (Rodonia State); to match en.wiki article ["ast-es"] = "Leonese", -- ast in IANA is Asturian; Leonese is a dialect ["bea"] = "Dane-zaa", -- Beaver; to match en.wiki article title ["bha"] = "Bhariati", -- Bharia; to match en.wiki article title ["bhd"] = "Bhadarwahi", -- Bhadrawahi; to match en.wiki article title ["bla"] = "Blackfoot", -- Siksika; to match en.wiki article title ["blc"] = "Nuxalk", -- Bella Coola; to match en.wiki article title ["bua"] = "Buryat", -- Buriat; this is a macro language; these four use wp preferred transliteration; ["bxm"] = "Mongolian Buryat", -- Mongolia Buriat; these three all redirect to Buryat ["bxr"] = "Russian Buryat", -- Russia Buriat; ["bxu"] = "Chinese Buryat", -- China Buriat; ["byr"] = "Yipma", -- Baruya, Yipma ["clm"] = "Klallam", -- Clallam; to match en.wiki article title ["crb"] = "Kalinago", -- Island Carib; to match en.wiki article ["egy"] = "Ancient Egyptian", -- Egyptian (Ancient); distinguish from contemporary arz: Egyptian Arabic ["ems"] = "Alutiiq", -- Pacific Gulf Yupik; to match en.wiki article title ["esx"] = "Eskimo–Aleut languages", -- to match en.wiki article title (endash) ["frr"] = "North Frisian", -- Northern Frisian ["frs"] = "East Frisian Low Saxon", -- Eastern Frisian ["gsw-fr"] = "Alsatian", -- match MediaWiki ["haa"] = "Hän", -- Han; to match en.wiki article title ["hei"] = "Heiltsuk–Oowekyala", -- Heiltsuk; to match en.wiki article title ["hmx"] = "Hmong–Mien languages", -- to match en.wiki article title (endash) ["ilo"] = "Ilocano", -- Iloko; to match en.wiki article title ["jam"] = "Jamaican Patois", -- Jamaican Creole English ["lij-mc"] = "Monégasque", -- Ligurian as spoken in Monaco; this one for proper tool tip; also in <article_name> table ["luo"] = "Dholuo", -- IANA (primary) /ISO 639-3: Luo (Kenya and Tanzania); IANA (secondary): Dholuo ["mhr"] = "Meadow Mari", -- Eastern Mari ["mid"] = "Modern Mandaic", -- Mandaic ['mis'] = "uncoded", -- Uncoded languages; capitalization; special scope, not collective scope; ["mkh"] = "Mon–Khmer languages", -- to match en.wiki article title (endash) ["mla"] = "Tamambo", -- Malo ['mte'] = "Mono-Alu", -- Mono (Solomon Islands) ['mul'] = "multiple", -- Multiple languages; capitalization; special scope, not collective scope; ["nan-tw"] = "Taiwanese Hokkien", -- make room for IANA / 639-3 nan Min Nan Chinese; match en.wiki article title ["new"] = "Newar", -- Newari, Nepal Bhasa; to match en,wiki article title ["ngf"] = "Trans–New Guinea languages", -- to match en.wiki article title (endash) ["nic"] = "Niger–Congo languages", -- Niger-Kordofanian languages; to match en,wiki article title ["nrf"] = "Norman", -- not quite a collective - IANA name: Jèrriais + Guernésiais; categorizes to Norman-language text ["nrf-gg"] = "Guernésiais", -- match MediaWiki ["nrf-je"] = "Jèrriais", -- match MediaWiki ["nzi"] = "Nzema", -- Nzima; to match en.wiki article title ["oma"] = "Omaha–Ponca", -- to match en.wiki article title (endash) ["orv"] = "Old East Slavic", -- Old Russian ["pfl"] = "Palatine German", -- Pfaelzisch; to match en.wiki article ["pie"] = "Piro Pueblo", -- Piro; to match en.wiki article ["pms"] = "Piedmontese", -- Piemontese; to match en.wiki article title ["pnb"] = "Punjabi (Western)", -- Western Panjabi; dab added to override import from ~/wp languages and distinguish pnb from pa in reverse look up tag_from_name() ['qwm'] = "Cuman", -- Kuman (Russia); to match en.wiki article name ["rop"] = "Australian Kriol", -- Kriol; en.wiki article is a dab; point to correct en.wiki article ["rsk"] = "Pannonian Rusyn", -- Ruthenian; en.wiki preferred name ["sco-ulster"] = "Ulster Scots", ["sdo"] = "Bukar–Sadong", -- Bukar-Sadung Bidayuh; to match en.wiki article title ["smp"] = "Samaritan Hebrew", -- to match en.wiki article title ["stq"] = "Saterland Frisian", -- Saterfriesisch ["tfn"] = "Denaʼina", -- to match en.wiki article title ["und"] = "undetermined", -- capitalization to match existing category ["wrg"] = "Warrongo", -- Warungu ["xal-ru"] = "Kalmyk", -- to match en.wiki article title ["xgf"] = "Tongva", -- ISO 639-3 is Gabrielino-Fernandeño ["yuf"] = "Havasupai–Hualapai", -- Havasupai-Walapai-Yavapai; to match en.wiki article title ["zkh"] = "Khorezmian Turkic", -- Khorezmian; to match en.wiki article title, avoiding the dab ["zkt"] = "Khitan", -- Kitan; to match en.wiki article title ["zxx"] = "no linguistic content", -- capitalization -- these ISO 639-2, -3 language-name overrides imported from Module:Language/data/wp_languages (since deleted) --<begin do-not-edit except to comment out>-- ["ace"] = "Acehnese", -- Achinese ["aec"] = "Sa'idi Arabic", -- Saidi Arabic ["akl"] = "Aklan", -- Aklanon ["alt"] = "Altay", -- Southern Altai ["apm"] = "Mescalero-Chiricahua", -- Mescalero-Chiricahua Apache ["bal"] = "Balochi", -- Baluchi -- ["bcl"] = "Central Bicolano", -- Central Bikol ["bin"] = "Edo", -- Bini ["bpy"] = "Bishnupriya Manipuri", -- Bishnupriya ["chg"] = "Chagatay", -- Chagatai ["ckb"] = "Sorani Kurdish", -- Central Kurdish ["cnu"] = "Shenwa", -- Chenoua ["coc"] = "Cocopah", -- Cocopa ["diq"] = "Zazaki", -- Dimli ["fit"] = "Meänkieli", -- Tornedalen Finnish ["fkv"] = "Kven", -- Kven Finnish ["frk"] = "Old Frankish", -- Frankish ["gez"] = "Ge'ez", -- Geez ["gju"] = "Gujari", -- Gujari ["gsw"] = "Alemannic German", -- Swiss German ["gul"] = "Gullah", -- Sea Island Creole English ["hak"] = "Hakka", -- Hakka Chinese ["hbo"] = "Biblical Hebrew", -- Ancient Hebrew ["hnd"] = "Hindko", -- Southern Hindko -- ["ikt"] = "Inuvialuk", -- Inuinnaqtun ["kaa"] = "Karakalpak", -- Kara-Kalpak ["khb"] = "Tai Lü", -- Lü ["kmr"] = "Kurmanji Kurdish", -- Northern Kurdish ["kpo"] = "Kposo", -- Ikposo ["krj"] = "Kinaray-a", -- Kinaray-A -- ["ktz"] = "Juǀ'hoan", -- Juǀʼhoan ["lez"] = "Lezgian", -- Lezghian ["liv"] = "Livonian", -- Liv ["lng"] = "Lombardic", -- Langobardic ["mia"] = "Miami-Illinois", -- Miami ["miq"] = "Miskito", -- Mískito ["mix"] = "Mixtec", -- Mixtepec Mixtec ["mni"] = "Meitei", -- Manipuri ["mrj"] = "Hill Mari", -- Western Mari ["mww"] = "White Hmong", -- Hmong Daw ["nds-nl"] = "Dutch Low Saxon", -- Low German -- ["new"] = "Nepal Bhasa", -- Newari ["nso"] = "Northern Sotho", -- Pedi -- ["nwc"] = "Classical Nepal Bhasa", -- Classical Newari, Classical Nepal Bhasa, Old Newari ["ood"] = "O'odham", -- Tohono O'odham ["otk"] = "Old Turkic", -- Old Turkish ["pal"] = "Middle Persian", -- Pahlavi ["pam"] = "Kapampangan", -- Pampanga ["phr"] = "Potwari", -- Pahari-Potwari ["pka"] = "Jain Prakrit", -- Ardhamāgadhī Prākrit -- ["pnb"] = "Punjabi", -- Western Panjabi ["psu"] = "Shauraseni", -- Sauraseni Prākrit ["rap"] = "Rapa Nui", -- Rapanui ["rar"] = "Cook Islands Māori", -- Rarotongan ["rmu"] = "Scandoromani", -- Tavringer Romani ["rom"] = "Romani", -- Romany ["rup"] = "Aromanian", -- Macedo-Romanian ["ryu"] = "Okinawan", -- Central Okinawan ["sdc"] = "Sassarese", -- Sassarese Sardinian ["sdn"] = "Gallurese", -- Gallurese Sardinian ["shp"] = "Shipibo", -- Shipibo-Conibo ["src"] = "Logudorese", -- Logudorese Sardinian ["sro"] = "Campidanese", -- Campidanese Sardinian ["tkl"] = "Tokelauan", -- Tokelau ["tvl"] = "Tuvaluan", -- Tuvalu ["tyv"] = "Tuvan", -- Tuvinian ["vls"] = "West Flemish", -- Vlaams ["wep"] = "Westphalian", -- Westphalien ["xal"] = "Oirat", -- Kalmyk ["xcl"] = "Old Armenian", -- Classical Armenian ["yua"] = "Yucatec Maya", -- Yucateco --<end do-not-edit except to comment out>-- ------------------------------< P R I V A T E _ U S E _ T A G S >---------------------------------------------- ["akk-x-latbabyl"] = "Late Babylonian Akkadian", ["akk-x-midassyr"] = "Middle Assyrian Akkadian", ["akk-x-midbabyl"] = "Middle Babylonian Akkadian", ["akk-x-neoassyr"] = "Neo-Assyrian Akkadian", ["akk-x-neobabyl"] = "Neo-Babylonian Akkadian", ["akk-x-old"] = "Old Akkadian", ["akk-x-oldassyr"] = "Old Assyrian Akkadian", ["akk-x-oldbabyl"] = "Old Babylonian Akkadian", ["alg-x-proto"] = "Proto-Algonquian", -- alg in IANA is Algonquian languages ["ar-x-classic"] = "Classical Arabic", ["ar-x-nabat"] = "Nabataean Arabic", ["ar-x-safaitic"] = "Safaitic", ["art-x-uropi"] = "Uropi", -- art in IANA is Artificial languages ["ast-x-west"] = "Western Asturian", ["ca-x-old"] = "Old Catalan", ["cel-x-combrit"] = "Common Brittonic", -- cel in IANA is Celtic languages ["cel-x-proto"] = "Proto-Celtic", ["ccs-x-proto"] = "Proto-Kartvelian", -- ccs in IANA is Kartvelian languages ["egy-x-demotic"] = "Demotic Egyptian", ["egy-x-late"] = "Late Egyptian", ["egy-x-middle"] = "Middle Egyptian", ["egy-x-old"] = "Old Egyptian", ["et-x-seto"] = "Seto", -- to replace {{Lang-est-sea}} ["fa-x-classic"] = "Classical Persian", ["fiu-x-proto"] = "Proto-Finno-Ugric", -- fiu in IANA is Finno-Ugric languages ["fr-x-frainc"] = "Franc-Comtois", -- to replace {{Lang-fra-frc}} ["fr-x-quebec"] = "Quebec French", ["gem-x-proto"] = "Proto-Germanic", -- gem in IANA is Germanic languages ["gmq-x-proto"] = "Proto-Norse", ["gmw-x-ecg"] = "East Central German", ["gmw-x-proto"] = "Proto-West Germanic", ["grc-x-aeolic"] = "Aeolic Greek", -- these grc-x-... codes are preferred alternates to the non-standard catchall code grc-gre ["grc-x-arcadcyp"] = "Arcadocypriot Greek", ["grc-x-attic"] = "Attic Greek", ["grc-x-biblical"] = "Biblical Greek", ["grc-x-byzant"] = "Byzantine Greek", ["grc-x-classic"] = "Classical Greek", ["grc-x-doric"] = "Doric Greek", ["grc-x-hellen"] = "Hellenistic Greek", ["grc-x-ionic"] = "Ionic Greek", ["grc-x-koine"] = "Koine Greek", ["grc-x-medieval"] = "Medieval Greek", ["grc-x-pamph"] = "Pamphylian Greek", ["grc-x-patris"] = "Patristic Greek", ["grk-x-proto"] = "Proto-Greek", -- grk in IANA is Greek languages ["iir-x-proto"] = "Proto-Indo-Iranian", -- iir in IANA is Indo-Iranian Languages ["inc-x-mitanni"] = "Mitanni-Aryan", -- inc in IANA is Indic languages ["inc-x-proto"] = "Proto-Indo-Aryan", ["ine-x-anatolia"] = "Anatolian languages", ["ine-x-proto"] = "Proto-Indo-European", ["ira-x-proto"] = "Proto-Iranian", -- ira in IANA is Iranian languages ["itc-x-proto"] = "Proto-Italic", -- itc in IANA is Italic languages ["ksh-x-colog"] = "Colognian", -- en.wiki article is Colognian; ksh (Kölsch) redirects there ["la-x-church"] = "Ecclesiastical Latin", ["la-x-classic"] = "Classical Latin", ["la-x-late"] = "Late Latin", ["la-x-medieval"] = "Medieval Latin", ["la-x-new"] = "New Latin", ["la-x-old"] = "Old Latin", ["la-x-ren"] = "Renaissance Latin", ["la-x-vulgar"] = "Vulgar Latin", ["lmo-x-berg"] = "Bergamasque", -- lmo in IANA is Lombard; Bergamasque is a dialect ["lmo-x-cremish"] = "Cremish", -- lmo in IANA is Lombard; Cremish is a dialect ["lmo-x-milanese"] = "Milanese", -- lmo in IANA is Lombard; Milanese is a dialect ["mis-x-ripuar"] = "Ripuarian", -- replaces improper use of ksh in wp_languages ["prg-x-old"] = "Old Prussian", ["roa-x-proto"] = "Proto-Romance", ["sem-x-ammonite"] = "Ammonite", ["sem-x-aramaic"] = "Aramaic", ["sem-x-canaan"] = "Canaanite languages", ["sem-x-dadanit"] = "Dadanitic", ["sem-x-dumaitic"] = "Dumaitic", ["sem-x-egurage"] = "Eastern Gurage", ["sem-x-hasaitic"] = "Hasaitic", ["sem-x-hatran"] = "Hatran Aramaic", ["sem-x-hismaic"] = "Hismaic", ["sem-x-nabat"] = "Nabataean Aramaic", ["sem-x-oldsoara"] = "Old South Arabian", ["sem-x-palmyren"] = "Palmyrene Aramaic", ["sem-x-proto"] = "Proto-Semitic", ["sem-x-taymanit"] = "Taymanitic", ["smi-x-proto"] = "Proto-Samic", -- smi in IANA is Samic languages ["sla-x-proto"] = "Proto-Slavic", -- sla in IANA is Slavic languages ["sq-x-proto"] = "Proto-Albanian", ["trk-x-oldanat"] = "Old Anatolian Turkish", -- to replace {{Lang-1ca}} ["urj-x-proto"] = "Proto-Uralic", -- urj in IANA is Uralic languages ["yuf-x-hav"] = "Havasupai", -- IANA name for these three is Havasupai-Walapai-Yavapai ["yuf-x-wal"] = "Walapai", ["yuf-x-yav"] = "Yavapai", ["xsa-x-himyarit"] = "Himyaritic", ["xsc-x-pontic"] = "Pontic Scythian", -- xsc in IANA is Scythian ["xsc-x-saka"] = "Saka", ["xsc-x-sarmat"] = "Sarmatian", ["zle-x-ruthenia"] = "Ruthenian", -- zle in IANA is East Slavic languages collective; moved to allow rsk for Pannonian Rusyn } --[[--------------------------< A R T I C L E _ L I N K >------------------------------------------------------ for those rare occasions when article titles don't fit with the normal '<language name> language', this table maps language code to article title. Use of this table should be avoided and the use of redirects preferred as that is the long-standing method of handling article names that don't fit with the normal pattern ]] local article_name = { ['aru'] = "Arawá language", -- Aruá (Amazonas State); to avoid Aruá dab page ['arx'] = "Aruá language (Rondônia)", -- Aruá (Rodonia State) overridden to Aruá (Rondonia State); to avoid Aruá dab page ['kue'] = "Kuman language (New Guinea)", -- Kuman (Papua New Guinea); to avoid Kuman dab page ["lij-mc"] = "Monégasque dialect", -- Ligurian as spoken in Monaco ['mbo'] = "Mbo language (Cameroon)", -- Mbo (Cameroon) ['mnh'] = "Mono language (Congo)", -- Mono (Democratic Republic of Congo); see Template_talk:Lang#Mono_languages ['mnr'] = "Mono language (California)", -- Mono (USA) ['mru'] = "Mono language (Cameroon)", -- Mono (Cameroon) ["snq"] = "Sangu language (Gabon)", -- Sangu (Gabon) ["toi"] = "Tonga language (Zambia and Zimbabwe)", -- Tonga (Zambia and Zimbabwe); to avoid Tonga language dab page ["vwa"] = "Awa language (China)", -- Awa (China); to avoid Awa dab page ["xlg"] = "Ligurian language (ancient)", -- see Template_talk:Lang#Ligurian_dab ["zmw"] = "Mbo language (Congo)", -- Mbo (Democratic Republic of Congo) } --[=[-------------------------< R T L _ S C R I P T S >-------------------------------------------------------- ISO 15924 scripts that are written right-to-left. Data in this table taken from [[ISO 15924#List of codes]] last update to this list: 2017-12-24 ]=] local rtl_scripts = { 'adlm', 'arab', 'aran', 'armi', 'avst', 'cprt', 'egyd', 'egyh', 'hatr', 'hebr', 'hung', 'inds', 'khar', 'lydi', 'mand', 'mani', 'mend', 'merc', 'mero', 'narb', 'nbat', 'nkoo', 'orkh', 'palm', 'phli', 'phlp', 'phlv', 'phnx', 'prti', 'rohg', 'samr', 'sarb', 'sogd', 'sogo', 'syrc', 'syre', 'syrj', 'syrn', 'thaa', 'wole', }; --[[--------------------------< T R A N S L I T _ T I T L E S >------------------------------------------------ This is a table of tables of transliteration standards and the language codes or language scripts that apply to those standards. This table is used to create the tool-tip text associated with the transliterated text displayed by some of the {{lang-??}} templates. These tables are more-or-less copied directly from {{special|PermaLink/680078354}}. The standard 'NO_STD' is a construct to allow for the cases when no |std= parameter value is provided. ]] local translit_title_table = { ['abkai'] = { -- Manchu romanization ['default'] = 'Abkai system of romanization', }, ['ahl'] = { ['default'] = 'Academy of the Hebrew Language transliteration', }, ['ala'] = { ['default'] = 'American Library Association – Library of Congress transliteration', }, ['ala-lc'] = { ['default'] = 'American Library Association – Library of Congress transliteration', }, ['batr'] = { ['default'] = 'Bikdash Arabic Transliteration Rules', }, ['bgn/pcgn'] = { ['default'] = 'Board on Geographic Names / Permanent Committee on Geographical Names transliteration', }, ['din'] = { ['ar'] = 'DIN 31635 Arabic', ['fa'] = 'DIN 31635 Arabic', ['ku'] = 'DIN 31635 Arabic', ['ps'] = 'DIN 31635 Arabic', ['tg'] = 'DIN 31635 Arabic', ['ug'] = 'DIN 31635 Arabic', ['ur'] = 'DIN 31635 Arabic', ['arab'] = 'DIN 31635 Arabic', ['default'] = 'DIN transliteration', }, ['eae'] = { ['default'] = 'Encyclopaedia Aethiopica transliteration', }, ['hepburn'] = { ['default'] = 'Hepburn transliteration', }, ['hu'] = { -- Manchu romanization ['default'] = 'Hu system of romanization', }, ['hunterian'] = { ['default'] = 'Hunterian transliteration', }, ['iast'] = { ['default'] = 'International Alphabet of Sanskrit transliteration', }, ['iso'] = { -- when a transliteration standard is supplied ['ab'] = 'ISO 9 Cyrillic', ['ba'] = 'ISO 9 Cyrillic', ['be'] = 'ISO 9 Cyrillic', ['bg'] = 'ISO 9 Cyrillic', ['kk'] = 'ISO 9 Cyrillic', ['ky'] = 'ISO 9 Cyrillic', ['mn'] = 'ISO 9 Cyrillic', ['ru'] = 'ISO 9 Cyrillic', ['tg'] = 'ISO 9 Cyrillic', ['uk'] = 'ISO 9 Cyrillic', ['bua'] = 'ISO 9 Cyrillic', ['sah'] = 'ISO 9 Cyrillic', ['tut'] = 'ISO 9 Cyrillic', ['xal'] = 'ISO 9 Cyrillic', ['cyrl'] = 'ISO 9 Cyrillic', ['cyrs'] = 'ISO 9 Cyrillic', ['ar'] = 'ISO 233 Arabic', ['ku'] = 'ISO 233 Arabic', ['ps'] = 'ISO 233 Arabic', ['ug'] = 'ISO 233 Arabic', ['ur'] = 'ISO 233 Arabic', ['arab'] = 'ISO 233 Arabic', ['he'] = 'ISO 259 Hebrew', ['yi'] = 'ISO 259 Hebrew', ['hebr'] = 'ISO 259 Hebrew', ['el'] = 'ISO 843 Greek', ['grc'] = 'ISO 843 Greek', ['ja'] = 'ISO 3602 Japanese', ['hira'] = 'ISO 3602 Japanese', ['hrkt'] = 'ISO 3602 Japanese', ['jpan'] = 'ISO 3602 Japanese', ['kana'] = 'ISO 3602 Japanese', ['zh'] = 'ISO 7098 Chinese', ['chi'] = 'ISO 7098 Chinese', ['cmn'] = 'ISO 7098 Chinese', ['zho'] = 'ISO 7098 Chinese', -- ['han'] = 'ISO 7098 Chinese', -- unicode alias of Hani? doesn't belong here? should be Hani? ['hans'] = 'ISO 7098 Chinese', ['hant'] = 'ISO 7098 Chinese', ['ka'] = 'ISO 9984 Georgian', ['kat'] = 'ISO 9984 Georgian', ['arm'] = 'ISO 9985 Armenian', ['hy'] = 'ISO 9985 Armenian', ['th'] = 'ISO 11940 Thai', ['tha'] = 'ISO 11940 Thai', ['ko'] = 'ISO 11941 Korean', ['kor'] = 'ISO 11941 Korean', ['awa'] = 'ISO 15919 Indic', ['bho'] = 'ISO 15919 Indic', ['bn'] = 'ISO 15919 Indic', ['bra'] = 'ISO 15919 Indic', ['doi'] = 'ISO 15919 Indic', ['dra'] = 'ISO 15919 Indic', ['gon'] = 'ISO 15919 Indic', ['gu'] = 'ISO 15919 Indic', ['hi'] = 'ISO 15919 Indic', ['hno'] = 'ISO 15919 Indic', ['inc'] = 'ISO 15919 Indic', ['kn'] = 'ISO 15919 Indic', ['kok'] = 'ISO 15919 Indic', ['ks'] = 'ISO 15919 Indic', ['mag'] = 'ISO 15919 Indic', ['mai'] = 'ISO 15919 Indic', ['ml'] = 'ISO 15919 Indic', ['mr'] = 'ISO 15919 Indic', ['ne'] = 'ISO 15919 Indic', ['new'] = 'ISO 15919 Indic', ['or'] = 'ISO 15919 Indic', ['pa'] = 'ISO 15919 Indic', ['pnb'] = 'ISO 15919 Indic', ['raj'] = 'ISO 15919 Indic', ['sa'] = 'ISO 15919 Indic', ['sat'] = 'ISO 15919 Indic', ['sd'] = 'ISO 15919 Indic', ['si'] = 'ISO 15919 Indic', ['skr'] = 'ISO 15919 Indic', ['ta'] = 'ISO 15919 Indic', ['tcy'] = 'ISO 15919 Indic', ['te'] = 'ISO 15919 Indic', ['beng'] = 'ISO 15919 Indic', ['brah'] = 'ISO 15919 Indic', ['deva'] = 'ISO 15919 Indic', ['gujr'] = 'ISO 15919 Indic', ['guru'] = 'ISO 15919 Indic', ['knda'] = 'ISO 15919 Indic', ['mlym'] = 'ISO 15919 Indic', ['orya'] = 'ISO 15919 Indic', ['sinh'] = 'ISO 15919 Indic', ['taml'] = 'ISO 15919 Indic', ['telu'] = 'ISO 15919 Indic', ['default'] = 'ISO transliteration', }, ['jyutping'] = { ['default'] = 'Jyutping transliteration', }, ['mdorff'] = { -- Manchu romanization ['default'] = 'Möllendorff system of romanization', }, ['mlcts'] = { ['default'] = 'Myanmar Language Commission Transcription System', }, ['mr'] = { ['default'] = 'McCune–Reischauer transliteration', }, ['nihon-shiki'] = { ['default'] = 'Nihon-shiki transliteration', }, ['no_std'] = { -- when no transliteration standard is supplied ['akk'] = 'Semitic transliteration', ['sem'] = 'Semitic transliteration', ['phnx'] = 'Semitic transliteration', ['xsux'] = 'Cuneiform transliteration', }, ['pinyin'] = { ['default'] = 'Pinyin transliteration', }, ['rr'] = { ['default'] = 'Revised Romanization of Korean transliteration', }, ['rtgs'] = { ['default'] = 'Royal Thai General System of Transcription', }, ['satts'] = { ['default'] = 'Standard Arabic Technical Transliteration System transliteration', }, ['scientific'] = { ['default'] = 'scientific transliteration', }, ['thdl'] = { ['default'] = 'THL Simplified Phonetic Transcription', }, ['ukrainian'] = { ['default'] = 'Ukrainian National system of romanization', }, ['ungegn'] = { ['default'] = 'United Nations Group of Experts on Geographical Names transliteration', }, ['wadegile'] = { ['default'] = 'Wade–Giles transliteration', }, ['wehr'] = { ['default'] = 'Hans Wehr transliteration', }, ['wylie'] = { ['default'] = 'Wylie transliteration', }, ['yaleko'] = { ['default'] = 'Yale romanization of Korean', }, ['zwpy'] = { ['default'] = 'Tibetan pinyin' }, }; --[[--------------------------< E N G _ V A R >---------------------------------------------------------------- Used at en.wiki so that spelling of 'romanized' (US, default) can be changed to 'romanised' to match the envar specified by a {{Use xxx English}}. This is accomplished by setting |engvar=gb; can, should be omitted in articles that use American English; no need for the clutter. ]] local engvar_sel_t = { -- select either UK English or US English ['au'] = 'gb_t', -- these match IANA region codes (except in lower case) ['ca'] = 'us_t', ['gb'] = 'gb_t', ['ie'] = 'gb_t', ['in'] = 'gb_t', ['nz'] = 'gb_t', ['us'] = 'us_t', -- default engvar ['za'] = 'gb_t' }; local engvar_t = { ['gb_t'] = { ['romanisz_lc'] = 'romanisation', -- lower case ['romanisz_uc'] = 'Romanisation', -- upper case ['romanisz_pt'] = 'romanised', -- past tense }, ['us_t'] = { -- default engvar ['romanisz_lc'] = 'romanization', -- lower case ['romanisz_uc'] = 'Romanization', -- upper case ['romanisz_pt'] = 'romanized', -- past tense } } --[[--------------------------< E X P O R T S >---------------------------------------------------------------- ]] return { this_wiki_lang_tag = this_wiki_lang_tag, this_wiki_lang_dir = lang_obj:getDir(), -- wiki's language direction article_name = article_name, engvar_t = engvar_t, engvar_sel_t = engvar_sel_t, lang_name_table = lang_name_table_t, override = override, rtl_scripts = rtl_scripts, special_tags_table = special_tags_table, translit_title_table = translit_title_table, }; s0e87rcbxa4drtas1ou6pyjfr8z57z9 746160 746159 2026-06-12T21:51:52Z Robertsky 51025 1 revision imported from [[:en:Module:Lang/data]]: for workshop activity 746159 Scribunto text/plain local lang_obj = mw.language.getContentLanguage(); local this_wiki_lang_tag = lang_obj.code; -- get this wiki's language tag --[[--------------------------< L A N G _ N A M E _ T A B L E >------------------------------------------------ primary table of tables that decode: lang -> language tags and names script -> ISO 15924 script tags region -> ISO 3166 region tags variant -> IANA registered variant tags suppressed -> map of scripts tags and their associated language tags all of these data come from separate modules that are derived from the IANA language-subtag-registry file key_to_lower() avoids the metatable trap and sets all keys in the subtables to lowercase. Many language codes have multiple associated names; Module:lang is only concerned with the first name so key_to_lower() only fetches the first name. ]] local function key_to_lower (module, src_type) local out = {}; local source_t = (('var_sup' == src_type) and require (module)) or mw.loadData (module); -- fetch data from this module; require() avoids metatable trap for variant data if 'var_sup' == src_type then for k, v in pairs (source_t) do out[k:lower()] = v; -- for variant and suppressed everything is needed end elseif 'lang' == src_type and source_t.active then -- for ~/iana_languages (active) for k, v in pairs (source_t.active) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end elseif 'lang_dep' == src_type and source_t.deprecated then -- for ~/iana_languages (deprecated) for k, v in pairs (source_t.deprecated) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end else -- here for all other sources for k, v in pairs (source_t) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end end return out; end local lang_name_table_t = { lang = key_to_lower ('Module:Lang/data/iana languages', 'lang'), lang_dep = key_to_lower ('Module:Lang/data/iana languages', 'lang_dep'), script = key_to_lower ('Module:Lang/data/iana scripts'), -- script keys are capitalized; set to lower region = key_to_lower ('Module:Lang/data/iana regions'), -- region keys are uppercase; set to lower variant = key_to_lower ('Module:Lang/data/iana variants', 'var_sup'), suppressed = key_to_lower ('Module:Lang/data/iana suppressed scripts', 'var_sup'), -- script keys are capitalized; set to lower } --[[--------------------------< I 1 8 N M E D I A W I K I O V E R R I D E >-------------------------------- For internationalization; not used at en.wiki The language names taken from the IANA language-subtag-registry file are given in English. That may not be ideal. Translating ~8,000 language names is also not ideal. MediaWiki maintains (much) shorter lists of language names in most languages for which there is a Wikipedia edition. When desired, Module:Lang can use the MediaWiki language list for the local language. Caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all. When incomplete, MediaWiki's list will 'fall back' to another language (typically English). When that happens add an appropriate entry to the override table below. Caveat lector: the list of MediaWiki language names for your language may not be correct. At en.wiki, the MediaWiki language names do not agree with the IANA language names for these ISO 639-1 tags. Often it is simply spelling differences: bh: IANA: Bihari languages MW: Bhojpuri – the ISO 639-3 tag for Bhojpuri is bho bn: IANA: Bengali MW: Bangla – Bengali is the exonym, Bangla is the endonym dv: IANA: Dhivehi MW: Divehi el: IANA: Modern Greek MW: Greek ht: IANA: Haitian MW: Haitian Creole ky: IANA: Kirghiz MW: Kyrgyz li: IANA: Limburgan MW: Limburgish or: IANA: Oriya MW: Odia os: IANA: Ossetian MW: Ossetic "pa: IANA: Panjabi MW: Punjabi "ps: IANA: Pushto MW: Pashto "to: IANA: Tonga MW: Tongan "ug: IANA: Uighur MW: Uyghur use the override table to override language names that are incorrect for your project To see the list of names that MediaWiki has for your language, enter this in the Debug console: =mw.dumpObject (mw.language.fetchLanguageNames ('<tag>', 'all')) (replacing <tag> with the language tag for your language) Use of the MediaWiki language names lists is enabled when media_wiki_override_enable is set to boolean true. ]] local media_wiki_override_enable = false; -- set to true to override IANA names with MediaWiki names; always false at en.wiki -- caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all if true == media_wiki_override_enable then local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_lang_tag, 'all'); -- get a table of language tag/name pairs known to MediaWiki for tag, name in pairs (mw_languages_by_tag_t) do -- loop through each tag/name pair in the MediaWiki list if lang_name_table_t.lang[tag] then -- if the tag is in the main list lang_name_table_t.lang[tag] = name; -- overwrite existing name with the name from MediaWiki end end end --[[--------------------------< O V E R R I D E >-------------------------------------------------------------- Language codes and names in this table override the BCP47 names in lang_name_table. indexes in this table shall always be lower case ]] local override = { ------------------------------< I S O _ 6 3 9 - 1 >------------------------------------------------------------ ["ab"] = "Abkhaz", -- to match en.wiki article name ["ca-valencia"] = "Valencian", ["cu"] = "Church Slavonic", -- 2nd IANA name; ["de-at"] = "Austrian German", -- these code-region and code-variant tags to match en.wiki article names ["de-ch"] = "Swiss Standard German", ["en-au"] = "Australian English", ["en-ca"] = "Canadian English", ["en-emodeng"] = "Early Modern English", ["en-gb"] = "British English", ["en-ie"] = "Irish English", ["en-in"] = "Indian English", ["en-nz"] = "New Zealand English", ["en-us"] = "American English", ["en-za"] = "South African English", ["fr-ca"] = "Canadian French", ["fr-gallo"] = "Gallo", ["fy"] = "West Frisian", -- Western Frisian ["mo"] = "Moldovan", -- Moldavian (deprecated code); to match en.wiki article title ["nl-be"] = "Flemish", -- match MediaWiki ["oc-gascon"] = "Gascon", ["oc-provenc"] = "Provençal", ["ps"] = "Pashto", -- Pushto ["pt-br"] = "Brazilian Portuguese", -- match MediaWiki ["ro-md"] = "Moldovan", -- 'not deprecated' form ["ro-cyrl-md"] = "Moldovan", -- 'not deprecated' form ["tw-asante"] = "Asante Twi", ["ug"] = "Uyghur", -- 2nd IANA name; to match en.wiki article name -- these ISO 639-1 language-name overrides imported from Module:Language/data/wp_languages (since deleted) --<begin do-not-edit except to comment out>-- ["av"] = "Avar", -- Avaric ["bo"] = "Standard Tibetan", -- Tibetan ["el"] = "Greek", -- Modern Greek -- ["en-SA"] = "South African English", -- English; no; SA is not South Africa it Saudi Arabia; ZA is South Africa ["ff"] = "Fula", -- Fulah ["ht"] = "Haitian Creole", -- Haitian ["hz"] = "Otjiherero", -- Herero ["ii"] = "Yi", -- Sichuan Yi ["ki"] = "Gikuyu", -- Kikuyu ["kl"] = "Greenlandic", -- Kalaallisut ["ky"] = "Kyrgyz", -- Kirghiz ["lg"] = "Luganda", -- Ganda ["li"] = "Limburgish", -- Limburgan ["mi"] = "Māori", -- Maori ["na"] = "Nauruan", -- Nauru ["nb"] = "Bokmål", -- Norwegian Bokmål ["nd"] = "Northern Ndebele", -- North Ndebele ["nn"] = "Nynorsk", -- Norwegian Nynorsk ["nr"] = "Southern Ndebele", -- South Ndebele ["ny"] = "Chichewa", -- Nyanja ["oj"] = "Ojibwe", -- Ojibwa ["or"] = "Odia", -- Oriya ["pa"] = "Punjabi", -- Panjabi ["rn"] = "Kirundi", -- Rundi ["sl"] = "Slovene", -- Slovenian ["ss"] = "Swazi", -- Swati ["st"] = "Sotho", -- Southern Sotho ["to"] = "Tongan", -- Tonga --<end do-not-edit except to comment out>-- ------------------------------< I S O _ 6 3 9 - 2, - 3, - 5 >---------------------------------------------- ["alv"] = "Atlantic–Congo languages", -- to match en.wiki article title (endash) ["arc"] = "Imperial Aramaic (700-300 BCE)", -- Official Aramaic (700-300 BCE), Imperial Aramaic (700-300 BCE); to match en.wiki article title uses ISO639-2 'preferred' name ["art"] = "constructed", -- to match en.wiki article; lowercase for category name ["arx"] = "Aruá (Rondonia State)", -- Aruá (Rodonia State); to match en.wiki article ["ast-es"] = "Leonese", -- ast in IANA is Asturian; Leonese is a dialect ["bea"] = "Dane-zaa", -- Beaver; to match en.wiki article title ["bha"] = "Bhariati", -- Bharia; to match en.wiki article title ["bhd"] = "Bhadarwahi", -- Bhadrawahi; to match en.wiki article title ["bla"] = "Blackfoot", -- Siksika; to match en.wiki article title ["blc"] = "Nuxalk", -- Bella Coola; to match en.wiki article title ["bua"] = "Buryat", -- Buriat; this is a macro language; these four use wp preferred transliteration; ["bxm"] = "Mongolian Buryat", -- Mongolia Buriat; these three all redirect to Buryat ["bxr"] = "Russian Buryat", -- Russia Buriat; ["bxu"] = "Chinese Buryat", -- China Buriat; ["byr"] = "Yipma", -- Baruya, Yipma ["clm"] = "Klallam", -- Clallam; to match en.wiki article title ["crb"] = "Kalinago", -- Island Carib; to match en.wiki article ["egy"] = "Ancient Egyptian", -- Egyptian (Ancient); distinguish from contemporary arz: Egyptian Arabic ["ems"] = "Alutiiq", -- Pacific Gulf Yupik; to match en.wiki article title ["esx"] = "Eskimo–Aleut languages", -- to match en.wiki article title (endash) ["frr"] = "North Frisian", -- Northern Frisian ["frs"] = "East Frisian Low Saxon", -- Eastern Frisian ["gsw-fr"] = "Alsatian", -- match MediaWiki ["haa"] = "Hän", -- Han; to match en.wiki article title ["hei"] = "Heiltsuk–Oowekyala", -- Heiltsuk; to match en.wiki article title ["hmx"] = "Hmong–Mien languages", -- to match en.wiki article title (endash) ["ilo"] = "Ilocano", -- Iloko; to match en.wiki article title ["jam"] = "Jamaican Patois", -- Jamaican Creole English ["lij-mc"] = "Monégasque", -- Ligurian as spoken in Monaco; this one for proper tool tip; also in <article_name> table ["luo"] = "Dholuo", -- IANA (primary) /ISO 639-3: Luo (Kenya and Tanzania); IANA (secondary): Dholuo ["mhr"] = "Meadow Mari", -- Eastern Mari ["mid"] = "Modern Mandaic", -- Mandaic ['mis'] = "uncoded", -- Uncoded languages; capitalization; special scope, not collective scope; ["mkh"] = "Mon–Khmer languages", -- to match en.wiki article title (endash) ["mla"] = "Tamambo", -- Malo ['mte'] = "Mono-Alu", -- Mono (Solomon Islands) ['mul'] = "multiple", -- Multiple languages; capitalization; special scope, not collective scope; ["nan-tw"] = "Taiwanese Hokkien", -- make room for IANA / 639-3 nan Min Nan Chinese; match en.wiki article title ["new"] = "Newar", -- Newari, Nepal Bhasa; to match en,wiki article title ["ngf"] = "Trans–New Guinea languages", -- to match en.wiki article title (endash) ["nic"] = "Niger–Congo languages", -- Niger-Kordofanian languages; to match en,wiki article title ["nrf"] = "Norman", -- not quite a collective - IANA name: Jèrriais + Guernésiais; categorizes to Norman-language text ["nrf-gg"] = "Guernésiais", -- match MediaWiki ["nrf-je"] = "Jèrriais", -- match MediaWiki ["nzi"] = "Nzema", -- Nzima; to match en.wiki article title ["oma"] = "Omaha–Ponca", -- to match en.wiki article title (endash) ["orv"] = "Old East Slavic", -- Old Russian ["pfl"] = "Palatine German", -- Pfaelzisch; to match en.wiki article ["pie"] = "Piro Pueblo", -- Piro; to match en.wiki article ["pms"] = "Piedmontese", -- Piemontese; to match en.wiki article title ["pnb"] = "Punjabi (Western)", -- Western Panjabi; dab added to override import from ~/wp languages and distinguish pnb from pa in reverse look up tag_from_name() ['qwm'] = "Cuman", -- Kuman (Russia); to match en.wiki article name ["rop"] = "Australian Kriol", -- Kriol; en.wiki article is a dab; point to correct en.wiki article ["rsk"] = "Pannonian Rusyn", -- Ruthenian; en.wiki preferred name ["sco-ulster"] = "Ulster Scots", ["sdo"] = "Bukar–Sadong", -- Bukar-Sadung Bidayuh; to match en.wiki article title ["smp"] = "Samaritan Hebrew", -- to match en.wiki article title ["stq"] = "Saterland Frisian", -- Saterfriesisch ["tfn"] = "Denaʼina", -- to match en.wiki article title ["und"] = "undetermined", -- capitalization to match existing category ["wrg"] = "Warrongo", -- Warungu ["xal-ru"] = "Kalmyk", -- to match en.wiki article title ["xgf"] = "Tongva", -- ISO 639-3 is Gabrielino-Fernandeño ["yuf"] = "Havasupai–Hualapai", -- Havasupai-Walapai-Yavapai; to match en.wiki article title ["zkh"] = "Khorezmian Turkic", -- Khorezmian; to match en.wiki article title, avoiding the dab ["zkt"] = "Khitan", -- Kitan; to match en.wiki article title ["zxx"] = "no linguistic content", -- capitalization -- these ISO 639-2, -3 language-name overrides imported from Module:Language/data/wp_languages (since deleted) --<begin do-not-edit except to comment out>-- ["ace"] = "Acehnese", -- Achinese ["aec"] = "Sa'idi Arabic", -- Saidi Arabic ["akl"] = "Aklan", -- Aklanon ["alt"] = "Altay", -- Southern Altai ["apm"] = "Mescalero-Chiricahua", -- Mescalero-Chiricahua Apache ["bal"] = "Balochi", -- Baluchi -- ["bcl"] = "Central Bicolano", -- Central Bikol ["bin"] = "Edo", -- Bini ["bpy"] = "Bishnupriya Manipuri", -- Bishnupriya ["chg"] = "Chagatay", -- Chagatai ["ckb"] = "Sorani Kurdish", -- Central Kurdish ["cnu"] = "Shenwa", -- Chenoua ["coc"] = "Cocopah", -- Cocopa ["diq"] = "Zazaki", -- Dimli ["fit"] = "Meänkieli", -- Tornedalen Finnish ["fkv"] = "Kven", -- Kven Finnish ["frk"] = "Old Frankish", -- Frankish ["gez"] = "Ge'ez", -- Geez ["gju"] = "Gujari", -- Gujari ["gsw"] = "Alemannic German", -- Swiss German ["gul"] = "Gullah", -- Sea Island Creole English ["hak"] = "Hakka", -- Hakka Chinese ["hbo"] = "Biblical Hebrew", -- Ancient Hebrew ["hnd"] = "Hindko", -- Southern Hindko -- ["ikt"] = "Inuvialuk", -- Inuinnaqtun ["kaa"] = "Karakalpak", -- Kara-Kalpak ["khb"] = "Tai Lü", -- Lü ["kmr"] = "Kurmanji Kurdish", -- Northern Kurdish ["kpo"] = "Kposo", -- Ikposo ["krj"] = "Kinaray-a", -- Kinaray-A -- ["ktz"] = "Juǀ'hoan", -- Juǀʼhoan ["lez"] = "Lezgian", -- Lezghian ["liv"] = "Livonian", -- Liv ["lng"] = "Lombardic", -- Langobardic ["mia"] = "Miami-Illinois", -- Miami ["miq"] = "Miskito", -- Mískito ["mix"] = "Mixtec", -- Mixtepec Mixtec ["mni"] = "Meitei", -- Manipuri ["mrj"] = "Hill Mari", -- Western Mari ["mww"] = "White Hmong", -- Hmong Daw ["nds-nl"] = "Dutch Low Saxon", -- Low German -- ["new"] = "Nepal Bhasa", -- Newari ["nso"] = "Northern Sotho", -- Pedi -- ["nwc"] = "Classical Nepal Bhasa", -- Classical Newari, Classical Nepal Bhasa, Old Newari ["ood"] = "O'odham", -- Tohono O'odham ["otk"] = "Old Turkic", -- Old Turkish ["pal"] = "Middle Persian", -- Pahlavi ["pam"] = "Kapampangan", -- Pampanga ["phr"] = "Potwari", -- Pahari-Potwari ["pka"] = "Jain Prakrit", -- Ardhamāgadhī Prākrit -- ["pnb"] = "Punjabi", -- Western Panjabi ["psu"] = "Shauraseni", -- Sauraseni Prākrit ["rap"] = "Rapa Nui", -- Rapanui ["rar"] = "Cook Islands Māori", -- Rarotongan ["rmu"] = "Scandoromani", -- Tavringer Romani ["rom"] = "Romani", -- Romany ["rup"] = "Aromanian", -- Macedo-Romanian ["ryu"] = "Okinawan", -- Central Okinawan ["sdc"] = "Sassarese", -- Sassarese Sardinian ["sdn"] = "Gallurese", -- Gallurese Sardinian ["shp"] = "Shipibo", -- Shipibo-Conibo ["src"] = "Logudorese", -- Logudorese Sardinian ["sro"] = "Campidanese", -- Campidanese Sardinian ["tkl"] = "Tokelauan", -- Tokelau ["tvl"] = "Tuvaluan", -- Tuvalu ["tyv"] = "Tuvan", -- Tuvinian ["vls"] = "West Flemish", -- Vlaams ["wep"] = "Westphalian", -- Westphalien ["xal"] = "Oirat", -- Kalmyk ["xcl"] = "Old Armenian", -- Classical Armenian ["yua"] = "Yucatec Maya", -- Yucateco --<end do-not-edit except to comment out>-- ------------------------------< P R I V A T E _ U S E _ T A G S >---------------------------------------------- ["akk-x-latbabyl"] = "Late Babylonian Akkadian", ["akk-x-midassyr"] = "Middle Assyrian Akkadian", ["akk-x-midbabyl"] = "Middle Babylonian Akkadian", ["akk-x-neoassyr"] = "Neo-Assyrian Akkadian", ["akk-x-neobabyl"] = "Neo-Babylonian Akkadian", ["akk-x-old"] = "Old Akkadian", ["akk-x-oldassyr"] = "Old Assyrian Akkadian", ["akk-x-oldbabyl"] = "Old Babylonian Akkadian", ["alg-x-proto"] = "Proto-Algonquian", -- alg in IANA is Algonquian languages ["ar-x-classic"] = "Classical Arabic", ["ar-x-nabat"] = "Nabataean Arabic", ["ar-x-safaitic"] = "Safaitic", ["art-x-uropi"] = "Uropi", -- art in IANA is Artificial languages ["ast-x-west"] = "Western Asturian", ["ca-x-old"] = "Old Catalan", ["cel-x-combrit"] = "Common Brittonic", -- cel in IANA is Celtic languages ["cel-x-proto"] = "Proto-Celtic", ["ccs-x-proto"] = "Proto-Kartvelian", -- ccs in IANA is Kartvelian languages ["egy-x-demotic"] = "Demotic Egyptian", ["egy-x-late"] = "Late Egyptian", ["egy-x-middle"] = "Middle Egyptian", ["egy-x-old"] = "Old Egyptian", ["et-x-seto"] = "Seto", -- to replace {{Lang-est-sea}} ["fa-x-classic"] = "Classical Persian", ["fiu-x-proto"] = "Proto-Finno-Ugric", -- fiu in IANA is Finno-Ugric languages ["fr-x-frainc"] = "Franc-Comtois", -- to replace {{Lang-fra-frc}} ["fr-x-quebec"] = "Quebec French", ["gem-x-proto"] = "Proto-Germanic", -- gem in IANA is Germanic languages ["gmq-x-proto"] = "Proto-Norse", ["gmw-x-ecg"] = "East Central German", ["gmw-x-proto"] = "Proto-West Germanic", ["grc-x-aeolic"] = "Aeolic Greek", -- these grc-x-... codes are preferred alternates to the non-standard catchall code grc-gre ["grc-x-arcadcyp"] = "Arcadocypriot Greek", ["grc-x-attic"] = "Attic Greek", ["grc-x-biblical"] = "Biblical Greek", ["grc-x-byzant"] = "Byzantine Greek", ["grc-x-classic"] = "Classical Greek", ["grc-x-doric"] = "Doric Greek", ["grc-x-hellen"] = "Hellenistic Greek", ["grc-x-ionic"] = "Ionic Greek", ["grc-x-koine"] = "Koine Greek", ["grc-x-medieval"] = "Medieval Greek", ["grc-x-pamph"] = "Pamphylian Greek", ["grc-x-patris"] = "Patristic Greek", ["grk-x-proto"] = "Proto-Greek", -- grk in IANA is Greek languages ["iir-x-proto"] = "Proto-Indo-Iranian", -- iir in IANA is Indo-Iranian Languages ["inc-x-mitanni"] = "Mitanni-Aryan", -- inc in IANA is Indic languages ["inc-x-proto"] = "Proto-Indo-Aryan", ["ine-x-anatolia"] = "Anatolian languages", ["ine-x-proto"] = "Proto-Indo-European", ["ira-x-proto"] = "Proto-Iranian", -- ira in IANA is Iranian languages ["itc-x-proto"] = "Proto-Italic", -- itc in IANA is Italic languages ["ksh-x-colog"] = "Colognian", -- en.wiki article is Colognian; ksh (Kölsch) redirects there ["la-x-church"] = "Ecclesiastical Latin", ["la-x-classic"] = "Classical Latin", ["la-x-late"] = "Late Latin", ["la-x-medieval"] = "Medieval Latin", ["la-x-new"] = "New Latin", ["la-x-old"] = "Old Latin", ["la-x-ren"] = "Renaissance Latin", ["la-x-vulgar"] = "Vulgar Latin", ["lmo-x-berg"] = "Bergamasque", -- lmo in IANA is Lombard; Bergamasque is a dialect ["lmo-x-cremish"] = "Cremish", -- lmo in IANA is Lombard; Cremish is a dialect ["lmo-x-milanese"] = "Milanese", -- lmo in IANA is Lombard; Milanese is a dialect ["mis-x-ripuar"] = "Ripuarian", -- replaces improper use of ksh in wp_languages ["prg-x-old"] = "Old Prussian", ["roa-x-proto"] = "Proto-Romance", ["sem-x-ammonite"] = "Ammonite", ["sem-x-aramaic"] = "Aramaic", ["sem-x-canaan"] = "Canaanite languages", ["sem-x-dadanit"] = "Dadanitic", ["sem-x-dumaitic"] = "Dumaitic", ["sem-x-egurage"] = "Eastern Gurage", ["sem-x-hasaitic"] = "Hasaitic", ["sem-x-hatran"] = "Hatran Aramaic", ["sem-x-hismaic"] = "Hismaic", ["sem-x-nabat"] = "Nabataean Aramaic", ["sem-x-oldsoara"] = "Old South Arabian", ["sem-x-palmyren"] = "Palmyrene Aramaic", ["sem-x-proto"] = "Proto-Semitic", ["sem-x-taymanit"] = "Taymanitic", ["smi-x-proto"] = "Proto-Samic", -- smi in IANA is Samic languages ["sla-x-proto"] = "Proto-Slavic", -- sla in IANA is Slavic languages ["sq-x-proto"] = "Proto-Albanian", ["trk-x-oldanat"] = "Old Anatolian Turkish", -- to replace {{Lang-1ca}} ["urj-x-proto"] = "Proto-Uralic", -- urj in IANA is Uralic languages ["yuf-x-hav"] = "Havasupai", -- IANA name for these three is Havasupai-Walapai-Yavapai ["yuf-x-wal"] = "Walapai", ["yuf-x-yav"] = "Yavapai", ["xsa-x-himyarit"] = "Himyaritic", ["xsc-x-pontic"] = "Pontic Scythian", -- xsc in IANA is Scythian ["xsc-x-saka"] = "Saka", ["xsc-x-sarmat"] = "Sarmatian", ["zle-x-ruthenia"] = "Ruthenian", -- zle in IANA is East Slavic languages collective; moved to allow rsk for Pannonian Rusyn } --[[--------------------------< A R T I C L E _ L I N K >------------------------------------------------------ for those rare occasions when article titles don't fit with the normal '<language name> language', this table maps language code to article title. Use of this table should be avoided and the use of redirects preferred as that is the long-standing method of handling article names that don't fit with the normal pattern ]] local article_name = { ['aru'] = "Arawá language", -- Aruá (Amazonas State); to avoid Aruá dab page ['arx'] = "Aruá language (Rondônia)", -- Aruá (Rodonia State) overridden to Aruá (Rondonia State); to avoid Aruá dab page ['kue'] = "Kuman language (New Guinea)", -- Kuman (Papua New Guinea); to avoid Kuman dab page ["lij-mc"] = "Monégasque dialect", -- Ligurian as spoken in Monaco ['mbo'] = "Mbo language (Cameroon)", -- Mbo (Cameroon) ['mnh'] = "Mono language (Congo)", -- Mono (Democratic Republic of Congo); see Template_talk:Lang#Mono_languages ['mnr'] = "Mono language (California)", -- Mono (USA) ['mru'] = "Mono language (Cameroon)", -- Mono (Cameroon) ["snq"] = "Sangu language (Gabon)", -- Sangu (Gabon) ["toi"] = "Tonga language (Zambia and Zimbabwe)", -- Tonga (Zambia and Zimbabwe); to avoid Tonga language dab page ["vwa"] = "Awa language (China)", -- Awa (China); to avoid Awa dab page ["xlg"] = "Ligurian language (ancient)", -- see Template_talk:Lang#Ligurian_dab ["zmw"] = "Mbo language (Congo)", -- Mbo (Democratic Republic of Congo) } --[=[-------------------------< R T L _ S C R I P T S >-------------------------------------------------------- ISO 15924 scripts that are written right-to-left. Data in this table taken from [[ISO 15924#List of codes]] last update to this list: 2017-12-24 ]=] local rtl_scripts = { 'adlm', 'arab', 'aran', 'armi', 'avst', 'cprt', 'egyd', 'egyh', 'hatr', 'hebr', 'hung', 'inds', 'khar', 'lydi', 'mand', 'mani', 'mend', 'merc', 'mero', 'narb', 'nbat', 'nkoo', 'orkh', 'palm', 'phli', 'phlp', 'phlv', 'phnx', 'prti', 'rohg', 'samr', 'sarb', 'sogd', 'sogo', 'syrc', 'syre', 'syrj', 'syrn', 'thaa', 'wole', }; --[[--------------------------< T R A N S L I T _ T I T L E S >------------------------------------------------ This is a table of tables of transliteration standards and the language codes or language scripts that apply to those standards. This table is used to create the tool-tip text associated with the transliterated text displayed by some of the {{lang-??}} templates. These tables are more-or-less copied directly from {{special|PermaLink/680078354}}. The standard 'NO_STD' is a construct to allow for the cases when no |std= parameter value is provided. ]] local translit_title_table = { ['abkai'] = { -- Manchu romanization ['default'] = 'Abkai system of romanization', }, ['ahl'] = { ['default'] = 'Academy of the Hebrew Language transliteration', }, ['ala'] = { ['default'] = 'American Library Association – Library of Congress transliteration', }, ['ala-lc'] = { ['default'] = 'American Library Association – Library of Congress transliteration', }, ['batr'] = { ['default'] = 'Bikdash Arabic Transliteration Rules', }, ['bgn/pcgn'] = { ['default'] = 'Board on Geographic Names / Permanent Committee on Geographical Names transliteration', }, ['din'] = { ['ar'] = 'DIN 31635 Arabic', ['fa'] = 'DIN 31635 Arabic', ['ku'] = 'DIN 31635 Arabic', ['ps'] = 'DIN 31635 Arabic', ['tg'] = 'DIN 31635 Arabic', ['ug'] = 'DIN 31635 Arabic', ['ur'] = 'DIN 31635 Arabic', ['arab'] = 'DIN 31635 Arabic', ['default'] = 'DIN transliteration', }, ['eae'] = { ['default'] = 'Encyclopaedia Aethiopica transliteration', }, ['hepburn'] = { ['default'] = 'Hepburn transliteration', }, ['hu'] = { -- Manchu romanization ['default'] = 'Hu system of romanization', }, ['hunterian'] = { ['default'] = 'Hunterian transliteration', }, ['iast'] = { ['default'] = 'International Alphabet of Sanskrit transliteration', }, ['iso'] = { -- when a transliteration standard is supplied ['ab'] = 'ISO 9 Cyrillic', ['ba'] = 'ISO 9 Cyrillic', ['be'] = 'ISO 9 Cyrillic', ['bg'] = 'ISO 9 Cyrillic', ['kk'] = 'ISO 9 Cyrillic', ['ky'] = 'ISO 9 Cyrillic', ['mn'] = 'ISO 9 Cyrillic', ['ru'] = 'ISO 9 Cyrillic', ['tg'] = 'ISO 9 Cyrillic', ['uk'] = 'ISO 9 Cyrillic', ['bua'] = 'ISO 9 Cyrillic', ['sah'] = 'ISO 9 Cyrillic', ['tut'] = 'ISO 9 Cyrillic', ['xal'] = 'ISO 9 Cyrillic', ['cyrl'] = 'ISO 9 Cyrillic', ['cyrs'] = 'ISO 9 Cyrillic', ['ar'] = 'ISO 233 Arabic', ['ku'] = 'ISO 233 Arabic', ['ps'] = 'ISO 233 Arabic', ['ug'] = 'ISO 233 Arabic', ['ur'] = 'ISO 233 Arabic', ['arab'] = 'ISO 233 Arabic', ['he'] = 'ISO 259 Hebrew', ['yi'] = 'ISO 259 Hebrew', ['hebr'] = 'ISO 259 Hebrew', ['el'] = 'ISO 843 Greek', ['grc'] = 'ISO 843 Greek', ['ja'] = 'ISO 3602 Japanese', ['hira'] = 'ISO 3602 Japanese', ['hrkt'] = 'ISO 3602 Japanese', ['jpan'] = 'ISO 3602 Japanese', ['kana'] = 'ISO 3602 Japanese', ['zh'] = 'ISO 7098 Chinese', ['chi'] = 'ISO 7098 Chinese', ['cmn'] = 'ISO 7098 Chinese', ['zho'] = 'ISO 7098 Chinese', -- ['han'] = 'ISO 7098 Chinese', -- unicode alias of Hani? doesn't belong here? should be Hani? ['hans'] = 'ISO 7098 Chinese', ['hant'] = 'ISO 7098 Chinese', ['ka'] = 'ISO 9984 Georgian', ['kat'] = 'ISO 9984 Georgian', ['arm'] = 'ISO 9985 Armenian', ['hy'] = 'ISO 9985 Armenian', ['th'] = 'ISO 11940 Thai', ['tha'] = 'ISO 11940 Thai', ['ko'] = 'ISO 11941 Korean', ['kor'] = 'ISO 11941 Korean', ['awa'] = 'ISO 15919 Indic', ['bho'] = 'ISO 15919 Indic', ['bn'] = 'ISO 15919 Indic', ['bra'] = 'ISO 15919 Indic', ['doi'] = 'ISO 15919 Indic', ['dra'] = 'ISO 15919 Indic', ['gon'] = 'ISO 15919 Indic', ['gu'] = 'ISO 15919 Indic', ['hi'] = 'ISO 15919 Indic', ['hno'] = 'ISO 15919 Indic', ['inc'] = 'ISO 15919 Indic', ['kn'] = 'ISO 15919 Indic', ['kok'] = 'ISO 15919 Indic', ['ks'] = 'ISO 15919 Indic', ['mag'] = 'ISO 15919 Indic', ['mai'] = 'ISO 15919 Indic', ['ml'] = 'ISO 15919 Indic', ['mr'] = 'ISO 15919 Indic', ['ne'] = 'ISO 15919 Indic', ['new'] = 'ISO 15919 Indic', ['or'] = 'ISO 15919 Indic', ['pa'] = 'ISO 15919 Indic', ['pnb'] = 'ISO 15919 Indic', ['raj'] = 'ISO 15919 Indic', ['sa'] = 'ISO 15919 Indic', ['sat'] = 'ISO 15919 Indic', ['sd'] = 'ISO 15919 Indic', ['si'] = 'ISO 15919 Indic', ['skr'] = 'ISO 15919 Indic', ['ta'] = 'ISO 15919 Indic', ['tcy'] = 'ISO 15919 Indic', ['te'] = 'ISO 15919 Indic', ['beng'] = 'ISO 15919 Indic', ['brah'] = 'ISO 15919 Indic', ['deva'] = 'ISO 15919 Indic', ['gujr'] = 'ISO 15919 Indic', ['guru'] = 'ISO 15919 Indic', ['knda'] = 'ISO 15919 Indic', ['mlym'] = 'ISO 15919 Indic', ['orya'] = 'ISO 15919 Indic', ['sinh'] = 'ISO 15919 Indic', ['taml'] = 'ISO 15919 Indic', ['telu'] = 'ISO 15919 Indic', ['default'] = 'ISO transliteration', }, ['jyutping'] = { ['default'] = 'Jyutping transliteration', }, ['mdorff'] = { -- Manchu romanization ['default'] = 'Möllendorff system of romanization', }, ['mlcts'] = { ['default'] = 'Myanmar Language Commission Transcription System', }, ['mr'] = { ['default'] = 'McCune–Reischauer transliteration', }, ['nihon-shiki'] = { ['default'] = 'Nihon-shiki transliteration', }, ['no_std'] = { -- when no transliteration standard is supplied ['akk'] = 'Semitic transliteration', ['sem'] = 'Semitic transliteration', ['phnx'] = 'Semitic transliteration', ['xsux'] = 'Cuneiform transliteration', }, ['pinyin'] = { ['default'] = 'Pinyin transliteration', }, ['rr'] = { ['default'] = 'Revised Romanization of Korean transliteration', }, ['rtgs'] = { ['default'] = 'Royal Thai General System of Transcription', }, ['satts'] = { ['default'] = 'Standard Arabic Technical Transliteration System transliteration', }, ['scientific'] = { ['default'] = 'scientific transliteration', }, ['thdl'] = { ['default'] = 'THL Simplified Phonetic Transcription', }, ['ukrainian'] = { ['default'] = 'Ukrainian National system of romanization', }, ['ungegn'] = { ['default'] = 'United Nations Group of Experts on Geographical Names transliteration', }, ['wadegile'] = { ['default'] = 'Wade–Giles transliteration', }, ['wehr'] = { ['default'] = 'Hans Wehr transliteration', }, ['wylie'] = { ['default'] = 'Wylie transliteration', }, ['yaleko'] = { ['default'] = 'Yale romanization of Korean', }, ['zwpy'] = { ['default'] = 'Tibetan pinyin' }, }; --[[--------------------------< E N G _ V A R >---------------------------------------------------------------- Used at en.wiki so that spelling of 'romanized' (US, default) can be changed to 'romanised' to match the envar specified by a {{Use xxx English}}. This is accomplished by setting |engvar=gb; can, should be omitted in articles that use American English; no need for the clutter. ]] local engvar_sel_t = { -- select either UK English or US English ['au'] = 'gb_t', -- these match IANA region codes (except in lower case) ['ca'] = 'us_t', ['gb'] = 'gb_t', ['ie'] = 'gb_t', ['in'] = 'gb_t', ['nz'] = 'gb_t', ['us'] = 'us_t', -- default engvar ['za'] = 'gb_t' }; local engvar_t = { ['gb_t'] = { ['romanisz_lc'] = 'romanisation', -- lower case ['romanisz_uc'] = 'Romanisation', -- upper case ['romanisz_pt'] = 'romanised', -- past tense }, ['us_t'] = { -- default engvar ['romanisz_lc'] = 'romanization', -- lower case ['romanisz_uc'] = 'Romanization', -- upper case ['romanisz_pt'] = 'romanized', -- past tense } } --[[--------------------------< E X P O R T S >---------------------------------------------------------------- ]] return { this_wiki_lang_tag = this_wiki_lang_tag, this_wiki_lang_dir = lang_obj:getDir(), -- wiki's language direction article_name = article_name, engvar_t = engvar_t, engvar_sel_t = engvar_sel_t, lang_name_table = lang_name_table_t, override = override, rtl_scripts = rtl_scripts, special_tags_table = special_tags_table, translit_title_table = translit_title_table, }; s0e87rcbxa4drtas1ou6pyjfr8z57z9 Module:Unicode data/scripts 828 107526 746179 417930 2025-09-09T21:46:41Z en>Drmccreedy 0 Update for Unicode v17.0 746179 Scribunto text/plain --[=[ -- Official Unicode script values for individual codepoints and ranges of -- codepoints. -- https://www.unicode.org/Public/UNIDATA/Scripts.txt provided -- the script names, and https://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt -- provided script codes corresponding to the names (see [[Script (Unicode)]]). --]=] local data = { singles = { [0x000AA] = "Latn", [0x000BA] = "Latn", [0x000D7] = "Zyyy", [0x000F7] = "Zyyy", [0x00374] = "Zyyy", [0x0037E] = "Zyyy", [0x0037F] = "Grek", [0x00384] = "Grek", [0x00385] = "Zyyy", [0x00386] = "Grek", [0x00387] = "Zyyy", [0x0038C] = "Grek", [0x00605] = "Zyyy", [0x0060C] = "Zyyy", [0x0061B] = "Zyyy", [0x0061F] = "Zyyy", [0x00640] = "Zyyy", [0x00670] = "Zinh", [0x006DD] = "Zyyy", [0x0085E] = "Mand", [0x008E2] = "Zyyy", [0x009B2] = "Beng", [0x009D7] = "Beng", [0x00A3C] = "Guru", [0x00A51] = "Guru", [0x00A5E] = "Guru", [0x00AD0] = "Gujr", [0x00B9C] = "Taml", [0x00BD0] = "Taml", [0x00BD7] = "Taml", [0x00DBD] = "Sinh", [0x00DCA] = "Sinh", [0x00DD6] = "Sinh", [0x00E3F] = "Zyyy", [0x00E84] = "Laoo", [0x00EA5] = "Laoo", [0x00EC6] = "Laoo", [0x010C7] = "Geor", [0x010CD] = "Geor", [0x010FB] = "Zyyy", [0x01258] = "Ethi", [0x012C0] = "Ethi", [0x0171F] = "Tglg", [0x01804] = "Mong", [0x01805] = "Zyyy", [0x01940] = "Limb", [0x01CD3] = "Zyyy", [0x01CE1] = "Zyyy", [0x01CED] = "Zinh", [0x01CF4] = "Zinh", [0x01CFA] = "Zyyy", [0x01D2B] = "Cyrl", [0x01D78] = "Cyrl", [0x01DBF] = "Grek", [0x01F59] = "Grek", [0x01F5B] = "Grek", [0x01F5D] = "Grek", [0x02071] = "Latn", [0x0207F] = "Latn", [0x02126] = "Grek", [0x02132] = "Latn", [0x0214E] = "Latn", [0x02D27] = "Geor", [0x02D2D] = "Geor", [0x02D7F] = "Tfng", [0x03005] = "Hani", [0x03006] = "Zyyy", [0x03007] = "Hani", [0x030A0] = "Zyyy", [0x031EF] = "Zyyy", [0x032FF] = "Zyyy", [0x0A92E] = "Zyyy", [0x0A92F] = "Kali", [0x0A95F] = "Rjng", [0x0A9CF] = "Zyyy", [0x0AB5B] = "Zyyy", [0x0AB65] = "Grek", [0x0FB3E] = "Hebr", [0x0FEFF] = "Zyyy", [0x0FF70] = "Zyyy", [0x101A0] = "Grek", [0x101FD] = "Zinh", [0x102E0] = "Zinh", [0x1039F] = "Ugar", [0x1056F] = "Aghb", [0x10808] = "Cprt", [0x1083C] = "Cprt", [0x1083F] = "Cprt", [0x1091F] = "Phnx", [0x1093F] = "Lydi", [0x1107F] = "Brah", [0x110CD] = "Kthi", [0x11288] = "Mult", [0x1133B] = "Zinh", [0x11350] = "Gran", [0x11357] = "Gran", [0x1138B] = "Tutg", [0x1138E] = "Tutg", [0x113C2] = "Tutg", [0x113C5] = "Tutg", [0x118FF] = "Wara", [0x11909] = "Diak", [0x11D3A] = "Gonm", [0x11FB0] = "Lisu", [0x11FFF] = "Taml", [0x16FE0] = "Tang", [0x16FE1] = "Nshu", [0x16FE4] = "Kits", [0x18CFF] = "Kits", [0x1B000] = "Kana", [0x1B132] = "Hira", [0x1B155] = "Kana", [0x1D4A2] = "Zyyy", [0x1D4BB] = "Zyyy", [0x1D546] = "Zyyy", [0x1E08F] = "Cyrl", [0x1E2FF] = "Wcho", [0x1E5FF] = "Onao", [0x1EE24] = "Arab", [0x1EE27] = "Arab", [0x1EE39] = "Arab", [0x1EE3B] = "Arab", [0x1EE42] = "Arab", [0x1EE47] = "Arab", [0x1EE49] = "Arab", [0x1EE4B] = "Arab", [0x1EE54] = "Arab", [0x1EE57] = "Arab", [0x1EE59] = "Arab", [0x1EE5B] = "Arab", [0x1EE5D] = "Arab", [0x1EE5F] = "Arab", [0x1EE64] = "Arab", [0x1EE7E] = "Arab", [0x1F200] = "Hira", [0x1F7F0] = "Zyyy", [0x1FAC8] = "Zyyy", [0xE0001] = "Zyyy", }, ranges = { { 0x00000, 0x00040, "Zyyy" }, { 0x00041, 0x0005A, "Latn" }, { 0x0005B, 0x00060, "Zyyy" }, { 0x00061, 0x0007A, "Latn" }, { 0x0007B, 0x000A9, "Zyyy" }, { 0x000AB, 0x000B9, "Zyyy" }, { 0x000BB, 0x000BF, "Zyyy" }, { 0x000C0, 0x000D6, "Latn" }, { 0x000D8, 0x000F6, "Latn" }, { 0x000F8, 0x002B8, "Latn" }, { 0x002B9, 0x002DF, "Zyyy" }, { 0x002E0, 0x002E4, "Latn" }, { 0x002E5, 0x002E9, "Zyyy" }, { 0x002EA, 0x002EB, "Bopo" }, { 0x002EC, 0x002FF, "Zyyy" }, { 0x00300, 0x0036F, "Zinh" }, { 0x00370, 0x00373, "Grek" }, { 0x00375, 0x00377, "Grek" }, { 0x0037A, 0x0037D, "Grek" }, { 0x00388, 0x0038A, "Grek" }, { 0x0038E, 0x003A1, "Grek" }, { 0x003A3, 0x003E1, "Grek" }, { 0x003E2, 0x003EF, "Copt" }, { 0x003F0, 0x003FF, "Grek" }, { 0x00400, 0x00484, "Cyrl" }, { 0x00485, 0x00486, "Zinh" }, { 0x00487, 0x0052F, "Cyrl" }, { 0x00531, 0x00556, "Armn" }, { 0x00559, 0x0058A, "Armn" }, { 0x0058D, 0x0058F, "Armn" }, { 0x00591, 0x005C7, "Hebr" }, { 0x005D0, 0x005EA, "Hebr" }, { 0x005EF, 0x005F4, "Hebr" }, { 0x00600, 0x00604, "Arab" }, { 0x00606, 0x0060B, "Arab" }, { 0x0060D, 0x0061A, "Arab" }, { 0x0061C, 0x0061E, "Arab" }, { 0x00620, 0x0063F, "Arab" }, { 0x00641, 0x0064A, "Arab" }, { 0x0064B, 0x00655, "Zinh" }, { 0x00656, 0x0066F, "Arab" }, { 0x00671, 0x006DC, "Arab" }, { 0x006DE, 0x006FF, "Arab" }, { 0x00700, 0x0070D, "Syrc" }, { 0x0070F, 0x0074A, "Syrc" }, { 0x0074D, 0x0074F, "Syrc" }, { 0x00750, 0x0077F, "Arab" }, { 0x00780, 0x007B1, "Thaa" }, { 0x007C0, 0x007FA, "Nkoo" }, { 0x007FD, 0x007FF, "Nkoo" }, { 0x00800, 0x0082D, "Samr" }, { 0x00830, 0x0083E, "Samr" }, { 0x00840, 0x0085B, "Mand" }, { 0x00860, 0x0086A, "Syrc" }, { 0x00870, 0x00891, "Arab" }, { 0x00897, 0x008E1, "Arab" }, { 0x008E3, 0x008FF, "Arab" }, { 0x00900, 0x00950, "Deva" }, { 0x00951, 0x00954, "Zinh" }, { 0x00955, 0x00963, "Deva" }, { 0x00964, 0x00965, "Zyyy" }, { 0x00966, 0x0097F, "Deva" }, { 0x00980, 0x00983, "Beng" }, { 0x00985, 0x0098C, "Beng" }, { 0x0098F, 0x00990, "Beng" }, { 0x00993, 0x009A8, "Beng" }, { 0x009AA, 0x009B0, "Beng" }, { 0x009B6, 0x009B9, "Beng" }, { 0x009BC, 0x009C4, "Beng" }, { 0x009C7, 0x009C8, "Beng" }, { 0x009CB, 0x009CE, "Beng" }, { 0x009DC, 0x009DD, "Beng" }, { 0x009DF, 0x009E3, "Beng" }, { 0x009E6, 0x009FE, "Beng" }, { 0x00A01, 0x00A03, "Guru" }, { 0x00A05, 0x00A0A, "Guru" }, { 0x00A0F, 0x00A10, "Guru" }, { 0x00A13, 0x00A28, "Guru" }, { 0x00A2A, 0x00A30, "Guru" }, { 0x00A32, 0x00A33, "Guru" }, { 0x00A35, 0x00A36, "Guru" }, { 0x00A38, 0x00A39, "Guru" }, { 0x00A3E, 0x00A42, "Guru" }, { 0x00A47, 0x00A48, "Guru" }, { 0x00A4B, 0x00A4D, "Guru" }, { 0x00A59, 0x00A5C, "Guru" }, { 0x00A66, 0x00A76, "Guru" }, { 0x00A81, 0x00A83, "Gujr" }, { 0x00A85, 0x00A8D, "Gujr" }, { 0x00A8F, 0x00A91, "Gujr" }, { 0x00A93, 0x00AA8, "Gujr" }, { 0x00AAA, 0x00AB0, "Gujr" }, { 0x00AB2, 0x00AB3, "Gujr" }, { 0x00AB5, 0x00AB9, "Gujr" }, { 0x00ABC, 0x00AC5, "Gujr" }, { 0x00AC7, 0x00AC9, "Gujr" }, { 0x00ACB, 0x00ACD, "Gujr" }, { 0x00AE0, 0x00AE3, "Gujr" }, { 0x00AE6, 0x00AF1, "Gujr" }, { 0x00AF9, 0x00AFF, "Gujr" }, { 0x00B01, 0x00B03, "Orya" }, { 0x00B05, 0x00B0C, "Orya" }, { 0x00B0F, 0x00B10, "Orya" }, { 0x00B13, 0x00B28, "Orya" }, { 0x00B2A, 0x00B30, "Orya" }, { 0x00B32, 0x00B33, "Orya" }, { 0x00B35, 0x00B39, "Orya" }, { 0x00B3C, 0x00B44, "Orya" }, { 0x00B47, 0x00B48, "Orya" }, { 0x00B4B, 0x00B4D, "Orya" }, { 0x00B55, 0x00B57, "Orya" }, { 0x00B5C, 0x00B5D, "Orya" }, { 0x00B5F, 0x00B63, "Orya" }, { 0x00B66, 0x00B77, "Orya" }, { 0x00B82, 0x00B83, "Taml" }, { 0x00B85, 0x00B8A, "Taml" }, { 0x00B8E, 0x00B90, "Taml" }, { 0x00B92, 0x00B95, "Taml" }, { 0x00B99, 0x00B9A, "Taml" }, { 0x00B9E, 0x00B9F, "Taml" }, { 0x00BA3, 0x00BA4, "Taml" }, { 0x00BA8, 0x00BAA, "Taml" }, { 0x00BAE, 0x00BB9, "Taml" }, { 0x00BBE, 0x00BC2, "Taml" }, { 0x00BC6, 0x00BC8, "Taml" }, { 0x00BCA, 0x00BCD, "Taml" }, { 0x00BE6, 0x00BFA, "Taml" }, { 0x00C00, 0x00C0C, "Telu" }, { 0x00C0E, 0x00C10, "Telu" }, { 0x00C12, 0x00C28, "Telu" }, { 0x00C2A, 0x00C39, "Telu" }, { 0x00C3C, 0x00C44, "Telu" }, { 0x00C46, 0x00C48, "Telu" }, { 0x00C4A, 0x00C4D, "Telu" }, { 0x00C55, 0x00C56, "Telu" }, { 0x00C58, 0x00C5A, "Telu" }, { 0x00C5C, 0x00C5D, "Telu" }, { 0x00C60, 0x00C63, "Telu" }, { 0x00C66, 0x00C6F, "Telu" }, { 0x00C77, 0x00C7F, "Telu" }, { 0x00C80, 0x00C8C, "Knda" }, { 0x00C8E, 0x00C90, "Knda" }, { 0x00C92, 0x00CA8, "Knda" }, { 0x00CAA, 0x00CB3, "Knda" }, { 0x00CB5, 0x00CB9, "Knda" }, { 0x00CBC, 0x00CC4, "Knda" }, { 0x00CC6, 0x00CC8, "Knda" }, { 0x00CCA, 0x00CCD, "Knda" }, { 0x00CD5, 0x00CD6, "Knda" }, { 0x00CDC, 0x00CDE, "Knda" }, { 0x00CE0, 0x00CE3, "Knda" }, { 0x00CE6, 0x00CEF, "Knda" }, { 0x00CF1, 0x00CF3, "Knda" }, { 0x00D00, 0x00D0C, "Mlym" }, { 0x00D0E, 0x00D10, "Mlym" }, { 0x00D12, 0x00D44, "Mlym" }, { 0x00D46, 0x00D48, "Mlym" }, { 0x00D4A, 0x00D4F, "Mlym" }, { 0x00D54, 0x00D63, "Mlym" }, { 0x00D66, 0x00D7F, "Mlym" }, { 0x00D81, 0x00D83, "Sinh" }, { 0x00D85, 0x00D96, "Sinh" }, { 0x00D9A, 0x00DB1, "Sinh" }, { 0x00DB3, 0x00DBB, "Sinh" }, { 0x00DC0, 0x00DC6, "Sinh" }, { 0x00DCF, 0x00DD4, "Sinh" }, { 0x00DD8, 0x00DDF, "Sinh" }, { 0x00DE6, 0x00DEF, "Sinh" }, { 0x00DF2, 0x00DF4, "Sinh" }, { 0x00E01, 0x00E3A, "Thai" }, { 0x00E40, 0x00E5B, "Thai" }, { 0x00E81, 0x00E82, "Laoo" }, { 0x00E86, 0x00E8A, "Laoo" }, { 0x00E8C, 0x00EA3, "Laoo" }, { 0x00EA7, 0x00EBD, "Laoo" }, { 0x00EC0, 0x00EC4, "Laoo" }, { 0x00EC8, 0x00ECE, "Laoo" }, { 0x00ED0, 0x00ED9, "Laoo" }, { 0x00EDC, 0x00EDF, "Laoo" }, { 0x00F00, 0x00F47, "Tibt" }, { 0x00F49, 0x00F6C, "Tibt" }, { 0x00F71, 0x00F97, "Tibt" }, { 0x00F99, 0x00FBC, "Tibt" }, { 0x00FBE, 0x00FCC, "Tibt" }, { 0x00FCE, 0x00FD4, "Tibt" }, { 0x00FD5, 0x00FD8, "Zyyy" }, { 0x00FD9, 0x00FDA, "Tibt" }, { 0x01000, 0x0109F, "Mymr" }, { 0x010A0, 0x010C5, "Geor" }, { 0x010D0, 0x010FA, "Geor" }, { 0x010FC, 0x010FF, "Geor" }, { 0x01100, 0x011FF, "Hang" }, { 0x01200, 0x01248, "Ethi" }, { 0x0124A, 0x0124D, "Ethi" }, { 0x01250, 0x01256, "Ethi" }, { 0x0125A, 0x0125D, "Ethi" }, { 0x01260, 0x01288, "Ethi" }, { 0x0128A, 0x0128D, "Ethi" }, { 0x01290, 0x012B0, "Ethi" }, { 0x012B2, 0x012B5, "Ethi" }, { 0x012B8, 0x012BE, "Ethi" }, { 0x012C2, 0x012C5, "Ethi" }, { 0x012C8, 0x012D6, "Ethi" }, { 0x012D8, 0x01310, "Ethi" }, { 0x01312, 0x01315, "Ethi" }, { 0x01318, 0x0135A, "Ethi" }, { 0x0135D, 0x0137C, "Ethi" }, { 0x01380, 0x01399, "Ethi" }, { 0x013A0, 0x013F5, "Cher" }, { 0x013F8, 0x013FD, "Cher" }, { 0x01400, 0x0167F, "Cans" }, { 0x01680, 0x0169C, "Ogam" }, { 0x016A0, 0x016EA, "Runr" }, { 0x016EB, 0x016ED, "Zyyy" }, { 0x016EE, 0x016F8, "Runr" }, { 0x01700, 0x01715, "Tglg" }, { 0x01720, 0x01734, "Hano" }, { 0x01735, 0x01736, "Zyyy" }, { 0x01740, 0x01753, "Buhd" }, { 0x01760, 0x0176C, "Tagb" }, { 0x0176E, 0x01770, "Tagb" }, { 0x01772, 0x01773, "Tagb" }, { 0x01780, 0x017DD, "Khmr" }, { 0x017E0, 0x017E9, "Khmr" }, { 0x017F0, 0x017F9, "Khmr" }, { 0x01800, 0x01801, "Mong" }, { 0x01802, 0x01803, "Zyyy" }, { 0x01806, 0x01819, "Mong" }, { 0x01820, 0x01878, "Mong" }, { 0x01880, 0x018AA, "Mong" }, { 0x018B0, 0x018F5, "Cans" }, { 0x01900, 0x0191E, "Limb" }, { 0x01920, 0x0192B, "Limb" }, { 0x01930, 0x0193B, "Limb" }, { 0x01944, 0x0194F, "Limb" }, { 0x01950, 0x0196D, "Tale" }, { 0x01970, 0x01974, "Tale" }, { 0x01980, 0x019AB, "Talu" }, { 0x019B0, 0x019C9, "Talu" }, { 0x019D0, 0x019DA, "Talu" }, { 0x019DE, 0x019DF, "Talu" }, { 0x019E0, 0x019FF, "Khmr" }, { 0x01A00, 0x01A1B, "Bugi" }, { 0x01A1E, 0x01A1F, "Bugi" }, { 0x01A20, 0x01A5E, "Lana" }, { 0x01A60, 0x01A7C, "Lana" }, { 0x01A7F, 0x01A89, "Lana" }, { 0x01A90, 0x01A99, "Lana" }, { 0x01AA0, 0x01AAD, "Lana" }, { 0x01AB0, 0x01ADD, "Zinh" }, { 0x01AE0, 0x01AEB, "Zinh" }, { 0x01B00, 0x01B4C, "Bali" }, { 0x01B4E, 0x01B7F, "Bali" }, { 0x01B80, 0x01BBF, "Sund" }, { 0x01BC0, 0x01BF3, "Batk" }, { 0x01BFC, 0x01BFF, "Batk" }, { 0x01C00, 0x01C37, "Lepc" }, { 0x01C3B, 0x01C49, "Lepc" }, { 0x01C4D, 0x01C4F, "Lepc" }, { 0x01C50, 0x01C7F, "Olck" }, { 0x01C80, 0x01C8A, "Cyrl" }, { 0x01C90, 0x01CBA, "Geor" }, { 0x01CBD, 0x01CBF, "Geor" }, { 0x01CC0, 0x01CC7, "Sund" }, { 0x01CD0, 0x01CD2, "Zinh" }, { 0x01CD4, 0x01CE0, "Zinh" }, { 0x01CE2, 0x01CE8, "Zinh" }, { 0x01CE9, 0x01CEC, "Zyyy" }, { 0x01CEE, 0x01CF3, "Zyyy" }, { 0x01CF5, 0x01CF7, "Zyyy" }, { 0x01CF8, 0x01CF9, "Zinh" }, { 0x01D00, 0x01D25, "Latn" }, { 0x01D26, 0x01D2A, "Grek" }, { 0x01D2C, 0x01D5C, "Latn" }, { 0x01D5D, 0x01D61, "Grek" }, { 0x01D62, 0x01D65, "Latn" }, { 0x01D66, 0x01D6A, "Grek" }, { 0x01D6B, 0x01D77, "Latn" }, { 0x01D79, 0x01DBE, "Latn" }, { 0x01DC0, 0x01DFF, "Zinh" }, { 0x01E00, 0x01EFF, "Latn" }, { 0x01F00, 0x01F15, "Grek" }, { 0x01F18, 0x01F1D, "Grek" }, { 0x01F20, 0x01F45, "Grek" }, { 0x01F48, 0x01F4D, "Grek" }, { 0x01F50, 0x01F57, "Grek" }, { 0x01F5F, 0x01F7D, "Grek" }, { 0x01F80, 0x01FB4, "Grek" }, { 0x01FB6, 0x01FC4, "Grek" }, { 0x01FC6, 0x01FD3, "Grek" }, { 0x01FD6, 0x01FDB, "Grek" }, { 0x01FDD, 0x01FEF, "Grek" }, { 0x01FF2, 0x01FF4, "Grek" }, { 0x01FF6, 0x01FFE, "Grek" }, { 0x02000, 0x0200B, "Zyyy" }, { 0x0200C, 0x0200D, "Zinh" }, { 0x0200E, 0x02064, "Zyyy" }, { 0x02066, 0x02070, "Zyyy" }, { 0x02074, 0x0207E, "Zyyy" }, { 0x02080, 0x0208E, "Zyyy" }, { 0x02090, 0x0209C, "Latn" }, { 0x020A0, 0x020C1, "Zyyy" }, { 0x020D0, 0x020F0, "Zinh" }, { 0x02100, 0x02125, "Zyyy" }, { 0x02127, 0x02129, "Zyyy" }, { 0x0212A, 0x0212B, "Latn" }, { 0x0212C, 0x02131, "Zyyy" }, { 0x02133, 0x0214D, "Zyyy" }, { 0x0214F, 0x0215F, "Zyyy" }, { 0x02160, 0x02188, "Latn" }, { 0x02189, 0x0218B, "Zyyy" }, { 0x02190, 0x02429, "Zyyy" }, { 0x02440, 0x0244A, "Zyyy" }, { 0x02460, 0x027FF, "Zyyy" }, { 0x02800, 0x028FF, "Brai" }, { 0x02900, 0x02B73, "Zyyy" }, { 0x02B76, 0x02BFF, "Zyyy" }, { 0x02C00, 0x02C5F, "Glag" }, { 0x02C60, 0x02C7F, "Latn" }, { 0x02C80, 0x02CF3, "Copt" }, { 0x02CF9, 0x02CFF, "Copt" }, { 0x02D00, 0x02D25, "Geor" }, { 0x02D30, 0x02D67, "Tfng" }, { 0x02D6F, 0x02D70, "Tfng" }, { 0x02D80, 0x02D96, "Ethi" }, { 0x02DA0, 0x02DA6, "Ethi" }, { 0x02DA8, 0x02DAE, "Ethi" }, { 0x02DB0, 0x02DB6, "Ethi" }, { 0x02DB8, 0x02DBE, "Ethi" }, { 0x02DC0, 0x02DC6, "Ethi" }, { 0x02DC8, 0x02DCE, "Ethi" }, { 0x02DD0, 0x02DD6, "Ethi" }, { 0x02DD8, 0x02DDE, "Ethi" }, { 0x02DE0, 0x02DFF, "Cyrl" }, { 0x02E00, 0x02E5D, "Zyyy" }, { 0x02E80, 0x02E99, "Hani" }, { 0x02E9B, 0x02EF3, "Hani" }, { 0x02F00, 0x02FD5, "Hani" }, { 0x02FF0, 0x03004, "Zyyy" }, { 0x03008, 0x03020, "Zyyy" }, { 0x03021, 0x03029, "Hani" }, { 0x0302A, 0x0302D, "Zinh" }, { 0x0302E, 0x0302F, "Hang" }, { 0x03030, 0x03037, "Zyyy" }, { 0x03038, 0x0303B, "Hani" }, { 0x0303C, 0x0303F, "Zyyy" }, { 0x03041, 0x03096, "Hira" }, { 0x03099, 0x0309A, "Zinh" }, { 0x0309B, 0x0309C, "Zyyy" }, { 0x0309D, 0x0309F, "Hira" }, { 0x030A1, 0x030FA, "Kana" }, { 0x030FB, 0x030FC, "Zyyy" }, { 0x030FD, 0x030FF, "Kana" }, { 0x03105, 0x0312F, "Bopo" }, { 0x03131, 0x0318E, "Hang" }, { 0x03190, 0x0319F, "Zyyy" }, { 0x031A0, 0x031BF, "Bopo" }, { 0x031C0, 0x031E5, "Zyyy" }, { 0x031F0, 0x031FF, "Kana" }, { 0x03200, 0x0321E, "Hang" }, { 0x03220, 0x0325F, "Zyyy" }, { 0x03260, 0x0327E, "Hang" }, { 0x0327F, 0x032CF, "Zyyy" }, { 0x032D0, 0x032FE, "Kana" }, { 0x03300, 0x03357, "Kana" }, { 0x03358, 0x033FF, "Zyyy" }, { 0x03400, 0x04DBF, "Hani" }, { 0x04DC0, 0x04DFF, "Zyyy" }, { 0x04E00, 0x09FFF, "Hani" }, { 0x0A000, 0x0A48C, "Yiii" }, { 0x0A490, 0x0A4C6, "Yiii" }, { 0x0A4D0, 0x0A4FF, "Lisu" }, { 0x0A500, 0x0A62B, "Vaii" }, { 0x0A640, 0x0A69F, "Cyrl" }, { 0x0A6A0, 0x0A6F7, "Bamu" }, { 0x0A700, 0x0A721, "Zyyy" }, { 0x0A722, 0x0A787, "Latn" }, { 0x0A788, 0x0A78A, "Zyyy" }, { 0x0A78B, 0x0A7DC, "Latn" }, { 0x0A7F1, 0x0A7FF, "Latn" }, { 0x0A800, 0x0A82C, "Sylo" }, { 0x0A830, 0x0A839, "Zyyy" }, { 0x0A840, 0x0A877, "Phag" }, { 0x0A880, 0x0A8C5, "Saur" }, { 0x0A8CE, 0x0A8D9, "Saur" }, { 0x0A8E0, 0x0A8FF, "Deva" }, { 0x0A900, 0x0A92D, "Kali" }, { 0x0A930, 0x0A953, "Rjng" }, { 0x0A960, 0x0A97C, "Hang" }, { 0x0A980, 0x0A9CD, "Java" }, { 0x0A9D0, 0x0A9D9, "Java" }, { 0x0A9DE, 0x0A9DF, "Java" }, { 0x0A9E0, 0x0A9FE, "Mymr" }, { 0x0AA00, 0x0AA36, "Cham" }, { 0x0AA40, 0x0AA4D, "Cham" }, { 0x0AA50, 0x0AA59, "Cham" }, { 0x0AA5C, 0x0AA5F, "Cham" }, { 0x0AA60, 0x0AA7F, "Mymr" }, { 0x0AA80, 0x0AAC2, "Tavt" }, { 0x0AADB, 0x0AADF, "Tavt" }, { 0x0AAE0, 0x0AAF6, "Mtei" }, { 0x0AB01, 0x0AB06, "Ethi" }, { 0x0AB09, 0x0AB0E, "Ethi" }, { 0x0AB11, 0x0AB16, "Ethi" }, { 0x0AB20, 0x0AB26, "Ethi" }, { 0x0AB28, 0x0AB2E, "Ethi" }, { 0x0AB30, 0x0AB5A, "Latn" }, { 0x0AB5C, 0x0AB64, "Latn" }, { 0x0AB66, 0x0AB69, "Latn" }, { 0x0AB6A, 0x0AB6B, "Zyyy" }, { 0x0AB70, 0x0ABBF, "Cher" }, { 0x0ABC0, 0x0ABED, "Mtei" }, { 0x0ABF0, 0x0ABF9, "Mtei" }, { 0x0AC00, 0x0D7A3, "Hang" }, { 0x0D7B0, 0x0D7C6, "Hang" }, { 0x0D7CB, 0x0D7FB, "Hang" }, { 0x0F900, 0x0FA6D, "Hani" }, { 0x0FA70, 0x0FAD9, "Hani" }, { 0x0FB00, 0x0FB06, "Latn" }, { 0x0FB13, 0x0FB17, "Armn" }, { 0x0FB1D, 0x0FB36, "Hebr" }, { 0x0FB38, 0x0FB3C, "Hebr" }, { 0x0FB40, 0x0FB41, "Hebr" }, { 0x0FB43, 0x0FB44, "Hebr" }, { 0x0FB46, 0x0FB4F, "Hebr" }, { 0x0FB50, 0x0FD3D, "Arab" }, { 0x0FD3E, 0x0FD3F, "Zyyy" }, { 0x0FD40, 0x0FDCF, "Arab" }, { 0x0FDF0, 0x0FDFF, "Arab" }, { 0x0FE00, 0x0FE0F, "Zinh" }, { 0x0FE10, 0x0FE19, "Zyyy" }, { 0x0FE20, 0x0FE2D, "Zinh" }, { 0x0FE2E, 0x0FE2F, "Cyrl" }, { 0x0FE30, 0x0FE52, "Zyyy" }, { 0x0FE54, 0x0FE66, "Zyyy" }, { 0x0FE68, 0x0FE6B, "Zyyy" }, { 0x0FE70, 0x0FE74, "Arab" }, { 0x0FE76, 0x0FEFC, "Arab" }, { 0x0FF01, 0x0FF20, "Zyyy" }, { 0x0FF21, 0x0FF3A, "Latn" }, { 0x0FF3B, 0x0FF40, "Zyyy" }, { 0x0FF41, 0x0FF5A, "Latn" }, { 0x0FF5B, 0x0FF65, "Zyyy" }, { 0x0FF66, 0x0FF6F, "Kana" }, { 0x0FF71, 0x0FF9D, "Kana" }, { 0x0FF9E, 0x0FF9F, "Zyyy" }, { 0x0FFA0, 0x0FFBE, "Hang" }, { 0x0FFC2, 0x0FFC7, "Hang" }, { 0x0FFCA, 0x0FFCF, "Hang" }, { 0x0FFD2, 0x0FFD7, "Hang" }, { 0x0FFDA, 0x0FFDC, "Hang" }, { 0x0FFE0, 0x0FFE6, "Zyyy" }, { 0x0FFE8, 0x0FFEE, "Zyyy" }, { 0x0FFF9, 0x0FFFD, "Zyyy" }, { 0x10000, 0x1000B, "Linb" }, { 0x1000D, 0x10026, "Linb" }, { 0x10028, 0x1003A, "Linb" }, { 0x1003C, 0x1003D, "Linb" }, { 0x1003F, 0x1004D, "Linb" }, { 0x10050, 0x1005D, "Linb" }, { 0x10080, 0x100FA, "Linb" }, { 0x10100, 0x10102, "Zyyy" }, { 0x10107, 0x10133, "Zyyy" }, { 0x10137, 0x1013F, "Zyyy" }, { 0x10140, 0x1018E, "Grek" }, { 0x10190, 0x1019C, "Zyyy" }, { 0x101D0, 0x101FC, "Zyyy" }, { 0x10280, 0x1029C, "Lyci" }, { 0x102A0, 0x102D0, "Cari" }, { 0x102E1, 0x102FB, "Zyyy" }, { 0x10300, 0x10323, "Ital" }, { 0x1032D, 0x1032F, "Ital" }, { 0x10330, 0x1034A, "Goth" }, { 0x10350, 0x1037A, "Perm" }, { 0x10380, 0x1039D, "Ugar" }, { 0x103A0, 0x103C3, "Xpeo" }, { 0x103C8, 0x103D5, "Xpeo" }, { 0x10400, 0x1044F, "Dsrt" }, { 0x10450, 0x1047F, "Shaw" }, { 0x10480, 0x1049D, "Osma" }, { 0x104A0, 0x104A9, "Osma" }, { 0x104B0, 0x104D3, "Osge" }, { 0x104D8, 0x104FB, "Osge" }, { 0x10500, 0x10527, "Elba" }, { 0x10530, 0x10563, "Aghb" }, { 0x10570, 0x1057A, "Vith" }, { 0x1057C, 0x1058A, "Vith" }, { 0x1058C, 0x10592, "Vith" }, { 0x10594, 0x10595, "Vith" }, { 0x10597, 0x105A1, "Vith" }, { 0x105A3, 0x105B1, "Vith" }, { 0x105B3, 0x105B9, "Vith" }, { 0x105BB, 0x105BC, "Vith" }, { 0x105C0, 0x105F3, "Todr" }, { 0x10600, 0x10736, "Lina" }, { 0x10740, 0x10755, "Lina" }, { 0x10760, 0x10767, "Lina" }, { 0x10780, 0x10785, "Latn" }, { 0x10787, 0x107B0, "Latn" }, { 0x107B2, 0x107BA, "Latn" }, { 0x10800, 0x10805, "Cprt" }, { 0x1080A, 0x10835, "Cprt" }, { 0x10837, 0x10838, "Cprt" }, { 0x10840, 0x10855, "Armi" }, { 0x10857, 0x1085F, "Armi" }, { 0x10860, 0x1087F, "Palm" }, { 0x10880, 0x1089E, "Nbat" }, { 0x108A7, 0x108AF, "Nbat" }, { 0x108E0, 0x108F2, "Hatr" }, { 0x108F4, 0x108F5, "Hatr" }, { 0x108FB, 0x108FF, "Hatr" }, { 0x10900, 0x1091B, "Phnx" }, { 0x10920, 0x10939, "Lydi" }, { 0x10940, 0x10959, "Sidt" }, { 0x10980, 0x1099F, "Mero" }, { 0x109A0, 0x109B7, "Merc" }, { 0x109BC, 0x109CF, "Merc" }, { 0x109D2, 0x109FF, "Merc" }, { 0x10A00, 0x10A03, "Khar" }, { 0x10A05, 0x10A06, "Khar" }, { 0x10A0C, 0x10A13, "Khar" }, { 0x10A15, 0x10A17, "Khar" }, { 0x10A19, 0x10A35, "Khar" }, { 0x10A38, 0x10A3A, "Khar" }, { 0x10A3F, 0x10A48, "Khar" }, { 0x10A50, 0x10A58, "Khar" }, { 0x10A60, 0x10A7F, "Sarb" }, { 0x10A80, 0x10A9F, "Narb" }, { 0x10AC0, 0x10AE6, "Mani" }, { 0x10AEB, 0x10AF6, "Mani" }, { 0x10B00, 0x10B35, "Avst" }, { 0x10B39, 0x10B3F, "Avst" }, { 0x10B40, 0x10B55, "Prti" }, { 0x10B58, 0x10B5F, "Prti" }, { 0x10B60, 0x10B72, "Phli" }, { 0x10B78, 0x10B7F, "Phli" }, { 0x10B80, 0x10B91, "Phlp" }, { 0x10B99, 0x10B9C, "Phlp" }, { 0x10BA9, 0x10BAF, "Phlp" }, { 0x10C00, 0x10C48, "Orkh" }, { 0x10C80, 0x10CB2, "Hung" }, { 0x10CC0, 0x10CF2, "Hung" }, { 0x10CFA, 0x10CFF, "Hung" }, { 0x10D00, 0x10D27, "Rohg" }, { 0x10D30, 0x10D39, "Rohg" }, { 0x10D40, 0x10D65, "Gara" }, { 0x10D69, 0x10D85, "Gara" }, { 0x10D8E, 0x10D8F, "Gara" }, { 0x10E60, 0x10E7E, "Arab" }, { 0x10E80, 0x10EA9, "Yezi" }, { 0x10EAB, 0x10EAD, "Yezi" }, { 0x10EB0, 0x10EB1, "Yezi" }, { 0x10EC2, 0x10EC7, "Arab" }, { 0x10ED0, 0x10ED8, "Arab" }, { 0x10EFA, 0x10EFF, "Arab" }, { 0x10F00, 0x10F27, "Sogo" }, { 0x10F30, 0x10F59, "Sogd" }, { 0x10F70, 0x10F89, "Ougr" }, { 0x10FB0, 0x10FCB, "Chrs" }, { 0x10FE0, 0x10FF6, "Elym" }, { 0x11000, 0x1104D, "Brah" }, { 0x11052, 0x11075, "Brah" }, { 0x11080, 0x110C2, "Kthi" }, { 0x110D0, 0x110E8, "Sora" }, { 0x110F0, 0x110F9, "Sora" }, { 0x11100, 0x11134, "Cakm" }, { 0x11136, 0x11147, "Cakm" }, { 0x11150, 0x11176, "Mahj" }, { 0x11180, 0x111DF, "Shrd" }, { 0x111E1, 0x111F4, "Sinh" }, { 0x11200, 0x11211, "Khoj" }, { 0x11213, 0x11241, "Khoj" }, { 0x11280, 0x11286, "Mult" }, { 0x1128A, 0x1128D, "Mult" }, { 0x1128F, 0x1129D, "Mult" }, { 0x1129F, 0x112A9, "Mult" }, { 0x112B0, 0x112EA, "Sind" }, { 0x112F0, 0x112F9, "Sind" }, { 0x11300, 0x11303, "Gran" }, { 0x11305, 0x1130C, "Gran" }, { 0x1130F, 0x11310, "Gran" }, { 0x11313, 0x11328, "Gran" }, { 0x1132A, 0x11330, "Gran" }, { 0x11332, 0x11333, "Gran" }, { 0x11335, 0x11339, "Gran" }, { 0x1133C, 0x11344, "Gran" }, { 0x11347, 0x11348, "Gran" }, { 0x1134B, 0x1134D, "Gran" }, { 0x1135D, 0x11363, "Gran" }, { 0x11366, 0x1136C, "Gran" }, { 0x11370, 0x11374, "Gran" }, { 0x11380, 0x11389, "Tutg" }, { 0x11390, 0x113B5, "Tutg" }, { 0x113B7, 0x113C0, "Tutg" }, { 0x113C7, 0x113CA, "Tutg" }, { 0x113CC, 0x113D5, "Tutg" }, { 0x113D7, 0x113D8, "Tutg" }, { 0x113E1, 0x113E2, "Tutg" }, { 0x11400, 0x1145B, "Newa" }, { 0x1145D, 0x11461, "Newa" }, { 0x11480, 0x114C7, "Tirh" }, { 0x114D0, 0x114D9, "Tirh" }, { 0x11580, 0x115B5, "Sidd" }, { 0x115B8, 0x115DD, "Sidd" }, { 0x11600, 0x11644, "Modi" }, { 0x11650, 0x11659, "Modi" }, { 0x11660, 0x1166C, "Mong" }, { 0x11680, 0x116B9, "Takr" }, { 0x116C0, 0x116C9, "Takr" }, { 0x116D0, 0x116E3, "Mymr" }, { 0x11700, 0x1171A, "Ahom" }, { 0x1171D, 0x1172B, "Ahom" }, { 0x11730, 0x11746, "Ahom" }, { 0x11800, 0x1183B, "Dogr" }, { 0x118A0, 0x118F2, "Wara" }, { 0x11900, 0x11906, "Diak" }, { 0x1190C, 0x11913, "Diak" }, { 0x11915, 0x11916, "Diak" }, { 0x11918, 0x11935, "Diak" }, { 0x11937, 0x11938, "Diak" }, { 0x1193B, 0x11946, "Diak" }, { 0x11950, 0x11959, "Diak" }, { 0x119A0, 0x119A7, "Nand" }, { 0x119AA, 0x119D7, "Nand" }, { 0x119DA, 0x119E4, "Nand" }, { 0x11A00, 0x11A47, "Zanb" }, { 0x11A50, 0x11AA2, "Soyo" }, { 0x11AB0, 0x11ABF, "Cans" }, { 0x11AC0, 0x11AF8, "Pauc" }, { 0x11B00, 0x11B09, "Deva" }, { 0x11B60, 0x11B67, "Shrd" }, { 0x11BC0, 0x11BE1, "Sunu" }, { 0x11BF0, 0x11BF9, "Sunu" }, { 0x11C00, 0x11C08, "Bhks" }, { 0x11C0A, 0x11C36, "Bhks" }, { 0x11C38, 0x11C45, "Bhks" }, { 0x11C50, 0x11C6C, "Bhks" }, { 0x11C70, 0x11C8F, "Marc" }, { 0x11C92, 0x11CA7, "Marc" }, { 0x11CA9, 0x11CB6, "Marc" }, { 0x11D00, 0x11D06, "Gonm" }, { 0x11D08, 0x11D09, "Gonm" }, { 0x11D0B, 0x11D36, "Gonm" }, { 0x11D3C, 0x11D3D, "Gonm" }, { 0x11D3F, 0x11D47, "Gonm" }, { 0x11D50, 0x11D59, "Gonm" }, { 0x11D60, 0x11D65, "Gong" }, { 0x11D67, 0x11D68, "Gong" }, { 0x11D6A, 0x11D8E, "Gong" }, { 0x11D90, 0x11D91, "Gong" }, { 0x11D93, 0x11D98, "Gong" }, { 0x11DA0, 0x11DA9, "Gong" }, { 0x11DB0, 0x11DDB, "Tols" }, { 0x11DE0, 0x11DE9, "Tols" }, { 0x11EE0, 0x11EF8, "Maka" }, { 0x11F00, 0x11F10, "Kawi" }, { 0x11F12, 0x11F3A, "Kawi" }, { 0x11F3E, 0x11F5A, "Kawi" }, { 0x11FC0, 0x11FF1, "Taml" }, { 0x12000, 0x12399, "Xsux" }, { 0x12400, 0x1246E, "Xsux" }, { 0x12470, 0x12474, "Xsux" }, { 0x12480, 0x12543, "Xsux" }, { 0x12F90, 0x12FF2, "Cpmn" }, { 0x13000, 0x13455, "Egyp" }, { 0x13460, 0x143FA, "Egyp" }, { 0x14400, 0x14646, "Hluw" }, { 0x16100, 0x16139, "Gukh" }, { 0x16800, 0x16A38, "Bamu" }, { 0x16A40, 0x16A5E, "Mroo" }, { 0x16A60, 0x16A69, "Mroo" }, { 0x16A6E, 0x16A6F, "Mroo" }, { 0x16A70, 0x16ABE, "Tnsa" }, { 0x16AC0, 0x16AC9, "Tnsa" }, { 0x16AD0, 0x16AED, "Bass" }, { 0x16AF0, 0x16AF5, "Bass" }, { 0x16B00, 0x16B45, "Hmng" }, { 0x16B50, 0x16B59, "Hmng" }, { 0x16B5B, 0x16B61, "Hmng" }, { 0x16B63, 0x16B77, "Hmng" }, { 0x16B7D, 0x16B8F, "Hmng" }, { 0x16D40, 0x16D79, "Krai" }, { 0x16E40, 0x16E9A, "Medf" }, { 0x16EA0, 0x16EB8, "Berf" }, { 0x16EBB, 0x16ED3, "Berf" }, { 0x16F00, 0x16F4A, "Plrd" }, { 0x16F4F, 0x16F87, "Plrd" }, { 0x16F8F, 0x16F9F, "Plrd" }, { 0x16FE2, 0x16FE3, "Hani" }, { 0x16FF0, 0x16FF6, "Hani" }, { 0x17000, 0x18AFF, "Tang" }, { 0x18B00, 0x18CD5, "Kits" }, { 0x18D00, 0x18D1E, "Tang" }, { 0x18D80, 0x18DF2, "Tang" }, { 0x1AFF0, 0x1AFF3, "Kana" }, { 0x1AFF5, 0x1AFFB, "Kana" }, { 0x1AFFD, 0x1AFFE, "Kana" }, { 0x1B001, 0x1B11F, "Hira" }, { 0x1B120, 0x1B122, "Kana" }, { 0x1B150, 0x1B152, "Hira" }, { 0x1B164, 0x1B167, "Kana" }, { 0x1B170, 0x1B2FB, "Nshu" }, { 0x1BC00, 0x1BC6A, "Dupl" }, { 0x1BC70, 0x1BC7C, "Dupl" }, { 0x1BC80, 0x1BC88, "Dupl" }, { 0x1BC90, 0x1BC99, "Dupl" }, { 0x1BC9C, 0x1BC9F, "Dupl" }, { 0x1BCA0, 0x1BCA3, "Zyyy" }, { 0x1CC00, 0x1CCFC, "Zyyy" }, { 0x1CD00, 0x1CEB3, "Zyyy" }, { 0x1CEBA, 0x1CED0, "Zyyy" }, { 0x1CEE0, 0x1CEF0, "Zyyy" }, { 0x1CF00, 0x1CF2D, "Zinh" }, { 0x1CF30, 0x1CF46, "Zinh" }, { 0x1CF50, 0x1CFC3, "Zyyy" }, { 0x1D000, 0x1D0F5, "Zyyy" }, { 0x1D100, 0x1D126, "Zyyy" }, { 0x1D129, 0x1D166, "Zyyy" }, { 0x1D167, 0x1D169, "Zinh" }, { 0x1D16A, 0x1D17A, "Zyyy" }, { 0x1D17B, 0x1D182, "Zinh" }, { 0x1D183, 0x1D184, "Zyyy" }, { 0x1D185, 0x1D18B, "Zinh" }, { 0x1D18C, 0x1D1A9, "Zyyy" }, { 0x1D1AA, 0x1D1AD, "Zinh" }, { 0x1D1AE, 0x1D1EA, "Zyyy" }, { 0x1D200, 0x1D245, "Grek" }, { 0x1D2C0, 0x1D2D3, "Zyyy" }, { 0x1D2E0, 0x1D2F3, "Zyyy" }, { 0x1D300, 0x1D356, "Zyyy" }, { 0x1D360, 0x1D378, "Zyyy" }, { 0x1D400, 0x1D454, "Zyyy" }, { 0x1D456, 0x1D49C, "Zyyy" }, { 0x1D49E, 0x1D49F, "Zyyy" }, { 0x1D4A5, 0x1D4A6, "Zyyy" }, { 0x1D4A9, 0x1D4AC, "Zyyy" }, { 0x1D4AE, 0x1D4B9, "Zyyy" }, { 0x1D4BD, 0x1D4C3, "Zyyy" }, { 0x1D4C5, 0x1D505, "Zyyy" }, { 0x1D507, 0x1D50A, "Zyyy" }, { 0x1D50D, 0x1D514, "Zyyy" }, { 0x1D516, 0x1D51C, "Zyyy" }, { 0x1D51E, 0x1D539, "Zyyy" }, { 0x1D53B, 0x1D53E, "Zyyy" }, { 0x1D540, 0x1D544, "Zyyy" }, { 0x1D54A, 0x1D550, "Zyyy" }, { 0x1D552, 0x1D6A5, "Zyyy" }, { 0x1D6A8, 0x1D7CB, "Zyyy" }, { 0x1D7CE, 0x1D7FF, "Zyyy" }, { 0x1D800, 0x1DA8B, "Sgnw" }, { 0x1DA9B, 0x1DA9F, "Sgnw" }, { 0x1DAA1, 0x1DAAF, "Sgnw" }, { 0x1DF00, 0x1DF1E, "Latn" }, { 0x1DF25, 0x1DF2A, "Latn" }, { 0x1E000, 0x1E006, "Glag" }, { 0x1E008, 0x1E018, "Glag" }, { 0x1E01B, 0x1E021, "Glag" }, { 0x1E023, 0x1E024, "Glag" }, { 0x1E026, 0x1E02A, "Glag" }, { 0x1E030, 0x1E06D, "Cyrl" }, { 0x1E100, 0x1E12C, "Hmnp" }, { 0x1E130, 0x1E13D, "Hmnp" }, { 0x1E140, 0x1E149, "Hmnp" }, { 0x1E14E, 0x1E14F, "Hmnp" }, { 0x1E290, 0x1E2AE, "Toto" }, { 0x1E2C0, 0x1E2F9, "Wcho" }, { 0x1E4D0, 0x1E4F9, "Nagm" }, { 0x1E5D0, 0x1E5FA, "Onao" }, { 0x1E6C0, 0x1E6DE, "Tayo" }, { 0x1E6E0, 0x1E6F5, "Tayo" }, { 0x1E6FE, 0x1E6FF, "Tayo" }, { 0x1E7E0, 0x1E7E6, "Ethi" }, { 0x1E7E8, 0x1E7EB, "Ethi" }, { 0x1E7ED, 0x1E7EE, "Ethi" }, { 0x1E7F0, 0x1E7FE, "Ethi" }, { 0x1E800, 0x1E8C4, "Mend" }, { 0x1E8C7, 0x1E8D6, "Mend" }, { 0x1E900, 0x1E94B, "Adlm" }, { 0x1E950, 0x1E959, "Adlm" }, { 0x1E95E, 0x1E95F, "Adlm" }, { 0x1EC71, 0x1ECB4, "Zyyy" }, { 0x1ED01, 0x1ED3D, "Zyyy" }, { 0x1EE00, 0x1EE03, "Arab" }, { 0x1EE05, 0x1EE1F, "Arab" }, { 0x1EE21, 0x1EE22, "Arab" }, { 0x1EE29, 0x1EE32, "Arab" }, { 0x1EE34, 0x1EE37, "Arab" }, { 0x1EE4D, 0x1EE4F, "Arab" }, { 0x1EE51, 0x1EE52, "Arab" }, { 0x1EE61, 0x1EE62, "Arab" }, { 0x1EE67, 0x1EE6A, "Arab" }, { 0x1EE6C, 0x1EE72, "Arab" }, { 0x1EE74, 0x1EE77, "Arab" }, { 0x1EE79, 0x1EE7C, "Arab" }, { 0x1EE80, 0x1EE89, "Arab" }, { 0x1EE8B, 0x1EE9B, "Arab" }, { 0x1EEA1, 0x1EEA3, "Arab" }, { 0x1EEA5, 0x1EEA9, "Arab" }, { 0x1EEAB, 0x1EEBB, "Arab" }, { 0x1EEF0, 0x1EEF1, "Arab" }, { 0x1F000, 0x1F02B, "Zyyy" }, { 0x1F030, 0x1F093, "Zyyy" }, { 0x1F0A0, 0x1F0AE, "Zyyy" }, { 0x1F0B1, 0x1F0BF, "Zyyy" }, { 0x1F0C1, 0x1F0CF, "Zyyy" }, { 0x1F0D1, 0x1F0F5, "Zyyy" }, { 0x1F100, 0x1F1AD, "Zyyy" }, { 0x1F1E6, 0x1F1FF, "Zyyy" }, { 0x1F201, 0x1F202, "Zyyy" }, { 0x1F210, 0x1F23B, "Zyyy" }, { 0x1F240, 0x1F248, "Zyyy" }, { 0x1F250, 0x1F251, "Zyyy" }, { 0x1F260, 0x1F265, "Zyyy" }, { 0x1F300, 0x1F6D8, "Zyyy" }, { 0x1F6DC, 0x1F6EC, "Zyyy" }, { 0x1F6F0, 0x1F6FC, "Zyyy" }, { 0x1F700, 0x1F7D9, "Zyyy" }, { 0x1F7E0, 0x1F7EB, "Zyyy" }, { 0x1F800, 0x1F80B, "Zyyy" }, { 0x1F810, 0x1F847, "Zyyy" }, { 0x1F850, 0x1F859, "Zyyy" }, { 0x1F860, 0x1F887, "Zyyy" }, { 0x1F890, 0x1F8AD, "Zyyy" }, { 0x1F8B0, 0x1F8BB, "Zyyy" }, { 0x1F8C0, 0x1F8C1, "Zyyy" }, { 0x1F8D0, 0x1F8D8, "Zyyy" }, { 0x1F900, 0x1FA57, "Zyyy" }, { 0x1FA60, 0x1FA6D, "Zyyy" }, { 0x1FA70, 0x1FA7C, "Zyyy" }, { 0x1FA80, 0x1FA8A, "Zyyy" }, { 0x1FA8E, 0x1FAC6, "Zyyy" }, { 0x1FACD, 0x1FADC, "Zyyy" }, { 0x1FADF, 0x1FAEA, "Zyyy" }, { 0x1FAEF, 0x1FAF8, "Zyyy" }, { 0x1FB00, 0x1FB92, "Zyyy" }, { 0x1FB94, 0x1FBFA, "Zyyy" }, { 0x20000, 0x2A6DF, "Hani" }, { 0x2A700, 0x2B81D, "Hani" }, { 0x2B820, 0x2CEAD, "Hani" }, { 0x2CEB0, 0x2EBE0, "Hani" }, { 0x2EBF0, 0x2EE5D, "Hani" }, { 0x2F800, 0x2FA1D, "Hani" }, { 0x30000, 0x3134A, "Hani" }, { 0x31350, 0x33479, "Hani" }, { 0xE0020, 0xE007F, "Zyyy" }, { 0xE0100, 0xE01EF, "Zinh" }, }, -- Scripts.txt gives full names; here we consider them aliases to save space. aliases = { Adlm = "Adlam", Aghb = "Caucasian Albanian", Ahom = "Ahom", Arab = "Arabic", Armi = "Imperial Aramaic", Armn = "Armenian", Avst = "Avestan", Bali = "Balinese", Bamu = "Bamum", Bass = "Bassa Vah", Batk = "Batak", Beng = "Bengali", Berf = "Beria Erfe", Bhks = "Bhaiksuki", Bopo = "Bopomofo", Brah = "Brahmi", Brai = "Braille", Bugi = "Buginese", Buhd = "Buhid", Cakm = "Chakma", Cans = "Canadian Aboriginal", Cari = "Carian", Cham = "Cham", Cher = "Cherokee", Chrs = "Chorasmian", Copt = "Coptic", Cpmn = "Cypro Minoan", Cprt = "Cypriot", Cyrl = "Cyrillic", Deva = "Devanagari", Diak = "Dives Akuru", Dogr = "Dogra", Dsrt = "Deseret", Dupl = "Duployan", Egyp = "Egyptian Hieroglyphs", Elba = "Elbasan", Elym = "Elymaic", Ethi = "Ethiopic", Gara = "Garay", Geor = "Georgian", Glag = "Glagolitic", Gong = "Gunjala Gondi", Gonm = "Masaram Gondi", Goth = "Gothic", Gran = "Grantha", Grek = "Greek", Gujr = "Gujarati", Gukh = "Gurung Khema", Guru = "Gurmukhi", Hang = "Hangul", Hani = "Han", Hano = "Hanunoo", Hatr = "Hatran", Hebr = "Hebrew", Hira = "Hiragana", Hluw = "Anatolian Hieroglyphs", Hmng = "Pahawh Hmong", Hmnp = "Nyiakeng Puachue Hmong", Hrkt = "Katakana Or Hiragana", Hung = "Old Hungarian", Ital = "Old Italic", Java = "Javanese", Kali = "Kayah Li", Kana = "Katakana", Kawi = "Kawi", Khar = "Kharoshthi", Khmr = "Khmer", Khoj = "Khojki", Kits = "Khitan Small Script", Knda = "Kannada", Krai = "Kirat Rai", Kthi = "Kaithi", Lana = "Tai Tham", Laoo = "Lao", Latn = "Latin", Lepc = "Lepcha", Limb = "Limbu", Lina = "Linear A", Linb = "Linear B", Lisu = "Lisu", Lyci = "Lycian", Lydi = "Lydian", Mahj = "Mahajani", Maka = "Makasar", Mand = "Mandaic", Mani = "Manichaean", Marc = "Marchen", Medf = "Medefaidrin", Mend = "Mende Kikakui", Merc = "Meroitic Cursive", Mero = "Meroitic Hieroglyphs", Mlym = "Malayalam", Modi = "Modi", Mong = "Mongolian", Mroo = "Mro", Mtei = "Meetei Mayek", Mult = "Multani", Mymr = "Myanmar", Nagm = "Nag Mundari", Nand = "Nandinagari", Narb = "Old North Arabian", Nbat = "Nabataean", Newa = "Newa", Nkoo = "NKo", Nshu = "Nushu", Ogam = "Ogham", Olck = "Ol Chiki", Onao = "Ol Onal", Orkh = "Old Turkic", Orya = "Oriya", Osge = "Osage", Osma = "Osmanya", Ougr = "Old Uyghur", Palm = "Palmyrene", Pauc = "Pau Cin Hau", Perm = "Old Permic", Phag = "Phags Pa", Phli = "Inscriptional Pahlavi", Phlp = "Psalter Pahlavi", Phnx = "Phoenician", Plrd = "Miao", Prti = "Inscriptional Parthian", Rjng = "Rejang", Rohg = "Hanifi Rohingya", Runr = "Runic", Samr = "Samaritan", Sarb = "Old South Arabian", Saur = "Saurashtra", Sgnw = "SignWriting", Shaw = "Shavian", Shrd = "Sharada", Sidd = "Siddham", Sidt = "Sidetic", Sind = "Khudawadi", Sinh = "Sinhala", Sogd = "Sogdian", Sogo = "Old Sogdian", Sora = "Sora Sompeng", Soyo = "Soyombo", Sund = "Sundanese", Sunu = "Sunuwar", Sylo = "Syloti Nagri", Syrc = "Syriac", Tagb = "Tagbanwa", Takr = "Takri", Tale = "Tai Le", Talu = "New Tai Lue", Taml = "Tamil", Tang = "Tangut", Tavt = "Tai Viet", Tayo = "Tai Yo", Telu = "Telugu", Tfng = "Tifinagh", Tglg = "Tagalog", Thaa = "Thaana", Thai = "Thai", Tibt = "Tibetan", Tirh = "Tirhuta", Tnsa = "Tangsa", Todr = "Todhri", Tols = "Tolong Siki", Toto = "Toto", Tutg = "Tulu Tigalari", Ugar = "Ugaritic", Vaii = "Vai", Vith = "Vithkuqi", Wara = "Warang Citi", Wcho = "Wancho", Xpeo = "Old Persian", Xsux = "Cuneiform", Yezi = "Yezidi", Yiii = "Yi", Zanb = "Zanabazar Square", Zinh = "Inherited", Zyyy = "Common", Zzzz = "Unknown", }, } -- Required for binary search function in [[Module:Language/scripts]]. -- Cannot get length of module loaded with mw.loadData. data.ranges.length = #data.ranges data.rtl = {} for _, script in ipairs(mw.loadData "Module:Lang/data".rtl_scripts) do -- [[Module:Lang/data]] has script codes in lowercase; -- this module has script codes with the first letter capitalized. data.rtl[script:gsub("^%a", string.upper)] = true end return data 80pl7gb2np5bla0ghczssae2pylkrhq 746180 746179 2026-06-12T21:51:56Z Robertsky 51025 1 revision imported from [[:en:Module:Unicode_data/scripts]]: for workshop activity 746179 Scribunto text/plain --[=[ -- Official Unicode script values for individual codepoints and ranges of -- codepoints. -- https://www.unicode.org/Public/UNIDATA/Scripts.txt provided -- the script names, and https://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt -- provided script codes corresponding to the names (see [[Script (Unicode)]]). --]=] local data = { singles = { [0x000AA] = "Latn", [0x000BA] = "Latn", [0x000D7] = "Zyyy", [0x000F7] = "Zyyy", [0x00374] = "Zyyy", [0x0037E] = "Zyyy", [0x0037F] = "Grek", [0x00384] = "Grek", [0x00385] = "Zyyy", [0x00386] = "Grek", [0x00387] = "Zyyy", [0x0038C] = "Grek", [0x00605] = "Zyyy", [0x0060C] = "Zyyy", [0x0061B] = "Zyyy", [0x0061F] = "Zyyy", [0x00640] = "Zyyy", [0x00670] = "Zinh", [0x006DD] = "Zyyy", [0x0085E] = "Mand", [0x008E2] = "Zyyy", [0x009B2] = "Beng", [0x009D7] = "Beng", [0x00A3C] = "Guru", [0x00A51] = "Guru", [0x00A5E] = "Guru", [0x00AD0] = "Gujr", [0x00B9C] = "Taml", [0x00BD0] = "Taml", [0x00BD7] = "Taml", [0x00DBD] = "Sinh", [0x00DCA] = "Sinh", [0x00DD6] = "Sinh", [0x00E3F] = "Zyyy", [0x00E84] = "Laoo", [0x00EA5] = "Laoo", [0x00EC6] = "Laoo", [0x010C7] = "Geor", [0x010CD] = "Geor", [0x010FB] = "Zyyy", [0x01258] = "Ethi", [0x012C0] = "Ethi", [0x0171F] = "Tglg", [0x01804] = "Mong", [0x01805] = "Zyyy", [0x01940] = "Limb", [0x01CD3] = "Zyyy", [0x01CE1] = "Zyyy", [0x01CED] = "Zinh", [0x01CF4] = "Zinh", [0x01CFA] = "Zyyy", [0x01D2B] = "Cyrl", [0x01D78] = "Cyrl", [0x01DBF] = "Grek", [0x01F59] = "Grek", [0x01F5B] = "Grek", [0x01F5D] = "Grek", [0x02071] = "Latn", [0x0207F] = "Latn", [0x02126] = "Grek", [0x02132] = "Latn", [0x0214E] = "Latn", [0x02D27] = "Geor", [0x02D2D] = "Geor", [0x02D7F] = "Tfng", [0x03005] = "Hani", [0x03006] = "Zyyy", [0x03007] = "Hani", [0x030A0] = "Zyyy", [0x031EF] = "Zyyy", [0x032FF] = "Zyyy", [0x0A92E] = "Zyyy", [0x0A92F] = "Kali", [0x0A95F] = "Rjng", [0x0A9CF] = "Zyyy", [0x0AB5B] = "Zyyy", [0x0AB65] = "Grek", [0x0FB3E] = "Hebr", [0x0FEFF] = "Zyyy", [0x0FF70] = "Zyyy", [0x101A0] = "Grek", [0x101FD] = "Zinh", [0x102E0] = "Zinh", [0x1039F] = "Ugar", [0x1056F] = "Aghb", [0x10808] = "Cprt", [0x1083C] = "Cprt", [0x1083F] = "Cprt", [0x1091F] = "Phnx", [0x1093F] = "Lydi", [0x1107F] = "Brah", [0x110CD] = "Kthi", [0x11288] = "Mult", [0x1133B] = "Zinh", [0x11350] = "Gran", [0x11357] = "Gran", [0x1138B] = "Tutg", [0x1138E] = "Tutg", [0x113C2] = "Tutg", [0x113C5] = "Tutg", [0x118FF] = "Wara", [0x11909] = "Diak", [0x11D3A] = "Gonm", [0x11FB0] = "Lisu", [0x11FFF] = "Taml", [0x16FE0] = "Tang", [0x16FE1] = "Nshu", [0x16FE4] = "Kits", [0x18CFF] = "Kits", [0x1B000] = "Kana", [0x1B132] = "Hira", [0x1B155] = "Kana", [0x1D4A2] = "Zyyy", [0x1D4BB] = "Zyyy", [0x1D546] = "Zyyy", [0x1E08F] = "Cyrl", [0x1E2FF] = "Wcho", [0x1E5FF] = "Onao", [0x1EE24] = "Arab", [0x1EE27] = "Arab", [0x1EE39] = "Arab", [0x1EE3B] = "Arab", [0x1EE42] = "Arab", [0x1EE47] = "Arab", [0x1EE49] = "Arab", [0x1EE4B] = "Arab", [0x1EE54] = "Arab", [0x1EE57] = "Arab", [0x1EE59] = "Arab", [0x1EE5B] = "Arab", [0x1EE5D] = "Arab", [0x1EE5F] = "Arab", [0x1EE64] = "Arab", [0x1EE7E] = "Arab", [0x1F200] = "Hira", [0x1F7F0] = "Zyyy", [0x1FAC8] = "Zyyy", [0xE0001] = "Zyyy", }, ranges = { { 0x00000, 0x00040, "Zyyy" }, { 0x00041, 0x0005A, "Latn" }, { 0x0005B, 0x00060, "Zyyy" }, { 0x00061, 0x0007A, "Latn" }, { 0x0007B, 0x000A9, "Zyyy" }, { 0x000AB, 0x000B9, "Zyyy" }, { 0x000BB, 0x000BF, "Zyyy" }, { 0x000C0, 0x000D6, "Latn" }, { 0x000D8, 0x000F6, "Latn" }, { 0x000F8, 0x002B8, "Latn" }, { 0x002B9, 0x002DF, "Zyyy" }, { 0x002E0, 0x002E4, "Latn" }, { 0x002E5, 0x002E9, "Zyyy" }, { 0x002EA, 0x002EB, "Bopo" }, { 0x002EC, 0x002FF, "Zyyy" }, { 0x00300, 0x0036F, "Zinh" }, { 0x00370, 0x00373, "Grek" }, { 0x00375, 0x00377, "Grek" }, { 0x0037A, 0x0037D, "Grek" }, { 0x00388, 0x0038A, "Grek" }, { 0x0038E, 0x003A1, "Grek" }, { 0x003A3, 0x003E1, "Grek" }, { 0x003E2, 0x003EF, "Copt" }, { 0x003F0, 0x003FF, "Grek" }, { 0x00400, 0x00484, "Cyrl" }, { 0x00485, 0x00486, "Zinh" }, { 0x00487, 0x0052F, "Cyrl" }, { 0x00531, 0x00556, "Armn" }, { 0x00559, 0x0058A, "Armn" }, { 0x0058D, 0x0058F, "Armn" }, { 0x00591, 0x005C7, "Hebr" }, { 0x005D0, 0x005EA, "Hebr" }, { 0x005EF, 0x005F4, "Hebr" }, { 0x00600, 0x00604, "Arab" }, { 0x00606, 0x0060B, "Arab" }, { 0x0060D, 0x0061A, "Arab" }, { 0x0061C, 0x0061E, "Arab" }, { 0x00620, 0x0063F, "Arab" }, { 0x00641, 0x0064A, "Arab" }, { 0x0064B, 0x00655, "Zinh" }, { 0x00656, 0x0066F, "Arab" }, { 0x00671, 0x006DC, "Arab" }, { 0x006DE, 0x006FF, "Arab" }, { 0x00700, 0x0070D, "Syrc" }, { 0x0070F, 0x0074A, "Syrc" }, { 0x0074D, 0x0074F, "Syrc" }, { 0x00750, 0x0077F, "Arab" }, { 0x00780, 0x007B1, "Thaa" }, { 0x007C0, 0x007FA, "Nkoo" }, { 0x007FD, 0x007FF, "Nkoo" }, { 0x00800, 0x0082D, "Samr" }, { 0x00830, 0x0083E, "Samr" }, { 0x00840, 0x0085B, "Mand" }, { 0x00860, 0x0086A, "Syrc" }, { 0x00870, 0x00891, "Arab" }, { 0x00897, 0x008E1, "Arab" }, { 0x008E3, 0x008FF, "Arab" }, { 0x00900, 0x00950, "Deva" }, { 0x00951, 0x00954, "Zinh" }, { 0x00955, 0x00963, "Deva" }, { 0x00964, 0x00965, "Zyyy" }, { 0x00966, 0x0097F, "Deva" }, { 0x00980, 0x00983, "Beng" }, { 0x00985, 0x0098C, "Beng" }, { 0x0098F, 0x00990, "Beng" }, { 0x00993, 0x009A8, "Beng" }, { 0x009AA, 0x009B0, "Beng" }, { 0x009B6, 0x009B9, "Beng" }, { 0x009BC, 0x009C4, "Beng" }, { 0x009C7, 0x009C8, "Beng" }, { 0x009CB, 0x009CE, "Beng" }, { 0x009DC, 0x009DD, "Beng" }, { 0x009DF, 0x009E3, "Beng" }, { 0x009E6, 0x009FE, "Beng" }, { 0x00A01, 0x00A03, "Guru" }, { 0x00A05, 0x00A0A, "Guru" }, { 0x00A0F, 0x00A10, "Guru" }, { 0x00A13, 0x00A28, "Guru" }, { 0x00A2A, 0x00A30, "Guru" }, { 0x00A32, 0x00A33, "Guru" }, { 0x00A35, 0x00A36, "Guru" }, { 0x00A38, 0x00A39, "Guru" }, { 0x00A3E, 0x00A42, "Guru" }, { 0x00A47, 0x00A48, "Guru" }, { 0x00A4B, 0x00A4D, "Guru" }, { 0x00A59, 0x00A5C, "Guru" }, { 0x00A66, 0x00A76, "Guru" }, { 0x00A81, 0x00A83, "Gujr" }, { 0x00A85, 0x00A8D, "Gujr" }, { 0x00A8F, 0x00A91, "Gujr" }, { 0x00A93, 0x00AA8, "Gujr" }, { 0x00AAA, 0x00AB0, "Gujr" }, { 0x00AB2, 0x00AB3, "Gujr" }, { 0x00AB5, 0x00AB9, "Gujr" }, { 0x00ABC, 0x00AC5, "Gujr" }, { 0x00AC7, 0x00AC9, "Gujr" }, { 0x00ACB, 0x00ACD, "Gujr" }, { 0x00AE0, 0x00AE3, "Gujr" }, { 0x00AE6, 0x00AF1, "Gujr" }, { 0x00AF9, 0x00AFF, "Gujr" }, { 0x00B01, 0x00B03, "Orya" }, { 0x00B05, 0x00B0C, "Orya" }, { 0x00B0F, 0x00B10, "Orya" }, { 0x00B13, 0x00B28, "Orya" }, { 0x00B2A, 0x00B30, "Orya" }, { 0x00B32, 0x00B33, "Orya" }, { 0x00B35, 0x00B39, "Orya" }, { 0x00B3C, 0x00B44, "Orya" }, { 0x00B47, 0x00B48, "Orya" }, { 0x00B4B, 0x00B4D, "Orya" }, { 0x00B55, 0x00B57, "Orya" }, { 0x00B5C, 0x00B5D, "Orya" }, { 0x00B5F, 0x00B63, "Orya" }, { 0x00B66, 0x00B77, "Orya" }, { 0x00B82, 0x00B83, "Taml" }, { 0x00B85, 0x00B8A, "Taml" }, { 0x00B8E, 0x00B90, "Taml" }, { 0x00B92, 0x00B95, "Taml" }, { 0x00B99, 0x00B9A, "Taml" }, { 0x00B9E, 0x00B9F, "Taml" }, { 0x00BA3, 0x00BA4, "Taml" }, { 0x00BA8, 0x00BAA, "Taml" }, { 0x00BAE, 0x00BB9, "Taml" }, { 0x00BBE, 0x00BC2, "Taml" }, { 0x00BC6, 0x00BC8, "Taml" }, { 0x00BCA, 0x00BCD, "Taml" }, { 0x00BE6, 0x00BFA, "Taml" }, { 0x00C00, 0x00C0C, "Telu" }, { 0x00C0E, 0x00C10, "Telu" }, { 0x00C12, 0x00C28, "Telu" }, { 0x00C2A, 0x00C39, "Telu" }, { 0x00C3C, 0x00C44, "Telu" }, { 0x00C46, 0x00C48, "Telu" }, { 0x00C4A, 0x00C4D, "Telu" }, { 0x00C55, 0x00C56, "Telu" }, { 0x00C58, 0x00C5A, "Telu" }, { 0x00C5C, 0x00C5D, "Telu" }, { 0x00C60, 0x00C63, "Telu" }, { 0x00C66, 0x00C6F, "Telu" }, { 0x00C77, 0x00C7F, "Telu" }, { 0x00C80, 0x00C8C, "Knda" }, { 0x00C8E, 0x00C90, "Knda" }, { 0x00C92, 0x00CA8, "Knda" }, { 0x00CAA, 0x00CB3, "Knda" }, { 0x00CB5, 0x00CB9, "Knda" }, { 0x00CBC, 0x00CC4, "Knda" }, { 0x00CC6, 0x00CC8, "Knda" }, { 0x00CCA, 0x00CCD, "Knda" }, { 0x00CD5, 0x00CD6, "Knda" }, { 0x00CDC, 0x00CDE, "Knda" }, { 0x00CE0, 0x00CE3, "Knda" }, { 0x00CE6, 0x00CEF, "Knda" }, { 0x00CF1, 0x00CF3, "Knda" }, { 0x00D00, 0x00D0C, "Mlym" }, { 0x00D0E, 0x00D10, "Mlym" }, { 0x00D12, 0x00D44, "Mlym" }, { 0x00D46, 0x00D48, "Mlym" }, { 0x00D4A, 0x00D4F, "Mlym" }, { 0x00D54, 0x00D63, "Mlym" }, { 0x00D66, 0x00D7F, "Mlym" }, { 0x00D81, 0x00D83, "Sinh" }, { 0x00D85, 0x00D96, "Sinh" }, { 0x00D9A, 0x00DB1, "Sinh" }, { 0x00DB3, 0x00DBB, "Sinh" }, { 0x00DC0, 0x00DC6, "Sinh" }, { 0x00DCF, 0x00DD4, "Sinh" }, { 0x00DD8, 0x00DDF, "Sinh" }, { 0x00DE6, 0x00DEF, "Sinh" }, { 0x00DF2, 0x00DF4, "Sinh" }, { 0x00E01, 0x00E3A, "Thai" }, { 0x00E40, 0x00E5B, "Thai" }, { 0x00E81, 0x00E82, "Laoo" }, { 0x00E86, 0x00E8A, "Laoo" }, { 0x00E8C, 0x00EA3, "Laoo" }, { 0x00EA7, 0x00EBD, "Laoo" }, { 0x00EC0, 0x00EC4, "Laoo" }, { 0x00EC8, 0x00ECE, "Laoo" }, { 0x00ED0, 0x00ED9, "Laoo" }, { 0x00EDC, 0x00EDF, "Laoo" }, { 0x00F00, 0x00F47, "Tibt" }, { 0x00F49, 0x00F6C, "Tibt" }, { 0x00F71, 0x00F97, "Tibt" }, { 0x00F99, 0x00FBC, "Tibt" }, { 0x00FBE, 0x00FCC, "Tibt" }, { 0x00FCE, 0x00FD4, "Tibt" }, { 0x00FD5, 0x00FD8, "Zyyy" }, { 0x00FD9, 0x00FDA, "Tibt" }, { 0x01000, 0x0109F, "Mymr" }, { 0x010A0, 0x010C5, "Geor" }, { 0x010D0, 0x010FA, "Geor" }, { 0x010FC, 0x010FF, "Geor" }, { 0x01100, 0x011FF, "Hang" }, { 0x01200, 0x01248, "Ethi" }, { 0x0124A, 0x0124D, "Ethi" }, { 0x01250, 0x01256, "Ethi" }, { 0x0125A, 0x0125D, "Ethi" }, { 0x01260, 0x01288, "Ethi" }, { 0x0128A, 0x0128D, "Ethi" }, { 0x01290, 0x012B0, "Ethi" }, { 0x012B2, 0x012B5, "Ethi" }, { 0x012B8, 0x012BE, "Ethi" }, { 0x012C2, 0x012C5, "Ethi" }, { 0x012C8, 0x012D6, "Ethi" }, { 0x012D8, 0x01310, "Ethi" }, { 0x01312, 0x01315, "Ethi" }, { 0x01318, 0x0135A, "Ethi" }, { 0x0135D, 0x0137C, "Ethi" }, { 0x01380, 0x01399, "Ethi" }, { 0x013A0, 0x013F5, "Cher" }, { 0x013F8, 0x013FD, "Cher" }, { 0x01400, 0x0167F, "Cans" }, { 0x01680, 0x0169C, "Ogam" }, { 0x016A0, 0x016EA, "Runr" }, { 0x016EB, 0x016ED, "Zyyy" }, { 0x016EE, 0x016F8, "Runr" }, { 0x01700, 0x01715, "Tglg" }, { 0x01720, 0x01734, "Hano" }, { 0x01735, 0x01736, "Zyyy" }, { 0x01740, 0x01753, "Buhd" }, { 0x01760, 0x0176C, "Tagb" }, { 0x0176E, 0x01770, "Tagb" }, { 0x01772, 0x01773, "Tagb" }, { 0x01780, 0x017DD, "Khmr" }, { 0x017E0, 0x017E9, "Khmr" }, { 0x017F0, 0x017F9, "Khmr" }, { 0x01800, 0x01801, "Mong" }, { 0x01802, 0x01803, "Zyyy" }, { 0x01806, 0x01819, "Mong" }, { 0x01820, 0x01878, "Mong" }, { 0x01880, 0x018AA, "Mong" }, { 0x018B0, 0x018F5, "Cans" }, { 0x01900, 0x0191E, "Limb" }, { 0x01920, 0x0192B, "Limb" }, { 0x01930, 0x0193B, "Limb" }, { 0x01944, 0x0194F, "Limb" }, { 0x01950, 0x0196D, "Tale" }, { 0x01970, 0x01974, "Tale" }, { 0x01980, 0x019AB, "Talu" }, { 0x019B0, 0x019C9, "Talu" }, { 0x019D0, 0x019DA, "Talu" }, { 0x019DE, 0x019DF, "Talu" }, { 0x019E0, 0x019FF, "Khmr" }, { 0x01A00, 0x01A1B, "Bugi" }, { 0x01A1E, 0x01A1F, "Bugi" }, { 0x01A20, 0x01A5E, "Lana" }, { 0x01A60, 0x01A7C, "Lana" }, { 0x01A7F, 0x01A89, "Lana" }, { 0x01A90, 0x01A99, "Lana" }, { 0x01AA0, 0x01AAD, "Lana" }, { 0x01AB0, 0x01ADD, "Zinh" }, { 0x01AE0, 0x01AEB, "Zinh" }, { 0x01B00, 0x01B4C, "Bali" }, { 0x01B4E, 0x01B7F, "Bali" }, { 0x01B80, 0x01BBF, "Sund" }, { 0x01BC0, 0x01BF3, "Batk" }, { 0x01BFC, 0x01BFF, "Batk" }, { 0x01C00, 0x01C37, "Lepc" }, { 0x01C3B, 0x01C49, "Lepc" }, { 0x01C4D, 0x01C4F, "Lepc" }, { 0x01C50, 0x01C7F, "Olck" }, { 0x01C80, 0x01C8A, "Cyrl" }, { 0x01C90, 0x01CBA, "Geor" }, { 0x01CBD, 0x01CBF, "Geor" }, { 0x01CC0, 0x01CC7, "Sund" }, { 0x01CD0, 0x01CD2, "Zinh" }, { 0x01CD4, 0x01CE0, "Zinh" }, { 0x01CE2, 0x01CE8, "Zinh" }, { 0x01CE9, 0x01CEC, "Zyyy" }, { 0x01CEE, 0x01CF3, "Zyyy" }, { 0x01CF5, 0x01CF7, "Zyyy" }, { 0x01CF8, 0x01CF9, "Zinh" }, { 0x01D00, 0x01D25, "Latn" }, { 0x01D26, 0x01D2A, "Grek" }, { 0x01D2C, 0x01D5C, "Latn" }, { 0x01D5D, 0x01D61, "Grek" }, { 0x01D62, 0x01D65, "Latn" }, { 0x01D66, 0x01D6A, "Grek" }, { 0x01D6B, 0x01D77, "Latn" }, { 0x01D79, 0x01DBE, "Latn" }, { 0x01DC0, 0x01DFF, "Zinh" }, { 0x01E00, 0x01EFF, "Latn" }, { 0x01F00, 0x01F15, "Grek" }, { 0x01F18, 0x01F1D, "Grek" }, { 0x01F20, 0x01F45, "Grek" }, { 0x01F48, 0x01F4D, "Grek" }, { 0x01F50, 0x01F57, "Grek" }, { 0x01F5F, 0x01F7D, "Grek" }, { 0x01F80, 0x01FB4, "Grek" }, { 0x01FB6, 0x01FC4, "Grek" }, { 0x01FC6, 0x01FD3, "Grek" }, { 0x01FD6, 0x01FDB, "Grek" }, { 0x01FDD, 0x01FEF, "Grek" }, { 0x01FF2, 0x01FF4, "Grek" }, { 0x01FF6, 0x01FFE, "Grek" }, { 0x02000, 0x0200B, "Zyyy" }, { 0x0200C, 0x0200D, "Zinh" }, { 0x0200E, 0x02064, "Zyyy" }, { 0x02066, 0x02070, "Zyyy" }, { 0x02074, 0x0207E, "Zyyy" }, { 0x02080, 0x0208E, "Zyyy" }, { 0x02090, 0x0209C, "Latn" }, { 0x020A0, 0x020C1, "Zyyy" }, { 0x020D0, 0x020F0, "Zinh" }, { 0x02100, 0x02125, "Zyyy" }, { 0x02127, 0x02129, "Zyyy" }, { 0x0212A, 0x0212B, "Latn" }, { 0x0212C, 0x02131, "Zyyy" }, { 0x02133, 0x0214D, "Zyyy" }, { 0x0214F, 0x0215F, "Zyyy" }, { 0x02160, 0x02188, "Latn" }, { 0x02189, 0x0218B, "Zyyy" }, { 0x02190, 0x02429, "Zyyy" }, { 0x02440, 0x0244A, "Zyyy" }, { 0x02460, 0x027FF, "Zyyy" }, { 0x02800, 0x028FF, "Brai" }, { 0x02900, 0x02B73, "Zyyy" }, { 0x02B76, 0x02BFF, "Zyyy" }, { 0x02C00, 0x02C5F, "Glag" }, { 0x02C60, 0x02C7F, "Latn" }, { 0x02C80, 0x02CF3, "Copt" }, { 0x02CF9, 0x02CFF, "Copt" }, { 0x02D00, 0x02D25, "Geor" }, { 0x02D30, 0x02D67, "Tfng" }, { 0x02D6F, 0x02D70, "Tfng" }, { 0x02D80, 0x02D96, "Ethi" }, { 0x02DA0, 0x02DA6, "Ethi" }, { 0x02DA8, 0x02DAE, "Ethi" }, { 0x02DB0, 0x02DB6, "Ethi" }, { 0x02DB8, 0x02DBE, "Ethi" }, { 0x02DC0, 0x02DC6, "Ethi" }, { 0x02DC8, 0x02DCE, "Ethi" }, { 0x02DD0, 0x02DD6, "Ethi" }, { 0x02DD8, 0x02DDE, "Ethi" }, { 0x02DE0, 0x02DFF, "Cyrl" }, { 0x02E00, 0x02E5D, "Zyyy" }, { 0x02E80, 0x02E99, "Hani" }, { 0x02E9B, 0x02EF3, "Hani" }, { 0x02F00, 0x02FD5, "Hani" }, { 0x02FF0, 0x03004, "Zyyy" }, { 0x03008, 0x03020, "Zyyy" }, { 0x03021, 0x03029, "Hani" }, { 0x0302A, 0x0302D, "Zinh" }, { 0x0302E, 0x0302F, "Hang" }, { 0x03030, 0x03037, "Zyyy" }, { 0x03038, 0x0303B, "Hani" }, { 0x0303C, 0x0303F, "Zyyy" }, { 0x03041, 0x03096, "Hira" }, { 0x03099, 0x0309A, "Zinh" }, { 0x0309B, 0x0309C, "Zyyy" }, { 0x0309D, 0x0309F, "Hira" }, { 0x030A1, 0x030FA, "Kana" }, { 0x030FB, 0x030FC, "Zyyy" }, { 0x030FD, 0x030FF, "Kana" }, { 0x03105, 0x0312F, "Bopo" }, { 0x03131, 0x0318E, "Hang" }, { 0x03190, 0x0319F, "Zyyy" }, { 0x031A0, 0x031BF, "Bopo" }, { 0x031C0, 0x031E5, "Zyyy" }, { 0x031F0, 0x031FF, "Kana" }, { 0x03200, 0x0321E, "Hang" }, { 0x03220, 0x0325F, "Zyyy" }, { 0x03260, 0x0327E, "Hang" }, { 0x0327F, 0x032CF, "Zyyy" }, { 0x032D0, 0x032FE, "Kana" }, { 0x03300, 0x03357, "Kana" }, { 0x03358, 0x033FF, "Zyyy" }, { 0x03400, 0x04DBF, "Hani" }, { 0x04DC0, 0x04DFF, "Zyyy" }, { 0x04E00, 0x09FFF, "Hani" }, { 0x0A000, 0x0A48C, "Yiii" }, { 0x0A490, 0x0A4C6, "Yiii" }, { 0x0A4D0, 0x0A4FF, "Lisu" }, { 0x0A500, 0x0A62B, "Vaii" }, { 0x0A640, 0x0A69F, "Cyrl" }, { 0x0A6A0, 0x0A6F7, "Bamu" }, { 0x0A700, 0x0A721, "Zyyy" }, { 0x0A722, 0x0A787, "Latn" }, { 0x0A788, 0x0A78A, "Zyyy" }, { 0x0A78B, 0x0A7DC, "Latn" }, { 0x0A7F1, 0x0A7FF, "Latn" }, { 0x0A800, 0x0A82C, "Sylo" }, { 0x0A830, 0x0A839, "Zyyy" }, { 0x0A840, 0x0A877, "Phag" }, { 0x0A880, 0x0A8C5, "Saur" }, { 0x0A8CE, 0x0A8D9, "Saur" }, { 0x0A8E0, 0x0A8FF, "Deva" }, { 0x0A900, 0x0A92D, "Kali" }, { 0x0A930, 0x0A953, "Rjng" }, { 0x0A960, 0x0A97C, "Hang" }, { 0x0A980, 0x0A9CD, "Java" }, { 0x0A9D0, 0x0A9D9, "Java" }, { 0x0A9DE, 0x0A9DF, "Java" }, { 0x0A9E0, 0x0A9FE, "Mymr" }, { 0x0AA00, 0x0AA36, "Cham" }, { 0x0AA40, 0x0AA4D, "Cham" }, { 0x0AA50, 0x0AA59, "Cham" }, { 0x0AA5C, 0x0AA5F, "Cham" }, { 0x0AA60, 0x0AA7F, "Mymr" }, { 0x0AA80, 0x0AAC2, "Tavt" }, { 0x0AADB, 0x0AADF, "Tavt" }, { 0x0AAE0, 0x0AAF6, "Mtei" }, { 0x0AB01, 0x0AB06, "Ethi" }, { 0x0AB09, 0x0AB0E, "Ethi" }, { 0x0AB11, 0x0AB16, "Ethi" }, { 0x0AB20, 0x0AB26, "Ethi" }, { 0x0AB28, 0x0AB2E, "Ethi" }, { 0x0AB30, 0x0AB5A, "Latn" }, { 0x0AB5C, 0x0AB64, "Latn" }, { 0x0AB66, 0x0AB69, "Latn" }, { 0x0AB6A, 0x0AB6B, "Zyyy" }, { 0x0AB70, 0x0ABBF, "Cher" }, { 0x0ABC0, 0x0ABED, "Mtei" }, { 0x0ABF0, 0x0ABF9, "Mtei" }, { 0x0AC00, 0x0D7A3, "Hang" }, { 0x0D7B0, 0x0D7C6, "Hang" }, { 0x0D7CB, 0x0D7FB, "Hang" }, { 0x0F900, 0x0FA6D, "Hani" }, { 0x0FA70, 0x0FAD9, "Hani" }, { 0x0FB00, 0x0FB06, "Latn" }, { 0x0FB13, 0x0FB17, "Armn" }, { 0x0FB1D, 0x0FB36, "Hebr" }, { 0x0FB38, 0x0FB3C, "Hebr" }, { 0x0FB40, 0x0FB41, "Hebr" }, { 0x0FB43, 0x0FB44, "Hebr" }, { 0x0FB46, 0x0FB4F, "Hebr" }, { 0x0FB50, 0x0FD3D, "Arab" }, { 0x0FD3E, 0x0FD3F, "Zyyy" }, { 0x0FD40, 0x0FDCF, "Arab" }, { 0x0FDF0, 0x0FDFF, "Arab" }, { 0x0FE00, 0x0FE0F, "Zinh" }, { 0x0FE10, 0x0FE19, "Zyyy" }, { 0x0FE20, 0x0FE2D, "Zinh" }, { 0x0FE2E, 0x0FE2F, "Cyrl" }, { 0x0FE30, 0x0FE52, "Zyyy" }, { 0x0FE54, 0x0FE66, "Zyyy" }, { 0x0FE68, 0x0FE6B, "Zyyy" }, { 0x0FE70, 0x0FE74, "Arab" }, { 0x0FE76, 0x0FEFC, "Arab" }, { 0x0FF01, 0x0FF20, "Zyyy" }, { 0x0FF21, 0x0FF3A, "Latn" }, { 0x0FF3B, 0x0FF40, "Zyyy" }, { 0x0FF41, 0x0FF5A, "Latn" }, { 0x0FF5B, 0x0FF65, "Zyyy" }, { 0x0FF66, 0x0FF6F, "Kana" }, { 0x0FF71, 0x0FF9D, "Kana" }, { 0x0FF9E, 0x0FF9F, "Zyyy" }, { 0x0FFA0, 0x0FFBE, "Hang" }, { 0x0FFC2, 0x0FFC7, "Hang" }, { 0x0FFCA, 0x0FFCF, "Hang" }, { 0x0FFD2, 0x0FFD7, "Hang" }, { 0x0FFDA, 0x0FFDC, "Hang" }, { 0x0FFE0, 0x0FFE6, "Zyyy" }, { 0x0FFE8, 0x0FFEE, "Zyyy" }, { 0x0FFF9, 0x0FFFD, "Zyyy" }, { 0x10000, 0x1000B, "Linb" }, { 0x1000D, 0x10026, "Linb" }, { 0x10028, 0x1003A, "Linb" }, { 0x1003C, 0x1003D, "Linb" }, { 0x1003F, 0x1004D, "Linb" }, { 0x10050, 0x1005D, "Linb" }, { 0x10080, 0x100FA, "Linb" }, { 0x10100, 0x10102, "Zyyy" }, { 0x10107, 0x10133, "Zyyy" }, { 0x10137, 0x1013F, "Zyyy" }, { 0x10140, 0x1018E, "Grek" }, { 0x10190, 0x1019C, "Zyyy" }, { 0x101D0, 0x101FC, "Zyyy" }, { 0x10280, 0x1029C, "Lyci" }, { 0x102A0, 0x102D0, "Cari" }, { 0x102E1, 0x102FB, "Zyyy" }, { 0x10300, 0x10323, "Ital" }, { 0x1032D, 0x1032F, "Ital" }, { 0x10330, 0x1034A, "Goth" }, { 0x10350, 0x1037A, "Perm" }, { 0x10380, 0x1039D, "Ugar" }, { 0x103A0, 0x103C3, "Xpeo" }, { 0x103C8, 0x103D5, "Xpeo" }, { 0x10400, 0x1044F, "Dsrt" }, { 0x10450, 0x1047F, "Shaw" }, { 0x10480, 0x1049D, "Osma" }, { 0x104A0, 0x104A9, "Osma" }, { 0x104B0, 0x104D3, "Osge" }, { 0x104D8, 0x104FB, "Osge" }, { 0x10500, 0x10527, "Elba" }, { 0x10530, 0x10563, "Aghb" }, { 0x10570, 0x1057A, "Vith" }, { 0x1057C, 0x1058A, "Vith" }, { 0x1058C, 0x10592, "Vith" }, { 0x10594, 0x10595, "Vith" }, { 0x10597, 0x105A1, "Vith" }, { 0x105A3, 0x105B1, "Vith" }, { 0x105B3, 0x105B9, "Vith" }, { 0x105BB, 0x105BC, "Vith" }, { 0x105C0, 0x105F3, "Todr" }, { 0x10600, 0x10736, "Lina" }, { 0x10740, 0x10755, "Lina" }, { 0x10760, 0x10767, "Lina" }, { 0x10780, 0x10785, "Latn" }, { 0x10787, 0x107B0, "Latn" }, { 0x107B2, 0x107BA, "Latn" }, { 0x10800, 0x10805, "Cprt" }, { 0x1080A, 0x10835, "Cprt" }, { 0x10837, 0x10838, "Cprt" }, { 0x10840, 0x10855, "Armi" }, { 0x10857, 0x1085F, "Armi" }, { 0x10860, 0x1087F, "Palm" }, { 0x10880, 0x1089E, "Nbat" }, { 0x108A7, 0x108AF, "Nbat" }, { 0x108E0, 0x108F2, "Hatr" }, { 0x108F4, 0x108F5, "Hatr" }, { 0x108FB, 0x108FF, "Hatr" }, { 0x10900, 0x1091B, "Phnx" }, { 0x10920, 0x10939, "Lydi" }, { 0x10940, 0x10959, "Sidt" }, { 0x10980, 0x1099F, "Mero" }, { 0x109A0, 0x109B7, "Merc" }, { 0x109BC, 0x109CF, "Merc" }, { 0x109D2, 0x109FF, "Merc" }, { 0x10A00, 0x10A03, "Khar" }, { 0x10A05, 0x10A06, "Khar" }, { 0x10A0C, 0x10A13, "Khar" }, { 0x10A15, 0x10A17, "Khar" }, { 0x10A19, 0x10A35, "Khar" }, { 0x10A38, 0x10A3A, "Khar" }, { 0x10A3F, 0x10A48, "Khar" }, { 0x10A50, 0x10A58, "Khar" }, { 0x10A60, 0x10A7F, "Sarb" }, { 0x10A80, 0x10A9F, "Narb" }, { 0x10AC0, 0x10AE6, "Mani" }, { 0x10AEB, 0x10AF6, "Mani" }, { 0x10B00, 0x10B35, "Avst" }, { 0x10B39, 0x10B3F, "Avst" }, { 0x10B40, 0x10B55, "Prti" }, { 0x10B58, 0x10B5F, "Prti" }, { 0x10B60, 0x10B72, "Phli" }, { 0x10B78, 0x10B7F, "Phli" }, { 0x10B80, 0x10B91, "Phlp" }, { 0x10B99, 0x10B9C, "Phlp" }, { 0x10BA9, 0x10BAF, "Phlp" }, { 0x10C00, 0x10C48, "Orkh" }, { 0x10C80, 0x10CB2, "Hung" }, { 0x10CC0, 0x10CF2, "Hung" }, { 0x10CFA, 0x10CFF, "Hung" }, { 0x10D00, 0x10D27, "Rohg" }, { 0x10D30, 0x10D39, "Rohg" }, { 0x10D40, 0x10D65, "Gara" }, { 0x10D69, 0x10D85, "Gara" }, { 0x10D8E, 0x10D8F, "Gara" }, { 0x10E60, 0x10E7E, "Arab" }, { 0x10E80, 0x10EA9, "Yezi" }, { 0x10EAB, 0x10EAD, "Yezi" }, { 0x10EB0, 0x10EB1, "Yezi" }, { 0x10EC2, 0x10EC7, "Arab" }, { 0x10ED0, 0x10ED8, "Arab" }, { 0x10EFA, 0x10EFF, "Arab" }, { 0x10F00, 0x10F27, "Sogo" }, { 0x10F30, 0x10F59, "Sogd" }, { 0x10F70, 0x10F89, "Ougr" }, { 0x10FB0, 0x10FCB, "Chrs" }, { 0x10FE0, 0x10FF6, "Elym" }, { 0x11000, 0x1104D, "Brah" }, { 0x11052, 0x11075, "Brah" }, { 0x11080, 0x110C2, "Kthi" }, { 0x110D0, 0x110E8, "Sora" }, { 0x110F0, 0x110F9, "Sora" }, { 0x11100, 0x11134, "Cakm" }, { 0x11136, 0x11147, "Cakm" }, { 0x11150, 0x11176, "Mahj" }, { 0x11180, 0x111DF, "Shrd" }, { 0x111E1, 0x111F4, "Sinh" }, { 0x11200, 0x11211, "Khoj" }, { 0x11213, 0x11241, "Khoj" }, { 0x11280, 0x11286, "Mult" }, { 0x1128A, 0x1128D, "Mult" }, { 0x1128F, 0x1129D, "Mult" }, { 0x1129F, 0x112A9, "Mult" }, { 0x112B0, 0x112EA, "Sind" }, { 0x112F0, 0x112F9, "Sind" }, { 0x11300, 0x11303, "Gran" }, { 0x11305, 0x1130C, "Gran" }, { 0x1130F, 0x11310, "Gran" }, { 0x11313, 0x11328, "Gran" }, { 0x1132A, 0x11330, "Gran" }, { 0x11332, 0x11333, "Gran" }, { 0x11335, 0x11339, "Gran" }, { 0x1133C, 0x11344, "Gran" }, { 0x11347, 0x11348, "Gran" }, { 0x1134B, 0x1134D, "Gran" }, { 0x1135D, 0x11363, "Gran" }, { 0x11366, 0x1136C, "Gran" }, { 0x11370, 0x11374, "Gran" }, { 0x11380, 0x11389, "Tutg" }, { 0x11390, 0x113B5, "Tutg" }, { 0x113B7, 0x113C0, "Tutg" }, { 0x113C7, 0x113CA, "Tutg" }, { 0x113CC, 0x113D5, "Tutg" }, { 0x113D7, 0x113D8, "Tutg" }, { 0x113E1, 0x113E2, "Tutg" }, { 0x11400, 0x1145B, "Newa" }, { 0x1145D, 0x11461, "Newa" }, { 0x11480, 0x114C7, "Tirh" }, { 0x114D0, 0x114D9, "Tirh" }, { 0x11580, 0x115B5, "Sidd" }, { 0x115B8, 0x115DD, "Sidd" }, { 0x11600, 0x11644, "Modi" }, { 0x11650, 0x11659, "Modi" }, { 0x11660, 0x1166C, "Mong" }, { 0x11680, 0x116B9, "Takr" }, { 0x116C0, 0x116C9, "Takr" }, { 0x116D0, 0x116E3, "Mymr" }, { 0x11700, 0x1171A, "Ahom" }, { 0x1171D, 0x1172B, "Ahom" }, { 0x11730, 0x11746, "Ahom" }, { 0x11800, 0x1183B, "Dogr" }, { 0x118A0, 0x118F2, "Wara" }, { 0x11900, 0x11906, "Diak" }, { 0x1190C, 0x11913, "Diak" }, { 0x11915, 0x11916, "Diak" }, { 0x11918, 0x11935, "Diak" }, { 0x11937, 0x11938, "Diak" }, { 0x1193B, 0x11946, "Diak" }, { 0x11950, 0x11959, "Diak" }, { 0x119A0, 0x119A7, "Nand" }, { 0x119AA, 0x119D7, "Nand" }, { 0x119DA, 0x119E4, "Nand" }, { 0x11A00, 0x11A47, "Zanb" }, { 0x11A50, 0x11AA2, "Soyo" }, { 0x11AB0, 0x11ABF, "Cans" }, { 0x11AC0, 0x11AF8, "Pauc" }, { 0x11B00, 0x11B09, "Deva" }, { 0x11B60, 0x11B67, "Shrd" }, { 0x11BC0, 0x11BE1, "Sunu" }, { 0x11BF0, 0x11BF9, "Sunu" }, { 0x11C00, 0x11C08, "Bhks" }, { 0x11C0A, 0x11C36, "Bhks" }, { 0x11C38, 0x11C45, "Bhks" }, { 0x11C50, 0x11C6C, "Bhks" }, { 0x11C70, 0x11C8F, "Marc" }, { 0x11C92, 0x11CA7, "Marc" }, { 0x11CA9, 0x11CB6, "Marc" }, { 0x11D00, 0x11D06, "Gonm" }, { 0x11D08, 0x11D09, "Gonm" }, { 0x11D0B, 0x11D36, "Gonm" }, { 0x11D3C, 0x11D3D, "Gonm" }, { 0x11D3F, 0x11D47, "Gonm" }, { 0x11D50, 0x11D59, "Gonm" }, { 0x11D60, 0x11D65, "Gong" }, { 0x11D67, 0x11D68, "Gong" }, { 0x11D6A, 0x11D8E, "Gong" }, { 0x11D90, 0x11D91, "Gong" }, { 0x11D93, 0x11D98, "Gong" }, { 0x11DA0, 0x11DA9, "Gong" }, { 0x11DB0, 0x11DDB, "Tols" }, { 0x11DE0, 0x11DE9, "Tols" }, { 0x11EE0, 0x11EF8, "Maka" }, { 0x11F00, 0x11F10, "Kawi" }, { 0x11F12, 0x11F3A, "Kawi" }, { 0x11F3E, 0x11F5A, "Kawi" }, { 0x11FC0, 0x11FF1, "Taml" }, { 0x12000, 0x12399, "Xsux" }, { 0x12400, 0x1246E, "Xsux" }, { 0x12470, 0x12474, "Xsux" }, { 0x12480, 0x12543, "Xsux" }, { 0x12F90, 0x12FF2, "Cpmn" }, { 0x13000, 0x13455, "Egyp" }, { 0x13460, 0x143FA, "Egyp" }, { 0x14400, 0x14646, "Hluw" }, { 0x16100, 0x16139, "Gukh" }, { 0x16800, 0x16A38, "Bamu" }, { 0x16A40, 0x16A5E, "Mroo" }, { 0x16A60, 0x16A69, "Mroo" }, { 0x16A6E, 0x16A6F, "Mroo" }, { 0x16A70, 0x16ABE, "Tnsa" }, { 0x16AC0, 0x16AC9, "Tnsa" }, { 0x16AD0, 0x16AED, "Bass" }, { 0x16AF0, 0x16AF5, "Bass" }, { 0x16B00, 0x16B45, "Hmng" }, { 0x16B50, 0x16B59, "Hmng" }, { 0x16B5B, 0x16B61, "Hmng" }, { 0x16B63, 0x16B77, "Hmng" }, { 0x16B7D, 0x16B8F, "Hmng" }, { 0x16D40, 0x16D79, "Krai" }, { 0x16E40, 0x16E9A, "Medf" }, { 0x16EA0, 0x16EB8, "Berf" }, { 0x16EBB, 0x16ED3, "Berf" }, { 0x16F00, 0x16F4A, "Plrd" }, { 0x16F4F, 0x16F87, "Plrd" }, { 0x16F8F, 0x16F9F, "Plrd" }, { 0x16FE2, 0x16FE3, "Hani" }, { 0x16FF0, 0x16FF6, "Hani" }, { 0x17000, 0x18AFF, "Tang" }, { 0x18B00, 0x18CD5, "Kits" }, { 0x18D00, 0x18D1E, "Tang" }, { 0x18D80, 0x18DF2, "Tang" }, { 0x1AFF0, 0x1AFF3, "Kana" }, { 0x1AFF5, 0x1AFFB, "Kana" }, { 0x1AFFD, 0x1AFFE, "Kana" }, { 0x1B001, 0x1B11F, "Hira" }, { 0x1B120, 0x1B122, "Kana" }, { 0x1B150, 0x1B152, "Hira" }, { 0x1B164, 0x1B167, "Kana" }, { 0x1B170, 0x1B2FB, "Nshu" }, { 0x1BC00, 0x1BC6A, "Dupl" }, { 0x1BC70, 0x1BC7C, "Dupl" }, { 0x1BC80, 0x1BC88, "Dupl" }, { 0x1BC90, 0x1BC99, "Dupl" }, { 0x1BC9C, 0x1BC9F, "Dupl" }, { 0x1BCA0, 0x1BCA3, "Zyyy" }, { 0x1CC00, 0x1CCFC, "Zyyy" }, { 0x1CD00, 0x1CEB3, "Zyyy" }, { 0x1CEBA, 0x1CED0, "Zyyy" }, { 0x1CEE0, 0x1CEF0, "Zyyy" }, { 0x1CF00, 0x1CF2D, "Zinh" }, { 0x1CF30, 0x1CF46, "Zinh" }, { 0x1CF50, 0x1CFC3, "Zyyy" }, { 0x1D000, 0x1D0F5, "Zyyy" }, { 0x1D100, 0x1D126, "Zyyy" }, { 0x1D129, 0x1D166, "Zyyy" }, { 0x1D167, 0x1D169, "Zinh" }, { 0x1D16A, 0x1D17A, "Zyyy" }, { 0x1D17B, 0x1D182, "Zinh" }, { 0x1D183, 0x1D184, "Zyyy" }, { 0x1D185, 0x1D18B, "Zinh" }, { 0x1D18C, 0x1D1A9, "Zyyy" }, { 0x1D1AA, 0x1D1AD, "Zinh" }, { 0x1D1AE, 0x1D1EA, "Zyyy" }, { 0x1D200, 0x1D245, "Grek" }, { 0x1D2C0, 0x1D2D3, "Zyyy" }, { 0x1D2E0, 0x1D2F3, "Zyyy" }, { 0x1D300, 0x1D356, "Zyyy" }, { 0x1D360, 0x1D378, "Zyyy" }, { 0x1D400, 0x1D454, "Zyyy" }, { 0x1D456, 0x1D49C, "Zyyy" }, { 0x1D49E, 0x1D49F, "Zyyy" }, { 0x1D4A5, 0x1D4A6, "Zyyy" }, { 0x1D4A9, 0x1D4AC, "Zyyy" }, { 0x1D4AE, 0x1D4B9, "Zyyy" }, { 0x1D4BD, 0x1D4C3, "Zyyy" }, { 0x1D4C5, 0x1D505, "Zyyy" }, { 0x1D507, 0x1D50A, "Zyyy" }, { 0x1D50D, 0x1D514, "Zyyy" }, { 0x1D516, 0x1D51C, "Zyyy" }, { 0x1D51E, 0x1D539, "Zyyy" }, { 0x1D53B, 0x1D53E, "Zyyy" }, { 0x1D540, 0x1D544, "Zyyy" }, { 0x1D54A, 0x1D550, "Zyyy" }, { 0x1D552, 0x1D6A5, "Zyyy" }, { 0x1D6A8, 0x1D7CB, "Zyyy" }, { 0x1D7CE, 0x1D7FF, "Zyyy" }, { 0x1D800, 0x1DA8B, "Sgnw" }, { 0x1DA9B, 0x1DA9F, "Sgnw" }, { 0x1DAA1, 0x1DAAF, "Sgnw" }, { 0x1DF00, 0x1DF1E, "Latn" }, { 0x1DF25, 0x1DF2A, "Latn" }, { 0x1E000, 0x1E006, "Glag" }, { 0x1E008, 0x1E018, "Glag" }, { 0x1E01B, 0x1E021, "Glag" }, { 0x1E023, 0x1E024, "Glag" }, { 0x1E026, 0x1E02A, "Glag" }, { 0x1E030, 0x1E06D, "Cyrl" }, { 0x1E100, 0x1E12C, "Hmnp" }, { 0x1E130, 0x1E13D, "Hmnp" }, { 0x1E140, 0x1E149, "Hmnp" }, { 0x1E14E, 0x1E14F, "Hmnp" }, { 0x1E290, 0x1E2AE, "Toto" }, { 0x1E2C0, 0x1E2F9, "Wcho" }, { 0x1E4D0, 0x1E4F9, "Nagm" }, { 0x1E5D0, 0x1E5FA, "Onao" }, { 0x1E6C0, 0x1E6DE, "Tayo" }, { 0x1E6E0, 0x1E6F5, "Tayo" }, { 0x1E6FE, 0x1E6FF, "Tayo" }, { 0x1E7E0, 0x1E7E6, "Ethi" }, { 0x1E7E8, 0x1E7EB, "Ethi" }, { 0x1E7ED, 0x1E7EE, "Ethi" }, { 0x1E7F0, 0x1E7FE, "Ethi" }, { 0x1E800, 0x1E8C4, "Mend" }, { 0x1E8C7, 0x1E8D6, "Mend" }, { 0x1E900, 0x1E94B, "Adlm" }, { 0x1E950, 0x1E959, "Adlm" }, { 0x1E95E, 0x1E95F, "Adlm" }, { 0x1EC71, 0x1ECB4, "Zyyy" }, { 0x1ED01, 0x1ED3D, "Zyyy" }, { 0x1EE00, 0x1EE03, "Arab" }, { 0x1EE05, 0x1EE1F, "Arab" }, { 0x1EE21, 0x1EE22, "Arab" }, { 0x1EE29, 0x1EE32, "Arab" }, { 0x1EE34, 0x1EE37, "Arab" }, { 0x1EE4D, 0x1EE4F, "Arab" }, { 0x1EE51, 0x1EE52, "Arab" }, { 0x1EE61, 0x1EE62, "Arab" }, { 0x1EE67, 0x1EE6A, "Arab" }, { 0x1EE6C, 0x1EE72, "Arab" }, { 0x1EE74, 0x1EE77, "Arab" }, { 0x1EE79, 0x1EE7C, "Arab" }, { 0x1EE80, 0x1EE89, "Arab" }, { 0x1EE8B, 0x1EE9B, "Arab" }, { 0x1EEA1, 0x1EEA3, "Arab" }, { 0x1EEA5, 0x1EEA9, "Arab" }, { 0x1EEAB, 0x1EEBB, "Arab" }, { 0x1EEF0, 0x1EEF1, "Arab" }, { 0x1F000, 0x1F02B, "Zyyy" }, { 0x1F030, 0x1F093, "Zyyy" }, { 0x1F0A0, 0x1F0AE, "Zyyy" }, { 0x1F0B1, 0x1F0BF, "Zyyy" }, { 0x1F0C1, 0x1F0CF, "Zyyy" }, { 0x1F0D1, 0x1F0F5, "Zyyy" }, { 0x1F100, 0x1F1AD, "Zyyy" }, { 0x1F1E6, 0x1F1FF, "Zyyy" }, { 0x1F201, 0x1F202, "Zyyy" }, { 0x1F210, 0x1F23B, "Zyyy" }, { 0x1F240, 0x1F248, "Zyyy" }, { 0x1F250, 0x1F251, "Zyyy" }, { 0x1F260, 0x1F265, "Zyyy" }, { 0x1F300, 0x1F6D8, "Zyyy" }, { 0x1F6DC, 0x1F6EC, "Zyyy" }, { 0x1F6F0, 0x1F6FC, "Zyyy" }, { 0x1F700, 0x1F7D9, "Zyyy" }, { 0x1F7E0, 0x1F7EB, "Zyyy" }, { 0x1F800, 0x1F80B, "Zyyy" }, { 0x1F810, 0x1F847, "Zyyy" }, { 0x1F850, 0x1F859, "Zyyy" }, { 0x1F860, 0x1F887, "Zyyy" }, { 0x1F890, 0x1F8AD, "Zyyy" }, { 0x1F8B0, 0x1F8BB, "Zyyy" }, { 0x1F8C0, 0x1F8C1, "Zyyy" }, { 0x1F8D0, 0x1F8D8, "Zyyy" }, { 0x1F900, 0x1FA57, "Zyyy" }, { 0x1FA60, 0x1FA6D, "Zyyy" }, { 0x1FA70, 0x1FA7C, "Zyyy" }, { 0x1FA80, 0x1FA8A, "Zyyy" }, { 0x1FA8E, 0x1FAC6, "Zyyy" }, { 0x1FACD, 0x1FADC, "Zyyy" }, { 0x1FADF, 0x1FAEA, "Zyyy" }, { 0x1FAEF, 0x1FAF8, "Zyyy" }, { 0x1FB00, 0x1FB92, "Zyyy" }, { 0x1FB94, 0x1FBFA, "Zyyy" }, { 0x20000, 0x2A6DF, "Hani" }, { 0x2A700, 0x2B81D, "Hani" }, { 0x2B820, 0x2CEAD, "Hani" }, { 0x2CEB0, 0x2EBE0, "Hani" }, { 0x2EBF0, 0x2EE5D, "Hani" }, { 0x2F800, 0x2FA1D, "Hani" }, { 0x30000, 0x3134A, "Hani" }, { 0x31350, 0x33479, "Hani" }, { 0xE0020, 0xE007F, "Zyyy" }, { 0xE0100, 0xE01EF, "Zinh" }, }, -- Scripts.txt gives full names; here we consider them aliases to save space. aliases = { Adlm = "Adlam", Aghb = "Caucasian Albanian", Ahom = "Ahom", Arab = "Arabic", Armi = "Imperial Aramaic", Armn = "Armenian", Avst = "Avestan", Bali = "Balinese", Bamu = "Bamum", Bass = "Bassa Vah", Batk = "Batak", Beng = "Bengali", Berf = "Beria Erfe", Bhks = "Bhaiksuki", Bopo = "Bopomofo", Brah = "Brahmi", Brai = "Braille", Bugi = "Buginese", Buhd = "Buhid", Cakm = "Chakma", Cans = "Canadian Aboriginal", Cari = "Carian", Cham = "Cham", Cher = "Cherokee", Chrs = "Chorasmian", Copt = "Coptic", Cpmn = "Cypro Minoan", Cprt = "Cypriot", Cyrl = "Cyrillic", Deva = "Devanagari", Diak = "Dives Akuru", Dogr = "Dogra", Dsrt = "Deseret", Dupl = "Duployan", Egyp = "Egyptian Hieroglyphs", Elba = "Elbasan", Elym = "Elymaic", Ethi = "Ethiopic", Gara = "Garay", Geor = "Georgian", Glag = "Glagolitic", Gong = "Gunjala Gondi", Gonm = "Masaram Gondi", Goth = "Gothic", Gran = "Grantha", Grek = "Greek", Gujr = "Gujarati", Gukh = "Gurung Khema", Guru = "Gurmukhi", Hang = "Hangul", Hani = "Han", Hano = "Hanunoo", Hatr = "Hatran", Hebr = "Hebrew", Hira = "Hiragana", Hluw = "Anatolian Hieroglyphs", Hmng = "Pahawh Hmong", Hmnp = "Nyiakeng Puachue Hmong", Hrkt = "Katakana Or Hiragana", Hung = "Old Hungarian", Ital = "Old Italic", Java = "Javanese", Kali = "Kayah Li", Kana = "Katakana", Kawi = "Kawi", Khar = "Kharoshthi", Khmr = "Khmer", Khoj = "Khojki", Kits = "Khitan Small Script", Knda = "Kannada", Krai = "Kirat Rai", Kthi = "Kaithi", Lana = "Tai Tham", Laoo = "Lao", Latn = "Latin", Lepc = "Lepcha", Limb = "Limbu", Lina = "Linear A", Linb = "Linear B", Lisu = "Lisu", Lyci = "Lycian", Lydi = "Lydian", Mahj = "Mahajani", Maka = "Makasar", Mand = "Mandaic", Mani = "Manichaean", Marc = "Marchen", Medf = "Medefaidrin", Mend = "Mende Kikakui", Merc = "Meroitic Cursive", Mero = "Meroitic Hieroglyphs", Mlym = "Malayalam", Modi = "Modi", Mong = "Mongolian", Mroo = "Mro", Mtei = "Meetei Mayek", Mult = "Multani", Mymr = "Myanmar", Nagm = "Nag Mundari", Nand = "Nandinagari", Narb = "Old North Arabian", Nbat = "Nabataean", Newa = "Newa", Nkoo = "NKo", Nshu = "Nushu", Ogam = "Ogham", Olck = "Ol Chiki", Onao = "Ol Onal", Orkh = "Old Turkic", Orya = "Oriya", Osge = "Osage", Osma = "Osmanya", Ougr = "Old Uyghur", Palm = "Palmyrene", Pauc = "Pau Cin Hau", Perm = "Old Permic", Phag = "Phags Pa", Phli = "Inscriptional Pahlavi", Phlp = "Psalter Pahlavi", Phnx = "Phoenician", Plrd = "Miao", Prti = "Inscriptional Parthian", Rjng = "Rejang", Rohg = "Hanifi Rohingya", Runr = "Runic", Samr = "Samaritan", Sarb = "Old South Arabian", Saur = "Saurashtra", Sgnw = "SignWriting", Shaw = "Shavian", Shrd = "Sharada", Sidd = "Siddham", Sidt = "Sidetic", Sind = "Khudawadi", Sinh = "Sinhala", Sogd = "Sogdian", Sogo = "Old Sogdian", Sora = "Sora Sompeng", Soyo = "Soyombo", Sund = "Sundanese", Sunu = "Sunuwar", Sylo = "Syloti Nagri", Syrc = "Syriac", Tagb = "Tagbanwa", Takr = "Takri", Tale = "Tai Le", Talu = "New Tai Lue", Taml = "Tamil", Tang = "Tangut", Tavt = "Tai Viet", Tayo = "Tai Yo", Telu = "Telugu", Tfng = "Tifinagh", Tglg = "Tagalog", Thaa = "Thaana", Thai = "Thai", Tibt = "Tibetan", Tirh = "Tirhuta", Tnsa = "Tangsa", Todr = "Todhri", Tols = "Tolong Siki", Toto = "Toto", Tutg = "Tulu Tigalari", Ugar = "Ugaritic", Vaii = "Vai", Vith = "Vithkuqi", Wara = "Warang Citi", Wcho = "Wancho", Xpeo = "Old Persian", Xsux = "Cuneiform", Yezi = "Yezidi", Yiii = "Yi", Zanb = "Zanabazar Square", Zinh = "Inherited", Zyyy = "Common", Zzzz = "Unknown", }, } -- Required for binary search function in [[Module:Language/scripts]]. -- Cannot get length of module loaded with mw.loadData. data.ranges.length = #data.ranges data.rtl = {} for _, script in ipairs(mw.loadData "Module:Lang/data".rtl_scripts) do -- [[Module:Lang/data]] has script codes in lowercase; -- this module has script codes with the first letter capitalized. data.rtl[script:gsub("^%a", string.upper)] = true end return data 80pl7gb2np5bla0ghczssae2pylkrhq Steward requests/Global 0 109970 746338 738684 2026-06-13T01:20:13Z LuniZunie 71174 Requesting global lock 746338 wikitext text/x-wiki {{mbox|type=content|text=Due to persistent vandalism and disruption on this page, this page is currently semi-protected indefinitely. Globally blocked or locked users should appeal to {{nospam|stewards|wikimedia.org}}.<br />If your account was locked with a reason "Compromised account", please contact {{nospam|ca|wikimedia.org}}.}} {{dynamite|title=:Steward requests/Global/Header}}{{NOINDEX}}__TOC__<br style="clear:both"/> == Requests for global (un)block == <span id="B"/> {{dynamite|title=:Steward requests/Global/block-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global block for [[Special:Contributions/126.24.177.199|126.24.177.199]] === {{Status}} * {{Luxotool|126.24.177.199}} :Open proxy - running [[en:OpenVPN]] on port 1767 and 1393. An initial 3-month block should do the job. --[[User:MrClog|MrClog]] ([[User talk:MrClog|talk]]) 08:29, 1 May 2020 (UTC) {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:UpsandDowns1234|<span style="color:green;">Ups</span>]] and [[User talk:UpsandDowns1234|<span style="color:red;">Downs</span>]] ([[Special:Contributions/UpsandDowns1234|↕]]) 18:55, 18 May 2020 (UTC) === Global lock for [username hidden] === {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:Awesome Aasim|Awesome Aasim]] ([[User talk:Awesome Aasim|talk]]) 19:21, 18 May 2020 (UTC) == Requests for global (un)lock and (un)hiding == <span id="L"/> {{dynamite|title=:Steward requests/Global/lock-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global lock for [[User:Kshitij pandey 007|Kshitij pandey 007]] === {{Status}} *{{LockHide|Kshitij pandey 007}} :Constant vandalism. ---'''[[User:J ansari|<span style="background:#5d9731; color:white;padding:2px;">J. Ansari</span>]] [[User talk:J ansari|<span style="background:#1049AB; color:white; padding:2px;">Talk</span>]]''' 09:25, 1 May 2020 (UTC) ::{{re|J ansari}} Could this not be handled locally in Hindi Wikipedia? --[[User:Green Giant|Green Giant]] ([[User talk:Green Giant|talk]]) 18:13, 1 May 2020 (UTC) ===Global lock for LocoWiki=== {{status|notdone}} *{{lockHide|LocoWiki}} ;Evidence: *[[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] *[[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] LTA for self-promotion crosswiki Regards!!!! [[User:Ezarate|Esteban]] ([[User talk:Ezarate|talk]]) 12:56, 1 May 2020 (UTC) :{{notdone}} No evidence of cross wiki abuse? [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:19, 1 May 2020 (UTC) === Global lock for [[User:Sriramakoti|Sriramakoti]] === {{Status|done}} *{{LockHide|Sriramakoti}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 13:56, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:16, 1 May 2020 (UTC) === Global lock for [[User:JosePenj|JosePenj]] === {{Status|notdone}} *{{MultiLock|JosePenj|Arman643543|Arman115786}} :Abusing multiple account. They created same topic article (James Richman) in xwiki and these account created few day before. --[[User:SCP-2000|<span style="color: #383838;">'''SCP'''</span>]][[User talk:SCP-2000|<span style="color: #242424;">'''-20'''</span>]][[Special:Contributions/SCP-2000|<span style="color: #080808;">'''00'''</span>]] 15:22, 1 May 2020 (UTC) :{{notdone}} No evidence of abuse - accounts are not blocked anywhere. [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:24, 1 May 2020 (UTC) === Global lock/unlock for [[User:Minhaj2288|Minhaj2288]] === {{status|done}} <!-- do not remove this template --> * {{LockHide|Minhaj2288}} * Crosswiki spammer --[[User:Seewolf|Harald Krichel]] ([[User talk:Seewolf|talk]]) 17:45, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:09, 1 May 2020 (UTC) === Global lock for [[User:AugustaFeaster7|AugustaFeaster7]] === {{Status|done}} *{{LockHide|AugustaFeaster7}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:29, 1 May 2020 (UTC) ::{{done}}--[[User:Sakretsu|Sakretsu]] ([[User talk:Sakretsu|炸裂]]) 21:35, 1 May 2020 (UTC) === Global lock for [[User:Autodesk Sketchbook Indonesia|Autodesk Sketchbook Indonesia]] === {{Status}} *{{LockHide|Autodesk Sketchbook Indonesia}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:30, 1 May 2020 (UTC) === Global lock for [[User:Xiplus|Xiplus]] === {{Status}} *{{LockHide|Xiplus}} :Test. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 01:45, 2 May 2020 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for LuniZunie === {{Status|}} <!-- Do not remove this template --> * {{LockHide|LuniZunie}} Long-term abuse [[User:LuniZunie|LuniZunie]] ([[User talk:LuniZunie|talk]]) 01:20, 13 June 2026 (UTC) == See also == <!-- DO NOT EDIT UNDER THIS LINE --> {{/Archivefooter}} {{RF}} 63i4ngz8zjsfryzvf1a5wcvbcfhhh2z 746339 746338 2026-06-13T01:23:29Z LuniZunie 71174 Requesting global block 746339 wikitext text/x-wiki {{mbox|type=content|text=Due to persistent vandalism and disruption on this page, this page is currently semi-protected indefinitely. Globally blocked or locked users should appeal to {{nospam|stewards|wikimedia.org}}.<br />If your account was locked with a reason "Compromised account", please contact {{nospam|ca|wikimedia.org}}.}} {{dynamite|title=:Steward requests/Global/Header}}{{NOINDEX}}__TOC__<br style="clear:both"/> == Requests for global (un)block == <span id="B"/> {{dynamite|title=:Steward requests/Global/block-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global block for [[Special:Contributions/126.24.177.199|126.24.177.199]] === {{Status}} * {{Luxotool|126.24.177.199}} :Open proxy - running [[en:OpenVPN]] on port 1767 and 1393. An initial 3-month block should do the job. --[[User:MrClog|MrClog]] ([[User talk:MrClog|talk]]) 08:29, 1 May 2020 (UTC) {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:UpsandDowns1234|<span style="color:green;">Ups</span>]] and [[User talk:UpsandDowns1234|<span style="color:red;">Downs</span>]] ([[Special:Contributions/UpsandDowns1234|↕]]) 18:55, 18 May 2020 (UTC) === Global lock for [username hidden] === {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:Awesome Aasim|Awesome Aasim]] ([[User talk:Awesome Aasim|talk]]) 19:21, 18 May 2020 (UTC) === Global block for ~2026-34844-35 === {{Status}} <!-- Do not remove this template --> * {{Luxotool|~2026-34844-35}} Long-term abuse [[User:LuniZunie|LuniZunie]] ([[User talk:LuniZunie|talk]]) 01:23, 13 June 2026 (UTC) == Requests for global (un)lock and (un)hiding == <span id="L"/> {{dynamite|title=:Steward requests/Global/lock-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global lock for [[User:Kshitij pandey 007|Kshitij pandey 007]] === {{Status}} *{{LockHide|Kshitij pandey 007}} :Constant vandalism. ---'''[[User:J ansari|<span style="background:#5d9731; color:white;padding:2px;">J. Ansari</span>]] [[User talk:J ansari|<span style="background:#1049AB; color:white; padding:2px;">Talk</span>]]''' 09:25, 1 May 2020 (UTC) ::{{re|J ansari}} Could this not be handled locally in Hindi Wikipedia? --[[User:Green Giant|Green Giant]] ([[User talk:Green Giant|talk]]) 18:13, 1 May 2020 (UTC) ===Global lock for LocoWiki=== {{status|notdone}} *{{lockHide|LocoWiki}} ;Evidence: *[[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] *[[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] LTA for self-promotion crosswiki Regards!!!! [[User:Ezarate|Esteban]] ([[User talk:Ezarate|talk]]) 12:56, 1 May 2020 (UTC) :{{notdone}} No evidence of cross wiki abuse? [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:19, 1 May 2020 (UTC) === Global lock for [[User:Sriramakoti|Sriramakoti]] === {{Status|done}} *{{LockHide|Sriramakoti}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 13:56, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:16, 1 May 2020 (UTC) === Global lock for [[User:JosePenj|JosePenj]] === {{Status|notdone}} *{{MultiLock|JosePenj|Arman643543|Arman115786}} :Abusing multiple account. They created same topic article (James Richman) in xwiki and these account created few day before. --[[User:SCP-2000|<span style="color: #383838;">'''SCP'''</span>]][[User talk:SCP-2000|<span style="color: #242424;">'''-20'''</span>]][[Special:Contributions/SCP-2000|<span style="color: #080808;">'''00'''</span>]] 15:22, 1 May 2020 (UTC) :{{notdone}} No evidence of abuse - accounts are not blocked anywhere. [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:24, 1 May 2020 (UTC) === Global lock/unlock for [[User:Minhaj2288|Minhaj2288]] === {{status|done}} <!-- do not remove this template --> * {{LockHide|Minhaj2288}} * Crosswiki spammer --[[User:Seewolf|Harald Krichel]] ([[User talk:Seewolf|talk]]) 17:45, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:09, 1 May 2020 (UTC) === Global lock for [[User:AugustaFeaster7|AugustaFeaster7]] === {{Status|done}} *{{LockHide|AugustaFeaster7}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:29, 1 May 2020 (UTC) ::{{done}}--[[User:Sakretsu|Sakretsu]] ([[User talk:Sakretsu|炸裂]]) 21:35, 1 May 2020 (UTC) === Global lock for [[User:Autodesk Sketchbook Indonesia|Autodesk Sketchbook Indonesia]] === {{Status}} *{{LockHide|Autodesk Sketchbook Indonesia}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:30, 1 May 2020 (UTC) === Global lock for [[User:Xiplus|Xiplus]] === {{Status}} *{{LockHide|Xiplus}} :Test. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 01:45, 2 May 2020 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for LuniZunie === {{Status|}} <!-- Do not remove this template --> * {{LockHide|LuniZunie}} Long-term abuse [[User:LuniZunie|LuniZunie]] ([[User talk:LuniZunie|talk]]) 01:20, 13 June 2026 (UTC) == See also == <!-- DO NOT EDIT UNDER THIS LINE --> {{/Archivefooter}} {{RF}} 9n4aq72jzy4bydm44awqtj3sh7lmpem 746340 746339 2026-06-13T01:23:58Z LuniZunie 71174 Restored revision 738684 by [[Special:Contributions/Enbi|Enbi]] ([[en:w:User:BrandonXLF/Restorer|Restorer]]) 746340 wikitext text/x-wiki {{mbox|type=content|text=Due to persistent vandalism and disruption on this page, this page is currently semi-protected indefinitely. Globally blocked or locked users should appeal to {{nospam|stewards|wikimedia.org}}.<br />If your account was locked with a reason "Compromised account", please contact {{nospam|ca|wikimedia.org}}.}} {{dynamite|title=:Steward requests/Global/Header}}{{NOINDEX}}__TOC__<br style="clear:both"/> == Requests for global (un)block == <span id="B"/> {{dynamite|title=:Steward requests/Global/block-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global block for [[Special:Contributions/126.24.177.199|126.24.177.199]] === {{Status}} * {{Luxotool|126.24.177.199}} :Open proxy - running [[en:OpenVPN]] on port 1767 and 1393. An initial 3-month block should do the job. --[[User:MrClog|MrClog]] ([[User talk:MrClog|talk]]) 08:29, 1 May 2020 (UTC) {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:UpsandDowns1234|<span style="color:green;">Ups</span>]] and [[User talk:UpsandDowns1234|<span style="color:red;">Downs</span>]] ([[Special:Contributions/UpsandDowns1234|↕]]) 18:55, 18 May 2020 (UTC) === Global lock for [username hidden] === {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:Awesome Aasim|Awesome Aasim]] ([[User talk:Awesome Aasim|talk]]) 19:21, 18 May 2020 (UTC) == Requests for global (un)lock and (un)hiding == <span id="L"/> {{dynamite|title=:Steward requests/Global/lock-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global lock for [[User:Kshitij pandey 007|Kshitij pandey 007]] === {{Status}} *{{LockHide|Kshitij pandey 007}} :Constant vandalism. ---'''[[User:J ansari|<span style="background:#5d9731; color:white;padding:2px;">J. Ansari</span>]] [[User talk:J ansari|<span style="background:#1049AB; color:white; padding:2px;">Talk</span>]]''' 09:25, 1 May 2020 (UTC) ::{{re|J ansari}} Could this not be handled locally in Hindi Wikipedia? --[[User:Green Giant|Green Giant]] ([[User talk:Green Giant|talk]]) 18:13, 1 May 2020 (UTC) ===Global lock for LocoWiki=== {{status|notdone}} *{{lockHide|LocoWiki}} ;Evidence: *[[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] *[[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] LTA for self-promotion crosswiki Regards!!!! [[User:Ezarate|Esteban]] ([[User talk:Ezarate|talk]]) 12:56, 1 May 2020 (UTC) :{{notdone}} No evidence of cross wiki abuse? [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:19, 1 May 2020 (UTC) === Global lock for [[User:Sriramakoti|Sriramakoti]] === {{Status|done}} *{{LockHide|Sriramakoti}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 13:56, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:16, 1 May 2020 (UTC) === Global lock for [[User:JosePenj|JosePenj]] === {{Status|notdone}} *{{MultiLock|JosePenj|Arman643543|Arman115786}} :Abusing multiple account. They created same topic article (James Richman) in xwiki and these account created few day before. --[[User:SCP-2000|<span style="color: #383838;">'''SCP'''</span>]][[User talk:SCP-2000|<span style="color: #242424;">'''-20'''</span>]][[Special:Contributions/SCP-2000|<span style="color: #080808;">'''00'''</span>]] 15:22, 1 May 2020 (UTC) :{{notdone}} No evidence of abuse - accounts are not blocked anywhere. [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:24, 1 May 2020 (UTC) === Global lock/unlock for [[User:Minhaj2288|Minhaj2288]] === {{status|done}} <!-- do not remove this template --> * {{LockHide|Minhaj2288}} * Crosswiki spammer --[[User:Seewolf|Harald Krichel]] ([[User talk:Seewolf|talk]]) 17:45, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:09, 1 May 2020 (UTC) === Global lock for [[User:AugustaFeaster7|AugustaFeaster7]] === {{Status|done}} *{{LockHide|AugustaFeaster7}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:29, 1 May 2020 (UTC) ::{{done}}--[[User:Sakretsu|Sakretsu]] ([[User talk:Sakretsu|炸裂]]) 21:35, 1 May 2020 (UTC) === Global lock for [[User:Autodesk Sketchbook Indonesia|Autodesk Sketchbook Indonesia]] === {{Status}} *{{LockHide|Autodesk Sketchbook Indonesia}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:30, 1 May 2020 (UTC) === Global lock for [[User:Xiplus|Xiplus]] === {{Status}} *{{LockHide|Xiplus}} :Test. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 01:45, 2 May 2020 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) == See also == <!-- DO NOT EDIT UNDER THIS LINE --> {{/Archivefooter}} {{RF}} 0saukh334fvktpxon7q4dxy0r0iguf6 746341 746340 2026-06-13T01:34:06Z LuniZunie 71174 Requesting global lock 746341 wikitext text/x-wiki {{mbox|type=content|text=Due to persistent vandalism and disruption on this page, this page is currently semi-protected indefinitely. Globally blocked or locked users should appeal to {{nospam|stewards|wikimedia.org}}.<br />If your account was locked with a reason "Compromised account", please contact {{nospam|ca|wikimedia.org}}.}} {{dynamite|title=:Steward requests/Global/Header}}{{NOINDEX}}__TOC__<br style="clear:both"/> == Requests for global (un)block == <span id="B"/> {{dynamite|title=:Steward requests/Global/block-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global block for [[Special:Contributions/126.24.177.199|126.24.177.199]] === {{Status}} * {{Luxotool|126.24.177.199}} :Open proxy - running [[en:OpenVPN]] on port 1767 and 1393. An initial 3-month block should do the job. --[[User:MrClog|MrClog]] ([[User talk:MrClog|talk]]) 08:29, 1 May 2020 (UTC) {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:UpsandDowns1234|<span style="color:green;">Ups</span>]] and [[User talk:UpsandDowns1234|<span style="color:red;">Downs</span>]] ([[Special:Contributions/UpsandDowns1234|↕]]) 18:55, 18 May 2020 (UTC) === Global lock for [username hidden] === {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:Awesome Aasim|Awesome Aasim]] ([[User talk:Awesome Aasim|talk]]) 19:21, 18 May 2020 (UTC) == Requests for global (un)lock and (un)hiding == <span id="L"/> {{dynamite|title=:Steward requests/Global/lock-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global lock for [[User:Kshitij pandey 007|Kshitij pandey 007]] === {{Status}} *{{LockHide|Kshitij pandey 007}} :Constant vandalism. ---'''[[User:J ansari|<span style="background:#5d9731; color:white;padding:2px;">J. Ansari</span>]] [[User talk:J ansari|<span style="background:#1049AB; color:white; padding:2px;">Talk</span>]]''' 09:25, 1 May 2020 (UTC) ::{{re|J ansari}} Could this not be handled locally in Hindi Wikipedia? --[[User:Green Giant|Green Giant]] ([[User talk:Green Giant|talk]]) 18:13, 1 May 2020 (UTC) ===Global lock for LocoWiki=== {{status|notdone}} *{{lockHide|LocoWiki}} ;Evidence: *[[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] *[[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] LTA for self-promotion crosswiki Regards!!!! [[User:Ezarate|Esteban]] ([[User talk:Ezarate|talk]]) 12:56, 1 May 2020 (UTC) :{{notdone}} No evidence of cross wiki abuse? [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:19, 1 May 2020 (UTC) === Global lock for [[User:Sriramakoti|Sriramakoti]] === {{Status|done}} *{{LockHide|Sriramakoti}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 13:56, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:16, 1 May 2020 (UTC) === Global lock for [[User:JosePenj|JosePenj]] === {{Status|notdone}} *{{MultiLock|JosePenj|Arman643543|Arman115786}} :Abusing multiple account. They created same topic article (James Richman) in xwiki and these account created few day before. --[[User:SCP-2000|<span style="color: #383838;">'''SCP'''</span>]][[User talk:SCP-2000|<span style="color: #242424;">'''-20'''</span>]][[Special:Contributions/SCP-2000|<span style="color: #080808;">'''00'''</span>]] 15:22, 1 May 2020 (UTC) :{{notdone}} No evidence of abuse - accounts are not blocked anywhere. [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:24, 1 May 2020 (UTC) === Global lock/unlock for [[User:Minhaj2288|Minhaj2288]] === {{status|done}} <!-- do not remove this template --> * {{LockHide|Minhaj2288}} * Crosswiki spammer --[[User:Seewolf|Harald Krichel]] ([[User talk:Seewolf|talk]]) 17:45, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:09, 1 May 2020 (UTC) === Global lock for [[User:AugustaFeaster7|AugustaFeaster7]] === {{Status|done}} *{{LockHide|AugustaFeaster7}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:29, 1 May 2020 (UTC) ::{{done}}--[[User:Sakretsu|Sakretsu]] ([[User talk:Sakretsu|炸裂]]) 21:35, 1 May 2020 (UTC) === Global lock for [[User:Autodesk Sketchbook Indonesia|Autodesk Sketchbook Indonesia]] === {{Status}} *{{LockHide|Autodesk Sketchbook Indonesia}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:30, 1 May 2020 (UTC) === Global lock for [[User:Xiplus|Xiplus]] === {{Status}} *{{LockHide|Xiplus}} :Test. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 01:45, 2 May 2020 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for LuniZunie === {{Status}} <!-- Do not remove this template --> * {{LockHide|LuniZunie}} Long-term abuse [[User:LuniZunie|LuniZunie]] ([[User talk:LuniZunie|talk]]) 01:34, 13 June 2026 (UTC) == See also == <!-- DO NOT EDIT UNDER THIS LINE --> {{/Archivefooter}} {{RF}} 293bnnr0j0y0i24l3sdmijetqi2f9sc 746342 746341 2026-06-13T01:35:27Z LuniZunie 71174 Requesting global lock 746342 wikitext text/x-wiki {{mbox|type=content|text=Due to persistent vandalism and disruption on this page, this page is currently semi-protected indefinitely. Globally blocked or locked users should appeal to {{nospam|stewards|wikimedia.org}}.<br />If your account was locked with a reason "Compromised account", please contact {{nospam|ca|wikimedia.org}}.}} {{dynamite|title=:Steward requests/Global/Header}}{{NOINDEX}}__TOC__<br style="clear:both"/> == Requests for global (un)block == <span id="B"/> {{dynamite|title=:Steward requests/Global/block-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global block for [[Special:Contributions/126.24.177.199|126.24.177.199]] === {{Status}} * {{Luxotool|126.24.177.199}} :Open proxy - running [[en:OpenVPN]] on port 1767 and 1393. An initial 3-month block should do the job. --[[User:MrClog|MrClog]] ([[User talk:MrClog|talk]]) 08:29, 1 May 2020 (UTC) {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:UpsandDowns1234|<span style="color:green;">Ups</span>]] and [[User talk:UpsandDowns1234|<span style="color:red;">Downs</span>]] ([[Special:Contributions/UpsandDowns1234|↕]]) 18:55, 18 May 2020 (UTC) === Global lock for [username hidden] === {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:Awesome Aasim|Awesome Aasim]] ([[User talk:Awesome Aasim|talk]]) 19:21, 18 May 2020 (UTC) == Requests for global (un)lock and (un)hiding == <span id="L"/> {{dynamite|title=:Steward requests/Global/lock-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global lock for [[User:Kshitij pandey 007|Kshitij pandey 007]] === {{Status}} *{{LockHide|Kshitij pandey 007}} :Constant vandalism. ---'''[[User:J ansari|<span style="background:#5d9731; color:white;padding:2px;">J. Ansari</span>]] [[User talk:J ansari|<span style="background:#1049AB; color:white; padding:2px;">Talk</span>]]''' 09:25, 1 May 2020 (UTC) ::{{re|J ansari}} Could this not be handled locally in Hindi Wikipedia? --[[User:Green Giant|Green Giant]] ([[User talk:Green Giant|talk]]) 18:13, 1 May 2020 (UTC) ===Global lock for LocoWiki=== {{status|notdone}} *{{lockHide|LocoWiki}} ;Evidence: *[[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] *[[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] LTA for self-promotion crosswiki Regards!!!! [[User:Ezarate|Esteban]] ([[User talk:Ezarate|talk]]) 12:56, 1 May 2020 (UTC) :{{notdone}} No evidence of cross wiki abuse? [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:19, 1 May 2020 (UTC) === Global lock for [[User:Sriramakoti|Sriramakoti]] === {{Status|done}} *{{LockHide|Sriramakoti}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 13:56, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:16, 1 May 2020 (UTC) === Global lock for [[User:JosePenj|JosePenj]] === {{Status|notdone}} *{{MultiLock|JosePenj|Arman643543|Arman115786}} :Abusing multiple account. They created same topic article (James Richman) in xwiki and these account created few day before. --[[User:SCP-2000|<span style="color: #383838;">'''SCP'''</span>]][[User talk:SCP-2000|<span style="color: #242424;">'''-20'''</span>]][[Special:Contributions/SCP-2000|<span style="color: #080808;">'''00'''</span>]] 15:22, 1 May 2020 (UTC) :{{notdone}} No evidence of abuse - accounts are not blocked anywhere. [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:24, 1 May 2020 (UTC) === Global lock/unlock for [[User:Minhaj2288|Minhaj2288]] === {{status|done}} <!-- do not remove this template --> * {{LockHide|Minhaj2288}} * Crosswiki spammer --[[User:Seewolf|Harald Krichel]] ([[User talk:Seewolf|talk]]) 17:45, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:09, 1 May 2020 (UTC) === Global lock for [[User:AugustaFeaster7|AugustaFeaster7]] === {{Status|done}} *{{LockHide|AugustaFeaster7}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:29, 1 May 2020 (UTC) ::{{done}}--[[User:Sakretsu|Sakretsu]] ([[User talk:Sakretsu|炸裂]]) 21:35, 1 May 2020 (UTC) === Global lock for [[User:Autodesk Sketchbook Indonesia|Autodesk Sketchbook Indonesia]] === {{Status}} *{{LockHide|Autodesk Sketchbook Indonesia}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:30, 1 May 2020 (UTC) === Global lock for [[User:Xiplus|Xiplus]] === {{Status}} *{{LockHide|Xiplus}} :Test. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 01:45, 2 May 2020 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for LuniZunie === {{Status}} <!-- Do not remove this template --> * {{LockHide|LuniZunie}} Long-term abuse [[User:LuniZunie|LuniZunie]] ([[User talk:LuniZunie|talk]]) 01:34, 13 June 2026 (UTC) === Global lock for === {{Status}} <!-- Do not remove this template --> * {{LockHide|}} Long-term abuse [[User:LuniZunie|LuniZunie]] ([[User talk:LuniZunie|talk]]) 01:35, 13 June 2026 (UTC) == See also == <!-- DO NOT EDIT UNDER THIS LINE --> {{/Archivefooter}} {{RF}} 9vjh11rpzv01jfo0oalljtc83ylc0fx 746343 746342 2026-06-13T01:38:11Z LuniZunie 71174 Restored revision 746340 by [[Special:Contributions/LuniZunie|LuniZunie]] ([[en:w:User:BrandonXLF/Restorer|Restorer]]) 746343 wikitext text/x-wiki {{mbox|type=content|text=Due to persistent vandalism and disruption on this page, this page is currently semi-protected indefinitely. Globally blocked or locked users should appeal to {{nospam|stewards|wikimedia.org}}.<br />If your account was locked with a reason "Compromised account", please contact {{nospam|ca|wikimedia.org}}.}} {{dynamite|title=:Steward requests/Global/Header}}{{NOINDEX}}__TOC__<br style="clear:both"/> == Requests for global (un)block == <span id="B"/> {{dynamite|title=:Steward requests/Global/block-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global block for [[Special:Contributions/126.24.177.199|126.24.177.199]] === {{Status}} * {{Luxotool|126.24.177.199}} :Open proxy - running [[en:OpenVPN]] on port 1767 and 1393. An initial 3-month block should do the job. --[[User:MrClog|MrClog]] ([[User talk:MrClog|talk]]) 08:29, 1 May 2020 (UTC) {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:UpsandDowns1234|<span style="color:green;">Ups</span>]] and [[User talk:UpsandDowns1234|<span style="color:red;">Downs</span>]] ([[Special:Contributions/UpsandDowns1234|↕]]) 18:55, 18 May 2020 (UTC) === Global lock for [username hidden] === {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:Awesome Aasim|Awesome Aasim]] ([[User talk:Awesome Aasim|talk]]) 19:21, 18 May 2020 (UTC) == Requests for global (un)lock and (un)hiding == <span id="L"/> {{dynamite|title=:Steward requests/Global/lock-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global lock for [[User:Kshitij pandey 007|Kshitij pandey 007]] === {{Status}} *{{LockHide|Kshitij pandey 007}} :Constant vandalism. ---'''[[User:J ansari|<span style="background:#5d9731; color:white;padding:2px;">J. Ansari</span>]] [[User talk:J ansari|<span style="background:#1049AB; color:white; padding:2px;">Talk</span>]]''' 09:25, 1 May 2020 (UTC) ::{{re|J ansari}} Could this not be handled locally in Hindi Wikipedia? --[[User:Green Giant|Green Giant]] ([[User talk:Green Giant|talk]]) 18:13, 1 May 2020 (UTC) ===Global lock for LocoWiki=== {{status|notdone}} *{{lockHide|LocoWiki}} ;Evidence: *[[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] *[[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] LTA for self-promotion crosswiki Regards!!!! [[User:Ezarate|Esteban]] ([[User talk:Ezarate|talk]]) 12:56, 1 May 2020 (UTC) :{{notdone}} No evidence of cross wiki abuse? [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:19, 1 May 2020 (UTC) === Global lock for [[User:Sriramakoti|Sriramakoti]] === {{Status|done}} *{{LockHide|Sriramakoti}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 13:56, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:16, 1 May 2020 (UTC) === Global lock for [[User:JosePenj|JosePenj]] === {{Status|notdone}} *{{MultiLock|JosePenj|Arman643543|Arman115786}} :Abusing multiple account. They created same topic article (James Richman) in xwiki and these account created few day before. --[[User:SCP-2000|<span style="color: #383838;">'''SCP'''</span>]][[User talk:SCP-2000|<span style="color: #242424;">'''-20'''</span>]][[Special:Contributions/SCP-2000|<span style="color: #080808;">'''00'''</span>]] 15:22, 1 May 2020 (UTC) :{{notdone}} No evidence of abuse - accounts are not blocked anywhere. [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:24, 1 May 2020 (UTC) === Global lock/unlock for [[User:Minhaj2288|Minhaj2288]] === {{status|done}} <!-- do not remove this template --> * {{LockHide|Minhaj2288}} * Crosswiki spammer --[[User:Seewolf|Harald Krichel]] ([[User talk:Seewolf|talk]]) 17:45, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:09, 1 May 2020 (UTC) === Global lock for [[User:AugustaFeaster7|AugustaFeaster7]] === {{Status|done}} *{{LockHide|AugustaFeaster7}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:29, 1 May 2020 (UTC) ::{{done}}--[[User:Sakretsu|Sakretsu]] ([[User talk:Sakretsu|炸裂]]) 21:35, 1 May 2020 (UTC) === Global lock for [[User:Autodesk Sketchbook Indonesia|Autodesk Sketchbook Indonesia]] === {{Status}} *{{LockHide|Autodesk Sketchbook Indonesia}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:30, 1 May 2020 (UTC) === Global lock for [[User:Xiplus|Xiplus]] === {{Status}} *{{LockHide|Xiplus}} :Test. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 01:45, 2 May 2020 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) == See also == <!-- DO NOT EDIT UNDER THIS LINE --> {{/Archivefooter}} {{RF}} 0saukh334fvktpxon7q4dxy0r0iguf6 746344 746343 2026-06-13T01:38:20Z LuniZunie 71174 Requesting global lock 746344 wikitext text/x-wiki {{mbox|type=content|text=Due to persistent vandalism and disruption on this page, this page is currently semi-protected indefinitely. Globally blocked or locked users should appeal to {{nospam|stewards|wikimedia.org}}.<br />If your account was locked with a reason "Compromised account", please contact {{nospam|ca|wikimedia.org}}.}} {{dynamite|title=:Steward requests/Global/Header}}{{NOINDEX}}__TOC__<br style="clear:both"/> == Requests for global (un)block == <span id="B"/> {{dynamite|title=:Steward requests/Global/block-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global block for [[Special:Contributions/126.24.177.199|126.24.177.199]] === {{Status}} * {{Luxotool|126.24.177.199}} :Open proxy - running [[en:OpenVPN]] on port 1767 and 1393. An initial 3-month block should do the job. --[[User:MrClog|MrClog]] ([[User talk:MrClog|talk]]) 08:29, 1 May 2020 (UTC) {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:UpsandDowns1234|<span style="color:green;">Ups</span>]] and [[User talk:UpsandDowns1234|<span style="color:red;">Downs</span>]] ([[Special:Contributions/UpsandDowns1234|↕]]) 18:55, 18 May 2020 (UTC) === Global lock for [username hidden] === {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:Awesome Aasim|Awesome Aasim]] ([[User talk:Awesome Aasim|talk]]) 19:21, 18 May 2020 (UTC) == Requests for global (un)lock and (un)hiding == <span id="L"/> {{dynamite|title=:Steward requests/Global/lock-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global lock for [[User:Kshitij pandey 007|Kshitij pandey 007]] === {{Status}} *{{LockHide|Kshitij pandey 007}} :Constant vandalism. ---'''[[User:J ansari|<span style="background:#5d9731; color:white;padding:2px;">J. Ansari</span>]] [[User talk:J ansari|<span style="background:#1049AB; color:white; padding:2px;">Talk</span>]]''' 09:25, 1 May 2020 (UTC) ::{{re|J ansari}} Could this not be handled locally in Hindi Wikipedia? --[[User:Green Giant|Green Giant]] ([[User talk:Green Giant|talk]]) 18:13, 1 May 2020 (UTC) ===Global lock for LocoWiki=== {{status|notdone}} *{{lockHide|LocoWiki}} ;Evidence: *[[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] *[[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] LTA for self-promotion crosswiki Regards!!!! [[User:Ezarate|Esteban]] ([[User talk:Ezarate|talk]]) 12:56, 1 May 2020 (UTC) :{{notdone}} No evidence of cross wiki abuse? [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:19, 1 May 2020 (UTC) === Global lock for [[User:Sriramakoti|Sriramakoti]] === {{Status|done}} *{{LockHide|Sriramakoti}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 13:56, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:16, 1 May 2020 (UTC) === Global lock for [[User:JosePenj|JosePenj]] === {{Status|notdone}} *{{MultiLock|JosePenj|Arman643543|Arman115786}} :Abusing multiple account. They created same topic article (James Richman) in xwiki and these account created few day before. --[[User:SCP-2000|<span style="color: #383838;">'''SCP'''</span>]][[User talk:SCP-2000|<span style="color: #242424;">'''-20'''</span>]][[Special:Contributions/SCP-2000|<span style="color: #080808;">'''00'''</span>]] 15:22, 1 May 2020 (UTC) :{{notdone}} No evidence of abuse - accounts are not blocked anywhere. [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:24, 1 May 2020 (UTC) === Global lock/unlock for [[User:Minhaj2288|Minhaj2288]] === {{status|done}} <!-- do not remove this template --> * {{LockHide|Minhaj2288}} * Crosswiki spammer --[[User:Seewolf|Harald Krichel]] ([[User talk:Seewolf|talk]]) 17:45, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:09, 1 May 2020 (UTC) === Global lock for [[User:AugustaFeaster7|AugustaFeaster7]] === {{Status|done}} *{{LockHide|AugustaFeaster7}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:29, 1 May 2020 (UTC) ::{{done}}--[[User:Sakretsu|Sakretsu]] ([[User talk:Sakretsu|炸裂]]) 21:35, 1 May 2020 (UTC) === Global lock for [[User:Autodesk Sketchbook Indonesia|Autodesk Sketchbook Indonesia]] === {{Status}} *{{LockHide|Autodesk Sketchbook Indonesia}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:30, 1 May 2020 (UTC) === Global lock for [[User:Xiplus|Xiplus]] === {{Status}} *{{LockHide|Xiplus}} :Test. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 01:45, 2 May 2020 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for LuniZunie === {{Status}} <!-- Do not remove this template --> * {{LockHide|LuniZunie}} Long-term abuse [[User:LuniZunie|LuniZunie]] ([[User talk:LuniZunie|talk]]) 01:38, 13 June 2026 (UTC) == See also == <!-- DO NOT EDIT UNDER THIS LINE --> {{/Archivefooter}} {{RF}} 26ozfndfkzll8377lz7z6uqnbh65wbi 746346 746344 2026-06-13T02:48:02Z MariaJDHicky and Astra on a open proxy 21 74412 746346 wikitext text/x-wiki {{mbox|type=content|text=Due to persistent vandalism and disruption on this page, this page is currently semi-protected indefinitely. Globally blocked or locked users should appeal to {{nospam|stewards|wikimedia.org}}.<br />If your account was locked with a reason "Compromised account", please contact {{nospam|ca|wikimedia.org}}.}} {{dynamite|title=:Steward requests/Global/Header}}{{NOINDEX}}__TOC__<br style="clear:both"/> == Requests for global (un)block == <span id="B"/> {{dynamite|title=:Steward requests/Global/block-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global block for [[Special:Contributions/126.24.177.199|126.24.177.199]] === {{Status}} * {{Luxotool|126.24.177.199}} :Open proxy - running [[en:OpenVPN]] on port 1767 and 1393. An initial 3-month block should do the job. --[[User:MrClog|MrClog]] ([[User talk:MrClog|talk]]) 08:29, 1 May 2020 (UTC) {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:UpsandDowns1234|<span style="color:green;">Ups</span>]] and [[User talk:UpsandDowns1234|<span style="color:red;">Downs</span>]] ([[Special:Contributions/UpsandDowns1234|↕]]) 18:55, 18 May 2020 (UTC) === Global lock for [username hidden] === {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:Awesome Aasim|Awesome Aasim]] ([[User talk:Awesome Aasim|talk]]) 19:21, 18 May 2020 (UTC) == Requests for global (un)lock and (un)hiding == <span id="L"/> {{dynamite|title=:Steward requests/Global/lock-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global lock for [[User:Kshitij pandey 007|Kshitij pandey 007]] === {{Status}} *{{LockHide|Kshitij pandey 007}} :Constant vandalism. ---'''[[User:J ansari|<span style="background:#5d9731; color:white;padding:2px;">J. Ansari</span>]] [[User talk:J ansari|<span style="background:#1049AB; color:white; padding:2px;">Talk</span>]]''' 09:25, 1 May 2020 (UTC) ::{{re|J ansari}} Could this not be handled locally in Hindi Wikipedia? --[[User:Green Giant|Green Giant]] ([[User talk:Green Giant|talk]]) 18:13, 1 May 2020 (UTC) ===Global lock for LocoWiki=== {{status|notdone}} *{{lockHide|LocoWiki}} ;Evidence: *[[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] *[[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] LTA for self-promotion crosswiki Regards!!!! [[User:Ezarate|Esteban]] ([[User talk:Ezarate|talk]]) 12:56, 1 May 2020 (UTC) :{{notdone}} No evidence of cross wiki abuse? [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:19, 1 May 2020 (UTC) === Global lock for [[User:Sriramakoti|Sriramakoti]] === {{Status|done}} *{{LockHide|Sriramakoti}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 13:56, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:16, 1 May 2020 (UTC) === Global lock for [[User:JosePenj|JosePenj]] === {{Status|notdone}} *{{MultiLock|JosePenj|Arman643543|Arman115786}} :Abusing multiple account. They created same topic article (James Richman) in xwiki and these account created few day before. --[[User:SCP-2000|<span style="color: #383838;">'''SCP'''</span>]][[User talk:SCP-2000|<span style="color: #242424;">'''-20'''</span>]][[Special:Contributions/SCP-2000|<span style="color: #080808;">'''00'''</span>]] 15:22, 1 May 2020 (UTC) :{{notdone}} No evidence of abuse - accounts are not blocked anywhere. [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:24, 1 May 2020 (UTC) === Global lock/unlock for [[User:Minhaj2288|Minhaj2288]] === {{status|done}} <!-- do not remove this template --> * {{LockHide|Minhaj2288}} * Crosswiki spammer --[[User:Seewolf|Harald Krichel]] ([[User talk:Seewolf|talk]]) 17:45, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:09, 1 May 2020 (UTC) === Global lock for [[User:AugustaFeaster7|AugustaFeaster7]] === {{Status|done}} *{{LockHide|AugustaFeaster7}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:29, 1 May 2020 (UTC) ::{{done}}--[[User:Sakretsu|Sakretsu]] ([[User talk:Sakretsu|炸裂]]) 21:35, 1 May 2020 (UTC) === Global lock for [[User:Autodesk Sketchbook Indonesia|Autodesk Sketchbook Indonesia]] === {{Status}} *{{LockHide|Autodesk Sketchbook Indonesia}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:30, 1 May 2020 (UTC) === Global lock for [[User:Xiplus|Xiplus]] === {{Status}} *{{LockHide|Xiplus}} :Test. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 01:45, 2 May 2020 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for MyMomIsGay === {{Status}} <!-- Do not remove this template --> * {{LockHide|LuniZunie}} Long-term abuse [[User:LuniZunie|LuniZunie]] ([[User talk:LuniZunie|talk]]) 01:38, 13 June 2026 (UTC) == See also == <!-- DO NOT EDIT UNDER THIS LINE --> {{/Archivefooter}} {{RF}} 11k6qgds6qks2jorgc26i1or33ugptz 746347 746346 2026-06-13T02:48:27Z MariaJDHicky and Astra on a open proxy 21 74412 Replaced content with "__TOC__ [[en:OpenVPN]] [[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] [[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]]" 746347 wikitext text/x-wiki __TOC__ [[en:OpenVPN]] [[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] [[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] lfe97xy034gm44c3ualagosarxemheo 746348 746347 2026-06-13T02:48:29Z AutoModeratorTest 61468 Reverted edits by [[Special:Contributions/MariaJDHicky and Astra on a open proxy 21|MariaJDHicky and Astra on a open proxy 21]] ([[User talk:MariaJDHicky and Astra on a open proxy 21|talk]]) to last revision by [[User:LuniZunie|LuniZunie]] 746344 wikitext text/x-wiki {{mbox|type=content|text=Due to persistent vandalism and disruption on this page, this page is currently semi-protected indefinitely. Globally blocked or locked users should appeal to {{nospam|stewards|wikimedia.org}}.<br />If your account was locked with a reason "Compromised account", please contact {{nospam|ca|wikimedia.org}}.}} {{dynamite|title=:Steward requests/Global/Header}}{{NOINDEX}}__TOC__<br style="clear:both"/> == Requests for global (un)block == <span id="B"/> {{dynamite|title=:Steward requests/Global/block-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global block for [[Special:Contributions/126.24.177.199|126.24.177.199]] === {{Status}} * {{Luxotool|126.24.177.199}} :Open proxy - running [[en:OpenVPN]] on port 1767 and 1393. An initial 3-month block should do the job. --[[User:MrClog|MrClog]] ([[User talk:MrClog|talk]]) 08:29, 1 May 2020 (UTC) {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:UpsandDowns1234|<span style="color:green;">Ups</span>]] and [[User talk:UpsandDowns1234|<span style="color:red;">Downs</span>]] ([[Special:Contributions/UpsandDowns1234|↕]]) 18:55, 18 May 2020 (UTC) === Global lock for [username hidden] === {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:Awesome Aasim|Awesome Aasim]] ([[User talk:Awesome Aasim|talk]]) 19:21, 18 May 2020 (UTC) == Requests for global (un)lock and (un)hiding == <span id="L"/> {{dynamite|title=:Steward requests/Global/lock-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global lock for [[User:Kshitij pandey 007|Kshitij pandey 007]] === {{Status}} *{{LockHide|Kshitij pandey 007}} :Constant vandalism. ---'''[[User:J ansari|<span style="background:#5d9731; color:white;padding:2px;">J. Ansari</span>]] [[User talk:J ansari|<span style="background:#1049AB; color:white; padding:2px;">Talk</span>]]''' 09:25, 1 May 2020 (UTC) ::{{re|J ansari}} Could this not be handled locally in Hindi Wikipedia? --[[User:Green Giant|Green Giant]] ([[User talk:Green Giant|talk]]) 18:13, 1 May 2020 (UTC) ===Global lock for LocoWiki=== {{status|notdone}} *{{lockHide|LocoWiki}} ;Evidence: *[[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] *[[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] LTA for self-promotion crosswiki Regards!!!! [[User:Ezarate|Esteban]] ([[User talk:Ezarate|talk]]) 12:56, 1 May 2020 (UTC) :{{notdone}} No evidence of cross wiki abuse? [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:19, 1 May 2020 (UTC) === Global lock for [[User:Sriramakoti|Sriramakoti]] === {{Status|done}} *{{LockHide|Sriramakoti}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 13:56, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:16, 1 May 2020 (UTC) === Global lock for [[User:JosePenj|JosePenj]] === {{Status|notdone}} *{{MultiLock|JosePenj|Arman643543|Arman115786}} :Abusing multiple account. They created same topic article (James Richman) in xwiki and these account created few day before. --[[User:SCP-2000|<span style="color: #383838;">'''SCP'''</span>]][[User talk:SCP-2000|<span style="color: #242424;">'''-20'''</span>]][[Special:Contributions/SCP-2000|<span style="color: #080808;">'''00'''</span>]] 15:22, 1 May 2020 (UTC) :{{notdone}} No evidence of abuse - accounts are not blocked anywhere. [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:24, 1 May 2020 (UTC) === Global lock/unlock for [[User:Minhaj2288|Minhaj2288]] === {{status|done}} <!-- do not remove this template --> * {{LockHide|Minhaj2288}} * Crosswiki spammer --[[User:Seewolf|Harald Krichel]] ([[User talk:Seewolf|talk]]) 17:45, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:09, 1 May 2020 (UTC) === Global lock for [[User:AugustaFeaster7|AugustaFeaster7]] === {{Status|done}} *{{LockHide|AugustaFeaster7}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:29, 1 May 2020 (UTC) ::{{done}}--[[User:Sakretsu|Sakretsu]] ([[User talk:Sakretsu|炸裂]]) 21:35, 1 May 2020 (UTC) === Global lock for [[User:Autodesk Sketchbook Indonesia|Autodesk Sketchbook Indonesia]] === {{Status}} *{{LockHide|Autodesk Sketchbook Indonesia}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:30, 1 May 2020 (UTC) === Global lock for [[User:Xiplus|Xiplus]] === {{Status}} *{{LockHide|Xiplus}} :Test. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 01:45, 2 May 2020 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for LuniZunie === {{Status}} <!-- Do not remove this template --> * {{LockHide|LuniZunie}} Long-term abuse [[User:LuniZunie|LuniZunie]] ([[User talk:LuniZunie|talk]]) 01:38, 13 June 2026 (UTC) == See also == <!-- DO NOT EDIT UNDER THIS LINE --> {{/Archivefooter}} {{RF}} 26ozfndfkzll8377lz7z6uqnbh65wbi 746349 746348 2026-06-13T02:48:50Z MariaJDHicky and Astra on a open proxy 21 74412 Undid revision [[Special:Diff/746348|746348]] by [[Special:Contributions/AutoModeratorTest|AutoModeratorTest]] ([[User talk:AutoModeratorTest|talk]]) 746349 wikitext text/x-wiki __TOC__ [[en:OpenVPN]] [[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] [[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] lfe97xy034gm44c3ualagosarxemheo 746363 746349 2026-06-13T06:16:51Z LuniZunie 71174 Requesting global lock 746363 wikitext text/x-wiki __TOC__ [[en:OpenVPN]] [[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] [[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] === Global lock for LuniZunie === {{Status}} <!-- Do not remove this template --> * {{LockHide|LuniZunie}} Long-term abuse [[User:LuniZunie|LuniZunie]] ([[User talk:LuniZunie|talk]]) 06:16, 13 June 2026 (UTC) jem4g878a5lzj897cjwdh0eokcoqcxv 746364 746363 2026-06-13T06:17:14Z LuniZunie 71174 Restored revision 746344 by [[Special:Contributions/LuniZunie|LuniZunie]] ([[en:w:User:BrandonXLF/Restorer|Restorer]]) 746364 wikitext text/x-wiki {{mbox|type=content|text=Due to persistent vandalism and disruption on this page, this page is currently semi-protected indefinitely. Globally blocked or locked users should appeal to {{nospam|stewards|wikimedia.org}}.<br />If your account was locked with a reason "Compromised account", please contact {{nospam|ca|wikimedia.org}}.}} {{dynamite|title=:Steward requests/Global/Header}}{{NOINDEX}}__TOC__<br style="clear:both"/> == Requests for global (un)block == <span id="B"/> {{dynamite|title=:Steward requests/Global/block-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global block for [[Special:Contributions/126.24.177.199|126.24.177.199]] === {{Status}} * {{Luxotool|126.24.177.199}} :Open proxy - running [[en:OpenVPN]] on port 1767 and 1393. An initial 3-month block should do the job. --[[User:MrClog|MrClog]] ([[User talk:MrClog|talk]]) 08:29, 1 May 2020 (UTC) {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:UpsandDowns1234|<span style="color:green;">Ups</span>]] and [[User talk:UpsandDowns1234|<span style="color:red;">Downs</span>]] ([[Special:Contributions/UpsandDowns1234|↕]]) 18:55, 18 May 2020 (UTC) === Global lock for [username hidden] === {{status}} * {{LockHide|Awesome Aasim|hidename=yes}} test [[User:Awesome Aasim|Awesome Aasim]] ([[User talk:Awesome Aasim|talk]]) 19:21, 18 May 2020 (UTC) == Requests for global (un)lock and (un)hiding == <span id="L"/> {{dynamite|title=:Steward requests/Global/lock-header}} <!-- Your requests go AT THE BOTTOM OF THE SECTION. Copy the request template above and fill in your information. --> === Global lock for [[User:Kshitij pandey 007|Kshitij pandey 007]] === {{Status}} *{{LockHide|Kshitij pandey 007}} :Constant vandalism. ---'''[[User:J ansari|<span style="background:#5d9731; color:white;padding:2px;">J. Ansari</span>]] [[User talk:J ansari|<span style="background:#1049AB; color:white; padding:2px;">Talk</span>]]''' 09:25, 1 May 2020 (UTC) ::{{re|J ansari}} Could this not be handled locally in Hindi Wikipedia? --[[User:Green Giant|Green Giant]] ([[User talk:Green Giant|talk]]) 18:13, 1 May 2020 (UTC) ===Global lock for LocoWiki=== {{status|notdone}} *{{lockHide|LocoWiki}} ;Evidence: *[[en:Category:Wikipedia_sockpuppets_of_LocoWiki]] *[[es:Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual#Caso: LocoWiki]] LTA for self-promotion crosswiki Regards!!!! [[User:Ezarate|Esteban]] ([[User talk:Ezarate|talk]]) 12:56, 1 May 2020 (UTC) :{{notdone}} No evidence of cross wiki abuse? [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:19, 1 May 2020 (UTC) === Global lock for [[User:Sriramakoti|Sriramakoti]] === {{Status|done}} *{{LockHide|Sriramakoti}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 13:56, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:16, 1 May 2020 (UTC) === Global lock for [[User:JosePenj|JosePenj]] === {{Status|notdone}} *{{MultiLock|JosePenj|Arman643543|Arman115786}} :Abusing multiple account. They created same topic article (James Richman) in xwiki and these account created few day before. --[[User:SCP-2000|<span style="color: #383838;">'''SCP'''</span>]][[User talk:SCP-2000|<span style="color: #242424;">'''-20'''</span>]][[Special:Contributions/SCP-2000|<span style="color: #080808;">'''00'''</span>]] 15:22, 1 May 2020 (UTC) :{{notdone}} No evidence of abuse - accounts are not blocked anywhere. [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:24, 1 May 2020 (UTC) === Global lock/unlock for [[User:Minhaj2288|Minhaj2288]] === {{status|done}} <!-- do not remove this template --> * {{LockHide|Minhaj2288}} * Crosswiki spammer --[[User:Seewolf|Harald Krichel]] ([[User talk:Seewolf|talk]]) 17:45, 1 May 2020 (UTC) ::{{done}} [[User:Ruslik0|Ruslik]] ([[User talk:Ruslik0|talk]]) 20:09, 1 May 2020 (UTC) === Global lock for [[User:AugustaFeaster7|AugustaFeaster7]] === {{Status|done}} *{{LockHide|AugustaFeaster7}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:29, 1 May 2020 (UTC) ::{{done}}--[[User:Sakretsu|Sakretsu]] ([[User talk:Sakretsu|炸裂]]) 21:35, 1 May 2020 (UTC) === Global lock for [[User:Autodesk Sketchbook Indonesia|Autodesk Sketchbook Indonesia]] === {{Status}} *{{LockHide|Autodesk Sketchbook Indonesia}} :Spam / spambot. --[[User:DannyS712|DannyS712]] ([[User talk:DannyS712|talk]]) 21:30, 1 May 2020 (UTC) === Global lock for [[User:Xiplus|Xiplus]] === {{Status}} *{{LockHide|Xiplus}} :Test. --[[User:A2093064-test|A2093064-test]] ([[User talk:A2093064-test|talk]]) 01:45, 2 May 2020 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for Enbi (script testing) === {{Status}} *{{LockHide|Enbi (script testing)}} Long-term abuse. <b style="font-family:Trebuchet MS">[[User:enbi|<span style="color:#E28C00">enbi</span>]] &#91;<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>&#93; • &#91;[[User talk:enbi|talk]]&#93;</b> 20:20, 18 April 2026 (UTC) === Global lock for LuniZunie === {{Status}} <!-- Do not remove this template --> * {{LockHide|LuniZunie}} Long-term abuse [[User:LuniZunie|LuniZunie]] ([[User talk:LuniZunie|talk]]) 01:38, 13 June 2026 (UTC) == See also == <!-- DO NOT EDIT UNDER THIS LINE --> {{/Archivefooter}} {{RF}} 26ozfndfkzll8377lz7z6uqnbh65wbi Wikipedia:Miscellany for deletion/Wikipedia:Sandbox/01 4 116577 746124 455149 2026-06-12T16:18:30Z Trialpears 43074 /* Wikipedia:Sandbox/01 */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746124 wikitext text/x-wiki {{#ifeq:{{FULLPAGENAME}}|Wikipedia:Miscellany for deletion|{{mfd top collapse|1='''[[Wikipedia:Miscellany for deletion/Wikipedia:Sandbox/01]]'''}}|}}<div class="boilerplate mfd vfd xfd-closed mw-archivedtalk" style="background-color: #E3D2FB; margin: 2em 0 0 0; padding: 0 10px 0 10px; border: 1px solid #AAAAAA;"> __NOINDEX__ :''The following discussion is an archived debate of the proposed deletion of the miscellaneous page below. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on the appropriate discussion page (such as the page's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this page.'' <!-- Note: If you are seeing this page as a result of an attempt to nominate a miscellany page for deletion, you must manually edit the MfD nomination links to create a new discussion page using the name format of [[Wikipedia:Miscellany for deletion/NAMESPACE:PAGENAME (2nd nomination)]]. When you create the new discussion page, please provide a link to this old discussion in your nomination. --> The result of the discussion was: '''keep'''. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 09:09, 31 October 2020 (UTC) {{#ifeq:{{FULLPAGENAME}}|Wikipedia:Miscellany for deletion|{{mfd top collapse|1='''[[Wikipedia:Miscellany for deletion/Wikipedia:Sandbox/01]]'''}}|}}<div class="boilerplate mfd vfd xfd-closed mw-archivedtalk" style="background-color: #E3D2FB; margin: 2em 0 0 0; padding: 0 10px 0 10px; border: 1px solid #AAAAAA;"> __NOINDEX__ :''The following discussion is an archived debate of the proposed deletion of the miscellaneous page below. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on the appropriate discussion page (such as the page's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this page.'' <!-- Note: If you are seeing this page as a result of an attempt to nominate a miscellany page for deletion, you must manually edit the MfD nomination links to create a new discussion page using the name format of [[Wikipedia:Miscellany for deletion/NAMESPACE:PAGENAME (2nd nomination)]]. When you create the new discussion page, please provide a link to this old discussion in your nomination. --> The result of the discussion was: '''redirect''' to [[Wikipedia:Sandbox]]. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 09:15, 31 October 2020 (UTC) {{#ifeq:{{FULLPAGENAME}}|Wikipedia:Miscellany for deletion|{{mfd top collapse|1='''[[Wikipedia:Miscellany for deletion/Wikipedia:Sandbox/01]]'''}}|}}<div class="boilerplate mfd vfd xfd-closed mw-archivedtalk" style="background-color: #E3D2FB; margin: 2em 0 0 0; padding: 0 10px 0 10px; border: 1px solid #AAAAAA;"> __NOINDEX__ :''The following discussion is an archived debate of the proposed deletion of the miscellaneous page below. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on the appropriate discussion page (such as the page's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this page.'' <!-- Note: If you are seeing this page as a result of an attempt to nominate a miscellany page for deletion, you must manually edit the MfD nomination links to create a new discussion page using the name format of [[Wikipedia:Miscellany for deletion/NAMESPACE:PAGENAME (2nd nomination)]]. When you create the new discussion page, please provide a link to this old discussion in your nomination. --> The result of the discussion was: '''delete and redirect''' to [[Wikipedia:Sandbox]]. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 09:18, 31 October 2020 (UTC) {{#ifeq:{{FULLPAGENAME}}|Wikipedia:Miscellany for deletion|{{mfd top collapse|1='''[[Wikipedia:Miscellany for deletion/Wikipedia:Sandbox/01]]'''}}|}}<div class="boilerplate mfd vfd xfd-closed mw-archivedtalk" style="background-color: #E3D2FB; margin: 2em 0 0 0; padding: 0 10px 0 10px; border: 1px solid #AAAAAA;"> __NOINDEX__ :''The following discussion is an archived debate of the proposed deletion of the miscellaneous page below. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on the appropriate discussion page (such as the page's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this page.'' <!-- Note: If you are seeing this page as a result of an attempt to nominate a miscellany page for deletion, you must manually edit the MfD nomination links to create a new discussion page using the name format of [[Wikipedia:Miscellany for deletion/NAMESPACE:PAGENAME (2nd nomination)]]. When you create the new discussion page, please provide a link to this old discussion in your nomination. --> The result of the discussion was: '''merge''' to [[Wikipedia:Sandbox]]. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 09:20, 31 October 2020 (UTC) {{#ifeq:{{FULLPAGENAME}}|Wikipedia:Miscellany for deletion|{{mfd top collapse|1='''[[Wikipedia:Miscellany for deletion/Wikipedia:Sandbox/01]]'''}}|}}<div class="boilerplate mfd vfd xfd-closed mw-archivedtalk" style="background-color: #E3D2FB; margin: 2em 0 0 0; padding: 0 10px 0 10px; border: 1px solid #AAAAAA;"> __NOINDEX__ :''The following discussion is an archived debate of the proposed deletion of the miscellaneous page below. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on the appropriate discussion page (such as the page's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this page.'' <!-- Note: If you are seeing this page as a result of an attempt to nominate a miscellany page for deletion, you must manually edit the MfD nomination links to create a new discussion page using the name format of [[Wikipedia:Miscellany for deletion/NAMESPACE:PAGENAME (2nd nomination)]]. When you create the new discussion page, please provide a link to this old discussion in your nomination. --> The result of the discussion was: '''keep'''. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 09:24, 31 October 2020 (UTC) {{#ifeq:{{FULLPAGENAME}}|Wikipedia:Miscellany for deletion|{{mfd top collapse|1='''[[Wikipedia:Miscellany for deletion/Wikipedia:Sandbox/01]]'''}}|}}<div class="boilerplate mfd vfd xfd-closed mw-archivedtalk" style="background-color: #E3D2FB; margin: 2em 0 0 0; padding: 0 10px 0 10px; border: 1px solid #AAAAAA;"> __NOINDEX__ :''The following discussion is an archived debate of the proposed deletion of the miscellaneous page below. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on the appropriate discussion page (such as the page's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this page.'' <!-- Note: If you are seeing this page as a result of an attempt to nominate a miscellany page for deletion, you must manually edit the MfD nomination links to create a new discussion page using the name format of [[Wikipedia:Miscellany for deletion/NAMESPACE:PAGENAME (2nd nomination)]]. When you create the new discussion page, please provide a link to this old discussion in your nomination. --> The result of the discussion was: '''delete'''. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 09:26, 31 October 2020 (UTC) {{#ifeq:{{FULLPAGENAME}}|Wikipedia:Miscellany for deletion|{{mfd top collapse|1='''[[Wikipedia:Miscellany for deletion/Wikipedia:Sandbox/01]]'''}}|}}<div class="boilerplate mfd vfd xfd-closed mw-archivedtalk" style="background-color: #E3D2FB; margin: 2em 0 0 0; padding: 0 10px 0 10px; border: 1px solid #AAAAAA;"> __NOINDEX__ :''The following discussion is an archived debate of the proposed deletion of the miscellaneous page below. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on the appropriate discussion page (such as the page's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this page.'' <!-- Note: If you are seeing this page as a result of an attempt to nominate a miscellany page for deletion, you must manually edit the MfD nomination links to create a new discussion page using the name format of [[Wikipedia:Miscellany for deletion/NAMESPACE:PAGENAME (2nd nomination)]]. When you create the new discussion page, please provide a link to this old discussion in your nomination. --> The result of the discussion was: '''no consensus'''. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:18, 12 June 2026 (UTC) ====[[:Wikipedia:Sandbox/01]]==== :{{pagelinks|Wikipedia:Sandbox/01}} {{subst:mfdr}} Test lorem ipsum. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 09:04, 31 October 2020 (UTC) {{subst:Mfd bottom}} {{subst:Mfd bottom}} {{subst:Mfd bottom}} {{subst:Mfd bottom}} {{subst:Mfd bottom}} {{subst:Mfd bottom}} <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 09:30, 31 October 2020 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Mfd bottom}} buc58hd4itpzzpnv8hgi41s9dtnbgt0 Module:Navbar/configuration 828 118036 746177 556536 2026-06-11T17:30:52Z en>MSGJ 0 this_box -> box_text 746177 Scribunto text/plain return { ['templatestyles'] = 'Module:Navbar/styles.css', ['hlist_templatestyles'] = 'Hlist/styles.css', ['box_text'] = 'This box: ', -- default text box when not plain or mini ['title_namespace'] = 'Template', -- namespace to default to for title ['invalid_title'] = 'Invalid title ', ['classes'] = { -- set a line to nil if you don't want it ['navbar'] = 'navbar', ['plainlinks'] = 'plainlinks', -- plainlinks ['horizontal_list'] = 'hlist', -- horizontal list class ['mini'] = 'navbar-mini', -- class indicating small links in the navbar ['box_text'] = 'navbar-boxtext', ['brackets'] = 'navbar-brackets', -- 'collapsible' is the key for a class to indicate the navbar is -- setting up the collapsible element in addition to the normal -- navbar. ['collapsible'] = 'navbar-collapse', ['collapsible_title_mini'] = 'navbar-ct-mini', ['collapsible_title_full'] = 'navbar-ct-full' } } itag4bw69ebqpc0fw4hgkr4pkizazgr 746178 746177 2026-06-12T21:51:55Z Robertsky 51025 1 revision imported from [[:en:Module:Navbar/configuration]]: for workshop activity 746177 Scribunto text/plain return { ['templatestyles'] = 'Module:Navbar/styles.css', ['hlist_templatestyles'] = 'Hlist/styles.css', ['box_text'] = 'This box: ', -- default text box when not plain or mini ['title_namespace'] = 'Template', -- namespace to default to for title ['invalid_title'] = 'Invalid title ', ['classes'] = { -- set a line to nil if you don't want it ['navbar'] = 'navbar', ['plainlinks'] = 'plainlinks', -- plainlinks ['horizontal_list'] = 'hlist', -- horizontal list class ['mini'] = 'navbar-mini', -- class indicating small links in the navbar ['box_text'] = 'navbar-boxtext', ['brackets'] = 'navbar-brackets', -- 'collapsible' is the key for a class to indicate the navbar is -- setting up the collapsible element in addition to the normal -- navbar. ['collapsible'] = 'navbar-collapse', ['collapsible_title_mini'] = 'navbar-ct-mini', ['collapsible_title_full'] = 'navbar-ct-full' } } itag4bw69ebqpc0fw4hgkr4pkizazgr Template:Black 10 118100 746203 461688 2024-06-08T16:22:45Z en>Jdlrobson 0 Not clear how this should work in dark mode. If it should be /white/ in dark mode, then var(--color-base) would be more appropriate but a Template:Black generating white text seems... unexpected... so background white it is. 746203 wikitext text/x-wiki <span style="color:black;background: white;">{{{1}}}</span><noinclude> <!-- Add categories and interwikis to the /doc subpage, not here! --> {{Documentation}}</noinclude> 27ojin4ujcztv6qpvz9fsq5e54gwtid 746204 746203 2026-06-12T21:52:00Z Robertsky 51025 1 revision imported from [[:en:Template:Black]]: for workshop activity 746203 wikitext text/x-wiki <span style="color:black;background: white;">{{{1}}}</span><noinclude> <!-- Add categories and interwikis to the /doc subpage, not here! --> {{Documentation}}</noinclude> 27ojin4ujcztv6qpvz9fsq5e54gwtid Module:Lang 828 118180 746157 733114 2026-05-12T23:20:12Z en>Andrybak 0 make_error_span, make_error_msg: use CSS variable `--color-error` to improve readability 746157 Scribunto text/plain --[=[ Lua support for the {{lang}}, {{langx}}, {{lang-??}}, and {{transliteration}} templates and replacement of various supporting templates. ]=] require('strict'); local getArgs = require ('Module:Arguments').getArgs; local unicode = require ("Module:Unicode data"); -- for is_Latin() and is_rtl() local yesno = require ('Module:Yesno'); local sandbox = (mw.getCurrentFrame():getTitle():match ('/sandbox') or ''); -- when called from a sandbox template or module load sandbox data and sandbox configuration local lang_data = mw.loadData ('Module:Lang/data' .. sandbox); -- language name override and transliteration tool-tip tables local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts local lang_table = lang_data.lang_name_table.lang; local lang_dep_table = lang_data.lang_name_table.lang_dep; local script_table = lang_data.lang_name_table.script; local region_table = lang_data.lang_name_table.region; local variant_table = lang_data.lang_name_table.variant; local suppressed_table = lang_data.lang_name_table.suppressed; local override_table = lang_data.override; local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code local cfg = mw.loadData ('Module:Lang/configuration' .. sandbox); -- for internationalization local is_latn_data = mw.loadData ('Module:Lang/data/is latn data'); local sizeof_ranges_t = is_latn_data.sizeof_ranges_t; local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization local content_lang = mw.language.getContentLanguage(); local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic() local maint_cats = {}; -- maintenance categories go here local maint_msgs = {}; -- and their messages go here --[[--------------------------< M A K E _ E R R O R _ S P A N >-------------------------------------------------- ]] local function make_error_span (template, msg) return table.concat ({'<span style="color:var(--color-error,#d33)">', cfg.misc_text_t.error, ': ', template, msg, '</span>'}) end --[[--------------------------< S U B S T I T U T E >---------------------------------------------------------- Substitutes $1, $2, etc in <message> with data from <data_t>. Returns plain-text substituted string when <data_t> not nil; returns <message> else. ]] local function substitute (message, data_t) return data_t and mw.message.newRawMessage (message, data_t):plain() or message; end --[[--------------------------< M A K E _ E R R O R _ M S G >-------------------------------------------------- Assembles an error message from template name, message text, help link, and error category. ]] local function make_error_msg (msg, args_t, template) local category; local text; -- handle the oddity that is {{langx}} if cfg.templates_t.langxx == template then text = args_t.text or args_t[1]; -- for {{lang-xx}} else text = args_t.text or args_t[2]; -- for {{lang}}, {{langx}}, and {{transliteration}} end if cfg.templates_t.transliteration == template then category = cfg.make_error_msg_t.xlit_err_cat; else category = cfg.make_error_msg_t.lang_err_cat; end local category_link = ((0 == namespace or 10 == namespace) and not args_t.nocat) and substitute ('[[Category:$1]]', {category}) or ''; return substitute ('[$1] <span style="color:var(--color-error,#d33)">$2: &#x7B;{$3}}: $4 ([[:Category:$5|$6]])</span>$7', -- &#x7B; prevents template name from being treated as a template call in certain situations { text or cfg.make_error_msg_t.undefined, cfg.misc_text_t.error, template, msg, category, cfg.misc_text_t.help, category_link }) end --[[--------------------------< P A R A M E T E R _ V A L I D A T E >------------------------------------------ ]] local function parameter_validate (args_t, template) local err_msg = cfg.parameter_validate_t.invalid_param; if cfg.templates_t.lang == template then -- for {{lang}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_lang_t[param] and -- unique {{lang}} parameters not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end elseif cfg.templates_t.langx == template then -- for {{langx}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_langx_t[param] and -- unique {{langx}} parameters not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}} not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end elseif cfg.templates_t.langxx == template then -- for {{lang-xx}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_lang_xx_t[param] and -- unique {{lang-xx}} parameters not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}} not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end end end --[[--------------------------< I S _ S E T >------------------------------------------------------------------ Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. ]] local function is_set (var) return not (var == nil or var == ''); end --[[--------------------------< I N V E R T _ I T A L I C S >------------------------------------------------- This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing apostrophes are converted to their HTML numeric entity equivalent so that the new italic markup doesn't become bold markup inadvertently. Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal, replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements. In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns. This function expects that markup in args.text is complete and correct; if it is not, oddness may result. ]] local function invert_italics (source) local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns [""]="\'\'", -- empty string becomes italic markup ["\'\'"]="", -- italic markup becomes empty string ["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic ["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold }; local seg = {}; source = source:gsub ("%f[\']\'%f[^\']", '&#39;'); -- protect single quote marks from being interpreted as bold markup seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text' seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup elseif '' ~= seg[1] then seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup elseif '' ~= seg[3] then seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup else seg[2] = source -- when there is no markup end seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table return table.concat (seg); -- put it all back together and done end --[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------ Validates |italic= or |italics= assigned values. When |italic= is set and has an acceptable assigned value, return the matching CSS font-style property value or, for the special case 'default', return nil. When |italic= is not set, or has an unacceptable assigned value, return nil and a nil error message. When both |italic= and |italics= are set, returns nil and a 'conflicting' error message. The return value nil causes the calling lang, lang_xx, or xlit function to set args.italic according to the template's defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-??}} depending on the individual template's requirements, 'italic' for {{transliteration}}) or to the value appropriate to |script=, if set ({{lang}} and {{lang-??}} only). Accepted values and the values that this function returns are are: nil - when |italic= absent or not set; returns nil default - for completeness, should rarely if ever be used; returns nil yes - force args.text to be rendered in italic font; returns 'italic' no - force args.text to be rendered in normal font; returns 'normal' unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit' invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert' ]] local function validate_italic (args) local properties = {[cfg.keywords_t.affirmative] = 'italic', [cfg.keywords_t.negative] = 'normal', [cfg.keywords_t.unset] = 'inherit', [cfg.keywords_t.invert] = 'invert', [cfg.keywords_t.default] = nil}; local count = 0 for _, arg in pairs {'italic', 'italics', 'i'} do if args[arg] then count = count + 1 end end if count > 1 then -- return nil and an error message if more than one is set return nil, cfg.validate_italic_t.multi_italic; end return properties[args.italic or args.italics or args.i], nil; -- return an appropriate value and a nil error message end --[=[--------------------------< V A L I D A T E _ C A T _ A R G S >---------------------------------------------------------- Default behavior of the {{lang}} and {{lang-??}} templates is to add categorization when the templates are used in main space. This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters to control categorization. Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the parameter is treated as if it were not set in the template. Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply. Accepted values for |nocat= are the text strings: 'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else for |cat= 'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else ]=] local function validate_cat_args (args) if not (args.nocat or args.cat) then -- both are nil, so categorize return; end if false == yesno (args.cat) or true == yesno (args.nocat) then args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template) else -- args.nocat is the parameter actually used. args.nocat = nil; end end --[[--------------------------< I N _ A R R A Y >-------------------------------------------------------------- Whether needle is in haystack. ]] local function in_array (needle, haystack) if needle == nil then return false; end for n,v in ipairs (haystack) do if v == needle then return n; end end return false; end --[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------ Prettify IETF tags to use recommended subtag formats: code: lower case script: sentence case region: upper case variant: lower case private: lower case prefixed with -x- ]] local function format_ietf_tag (code, script, region, variant, private) local out = {}; if is_set (private) then return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored end table.insert (out, code:lower()); if is_set (script) then script = script:lower():gsub ('^%a', string.upper); table.insert (out, script); end if is_set (region) then table.insert (out, region:upper()); end if is_set (variant) then table.insert (out, variant:lower()); end return table.concat (out, '-'); end --[[--------------------------< G E T _ I E T F _ P A R T S >-------------------------------------------------- Extracts and returns IETF language tag parts: primary language subtag (required) - 2 or 3 character IANA language code script subtag - four character IANA script code region subtag - two-letter or three digit IANA region code variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag in any one of these forms lang lang-variant lang-script lang-script-variant lang-region lang-region-variant lang-script-region lang-script-region-variant lang-x-private each of lang, script, region, variant, and private, when used, must be valid. Languages with both two- and three-character code synonyms are promoted to the two-character synonym because the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding the synonymous three-character codes in the lang= attribute. For {{lang-??}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}} because those parameters are superfluous to the IETF subtags in |code=). Returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil. See http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1. ]] local function get_ietf_parts (source, args_script, args_region, args_variant) local code, script, region, variant, private; -- IETF tag parts if not is_set (source) then return nil, nil, nil, nil, nil, cfg.get_ietf_parts_t.missing_lang_tag; end local pattern = { -- table of tables holding acceptable IETF tag patterns and short names of the IETF part captured by the pattern {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits) {'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss {'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR {'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits) {'^(%a%a%a?)$'}, -- 18 - ll {'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters) } local t = {}; -- table of captures; serves as a translator between captured IETF tag parts and named variables for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i]) if c1 then -- c1 always set on match code = c1; -- first capture is always code t = { [pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures [pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures [pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table }; script = t.s or ''; -- translate table contents to named variables; region = t.r or ''; -- absent table entries are nil so set named IETF parts to empty string for concatenation variant= t.v or ''; private = t.p or ''; break; -- and done end end if not code then return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_tag, {source}); -- don't know what we got but it is malformed end code = code:lower(); -- ensure that we use and return lower case version of this if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_code, {code}); -- invalid language code, don't know about the others (don't care?) end if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym table.insert (maint_cats, substitute (cfg.get_ietf_parts_t.maint_promo_cat, {code})); table.insert (maint_msgs, substitute (cfg.get_ietf_parts_t.maint_promo_msg, {code, synonym_table[code]})); code = synonym_table[code]; -- use the synonym end if is_set (script) then if is_set (args_script) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_scr; -- both code with script and |script= not allowed end else script = args_script or ''; -- use args.script if provided end if is_set (script) then script = script:lower(); -- ensure that we use and return lower case version of this if not script_table[script] then return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_scr_code, {script, code}); -- language code OK, invalid script, don't know about the others (don't care?) end end if suppressed_table[script] then -- ensure that code-script does not use a suppressed script if in_array (code, suppressed_table[script]) then return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.script_code, {script, code}); -- language code OK, script is suppressed for this code end end if is_set (region) then if is_set (args_region) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_reg; -- both code with region and |region= not allowed end else region = args_region or ''; -- use args.region if provided end if is_set (region) then region = region:lower(); -- ensure that we use and return lower case version of this if not region_table[region] then return code, script, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_reg_code, {region, code}); end end if is_set (variant) then if is_set (args_variant) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_var; -- both code with variant and |variant= not allowed end else variant = args_variant or ''; -- use args.variant if provided end if is_set (variant) then variant = variant:lower(); -- ensure that we use and return lower case version of this if not variant_table[variant] then -- make sure variant is valid return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var, {variant}); end -- does this duplicate/replace tests in lang() and lang_xx()? if is_set (script) then -- if script set it must be part of the 'prefix' if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_scr, {variant, code, script}); end elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound) if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred) if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound) return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_reg, {variant, code, region}); end end else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0 if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code, {variant, code}); end end end if is_set (private) then private = private:lower(); -- ensure that we use and return lower case version of this if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_pri, {private}); end end return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil end --[=[-------------------------< M A K E _ W I K I L I N K >---------------------------------------------------- Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an empty string. ]=] local function make_wikilink (link, display) if is_set (link) then if is_set (display) then return table.concat ({'[[', link, '|', display, ']]'}); else return table.concat ({'[[', link, ']]'}); end else return ''; end end --[[--------------------------< D I V _ M A R K U P _ A D D >-------------------------------------------------- Adds <i> and </i> tags to list-item text or to implied <p>..</p> text. Mixed not supported. ]] local function div_markup_add (text, style) if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text if 'italic' == style then return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item else return text; end end if text:find ('\n+') then -- look for any number of \n characters in text text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics MediaWiki if 'italic' == style then text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each implied p (two or more consecutive '\n\n' sequences) else text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each implied p text = text:gsub ('\n', ''); -- strip newline characters end end return text; end --[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------ Makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where <title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in HTML markup. This because the lang= attribute applies to the content of its enclosing tag. <tag> holds a string 'div' or 'span' used to choose the correct wrapping tag. ]] local function title_wrapper_make (title_text, content_text, tag) local wrapper_t = {}; table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag table.insert (wrapper_t, ' title=\"'); -- begin title attribute table.insert (wrapper_t, title_text); -- add <title_text> table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag table.insert (wrapper_t, content_text); -- add <content_text> table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag return table.concat (wrapper_t); -- make a big string and done end --[[--------------------------< M A K E _ T E X T _ H T M L >-------------------------------------------------- Add the HTML markup to text according to the type of content that it is: <span> or <i> tags for inline content or <div> tags for block content The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish language text' is English: <i lang="es" title="Spanish language text">casa</i> should be: <span title="Spanish language text"><i lang="es">casa</i></span> or for <div>...</div>: <div title="Spanish language text"><div lang="es"><spanish-language-text></div></div> ]] local function make_text_html (code, text, tag, rtl, style, size, language) local html_t = {}; local style_added = ''; local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div if text:match ('^%*') then table.insert (html_t, '&#42;'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki text = text:gsub ('^%*', ''); -- remove the splat from the text end if 'span' == tag then -- default HTML tag for inline content if 'italic' == style then -- but if italic tag = 'i'; -- change to <i> tags end else -- must be div so go text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i> end table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> HTML tag code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of Wikipedia table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages end if 'normal' == style then -- when |italic=no table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any style_added = '\"'; -- remember that style attribute added and is not yet closed end if is_set (size) then -- when |size=<something> if is_set (style_added) then table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted else table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute style_added = '\"'; -- remember that style attribute added and is not yet closed end end table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening HTML tag table.insert (html_t, text); -- insert the text table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> HTML tag if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div local title_text; if 'zxx' == code then -- special case for this tag 'no linguistic content' title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.zxx}); -- not a language so don't use 'language' in title text elseif mw.ustring.find (language, 'languages', 1, true) then title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.collective}); -- for collective languages else title_text = substitute ('$1-$2', {language, cfg.make_text_html_t.individual}); -- for individual languages end return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag); else return table.concat (html_t); end end --[=[-------------------------< M A K E _ C A T E G O R Y >---------------------------------------------------- For individual language, <language>, returns: [[Category:Articles containing <language>-language text]] For English: [[Category:Articles containing explicitly cited English-language text]] For ISO 639-2 collective languages (and for 639-1 bh): [[Category:Articles with text in <language> languages]] ]=] local function make_category (code, language_name, nocat, name_get) if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space return ''; -- return empty string for concatenation end if mw.ustring.find (language_name, 'languages', 1, true) then return substitute ('[[$1 $2]]', {cfg.make_category_t.collective_cat, language_name}); end if this_wiki_lang_tag == code then return substitute ('[[$1 $2 $3-$4]]', { -- unique category name for the local language cfg.make_category_t.cat_prefix, cfg.make_category_t.explicit_cat, language_name, cfg.make_category_t.cat_postfix, }); else return substitute ('[[$1 $2-$3]]', { -- category for individual languages cfg.make_category_t.cat_prefix, language_name, cfg.make_category_t.cat_postfix, }); end end --[[--------------------------< M A K E _ T R A N S L I T >---------------------------------------------------- Return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string. The value |script= is not used in {{transliteration}} for this purpose; instead it uses |code. Because language scripts are listed in the {{transliteration}} switches they are included in the data tables. The script parameter is introduced at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code. To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed to be |translit-script= (in this function, tscript). This function is used by both lang_xx() and xlit() lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style xlit() always provides language_name, translit, and one of code or tscript, never both; always provides style For {{transliteration}}, style only applies when a language code is provided. ]] local function make_translit (code, language_name, translit, std, tscript, style, engvar) local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local title_text = ''; -- tool tip text for title= attribute std = std and std:lower(); -- lower case for table indexing if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified title_text = language_name; -- write a generic tool tip if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = substitute ('$1-$2', {title_text, cfg.misc_text_t.language}); -- skip this text (individual and macro languages only) end title_text = substitute ('$1 $2', {title_text, mw.ustring.lower (cfg.engvar_t[engvar]['romanisz_lc'])}); -- finish the tool tip; use romanization when neither script nor standard supplied elseif is_set (std) and is_set (tscript) then -- when both are specified if title_t[std] then -- and if standard is legitimate if title_t[std][tscript] then -- and if script for that standard is legitimate if script_table[tscript] then title_text = substitute ('$1$2 ($3 $4) $5', { -- add the appropriate text to the tool tip title_text, title_t[std][tscript:lower()], script_table[tscript], cfg.make_translit_t.script, cfg.make_translit_t.transliteration, }); else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else return ''; -- invalid standard, setup for error message end elseif is_set (std) then -- translit-script not set, use language code if not title_t[std] then return ''; end -- invalid standard, setup for error message if title_t[std][code] then -- if language code is in the table (xlit may not provide a language code) local fmt_str = '$1$2 ($3 $4) $5'; -- generic format string for tool tip if language_name:match ('languages') then fmt_str = '$1$2 ($3) $5'; -- format string for collective languages tool tip end title_text = substitute (fmt_str, { -- add the appropriate text to the tool tip title_text, title_t[std][code:lower()], language_name, cfg.misc_text_t.language, cfg.make_translit_t.transliteration, }); else -- code doesn't match title_text = title_text .. title_t[std]['default']; -- so use the standard's default end else -- here if translit-script set but translit-std not set if title_t['no_std'][tscript] then title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set elseif title_t['no_std'][code] then title_text = title_text .. title_t['no_std'][code]; -- use language code else if is_set (tscript) then title_text = substitute ('$1$2-$3 $4', { -- write a script tool tip title_text, language_name, cfg.make_translit_t.script, cfg.make_translit_t.transliteration, }); elseif is_set (code) then if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = substitute ('$1-$2', { -- skip this text (individual and macro languages only) title_text, cfg.misc_text_t.language, }); end title_text = substitute ('$1 $2', { -- finish the tool tip title_text, cfg.make_translit_t.transliteration, }); else title_text = substitute ('$1 $2', { -- generic tool tip (can we ever get here?) title_text, cfg.make_translit_t.transliteration, }); end end end local tag if is_set (code) then -- when a language code is provided (always with {{lang-??}} templates, not always with {{transliteration}}) code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag if not style then -- nil for the default italic style tag = '<i lang="%s-Latn">%s</i>' else tag = '<span style="font-style: %s" lang="%s-Latn">%s</span>' -- non-standard style, construct a span tag for it tag = string.format(tag, style, "%s", "%s") end tag = string.format(tag, code, "%s") else tag = '<span>%s</span>' -- when no language code: no lang= attribute, not italic ({{transliteration}} only) end tag = string.format(tag, translit) -- add the translit text if '' == title_text then -- when there is no need for a tool-tip return tag; -- done else title_text = cfg.engvar_sel_t.gb == engvar and title_text:gsub ('([Rr]omani)z', '%1s') or title_text; -- gb eng when engvar specifies gb eng; us eng else return title_wrapper_make (title_text, tag, 'span'); -- wrap with a tool-tip span and done end end --[[--------------------------< V A L I D A T E _ T E X T >---------------------------------------------------- This function checks the content of args.text and returns empty string if nothing is amiss else it returns an error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup. Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert. ]] local function validate_text (template, args) if not is_set (args.text) then return make_error_msg (cfg.validate_text_t.no_text, args, template); end if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes return make_error_msg (cfg.validate_text_t.malformed_markup, args, template); end local style = args.italic; if (cfg.keywords_t.unset ~= style) and (cfg.keywords_t.invert ~=style) then if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic return make_error_msg (cfg.validate_text_t.italic_markup, args, template); end end end --[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------ Render mainenance messages and categories. ]] local function render_maint (nocat) local maint = {}; if 0 < #maint_msgs then -- when there are maintenance messages table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag for _, msg in ipairs (maint_msgs) do table.insert (maint, table.concat ({msg, ' '})); -- add message strings end table.insert (maint, '</span>'); -- close the span end if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only for _, cat in ipairs (maint_cats) do table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories end end return table.concat (maint); end --[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------ For proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we do nothing. proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and inhibits regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac. ]] local function proto_prefix (text, language_name, proto_param) if false == proto_param then -- when forced by |proto=no return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats end return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat end --[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------ Looks for a poem strip marker in text; returns true when found; false else. Auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know the content that will replace the stripmarker. ]] local function has_poem_tag (text) return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false; end --[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------ Inspects content of and selectively trims text. Returns text and the name of an appropriate HTML tag for text. If text contains: \n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return If text begins with list markup: \n* unordered \n; definition \n: definition \n# ordered trim all leading whitespace except \n and trim all trailing whitespace If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because the stripmarker is replaced with text wrapped in <div>..</div> tags. If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div> tags are used to wrap it, to prevent div/span inversion. ]] local function html_tag_select (text) local tag; if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that) tag = 'div'; -- poem replacement is in div tags so lang must use div tags elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags tag = 'div'; elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags text = mw.text.trim (text); -- trim leading and trailing whitespace characters tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags elseif text:find ('\n[%*:;%#]') then -- if text has list markup text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n' tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki) else text = mw.text.trim (text); -- plain text tag = 'span'; -- so span is fine end return text, tag; end --[[--------------------------< V A L I D A T E _ P R O T O >-------------------------------------------------- Validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false, empty string (or parameter omitted) returns as nil; any other value returns nil with <proto_param> as second return value for use in error message. ]] local function validate_proto (proto_param) if cfg.keywords_t.affirmative == proto_param then return true; elseif cfg.keywords_t.negative == proto_param then return false; elseif is_set (proto_param) then return nil, proto_param; -- |proto= something other than 'yes' or 'no' else return nil; -- missing or empty end end --[[--------------------------< L A N G U A G E _ N A M E _ G E T >-------------------------------------------- Common function to return language name from the data set according to IETF tag. Returns language name if found in data tables; nil else. ]] local function language_name_get (ietf, code, cat) ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case local name; -- remains nil if not found if override_table[ietf] then -- look for whole IETF tag in override table name = override_table[ietf]; elseif override_table[code] then -- not there so try basic language tag name = override_table[code]; elseif lang_table[code] then -- shift to IANA active tag/name table name = lang_table[code]; elseif lang_dep_table[code] then -- try the IANA deprecated tag/name table name = lang_dep_table[code]; end if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name table.insert (maint_cats, substitute (cfg.language_name_get_t.deprecated_cat, {code})); table.insert (maint_msgs, substitute (cfg.language_name_get_t.deprecated_msg, {code})); end return name; -- name from data tables or nil end --[[--------------------------< T E X T _ S C R I P T _ M A T C H _ T E S T >---------------------------------- IETF script subtag should match the script of the <text>. This module does not attempt to know all scripts and what they look like. It does know what Latn script looks like so when <text> is written using other than the Latn script, the IETF script subtag, if present, should not be Latn. Conversely, when <text> is written using the Latn script, the IETF script subtag, if present, should be Latn. For the purposes of this test, Latf (Fraktur) and Latg (Gaelic) are considered to be equivalent to Latn because unicode treats these two scripts as font-specific variants of Latn. Returns an error message when mismatch detected; nil else. ]] local function text_script_match_test (script, is_latn_text, pos, char) local scripts_t = {['latf'] = true, ['latg'] = true, ['latn'] = true}; -- unicode 'latn' scripts; 'latf' and 'latg' are font variants so there are no Fraktur or Gaelic codepoints if is_set (script) then -- don't bother with the rest of this if <script> is nil or empty string script = script:lower(); -- lower case to index into <scripts_t> if is_latn_text then -- when text is wholly Latn script if not scripts_t[script] then -- but a non-Latn script is specified return cfg.text_script_match_test_t.latn_txt_mismatch; -- emit an error message end else -- when text is not wholly Latn script if scripts_t[script] then -- but a Latn script is specified return substitute (cfg.text_script_match_test_t.latn_scr_mismatch, {pos, char}); -- emit an error message with position of first offending character end end end end --[[--------------------------< B I N A R Y _ S E A R C H >--------------------------------------------------- conducts a binary search of <ranges_t> for a sub-range that holds <target>. returns boolean true if a sub-range holding <target> is found; boolean false else. ]] local function binary_search (target, ranges_t) local idx_bot = 1; -- initialize to index of first key local idx_top = sizeof_ranges_t; -- initialize to index of last key (number of keys) if (target < ranges_t[idx_bot][1]) or (target > ranges_t[idx_top][2]) then -- invalid; target out of range return; -- abandon end local idx_mid; -- calculated index of range midway between top index and bottom index local flag = false; -- flag to tell us when we've evaluated last (highest) range in <ranges_t> while 1 do idx_mid = math.ceil ((idx_bot + idx_top) / 2); -- get the mid-point in the <ranges_t> sequence if (target >= ranges_t[idx_mid][1]) and (target <= ranges_t[idx_mid][2]) then -- indexed range low value <= target <= indexed range high value return true; -- we found the range that holds the <target> character; return true elseif (target > ranges_t[idx_mid][2]) then -- is <target> > indexed range high value? idx_bot = idx_mid; -- adjust <idx_bot> up else -- here when <target> less than indexed range low value idx_top = idx_mid - 1; -- adjust <idx_top> down end if flag then break; -- here when we just evaluated the last range and <target> not found end if not flag and (idx_bot == idx_top) then -- set true just before we evaluate the last (highest) range in <ranges_t> flag = true; end end end --[[--------------------------< I S _ L A T I N >-------------------------------------------------------------- compare <text> as codepoints to lists of known codepoints accepted as Latn script returns boolean true and modified <text> when <text> is wrapped in accept-as-written markup returns boolean true and <text> when codepoint is known returns boolean false, <text>, non-Latn codepoint position in <text> (left to right), and the codepoint character when codepoint is not known TODO: when text has accept-as-written markup, return a non-boolean value to indicate that <text> is not wholly latn script? Use that return value to create non-Latn HTML lang= attribute because <text> isn't really latn so lang=und (undetermined)? or instead, omit the -Latn subtag? (without -Latn need to force |italic=yes) ]] local function is_latin (text, tag) local count; text, count = text:gsub ('^%(%((.+)%)%)$', '%1'); -- remove accept-as-written markup if present if 0 ~= count then return true, text; -- markup present so assume that <text> is Latn-script end local pos = 0; -- position counter for error messaging for codepoint in mw.ustring.gcodepoint (text) do -- fetch each code point pos = pos + 1; -- bump the position counter if not is_latn_data.singles_t[codepoint] and -- codepoint not found in the singles list? not binary_search (codepoint, is_latn_data.ranges_t) and -- codepoint not a member of a listed range? not (tag and is_latn_data.specials_t[codepoint] and is_latn_data.specials_t[codepoint][tag]) then -- not a language-specific codepoint? return false, text, pos, mw.ustring.char (codepoint); -- codepoint not known; return false with codepoint position and character representation end end return true, text; -- is known; return <text> end --[[--------------------------< _ L A N G >-------------------------------------------------------------------- Entry point for {{lang}}. There should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> Parameters are received from the template's frame (parent frame). ]] local function _lang (args) local out = {}; local language_name; -- used to make category names local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, variant, and private local code; -- the language code local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or cfg.templates_t.lang; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; validate_cat_args (args); -- determine if categorization should be suppressed if args[1] and args.code then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'1', cfg.lang_t.conflict_n_param_types.code}), args, template); else args.code = args[1] or args.code; -- prefer args.code end if args[2] and args.text then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'2', cfg.lang_t.conflict_n_param_types.text}), args, template); else args.text = args[2] or args.text; -- prefer args.text end msg = validate_text (template, args); -- ensure that |text= is set if is_set (msg) then -- msg is an already-formatted error message return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (substitute (cfg.lang_t.invalid_proto, {msg}), args, template); end code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}}) if msg then return make_error_msg (msg, args, template); end local is_latn_text, pos, char; is_latn_text, args.text, pos, char= is_latin (args.text, code); -- make a boolean msg = text_script_match_test (subtags.script, is_latn_text, pos, char) if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and is_latn_text) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics) args.italic = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic else args.italic = 'inherit'; -- italic not set; script not latn; inherit current style end end if is_set (subtags.script) then -- if script set, override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant if cfg.keywords_t.invert == args.italic and 'span' == tag then -- invert only supported for in-line content args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, language_name)); table.insert (out, make_category (code, language_name, args.nocat)); table.insert (out, render_maint (args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G >---------------------------------------------------------------------- Entry point for {{lang}}. There should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> Parameters are received from the template's frame (parent frame). ]] local function lang (frame) local args_t = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text valueFunc = function (key, value) if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space return value; -- return untrimmed 'text' elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); args_t.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang|...}} local msg = parameter_validate (args_t, cfg.templates_t.lang); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args_t, cfg.templates_t.lang); -- when template has unsupported params, abandon with error message end return _lang (args_t); end --[[--------------------------< T R A N S L A T I O N _ M A K E >---------------------------------------------- Stand-alone function to create literal translation of main text. Also used by {{lang-x2}}. ]] local function translation_make (args_t) local translation_t = {', '}; -- initialize output if 'none' ~= args_t.label then -- if we want a label table.insert (translation_t, '<small>'); -- open the <small> HTML tag if cfg.keywords_t.negative == args_t.link then table.insert (translation_t, substitute ('<abbr title="$1">$2</abbr>', {cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr})); -- unlinked form else table.insert (translation_t, make_wikilink (cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr)); -- linked form end table.insert (translation_t, "&thinsp;</small>"); -- close the <small> HTML tag end table.insert (translation_t, table.concat ({ -- user styling spans match spand from {{gloss}} '<span class="gloss-quot">\'</span>', -- user styling span for quote marks; use HTML entities to avoid wiki markup confusion '<span class="gloss-text">', -- open user styling span for the translation args_t.translation, -- the translation '</span>', -- close user styling span for the translation '<span class="gloss-quot">\'</span>' -- user styling span for quote marks })); return table.concat (translation_t); -- make a big string and done end --[[--------------------------< _ L A N G _ X X >-------------------------------------------------------------- For the {{lang-??}} templates, the only parameter required to be set in the template is the language code. All other parameters can, usually should, be written in the template call. For {{lang-??}} templates for languages that can have multiple writing systems, it may be appropriate to set |script= as well. For each {{lang-??}} template choose the appropriate entry-point function so that this function knows the default styling that should be applied to text. For normal, upright style: <includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly> For italic style: <includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly> All other parameters should be received from the template's frame (parent frame) Supported parameters are: |code = (required) the IANA language code |script = IANA script code; especially for use with languages that use multiple writing systems |region = IANA region code |variant = IANA variant code |text = (required) the displayed text in language specified by code |link = boolean false ('no') does not link code-spcified language name to associated language article |rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language |nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected |cat = boolian false ('no') opposite form of |nocat= |italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state |lit = text that is a literal translation of text |label = 'none' to suppress all labeling (language name, 'translit.', 'lit.') any other text replaces language-name label - automatic wikilinking disabled for those {{lang-??}} templates that support transliteration (those templates where |text= is not entirely latn script): |translit = text that is a transliteration of text |translit-std = the standard that applies to the transliteration |translit-script = ISO 15924 script name; falls back to code For {{lang-??}}, the positional parameters are: {{{1}}} text {{{2}}} transliterated text {{{3}}} literal translation text no other positional parameters are allowed ]] local function _lang_xx (args, base_template) -- base_template will be either of 'langx' or 'lang-xx' local out = {}; local language_name; -- used to make display text, article links local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, and variant local code; -- the language code local translit_script_name; -- name associated with IANA (ISO 15924) script code local translit; local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or base_template; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; local text_idx = (cfg.templates_t.langx == base_template) and 2 or 1; -- for {{langx}} 'text' positional parameter is '2' local translit_idx = (cfg.templates_t.langx == base_template) and 3 or 2; local xlate_idx = (cfg.templates_t.langx == base_template) and 4 or 3; if args[text_idx] and args.text then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {text_idx, cfg.lang_t.conflict_n_param_types.text}), args, template); else args.text = args[text_idx] or args.text; -- prefer positional 'text' parameter end msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding if is_set (msg) then return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly if args[translit_idx] and args.translit then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {translit_idx, cfg.lang_t.conflict_n_param_types.translit}), args, template); else args.translit = args[translit_idx] or args.translit -- prefer positional 'translit' parameter end args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else if args[xlate_idx] and (args.translation or args.lit) then return make_error_msg (substitute (cfg.lang_xx_t.conflict_n_lit, {xlate_idx}), args, template); elseif args.translation and args.lit then return make_error_msg (cfg.lang_xx_t.conflict_lit, args, template); else args.translation = args[xlate_idx] or args.translation or args.lit; -- prefer positional 'translation' parameter end if args.links and args.link then return make_error_msg (cfg.lang_xx_t.conflict_link, args, template); else args.link = args.link or args.links; -- prefer args.link end validate_cat_args (args); -- determine if categorization should be suppressed args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end if args.translit then local latn, pos, char; latn, args.translit, pos, char = is_latin (args.translit, (('' ~= subtags.private) and (code .. '-x-' .. subtags.private)) or code); if not latn then return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); end end local is_latn_text, text, pos, char = is_latin (args.text, code); -- make a boolean args.text = text; -- may have been modified (accept-as-written markup removed) msg = text_script_match_test (subtags.script, is_latn_text, pos, char) if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if cfg.templates_t.langx == base_template then -- auto-italics for {{langx}} templates; adapted from {{lang}} (no support for poem tag) if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and is_latn_text) then -- text is not this wiki's language, no script specified and is wholly latn script (auto-italics) args.italic = 'italic'; -- set font-style:italic else args.italic = 'inherit'; -- italic not set; script not latn; inherit current style end end else -- {{lang-xx}} does not do auto italics; retained for those wikis that don't support {{langx}} if nil == args.italic then -- args.italic controls if is_set (subtags.script) then if 'latn' == subtags.script then args.italic = 'italic'; -- |script=Latn; set for font-style:italic else args.italic = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state> end else args.italic = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state> end end end if is_set (subtags.script) then -- if script set override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (substitute (cfg.lang_t.invalid_proto, {args.proto}), args, template); end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any) language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them if args.label then if 'none' ~= args.label then table.insert (out, table.concat ({args.label, ': '})); -- custom label end else if cfg.keywords_t.negative == args.link then table.insert (out, language_name); -- language name without wikilink else if mw.ustring.find (language_name, 'languages', 1, true) then table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink elseif lang_data.article_name[args.code:lower()] then -- is IETF tag in article name over ride? table.insert (out, make_wikilink (lang_data.article_name[args.code:lower()], language_name)); -- language name with wikilink from override data elseif lang_data.article_name[code] then -- is language tag in article override table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data else table.insert (out, make_wikilink (substitute ('$1 $2', {language_name, cfg.misc_text_t.language}), language_name)); -- language name with wikilink end end table.insert (out, ': '); -- separator end if cfg.keywords_t.invert == args.italic then args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, ('none' == args.label) and language_name or nil)) if is_set (args.translit) and not is_latn_text then -- transliteration; not supported when args.text is wholly latn text (this is an imperfect test) table.insert (out, ', '); -- comma to separate text from translit if 'none' ~= args.label then table.insert (out, '<small>'); if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name translit_script_name = script_table[args['translit-script']]; else translit_script_name = language_name; -- fall back on language name end local translit_title_obj = mw.title.makeTitle (0, substitute ('$1 $2',{cfg.lang_xx_t.romanization, translit_script_name})); -- make a title object; no engvar, article titles use US spelling if translit_title_obj.exists and (cfg.keywords_t.negative ~= args.link) then table.insert (out, make_wikilink (substitute ('$1 $2', {cfg.lang_xx_t.romanization, translit_script_name or language_name}), substitute ('$1', {cfg.engvar_t[args.engvar]['romanisz_pt']})) .. ':'); -- make a wikilink if there is an article to link to; engvar the display text else table.insert (out, substitute ('$1:', {cfg.engvar_t[args.engvar]['romanisz_pt']})); -- else plain text per engvar end table.insert (out, '&nbsp;</small>'); -- close the small tag end translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script'], nil, args.engvar) if is_set (translit) then table.insert (out, translit); else return make_error_msg (substitute ('$1: $2', {cfg.lang_xx_t.invalid_xlit_std, args['translit-std'] or '[missing]'}), args, template); end elseif is_set (args.translit) and is_latn_text then -- when creating a transliteration of Latn script <text> return make_error_msg (cfg.lang_xx_t.xlit_of_latn, args, template); -- emit error message and abandon end if is_set (args.translation) then -- translation (not supported in {{lang}}) table.insert (out, translation_make (args)); end table.insert (out, make_category (code, category_name, args.nocat)); table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G _ X X _ A R G S _ G E T >---------------------------------------------- Common function to get args table from {{lang-??}} templates. Returns table of args. Text positional parameters are not trimmed here but are selectively trimmed at html_tag_select(). ]] local function lang_xx_args_get (frame, base_template) local args_t = getArgs(frame, { parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}} valueFunc = function (key, value) if ((cfg.templates_t.langx == base_template) and 2 or 1) == key then -- the 'text' positional parameter; 1 for {{lang-??}}, 2 for {{langx}}; do not trim wite space return value; -- return untrimmed 'text' positional parameter elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); return args_t; end --[[--------------------------< L A N G _ X X _ I T A L I C >-------------------------------------------------- Entry point for those {{lang-??}} templates that call lang_xx_italic(). Sets the initial style state to italic. ]] local function lang_xx_italic (frame) local args = lang_xx_args_get (frame, cfg.templates_t.langxx); args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_italic|...}} local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message end initial_style_state = 'italic'; return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category end --[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------ Entry point from another module. Sets the initial style state to italic. ]] local function _lang_xx_italic (args) initial_style_state = 'italic'; return _lang_xx (args, cfg.templates_t.langxx); end --[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------ Entry point for those {{lang-??}} templates that call lang_xx_inherit(). Sets the initial style state to inherit. ]] local function lang_xx_inherit (frame) local args = lang_xx_args_get (frame, cfg.templates_t.langxx); args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_inherit|...}} local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message end initial_style_state = 'inherit'; return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category end --[[--------------------------< _ L A N G _ X X _ I N H E R I T >---------------------------------------------- Entry point from another module. Sets the initial style state to inherit. ]] local function _lang_xx_inherit (args) initial_style_state = 'inherit'; return _lang_xx (args, cfg.templates_t.langxx); end --[[--------------------------< _ L A N G X >------------------------------------------------------------------ Entry point from another module. ]] local function _langx (args_t) local langx_data = mw.loadData ('Module:Lang/langx'); -- get necessary data local rtl_t = langx_data.rtl_t; -- get list of language tags for languages that are rendered right-to-left local link_t = langx_data.link_t; -- get list of language tags for {{lang-??}} templates that set |link=<something> local size_t = langx_data.size_t; -- get list of language tags for {{lang-??}} templates that set |size=<something> local msg = parameter_validate (args_t, cfg.templates_t.langx); if msg then return make_error_msg (msg, args_t, cfg.templates_t.langx); end args_t.code = args_t[1] or args_t.code; -- get the language tag; must be {{{1}}} or |code= if not args_t.code then return make_error_msg (cfg.get_ietf_parts_t.missing_lang_tag, args_t, cfg.templates_t.langx); end args_t.rtl = args_t.rtl or (rtl_t[args_t.code] and cfg.keywords_t.affirmative); -- prefer |rtl= in template call, use rtl_t else args_t.link = args_t.link or link_t[args_t.code]; -- prefer |link= in template call, use link_t felse args_t.size = args_t.size or size_t[args_t.code]; -- prefer |size= in template call, use size_t else args_t[1] = nil; -- unset to mimic {{lang-??}} templates which set |code=xx local lang_subtag = args_t.code; -- use only the base language subtag for unsupported tag test; some args_t.code are modified by |script= etc return _lang_xx (args_t, cfg.templates_t.langx); end --[[--------------------------< L A N G X >-------------------------------------------------------------------- Entry point for {{langx}}. this function calls _lang_xx() to render non-English text. The {{lang-??}} templates have three positional paramters but {{langx}} has four: | 1 | 2 | 3 | 4 {{lang-xx |<text> |<xlit> |<xlat> }} {{langx |<tag> |<text> |<xlit> |<xlat> }} The calls to lang_xx_args_get() and _lang_xx() use 'langx' as a flag for those functions to select the proper positional parameters. {{lang-??}} depends on the calling template to select 'inherit' or 'italic' to establish the default rendering. {{langx}} can't do that. The initial version of {{langx}} relied on a list of language tags (inherit_t in ~/langx) scraped from those {{lang-??}} templates that call lang_xx_inherit() to render text in upright font. langx() now uses auto-italics code adapted from {{lang}} (doesn't support poem tags). ]] local function langx (frame) local args_t = lang_xx_args_get (frame, cfg.templates_t.langx); -- get the arguments; 'langx' is the <base_template> used to decide which positional param is 'text', 'translit', 'lit' return _langx (args_t); end --[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------ Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Module entry point from another module. ]] local function _is_ietf_tag (tag) -- entry point when this module is require()d into another local c, s, r, v, p, err; -- code, script, region, variant, private, error message c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else end --[[--------------------------< I S _ I E T F _ T A G >-------------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function is_ietf_tag (frame) return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the IETF language tag to be tested; also get parent frame end --[[--------------------------< I S _ I E T F _ T A G _ F R A M E >-------------------------------------------- Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent (template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag> is in the parent frame. ]] local function is_ietf_tag_frame (frame) return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the IETF language tag to be tested; do not get parent frame end --[[--------------------------< _ N A M E _ F R O M _ T A G >-------------------------------------------------- Returns language name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Set invoke's |link= parameter to yes to get wikilinked version of the language name. Module entry point from another module. ]] local function _name_from_tag (args) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args[1]; -- save a copy of the input IETF subtag local link = cfg.keywords_t.affirmative == args['link']; -- make a boolean local label = args.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local language_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template) return make_error_span (template, msg); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private language_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant if 'yes' ~= args.raw then language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them end if link then -- when |link=yes, wikilink the language name if mw.ustring.find (language_name, 'languages', 1, true) then language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink elseif lang_data.article_name[raw_code:lower()] then -- is IETF tag in article name override? language_name = make_wikilink (lang_data.article_name[raw_code:lower()], label or language_name); -- language name with wikilink from override data elseif lang_data.article_name[code] then -- is language tag in article name override? language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data else language_name = make_wikilink (substitute ('$1 $2', {language_name, cfg.misc_text_t.language}), label or language_name); -- language name with wikilink end end return language_name; end --[[--------------------------< N A M E _ F R O M _ T A G >---------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function name_from_tag (frame) -- entry point from an {{#invoke:lang|name_from_tag|<IETF tag>|link=<yes>|template=<template name>}} return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< _ T A G _ F R O M _ N A M E >-------------------------------------------------- Returns the IETF language tag associated with the language name. Spelling of language name must be correct according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator, that disambiguator must be omitted (they are not present in the data name-to-tag tables). Module entry point from another module. ]] local function _tag_from_name (args) -- entry point from another module local msg; if args[1] and '' ~= args[1] then local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct) local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard if tag then return tag, true; -- language name found so return tag and done; second return used by is_lang_name() else msg = substitute (cfg.tag_from_name_t.lang_not_found, {args[1]}); -- language name not found, error message end else msg = cfg.tag_from_name_t.missing_lang_name; -- language name not found, error message end local template = ''; if args.template and '' ~= args.template then template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template) end return make_error_span (template, msg); end --[[--------------------------< T A G _ F R O M _ N A M E >---------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function tag_from_name (frame) -- entry point from an {{#invoke:lang|tag_from_name|<language name>|link=<yes>|template=<template name>}} local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name() return result; end --[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------ Module entry point from an {{#invoke:}}. ]] local function is_lang_name (frame) local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name() return result and true or nil; end --[[--------------------------< _ X L I T >-------------------------------------------------------------------- Module entry point from another module. ]] local function _xlit (args) local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local language_name; -- language name that matches language code; used for tool tip local translit; -- transliterated text to display local script; -- IANA script local msg; -- for when called functions return an error message local template = args.template or cfg.templates_t.transliteration; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; if is_set (args[3]) then -- [3] set when {{transliteration|code|standard|text}} args.text = args[3]; -- get the transliterated text args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing if not title_table[args.translit_std] then return make_error_msg (substitute (cfg.transl_t.unrecog_xlit_std, {args.translit_std}), args, template); end else if is_set (args[2]) then -- [2] set when {{transliteration|code|text}} args.text = args[2]; -- get the transliterated text else if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text? args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag return make_error_msg (cfg.transl_t.no_text, args, template); -- args[1] is a code so we're missing text else args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); end end end if is_set (args[1]) then -- IANA language code used for HTML lang= attribute; or ISO 15924 script code if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form? args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case else return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args[1]}), args, template); -- invalid language / script code end else return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); -- missing language / script code so quit end local is_latn_text, pos, char; is_latn_text, args.text, pos, char= is_latin (args.text, args.code); -- is latn text? strip accept-as-written markup if not is_latn_text then -- when text is not latn return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); -- abandon with error message end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if 'italic' == args.italic then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default args.italic = nil; -- set to nil; end args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else if override_table[args.code] then -- is code a language code defined in the override table? language_name = override_table[args.code]; args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables? language_name = lang_table[args.code]; elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables? language_name = lang_dep_table[args.code]; elseif script_table[args.code] then -- if here, code is not a language code; is it a script code? language_name = script_table[args.code]; script = args.code; -- code was an ISO 15924 script so use that instead args.code = ''; -- unset because not a language code else return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args.code}), args, template); -- invalid language / script code end -- here only when all parameters passed to make_translit() are valid return make_translit (args.code, language_name, args.text, args.translit_std, script, args.italic, args.engvar); end --[[--------------------------< X L I T >---------------------------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function xlit (frame) return _xlit (getArgs(frame)); end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Returns category name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Module entry point from another module. ]] local function _category_from_tag (args_t) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args_t[1]; -- save a copy of the input IETF subtag local link = cfg.keywords_t.affirmative == args_t.link; -- make a boolean local label = args_t.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local category_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template) return make_error_span (template, msg); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private category_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', ''); if link then return table.concat ({'[[:', category_name, ']]'}); else return category_name; end end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function category_from_tag (frame) -- entry point from an {{#invoke:lang|category_from_tag|<IETF tag>|template=<template name>}} return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { category_from_tag = category_from_tag, -- frame entry points when this module is #invoke:ed into templates/wikitext lang = lang, -- entry point for {{lang}} langx = langx, -- entry point for {{langx}} lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}} lang_xx_italic = lang_xx_italic, is_ietf_tag = is_ietf_tag, is_ietf_tag_frame = is_ietf_tag_frame, is_lang_name = is_lang_name, tag_from_name = tag_from_name, -- returns IETF tag associated with language name name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates xlit = xlit, -- entry point for {{transliteration}} _category_from_tag = _category_from_tag, -- API entry points when this module is require()d into other modules _lang = _lang, _langx = _langx, _lang_xx_inherit = _lang_xx_inherit, _lang_xx_italic = _lang_xx_italic, _is_ietf_tag = _is_ietf_tag, get_ietf_parts = get_ietf_parts, _tag_from_name = _tag_from_name, _name_from_tag = _name_from_tag, _xlit = _xlit, _translation_make = translation_make, }; 4lchs3y6tbwcup48cwp3ayuhrxmusvw 746158 746157 2026-06-12T21:51:52Z Robertsky 51025 1 revision imported from [[:en:Module:Lang]]: for workshop activity 746157 Scribunto text/plain --[=[ Lua support for the {{lang}}, {{langx}}, {{lang-??}}, and {{transliteration}} templates and replacement of various supporting templates. ]=] require('strict'); local getArgs = require ('Module:Arguments').getArgs; local unicode = require ("Module:Unicode data"); -- for is_Latin() and is_rtl() local yesno = require ('Module:Yesno'); local sandbox = (mw.getCurrentFrame():getTitle():match ('/sandbox') or ''); -- when called from a sandbox template or module load sandbox data and sandbox configuration local lang_data = mw.loadData ('Module:Lang/data' .. sandbox); -- language name override and transliteration tool-tip tables local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts local lang_table = lang_data.lang_name_table.lang; local lang_dep_table = lang_data.lang_name_table.lang_dep; local script_table = lang_data.lang_name_table.script; local region_table = lang_data.lang_name_table.region; local variant_table = lang_data.lang_name_table.variant; local suppressed_table = lang_data.lang_name_table.suppressed; local override_table = lang_data.override; local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code local cfg = mw.loadData ('Module:Lang/configuration' .. sandbox); -- for internationalization local is_latn_data = mw.loadData ('Module:Lang/data/is latn data'); local sizeof_ranges_t = is_latn_data.sizeof_ranges_t; local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization local content_lang = mw.language.getContentLanguage(); local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic() local maint_cats = {}; -- maintenance categories go here local maint_msgs = {}; -- and their messages go here --[[--------------------------< M A K E _ E R R O R _ S P A N >-------------------------------------------------- ]] local function make_error_span (template, msg) return table.concat ({'<span style="color:var(--color-error,#d33)">', cfg.misc_text_t.error, ': ', template, msg, '</span>'}) end --[[--------------------------< S U B S T I T U T E >---------------------------------------------------------- Substitutes $1, $2, etc in <message> with data from <data_t>. Returns plain-text substituted string when <data_t> not nil; returns <message> else. ]] local function substitute (message, data_t) return data_t and mw.message.newRawMessage (message, data_t):plain() or message; end --[[--------------------------< M A K E _ E R R O R _ M S G >-------------------------------------------------- Assembles an error message from template name, message text, help link, and error category. ]] local function make_error_msg (msg, args_t, template) local category; local text; -- handle the oddity that is {{langx}} if cfg.templates_t.langxx == template then text = args_t.text or args_t[1]; -- for {{lang-xx}} else text = args_t.text or args_t[2]; -- for {{lang}}, {{langx}}, and {{transliteration}} end if cfg.templates_t.transliteration == template then category = cfg.make_error_msg_t.xlit_err_cat; else category = cfg.make_error_msg_t.lang_err_cat; end local category_link = ((0 == namespace or 10 == namespace) and not args_t.nocat) and substitute ('[[Category:$1]]', {category}) or ''; return substitute ('[$1] <span style="color:var(--color-error,#d33)">$2: &#x7B;{$3}}: $4 ([[:Category:$5|$6]])</span>$7', -- &#x7B; prevents template name from being treated as a template call in certain situations { text or cfg.make_error_msg_t.undefined, cfg.misc_text_t.error, template, msg, category, cfg.misc_text_t.help, category_link }) end --[[--------------------------< P A R A M E T E R _ V A L I D A T E >------------------------------------------ ]] local function parameter_validate (args_t, template) local err_msg = cfg.parameter_validate_t.invalid_param; if cfg.templates_t.lang == template then -- for {{lang}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_lang_t[param] and -- unique {{lang}} parameters not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end elseif cfg.templates_t.langx == template then -- for {{langx}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_langx_t[param] and -- unique {{langx}} parameters not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}} not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end elseif cfg.templates_t.langxx == template then -- for {{lang-xx}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_lang_xx_t[param] and -- unique {{lang-xx}} parameters not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}} not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end end end --[[--------------------------< I S _ S E T >------------------------------------------------------------------ Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. ]] local function is_set (var) return not (var == nil or var == ''); end --[[--------------------------< I N V E R T _ I T A L I C S >------------------------------------------------- This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing apostrophes are converted to their HTML numeric entity equivalent so that the new italic markup doesn't become bold markup inadvertently. Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal, replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements. In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns. This function expects that markup in args.text is complete and correct; if it is not, oddness may result. ]] local function invert_italics (source) local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns [""]="\'\'", -- empty string becomes italic markup ["\'\'"]="", -- italic markup becomes empty string ["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic ["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold }; local seg = {}; source = source:gsub ("%f[\']\'%f[^\']", '&#39;'); -- protect single quote marks from being interpreted as bold markup seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text' seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup elseif '' ~= seg[1] then seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup elseif '' ~= seg[3] then seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup else seg[2] = source -- when there is no markup end seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table return table.concat (seg); -- put it all back together and done end --[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------ Validates |italic= or |italics= assigned values. When |italic= is set and has an acceptable assigned value, return the matching CSS font-style property value or, for the special case 'default', return nil. When |italic= is not set, or has an unacceptable assigned value, return nil and a nil error message. When both |italic= and |italics= are set, returns nil and a 'conflicting' error message. The return value nil causes the calling lang, lang_xx, or xlit function to set args.italic according to the template's defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-??}} depending on the individual template's requirements, 'italic' for {{transliteration}}) or to the value appropriate to |script=, if set ({{lang}} and {{lang-??}} only). Accepted values and the values that this function returns are are: nil - when |italic= absent or not set; returns nil default - for completeness, should rarely if ever be used; returns nil yes - force args.text to be rendered in italic font; returns 'italic' no - force args.text to be rendered in normal font; returns 'normal' unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit' invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert' ]] local function validate_italic (args) local properties = {[cfg.keywords_t.affirmative] = 'italic', [cfg.keywords_t.negative] = 'normal', [cfg.keywords_t.unset] = 'inherit', [cfg.keywords_t.invert] = 'invert', [cfg.keywords_t.default] = nil}; local count = 0 for _, arg in pairs {'italic', 'italics', 'i'} do if args[arg] then count = count + 1 end end if count > 1 then -- return nil and an error message if more than one is set return nil, cfg.validate_italic_t.multi_italic; end return properties[args.italic or args.italics or args.i], nil; -- return an appropriate value and a nil error message end --[=[--------------------------< V A L I D A T E _ C A T _ A R G S >---------------------------------------------------------- Default behavior of the {{lang}} and {{lang-??}} templates is to add categorization when the templates are used in main space. This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters to control categorization. Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the parameter is treated as if it were not set in the template. Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply. Accepted values for |nocat= are the text strings: 'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else for |cat= 'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else ]=] local function validate_cat_args (args) if not (args.nocat or args.cat) then -- both are nil, so categorize return; end if false == yesno (args.cat) or true == yesno (args.nocat) then args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template) else -- args.nocat is the parameter actually used. args.nocat = nil; end end --[[--------------------------< I N _ A R R A Y >-------------------------------------------------------------- Whether needle is in haystack. ]] local function in_array (needle, haystack) if needle == nil then return false; end for n,v in ipairs (haystack) do if v == needle then return n; end end return false; end --[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------ Prettify IETF tags to use recommended subtag formats: code: lower case script: sentence case region: upper case variant: lower case private: lower case prefixed with -x- ]] local function format_ietf_tag (code, script, region, variant, private) local out = {}; if is_set (private) then return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored end table.insert (out, code:lower()); if is_set (script) then script = script:lower():gsub ('^%a', string.upper); table.insert (out, script); end if is_set (region) then table.insert (out, region:upper()); end if is_set (variant) then table.insert (out, variant:lower()); end return table.concat (out, '-'); end --[[--------------------------< G E T _ I E T F _ P A R T S >-------------------------------------------------- Extracts and returns IETF language tag parts: primary language subtag (required) - 2 or 3 character IANA language code script subtag - four character IANA script code region subtag - two-letter or three digit IANA region code variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag in any one of these forms lang lang-variant lang-script lang-script-variant lang-region lang-region-variant lang-script-region lang-script-region-variant lang-x-private each of lang, script, region, variant, and private, when used, must be valid. Languages with both two- and three-character code synonyms are promoted to the two-character synonym because the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding the synonymous three-character codes in the lang= attribute. For {{lang-??}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}} because those parameters are superfluous to the IETF subtags in |code=). Returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil. See http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1. ]] local function get_ietf_parts (source, args_script, args_region, args_variant) local code, script, region, variant, private; -- IETF tag parts if not is_set (source) then return nil, nil, nil, nil, nil, cfg.get_ietf_parts_t.missing_lang_tag; end local pattern = { -- table of tables holding acceptable IETF tag patterns and short names of the IETF part captured by the pattern {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits) {'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss {'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR {'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits) {'^(%a%a%a?)$'}, -- 18 - ll {'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters) } local t = {}; -- table of captures; serves as a translator between captured IETF tag parts and named variables for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i]) if c1 then -- c1 always set on match code = c1; -- first capture is always code t = { [pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures [pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures [pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table }; script = t.s or ''; -- translate table contents to named variables; region = t.r or ''; -- absent table entries are nil so set named IETF parts to empty string for concatenation variant= t.v or ''; private = t.p or ''; break; -- and done end end if not code then return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_tag, {source}); -- don't know what we got but it is malformed end code = code:lower(); -- ensure that we use and return lower case version of this if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_code, {code}); -- invalid language code, don't know about the others (don't care?) end if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym table.insert (maint_cats, substitute (cfg.get_ietf_parts_t.maint_promo_cat, {code})); table.insert (maint_msgs, substitute (cfg.get_ietf_parts_t.maint_promo_msg, {code, synonym_table[code]})); code = synonym_table[code]; -- use the synonym end if is_set (script) then if is_set (args_script) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_scr; -- both code with script and |script= not allowed end else script = args_script or ''; -- use args.script if provided end if is_set (script) then script = script:lower(); -- ensure that we use and return lower case version of this if not script_table[script] then return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_scr_code, {script, code}); -- language code OK, invalid script, don't know about the others (don't care?) end end if suppressed_table[script] then -- ensure that code-script does not use a suppressed script if in_array (code, suppressed_table[script]) then return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.script_code, {script, code}); -- language code OK, script is suppressed for this code end end if is_set (region) then if is_set (args_region) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_reg; -- both code with region and |region= not allowed end else region = args_region or ''; -- use args.region if provided end if is_set (region) then region = region:lower(); -- ensure that we use and return lower case version of this if not region_table[region] then return code, script, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_reg_code, {region, code}); end end if is_set (variant) then if is_set (args_variant) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_var; -- both code with variant and |variant= not allowed end else variant = args_variant or ''; -- use args.variant if provided end if is_set (variant) then variant = variant:lower(); -- ensure that we use and return lower case version of this if not variant_table[variant] then -- make sure variant is valid return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var, {variant}); end -- does this duplicate/replace tests in lang() and lang_xx()? if is_set (script) then -- if script set it must be part of the 'prefix' if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_scr, {variant, code, script}); end elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound) if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred) if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound) return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_reg, {variant, code, region}); end end else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0 if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code, {variant, code}); end end end if is_set (private) then private = private:lower(); -- ensure that we use and return lower case version of this if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_pri, {private}); end end return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil end --[=[-------------------------< M A K E _ W I K I L I N K >---------------------------------------------------- Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an empty string. ]=] local function make_wikilink (link, display) if is_set (link) then if is_set (display) then return table.concat ({'[[', link, '|', display, ']]'}); else return table.concat ({'[[', link, ']]'}); end else return ''; end end --[[--------------------------< D I V _ M A R K U P _ A D D >-------------------------------------------------- Adds <i> and </i> tags to list-item text or to implied <p>..</p> text. Mixed not supported. ]] local function div_markup_add (text, style) if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text if 'italic' == style then return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item else return text; end end if text:find ('\n+') then -- look for any number of \n characters in text text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics MediaWiki if 'italic' == style then text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each implied p (two or more consecutive '\n\n' sequences) else text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each implied p text = text:gsub ('\n', ''); -- strip newline characters end end return text; end --[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------ Makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where <title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in HTML markup. This because the lang= attribute applies to the content of its enclosing tag. <tag> holds a string 'div' or 'span' used to choose the correct wrapping tag. ]] local function title_wrapper_make (title_text, content_text, tag) local wrapper_t = {}; table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag table.insert (wrapper_t, ' title=\"'); -- begin title attribute table.insert (wrapper_t, title_text); -- add <title_text> table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag table.insert (wrapper_t, content_text); -- add <content_text> table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag return table.concat (wrapper_t); -- make a big string and done end --[[--------------------------< M A K E _ T E X T _ H T M L >-------------------------------------------------- Add the HTML markup to text according to the type of content that it is: <span> or <i> tags for inline content or <div> tags for block content The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish language text' is English: <i lang="es" title="Spanish language text">casa</i> should be: <span title="Spanish language text"><i lang="es">casa</i></span> or for <div>...</div>: <div title="Spanish language text"><div lang="es"><spanish-language-text></div></div> ]] local function make_text_html (code, text, tag, rtl, style, size, language) local html_t = {}; local style_added = ''; local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div if text:match ('^%*') then table.insert (html_t, '&#42;'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki text = text:gsub ('^%*', ''); -- remove the splat from the text end if 'span' == tag then -- default HTML tag for inline content if 'italic' == style then -- but if italic tag = 'i'; -- change to <i> tags end else -- must be div so go text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i> end table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> HTML tag code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of Wikipedia table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages end if 'normal' == style then -- when |italic=no table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any style_added = '\"'; -- remember that style attribute added and is not yet closed end if is_set (size) then -- when |size=<something> if is_set (style_added) then table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted else table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute style_added = '\"'; -- remember that style attribute added and is not yet closed end end table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening HTML tag table.insert (html_t, text); -- insert the text table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> HTML tag if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div local title_text; if 'zxx' == code then -- special case for this tag 'no linguistic content' title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.zxx}); -- not a language so don't use 'language' in title text elseif mw.ustring.find (language, 'languages', 1, true) then title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.collective}); -- for collective languages else title_text = substitute ('$1-$2', {language, cfg.make_text_html_t.individual}); -- for individual languages end return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag); else return table.concat (html_t); end end --[=[-------------------------< M A K E _ C A T E G O R Y >---------------------------------------------------- For individual language, <language>, returns: [[Category:Articles containing <language>-language text]] For English: [[Category:Articles containing explicitly cited English-language text]] For ISO 639-2 collective languages (and for 639-1 bh): [[Category:Articles with text in <language> languages]] ]=] local function make_category (code, language_name, nocat, name_get) if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space return ''; -- return empty string for concatenation end if mw.ustring.find (language_name, 'languages', 1, true) then return substitute ('[[$1 $2]]', {cfg.make_category_t.collective_cat, language_name}); end if this_wiki_lang_tag == code then return substitute ('[[$1 $2 $3-$4]]', { -- unique category name for the local language cfg.make_category_t.cat_prefix, cfg.make_category_t.explicit_cat, language_name, cfg.make_category_t.cat_postfix, }); else return substitute ('[[$1 $2-$3]]', { -- category for individual languages cfg.make_category_t.cat_prefix, language_name, cfg.make_category_t.cat_postfix, }); end end --[[--------------------------< M A K E _ T R A N S L I T >---------------------------------------------------- Return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string. The value |script= is not used in {{transliteration}} for this purpose; instead it uses |code. Because language scripts are listed in the {{transliteration}} switches they are included in the data tables. The script parameter is introduced at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code. To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed to be |translit-script= (in this function, tscript). This function is used by both lang_xx() and xlit() lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style xlit() always provides language_name, translit, and one of code or tscript, never both; always provides style For {{transliteration}}, style only applies when a language code is provided. ]] local function make_translit (code, language_name, translit, std, tscript, style, engvar) local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local title_text = ''; -- tool tip text for title= attribute std = std and std:lower(); -- lower case for table indexing if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified title_text = language_name; -- write a generic tool tip if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = substitute ('$1-$2', {title_text, cfg.misc_text_t.language}); -- skip this text (individual and macro languages only) end title_text = substitute ('$1 $2', {title_text, mw.ustring.lower (cfg.engvar_t[engvar]['romanisz_lc'])}); -- finish the tool tip; use romanization when neither script nor standard supplied elseif is_set (std) and is_set (tscript) then -- when both are specified if title_t[std] then -- and if standard is legitimate if title_t[std][tscript] then -- and if script for that standard is legitimate if script_table[tscript] then title_text = substitute ('$1$2 ($3 $4) $5', { -- add the appropriate text to the tool tip title_text, title_t[std][tscript:lower()], script_table[tscript], cfg.make_translit_t.script, cfg.make_translit_t.transliteration, }); else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else return ''; -- invalid standard, setup for error message end elseif is_set (std) then -- translit-script not set, use language code if not title_t[std] then return ''; end -- invalid standard, setup for error message if title_t[std][code] then -- if language code is in the table (xlit may not provide a language code) local fmt_str = '$1$2 ($3 $4) $5'; -- generic format string for tool tip if language_name:match ('languages') then fmt_str = '$1$2 ($3) $5'; -- format string for collective languages tool tip end title_text = substitute (fmt_str, { -- add the appropriate text to the tool tip title_text, title_t[std][code:lower()], language_name, cfg.misc_text_t.language, cfg.make_translit_t.transliteration, }); else -- code doesn't match title_text = title_text .. title_t[std]['default']; -- so use the standard's default end else -- here if translit-script set but translit-std not set if title_t['no_std'][tscript] then title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set elseif title_t['no_std'][code] then title_text = title_text .. title_t['no_std'][code]; -- use language code else if is_set (tscript) then title_text = substitute ('$1$2-$3 $4', { -- write a script tool tip title_text, language_name, cfg.make_translit_t.script, cfg.make_translit_t.transliteration, }); elseif is_set (code) then if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = substitute ('$1-$2', { -- skip this text (individual and macro languages only) title_text, cfg.misc_text_t.language, }); end title_text = substitute ('$1 $2', { -- finish the tool tip title_text, cfg.make_translit_t.transliteration, }); else title_text = substitute ('$1 $2', { -- generic tool tip (can we ever get here?) title_text, cfg.make_translit_t.transliteration, }); end end end local tag if is_set (code) then -- when a language code is provided (always with {{lang-??}} templates, not always with {{transliteration}}) code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag if not style then -- nil for the default italic style tag = '<i lang="%s-Latn">%s</i>' else tag = '<span style="font-style: %s" lang="%s-Latn">%s</span>' -- non-standard style, construct a span tag for it tag = string.format(tag, style, "%s", "%s") end tag = string.format(tag, code, "%s") else tag = '<span>%s</span>' -- when no language code: no lang= attribute, not italic ({{transliteration}} only) end tag = string.format(tag, translit) -- add the translit text if '' == title_text then -- when there is no need for a tool-tip return tag; -- done else title_text = cfg.engvar_sel_t.gb == engvar and title_text:gsub ('([Rr]omani)z', '%1s') or title_text; -- gb eng when engvar specifies gb eng; us eng else return title_wrapper_make (title_text, tag, 'span'); -- wrap with a tool-tip span and done end end --[[--------------------------< V A L I D A T E _ T E X T >---------------------------------------------------- This function checks the content of args.text and returns empty string if nothing is amiss else it returns an error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup. Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert. ]] local function validate_text (template, args) if not is_set (args.text) then return make_error_msg (cfg.validate_text_t.no_text, args, template); end if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes return make_error_msg (cfg.validate_text_t.malformed_markup, args, template); end local style = args.italic; if (cfg.keywords_t.unset ~= style) and (cfg.keywords_t.invert ~=style) then if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic return make_error_msg (cfg.validate_text_t.italic_markup, args, template); end end end --[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------ Render mainenance messages and categories. ]] local function render_maint (nocat) local maint = {}; if 0 < #maint_msgs then -- when there are maintenance messages table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag for _, msg in ipairs (maint_msgs) do table.insert (maint, table.concat ({msg, ' '})); -- add message strings end table.insert (maint, '</span>'); -- close the span end if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only for _, cat in ipairs (maint_cats) do table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories end end return table.concat (maint); end --[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------ For proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we do nothing. proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and inhibits regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac. ]] local function proto_prefix (text, language_name, proto_param) if false == proto_param then -- when forced by |proto=no return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats end return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat end --[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------ Looks for a poem strip marker in text; returns true when found; false else. Auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know the content that will replace the stripmarker. ]] local function has_poem_tag (text) return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false; end --[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------ Inspects content of and selectively trims text. Returns text and the name of an appropriate HTML tag for text. If text contains: \n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return If text begins with list markup: \n* unordered \n; definition \n: definition \n# ordered trim all leading whitespace except \n and trim all trailing whitespace If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because the stripmarker is replaced with text wrapped in <div>..</div> tags. If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div> tags are used to wrap it, to prevent div/span inversion. ]] local function html_tag_select (text) local tag; if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that) tag = 'div'; -- poem replacement is in div tags so lang must use div tags elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags tag = 'div'; elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags text = mw.text.trim (text); -- trim leading and trailing whitespace characters tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags elseif text:find ('\n[%*:;%#]') then -- if text has list markup text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n' tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki) else text = mw.text.trim (text); -- plain text tag = 'span'; -- so span is fine end return text, tag; end --[[--------------------------< V A L I D A T E _ P R O T O >-------------------------------------------------- Validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false, empty string (or parameter omitted) returns as nil; any other value returns nil with <proto_param> as second return value for use in error message. ]] local function validate_proto (proto_param) if cfg.keywords_t.affirmative == proto_param then return true; elseif cfg.keywords_t.negative == proto_param then return false; elseif is_set (proto_param) then return nil, proto_param; -- |proto= something other than 'yes' or 'no' else return nil; -- missing or empty end end --[[--------------------------< L A N G U A G E _ N A M E _ G E T >-------------------------------------------- Common function to return language name from the data set according to IETF tag. Returns language name if found in data tables; nil else. ]] local function language_name_get (ietf, code, cat) ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case local name; -- remains nil if not found if override_table[ietf] then -- look for whole IETF tag in override table name = override_table[ietf]; elseif override_table[code] then -- not there so try basic language tag name = override_table[code]; elseif lang_table[code] then -- shift to IANA active tag/name table name = lang_table[code]; elseif lang_dep_table[code] then -- try the IANA deprecated tag/name table name = lang_dep_table[code]; end if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name table.insert (maint_cats, substitute (cfg.language_name_get_t.deprecated_cat, {code})); table.insert (maint_msgs, substitute (cfg.language_name_get_t.deprecated_msg, {code})); end return name; -- name from data tables or nil end --[[--------------------------< T E X T _ S C R I P T _ M A T C H _ T E S T >---------------------------------- IETF script subtag should match the script of the <text>. This module does not attempt to know all scripts and what they look like. It does know what Latn script looks like so when <text> is written using other than the Latn script, the IETF script subtag, if present, should not be Latn. Conversely, when <text> is written using the Latn script, the IETF script subtag, if present, should be Latn. For the purposes of this test, Latf (Fraktur) and Latg (Gaelic) are considered to be equivalent to Latn because unicode treats these two scripts as font-specific variants of Latn. Returns an error message when mismatch detected; nil else. ]] local function text_script_match_test (script, is_latn_text, pos, char) local scripts_t = {['latf'] = true, ['latg'] = true, ['latn'] = true}; -- unicode 'latn' scripts; 'latf' and 'latg' are font variants so there are no Fraktur or Gaelic codepoints if is_set (script) then -- don't bother with the rest of this if <script> is nil or empty string script = script:lower(); -- lower case to index into <scripts_t> if is_latn_text then -- when text is wholly Latn script if not scripts_t[script] then -- but a non-Latn script is specified return cfg.text_script_match_test_t.latn_txt_mismatch; -- emit an error message end else -- when text is not wholly Latn script if scripts_t[script] then -- but a Latn script is specified return substitute (cfg.text_script_match_test_t.latn_scr_mismatch, {pos, char}); -- emit an error message with position of first offending character end end end end --[[--------------------------< B I N A R Y _ S E A R C H >--------------------------------------------------- conducts a binary search of <ranges_t> for a sub-range that holds <target>. returns boolean true if a sub-range holding <target> is found; boolean false else. ]] local function binary_search (target, ranges_t) local idx_bot = 1; -- initialize to index of first key local idx_top = sizeof_ranges_t; -- initialize to index of last key (number of keys) if (target < ranges_t[idx_bot][1]) or (target > ranges_t[idx_top][2]) then -- invalid; target out of range return; -- abandon end local idx_mid; -- calculated index of range midway between top index and bottom index local flag = false; -- flag to tell us when we've evaluated last (highest) range in <ranges_t> while 1 do idx_mid = math.ceil ((idx_bot + idx_top) / 2); -- get the mid-point in the <ranges_t> sequence if (target >= ranges_t[idx_mid][1]) and (target <= ranges_t[idx_mid][2]) then -- indexed range low value <= target <= indexed range high value return true; -- we found the range that holds the <target> character; return true elseif (target > ranges_t[idx_mid][2]) then -- is <target> > indexed range high value? idx_bot = idx_mid; -- adjust <idx_bot> up else -- here when <target> less than indexed range low value idx_top = idx_mid - 1; -- adjust <idx_top> down end if flag then break; -- here when we just evaluated the last range and <target> not found end if not flag and (idx_bot == idx_top) then -- set true just before we evaluate the last (highest) range in <ranges_t> flag = true; end end end --[[--------------------------< I S _ L A T I N >-------------------------------------------------------------- compare <text> as codepoints to lists of known codepoints accepted as Latn script returns boolean true and modified <text> when <text> is wrapped in accept-as-written markup returns boolean true and <text> when codepoint is known returns boolean false, <text>, non-Latn codepoint position in <text> (left to right), and the codepoint character when codepoint is not known TODO: when text has accept-as-written markup, return a non-boolean value to indicate that <text> is not wholly latn script? Use that return value to create non-Latn HTML lang= attribute because <text> isn't really latn so lang=und (undetermined)? or instead, omit the -Latn subtag? (without -Latn need to force |italic=yes) ]] local function is_latin (text, tag) local count; text, count = text:gsub ('^%(%((.+)%)%)$', '%1'); -- remove accept-as-written markup if present if 0 ~= count then return true, text; -- markup present so assume that <text> is Latn-script end local pos = 0; -- position counter for error messaging for codepoint in mw.ustring.gcodepoint (text) do -- fetch each code point pos = pos + 1; -- bump the position counter if not is_latn_data.singles_t[codepoint] and -- codepoint not found in the singles list? not binary_search (codepoint, is_latn_data.ranges_t) and -- codepoint not a member of a listed range? not (tag and is_latn_data.specials_t[codepoint] and is_latn_data.specials_t[codepoint][tag]) then -- not a language-specific codepoint? return false, text, pos, mw.ustring.char (codepoint); -- codepoint not known; return false with codepoint position and character representation end end return true, text; -- is known; return <text> end --[[--------------------------< _ L A N G >-------------------------------------------------------------------- Entry point for {{lang}}. There should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> Parameters are received from the template's frame (parent frame). ]] local function _lang (args) local out = {}; local language_name; -- used to make category names local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, variant, and private local code; -- the language code local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or cfg.templates_t.lang; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; validate_cat_args (args); -- determine if categorization should be suppressed if args[1] and args.code then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'1', cfg.lang_t.conflict_n_param_types.code}), args, template); else args.code = args[1] or args.code; -- prefer args.code end if args[2] and args.text then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'2', cfg.lang_t.conflict_n_param_types.text}), args, template); else args.text = args[2] or args.text; -- prefer args.text end msg = validate_text (template, args); -- ensure that |text= is set if is_set (msg) then -- msg is an already-formatted error message return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (substitute (cfg.lang_t.invalid_proto, {msg}), args, template); end code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}}) if msg then return make_error_msg (msg, args, template); end local is_latn_text, pos, char; is_latn_text, args.text, pos, char= is_latin (args.text, code); -- make a boolean msg = text_script_match_test (subtags.script, is_latn_text, pos, char) if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and is_latn_text) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics) args.italic = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic else args.italic = 'inherit'; -- italic not set; script not latn; inherit current style end end if is_set (subtags.script) then -- if script set, override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant if cfg.keywords_t.invert == args.italic and 'span' == tag then -- invert only supported for in-line content args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, language_name)); table.insert (out, make_category (code, language_name, args.nocat)); table.insert (out, render_maint (args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G >---------------------------------------------------------------------- Entry point for {{lang}}. There should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> Parameters are received from the template's frame (parent frame). ]] local function lang (frame) local args_t = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text valueFunc = function (key, value) if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space return value; -- return untrimmed 'text' elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); args_t.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang|...}} local msg = parameter_validate (args_t, cfg.templates_t.lang); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args_t, cfg.templates_t.lang); -- when template has unsupported params, abandon with error message end return _lang (args_t); end --[[--------------------------< T R A N S L A T I O N _ M A K E >---------------------------------------------- Stand-alone function to create literal translation of main text. Also used by {{lang-x2}}. ]] local function translation_make (args_t) local translation_t = {', '}; -- initialize output if 'none' ~= args_t.label then -- if we want a label table.insert (translation_t, '<small>'); -- open the <small> HTML tag if cfg.keywords_t.negative == args_t.link then table.insert (translation_t, substitute ('<abbr title="$1">$2</abbr>', {cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr})); -- unlinked form else table.insert (translation_t, make_wikilink (cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr)); -- linked form end table.insert (translation_t, "&thinsp;</small>"); -- close the <small> HTML tag end table.insert (translation_t, table.concat ({ -- user styling spans match spand from {{gloss}} '<span class="gloss-quot">\'</span>', -- user styling span for quote marks; use HTML entities to avoid wiki markup confusion '<span class="gloss-text">', -- open user styling span for the translation args_t.translation, -- the translation '</span>', -- close user styling span for the translation '<span class="gloss-quot">\'</span>' -- user styling span for quote marks })); return table.concat (translation_t); -- make a big string and done end --[[--------------------------< _ L A N G _ X X >-------------------------------------------------------------- For the {{lang-??}} templates, the only parameter required to be set in the template is the language code. All other parameters can, usually should, be written in the template call. For {{lang-??}} templates for languages that can have multiple writing systems, it may be appropriate to set |script= as well. For each {{lang-??}} template choose the appropriate entry-point function so that this function knows the default styling that should be applied to text. For normal, upright style: <includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly> For italic style: <includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly> All other parameters should be received from the template's frame (parent frame) Supported parameters are: |code = (required) the IANA language code |script = IANA script code; especially for use with languages that use multiple writing systems |region = IANA region code |variant = IANA variant code |text = (required) the displayed text in language specified by code |link = boolean false ('no') does not link code-spcified language name to associated language article |rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language |nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected |cat = boolian false ('no') opposite form of |nocat= |italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state |lit = text that is a literal translation of text |label = 'none' to suppress all labeling (language name, 'translit.', 'lit.') any other text replaces language-name label - automatic wikilinking disabled for those {{lang-??}} templates that support transliteration (those templates where |text= is not entirely latn script): |translit = text that is a transliteration of text |translit-std = the standard that applies to the transliteration |translit-script = ISO 15924 script name; falls back to code For {{lang-??}}, the positional parameters are: {{{1}}} text {{{2}}} transliterated text {{{3}}} literal translation text no other positional parameters are allowed ]] local function _lang_xx (args, base_template) -- base_template will be either of 'langx' or 'lang-xx' local out = {}; local language_name; -- used to make display text, article links local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, and variant local code; -- the language code local translit_script_name; -- name associated with IANA (ISO 15924) script code local translit; local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or base_template; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; local text_idx = (cfg.templates_t.langx == base_template) and 2 or 1; -- for {{langx}} 'text' positional parameter is '2' local translit_idx = (cfg.templates_t.langx == base_template) and 3 or 2; local xlate_idx = (cfg.templates_t.langx == base_template) and 4 or 3; if args[text_idx] and args.text then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {text_idx, cfg.lang_t.conflict_n_param_types.text}), args, template); else args.text = args[text_idx] or args.text; -- prefer positional 'text' parameter end msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding if is_set (msg) then return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly if args[translit_idx] and args.translit then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {translit_idx, cfg.lang_t.conflict_n_param_types.translit}), args, template); else args.translit = args[translit_idx] or args.translit -- prefer positional 'translit' parameter end args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else if args[xlate_idx] and (args.translation or args.lit) then return make_error_msg (substitute (cfg.lang_xx_t.conflict_n_lit, {xlate_idx}), args, template); elseif args.translation and args.lit then return make_error_msg (cfg.lang_xx_t.conflict_lit, args, template); else args.translation = args[xlate_idx] or args.translation or args.lit; -- prefer positional 'translation' parameter end if args.links and args.link then return make_error_msg (cfg.lang_xx_t.conflict_link, args, template); else args.link = args.link or args.links; -- prefer args.link end validate_cat_args (args); -- determine if categorization should be suppressed args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end if args.translit then local latn, pos, char; latn, args.translit, pos, char = is_latin (args.translit, (('' ~= subtags.private) and (code .. '-x-' .. subtags.private)) or code); if not latn then return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); end end local is_latn_text, text, pos, char = is_latin (args.text, code); -- make a boolean args.text = text; -- may have been modified (accept-as-written markup removed) msg = text_script_match_test (subtags.script, is_latn_text, pos, char) if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if cfg.templates_t.langx == base_template then -- auto-italics for {{langx}} templates; adapted from {{lang}} (no support for poem tag) if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and is_latn_text) then -- text is not this wiki's language, no script specified and is wholly latn script (auto-italics) args.italic = 'italic'; -- set font-style:italic else args.italic = 'inherit'; -- italic not set; script not latn; inherit current style end end else -- {{lang-xx}} does not do auto italics; retained for those wikis that don't support {{langx}} if nil == args.italic then -- args.italic controls if is_set (subtags.script) then if 'latn' == subtags.script then args.italic = 'italic'; -- |script=Latn; set for font-style:italic else args.italic = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state> end else args.italic = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state> end end end if is_set (subtags.script) then -- if script set override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (substitute (cfg.lang_t.invalid_proto, {args.proto}), args, template); end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any) language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them if args.label then if 'none' ~= args.label then table.insert (out, table.concat ({args.label, ': '})); -- custom label end else if cfg.keywords_t.negative == args.link then table.insert (out, language_name); -- language name without wikilink else if mw.ustring.find (language_name, 'languages', 1, true) then table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink elseif lang_data.article_name[args.code:lower()] then -- is IETF tag in article name over ride? table.insert (out, make_wikilink (lang_data.article_name[args.code:lower()], language_name)); -- language name with wikilink from override data elseif lang_data.article_name[code] then -- is language tag in article override table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data else table.insert (out, make_wikilink (substitute ('$1 $2', {language_name, cfg.misc_text_t.language}), language_name)); -- language name with wikilink end end table.insert (out, ': '); -- separator end if cfg.keywords_t.invert == args.italic then args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, ('none' == args.label) and language_name or nil)) if is_set (args.translit) and not is_latn_text then -- transliteration; not supported when args.text is wholly latn text (this is an imperfect test) table.insert (out, ', '); -- comma to separate text from translit if 'none' ~= args.label then table.insert (out, '<small>'); if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name translit_script_name = script_table[args['translit-script']]; else translit_script_name = language_name; -- fall back on language name end local translit_title_obj = mw.title.makeTitle (0, substitute ('$1 $2',{cfg.lang_xx_t.romanization, translit_script_name})); -- make a title object; no engvar, article titles use US spelling if translit_title_obj.exists and (cfg.keywords_t.negative ~= args.link) then table.insert (out, make_wikilink (substitute ('$1 $2', {cfg.lang_xx_t.romanization, translit_script_name or language_name}), substitute ('$1', {cfg.engvar_t[args.engvar]['romanisz_pt']})) .. ':'); -- make a wikilink if there is an article to link to; engvar the display text else table.insert (out, substitute ('$1:', {cfg.engvar_t[args.engvar]['romanisz_pt']})); -- else plain text per engvar end table.insert (out, '&nbsp;</small>'); -- close the small tag end translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script'], nil, args.engvar) if is_set (translit) then table.insert (out, translit); else return make_error_msg (substitute ('$1: $2', {cfg.lang_xx_t.invalid_xlit_std, args['translit-std'] or '[missing]'}), args, template); end elseif is_set (args.translit) and is_latn_text then -- when creating a transliteration of Latn script <text> return make_error_msg (cfg.lang_xx_t.xlit_of_latn, args, template); -- emit error message and abandon end if is_set (args.translation) then -- translation (not supported in {{lang}}) table.insert (out, translation_make (args)); end table.insert (out, make_category (code, category_name, args.nocat)); table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G _ X X _ A R G S _ G E T >---------------------------------------------- Common function to get args table from {{lang-??}} templates. Returns table of args. Text positional parameters are not trimmed here but are selectively trimmed at html_tag_select(). ]] local function lang_xx_args_get (frame, base_template) local args_t = getArgs(frame, { parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}} valueFunc = function (key, value) if ((cfg.templates_t.langx == base_template) and 2 or 1) == key then -- the 'text' positional parameter; 1 for {{lang-??}}, 2 for {{langx}}; do not trim wite space return value; -- return untrimmed 'text' positional parameter elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); return args_t; end --[[--------------------------< L A N G _ X X _ I T A L I C >-------------------------------------------------- Entry point for those {{lang-??}} templates that call lang_xx_italic(). Sets the initial style state to italic. ]] local function lang_xx_italic (frame) local args = lang_xx_args_get (frame, cfg.templates_t.langxx); args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_italic|...}} local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message end initial_style_state = 'italic'; return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category end --[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------ Entry point from another module. Sets the initial style state to italic. ]] local function _lang_xx_italic (args) initial_style_state = 'italic'; return _lang_xx (args, cfg.templates_t.langxx); end --[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------ Entry point for those {{lang-??}} templates that call lang_xx_inherit(). Sets the initial style state to inherit. ]] local function lang_xx_inherit (frame) local args = lang_xx_args_get (frame, cfg.templates_t.langxx); args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_inherit|...}} local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message end initial_style_state = 'inherit'; return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category end --[[--------------------------< _ L A N G _ X X _ I N H E R I T >---------------------------------------------- Entry point from another module. Sets the initial style state to inherit. ]] local function _lang_xx_inherit (args) initial_style_state = 'inherit'; return _lang_xx (args, cfg.templates_t.langxx); end --[[--------------------------< _ L A N G X >------------------------------------------------------------------ Entry point from another module. ]] local function _langx (args_t) local langx_data = mw.loadData ('Module:Lang/langx'); -- get necessary data local rtl_t = langx_data.rtl_t; -- get list of language tags for languages that are rendered right-to-left local link_t = langx_data.link_t; -- get list of language tags for {{lang-??}} templates that set |link=<something> local size_t = langx_data.size_t; -- get list of language tags for {{lang-??}} templates that set |size=<something> local msg = parameter_validate (args_t, cfg.templates_t.langx); if msg then return make_error_msg (msg, args_t, cfg.templates_t.langx); end args_t.code = args_t[1] or args_t.code; -- get the language tag; must be {{{1}}} or |code= if not args_t.code then return make_error_msg (cfg.get_ietf_parts_t.missing_lang_tag, args_t, cfg.templates_t.langx); end args_t.rtl = args_t.rtl or (rtl_t[args_t.code] and cfg.keywords_t.affirmative); -- prefer |rtl= in template call, use rtl_t else args_t.link = args_t.link or link_t[args_t.code]; -- prefer |link= in template call, use link_t felse args_t.size = args_t.size or size_t[args_t.code]; -- prefer |size= in template call, use size_t else args_t[1] = nil; -- unset to mimic {{lang-??}} templates which set |code=xx local lang_subtag = args_t.code; -- use only the base language subtag for unsupported tag test; some args_t.code are modified by |script= etc return _lang_xx (args_t, cfg.templates_t.langx); end --[[--------------------------< L A N G X >-------------------------------------------------------------------- Entry point for {{langx}}. this function calls _lang_xx() to render non-English text. The {{lang-??}} templates have three positional paramters but {{langx}} has four: | 1 | 2 | 3 | 4 {{lang-xx |<text> |<xlit> |<xlat> }} {{langx |<tag> |<text> |<xlit> |<xlat> }} The calls to lang_xx_args_get() and _lang_xx() use 'langx' as a flag for those functions to select the proper positional parameters. {{lang-??}} depends on the calling template to select 'inherit' or 'italic' to establish the default rendering. {{langx}} can't do that. The initial version of {{langx}} relied on a list of language tags (inherit_t in ~/langx) scraped from those {{lang-??}} templates that call lang_xx_inherit() to render text in upright font. langx() now uses auto-italics code adapted from {{lang}} (doesn't support poem tags). ]] local function langx (frame) local args_t = lang_xx_args_get (frame, cfg.templates_t.langx); -- get the arguments; 'langx' is the <base_template> used to decide which positional param is 'text', 'translit', 'lit' return _langx (args_t); end --[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------ Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Module entry point from another module. ]] local function _is_ietf_tag (tag) -- entry point when this module is require()d into another local c, s, r, v, p, err; -- code, script, region, variant, private, error message c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else end --[[--------------------------< I S _ I E T F _ T A G >-------------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function is_ietf_tag (frame) return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the IETF language tag to be tested; also get parent frame end --[[--------------------------< I S _ I E T F _ T A G _ F R A M E >-------------------------------------------- Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent (template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag> is in the parent frame. ]] local function is_ietf_tag_frame (frame) return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the IETF language tag to be tested; do not get parent frame end --[[--------------------------< _ N A M E _ F R O M _ T A G >-------------------------------------------------- Returns language name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Set invoke's |link= parameter to yes to get wikilinked version of the language name. Module entry point from another module. ]] local function _name_from_tag (args) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args[1]; -- save a copy of the input IETF subtag local link = cfg.keywords_t.affirmative == args['link']; -- make a boolean local label = args.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local language_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template) return make_error_span (template, msg); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private language_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant if 'yes' ~= args.raw then language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them end if link then -- when |link=yes, wikilink the language name if mw.ustring.find (language_name, 'languages', 1, true) then language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink elseif lang_data.article_name[raw_code:lower()] then -- is IETF tag in article name override? language_name = make_wikilink (lang_data.article_name[raw_code:lower()], label or language_name); -- language name with wikilink from override data elseif lang_data.article_name[code] then -- is language tag in article name override? language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data else language_name = make_wikilink (substitute ('$1 $2', {language_name, cfg.misc_text_t.language}), label or language_name); -- language name with wikilink end end return language_name; end --[[--------------------------< N A M E _ F R O M _ T A G >---------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function name_from_tag (frame) -- entry point from an {{#invoke:lang|name_from_tag|<IETF tag>|link=<yes>|template=<template name>}} return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< _ T A G _ F R O M _ N A M E >-------------------------------------------------- Returns the IETF language tag associated with the language name. Spelling of language name must be correct according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator, that disambiguator must be omitted (they are not present in the data name-to-tag tables). Module entry point from another module. ]] local function _tag_from_name (args) -- entry point from another module local msg; if args[1] and '' ~= args[1] then local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct) local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard if tag then return tag, true; -- language name found so return tag and done; second return used by is_lang_name() else msg = substitute (cfg.tag_from_name_t.lang_not_found, {args[1]}); -- language name not found, error message end else msg = cfg.tag_from_name_t.missing_lang_name; -- language name not found, error message end local template = ''; if args.template and '' ~= args.template then template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template) end return make_error_span (template, msg); end --[[--------------------------< T A G _ F R O M _ N A M E >---------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function tag_from_name (frame) -- entry point from an {{#invoke:lang|tag_from_name|<language name>|link=<yes>|template=<template name>}} local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name() return result; end --[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------ Module entry point from an {{#invoke:}}. ]] local function is_lang_name (frame) local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name() return result and true or nil; end --[[--------------------------< _ X L I T >-------------------------------------------------------------------- Module entry point from another module. ]] local function _xlit (args) local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local language_name; -- language name that matches language code; used for tool tip local translit; -- transliterated text to display local script; -- IANA script local msg; -- for when called functions return an error message local template = args.template or cfg.templates_t.transliteration; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; if is_set (args[3]) then -- [3] set when {{transliteration|code|standard|text}} args.text = args[3]; -- get the transliterated text args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing if not title_table[args.translit_std] then return make_error_msg (substitute (cfg.transl_t.unrecog_xlit_std, {args.translit_std}), args, template); end else if is_set (args[2]) then -- [2] set when {{transliteration|code|text}} args.text = args[2]; -- get the transliterated text else if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text? args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag return make_error_msg (cfg.transl_t.no_text, args, template); -- args[1] is a code so we're missing text else args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); end end end if is_set (args[1]) then -- IANA language code used for HTML lang= attribute; or ISO 15924 script code if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form? args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case else return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args[1]}), args, template); -- invalid language / script code end else return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); -- missing language / script code so quit end local is_latn_text, pos, char; is_latn_text, args.text, pos, char= is_latin (args.text, args.code); -- is latn text? strip accept-as-written markup if not is_latn_text then -- when text is not latn return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); -- abandon with error message end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if 'italic' == args.italic then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default args.italic = nil; -- set to nil; end args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else if override_table[args.code] then -- is code a language code defined in the override table? language_name = override_table[args.code]; args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables? language_name = lang_table[args.code]; elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables? language_name = lang_dep_table[args.code]; elseif script_table[args.code] then -- if here, code is not a language code; is it a script code? language_name = script_table[args.code]; script = args.code; -- code was an ISO 15924 script so use that instead args.code = ''; -- unset because not a language code else return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args.code}), args, template); -- invalid language / script code end -- here only when all parameters passed to make_translit() are valid return make_translit (args.code, language_name, args.text, args.translit_std, script, args.italic, args.engvar); end --[[--------------------------< X L I T >---------------------------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function xlit (frame) return _xlit (getArgs(frame)); end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Returns category name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Module entry point from another module. ]] local function _category_from_tag (args_t) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args_t[1]; -- save a copy of the input IETF subtag local link = cfg.keywords_t.affirmative == args_t.link; -- make a boolean local label = args_t.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local category_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template) return make_error_span (template, msg); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private category_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', ''); if link then return table.concat ({'[[:', category_name, ']]'}); else return category_name; end end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function category_from_tag (frame) -- entry point from an {{#invoke:lang|category_from_tag|<IETF tag>|template=<template name>}} return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { category_from_tag = category_from_tag, -- frame entry points when this module is #invoke:ed into templates/wikitext lang = lang, -- entry point for {{lang}} langx = langx, -- entry point for {{langx}} lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}} lang_xx_italic = lang_xx_italic, is_ietf_tag = is_ietf_tag, is_ietf_tag_frame = is_ietf_tag_frame, is_lang_name = is_lang_name, tag_from_name = tag_from_name, -- returns IETF tag associated with language name name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates xlit = xlit, -- entry point for {{transliteration}} _category_from_tag = _category_from_tag, -- API entry points when this module is require()d into other modules _lang = _lang, _langx = _langx, _lang_xx_inherit = _lang_xx_inherit, _lang_xx_italic = _lang_xx_italic, _is_ietf_tag = _is_ietf_tag, get_ietf_parts = get_ietf_parts, _tag_from_name = _tag_from_name, _name_from_tag = _name_from_tag, _xlit = _xlit, _translation_make = translation_make, }; 4lchs3y6tbwcup48cwp3ayuhrxmusvw Wikipedia:Redirects for discussion/Log/2021 January 18 4 118537 746122 464136 2026-06-12T16:13:29Z Trialpears 43074 /* Akira (2009 film) */ Closed as disambiguate ([[WP:XFDC#4.0.16|XFDcloser]]) 746122 wikitext text/x-wiki <noinclude>{{rfd log header|2021|January 17|2021|January 19}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2021 January 18|January 18]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on January 18, 2021.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Akira (2009 film)==== <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:Three disambiguation arrows icon in rounded blue square.svg|16px|link=|alt=Disambiguate]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2021 January 18#1781280809|full discussion]]. Result was: </includeonly><noinclude><span id="1781280809"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''disambiguate'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:13, 12 June 2026 (UTC) <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:White check mark in dark green rounded square.svg|16px|link=|alt=Keep]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2021 January 18#1781280809|full discussion]]. Result was: </includeonly><noinclude><span id="1781280809"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''keep'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 03:31, 20 January 2021 (UTC) <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:White equals sign on grey rounded square.svg|16px|link=|alt=No consensus]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2021 January 18#1781280809|full discussion]]. Result was: </includeonly><noinclude><span id="1781280809"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''no consensus'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 03:25, 20 January 2021 (UTC) <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:White check mark in dark green rounded square.svg|16px|link=|alt=Keep]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2021 January 18#1781280809|full discussion]]. Result was: </includeonly><noinclude><span id="1781280809"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''keep'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 03:20, 20 January 2021 (UTC) <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:White equals sign on grey rounded square.svg|16px|link=|alt=No consensus]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2021 January 18#1781280809|full discussion]]. Result was: </includeonly><noinclude><span id="1781280809"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''no consensus'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 03:17, 20 January 2021 (UTC) <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:Right-pointing white arrow in blue rounded square.svg|16px|link=|alt=Retarget]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2021 January 18#1781280809|full discussion]]. Result was: </includeonly><noinclude><span id="1781280809"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''retarget'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top--> to [[Akira]]. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 03:17, 20 January 2021 (UTC) <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:Right-pointing white arrow in blue rounded square.svg|16px|link=|alt=Retarget]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2021 January 18#1781280809|full discussion]]. Result was: </includeonly><noinclude><span id="1781280809"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''retarget'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top--> to [[Akira#foo]]. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 02:35, 20 January 2021 (UTC) <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:Right-pointing white arrow in blue rounded square.svg|16px|link=|alt=Retarget]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2021 January 18#1781280809|full discussion]]. Result was: </includeonly><noinclude><span id="1781280809"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''retarget'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top--> to [[Akira]]. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 02:33, 20 January 2021 (UTC) <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:Right-pointing white arrow in blue rounded square.svg|16px|link=|alt=Retarget]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2021 January 18#1781280809|full discussion]]. Result was: </includeonly><noinclude><span id="1781280809"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''retarget'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top--> to [[Akira]]. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 02:28, 20 January 2021 (UTC) <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:Right-pointing white arrow in blue rounded square.svg|16px|link=|alt=Retarget]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2021 January 18#1781280809|full discussion]]. Result was: </includeonly><noinclude><span id="1781280809"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''retarget'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top--> to [[Akira (planned film)#Film rights and conception]]. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 02:21, 20 January 2021 (UTC) <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:Right-pointing white arrow in blue rounded square.svg|16px|link=|alt=Retarget]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2021 January 18#1781280809|full discussion]]. Result was: </includeonly><noinclude><span id="1781280809"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''retarget'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top--> to [[Akira (planned film)#Film rights and conception]]. [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 00:36, 18 January 2021 (UTC) *<span id="Akira (2009 film)">{{no redirect|1 = Akira (2009 film) }}</span> → [[:Akira#Live action film]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Akira (2009 film)|talk]] '''·''' [[Special:WhatLinksHere/Akira (2009 film)|links]] '''·''' [//test.wikipedia.org/w/index.php?title=Akira_(2009_film)&action=history history] '''·''' [https://iw.toolforge.org/pageviews?start=2020-12-19&end=2021-01-17&project=en.wikipedia.org&pages=Akira_%282009_film%29 stats])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''{{#ifeq:{{FULLPAGENAME}}|Wikipedia:Redirects for discussion|(@subpage)|[{{fullurl:Akira (2009 film)|action=edit&summary={{Urlencode:[[{{FULLPAGENAME}}#Akira (2009 film)]] closed as keep}}}} keep]/[{{fullurl:Akira (2009 film)|action=edit&summary={{Urlencode:[[{{FULLPAGENAME}}#Akira (2009 film)]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Akira (2009 film)|action=delete&wpReason={{Urlencode:[[{{FULLPAGENAME}}#Akira (2009 film)]] closed as delete}}&wpMovetalk=1}} delete]</span>}}''&nbsp;]</small>&nbsp; [[User:Evad37|Evad37]] ([[User talk:Evad37|talk]]) 00:31, 18 January 2021 (UTC) :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> p903hzocv3i2szsqze6ngbt027rkjzd Template:Plain text 10 119702 746285 471975 2022-08-01T20:08:40Z en>Neveselbert 0 Reverting edit(s) by [[Special:Contributions/Neveselbert|Neveselbert]] ([[User_talk:Neveselbert|talk]]) to rev. 995473403 by Scottywong: Reverting [[WP:AGF|good faith]] edits [[w:en:WP:RW|(RW 16.1)]] 471974 wikitext text/x-wiki <noinclude>{{pp-template|small=yes}}</noinclude>{{#invoke:Plain text|main|{{{1|}}}}}<noinclude> {{documentation}} </noinclude> j1sd7nr4syu1ekxrua7t2dn2unwklsn 746286 746285 2026-06-12T21:56:15Z Robertsky 51025 1 revision imported from [[:en:Template:Plain_text]] 471974 wikitext text/x-wiki <noinclude>{{pp-template|small=yes}}</noinclude>{{#invoke:Plain text|main|{{{1|}}}}}<noinclude> {{documentation}} </noinclude> j1sd7nr4syu1ekxrua7t2dn2unwklsn Module:Transclusion count/data/I 828 120582 746219 553984 2026-06-07T05:12:11Z en>Ahechtbot 0 [[Wikipedia:BOT|Bot]]: Updated page. 746219 Scribunto text/plain return { ["IAST"] = 6300, ["IA_SCOTUS_URL"] = 3300, ["IBDB_name"] = 9700, ["ICD10"] = 5000, ["ICD9"] = 4400, ["ICS"] = 3500, ["ICS_flag"] = 3500, ["IDN"] = 3800, ["IMDb_episode"] = 11000, ["IMDb_episodes"] = 4100, ["IMDb_name"] = 171000, ["IMDb_title"] = 209000, ["IMO_Number"] = 4400, ["IMSLP"] = 9100, ["INA"] = 2400, ["IND"] = 8500, ["INR"] = 6500, ["INRConvert"] = 6700, ["INRConvert/CurrentRate"] = 6600, ["INRConvert/USD"] = 6600, ["INRConvert/out"] = 6600, ["IOBDB_name"] = 2100, ["IP"] = 2800, ["IPA"] = 179000, ["IPA_audio_link"] = 5000, ["IPA_link"] = 5000, ["IPAblink"] = 2600, ["IPAc-cmn"] = 2800, ["IPAc-en"] = 55000, ["IPAc-pl"] = 51000, ["IPSummary"] = 82000, ["IP_summary"] = 83000, ["IPtalk"] = 18000, ["IPuser"] = 7600, ["IPvandal"] = 2800, ["IRC"] = 7100, ["IRI"] = 2600, ["IRL"] = 6000, ["IRN"] = 4000, ["ISBN"] = 474000, ["ISBN?"] = 2500, ["ISBNT"] = 46000, ["ISBN_missing"] = 3200, ["ISFDB_name"] = 4300, ["ISFDB_title"] = 5100, ["ISL"] = 2300, ["ISO_15924/script-example-character"] = 3000, ["ISO_15924/wp-article"] = 3100, ["ISO_15924/wp-article/format"] = 3100, ["ISO_15924/wp-article/label"] = 3000, ["ISO_3166_code"] = 240000, ["ISO_3166_name"] = 16000, ["ISO_639_name"] = 28000, ["ISP"] = 3700, ["ISR"] = 5400, ["ISSN"] = 12000, ["ISSN_link"] = 32000, ["ISTAT"] = 8100, ["ISU_figure_skater"] = 2300, ["ITA"] = 20000, ["ITF"] = 6800, ["ITF_profile"] = 9300, ["ITIS"] = 5800, ["ITN_talk"] = 13000, ["ITN_talk/date"] = 13000, ["IUCN_banner"] = 16000, ["I_sup"] = 4900, ["Ice_hockey_box"] = 2000, ["Ice_hockey_stats"] = 20000, ["Icehockeystats"] = 11000, ["Icelandic_name"] = 2100, ["Icon"] = 660000, ["If"] = 427000, ["If_all"] = 7600, ["If_autoconfirmed"] = 2300, ["If_between"] = 4700, ["If_both"] = 205000, ["If_dark"] = 3800, ["If_dark/styles.css"] = 3800, ["If_either"] = 41000, ["If_empty"] = 6690000, ["If_first_display_both"] = 119000, ["If_in_category"] = 178000, ["If_in_page"] = 21000, ["If_last_display_both"] = 37000, ["If_mobile"] = 2100, ["If_mobile/styles.css"] = 2100, ["If_preview"] = 65000, ["If_then_show"] = 436000, ["Ifempty"] = 927000, ["Ifeq"] = 83000, ["Iferror_then_show"] = 3900, ["Ifexist_not_redirect"] = 1860000, ["Ifnotempty"] = 18000, ["Ifnoteq_then_show"] = 2300, ["Ifnumber"] = 74000, ["Ifsubst"] = 1020000, ["Ih"] = 8100, ["Ill"] = 212000, ["Illm"] = 6000, ["Image_frame"] = 6500, ["Image_label"] = 4700, ["Image_label_begin"] = 4100, ["Image_label_end"] = 4100, ["Image_label_small"] = 2600, ["Image_needed"] = 4500, ["Image_other"] = 189000, ["Image_requested"] = 137000, ["Image_requested/Category_helper"] = 127000, ["Imbox"] = 992000, ["Imdb_name"] = 5400, ["Imdb_title"] = 2900, ["Importance"] = 15000, ["Importance/colour"] = 30000, ["Importance_mask"] = 616000, ["Improve_categories"] = 8000, ["Improve_documentation"] = 4000, ["Improve_plot"] = 4000, ["In_class"] = 5600, ["In_lang"] = 385000, ["In_progress"] = 3700, ["In_string"] = 303000, ["In_title"] = 29000, ["Inactive_userpage_blanked"] = 4300, ["Inaturalist_taxon"] = 3700, ["Include-USGov"] = 25000, ["Incomplete_list"] = 24000, ["Inconclusive"] = 2300, ["Increase"] = 60000, ["Incumbent_pope"] = 4700, ["Indent"] = 5400, ["Indented_plainlist"] = 2600, ["Independent_sources"] = 10000, ["IndexFungorum"] = 2100, ["Indian_English"] = 4900, ["Indian_railway_code"] = 3400, ["Indian_rupee"] = 12000, ["Inflation"] = 27000, ["Inflation-fn"] = 5800, ["Inflation-year"] = 4300, ["Inflation/IN/startyear"] = 6600, ["Inflation/UK"] = 5400, ["Inflation/UK/dataset"] = 5400, ["Inflation/UK/startyear"] = 5400, ["Inflation/US"] = 16000, ["Inflation/US-GDP"] = 3000, ["Inflation/US-GDP/dataset"] = 3000, ["Inflation/US-GDP/startyear"] = 3000, ["Inflation/US/dataset"] = 16000, ["Inflation/US/startyear"] = 16000, ["Inflation/fn"] = 7400, ["Inflation/year"] = 33000, ["Info"] = 5600, ["Infobox"] = 3410000, ["Infobox/Columns"] = 3200, ["Infobox/mobileviewfix.css"] = 173000, ["Infobox/styles-images.css"] = 20000, ["Infobox3cols"] = 25000, ["Infobox_AFL_biography"] = 15000, ["Infobox_Athletics_Championships"] = 3400, ["Infobox_Australian_place"] = 15000, ["Infobox_Australian_place/styles.css"] = 15000, ["Infobox_Australian_place/table"] = 11000, ["Infobox_COA_wide"] = 3700, ["Infobox_Canada_electoral_district"] = 2600, ["Infobox_Chinese"] = 23000, ["Infobox_Chinese/Chinese"] = 3200, ["Infobox_Chinese/Footer"] = 7200, ["Infobox_Chinese/Header"] = 7200, ["Infobox_Christian_leader"] = 22000, ["Infobox_French_commune"] = 38000, ["Infobox_French_subdivision"] = 2200, ["Infobox_Gaelic_games_biography"] = 5400, ["Infobox_Gaelic_games_player"] = 3300, ["Infobox_German_location"] = 11000, ["Infobox_German_place"] = 14000, ["Infobox_Grand_Prix_race_report"] = 2200, ["Infobox_Greece_place"] = 3600, ["Infobox_Greek_Dimos"] = 3000, ["Infobox_Hindu_temple"] = 2800, ["Infobox_Indian_constituency"] = 5800, ["Infobox_Indian_constituency/defaultdata"] = 5800, ["Infobox_Italian_comune"] = 8100, ["Infobox_Korean"] = 2300, ["Infobox_Korean/auto"] = 13000, ["Infobox_Korean/auto/categories"] = 13000, ["Infobox_Korean/base"] = 2300, ["Infobox_Korean/base/auto"] = 17000, ["Infobox_Korean/categories"] = 2300, ["Infobox_Korean_name"] = 2300, ["Infobox_Korean_name/auto"] = 13000, ["Infobox_Korean_television_name"] = 3300, ["Infobox_NASCAR_driver"] = 2300, ["Infobox_NASCAR_race_report"] = 2700, ["Infobox_NCAA_basketball_conference_tournament"] = 2100, ["Infobox_NCAA_team_season"] = 10000, ["Infobox_NFL_biography"] = 27000, ["Infobox_NFL_team_season"] = 2300, ["Infobox_NRHP"] = 74000, ["Infobox_NRHP/conv"] = 19000, ["Infobox_NRHP/locmapin2region"] = 67000, ["Infobox_Olympic_event"] = 7900, ["Infobox_Olympic_event/event_link"] = 7900, ["Infobox_Olympic_event/games_text"] = 7900, ["Infobox_Pan_American_Games_event"] = 2900, ["Infobox_Paralympic_event"] = 2900, ["Infobox_Paralympic_event/games_text"] = 2900, ["Infobox_Romanian_subdivision"] = 3200, ["Infobox_Russian_district"] = 2100, ["Infobox_Russian_inhabited_locality"] = 4700, ["Infobox_Russian_inhabited_locality/PosMapFS"] = 4200, ["Infobox_Russian_inhabited_locality/federal_subject"] = 4600, ["Infobox_SCOTUS_case"] = 4600, ["Infobox_SSSI"] = 2000, ["Infobox_Site_of_Special_Scientific_Interest"] = 2100, ["Infobox_Slovak_place"] = 3000, ["Infobox_Swiss_town"] = 2900, ["Infobox_Switzerland_municipality"] = 2900, ["Infobox_Turkey_place"] = 20000, ["Infobox_U.S._county"] = 3000, ["Infobox_U.S._county/district"] = 3000, ["Infobox_U.S._legislation"] = 2000, ["Infobox_UK_constituency"] = 2200, ["Infobox_UK_constituency/year"] = 2200, ["Infobox_UK_legislation"] = 6100, ["Infobox_UK_place"] = 27000, ["Infobox_UK_place/NoDialCode"] = 8200, ["Infobox_UK_place/NoPostCode"] = 3600, ["Infobox_UK_place/area"] = 2700, ["Infobox_UK_place/dens"] = 2300, ["Infobox_UK_place/dist"] = 2800, ["Infobox_UK_place/local"] = 27000, ["Infobox_UK_place/styles.css"] = 27000, ["Infobox_UNESCO_World_Heritage_Site"] = 2100, ["Infobox_UN_resolution"] = 2300, ["Infobox_US_Supreme_Court_case"] = 4800, ["Infobox_US_Supreme_Court_case/courts"] = 4800, ["Infobox_United_States_legislative_district"] = 2600, ["Infobox_United_States_legislative_district/representative"] = 2600, ["Infobox_Wikipedia_user"] = 12000, ["Infobox_academic"] = 26000, ["Infobox_aircraft"] = 13000, ["Infobox_aircraft/styles.css"] = 14000, ["Infobox_aircraft_occurrence"] = 2900, ["Infobox_airline"] = 4800, ["Infobox_airline/styles.css"] = 4800, ["Infobox_airport"] = 14000, ["Infobox_airport/datatable"] = 13000, ["Infobox_airport/styles.css"] = 14000, ["Infobox_album"] = 168000, ["Infobox_album/color"] = 207000, ["Infobox_album/link"] = 168000, ["Infobox_anatomy"] = 4500, ["Infobox_ancient_site"] = 3900, ["Infobox_animanga/Footer"] = 7800, ["Infobox_animanga/Header"] = 7800, ["Infobox_animanga/Print"] = 6600, ["Infobox_animanga/Video"] = 5100, ["Infobox_architect"] = 4400, ["Infobox_artist"] = 34000, ["Infobox_artist_discography"] = 6500, ["Infobox_artwork"] = 15000, ["Infobox_automobile"] = 9200, ["Infobox_award"] = 16000, ["Infobox_badminton_player"] = 3300, ["Infobox_baseball_biography"] = 30000, ["Infobox_baseball_biography/style"] = 30000, ["Infobox_baseball_biography/styles.css"] = 30000, ["Infobox_baseball_team_season"] = 3300, ["Infobox_baseball_team_season/leagueseason"] = 3300, ["Infobox_baseball_team_season/season"] = 3300, ["Infobox_baseball_team_season/styles.css"] = 3300, ["Infobox_basketball_biography"] = 23000, ["Infobox_basketball_biography/style"] = 23000, ["Infobox_basketball_club"] = 3300, ["Infobox_basketball_club/styles.css"] = 3300, ["Infobox_beauty_pageant"] = 2200, ["Infobox_bilateral_relations"] = 5000, ["Infobox_bishop_styles"] = 2400, ["Infobox_body_of_water"] = 19000, ["Infobox_book"] = 62000, ["Infobox_book/styles.css"] = 62000, ["Infobox_boxer"] = 6500, ["Infobox_brand"] = 2200, ["Infobox_brand/styles.css"] = 2200, ["Infobox_bridge"] = 6700, ["Infobox_building"] = 34000, ["Infobox_bus_company"] = 2000, ["Infobox_cemetery"] = 2100, ["Infobox_character"] = 8300, ["Infobox_character/styles.css"] = 8400, ["Infobox_chess_biography"] = 4700, ["Infobox_chess_player"] = 3800, ["Infobox_church"] = 17000, ["Infobox_church/denomination"] = 17000, ["Infobox_church/font_color"] = 17000, ["Infobox_civil_conflict"] = 3100, ["Infobox_civilian_attack"] = 7500, ["Infobox_college_coach"] = 13000, ["Infobox_college_football_game"] = 2300, ["Infobox_college_football_player"] = 2600, ["Infobox_college_sports_team_season"] = 45000, ["Infobox_college_sports_team_season/link"] = 45000, ["Infobox_college_sports_team_season/name"] = 45000, ["Infobox_college_sports_team_season/succession"] = 45000, ["Infobox_college_sports_team_season/team"] = 45000, ["Infobox_comedian"] = 2200, ["Infobox_comic_book_title"] = 3200, ["Infobox_comics_character"] = 3500, ["Infobox_comics_creator"] = 3600, ["Infobox_comics_creator/styles.css"] = 3600, ["Infobox_company"] = 92000, ["Infobox_company/styles.css"] = 92000, ["Infobox_computing_device"] = 2600, ["Infobox_concert"] = 3900, ["Infobox_constituency"] = 7700, ["Infobox_country"] = 7100, ["Infobox_country/formernext"] = 6600, ["Infobox_country/imagetable"] = 5600, ["Infobox_country/multirow"] = 9200, ["Infobox_country/status_text"] = 3100, ["Infobox_country/styles.css"] = 7200, ["Infobox_country_at_games"] = 17000, ["Infobox_country_at_games/core"] = 17000, ["Infobox_country_at_games/see_also"] = 14000, ["Infobox_court_case"] = 5300, ["Infobox_court_case/images"] = 2900, ["Infobox_court_case/styles.css"] = 5300, ["Infobox_cricket_tournament"] = 2800, ["Infobox_cricketer"] = 32000, ["Infobox_cricketer/career"] = 32000, ["Infobox_cricketer/national_side"] = 7700, ["Infobox_criminal"] = 7700, ["Infobox_curler"] = 2800, ["Infobox_cycling_race_report"] = 5000, ["Infobox_cyclist"] = 17000, ["Infobox_dam"] = 5900, ["Infobox_deity"] = 2200, ["Infobox_deity/color"] = 2200, ["Infobox_designation_list"] = 28000, ["Infobox_designation_list/entry"] = 22000, ["Infobox_dim"] = 6400, ["Infobox_diocese"] = 4100, ["Infobox_drug"] = 12000, ["Infobox_drug/chemical_formula"] = 12000, ["Infobox_drug/data_page_link"] = 12000, ["Infobox_drug/formatATC"] = 11000, ["Infobox_drug/formatCASnumber"] = 12000, ["Infobox_drug/formatChEBI"] = 12000, ["Infobox_drug/formatChEMBL"] = 12000, ["Infobox_drug/formatChemDBNIAID"] = 12000, ["Infobox_drug/formatChemSpider"] = 12000, ["Infobox_drug/formatCompTox"] = 12000, ["Infobox_drug/formatDrugBank"] = 12000, ["Infobox_drug/formatIUPHARBPS"] = 12000, ["Infobox_drug/formatJmol"] = 12000, ["Infobox_drug/formatKEGG"] = 12000, ["Infobox_drug/formatPDBligand"] = 11000, ["Infobox_drug/formatPubChemCID"] = 12000, ["Infobox_drug/formatPubChemSID"] = 12000, ["Infobox_drug/formatUNII"] = 12000, ["Infobox_drug/legal_status"] = 12000, ["Infobox_drug/licence"] = 12000, ["Infobox_drug/maintenance_categories"] = 12000, ["Infobox_drug/non-ref-space"] = 3900, ["Infobox_drug/pregnancy_category"] = 12000, ["Infobox_drug/styles.css"] = 12000, ["Infobox_drug/title"] = 12000, ["Infobox_economist"] = 2000, ["Infobox_election"] = 40000, ["Infobox_election/shortname"] = 2500, ["Infobox_election/styles.css"] = 40000, ["Infobox_enzyme"] = 5100, ["Infobox_ethnic_group"] = 8100, ["Infobox_event"] = 7700, ["Infobox_family"] = 2700, ["Infobox_field_hockey_player"] = 2500, ["Infobox_figure_skater"] = 4000, ["Infobox_film"] = 169000, ["Infobox_film/short_description"] = 165000, ["Infobox_film_awards"] = 3100, ["Infobox_film_awards/link"] = 3100, ["Infobox_film_awards/style"] = 3100, ["Infobox_film_or_theatre_festival"] = 2100, ["Infobox_food"] = 7700, ["Infobox_football_biography"] = 218000, ["Infobox_football_club"] = 29000, ["Infobox_football_club_season"] = 24000, ["Infobox_football_league"] = 2800, ["Infobox_football_league_season"] = 22000, ["Infobox_football_match"] = 6700, ["Infobox_football_tournament"] = 2200, ["Infobox_football_tournament_season"] = 9300, ["Infobox_former_subdivision"] = 3700, ["Infobox_former_subdivision/styles.css"] = 3700, ["Infobox_galaxy"] = 3400, ["Infobox_game"] = 3100, ["Infobox_game_score"] = 3800, ["Infobox_games"] = 2100, ["Infobox_gene"] = 13000, ["Infobox_given_name"] = 4200, ["Infobox_golfer"] = 4800, ["Infobox_golfer/highest_ranking"] = 4800, ["Infobox_government_agency"] = 13000, ["Infobox_government_cabinet"] = 3500, ["Infobox_gridiron_football_biography"] = 40000, ["Infobox_gridiron_football_biography/position"] = 39000, ["Infobox_gridiron_football_team_season"] = 4100, ["Infobox_gymnast"] = 5900, ["Infobox_handball_biography"] = 5500, ["Infobox_historic_site"] = 17000, ["Infobox_holiday"] = 2200, ["Infobox_holiday/date"] = 2200, ["Infobox_horseraces"] = 2700, ["Infobox_hospital"] = 7000, ["Infobox_hospital/care_system"] = 7000, ["Infobox_hospital/lists"] = 7000, ["Infobox_hurling_championship"] = 2600, ["Infobox_ice_hockey_biography"] = 21000, ["Infobox_ice_hockey_player"] = 18000, ["Infobox_ice_hockey_team"] = 3300, ["Infobox_ice_hockey_team_season"] = 2100, ["Infobox_international_football_competition"] = 6700, ["Infobox_islands"] = 9600, ["Infobox_islands/area"] = 10000, ["Infobox_islands/density"] = 10000, ["Infobox_islands/length"] = 9600, ["Infobox_islands/styles.css"] = 9600, ["Infobox_journal"] = 10000, ["Infobox_journal/Abbreviation_search"] = 10000, ["Infobox_journal/Bluebook_check"] = 9900, ["Infobox_journal/Former_check"] = 9900, ["Infobox_journal/ISO_4_check"] = 9900, ["Infobox_journal/ISSN-eISSN"] = 9900, ["Infobox_journal/Indexing_search"] = 10000, ["Infobox_journal/MathSciNet_check"] = 9900, ["Infobox_journal/NLM_check"] = 9900, ["Infobox_journal/frequency"] = 9000, ["Infobox_journal/openaccess"] = 2700, ["Infobox_judoka"] = 2800, ["Infobox_lake"] = 3900, ["Infobox_language"] = 10000, ["Infobox_language/family-color"] = 12000, ["Infobox_language/genetic"] = 7000, ["Infobox_language/lingualist"] = 10000, ["Infobox_language/linguistlist"] = 10000, ["Infobox_language/ref"] = 7400, ["Infobox_law_enforcement_agency"] = 2200, ["Infobox_legislation"] = 2800, ["Infobox_legislative_district"] = 2300, ["Infobox_legislative_election"] = 2600, ["Infobox_legislative_election/row"] = 2500, ["Infobox_legislative_election/styles.css"] = 2600, ["Infobox_legislative_term"] = 2100, ["Infobox_legislature"] = 4400, ["Infobox_library"] = 2500, ["Infobox_lighthouse"] = 2600, ["Infobox_lighthouse/light"] = 2600, ["Infobox_locomotive"] = 5000, ["Infobox_magazine"] = 8200, ["Infobox_manner_of_address"] = 4200, ["Infobox_martial_artist"] = 6300, ["Infobox_martial_artist/record"] = 6300, ["Infobox_medal_templates"] = 475000, ["Infobox_medical_condition"] = 9900, ["Infobox_medical_condition_(new)"] = 6700, ["Infobox_medical_details"] = 2500, ["Infobox_medical_person"] = 2400, ["Infobox_militant_organization"] = 2200, ["Infobox_military_conflict"] = 28000, ["Infobox_military_installation"] = 11000, ["Infobox_military_person"] = 53000, ["Infobox_military_unit"] = 29000, ["Infobox_mine"] = 2300, ["Infobox_mineral"] = 2000, ["Infobox_mobile_phone"] = 2400, ["Infobox_mobile_phone/size"] = 2100, ["Infobox_mobile_phone/weight"] = 2100, ["Infobox_model"] = 2400, ["Infobox_monument"] = 2800, ["Infobox_mountain"] = 30000, ["Infobox_multi-sport_competition_event"] = 2700, ["Infobox_museum"] = 12000, ["Infobox_musical_artist"] = 131000, ["Infobox_musical_artist/hCard_class"] = 122000, ["Infobox_musical_composition"] = 3600, ["Infobox_name"] = 8800, ["Infobox_name_module"] = 9100, ["Infobox_newspaper"] = 11000, ["Infobox_newspaper/styles.css"] = 11000, ["Infobox_noble"] = 7800, ["Infobox_officeholder"] = 276000, ["Infobox_officeholder/office"] = 283000, ["Infobox_official_post"] = 9700, ["Infobox_organization"] = 42000, ["Infobox_pageant_titleholder"] = 3000, ["Infobox_park"] = 9800, ["Infobox_person"] = 568000, ["Infobox_person/Wikidata"] = 5000, ["Infobox_person/height"] = 114000, ["Infobox_person/length"] = 7600, ["Infobox_person/weight"] = 73000, ["Infobox_philosopher"] = 3700, ["Infobox_planet"] = 4800, ["Infobox_play"] = 4600, ["Infobox_political_party"] = 16000, ["Infobox_power_station"] = 3300, ["Infobox_prepared_food"] = 2500, ["Infobox_professional_wrestler"] = 4800, ["Infobox_professional_wrestling_event"] = 3300, ["Infobox_protected_area"] = 16000, ["Infobox_protein_family"] = 2200, ["Infobox_publisher"] = 2600, ["Infobox_racehorse"] = 5900, ["Infobox_racing_driver"] = 5700, ["Infobox_racing_driver_series_section"] = 2900, ["Infobox_radio_station"] = 22000, ["Infobox_radio_station/styles.css"] = 22000, ["Infobox_rail"] = 3200, ["Infobox_rail_line"] = 8000, ["Infobox_rail_service"] = 3300, ["Infobox_reality_competition_season"] = 4300, ["Infobox_record_label"] = 4200, ["Infobox_recurring_event"] = 7900, ["Infobox_religious_biography"] = 7200, ["Infobox_religious_building"] = 15000, ["Infobox_religious_building/color"] = 21000, ["Infobox_restaurant"] = 4600, ["Infobox_river"] = 32000, ["Infobox_river/calcunit"] = 32000, ["Infobox_river/discharge"] = 32000, ["Infobox_river/row-style"] = 32000, ["Infobox_river/source"] = 32000, ["Infobox_road"] = 25000, ["Infobox_road/meta/mask/category"] = 24000, ["Infobox_road/meta/mask/country"] = 25000, ["Infobox_road/styles.css"] = 26000, ["Infobox_road_small"] = 2500, ["Infobox_rockunit"] = 6500, ["Infobox_royalty"] = 25000, ["Infobox_royalty/short_description"] = 8900, ["Infobox_rugby_biography"] = 19000, ["Infobox_rugby_biography/correct_date"] = 19000, ["Infobox_rugby_biography/depcheck"] = 19000, ["Infobox_rugby_league_biography"] = 11000, ["Infobox_rugby_league_biography/PLAYER"] = 11000, ["Infobox_rugby_team"] = 2700, ["Infobox_sailboat_specifications"] = 2300, ["Infobox_saint"] = 5500, ["Infobox_school"] = 40000, ["Infobox_school/short_description"] = 40000, ["Infobox_school/styles.css"] = 40000, ["Infobox_school_district"] = 6400, ["Infobox_school_district/styles.css"] = 6400, ["Infobox_scientist"] = 56000, ["Infobox_settlement"] = 597000, ["Infobox_settlement/areadisp"] = 259000, ["Infobox_settlement/columns"] = 107000, ["Infobox_settlement/columns/styles.css"] = 107000, ["Infobox_settlement/densdisp"] = 457000, ["Infobox_settlement/lengthdisp"] = 182000, ["Infobox_settlement/link"] = 107000, ["Infobox_settlement/styles.css"] = 597000, ["Infobox_ship"] = 43000, ["Infobox_ship/career"] = 39000, ["Infobox_ship/characteristics"] = 42000, ["Infobox_ship/class_overview"] = 4400, ["Infobox_ship/image"] = 42000, ["Infobox_ship/service_record"] = 2500, ["Infobox_shopping_mall"] = 3800, ["Infobox_short_story"] = 2700, ["Infobox_skier"] = 2700, ["Infobox_soap_character"] = 3100, ["Infobox_social_media_personality"] = 4300, ["Infobox_software"] = 14000, ["Infobox_software/simple"] = 15000, ["Infobox_song"] = 83000, ["Infobox_song/color"] = 83000, ["Infobox_song/link"] = 83000, ["Infobox_song_contest_national_year/Year"] = 2100, ["Infobox_spaceflight"] = 4000, ["Infobox_spaceflight/styles.css"] = 4000, ["Infobox_speed_skater"] = 2000, ["Infobox_sport_event"] = 2800, ["Infobox_sports_competition_event"] = 23000, ["Infobox_sports_competition_event/medalrow"] = 15000, ["Infobox_sports_league"] = 5600, ["Infobox_sports_season"] = 6900, ["Infobox_sports_team"] = 2300, ["Infobox_sportsperson"] = 157000, ["Infobox_stadium"] = 2600, ["Infobox_station"] = 57000, ["Infobox_station/services"] = 57000, ["Infobox_station/styles.css"] = 57000, ["Infobox_street"] = 4400, ["Infobox_swimmer"] = 11000, ["Infobox_television"] = 63000, ["Infobox_television/Short_description"] = 61000, ["Infobox_television/styles.css"] = 63000, ["Infobox_television_channel"] = 6700, ["Infobox_television_channel/styles.css"] = 6700, ["Infobox_television_episode"] = 13000, ["Infobox_television_episode/styles.css"] = 14000, ["Infobox_television_season"] = 11000, ["Infobox_television_station"] = 3200, ["Infobox_television_station/styles.css"] = 3300, ["Infobox_tennis_biography"] = 11000, ["Infobox_tennis_event"] = 3300, ["Infobox_tennis_tournament"] = 2000, ["Infobox_tennis_tournament/heading"] = 2000, ["Infobox_tennis_tournament/style"] = 2000, ["Infobox_tennis_tournament_event"] = 22000, ["Infobox_tennis_tournament_year"] = 11000, ["Infobox_tennis_tournament_year/color"] = 33000, ["Infobox_tennis_tournament_year/footer"] = 33000, ["Infobox_tournament_season"] = 13000, ["Infobox_train"] = 2500, ["Infobox_university"] = 26000, ["Infobox_user"] = 3000, ["Infobox_venue"] = 20000, ["Infobox_video_game"] = 30000, ["Infobox_video_game/styles.css"] = 30000, ["Infobox_volleyball_biography"] = 5800, ["Infobox_weapon"] = 8100, ["Infobox_weather_event"] = 3400, ["Infobox_weather_event/Effects"] = 3200, ["Infobox_weather_event/Footer"] = 3300, ["Infobox_weather_event/History"] = 3200, ["Infobox_weather_event/SSHWS"] = 2000, ["Infobox_weather_event/meteorology"] = 3200, ["Infobox_weather_event/scale"] = 2100, ["Infobox_weather_event/styles.css"] = 3400, ["Infobox_website"] = 8300, ["Infobox_writer"] = 45000, ["Information"] = 98000, ["Information/styles.css"] = 98000, ["Inlang"] = 2400, ["Inline"] = 3700, ["Inline_block"] = 5400, ["Inprogress"] = 2600, ["Input_link"] = 32000, ["Instagram"] = 19000, ["InterSportStats"] = 4600, ["Interlanguage_link"] = 258000, ["Interlanguage_link_multi"] = 9800, ["International_Paralympic_Committee"] = 4200, ["Internet_Archive"] = 2100, ["Internet_Archive_SCOTUS_URL"] = 3300, ["Internet_Archive_author"] = 19000, ["Internet_Archive_film"] = 2800, ["Intitle"] = 21000, ["Ip"] = 2100, ["Iptalk"] = 18000, ["IranCensus2006"] = 33000, ["IranNCSGN"] = 3200, ["Iran_Census_2006"] = 33000, ["Irish_place_name"] = 3000, ["IsIPAddress"] = 45000, ["IsValidPageName"] = 3400, ["Is_MLB_league"] = 3300, ["Is_NPB_league"] = 3300, ["Is_continent"] = 7400, ["Is_country_in_Central_America"] = 17000, ["Is_country_in_the_Caribbean"] = 17000, ["Is_interwiki_link"] = 6700, ["Is_italic_taxon"] = 648000, ["Is_redirect"] = 379000, ["Is_time"] = 6600, ["Is_valid_page_name"] = 3400, ["Isbn"] = 10000, ["Isnum"] = 3000, ["Isnumeric"] = 118000, ["Iso2continent"] = 83000, ["Iso2country"] = 25000, ["Iso2country/article"] = 25000, ["Iso2country/data"] = 25000, ["Issubst"] = 64000, ["Italic_dab2"] = 5800, ["Italic_disambiguation"] = 2300, ["Italic_title"] = 258000, ["Italic_title_prefixed"] = 8800, ["Italictitle"] = 3000, ["Ivmbox"] = 142000, ["Ivory_messagebox"] = 185000, ["Ivory_messagebox/styles.css"] = 185000, ["Module:I18n/complex_date"] = 47000, ["Module:IP"] = 147000, ["Module:IPA"] = 182000, ["Module:IPA/data"] = 165000, ["Module:IPA/styles.css"] = 150000, ["Module:IPA_symbol"] = 6800, ["Module:IPA_symbol/data"] = 6800, ["Module:IPAc-en"] = 55000, ["Module:IPAc-en/data"] = 55000, ["Module:IPAc-en/phonemes"] = 55000, ["Module:IPAc-en/pronunciation"] = 55000, ["Module:IPAddress"] = 213000, ["Module:ISO_3166"] = 908000, ["Module:ISO_3166/data/AT"] = 2500, ["Module:ISO_3166/data/BA"] = 3400, ["Module:ISO_3166/data/CA"] = 2700, ["Module:ISO_3166/data/CH"] = 4200, ["Module:ISO_3166/data/CN"] = 2700, ["Module:ISO_3166/data/DE"] = 15000, ["Module:ISO_3166/data/ES"] = 3700, ["Module:ISO_3166/data/FR"] = 38000, ["Module:ISO_3166/data/GB"] = 7000, ["Module:ISO_3166/data/GR"] = 3400, ["Module:ISO_3166/data/IN"] = 29000, ["Module:ISO_3166/data/IR"] = 21000, ["Module:ISO_3166/data/IT"] = 2500, ["Module:ISO_3166/data/National"] = 908000, ["Module:ISO_3166/data/PL"] = 7600, ["Module:ISO_3166/data/RS"] = 3200, ["Module:ISO_3166/data/RU"] = 27000, ["Module:ISO_3166/data/UA"] = 2200, ["Module:ISO_3166/data/US"] = 87000, ["Module:ISO_639_name"] = 34000, ["Module:ISO_639_name/ISO_639-1"] = 29000, ["Module:ISO_639_name/ISO_639-2"] = 21000, ["Module:ISO_639_name/ISO_639-2B"] = 20000, ["Module:ISO_639_name/ISO_639-3"] = 20000, ["Module:ISO_639_name/ISO_639-3_(dep)"] = 34000, ["Module:ISO_639_name/ISO_639-5"] = 19000, ["Module:ISO_639_name/ISO_639_deprecated"] = 34000, ["Module:ISO_639_name/ISO_639_name_to_code"] = 4500, ["Module:ISO_639_name/ISO_639_override"] = 34000, ["Module:ISOdate"] = 47000, ["Module:Ice_hockey_box"] = 2000, ["Module:Icon"] = 672000, ["Module:Icon/data"] = 672000, ["Module:Icon_box"] = 259000, ["Module:Icon_box/data"] = 259000, ["Module:If_any_equal"] = 250000, ["Module:If_empty"] = 6690000, ["Module:If_in_category"] = 178000, ["Module:If_in_page"] = 21000, ["Module:If_not_given_or_empty"] = 78000, ["Module:If_preview"] = 979000, ["Module:If_preview/configuration"] = 979000, ["Module:If_preview/styles.css"] = 979000, ["Module:In_lang"] = 385000, ["Module:Indent"] = 5400, ["Module:Infobox"] = 4660000, ["Module:Infobox/dates"] = 77000, ["Module:Infobox/styles.css"] = 4920000, ["Module:Infobox/utilities"] = 2600, ["Module:Infobox3cols"] = 319000, ["Module:InfoboxBuilder"] = 2700, ["Module:InfoboxImage"] = 5590000, ["Module:InfoboxImage/data"] = 3330000, ["Module:Infobox_body_of_water_tracking"] = 19000, ["Module:Infobox_cyclist_tracking"] = 16000, ["Module:Infobox_dim"] = 375000, ["Module:Infobox_dim/data"] = 230000, ["Module:Infobox_election"] = 42000, ["Module:Infobox_gene"] = 13000, ["Module:Infobox_mapframe"] = 1690000, ["Module:Infobox_military_conflict"] = 28000, ["Module:Infobox_military_conflict/styles.css"] = 28000, ["Module:Infobox_multi-lingual_name"] = 23000, ["Module:Infobox_multi-lingual_name/data"] = 23000, ["Module:Infobox_power_station"] = 3300, ["Module:Infobox_road"] = 26000, ["Module:Infobox_road/browselinks"] = 26000, ["Module:Infobox_road/errors"] = 25000, ["Module:Infobox_road/length"] = 26000, ["Module:Infobox_road/locations"] = 25000, ["Module:Infobox_road/map"] = 25000, ["Module:Infobox_road/route"] = 26000, ["Module:Infobox_road/sections"] = 25000, ["Module:Infobox_ship"] = 43000, ["Module:Infobox_ship/data"] = 43000, ["Module:Infobox_ship/styles.css"] = 43000, ["Module:Infobox_television"] = 63000, ["Module:Infobox_television_disambiguation_check"] = 71000, ["Module:Infobox_television_episode"] = 13000, ["Module:Infobox_television_season_disambiguation_check"] = 10000, ["Module:Infobox_television_season_name"] = 11000, ["Module:Internet_Archive"] = 22000, ["Module:Is_article"] = 2400, ["Module:Is_infobox_in_lead"] = 461000, ["Module:Is_instance"] = 358000, ["Module:Iso2nationality"] = 96000, ["Module:Italic_title"] = 1250000, ["Module:Italic_title2"] = 5800, } 3xwlvfr2gvr8omb1ptys55wifvhrzfa 746220 746219 2026-06-12T21:52:02Z Robertsky 51025 1 revision imported from [[:en:Module:Transclusion_count/data/I]]: for workshop activity 746219 Scribunto text/plain return { ["IAST"] = 6300, ["IA_SCOTUS_URL"] = 3300, ["IBDB_name"] = 9700, ["ICD10"] = 5000, ["ICD9"] = 4400, ["ICS"] = 3500, ["ICS_flag"] = 3500, ["IDN"] = 3800, ["IMDb_episode"] = 11000, ["IMDb_episodes"] = 4100, ["IMDb_name"] = 171000, ["IMDb_title"] = 209000, ["IMO_Number"] = 4400, ["IMSLP"] = 9100, ["INA"] = 2400, ["IND"] = 8500, ["INR"] = 6500, ["INRConvert"] = 6700, ["INRConvert/CurrentRate"] = 6600, ["INRConvert/USD"] = 6600, ["INRConvert/out"] = 6600, ["IOBDB_name"] = 2100, ["IP"] = 2800, ["IPA"] = 179000, ["IPA_audio_link"] = 5000, ["IPA_link"] = 5000, ["IPAblink"] = 2600, ["IPAc-cmn"] = 2800, ["IPAc-en"] = 55000, ["IPAc-pl"] = 51000, ["IPSummary"] = 82000, ["IP_summary"] = 83000, ["IPtalk"] = 18000, ["IPuser"] = 7600, ["IPvandal"] = 2800, ["IRC"] = 7100, ["IRI"] = 2600, ["IRL"] = 6000, ["IRN"] = 4000, ["ISBN"] = 474000, ["ISBN?"] = 2500, ["ISBNT"] = 46000, ["ISBN_missing"] = 3200, ["ISFDB_name"] = 4300, ["ISFDB_title"] = 5100, ["ISL"] = 2300, ["ISO_15924/script-example-character"] = 3000, ["ISO_15924/wp-article"] = 3100, ["ISO_15924/wp-article/format"] = 3100, ["ISO_15924/wp-article/label"] = 3000, ["ISO_3166_code"] = 240000, ["ISO_3166_name"] = 16000, ["ISO_639_name"] = 28000, ["ISP"] = 3700, ["ISR"] = 5400, ["ISSN"] = 12000, ["ISSN_link"] = 32000, ["ISTAT"] = 8100, ["ISU_figure_skater"] = 2300, ["ITA"] = 20000, ["ITF"] = 6800, ["ITF_profile"] = 9300, ["ITIS"] = 5800, ["ITN_talk"] = 13000, ["ITN_talk/date"] = 13000, ["IUCN_banner"] = 16000, ["I_sup"] = 4900, ["Ice_hockey_box"] = 2000, ["Ice_hockey_stats"] = 20000, ["Icehockeystats"] = 11000, ["Icelandic_name"] = 2100, ["Icon"] = 660000, ["If"] = 427000, ["If_all"] = 7600, ["If_autoconfirmed"] = 2300, ["If_between"] = 4700, ["If_both"] = 205000, ["If_dark"] = 3800, ["If_dark/styles.css"] = 3800, ["If_either"] = 41000, ["If_empty"] = 6690000, ["If_first_display_both"] = 119000, ["If_in_category"] = 178000, ["If_in_page"] = 21000, ["If_last_display_both"] = 37000, ["If_mobile"] = 2100, ["If_mobile/styles.css"] = 2100, ["If_preview"] = 65000, ["If_then_show"] = 436000, ["Ifempty"] = 927000, ["Ifeq"] = 83000, ["Iferror_then_show"] = 3900, ["Ifexist_not_redirect"] = 1860000, ["Ifnotempty"] = 18000, ["Ifnoteq_then_show"] = 2300, ["Ifnumber"] = 74000, ["Ifsubst"] = 1020000, ["Ih"] = 8100, ["Ill"] = 212000, ["Illm"] = 6000, ["Image_frame"] = 6500, ["Image_label"] = 4700, ["Image_label_begin"] = 4100, ["Image_label_end"] = 4100, ["Image_label_small"] = 2600, ["Image_needed"] = 4500, ["Image_other"] = 189000, ["Image_requested"] = 137000, ["Image_requested/Category_helper"] = 127000, ["Imbox"] = 992000, ["Imdb_name"] = 5400, ["Imdb_title"] = 2900, ["Importance"] = 15000, ["Importance/colour"] = 30000, ["Importance_mask"] = 616000, ["Improve_categories"] = 8000, ["Improve_documentation"] = 4000, ["Improve_plot"] = 4000, ["In_class"] = 5600, ["In_lang"] = 385000, ["In_progress"] = 3700, ["In_string"] = 303000, ["In_title"] = 29000, ["Inactive_userpage_blanked"] = 4300, ["Inaturalist_taxon"] = 3700, ["Include-USGov"] = 25000, ["Incomplete_list"] = 24000, ["Inconclusive"] = 2300, ["Increase"] = 60000, ["Incumbent_pope"] = 4700, ["Indent"] = 5400, ["Indented_plainlist"] = 2600, ["Independent_sources"] = 10000, ["IndexFungorum"] = 2100, ["Indian_English"] = 4900, ["Indian_railway_code"] = 3400, ["Indian_rupee"] = 12000, ["Inflation"] = 27000, ["Inflation-fn"] = 5800, ["Inflation-year"] = 4300, ["Inflation/IN/startyear"] = 6600, ["Inflation/UK"] = 5400, ["Inflation/UK/dataset"] = 5400, ["Inflation/UK/startyear"] = 5400, ["Inflation/US"] = 16000, ["Inflation/US-GDP"] = 3000, ["Inflation/US-GDP/dataset"] = 3000, ["Inflation/US-GDP/startyear"] = 3000, ["Inflation/US/dataset"] = 16000, ["Inflation/US/startyear"] = 16000, ["Inflation/fn"] = 7400, ["Inflation/year"] = 33000, ["Info"] = 5600, ["Infobox"] = 3410000, ["Infobox/Columns"] = 3200, ["Infobox/mobileviewfix.css"] = 173000, ["Infobox/styles-images.css"] = 20000, ["Infobox3cols"] = 25000, ["Infobox_AFL_biography"] = 15000, ["Infobox_Athletics_Championships"] = 3400, ["Infobox_Australian_place"] = 15000, ["Infobox_Australian_place/styles.css"] = 15000, ["Infobox_Australian_place/table"] = 11000, ["Infobox_COA_wide"] = 3700, ["Infobox_Canada_electoral_district"] = 2600, ["Infobox_Chinese"] = 23000, ["Infobox_Chinese/Chinese"] = 3200, ["Infobox_Chinese/Footer"] = 7200, ["Infobox_Chinese/Header"] = 7200, ["Infobox_Christian_leader"] = 22000, ["Infobox_French_commune"] = 38000, ["Infobox_French_subdivision"] = 2200, ["Infobox_Gaelic_games_biography"] = 5400, ["Infobox_Gaelic_games_player"] = 3300, ["Infobox_German_location"] = 11000, ["Infobox_German_place"] = 14000, ["Infobox_Grand_Prix_race_report"] = 2200, ["Infobox_Greece_place"] = 3600, ["Infobox_Greek_Dimos"] = 3000, ["Infobox_Hindu_temple"] = 2800, ["Infobox_Indian_constituency"] = 5800, ["Infobox_Indian_constituency/defaultdata"] = 5800, ["Infobox_Italian_comune"] = 8100, ["Infobox_Korean"] = 2300, ["Infobox_Korean/auto"] = 13000, ["Infobox_Korean/auto/categories"] = 13000, ["Infobox_Korean/base"] = 2300, ["Infobox_Korean/base/auto"] = 17000, ["Infobox_Korean/categories"] = 2300, ["Infobox_Korean_name"] = 2300, ["Infobox_Korean_name/auto"] = 13000, ["Infobox_Korean_television_name"] = 3300, ["Infobox_NASCAR_driver"] = 2300, ["Infobox_NASCAR_race_report"] = 2700, ["Infobox_NCAA_basketball_conference_tournament"] = 2100, ["Infobox_NCAA_team_season"] = 10000, ["Infobox_NFL_biography"] = 27000, ["Infobox_NFL_team_season"] = 2300, ["Infobox_NRHP"] = 74000, ["Infobox_NRHP/conv"] = 19000, ["Infobox_NRHP/locmapin2region"] = 67000, ["Infobox_Olympic_event"] = 7900, ["Infobox_Olympic_event/event_link"] = 7900, ["Infobox_Olympic_event/games_text"] = 7900, ["Infobox_Pan_American_Games_event"] = 2900, ["Infobox_Paralympic_event"] = 2900, ["Infobox_Paralympic_event/games_text"] = 2900, ["Infobox_Romanian_subdivision"] = 3200, ["Infobox_Russian_district"] = 2100, ["Infobox_Russian_inhabited_locality"] = 4700, ["Infobox_Russian_inhabited_locality/PosMapFS"] = 4200, ["Infobox_Russian_inhabited_locality/federal_subject"] = 4600, ["Infobox_SCOTUS_case"] = 4600, ["Infobox_SSSI"] = 2000, ["Infobox_Site_of_Special_Scientific_Interest"] = 2100, ["Infobox_Slovak_place"] = 3000, ["Infobox_Swiss_town"] = 2900, ["Infobox_Switzerland_municipality"] = 2900, ["Infobox_Turkey_place"] = 20000, ["Infobox_U.S._county"] = 3000, ["Infobox_U.S._county/district"] = 3000, ["Infobox_U.S._legislation"] = 2000, ["Infobox_UK_constituency"] = 2200, ["Infobox_UK_constituency/year"] = 2200, ["Infobox_UK_legislation"] = 6100, ["Infobox_UK_place"] = 27000, ["Infobox_UK_place/NoDialCode"] = 8200, ["Infobox_UK_place/NoPostCode"] = 3600, ["Infobox_UK_place/area"] = 2700, ["Infobox_UK_place/dens"] = 2300, ["Infobox_UK_place/dist"] = 2800, ["Infobox_UK_place/local"] = 27000, ["Infobox_UK_place/styles.css"] = 27000, ["Infobox_UNESCO_World_Heritage_Site"] = 2100, ["Infobox_UN_resolution"] = 2300, ["Infobox_US_Supreme_Court_case"] = 4800, ["Infobox_US_Supreme_Court_case/courts"] = 4800, ["Infobox_United_States_legislative_district"] = 2600, ["Infobox_United_States_legislative_district/representative"] = 2600, ["Infobox_Wikipedia_user"] = 12000, ["Infobox_academic"] = 26000, ["Infobox_aircraft"] = 13000, ["Infobox_aircraft/styles.css"] = 14000, ["Infobox_aircraft_occurrence"] = 2900, ["Infobox_airline"] = 4800, ["Infobox_airline/styles.css"] = 4800, ["Infobox_airport"] = 14000, ["Infobox_airport/datatable"] = 13000, ["Infobox_airport/styles.css"] = 14000, ["Infobox_album"] = 168000, ["Infobox_album/color"] = 207000, ["Infobox_album/link"] = 168000, ["Infobox_anatomy"] = 4500, ["Infobox_ancient_site"] = 3900, ["Infobox_animanga/Footer"] = 7800, ["Infobox_animanga/Header"] = 7800, ["Infobox_animanga/Print"] = 6600, ["Infobox_animanga/Video"] = 5100, ["Infobox_architect"] = 4400, ["Infobox_artist"] = 34000, ["Infobox_artist_discography"] = 6500, ["Infobox_artwork"] = 15000, ["Infobox_automobile"] = 9200, ["Infobox_award"] = 16000, ["Infobox_badminton_player"] = 3300, ["Infobox_baseball_biography"] = 30000, ["Infobox_baseball_biography/style"] = 30000, ["Infobox_baseball_biography/styles.css"] = 30000, ["Infobox_baseball_team_season"] = 3300, ["Infobox_baseball_team_season/leagueseason"] = 3300, ["Infobox_baseball_team_season/season"] = 3300, ["Infobox_baseball_team_season/styles.css"] = 3300, ["Infobox_basketball_biography"] = 23000, ["Infobox_basketball_biography/style"] = 23000, ["Infobox_basketball_club"] = 3300, ["Infobox_basketball_club/styles.css"] = 3300, ["Infobox_beauty_pageant"] = 2200, ["Infobox_bilateral_relations"] = 5000, ["Infobox_bishop_styles"] = 2400, ["Infobox_body_of_water"] = 19000, ["Infobox_book"] = 62000, ["Infobox_book/styles.css"] = 62000, ["Infobox_boxer"] = 6500, ["Infobox_brand"] = 2200, ["Infobox_brand/styles.css"] = 2200, ["Infobox_bridge"] = 6700, ["Infobox_building"] = 34000, ["Infobox_bus_company"] = 2000, ["Infobox_cemetery"] = 2100, ["Infobox_character"] = 8300, ["Infobox_character/styles.css"] = 8400, ["Infobox_chess_biography"] = 4700, ["Infobox_chess_player"] = 3800, ["Infobox_church"] = 17000, ["Infobox_church/denomination"] = 17000, ["Infobox_church/font_color"] = 17000, ["Infobox_civil_conflict"] = 3100, ["Infobox_civilian_attack"] = 7500, ["Infobox_college_coach"] = 13000, ["Infobox_college_football_game"] = 2300, ["Infobox_college_football_player"] = 2600, ["Infobox_college_sports_team_season"] = 45000, ["Infobox_college_sports_team_season/link"] = 45000, ["Infobox_college_sports_team_season/name"] = 45000, ["Infobox_college_sports_team_season/succession"] = 45000, ["Infobox_college_sports_team_season/team"] = 45000, ["Infobox_comedian"] = 2200, ["Infobox_comic_book_title"] = 3200, ["Infobox_comics_character"] = 3500, ["Infobox_comics_creator"] = 3600, ["Infobox_comics_creator/styles.css"] = 3600, ["Infobox_company"] = 92000, ["Infobox_company/styles.css"] = 92000, ["Infobox_computing_device"] = 2600, ["Infobox_concert"] = 3900, ["Infobox_constituency"] = 7700, ["Infobox_country"] = 7100, ["Infobox_country/formernext"] = 6600, ["Infobox_country/imagetable"] = 5600, ["Infobox_country/multirow"] = 9200, ["Infobox_country/status_text"] = 3100, ["Infobox_country/styles.css"] = 7200, ["Infobox_country_at_games"] = 17000, ["Infobox_country_at_games/core"] = 17000, ["Infobox_country_at_games/see_also"] = 14000, ["Infobox_court_case"] = 5300, ["Infobox_court_case/images"] = 2900, ["Infobox_court_case/styles.css"] = 5300, ["Infobox_cricket_tournament"] = 2800, ["Infobox_cricketer"] = 32000, ["Infobox_cricketer/career"] = 32000, ["Infobox_cricketer/national_side"] = 7700, ["Infobox_criminal"] = 7700, ["Infobox_curler"] = 2800, ["Infobox_cycling_race_report"] = 5000, ["Infobox_cyclist"] = 17000, ["Infobox_dam"] = 5900, ["Infobox_deity"] = 2200, ["Infobox_deity/color"] = 2200, ["Infobox_designation_list"] = 28000, ["Infobox_designation_list/entry"] = 22000, ["Infobox_dim"] = 6400, ["Infobox_diocese"] = 4100, ["Infobox_drug"] = 12000, ["Infobox_drug/chemical_formula"] = 12000, ["Infobox_drug/data_page_link"] = 12000, ["Infobox_drug/formatATC"] = 11000, ["Infobox_drug/formatCASnumber"] = 12000, ["Infobox_drug/formatChEBI"] = 12000, ["Infobox_drug/formatChEMBL"] = 12000, ["Infobox_drug/formatChemDBNIAID"] = 12000, ["Infobox_drug/formatChemSpider"] = 12000, ["Infobox_drug/formatCompTox"] = 12000, ["Infobox_drug/formatDrugBank"] = 12000, ["Infobox_drug/formatIUPHARBPS"] = 12000, ["Infobox_drug/formatJmol"] = 12000, ["Infobox_drug/formatKEGG"] = 12000, ["Infobox_drug/formatPDBligand"] = 11000, ["Infobox_drug/formatPubChemCID"] = 12000, ["Infobox_drug/formatPubChemSID"] = 12000, ["Infobox_drug/formatUNII"] = 12000, ["Infobox_drug/legal_status"] = 12000, ["Infobox_drug/licence"] = 12000, ["Infobox_drug/maintenance_categories"] = 12000, ["Infobox_drug/non-ref-space"] = 3900, ["Infobox_drug/pregnancy_category"] = 12000, ["Infobox_drug/styles.css"] = 12000, ["Infobox_drug/title"] = 12000, ["Infobox_economist"] = 2000, ["Infobox_election"] = 40000, ["Infobox_election/shortname"] = 2500, ["Infobox_election/styles.css"] = 40000, ["Infobox_enzyme"] = 5100, ["Infobox_ethnic_group"] = 8100, ["Infobox_event"] = 7700, ["Infobox_family"] = 2700, ["Infobox_field_hockey_player"] = 2500, ["Infobox_figure_skater"] = 4000, ["Infobox_film"] = 169000, ["Infobox_film/short_description"] = 165000, ["Infobox_film_awards"] = 3100, ["Infobox_film_awards/link"] = 3100, ["Infobox_film_awards/style"] = 3100, ["Infobox_film_or_theatre_festival"] = 2100, ["Infobox_food"] = 7700, ["Infobox_football_biography"] = 218000, ["Infobox_football_club"] = 29000, ["Infobox_football_club_season"] = 24000, ["Infobox_football_league"] = 2800, ["Infobox_football_league_season"] = 22000, ["Infobox_football_match"] = 6700, ["Infobox_football_tournament"] = 2200, ["Infobox_football_tournament_season"] = 9300, ["Infobox_former_subdivision"] = 3700, ["Infobox_former_subdivision/styles.css"] = 3700, ["Infobox_galaxy"] = 3400, ["Infobox_game"] = 3100, ["Infobox_game_score"] = 3800, ["Infobox_games"] = 2100, ["Infobox_gene"] = 13000, ["Infobox_given_name"] = 4200, ["Infobox_golfer"] = 4800, ["Infobox_golfer/highest_ranking"] = 4800, ["Infobox_government_agency"] = 13000, ["Infobox_government_cabinet"] = 3500, ["Infobox_gridiron_football_biography"] = 40000, ["Infobox_gridiron_football_biography/position"] = 39000, ["Infobox_gridiron_football_team_season"] = 4100, ["Infobox_gymnast"] = 5900, ["Infobox_handball_biography"] = 5500, ["Infobox_historic_site"] = 17000, ["Infobox_holiday"] = 2200, ["Infobox_holiday/date"] = 2200, ["Infobox_horseraces"] = 2700, ["Infobox_hospital"] = 7000, ["Infobox_hospital/care_system"] = 7000, ["Infobox_hospital/lists"] = 7000, ["Infobox_hurling_championship"] = 2600, ["Infobox_ice_hockey_biography"] = 21000, ["Infobox_ice_hockey_player"] = 18000, ["Infobox_ice_hockey_team"] = 3300, ["Infobox_ice_hockey_team_season"] = 2100, ["Infobox_international_football_competition"] = 6700, ["Infobox_islands"] = 9600, ["Infobox_islands/area"] = 10000, ["Infobox_islands/density"] = 10000, ["Infobox_islands/length"] = 9600, ["Infobox_islands/styles.css"] = 9600, ["Infobox_journal"] = 10000, ["Infobox_journal/Abbreviation_search"] = 10000, ["Infobox_journal/Bluebook_check"] = 9900, ["Infobox_journal/Former_check"] = 9900, ["Infobox_journal/ISO_4_check"] = 9900, ["Infobox_journal/ISSN-eISSN"] = 9900, ["Infobox_journal/Indexing_search"] = 10000, ["Infobox_journal/MathSciNet_check"] = 9900, ["Infobox_journal/NLM_check"] = 9900, ["Infobox_journal/frequency"] = 9000, ["Infobox_journal/openaccess"] = 2700, ["Infobox_judoka"] = 2800, ["Infobox_lake"] = 3900, ["Infobox_language"] = 10000, ["Infobox_language/family-color"] = 12000, ["Infobox_language/genetic"] = 7000, ["Infobox_language/lingualist"] = 10000, ["Infobox_language/linguistlist"] = 10000, ["Infobox_language/ref"] = 7400, ["Infobox_law_enforcement_agency"] = 2200, ["Infobox_legislation"] = 2800, ["Infobox_legislative_district"] = 2300, ["Infobox_legislative_election"] = 2600, ["Infobox_legislative_election/row"] = 2500, ["Infobox_legislative_election/styles.css"] = 2600, ["Infobox_legislative_term"] = 2100, ["Infobox_legislature"] = 4400, ["Infobox_library"] = 2500, ["Infobox_lighthouse"] = 2600, ["Infobox_lighthouse/light"] = 2600, ["Infobox_locomotive"] = 5000, ["Infobox_magazine"] = 8200, ["Infobox_manner_of_address"] = 4200, ["Infobox_martial_artist"] = 6300, ["Infobox_martial_artist/record"] = 6300, ["Infobox_medal_templates"] = 475000, ["Infobox_medical_condition"] = 9900, ["Infobox_medical_condition_(new)"] = 6700, ["Infobox_medical_details"] = 2500, ["Infobox_medical_person"] = 2400, ["Infobox_militant_organization"] = 2200, ["Infobox_military_conflict"] = 28000, ["Infobox_military_installation"] = 11000, ["Infobox_military_person"] = 53000, ["Infobox_military_unit"] = 29000, ["Infobox_mine"] = 2300, ["Infobox_mineral"] = 2000, ["Infobox_mobile_phone"] = 2400, ["Infobox_mobile_phone/size"] = 2100, ["Infobox_mobile_phone/weight"] = 2100, ["Infobox_model"] = 2400, ["Infobox_monument"] = 2800, ["Infobox_mountain"] = 30000, ["Infobox_multi-sport_competition_event"] = 2700, ["Infobox_museum"] = 12000, ["Infobox_musical_artist"] = 131000, ["Infobox_musical_artist/hCard_class"] = 122000, ["Infobox_musical_composition"] = 3600, ["Infobox_name"] = 8800, ["Infobox_name_module"] = 9100, ["Infobox_newspaper"] = 11000, ["Infobox_newspaper/styles.css"] = 11000, ["Infobox_noble"] = 7800, ["Infobox_officeholder"] = 276000, ["Infobox_officeholder/office"] = 283000, ["Infobox_official_post"] = 9700, ["Infobox_organization"] = 42000, ["Infobox_pageant_titleholder"] = 3000, ["Infobox_park"] = 9800, ["Infobox_person"] = 568000, ["Infobox_person/Wikidata"] = 5000, ["Infobox_person/height"] = 114000, ["Infobox_person/length"] = 7600, ["Infobox_person/weight"] = 73000, ["Infobox_philosopher"] = 3700, ["Infobox_planet"] = 4800, ["Infobox_play"] = 4600, ["Infobox_political_party"] = 16000, ["Infobox_power_station"] = 3300, ["Infobox_prepared_food"] = 2500, ["Infobox_professional_wrestler"] = 4800, ["Infobox_professional_wrestling_event"] = 3300, ["Infobox_protected_area"] = 16000, ["Infobox_protein_family"] = 2200, ["Infobox_publisher"] = 2600, ["Infobox_racehorse"] = 5900, ["Infobox_racing_driver"] = 5700, ["Infobox_racing_driver_series_section"] = 2900, ["Infobox_radio_station"] = 22000, ["Infobox_radio_station/styles.css"] = 22000, ["Infobox_rail"] = 3200, ["Infobox_rail_line"] = 8000, ["Infobox_rail_service"] = 3300, ["Infobox_reality_competition_season"] = 4300, ["Infobox_record_label"] = 4200, ["Infobox_recurring_event"] = 7900, ["Infobox_religious_biography"] = 7200, ["Infobox_religious_building"] = 15000, ["Infobox_religious_building/color"] = 21000, ["Infobox_restaurant"] = 4600, ["Infobox_river"] = 32000, ["Infobox_river/calcunit"] = 32000, ["Infobox_river/discharge"] = 32000, ["Infobox_river/row-style"] = 32000, ["Infobox_river/source"] = 32000, ["Infobox_road"] = 25000, ["Infobox_road/meta/mask/category"] = 24000, ["Infobox_road/meta/mask/country"] = 25000, ["Infobox_road/styles.css"] = 26000, ["Infobox_road_small"] = 2500, ["Infobox_rockunit"] = 6500, ["Infobox_royalty"] = 25000, ["Infobox_royalty/short_description"] = 8900, ["Infobox_rugby_biography"] = 19000, ["Infobox_rugby_biography/correct_date"] = 19000, ["Infobox_rugby_biography/depcheck"] = 19000, ["Infobox_rugby_league_biography"] = 11000, ["Infobox_rugby_league_biography/PLAYER"] = 11000, ["Infobox_rugby_team"] = 2700, ["Infobox_sailboat_specifications"] = 2300, ["Infobox_saint"] = 5500, ["Infobox_school"] = 40000, ["Infobox_school/short_description"] = 40000, ["Infobox_school/styles.css"] = 40000, ["Infobox_school_district"] = 6400, ["Infobox_school_district/styles.css"] = 6400, ["Infobox_scientist"] = 56000, ["Infobox_settlement"] = 597000, ["Infobox_settlement/areadisp"] = 259000, ["Infobox_settlement/columns"] = 107000, ["Infobox_settlement/columns/styles.css"] = 107000, ["Infobox_settlement/densdisp"] = 457000, ["Infobox_settlement/lengthdisp"] = 182000, ["Infobox_settlement/link"] = 107000, ["Infobox_settlement/styles.css"] = 597000, ["Infobox_ship"] = 43000, ["Infobox_ship/career"] = 39000, ["Infobox_ship/characteristics"] = 42000, ["Infobox_ship/class_overview"] = 4400, ["Infobox_ship/image"] = 42000, ["Infobox_ship/service_record"] = 2500, ["Infobox_shopping_mall"] = 3800, ["Infobox_short_story"] = 2700, ["Infobox_skier"] = 2700, ["Infobox_soap_character"] = 3100, ["Infobox_social_media_personality"] = 4300, ["Infobox_software"] = 14000, ["Infobox_software/simple"] = 15000, ["Infobox_song"] = 83000, ["Infobox_song/color"] = 83000, ["Infobox_song/link"] = 83000, ["Infobox_song_contest_national_year/Year"] = 2100, ["Infobox_spaceflight"] = 4000, ["Infobox_spaceflight/styles.css"] = 4000, ["Infobox_speed_skater"] = 2000, ["Infobox_sport_event"] = 2800, ["Infobox_sports_competition_event"] = 23000, ["Infobox_sports_competition_event/medalrow"] = 15000, ["Infobox_sports_league"] = 5600, ["Infobox_sports_season"] = 6900, ["Infobox_sports_team"] = 2300, ["Infobox_sportsperson"] = 157000, ["Infobox_stadium"] = 2600, ["Infobox_station"] = 57000, ["Infobox_station/services"] = 57000, ["Infobox_station/styles.css"] = 57000, ["Infobox_street"] = 4400, ["Infobox_swimmer"] = 11000, ["Infobox_television"] = 63000, ["Infobox_television/Short_description"] = 61000, ["Infobox_television/styles.css"] = 63000, ["Infobox_television_channel"] = 6700, ["Infobox_television_channel/styles.css"] = 6700, ["Infobox_television_episode"] = 13000, ["Infobox_television_episode/styles.css"] = 14000, ["Infobox_television_season"] = 11000, ["Infobox_television_station"] = 3200, ["Infobox_television_station/styles.css"] = 3300, ["Infobox_tennis_biography"] = 11000, ["Infobox_tennis_event"] = 3300, ["Infobox_tennis_tournament"] = 2000, ["Infobox_tennis_tournament/heading"] = 2000, ["Infobox_tennis_tournament/style"] = 2000, ["Infobox_tennis_tournament_event"] = 22000, ["Infobox_tennis_tournament_year"] = 11000, ["Infobox_tennis_tournament_year/color"] = 33000, ["Infobox_tennis_tournament_year/footer"] = 33000, ["Infobox_tournament_season"] = 13000, ["Infobox_train"] = 2500, ["Infobox_university"] = 26000, ["Infobox_user"] = 3000, ["Infobox_venue"] = 20000, ["Infobox_video_game"] = 30000, ["Infobox_video_game/styles.css"] = 30000, ["Infobox_volleyball_biography"] = 5800, ["Infobox_weapon"] = 8100, ["Infobox_weather_event"] = 3400, ["Infobox_weather_event/Effects"] = 3200, ["Infobox_weather_event/Footer"] = 3300, ["Infobox_weather_event/History"] = 3200, ["Infobox_weather_event/SSHWS"] = 2000, ["Infobox_weather_event/meteorology"] = 3200, ["Infobox_weather_event/scale"] = 2100, ["Infobox_weather_event/styles.css"] = 3400, ["Infobox_website"] = 8300, ["Infobox_writer"] = 45000, ["Information"] = 98000, ["Information/styles.css"] = 98000, ["Inlang"] = 2400, ["Inline"] = 3700, ["Inline_block"] = 5400, ["Inprogress"] = 2600, ["Input_link"] = 32000, ["Instagram"] = 19000, ["InterSportStats"] = 4600, ["Interlanguage_link"] = 258000, ["Interlanguage_link_multi"] = 9800, ["International_Paralympic_Committee"] = 4200, ["Internet_Archive"] = 2100, ["Internet_Archive_SCOTUS_URL"] = 3300, ["Internet_Archive_author"] = 19000, ["Internet_Archive_film"] = 2800, ["Intitle"] = 21000, ["Ip"] = 2100, ["Iptalk"] = 18000, ["IranCensus2006"] = 33000, ["IranNCSGN"] = 3200, ["Iran_Census_2006"] = 33000, ["Irish_place_name"] = 3000, ["IsIPAddress"] = 45000, ["IsValidPageName"] = 3400, ["Is_MLB_league"] = 3300, ["Is_NPB_league"] = 3300, ["Is_continent"] = 7400, ["Is_country_in_Central_America"] = 17000, ["Is_country_in_the_Caribbean"] = 17000, ["Is_interwiki_link"] = 6700, ["Is_italic_taxon"] = 648000, ["Is_redirect"] = 379000, ["Is_time"] = 6600, ["Is_valid_page_name"] = 3400, ["Isbn"] = 10000, ["Isnum"] = 3000, ["Isnumeric"] = 118000, ["Iso2continent"] = 83000, ["Iso2country"] = 25000, ["Iso2country/article"] = 25000, ["Iso2country/data"] = 25000, ["Issubst"] = 64000, ["Italic_dab2"] = 5800, ["Italic_disambiguation"] = 2300, ["Italic_title"] = 258000, ["Italic_title_prefixed"] = 8800, ["Italictitle"] = 3000, ["Ivmbox"] = 142000, ["Ivory_messagebox"] = 185000, ["Ivory_messagebox/styles.css"] = 185000, ["Module:I18n/complex_date"] = 47000, ["Module:IP"] = 147000, ["Module:IPA"] = 182000, ["Module:IPA/data"] = 165000, ["Module:IPA/styles.css"] = 150000, ["Module:IPA_symbol"] = 6800, ["Module:IPA_symbol/data"] = 6800, ["Module:IPAc-en"] = 55000, ["Module:IPAc-en/data"] = 55000, ["Module:IPAc-en/phonemes"] = 55000, ["Module:IPAc-en/pronunciation"] = 55000, ["Module:IPAddress"] = 213000, ["Module:ISO_3166"] = 908000, ["Module:ISO_3166/data/AT"] = 2500, ["Module:ISO_3166/data/BA"] = 3400, ["Module:ISO_3166/data/CA"] = 2700, ["Module:ISO_3166/data/CH"] = 4200, ["Module:ISO_3166/data/CN"] = 2700, ["Module:ISO_3166/data/DE"] = 15000, ["Module:ISO_3166/data/ES"] = 3700, ["Module:ISO_3166/data/FR"] = 38000, ["Module:ISO_3166/data/GB"] = 7000, ["Module:ISO_3166/data/GR"] = 3400, ["Module:ISO_3166/data/IN"] = 29000, ["Module:ISO_3166/data/IR"] = 21000, ["Module:ISO_3166/data/IT"] = 2500, ["Module:ISO_3166/data/National"] = 908000, ["Module:ISO_3166/data/PL"] = 7600, ["Module:ISO_3166/data/RS"] = 3200, ["Module:ISO_3166/data/RU"] = 27000, ["Module:ISO_3166/data/UA"] = 2200, ["Module:ISO_3166/data/US"] = 87000, ["Module:ISO_639_name"] = 34000, ["Module:ISO_639_name/ISO_639-1"] = 29000, ["Module:ISO_639_name/ISO_639-2"] = 21000, ["Module:ISO_639_name/ISO_639-2B"] = 20000, ["Module:ISO_639_name/ISO_639-3"] = 20000, ["Module:ISO_639_name/ISO_639-3_(dep)"] = 34000, ["Module:ISO_639_name/ISO_639-5"] = 19000, ["Module:ISO_639_name/ISO_639_deprecated"] = 34000, ["Module:ISO_639_name/ISO_639_name_to_code"] = 4500, ["Module:ISO_639_name/ISO_639_override"] = 34000, ["Module:ISOdate"] = 47000, ["Module:Ice_hockey_box"] = 2000, ["Module:Icon"] = 672000, ["Module:Icon/data"] = 672000, ["Module:Icon_box"] = 259000, ["Module:Icon_box/data"] = 259000, ["Module:If_any_equal"] = 250000, ["Module:If_empty"] = 6690000, ["Module:If_in_category"] = 178000, ["Module:If_in_page"] = 21000, ["Module:If_not_given_or_empty"] = 78000, ["Module:If_preview"] = 979000, ["Module:If_preview/configuration"] = 979000, ["Module:If_preview/styles.css"] = 979000, ["Module:In_lang"] = 385000, ["Module:Indent"] = 5400, ["Module:Infobox"] = 4660000, ["Module:Infobox/dates"] = 77000, ["Module:Infobox/styles.css"] = 4920000, ["Module:Infobox/utilities"] = 2600, ["Module:Infobox3cols"] = 319000, ["Module:InfoboxBuilder"] = 2700, ["Module:InfoboxImage"] = 5590000, ["Module:InfoboxImage/data"] = 3330000, ["Module:Infobox_body_of_water_tracking"] = 19000, ["Module:Infobox_cyclist_tracking"] = 16000, ["Module:Infobox_dim"] = 375000, ["Module:Infobox_dim/data"] = 230000, ["Module:Infobox_election"] = 42000, ["Module:Infobox_gene"] = 13000, ["Module:Infobox_mapframe"] = 1690000, ["Module:Infobox_military_conflict"] = 28000, ["Module:Infobox_military_conflict/styles.css"] = 28000, ["Module:Infobox_multi-lingual_name"] = 23000, ["Module:Infobox_multi-lingual_name/data"] = 23000, ["Module:Infobox_power_station"] = 3300, ["Module:Infobox_road"] = 26000, ["Module:Infobox_road/browselinks"] = 26000, ["Module:Infobox_road/errors"] = 25000, ["Module:Infobox_road/length"] = 26000, ["Module:Infobox_road/locations"] = 25000, ["Module:Infobox_road/map"] = 25000, ["Module:Infobox_road/route"] = 26000, ["Module:Infobox_road/sections"] = 25000, ["Module:Infobox_ship"] = 43000, ["Module:Infobox_ship/data"] = 43000, ["Module:Infobox_ship/styles.css"] = 43000, ["Module:Infobox_television"] = 63000, ["Module:Infobox_television_disambiguation_check"] = 71000, ["Module:Infobox_television_episode"] = 13000, ["Module:Infobox_television_season_disambiguation_check"] = 10000, ["Module:Infobox_television_season_name"] = 11000, ["Module:Internet_Archive"] = 22000, ["Module:Is_article"] = 2400, ["Module:Is_infobox_in_lead"] = 461000, ["Module:Is_instance"] = 358000, ["Module:Iso2nationality"] = 96000, ["Module:Italic_title"] = 1250000, ["Module:Italic_title2"] = 5800, } 3xwlvfr2gvr8omb1ptys55wifvhrzfa Module:Infobox/styles.css 828 122432 746163 745561 2026-06-09T21:49:34Z en>Izno 0 spaceeeee 746163 sanitized-css text/css /* {{pp|small=y}} */ /* * This TemplateStyles sheet deliberately does NOT include the full set of * infobox styles. We are still working to migrate all of the manual * infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]] * DO NOT ADD THEM HERE */ /* NOTE: This is maintained both here and in [[MediaWiki:Common.css]] until migration is complete. * Starting with bare minimum for the benefit of [[mw:Manual:Safemode]]. */ @media (min-width: 640px) { .infobox { /* @noflip */ margin-left: 1em; /* @noflip */ float: right; /* @noflip */ clear: right; width: 22em; } } /* * not strictly certain these styles are necessary since the modules now * exclusively output infobox-subbox or infobox, not both * just replicating the module faithfully */ .infobox-subbox { padding: 0; border: none; margin: -3px; width: auto; min-width: 100%; font-size: 100%; clear: none; float: none; background-color: transparent; color:inherit; } .infobox-3cols-child { margin: -3px; } .infobox .navbar { font-size: 100%; } /* remove when infobox is not a table anymore */ .infobox-hiddenrow, /* we mean it, Minerva. but also Vector 2022 in the future at some point */ body.skin--responsive.skin--responsive .infobox .infobox-hiddenrow { display: none; } /* Dark theme: [[William Wragg]], [[Coral Castle]] */ @media screen { html.skin-theme-clientpref-night .infobox-full-data:not(.notheme) > div:not(.notheme)[style] { background: #1f1f23 !important; /* switch with var( --color-base ) when supported. */ color: #f8f9fa; } } @media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os .infobox-full-data:not(.notheme) > div:not(.notheme)[style] { background: #1f1f23 !important; /* switch with var( --color-base ) when supported. */ color: #f8f9fa; } } /* Since infobox is a table, many infobox templates take advantage of this to * add columns and rows to the infobox itself rather than as part of a new table * inside them. This class should be discouraged and removed on the long term, * but allows us to at least identify these tables going forward * Currently in use on: [[Module:Infobox3cols]] * Fixes issue described in [[phab:F55300125]] on Vector 2022. */ @media (min-width: 640px) { body.skin--responsive .infobox-table { display: table !important; } body.skin--responsive .infobox-table > caption { display: table-caption !important; } body.skin--responsive .infobox-table > tbody { display: table-row-group; } body.skin--responsive .infobox-table th, body.skin--responsive .infobox-table td { padding-left: inherit; padding-right: inherit; } } bi1nsztkx4350a55cuzjhaotvp5h216 746164 746163 2026-06-12T21:51:53Z Robertsky 51025 1 revision imported from [[:en:Module:Infobox/styles.css]]: for workshop activity 746163 sanitized-css text/css /* {{pp|small=y}} */ /* * This TemplateStyles sheet deliberately does NOT include the full set of * infobox styles. We are still working to migrate all of the manual * infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]] * DO NOT ADD THEM HERE */ /* NOTE: This is maintained both here and in [[MediaWiki:Common.css]] until migration is complete. * Starting with bare minimum for the benefit of [[mw:Manual:Safemode]]. */ @media (min-width: 640px) { .infobox { /* @noflip */ margin-left: 1em; /* @noflip */ float: right; /* @noflip */ clear: right; width: 22em; } } /* * not strictly certain these styles are necessary since the modules now * exclusively output infobox-subbox or infobox, not both * just replicating the module faithfully */ .infobox-subbox { padding: 0; border: none; margin: -3px; width: auto; min-width: 100%; font-size: 100%; clear: none; float: none; background-color: transparent; color:inherit; } .infobox-3cols-child { margin: -3px; } .infobox .navbar { font-size: 100%; } /* remove when infobox is not a table anymore */ .infobox-hiddenrow, /* we mean it, Minerva. but also Vector 2022 in the future at some point */ body.skin--responsive.skin--responsive .infobox .infobox-hiddenrow { display: none; } /* Dark theme: [[William Wragg]], [[Coral Castle]] */ @media screen { html.skin-theme-clientpref-night .infobox-full-data:not(.notheme) > div:not(.notheme)[style] { background: #1f1f23 !important; /* switch with var( --color-base ) when supported. */ color: #f8f9fa; } } @media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os .infobox-full-data:not(.notheme) > div:not(.notheme)[style] { background: #1f1f23 !important; /* switch with var( --color-base ) when supported. */ color: #f8f9fa; } } /* Since infobox is a table, many infobox templates take advantage of this to * add columns and rows to the infobox itself rather than as part of a new table * inside them. This class should be discouraged and removed on the long term, * but allows us to at least identify these tables going forward * Currently in use on: [[Module:Infobox3cols]] * Fixes issue described in [[phab:F55300125]] on Vector 2022. */ @media (min-width: 640px) { body.skin--responsive .infobox-table { display: table !important; } body.skin--responsive .infobox-table > caption { display: table-caption !important; } body.skin--responsive .infobox-table > tbody { display: table-row-group; } body.skin--responsive .infobox-table th, body.skin--responsive .infobox-table td { padding-left: inherit; padding-right: inherit; } } bi1nsztkx4350a55cuzjhaotvp5h216 Module:ISO 3166 828 122505 746275 487049 2025-10-28T17:55:28Z en>Ahecht 0 expand accent replacement 746275 Scribunto text/plain -- to enable us to replicate the current functioning of Country extract, we need to deal with: -- 2 {{<name>}} DONE! -- 3 [[<name>]] DONE! -- 4 [[<name>|<junk>]] DONE! -- 5 [[image:flag of <country>.[svg|gif|png|jpg]|\d+px]] DONE! local p = {} local getArgs = require("Module:Arguments").getArgs local data = mw.loadData("Module:ISO 3166/data/National") --[[----------C A T S----------]]-- -- Assign error categories local function cats(cat, args) if not (args.nocat and args.nocat == 'true') and mw.title.getCurrentTitle().namespace == 0 then if cat == 'nocountry' then return '[[Category:Wikipedia articles with obscure country]]' elseif cat == 'nosubdivision' then return '[[Category:Wikipedia articles with obscure subdivision]]' end end return '' end --[[----------F I N D N A M E----------]]-- -- Finds the name in the database local function findname(code,cdata,qry) local sqry = p.strip(qry) if cdata["name"] and sqry==p.strip(cdata["name"]) or cdata["isoname"] and sqry==p.strip(cdata["isoname"]) or not cdata["nocode"] and sqry==code or sqry==cdata["alpha3"] or sqry==cdata["numeric"] then return true end for _,tname in pairs(cdata["isonames"] or {}) do if sqry==p.strip(tname) then return true end end for _,tname in pairs(cdata["altnames"] or {}) do if sqry==p.strip(tname) then return true end end return false end --[[----------I S O N A M E----------]]-- -- Find the ISO name of a country/region local function isoname(data,code,lang) if data[code]["isonames"] then local name = data[code]["isodisplaynames"] and data[code]["isodisplaynames"][lang] or data[code]["isonames"][lang] or data[code]["isodisplaynames"] and data[code]["isodisplaynames"][data[code]["defaultlang"] or data["defaultlang"]] or data[code]["isonames"][data[code]["defaultlang"] or data["defaultlang"]] or data[code]["isodisplaynames"] and data[code]["isodisplaynames"]["en"] or data[code]["isonames"]["en"] if name then return name end for _,iname in pairs(data[code]["isonames"]) do return iname end return data[code]["isodisplayname"] or data[code]["isoname"] else return data[code]["isodisplayname"] or data[code]["isoname"] end end --[[----------S T R I P----------]]-- -- Removes junk from the input function p.strip(text) if not text then return nil end local accents = {["À"]="A",["Á"]="A",["Â"]="A",["Ã"]="A",["Ä"]="A", ["Å"]="A",["Æ"]="AE",["Ç"]="C",["È"]="E",["É"]="E",["Ê"]="E",["Ë"]="E", ["Ì"]="I",["Í"]="I",["Î"]="I",["Ï"]="I",["Ð"]="D",["Ñ"]="N",["Ò"]="O", ["Ó"]="O",["Ô"]="O",["Õ"]="O",["Ö"]="O",["Ø"]="O",["Ù"]="U",["Ú"]="U", ["Û"]="U",["Ü"]="U",["Ý"]="Y",["Þ"]="TH",["Ā"]="A",["Ă"]="A",["Ą"]="A", ["Ć"]="C",["Ĉ"]="C",["Ċ"]="C",["Č"]="C",["Ď"]="D",["Đ"]="D",["Ē"]="E", ["Ĕ"]="E",["Ė"]="E",["Ę"]="E",["Ě"]="E",["Ĝ"]="G",["Ğ"]="G",["Ġ"]="G", ["Ģ"]="G",["Ĥ"]="H",["Ħ"]="H",["Ĩ"]="I",["Ī"]="I",["Ĭ"]="I",["Į"]="I", ["İ"]="I",["IJ"]="IJ",["Ĵ"]="J",["Ķ"]="K",["Ĺ"]="L",["Ļ"]="L",["Ľ"]="L", ["Ŀ"]="L",["Ł"]="L",["Ń"]="N",["Ņ"]="N",["Ň"]="N",["Ŋ"]="N",["Ō"]="O", ["Ŏ"]="O",["Ő"]="O",["Œ"]="OE",["Ŕ"]="R",["Ŗ"]="R",["Ř"]="R",["Ś"]="S", ["Ŝ"]="S",["Ş"]="S",["Š"]="S",["Ţ"]="T",["Ť"]="T",["Ŧ"]="T",["Ũ"]="U", ["Ū"]="U",["Ŭ"]="U",["Ů"]="U",["Ű"]="U",["Ų"]="U",["Ŵ"]="W",["Ŷ"]="Y", ["Ÿ"]="Y",["Ź"]="Z",["Ż"]="Z",["Ž"]="Z",["Ɓ"]="B",["Ƃ"]="B",["Ɔ"]="C", ["Ƈ"]="C",["Ɖ"]="D",["Ɗ"]="D",["Ƌ"]="D",["Ǝ"]="E",["Ə"]="E",["Ɛ"]="E", ["Ƒ"]="F",["Ɠ"]="G",["Ɣ"]="G",["Ɩ"]="I",["Ɨ"]="I",["Ƙ"]="K",["Ɯ"]="M", ["Ɲ"]="N",["Ɵ"]="O",["Ơ"]="O",["Ƣ"]="OI",["Ƥ"]="P",["Ʃ"]="SH",["Ƭ"]="T", ["Ʈ"]="T",["Ư"]="U",["Ʊ"]="U",["Ʋ"]="V",["Ƴ"]="Y",["Ƶ"]="Z",["Ʒ"]="Z", ["Ƹ"]="Z",["DŽ"]="DZ",["LJ"]="LJ",["NJ"]="NJ",["Ǎ"]="A",["Ǐ"]="I", ["Ǒ"]="O",["Ǔ"]="U",["Ǖ"]="U",["Ǘ"]="U",["Ǚ"]="U",["Ǜ"]="U",["Ǟ"]="A", ["Ǡ"]="A",["Ǣ"]="AE",["Ǥ"]="G",["Ǧ"]="G",["Ǩ"]="K",["Ǫ"]="O",["Ǭ"]="O", ["Ǯ"]="Z",["DZ"]="DZ",["Ǵ"]="G",["Ƕ"]="HV",["Ƿ"]="W",["Ǹ"]="N",["Ǻ"]="A", ["Ǽ"]="AE",["Ǿ"]="O",["Ȁ"]="A",["Ȃ"]="A",["Ȅ"]="E",["Ȇ"]="E",["Ȉ"]="I", ["Ȋ"]="I",["Ȍ"]="O",["Ȏ"]="O",["Ȑ"]="R",["Ȓ"]="R",["Ȕ"]="U",["Ȗ"]="U", ["Ș"]="S",["Ț"]="T",["Ȝ"]="Z",["Ȟ"]="H",["Ƞ"]="N",["Ȣ"]="OU",["Ȥ"]="Z", ["Ȧ"]="A",["Ȩ"]="E",["Ȫ"]="O",["Ȭ"]="O",["Ȯ"]="O",["Ȱ"]="O",["Ȳ"]="Y", ["Ⱥ"]="A",["Ȼ"]="C",["Ƚ"]="L",["Ⱦ"]="T",["Ƀ"]="B",["Ʉ"]="U",["Ʌ"]="V", ["Ɇ"]="E",["Ɉ"]="J",["Ɋ"]="Q",["Ɍ"]="R",["Ɏ"]="Y", } local remove = {"NATION OF","COUNTRY OF","TERRITORY OF", -- text to be removed list "FLAG OF","FLAG","KINGDOM OF","STATE OF"," STATE ", "PROVINCE OF","PROVINCE","TERRITORY","COUNTY","GOVERNORATE" } local patterns = {"(%a)%.(%a)%.",".+:","|.+","%(.-%)", -- patterns to follow (order may matter) "%.%S.*","^THE ","%_","%-","%d%d?%d?PX" } local replacements = {["(%a)%.(%a)%."]="%1%2", -- Replacements for patterns above (order does not matter) [".+:"]="",["|.+"]="",["%(.-%)"]="", ["%.%S.*"]="",["^THE "]="",["%_"]=" ",["%-"]=" ", ["%d%d?%d?PX"]="", } text = mw.text.decode(text) -- Decode HTML entities (passed from wikidata?) text = mw.text.unstripNoWiki(text) -- Remove <nowiki> tags text = mw.ustring.upper(text) -- Case insensitivity text = mw.ustring.gsub(text,"[À-Ɏ]",accents) -- Deaccent for _,pattern in ipairs(patterns) do -- Follow patterns local value = replacements[pattern] text = mw.ustring.gsub(text,pattern,value) end for _,words in pairs(remove) do -- Remove unneeded words text = mw.ustring.gsub(text,words,"") end text = mw.ustring.gsub(text,"%W","") -- Remove non alpha-numeric return text end --[[----------P . C A L L S T R I P ---------]]-- -- Calls P.strip but using Module:Arguments function p.callstrip(frame) local args = getArgs(frame) return p.strip(args[1]) or "" end --[[----------P . L U A C O D E---------]]-- -- Makes the ISO code of a country function p.luacode(args) args[1], args[2] = args[1] or '', args[2] or '' local code1 = p.strip(args[1]) local code2 = p.strip(args[2]) if args["codetype"]=="3" then args["codetype"]="alpha3" end local eot = args.error or "" if code1 == "" then mw.addWarning((args[1] ~= "" and ('Invalid parameter "' .. args[1] .. '"') or 'No parameter') .. ' for the country given ([[Module:ISO 3166]]).') return cats('nocountry', args), '<span style="font-size:100%" class="error">"No parameter for the country given"</span>' end local notRecognized ='%s ("%s") is not a recognized %s in [[ISO 3166-%s]] ([[Module:ISO 3166]]).' if code2 == "" then --3166-1 code for alpha2,cdata in pairs(data) do if findname(alpha2,cdata,code1) then if args["codetype"]=="numeric" or args["codetype"]=="alpha3" then return cdata[args["codetype"]] else return alpha2 end end end if string.find(args[1],"%-") then args[1], args[2] = string.match(args[1],"^([^%-]*)%-(.*)$") if args[2] then return p.luacode(args) end end mw.addWarning(string.format(notRecognized, code1, args[1], 'country', '1')) return cats('nocountry', args) else --3166-2 code for alpha2,cdata in pairs(data) do if findname(alpha2,cdata,code1) then if mw.ustring.match(alpha2,"GB") then -- For England, Wales etc. alpha2 = "GB" end local sdata = mw.loadData("Module:ISO 3166/data/"..alpha2) local empty = true for scode,scdata in pairs(sdata) do if type(scdata)=="table" then empty = false if findname(scode,scdata,code2) then return alpha2.."-"..scode end end end if string.find(args[2] or '',"%-") then code1, args[2] = string.match(args[2] or '',"^([^%-]*)%-(.*)$") args[1] = args[1].."-"..code1 return p.luacode(args) end mw.addWarning(string.format(notRecognized, code2, args[2], 'subdivision', '2:' .. alpha2)) return cats('nosubdivision', args) end end if string.find(args[1],"%-") then args[1] = string.match(args[1],"^([^%-]*)%-(.*)$") return p.luacode(args) end mw.addWarning(string.format(notRecognized, code1, args[1], 'country', '1')) return cats('nocountry', args) end mw.addWarning(string.format(notRecognized, code1, args[1], 'country', '1')) return cats('nocountry', args) end --[[----------P . C O D E---------]]-- -- Calls P.Luacode but using Module:Arguments function p.code(frame) return p.luacode(getArgs(frame)) or "" end --[[----------P . N U M E R I C---------]]-- -- Calls P.Luacode but using Module:Arguments and setting it to output a numeric value function p.numeric(frame) local args = getArgs(frame) args["codetype"]="numeric" return p.luacode(args) or "" end --[[----------P . L U A N A M E---------]]-- -- Makes the ISO/common name of a country function p.luaname(args) local code1 = p.luacode(args) local code2 = '' if string.find(code1,"%-") then code1, code2 = string.match(code1,"^([^%-]*)%-(.*)$") end if string.find(code1,"^%u%u$") then if code2=="" then --3166-1 alpha-2 code if data[code1] then return (args.isoname or args.lang) and isoname(data,code1,args.lang) or (data[code1]["displayname"] or data[code1]["name"]) else return cats('nocountry', args) end else --3166-2 code local sdata if data[code1] then sdata = mw.loadData("Module:ISO 3166/data/"..code1) else return cats('nocountry', args) end if sdata[code2] then return (args.isoname or args.lang) and isoname(sdata,code2,args.lang) or (sdata[code2]["displayname"] or sdata[code2]["name"]) else return cats('nocountry', args) end end elseif args.notfound then return args.notfound end end --[[----------P . N A M E---------]]-- -- Calls P.Luaname but using Module:Arguments function p.name(frame) return p.luaname(getArgs(frame)) or "" end --[[----------P . G E O C O O R D I N S E R T---------]]-- -- Wrapper for Module:Coordinates.coordinsert function p.geocoordinsert(frame) -- {{#invoke:ISO 3166|geocoordinsert|{{coord|...}} -- |country=..|subdivision1=...|subdivision2=... -- |type=...|scale=...|dim=...|source=...|globe=... -- }} local args = frame.args local subdivisionqueried = false local tracking = '' local targs = {} targs[1] = args[1] or '' for i, v in pairs(args) do if i == 'country' and not mw.ustring.find(targs[1], 'region:') then local country = v local k, region = 1, '' -- look for a valid subdivision while region == '' and k < 3 do local subdivision = args['subdivision' .. k] or '' if subdivision ~= '' then region = p.luacode({country, subdivision, nocat = 'true'}) subdivisionqueried = true end k = k + 1 end -- subdivision lookup failed or never attempted, try country only if region == '' then region = p.luacode({country, nocat = 'true'}) if region == '' then tracking = tracking .. cats('nocountry', args) elseif subdivisionqueried == true then tracking = tracking .. cats('nosubdivision', args) end end -- something worked, add it to the targs if region ~= '' then targs[#targs + 1] = 'region:' .. region end elseif i == 'type' or i == 'scale' or i == 'dim' or i == 'source' or i == 'globe' then targs[#targs + 1] = i .. ':' .. v end end -- call Module:Coordinates.coordinsert if there is something to insert if #targs > 1 then local coordinsert = require('Module:Coordinates').coordinsert return coordinsert({args = targs}) .. tracking end -- otherwise, just return the coordinates return targs[1] .. tracking end return p 1me4482e6nwq43x9gst27wwllr56tpb 746276 746275 2026-06-12T21:56:14Z Robertsky 51025 1 revision imported from [[:en:Module:ISO_3166]] 746275 Scribunto text/plain -- to enable us to replicate the current functioning of Country extract, we need to deal with: -- 2 {{<name>}} DONE! -- 3 [[<name>]] DONE! -- 4 [[<name>|<junk>]] DONE! -- 5 [[image:flag of <country>.[svg|gif|png|jpg]|\d+px]] DONE! local p = {} local getArgs = require("Module:Arguments").getArgs local data = mw.loadData("Module:ISO 3166/data/National") --[[----------C A T S----------]]-- -- Assign error categories local function cats(cat, args) if not (args.nocat and args.nocat == 'true') and mw.title.getCurrentTitle().namespace == 0 then if cat == 'nocountry' then return '[[Category:Wikipedia articles with obscure country]]' elseif cat == 'nosubdivision' then return '[[Category:Wikipedia articles with obscure subdivision]]' end end return '' end --[[----------F I N D N A M E----------]]-- -- Finds the name in the database local function findname(code,cdata,qry) local sqry = p.strip(qry) if cdata["name"] and sqry==p.strip(cdata["name"]) or cdata["isoname"] and sqry==p.strip(cdata["isoname"]) or not cdata["nocode"] and sqry==code or sqry==cdata["alpha3"] or sqry==cdata["numeric"] then return true end for _,tname in pairs(cdata["isonames"] or {}) do if sqry==p.strip(tname) then return true end end for _,tname in pairs(cdata["altnames"] or {}) do if sqry==p.strip(tname) then return true end end return false end --[[----------I S O N A M E----------]]-- -- Find the ISO name of a country/region local function isoname(data,code,lang) if data[code]["isonames"] then local name = data[code]["isodisplaynames"] and data[code]["isodisplaynames"][lang] or data[code]["isonames"][lang] or data[code]["isodisplaynames"] and data[code]["isodisplaynames"][data[code]["defaultlang"] or data["defaultlang"]] or data[code]["isonames"][data[code]["defaultlang"] or data["defaultlang"]] or data[code]["isodisplaynames"] and data[code]["isodisplaynames"]["en"] or data[code]["isonames"]["en"] if name then return name end for _,iname in pairs(data[code]["isonames"]) do return iname end return data[code]["isodisplayname"] or data[code]["isoname"] else return data[code]["isodisplayname"] or data[code]["isoname"] end end --[[----------S T R I P----------]]-- -- Removes junk from the input function p.strip(text) if not text then return nil end local accents = {["À"]="A",["Á"]="A",["Â"]="A",["Ã"]="A",["Ä"]="A", ["Å"]="A",["Æ"]="AE",["Ç"]="C",["È"]="E",["É"]="E",["Ê"]="E",["Ë"]="E", ["Ì"]="I",["Í"]="I",["Î"]="I",["Ï"]="I",["Ð"]="D",["Ñ"]="N",["Ò"]="O", ["Ó"]="O",["Ô"]="O",["Õ"]="O",["Ö"]="O",["Ø"]="O",["Ù"]="U",["Ú"]="U", ["Û"]="U",["Ü"]="U",["Ý"]="Y",["Þ"]="TH",["Ā"]="A",["Ă"]="A",["Ą"]="A", ["Ć"]="C",["Ĉ"]="C",["Ċ"]="C",["Č"]="C",["Ď"]="D",["Đ"]="D",["Ē"]="E", ["Ĕ"]="E",["Ė"]="E",["Ę"]="E",["Ě"]="E",["Ĝ"]="G",["Ğ"]="G",["Ġ"]="G", ["Ģ"]="G",["Ĥ"]="H",["Ħ"]="H",["Ĩ"]="I",["Ī"]="I",["Ĭ"]="I",["Į"]="I", ["İ"]="I",["IJ"]="IJ",["Ĵ"]="J",["Ķ"]="K",["Ĺ"]="L",["Ļ"]="L",["Ľ"]="L", ["Ŀ"]="L",["Ł"]="L",["Ń"]="N",["Ņ"]="N",["Ň"]="N",["Ŋ"]="N",["Ō"]="O", ["Ŏ"]="O",["Ő"]="O",["Œ"]="OE",["Ŕ"]="R",["Ŗ"]="R",["Ř"]="R",["Ś"]="S", ["Ŝ"]="S",["Ş"]="S",["Š"]="S",["Ţ"]="T",["Ť"]="T",["Ŧ"]="T",["Ũ"]="U", ["Ū"]="U",["Ŭ"]="U",["Ů"]="U",["Ű"]="U",["Ų"]="U",["Ŵ"]="W",["Ŷ"]="Y", ["Ÿ"]="Y",["Ź"]="Z",["Ż"]="Z",["Ž"]="Z",["Ɓ"]="B",["Ƃ"]="B",["Ɔ"]="C", ["Ƈ"]="C",["Ɖ"]="D",["Ɗ"]="D",["Ƌ"]="D",["Ǝ"]="E",["Ə"]="E",["Ɛ"]="E", ["Ƒ"]="F",["Ɠ"]="G",["Ɣ"]="G",["Ɩ"]="I",["Ɨ"]="I",["Ƙ"]="K",["Ɯ"]="M", ["Ɲ"]="N",["Ɵ"]="O",["Ơ"]="O",["Ƣ"]="OI",["Ƥ"]="P",["Ʃ"]="SH",["Ƭ"]="T", ["Ʈ"]="T",["Ư"]="U",["Ʊ"]="U",["Ʋ"]="V",["Ƴ"]="Y",["Ƶ"]="Z",["Ʒ"]="Z", ["Ƹ"]="Z",["DŽ"]="DZ",["LJ"]="LJ",["NJ"]="NJ",["Ǎ"]="A",["Ǐ"]="I", ["Ǒ"]="O",["Ǔ"]="U",["Ǖ"]="U",["Ǘ"]="U",["Ǚ"]="U",["Ǜ"]="U",["Ǟ"]="A", ["Ǡ"]="A",["Ǣ"]="AE",["Ǥ"]="G",["Ǧ"]="G",["Ǩ"]="K",["Ǫ"]="O",["Ǭ"]="O", ["Ǯ"]="Z",["DZ"]="DZ",["Ǵ"]="G",["Ƕ"]="HV",["Ƿ"]="W",["Ǹ"]="N",["Ǻ"]="A", ["Ǽ"]="AE",["Ǿ"]="O",["Ȁ"]="A",["Ȃ"]="A",["Ȅ"]="E",["Ȇ"]="E",["Ȉ"]="I", ["Ȋ"]="I",["Ȍ"]="O",["Ȏ"]="O",["Ȑ"]="R",["Ȓ"]="R",["Ȕ"]="U",["Ȗ"]="U", ["Ș"]="S",["Ț"]="T",["Ȝ"]="Z",["Ȟ"]="H",["Ƞ"]="N",["Ȣ"]="OU",["Ȥ"]="Z", ["Ȧ"]="A",["Ȩ"]="E",["Ȫ"]="O",["Ȭ"]="O",["Ȯ"]="O",["Ȱ"]="O",["Ȳ"]="Y", ["Ⱥ"]="A",["Ȼ"]="C",["Ƚ"]="L",["Ⱦ"]="T",["Ƀ"]="B",["Ʉ"]="U",["Ʌ"]="V", ["Ɇ"]="E",["Ɉ"]="J",["Ɋ"]="Q",["Ɍ"]="R",["Ɏ"]="Y", } local remove = {"NATION OF","COUNTRY OF","TERRITORY OF", -- text to be removed list "FLAG OF","FLAG","KINGDOM OF","STATE OF"," STATE ", "PROVINCE OF","PROVINCE","TERRITORY","COUNTY","GOVERNORATE" } local patterns = {"(%a)%.(%a)%.",".+:","|.+","%(.-%)", -- patterns to follow (order may matter) "%.%S.*","^THE ","%_","%-","%d%d?%d?PX" } local replacements = {["(%a)%.(%a)%."]="%1%2", -- Replacements for patterns above (order does not matter) [".+:"]="",["|.+"]="",["%(.-%)"]="", ["%.%S.*"]="",["^THE "]="",["%_"]=" ",["%-"]=" ", ["%d%d?%d?PX"]="", } text = mw.text.decode(text) -- Decode HTML entities (passed from wikidata?) text = mw.text.unstripNoWiki(text) -- Remove <nowiki> tags text = mw.ustring.upper(text) -- Case insensitivity text = mw.ustring.gsub(text,"[À-Ɏ]",accents) -- Deaccent for _,pattern in ipairs(patterns) do -- Follow patterns local value = replacements[pattern] text = mw.ustring.gsub(text,pattern,value) end for _,words in pairs(remove) do -- Remove unneeded words text = mw.ustring.gsub(text,words,"") end text = mw.ustring.gsub(text,"%W","") -- Remove non alpha-numeric return text end --[[----------P . C A L L S T R I P ---------]]-- -- Calls P.strip but using Module:Arguments function p.callstrip(frame) local args = getArgs(frame) return p.strip(args[1]) or "" end --[[----------P . L U A C O D E---------]]-- -- Makes the ISO code of a country function p.luacode(args) args[1], args[2] = args[1] or '', args[2] or '' local code1 = p.strip(args[1]) local code2 = p.strip(args[2]) if args["codetype"]=="3" then args["codetype"]="alpha3" end local eot = args.error or "" if code1 == "" then mw.addWarning((args[1] ~= "" and ('Invalid parameter "' .. args[1] .. '"') or 'No parameter') .. ' for the country given ([[Module:ISO 3166]]).') return cats('nocountry', args), '<span style="font-size:100%" class="error">"No parameter for the country given"</span>' end local notRecognized ='%s ("%s") is not a recognized %s in [[ISO 3166-%s]] ([[Module:ISO 3166]]).' if code2 == "" then --3166-1 code for alpha2,cdata in pairs(data) do if findname(alpha2,cdata,code1) then if args["codetype"]=="numeric" or args["codetype"]=="alpha3" then return cdata[args["codetype"]] else return alpha2 end end end if string.find(args[1],"%-") then args[1], args[2] = string.match(args[1],"^([^%-]*)%-(.*)$") if args[2] then return p.luacode(args) end end mw.addWarning(string.format(notRecognized, code1, args[1], 'country', '1')) return cats('nocountry', args) else --3166-2 code for alpha2,cdata in pairs(data) do if findname(alpha2,cdata,code1) then if mw.ustring.match(alpha2,"GB") then -- For England, Wales etc. alpha2 = "GB" end local sdata = mw.loadData("Module:ISO 3166/data/"..alpha2) local empty = true for scode,scdata in pairs(sdata) do if type(scdata)=="table" then empty = false if findname(scode,scdata,code2) then return alpha2.."-"..scode end end end if string.find(args[2] or '',"%-") then code1, args[2] = string.match(args[2] or '',"^([^%-]*)%-(.*)$") args[1] = args[1].."-"..code1 return p.luacode(args) end mw.addWarning(string.format(notRecognized, code2, args[2], 'subdivision', '2:' .. alpha2)) return cats('nosubdivision', args) end end if string.find(args[1],"%-") then args[1] = string.match(args[1],"^([^%-]*)%-(.*)$") return p.luacode(args) end mw.addWarning(string.format(notRecognized, code1, args[1], 'country', '1')) return cats('nocountry', args) end mw.addWarning(string.format(notRecognized, code1, args[1], 'country', '1')) return cats('nocountry', args) end --[[----------P . C O D E---------]]-- -- Calls P.Luacode but using Module:Arguments function p.code(frame) return p.luacode(getArgs(frame)) or "" end --[[----------P . N U M E R I C---------]]-- -- Calls P.Luacode but using Module:Arguments and setting it to output a numeric value function p.numeric(frame) local args = getArgs(frame) args["codetype"]="numeric" return p.luacode(args) or "" end --[[----------P . L U A N A M E---------]]-- -- Makes the ISO/common name of a country function p.luaname(args) local code1 = p.luacode(args) local code2 = '' if string.find(code1,"%-") then code1, code2 = string.match(code1,"^([^%-]*)%-(.*)$") end if string.find(code1,"^%u%u$") then if code2=="" then --3166-1 alpha-2 code if data[code1] then return (args.isoname or args.lang) and isoname(data,code1,args.lang) or (data[code1]["displayname"] or data[code1]["name"]) else return cats('nocountry', args) end else --3166-2 code local sdata if data[code1] then sdata = mw.loadData("Module:ISO 3166/data/"..code1) else return cats('nocountry', args) end if sdata[code2] then return (args.isoname or args.lang) and isoname(sdata,code2,args.lang) or (sdata[code2]["displayname"] or sdata[code2]["name"]) else return cats('nocountry', args) end end elseif args.notfound then return args.notfound end end --[[----------P . N A M E---------]]-- -- Calls P.Luaname but using Module:Arguments function p.name(frame) return p.luaname(getArgs(frame)) or "" end --[[----------P . G E O C O O R D I N S E R T---------]]-- -- Wrapper for Module:Coordinates.coordinsert function p.geocoordinsert(frame) -- {{#invoke:ISO 3166|geocoordinsert|{{coord|...}} -- |country=..|subdivision1=...|subdivision2=... -- |type=...|scale=...|dim=...|source=...|globe=... -- }} local args = frame.args local subdivisionqueried = false local tracking = '' local targs = {} targs[1] = args[1] or '' for i, v in pairs(args) do if i == 'country' and not mw.ustring.find(targs[1], 'region:') then local country = v local k, region = 1, '' -- look for a valid subdivision while region == '' and k < 3 do local subdivision = args['subdivision' .. k] or '' if subdivision ~= '' then region = p.luacode({country, subdivision, nocat = 'true'}) subdivisionqueried = true end k = k + 1 end -- subdivision lookup failed or never attempted, try country only if region == '' then region = p.luacode({country, nocat = 'true'}) if region == '' then tracking = tracking .. cats('nocountry', args) elseif subdivisionqueried == true then tracking = tracking .. cats('nosubdivision', args) end end -- something worked, add it to the targs if region ~= '' then targs[#targs + 1] = 'region:' .. region end elseif i == 'type' or i == 'scale' or i == 'dim' or i == 'source' or i == 'globe' then targs[#targs + 1] = i .. ':' .. v end end -- call Module:Coordinates.coordinsert if there is something to insert if #targs > 1 then local coordinsert = require('Module:Coordinates').coordinsert return coordinsert({args = targs}) .. tracking end -- otherwise, just return the coordinates return targs[1] .. tracking end return p 1me4482e6nwq43x9gst27wwllr56tpb Module:ISO 3166/data/National 828 122506 746277 583856 2025-02-05T18:40:15Z en>Ahecht 0 Add XK, feel free to revert if controvertial (since it's widely used yet not in ISO 3166) 746277 Scribunto text/plain return { ["AD"] = {alpha3="AND",numeric="020",name="Andorra"}, ["AE"] = {alpha3="ARE",numeric="784",name="United Arab Emirates",altnames={"UAE"}}, ["AF"] = {alpha3="AFG",numeric="004",name="Afghanistan"}, ["AG"] = {alpha3="ATG",numeric="028",name="Antigua and Barbuda"}, ["AI"] = {alpha3="AIA",numeric="660",name="Anguilla"}, ["AL"] = {alpha3="ALB",numeric="008",name="Albania"}, ["AM"] = {alpha3="ARM",numeric="051",name="Armenia"}, ["AO"] = {alpha3="AGO",numeric="024",name="Angola"}, ["AQ"] = {alpha3="ATA",numeric="010",name="Antarctica"}, ["AR"] = {alpha3="ARG",numeric="032",name="Argentina"}, ["AS"] = {alpha3="ASM",numeric="016",name="American Samoa"}, ["AT"] = {alpha3="AUT",numeric="040",name="Austria"}, ["AU"] = {alpha3="AUS",numeric="036",name="Australia"}, ["AW"] = {alpha3="ABW",numeric="533",name="Aruba"}, ["AX"] = {alpha3="ALA",numeric="248",name="Åland Islands",altnames={"Aland Islands","Åland","Aland"}}, ["AZ"] = {alpha3="AZE",numeric="031",name="Azerbaijan"}, ["BA"] = {alpha3="BIH",numeric="070",name="Bosnia and Herzegovina",altnames={"Bosnia"}}, ["BB"] = {alpha3="BRB",numeric="052",name="Barbados"}, ["BD"] = {alpha3="BGD",numeric="050",name="Bangladesh"}, ["BE"] = {alpha3="BEL",numeric="056",name="Belgium"}, ["BF"] = {alpha3="BFA",numeric="854",name="Burkina Faso"}, ["BG"] = {alpha3="BGR",numeric="100",name="Bulgaria"}, ["BH"] = {alpha3="BHR",numeric="048",name="Bahrain"}, ["BI"] = {alpha3="BDI",numeric="108",name="Burundi"}, ["BJ"] = {alpha3="BEN",numeric="204",name="Benin"}, ["BL"] = {alpha3="BLM",numeric="652",name="Saint Barthélemy",altnames={"St Barthelemy"}}, ["BM"] = {alpha3="BMU",numeric="060",name="Bermuda"}, ["BN"] = {alpha3="BRN",numeric="096",name="Brunei",isoname="Brunei Darussalam"}, ["BO"] = {alpha3="BOL",numeric="068",name="Bolivia",isoname="Bolivia, Plurinational State of"}, ["BQ"] = {alpha3="BES",numeric="535",name="Caribbean Netherlands",isoname="Bonaire, Sint Eustatius and Saba"}, ["BR"] = {alpha3="BRA",numeric="076",name="Brazil"}, ["BS"] = {alpha3="BHS",numeric="044",name="Bahamas"}, ["BT"] = {alpha3="BTN",numeric="064",name="Bhutan"}, ["BV"] = {alpha3="BVT",numeric="074",name="Bouvet Island"}, ["BW"] = {alpha3="BWA",numeric="072",name="Botswana"}, ["BY"] = {alpha3="BLR",numeric="112",name="Belarus"}, ["BZ"] = {alpha3="BLZ",numeric="084",name="Belize"}, ["CA"] = {alpha3="CAN",numeric="124",name="Canada"}, ["CC"] = {alpha3="CCK",numeric="166",name="Cocos (Keeling) Islands",altnames={"Cocos Islands","Keeling Islands"}}, ["CD"] = {alpha3="COD",numeric="180",name="Democratic Republic of the Congo",isoname="Congo, Democratic Republic of the",altnames={"Congo-Kinshasa","Congo–Kinshasa","DRC","DR Congo"}}, ["CF"] = {alpha3="CAF",numeric="140",name="Central African Republic",altnames={"CAR"}}, ["CG"] = {alpha3="COG",numeric="178",name="Republic of the Congo",isoname="Congo",altnames={"Congo-Brazzaville", "Congo–Brazzaville"}}, ["CH"] = {alpha3="CHE",numeric="756",name="Switzerland"}, ["CI"] = {alpha3="CIV",numeric="384",name="Côte d'Ivoire",altnames={"Ivory Coast"}}, ["CK"] = {alpha3="COK",numeric="184",name="Cook Islands"}, ["CL"] = {alpha3="CHL",numeric="152",name="Chile"}, ["CM"] = {alpha3="CMR",numeric="120",name="Cameroon"}, ["CN"] = {alpha3="CHN",numeric="156",name="China",altnames={"People's Republic of China","PRC"}}, ["CO"] = {alpha3="COL",numeric="170",name="Colombia"}, ["CR"] = {alpha3="CRI",numeric="188",name="Costa Rica"}, ["CU"] = {alpha3="CUB",numeric="192",name="Cuba"}, ["CV"] = {alpha3="CPV",numeric="132",name="Cabo Verde",altnames={"Cape Verde"}}, ["CW"] = {alpha3="CUW",numeric="531",name="Curaçao",altnames={"Curacao"}}, ["CX"] = {alpha3="CXR",numeric="162",name="Christmas Island"}, ["CY"] = {alpha3="CYP",numeric="196",name="Cyprus"}, ["CZ"] = {alpha3="CZE",numeric="203",name="Czech Republic",isoname="Czechia"}, ["DE"] = {alpha3="DEU",numeric="276",name="Germany"}, ["DJ"] = {alpha3="DJI",numeric="262",name="Djibouti"}, ["DK"] = {alpha3="DNK",numeric="208",name="Denmark"}, ["DM"] = {alpha3="DMA",numeric="212",name="Dominica"}, ["DO"] = {alpha3="DOM",numeric="214",name="Dominican Republic"}, ["DZ"] = {alpha3="DZA",numeric="012",name="Algeria"}, ["EC"] = {alpha3="ECU",numeric="218",name="Ecuador"}, ["EE"] = {alpha3="EST",numeric="233",name="Estonia"}, ["EG"] = {alpha3="EGY",numeric="818",name="Egypt"}, ["EH"] = {alpha3="ESH",numeric="732",name="Western Sahara"}, ["ER"] = {alpha3="ERI",numeric="232",name="Eritrea"}, ["ES"] = {alpha3="ESP",numeric="724",name="Spain"}, ["ET"] = {alpha3="ETH",numeric="231",name="Ethiopia"}, ["FI"] = {alpha3="FIN",numeric="246",name="Finland"}, ["FJ"] = {alpha3="FJI",numeric="242",name="Fiji"}, ["FK"] = {alpha3="FLK",numeric="238",name="Falkland Islands",isoname="Falkland Islands (Malvinas)",altnames={"Falklands","Islas Malvinas","Malvinas","Malvinas Islands"}}, ["FM"] = {alpha3="FSM",numeric="583",name="Federated States of Micronesia",isoname="Micronesia, Federated States of",altnames={"Micronesia"}}, ["FO"] = {alpha3="FRO",numeric="234",name="Faroe Islands",altnames={"Faroer","Faeroer"}}, ["FR"] = {alpha3="FRA",numeric="250",name="France"}, ["GA"] = {alpha3="GAB",numeric="266",name="Gabon"}, ["GB"] = {alpha3="GBR",numeric="826",name="United Kingdom",isoname="United Kingdom of Great Britain and Northern Ireland",altnames={"UK","Great Britain"}}, ["GB-ENG"] = {alpha3="ENG",numeric="000",name="England"}, --Considered to be a country ["GB-NIR"] = {alpha3="NIR",numeric="000",name="Northern Ireland"}, --Considered to be a country ["GB-SCT"] = {alpha3="SCT",numeric="000",name="Scotland"}, --Considered to be a country ["GB-WLS"] = {alpha3="WLS",numeric="000",name="Wales"}, --Considered to be a country ["GB-EAW"] = {alpha3="EAW",numeric="000",name="England and Wales"}, --Considered to be a country ["GD"] = {alpha3="GRD",numeric="308",name="Grenada"}, ["GE"] = {alpha3="GEO",numeric="268",name="Georgia"}, ["GF"] = {alpha3="GUF",numeric="254",name="French Guiana"}, ["GG"] = {alpha3="GGY",numeric="831",name="Guernsey"}, ["GH"] = {alpha3="GHA",numeric="288",name="Ghana"}, ["GI"] = {alpha3="GIB",numeric="292",name="Gibraltar"}, ["GL"] = {alpha3="GRL",numeric="304",name="Greenland"}, ["GM"] = {alpha3="GMB",numeric="270",name="Gambia"}, ["GN"] = {alpha3="GIN",numeric="324",name="Guinea"}, ["GP"] = {alpha3="GLP",numeric="312",name="Guadeloupe"}, ["GQ"] = {alpha3="GNQ",numeric="226",name="Equatorial Guinea"}, ["GR"] = {alpha3="GRC",numeric="300",name="Greece"}, ["GS"] = {alpha3="SGS",numeric="239",name="South Georgia and the South Sandwich Islands"}, ["GT"] = {alpha3="GTM",numeric="320",name="Guatemala"}, ["GU"] = {alpha3="GUM",numeric="316",name="Guam"}, ["GW"] = {alpha3="GNB",numeric="624",name="Guinea-Bissau",altnames={"Guinea–Bissau"}}, ["GY"] = {alpha3="GUY",numeric="328",name="Guyana"}, ["HK"] = {alpha3="HKG",numeric="344",name="Hong Kong",altnames={"Hong Kong SAR","HKSAR"}}, ["HM"] = {alpha3="HMD",numeric="334",name="Heard Island and McDonald Islands",altnames={"Heard and McDonald Islands"}}, ["HN"] = {alpha3="HND",numeric="340",name="Honduras"}, ["HR"] = {alpha3="HRV",numeric="191",name="Croatia"}, ["HT"] = {alpha3="HTI",numeric="332",name="Haiti"}, ["HU"] = {alpha3="HUN",numeric="348",name="Hungary"}, ["ID"] = {alpha3="IDN",numeric="360",name="Indonesia"}, ["IE"] = {alpha3="IRL",numeric="372",name="Ireland",altnames={"Republic of Ireland"}}, ["IL"] = {alpha3="ISR",numeric="376",name="Israel"}, ["IM"] = {alpha3="IMN",numeric="833",name="Isle of Man"}, ["IN"] = {alpha3="IND",numeric="356",name="India"}, ["IO"] = {alpha3="IOT",numeric="086",name="British Indian Ocean Territory"}, ["IQ"] = {alpha3="IRQ",numeric="368",name="Iraq"}, ["IR"] = {alpha3="IRN",numeric="364",name="Iran",isoname="Iran, Islamic Republic of"}, ["IS"] = {alpha3="ISL",numeric="352",name="Iceland"}, ["IT"] = {alpha3="ITA",numeric="380",name="Italy"}, ["JE"] = {alpha3="JEY",numeric="832",name="Jersey"}, ["JM"] = {alpha3="JAM",numeric="388",name="Jamaica"}, ["JO"] = {alpha3="JOR",numeric="400",name="Jordan"}, ["JP"] = {alpha3="JPN",numeric="392",name="Japan"}, ["KE"] = {alpha3="KEN",numeric="404",name="Kenya"}, ["KG"] = {alpha3="KGZ",numeric="417",name="Kyrgyzstan"}, ["KH"] = {alpha3="KHM",numeric="116",name="Cambodia"}, ["KI"] = {alpha3="KIR",numeric="296",name="Kiribati"}, ["KM"] = {alpha3="COM",numeric="174",name="Comoros"}, ["KN"] = {alpha3="KNA",numeric="659",name="Saint Kitts and Nevis",altnames={"St Kitts and Nevis"}}, ["KP"] = {alpha3="PRK",numeric="408",name="North Korea",isoname="Korea, Democratic People's Republic of",altnames={"Democratic People's Republic of Korea"}}, ["KR"] = {alpha3="KOR",numeric="410",name="South Korea",isoname="Korea, Republic of",altnames={"Republic of Korea"}}, ["KW"] = {alpha3="KWT",numeric="414",name="Kuwait"}, ["KY"] = {alpha3="CYM",numeric="136",name="Cayman Islands"}, ["KZ"] = {alpha3="KAZ",numeric="398",name="Kazakhstan"}, ["LA"] = {alpha3="LAO",numeric="418",name="Laos",isoname="Lao People's Democratic Republic"}, ["LB"] = {alpha3="LBN",numeric="422",name="Lebanon"}, ["LC"] = {alpha3="LCA",numeric="662",name="Saint Lucia",altnames={"St Lucia"}}, ["LI"] = {alpha3="LIE",numeric="438",name="Liechtenstein"}, ["LK"] = {alpha3="LKA",numeric="144",name="Sri Lanka"}, ["LR"] = {alpha3="LBR",numeric="430",name="Liberia"}, ["LS"] = {alpha3="LSO",numeric="426",name="Lesotho"}, ["LT"] = {alpha3="LTU",numeric="440",name="Lithuania"}, ["LU"] = {alpha3="LUX",numeric="442",name="Luxembourg"}, ["LV"] = {alpha3="LVA",numeric="428",name="Latvia"}, ["LY"] = {alpha3="LBY",numeric="434",name="Libya"}, ["MA"] = {alpha3="MAR",numeric="504",name="Morocco"}, ["MC"] = {alpha3="MCO",numeric="492",name="Monaco"}, ["MD"] = {alpha3="MDA",numeric="498",name="Moldova",isoname="Moldova, Republic of"}, ["ME"] = {alpha3="MNE",numeric="499",name="Montenegro"}, ["MF"] = {alpha3="MAF",numeric="663",name="Saint-Martin",isoname="Saint Martin (French part)",altnames={"Saint–Martin", "St Martin","St Martin (French part)","Collectivity of Saint Martin","Collectivity of St Martin"}}, ["MG"] = {alpha3="MDG",numeric="450",name="Madagascar"}, ["MH"] = {alpha3="MHL",numeric="584",name="Marshall Islands"}, ["MK"] = {alpha3="MKD",numeric="807",name="North Macedonia",altnames={"Republic of North Macedonia","Macedonia","Republic of Macedonia","Macedonia, the former Yugoslav Republic of"}}, ["ML"] = {alpha3="MLI",numeric="466",name="Mali"}, ["MM"] = {alpha3="MMR",numeric="104",name="Myanmar",altnames={"Burma"}}, ["MN"] = {alpha3="MNG",numeric="496",name="Mongolia"}, ["MO"] = {alpha3="MAC",numeric="446",name="Macau",isoname="Macao",altnames={"Macau SAR","Macao SAR"}}, ["MP"] = {alpha3="MNP",numeric="580",name="Northern Mariana Islands"}, ["MQ"] = {alpha3="MTQ",numeric="474",name="Martinique"}, ["MR"] = {alpha3="MRT",numeric="478",name="Mauritania"}, ["MS"] = {alpha3="MSR",numeric="500",name="Montserrat"}, ["MT"] = {alpha3="MLT",numeric="470",name="Malta"}, ["MU"] = {alpha3="MUS",numeric="480",name="Mauritius"}, ["MV"] = {alpha3="MDV",numeric="462",name="Maldives"}, ["MW"] = {alpha3="MWI",numeric="454",name="Malawi"}, ["MX"] = {alpha3="MEX",numeric="484",name="Mexico"}, ["MY"] = {alpha3="MYS",numeric="458",name="Malaysia"}, ["MZ"] = {alpha3="MOZ",numeric="508",name="Mozambique"}, ["NA"] = {alpha3="NAM",numeric="516",name="Namibia"}, ["NC"] = {alpha3="NCL",numeric="540",name="New Caledonia"}, ["NE"] = {alpha3="NER",numeric="562",name="Niger"}, ["NF"] = {alpha3="NFK",numeric="574",name="Norfolk Island"}, ["NG"] = {alpha3="NGA",numeric="566",name="Nigeria"}, ["NI"] = {alpha3="NIC",numeric="558",name="Nicaragua"}, ["NL"] = {alpha3="NLD",numeric="528",name="Netherlands"}, ["NO"] = {alpha3="NOR",numeric="578",name="Norway"}, ["NP"] = {alpha3="NPL",numeric="524",name="Nepal"}, ["NR"] = {alpha3="NRU",numeric="520",name="Nauru"}, ["NU"] = {alpha3="NIU",numeric="570",name="Niue"}, ["NZ"] = {alpha3="NZL",numeric="554",name="New Zealand",altnames={"Aotearoa"}}, ["OM"] = {alpha3="OMN",numeric="512",name="Oman"}, ["PA"] = {alpha3="PAN",numeric="591",name="Panama"}, ["PE"] = {alpha3="PER",numeric="604",name="Peru"}, ["PF"] = {alpha3="PYF",numeric="258",name="French Polynesia"}, ["PG"] = {alpha3="PNG",numeric="598",name="Papua New Guinea"}, ["PH"] = {alpha3="PHL",numeric="608",name="Philippines"}, ["PK"] = {alpha3="PAK",numeric="586",name="Pakistan"}, ["PL"] = {alpha3="POL",numeric="616",name="Poland"}, ["PM"] = {alpha3="SPM",numeric="666",name="Saint Pierre and Miquelon",altnames={"St Pierre and Miquelon"}}, ["PN"] = {alpha3="PCN",numeric="612",name="Pitcairn"}, ["PR"] = {alpha3="PRI",numeric="630",name="Puerto Rico"}, ["PS"] = {alpha3="PSE",numeric="275",name="Palestine",isoname="Palestine, State of",altnames={"State of Palestine"}}, ["PT"] = {alpha3="PRT",numeric="620",name="Portugal"}, ["PW"] = {alpha3="PLW",numeric="585",name="Palau"}, ["PY"] = {alpha3="PRY",numeric="600",name="Paraguay"}, ["QA"] = {alpha3="QAT",numeric="634",name="Qatar"}, ["RE"] = {alpha3="REU",numeric="638",name="Réunion"}, ["RO"] = {alpha3="ROU",numeric="642",name="Romania"}, ["RS"] = {alpha3="SRB",numeric="688",name="Serbia"}, ["RU"] = {alpha3="RUS",numeric="643",name="Russia",isoname="Russian Federation"}, ["RW"] = {alpha3="RWA",numeric="646",name="Rwanda"}, ["SA"] = {alpha3="SAU",numeric="682",name="Saudi Arabia"}, ["SB"] = {alpha3="SLB",numeric="090",name="Solomon Islands"}, ["SC"] = {alpha3="SYC",numeric="690",name="Seychelles"}, ["SD"] = {alpha3="SDN",numeric="729",name="Sudan"}, ["SE"] = {alpha3="SWE",numeric="752",name="Sweden"}, ["SG"] = {alpha3="SGP",numeric="702",name="Singapore"}, ["SH"] = {alpha3="SHN",numeric="654",name="Saint Helena, Ascension and Tristan da Cunha"}, ["SI"] = {alpha3="SVN",numeric="705",name="Slovenia"}, ["SJ"] = {alpha3="SJM",numeric="744",name="Svalbard and Jan Mayen"}, ["SK"] = {alpha3="SVK",numeric="703",name="Slovakia"}, ["SL"] = {alpha3="SLE",numeric="694",name="Sierra Leone"}, ["SM"] = {alpha3="SMR",numeric="674",name="San Marino"}, ["SN"] = {alpha3="SEN",numeric="686",name="Senegal"}, ["SO"] = {alpha3="SOM",numeric="706",name="Somalia"}, ["SR"] = {alpha3="SUR",numeric="740",name="Suriname"}, ["SS"] = {alpha3="SSD",numeric="728",name="South Sudan"}, ["ST"] = {alpha3="STP",numeric="678",name="São Tomé and Príncipe",isoname="Sao Tome and Principe",altnames={"Democratic Republic of Sao Tome and Principe"}}, ["SV"] = {alpha3="SLV",numeric="222",name="El Salvador"}, ["SX"] = {alpha3="SXM",numeric="534",name="Sint Maarten",isoname="Sint Maarten (Dutch part)",altnames={"St Maarten","Saint Martin (Dutch part)","St Martin (Dutch part)"}}, ["SY"] = {alpha3="SYR",numeric="760",name="Syria",isoname="Syrian Arab Republic"}, ["SZ"] = {alpha3="SWZ",numeric="748",name="Eswatini",altnames={"Swaziland"}}, ["TC"] = {alpha3="TCA",numeric="796",name="Turks and Caicos Islands"}, ["TD"] = {alpha3="TCD",numeric="148",name="Chad"}, ["TF"] = {alpha3="ATF",numeric="260",name="French Southern and Antarctic Lands",isoname="French Southern Territories"}, ["TG"] = {alpha3="TGO",numeric="768",name="Togo"}, ["TH"] = {alpha3="THA",numeric="764",name="Thailand"}, ["TJ"] = {alpha3="TJK",numeric="762",name="Tajikistan"}, ["TK"] = {alpha3="TKL",numeric="772",name="Tokelau"}, ["TL"] = {alpha3="TLS",numeric="626",name="Timor-Leste",altnames={"East Timor", "Timor–Leste"}}, ["TM"] = {alpha3="TKM",numeric="795",name="Turkmenistan"}, ["TN"] = {alpha3="TUN",numeric="788",name="Tunisia"}, ["TO"] = {alpha3="TON",numeric="776",name="Tonga"}, ["TR"] = {alpha3="TUR",numeric="792",name="Turkey",isoname="Türkiye"}, ["TT"] = {alpha3="TTO",numeric="780",name="Trinidad and Tobago"}, ["TV"] = {alpha3="TUV",numeric="798",name="Tuvalu"}, ["TW"] = {alpha3="TWN",numeric="158",name="Taiwan",isoname="Taiwan, Province of China",altnames={"Republic of China"}}, ["TZ"] = {alpha3="TZA",numeric="834",name="Tanzania",isoname="Tanzania, United Republic of"}, ["UA"] = {alpha3="UKR",numeric="804",name="Ukraine"}, ["UG"] = {alpha3="UGA",numeric="800",name="Uganda"}, ["UM"] = {alpha3="UMI",numeric="581",name="United States Minor Outlying Islands"}, ["US"] = {alpha3="USA",numeric="840",name="United States",isoname="United States of America",altnames={"US","USA","U.S."}}, ["UY"] = {alpha3="URY",numeric="858",name="Uruguay"}, ["UZ"] = {alpha3="UZB",numeric="860",name="Uzbekistan"}, ["VA"] = {alpha3="VAT",numeric="336",name="Vatican City",isoname="Holy See",altnames={"Holy See (Vatican City State)","Vatican City State"}}, ["VC"] = {alpha3="VCT",numeric="670",name="Saint Vincent and the Grenadines",altnames={"St Vincent and the Grenadines"}}, ["VE"] = {alpha3="VEN",numeric="862",name="Venezuela",isoname="Venezuela, Bolivarian Republic of"}, ["VG"] = {alpha3="VGB",numeric="092",name="British Virgin Islands",isoname="Virgin Islands (British)",altnames={"UK Virgin Islands","BVI"}}, ["VI"] = {alpha3="VIR",numeric="850",name="United States Virgin Islands",isoname="Virgin Islands (U.S.)",altnames={"US Virgin Islands","USVI"}}, ["VN"] = {alpha3="VNM",numeric="704",name="Vietnam",isoname="Viet Nam"}, ["VU"] = {alpha3="VUT",numeric="548",name="Vanuatu"}, ["WF"] = {alpha3="WLF",numeric="876",name="Wallis and Futuna"}, ["WS"] = {alpha3="WSM",numeric="882",name="Samoa"}, ["XK"] = {alpha3="XKX",numeric="926",name="Kosovo",isoname="Republic of Kosovo",altnames={"XXK", "UNK"}}, ["YE"] = {alpha3="YEM",numeric="887",name="Yemen"}, ["YT"] = {alpha3="MYT",numeric="175",name="Mayotte"}, ["ZA"] = {alpha3="ZAF",numeric="710",name="South Africa"}, ["ZM"] = {alpha3="ZMB",numeric="894",name="Zambia"}, ["ZW"] = {alpha3="ZWE",numeric="716",name="Zimbabwe"} } s208xsrv2ah7uurorwdwaouj83yexck 746278 746277 2026-06-12T21:56:14Z Robertsky 51025 1 revision imported from [[:en:Module:ISO_3166/data/National]] 746277 Scribunto text/plain return { ["AD"] = {alpha3="AND",numeric="020",name="Andorra"}, ["AE"] = {alpha3="ARE",numeric="784",name="United Arab Emirates",altnames={"UAE"}}, ["AF"] = {alpha3="AFG",numeric="004",name="Afghanistan"}, ["AG"] = {alpha3="ATG",numeric="028",name="Antigua and Barbuda"}, ["AI"] = {alpha3="AIA",numeric="660",name="Anguilla"}, ["AL"] = {alpha3="ALB",numeric="008",name="Albania"}, ["AM"] = {alpha3="ARM",numeric="051",name="Armenia"}, ["AO"] = {alpha3="AGO",numeric="024",name="Angola"}, ["AQ"] = {alpha3="ATA",numeric="010",name="Antarctica"}, ["AR"] = {alpha3="ARG",numeric="032",name="Argentina"}, ["AS"] = {alpha3="ASM",numeric="016",name="American Samoa"}, ["AT"] = {alpha3="AUT",numeric="040",name="Austria"}, ["AU"] = {alpha3="AUS",numeric="036",name="Australia"}, ["AW"] = {alpha3="ABW",numeric="533",name="Aruba"}, ["AX"] = {alpha3="ALA",numeric="248",name="Åland Islands",altnames={"Aland Islands","Åland","Aland"}}, ["AZ"] = {alpha3="AZE",numeric="031",name="Azerbaijan"}, ["BA"] = {alpha3="BIH",numeric="070",name="Bosnia and Herzegovina",altnames={"Bosnia"}}, ["BB"] = {alpha3="BRB",numeric="052",name="Barbados"}, ["BD"] = {alpha3="BGD",numeric="050",name="Bangladesh"}, ["BE"] = {alpha3="BEL",numeric="056",name="Belgium"}, ["BF"] = {alpha3="BFA",numeric="854",name="Burkina Faso"}, ["BG"] = {alpha3="BGR",numeric="100",name="Bulgaria"}, ["BH"] = {alpha3="BHR",numeric="048",name="Bahrain"}, ["BI"] = {alpha3="BDI",numeric="108",name="Burundi"}, ["BJ"] = {alpha3="BEN",numeric="204",name="Benin"}, ["BL"] = {alpha3="BLM",numeric="652",name="Saint Barthélemy",altnames={"St Barthelemy"}}, ["BM"] = {alpha3="BMU",numeric="060",name="Bermuda"}, ["BN"] = {alpha3="BRN",numeric="096",name="Brunei",isoname="Brunei Darussalam"}, ["BO"] = {alpha3="BOL",numeric="068",name="Bolivia",isoname="Bolivia, Plurinational State of"}, ["BQ"] = {alpha3="BES",numeric="535",name="Caribbean Netherlands",isoname="Bonaire, Sint Eustatius and Saba"}, ["BR"] = {alpha3="BRA",numeric="076",name="Brazil"}, ["BS"] = {alpha3="BHS",numeric="044",name="Bahamas"}, ["BT"] = {alpha3="BTN",numeric="064",name="Bhutan"}, ["BV"] = {alpha3="BVT",numeric="074",name="Bouvet Island"}, ["BW"] = {alpha3="BWA",numeric="072",name="Botswana"}, ["BY"] = {alpha3="BLR",numeric="112",name="Belarus"}, ["BZ"] = {alpha3="BLZ",numeric="084",name="Belize"}, ["CA"] = {alpha3="CAN",numeric="124",name="Canada"}, ["CC"] = {alpha3="CCK",numeric="166",name="Cocos (Keeling) Islands",altnames={"Cocos Islands","Keeling Islands"}}, ["CD"] = {alpha3="COD",numeric="180",name="Democratic Republic of the Congo",isoname="Congo, Democratic Republic of the",altnames={"Congo-Kinshasa","Congo–Kinshasa","DRC","DR Congo"}}, ["CF"] = {alpha3="CAF",numeric="140",name="Central African Republic",altnames={"CAR"}}, ["CG"] = {alpha3="COG",numeric="178",name="Republic of the Congo",isoname="Congo",altnames={"Congo-Brazzaville", "Congo–Brazzaville"}}, ["CH"] = {alpha3="CHE",numeric="756",name="Switzerland"}, ["CI"] = {alpha3="CIV",numeric="384",name="Côte d'Ivoire",altnames={"Ivory Coast"}}, ["CK"] = {alpha3="COK",numeric="184",name="Cook Islands"}, ["CL"] = {alpha3="CHL",numeric="152",name="Chile"}, ["CM"] = {alpha3="CMR",numeric="120",name="Cameroon"}, ["CN"] = {alpha3="CHN",numeric="156",name="China",altnames={"People's Republic of China","PRC"}}, ["CO"] = {alpha3="COL",numeric="170",name="Colombia"}, ["CR"] = {alpha3="CRI",numeric="188",name="Costa Rica"}, ["CU"] = {alpha3="CUB",numeric="192",name="Cuba"}, ["CV"] = {alpha3="CPV",numeric="132",name="Cabo Verde",altnames={"Cape Verde"}}, ["CW"] = {alpha3="CUW",numeric="531",name="Curaçao",altnames={"Curacao"}}, ["CX"] = {alpha3="CXR",numeric="162",name="Christmas Island"}, ["CY"] = {alpha3="CYP",numeric="196",name="Cyprus"}, ["CZ"] = {alpha3="CZE",numeric="203",name="Czech Republic",isoname="Czechia"}, ["DE"] = {alpha3="DEU",numeric="276",name="Germany"}, ["DJ"] = {alpha3="DJI",numeric="262",name="Djibouti"}, ["DK"] = {alpha3="DNK",numeric="208",name="Denmark"}, ["DM"] = {alpha3="DMA",numeric="212",name="Dominica"}, ["DO"] = {alpha3="DOM",numeric="214",name="Dominican Republic"}, ["DZ"] = {alpha3="DZA",numeric="012",name="Algeria"}, ["EC"] = {alpha3="ECU",numeric="218",name="Ecuador"}, ["EE"] = {alpha3="EST",numeric="233",name="Estonia"}, ["EG"] = {alpha3="EGY",numeric="818",name="Egypt"}, ["EH"] = {alpha3="ESH",numeric="732",name="Western Sahara"}, ["ER"] = {alpha3="ERI",numeric="232",name="Eritrea"}, ["ES"] = {alpha3="ESP",numeric="724",name="Spain"}, ["ET"] = {alpha3="ETH",numeric="231",name="Ethiopia"}, ["FI"] = {alpha3="FIN",numeric="246",name="Finland"}, ["FJ"] = {alpha3="FJI",numeric="242",name="Fiji"}, ["FK"] = {alpha3="FLK",numeric="238",name="Falkland Islands",isoname="Falkland Islands (Malvinas)",altnames={"Falklands","Islas Malvinas","Malvinas","Malvinas Islands"}}, ["FM"] = {alpha3="FSM",numeric="583",name="Federated States of Micronesia",isoname="Micronesia, Federated States of",altnames={"Micronesia"}}, ["FO"] = {alpha3="FRO",numeric="234",name="Faroe Islands",altnames={"Faroer","Faeroer"}}, ["FR"] = {alpha3="FRA",numeric="250",name="France"}, ["GA"] = {alpha3="GAB",numeric="266",name="Gabon"}, ["GB"] = {alpha3="GBR",numeric="826",name="United Kingdom",isoname="United Kingdom of Great Britain and Northern Ireland",altnames={"UK","Great Britain"}}, ["GB-ENG"] = {alpha3="ENG",numeric="000",name="England"}, --Considered to be a country ["GB-NIR"] = {alpha3="NIR",numeric="000",name="Northern Ireland"}, --Considered to be a country ["GB-SCT"] = {alpha3="SCT",numeric="000",name="Scotland"}, --Considered to be a country ["GB-WLS"] = {alpha3="WLS",numeric="000",name="Wales"}, --Considered to be a country ["GB-EAW"] = {alpha3="EAW",numeric="000",name="England and Wales"}, --Considered to be a country ["GD"] = {alpha3="GRD",numeric="308",name="Grenada"}, ["GE"] = {alpha3="GEO",numeric="268",name="Georgia"}, ["GF"] = {alpha3="GUF",numeric="254",name="French Guiana"}, ["GG"] = {alpha3="GGY",numeric="831",name="Guernsey"}, ["GH"] = {alpha3="GHA",numeric="288",name="Ghana"}, ["GI"] = {alpha3="GIB",numeric="292",name="Gibraltar"}, ["GL"] = {alpha3="GRL",numeric="304",name="Greenland"}, ["GM"] = {alpha3="GMB",numeric="270",name="Gambia"}, ["GN"] = {alpha3="GIN",numeric="324",name="Guinea"}, ["GP"] = {alpha3="GLP",numeric="312",name="Guadeloupe"}, ["GQ"] = {alpha3="GNQ",numeric="226",name="Equatorial Guinea"}, ["GR"] = {alpha3="GRC",numeric="300",name="Greece"}, ["GS"] = {alpha3="SGS",numeric="239",name="South Georgia and the South Sandwich Islands"}, ["GT"] = {alpha3="GTM",numeric="320",name="Guatemala"}, ["GU"] = {alpha3="GUM",numeric="316",name="Guam"}, ["GW"] = {alpha3="GNB",numeric="624",name="Guinea-Bissau",altnames={"Guinea–Bissau"}}, ["GY"] = {alpha3="GUY",numeric="328",name="Guyana"}, ["HK"] = {alpha3="HKG",numeric="344",name="Hong Kong",altnames={"Hong Kong SAR","HKSAR"}}, ["HM"] = {alpha3="HMD",numeric="334",name="Heard Island and McDonald Islands",altnames={"Heard and McDonald Islands"}}, ["HN"] = {alpha3="HND",numeric="340",name="Honduras"}, ["HR"] = {alpha3="HRV",numeric="191",name="Croatia"}, ["HT"] = {alpha3="HTI",numeric="332",name="Haiti"}, ["HU"] = {alpha3="HUN",numeric="348",name="Hungary"}, ["ID"] = {alpha3="IDN",numeric="360",name="Indonesia"}, ["IE"] = {alpha3="IRL",numeric="372",name="Ireland",altnames={"Republic of Ireland"}}, ["IL"] = {alpha3="ISR",numeric="376",name="Israel"}, ["IM"] = {alpha3="IMN",numeric="833",name="Isle of Man"}, ["IN"] = {alpha3="IND",numeric="356",name="India"}, ["IO"] = {alpha3="IOT",numeric="086",name="British Indian Ocean Territory"}, ["IQ"] = {alpha3="IRQ",numeric="368",name="Iraq"}, ["IR"] = {alpha3="IRN",numeric="364",name="Iran",isoname="Iran, Islamic Republic of"}, ["IS"] = {alpha3="ISL",numeric="352",name="Iceland"}, ["IT"] = {alpha3="ITA",numeric="380",name="Italy"}, ["JE"] = {alpha3="JEY",numeric="832",name="Jersey"}, ["JM"] = {alpha3="JAM",numeric="388",name="Jamaica"}, ["JO"] = {alpha3="JOR",numeric="400",name="Jordan"}, ["JP"] = {alpha3="JPN",numeric="392",name="Japan"}, ["KE"] = {alpha3="KEN",numeric="404",name="Kenya"}, ["KG"] = {alpha3="KGZ",numeric="417",name="Kyrgyzstan"}, ["KH"] = {alpha3="KHM",numeric="116",name="Cambodia"}, ["KI"] = {alpha3="KIR",numeric="296",name="Kiribati"}, ["KM"] = {alpha3="COM",numeric="174",name="Comoros"}, ["KN"] = {alpha3="KNA",numeric="659",name="Saint Kitts and Nevis",altnames={"St Kitts and Nevis"}}, ["KP"] = {alpha3="PRK",numeric="408",name="North Korea",isoname="Korea, Democratic People's Republic of",altnames={"Democratic People's Republic of Korea"}}, ["KR"] = {alpha3="KOR",numeric="410",name="South Korea",isoname="Korea, Republic of",altnames={"Republic of Korea"}}, ["KW"] = {alpha3="KWT",numeric="414",name="Kuwait"}, ["KY"] = {alpha3="CYM",numeric="136",name="Cayman Islands"}, ["KZ"] = {alpha3="KAZ",numeric="398",name="Kazakhstan"}, ["LA"] = {alpha3="LAO",numeric="418",name="Laos",isoname="Lao People's Democratic Republic"}, ["LB"] = {alpha3="LBN",numeric="422",name="Lebanon"}, ["LC"] = {alpha3="LCA",numeric="662",name="Saint Lucia",altnames={"St Lucia"}}, ["LI"] = {alpha3="LIE",numeric="438",name="Liechtenstein"}, ["LK"] = {alpha3="LKA",numeric="144",name="Sri Lanka"}, ["LR"] = {alpha3="LBR",numeric="430",name="Liberia"}, ["LS"] = {alpha3="LSO",numeric="426",name="Lesotho"}, ["LT"] = {alpha3="LTU",numeric="440",name="Lithuania"}, ["LU"] = {alpha3="LUX",numeric="442",name="Luxembourg"}, ["LV"] = {alpha3="LVA",numeric="428",name="Latvia"}, ["LY"] = {alpha3="LBY",numeric="434",name="Libya"}, ["MA"] = {alpha3="MAR",numeric="504",name="Morocco"}, ["MC"] = {alpha3="MCO",numeric="492",name="Monaco"}, ["MD"] = {alpha3="MDA",numeric="498",name="Moldova",isoname="Moldova, Republic of"}, ["ME"] = {alpha3="MNE",numeric="499",name="Montenegro"}, ["MF"] = {alpha3="MAF",numeric="663",name="Saint-Martin",isoname="Saint Martin (French part)",altnames={"Saint–Martin", "St Martin","St Martin (French part)","Collectivity of Saint Martin","Collectivity of St Martin"}}, ["MG"] = {alpha3="MDG",numeric="450",name="Madagascar"}, ["MH"] = {alpha3="MHL",numeric="584",name="Marshall Islands"}, ["MK"] = {alpha3="MKD",numeric="807",name="North Macedonia",altnames={"Republic of North Macedonia","Macedonia","Republic of Macedonia","Macedonia, the former Yugoslav Republic of"}}, ["ML"] = {alpha3="MLI",numeric="466",name="Mali"}, ["MM"] = {alpha3="MMR",numeric="104",name="Myanmar",altnames={"Burma"}}, ["MN"] = {alpha3="MNG",numeric="496",name="Mongolia"}, ["MO"] = {alpha3="MAC",numeric="446",name="Macau",isoname="Macao",altnames={"Macau SAR","Macao SAR"}}, ["MP"] = {alpha3="MNP",numeric="580",name="Northern Mariana Islands"}, ["MQ"] = {alpha3="MTQ",numeric="474",name="Martinique"}, ["MR"] = {alpha3="MRT",numeric="478",name="Mauritania"}, ["MS"] = {alpha3="MSR",numeric="500",name="Montserrat"}, ["MT"] = {alpha3="MLT",numeric="470",name="Malta"}, ["MU"] = {alpha3="MUS",numeric="480",name="Mauritius"}, ["MV"] = {alpha3="MDV",numeric="462",name="Maldives"}, ["MW"] = {alpha3="MWI",numeric="454",name="Malawi"}, ["MX"] = {alpha3="MEX",numeric="484",name="Mexico"}, ["MY"] = {alpha3="MYS",numeric="458",name="Malaysia"}, ["MZ"] = {alpha3="MOZ",numeric="508",name="Mozambique"}, ["NA"] = {alpha3="NAM",numeric="516",name="Namibia"}, ["NC"] = {alpha3="NCL",numeric="540",name="New Caledonia"}, ["NE"] = {alpha3="NER",numeric="562",name="Niger"}, ["NF"] = {alpha3="NFK",numeric="574",name="Norfolk Island"}, ["NG"] = {alpha3="NGA",numeric="566",name="Nigeria"}, ["NI"] = {alpha3="NIC",numeric="558",name="Nicaragua"}, ["NL"] = {alpha3="NLD",numeric="528",name="Netherlands"}, ["NO"] = {alpha3="NOR",numeric="578",name="Norway"}, ["NP"] = {alpha3="NPL",numeric="524",name="Nepal"}, ["NR"] = {alpha3="NRU",numeric="520",name="Nauru"}, ["NU"] = {alpha3="NIU",numeric="570",name="Niue"}, ["NZ"] = {alpha3="NZL",numeric="554",name="New Zealand",altnames={"Aotearoa"}}, ["OM"] = {alpha3="OMN",numeric="512",name="Oman"}, ["PA"] = {alpha3="PAN",numeric="591",name="Panama"}, ["PE"] = {alpha3="PER",numeric="604",name="Peru"}, ["PF"] = {alpha3="PYF",numeric="258",name="French Polynesia"}, ["PG"] = {alpha3="PNG",numeric="598",name="Papua New Guinea"}, ["PH"] = {alpha3="PHL",numeric="608",name="Philippines"}, ["PK"] = {alpha3="PAK",numeric="586",name="Pakistan"}, ["PL"] = {alpha3="POL",numeric="616",name="Poland"}, ["PM"] = {alpha3="SPM",numeric="666",name="Saint Pierre and Miquelon",altnames={"St Pierre and Miquelon"}}, ["PN"] = {alpha3="PCN",numeric="612",name="Pitcairn"}, ["PR"] = {alpha3="PRI",numeric="630",name="Puerto Rico"}, ["PS"] = {alpha3="PSE",numeric="275",name="Palestine",isoname="Palestine, State of",altnames={"State of Palestine"}}, ["PT"] = {alpha3="PRT",numeric="620",name="Portugal"}, ["PW"] = {alpha3="PLW",numeric="585",name="Palau"}, ["PY"] = {alpha3="PRY",numeric="600",name="Paraguay"}, ["QA"] = {alpha3="QAT",numeric="634",name="Qatar"}, ["RE"] = {alpha3="REU",numeric="638",name="Réunion"}, ["RO"] = {alpha3="ROU",numeric="642",name="Romania"}, ["RS"] = {alpha3="SRB",numeric="688",name="Serbia"}, ["RU"] = {alpha3="RUS",numeric="643",name="Russia",isoname="Russian Federation"}, ["RW"] = {alpha3="RWA",numeric="646",name="Rwanda"}, ["SA"] = {alpha3="SAU",numeric="682",name="Saudi Arabia"}, ["SB"] = {alpha3="SLB",numeric="090",name="Solomon Islands"}, ["SC"] = {alpha3="SYC",numeric="690",name="Seychelles"}, ["SD"] = {alpha3="SDN",numeric="729",name="Sudan"}, ["SE"] = {alpha3="SWE",numeric="752",name="Sweden"}, ["SG"] = {alpha3="SGP",numeric="702",name="Singapore"}, ["SH"] = {alpha3="SHN",numeric="654",name="Saint Helena, Ascension and Tristan da Cunha"}, ["SI"] = {alpha3="SVN",numeric="705",name="Slovenia"}, ["SJ"] = {alpha3="SJM",numeric="744",name="Svalbard and Jan Mayen"}, ["SK"] = {alpha3="SVK",numeric="703",name="Slovakia"}, ["SL"] = {alpha3="SLE",numeric="694",name="Sierra Leone"}, ["SM"] = {alpha3="SMR",numeric="674",name="San Marino"}, ["SN"] = {alpha3="SEN",numeric="686",name="Senegal"}, ["SO"] = {alpha3="SOM",numeric="706",name="Somalia"}, ["SR"] = {alpha3="SUR",numeric="740",name="Suriname"}, ["SS"] = {alpha3="SSD",numeric="728",name="South Sudan"}, ["ST"] = {alpha3="STP",numeric="678",name="São Tomé and Príncipe",isoname="Sao Tome and Principe",altnames={"Democratic Republic of Sao Tome and Principe"}}, ["SV"] = {alpha3="SLV",numeric="222",name="El Salvador"}, ["SX"] = {alpha3="SXM",numeric="534",name="Sint Maarten",isoname="Sint Maarten (Dutch part)",altnames={"St Maarten","Saint Martin (Dutch part)","St Martin (Dutch part)"}}, ["SY"] = {alpha3="SYR",numeric="760",name="Syria",isoname="Syrian Arab Republic"}, ["SZ"] = {alpha3="SWZ",numeric="748",name="Eswatini",altnames={"Swaziland"}}, ["TC"] = {alpha3="TCA",numeric="796",name="Turks and Caicos Islands"}, ["TD"] = {alpha3="TCD",numeric="148",name="Chad"}, ["TF"] = {alpha3="ATF",numeric="260",name="French Southern and Antarctic Lands",isoname="French Southern Territories"}, ["TG"] = {alpha3="TGO",numeric="768",name="Togo"}, ["TH"] = {alpha3="THA",numeric="764",name="Thailand"}, ["TJ"] = {alpha3="TJK",numeric="762",name="Tajikistan"}, ["TK"] = {alpha3="TKL",numeric="772",name="Tokelau"}, ["TL"] = {alpha3="TLS",numeric="626",name="Timor-Leste",altnames={"East Timor", "Timor–Leste"}}, ["TM"] = {alpha3="TKM",numeric="795",name="Turkmenistan"}, ["TN"] = {alpha3="TUN",numeric="788",name="Tunisia"}, ["TO"] = {alpha3="TON",numeric="776",name="Tonga"}, ["TR"] = {alpha3="TUR",numeric="792",name="Turkey",isoname="Türkiye"}, ["TT"] = {alpha3="TTO",numeric="780",name="Trinidad and Tobago"}, ["TV"] = {alpha3="TUV",numeric="798",name="Tuvalu"}, ["TW"] = {alpha3="TWN",numeric="158",name="Taiwan",isoname="Taiwan, Province of China",altnames={"Republic of China"}}, ["TZ"] = {alpha3="TZA",numeric="834",name="Tanzania",isoname="Tanzania, United Republic of"}, ["UA"] = {alpha3="UKR",numeric="804",name="Ukraine"}, ["UG"] = {alpha3="UGA",numeric="800",name="Uganda"}, ["UM"] = {alpha3="UMI",numeric="581",name="United States Minor Outlying Islands"}, ["US"] = {alpha3="USA",numeric="840",name="United States",isoname="United States of America",altnames={"US","USA","U.S."}}, ["UY"] = {alpha3="URY",numeric="858",name="Uruguay"}, ["UZ"] = {alpha3="UZB",numeric="860",name="Uzbekistan"}, ["VA"] = {alpha3="VAT",numeric="336",name="Vatican City",isoname="Holy See",altnames={"Holy See (Vatican City State)","Vatican City State"}}, ["VC"] = {alpha3="VCT",numeric="670",name="Saint Vincent and the Grenadines",altnames={"St Vincent and the Grenadines"}}, ["VE"] = {alpha3="VEN",numeric="862",name="Venezuela",isoname="Venezuela, Bolivarian Republic of"}, ["VG"] = {alpha3="VGB",numeric="092",name="British Virgin Islands",isoname="Virgin Islands (British)",altnames={"UK Virgin Islands","BVI"}}, ["VI"] = {alpha3="VIR",numeric="850",name="United States Virgin Islands",isoname="Virgin Islands (U.S.)",altnames={"US Virgin Islands","USVI"}}, ["VN"] = {alpha3="VNM",numeric="704",name="Vietnam",isoname="Viet Nam"}, ["VU"] = {alpha3="VUT",numeric="548",name="Vanuatu"}, ["WF"] = {alpha3="WLF",numeric="876",name="Wallis and Futuna"}, ["WS"] = {alpha3="WSM",numeric="882",name="Samoa"}, ["XK"] = {alpha3="XKX",numeric="926",name="Kosovo",isoname="Republic of Kosovo",altnames={"XXK", "UNK"}}, ["YE"] = {alpha3="YEM",numeric="887",name="Yemen"}, ["YT"] = {alpha3="MYT",numeric="175",name="Mayotte"}, ["ZA"] = {alpha3="ZAF",numeric="710",name="South Africa"}, ["ZM"] = {alpha3="ZMB",numeric="894",name="Zambia"}, ["ZW"] = {alpha3="ZWE",numeric="716",name="Zimbabwe"} } s208xsrv2ah7uurorwdwaouj83yexck Module:Location map 828 122507 746183 733248 2026-05-26T06:47:54Z en>Jonesey95 0 Update tright and tleft per Tech news; see [[WP:VPT]] today 746183 Scribunto text/plain require('strict') local p = {} local getArgs = require('Module:Arguments').getArgs local function round(n, decimals) local pow = 10^(decimals or 0) return math.floor(n * pow + 0.5) / pow end function p.getMapParams(map, frame) if not map then error('The name of the location map definition to use must be specified', 2) end local moduletitle = mw.title.new('Module:Location map/data/' .. map) if not moduletitle then error(string.format('%q is not a valid name for a location map definition', map), 2) elseif moduletitle.exists then local mapData = mw.loadData('Module:Location map/data/' .. map) return function(name, params) if name == nil then return 'Module:Location map/data/' .. map elseif mapData[name] == nil then return '' elseif params then return mw.message.newRawMessage(tostring(mapData[name]), unpack(params)):plain() else return mapData[name] end end else error('Unable to find the specified location map definition: "Module:Location map/data/' .. map .. '" does not exist', 2) end end function p.data(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true}) end if not map then map = p.getMapParams(args[1], frame) end local params = {} for k,v in ipairs(args) do if k > 2 then params[k-2] = v end end return map(args[2], #params ~= 0 and params) end local hemisphereMultipliers = { longitude = { W = -1, w = -1, E = 1, e = 1 }, latitude = { S = -1, s = -1, N = 1, n = 1 } } local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction) if decimal then if degrees then error('Decimal and DMS degrees cannot both be provided for ' .. direction, 2) elseif minutes then error('Minutes can only be provided with DMS degrees for ' .. direction, 2) elseif seconds then error('Seconds can only be provided with DMS degrees for ' .. direction, 2) elseif hemisphere then error('A hemisphere can only be provided with DMS degrees for ' .. direction, 2) end local retval = tonumber(decimal) if retval then return retval end error('The value "' .. decimal .. '" provided for ' .. direction .. ' is not valid', 2) elseif seconds and not minutes then error('Seconds were provided for ' .. direction .. ' without minutes also being provided', 2) elseif not degrees then if minutes then error('Minutes were provided for ' .. direction .. ' without degrees also being provided', 2) elseif hemisphere then error('A hemisphere was provided for ' .. direction .. ' without degrees also being provided', 2) end return nil end decimal = tonumber(degrees) if not decimal then error('The degree value "' .. degrees .. '" provided for ' .. direction .. ' is not valid', 2) elseif minutes and not tonumber(minutes) then error('The minute value "' .. minutes .. '" provided for ' .. direction .. ' is not valid', 2) elseif seconds and not tonumber(seconds) then error('The second value "' .. seconds .. '" provided for ' .. direction .. ' is not valid', 2) end decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600 if hemisphere then local multiplier = hemisphereMultipliers[direction][hemisphere] if not multiplier then error('The hemisphere "' .. hemisphere .. '" provided for ' .. direction .. ' is not valid', 2) end decimal = decimal * multiplier end return decimal end -- Finds a parameter in a transclusion of {{Coord}}. local function coord2text(para,coord) -- this should be changed for languages which do not use Arabic numerals or the degree sign local lat, long = mw.ustring.match(coord,'<span class="p%-latitude latitude">([^<]+)</span><span class="p%-longitude longitude">([^<]+)</span>') if lat then return tonumber(para == 'longitude' and long or lat) end local result = mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NS] %-?[%.%d]+°[EW]') or '', '[ °]') if para == 'longitude' then result = {result[3], result[4]} end if not tonumber(result[1]) or not result[2] then mw.log('Malformed coordinates value') mw.logObject(para, 'para') mw.logObject(coord, 'coord') return error('Malformed coordinates value', 2) end return tonumber(result[1]) * hemisphereMultipliers[para][result[2]] end -- effectively make removeBlanks false for caption and maplink, and true for everything else -- if useWikidata is present but blank, convert it to false instead of nil -- p.top, p.bottom, and their callers need to use this function p.valueFunc(key, value) if value then value = mw.text.trim(value) end if value ~= '' or key == 'caption' or key == 'maplink' then return value elseif key == 'useWikidata' then return false end end local function getContainerImage(args, map) if args.AlternativeMap then return args.AlternativeMap elseif args.relief then local digits = mw.ustring.match(args.relief,'^[1-9][0-9]?$') or '1' -- image1 to image99 if map('image' .. digits) ~= '' then return map('image' .. digits) end end return map('image') end function p.top(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end local width local default_as_number = tonumber(mw.ustring.match(tostring(args.default_width),"%d*")) if not args.width then width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1)) elseif mw.ustring.sub(args.width, -2) == 'px' then width = mw.ustring.sub(args.width, 1, -3) else width = args.width end local width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0; if width_as_number == 0 then -- check to see if width is junk. If it is, then use default calculation width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1)) width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0; end if args.max_width ~= "" and args.max_width ~= nil then -- check to see if width bigger than max_width local max_as_number = tonumber(mw.ustring.match(args.max_width,"%d*")) or 0; if width_as_number>max_as_number and max_as_number>0 then width = args.max_width; end end local retval = frame:extensionTag{name = 'templatestyles', args = {src = 'Module:Location map/styles.css'}} if args.float == 'center' then retval = retval .. '<div class="center">' end if args.caption and args.caption ~= '' and args.border ~= 'infobox' then retval = retval .. '<div class="locmap noresize thumb ' if args.float == '"left"' or args.float == 'left' then retval = retval .. 'floatleft' elseif args.float == '"center"' or args.float == 'center' or args.float == '"none"' or args.float == 'none' then retval = retval .. 'tnone' else retval = retval .. 'floatright' end retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px' if args.border == 'none' then retval = retval .. ';border:none' elseif args.border then retval = retval .. ';border-color:' .. args.border end retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (args.border ~= 'none' and ';border:1px solid lightgray">' or '">') else retval = retval .. '<div class="locmap" style="width:' .. width .. 'px;' if args.float == '"left"' or args.float == 'left' then retval = retval .. 'float:left;clear:left' elseif args.float == '"center"' or args.float == 'center' then retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto' elseif args.float == '"none"' or args.float == 'none' then retval = retval .. 'float:none;clear:none' else retval = retval .. 'float:right;clear:right' end retval = retval .. '"><div style="width:' .. width .. 'px;padding:0"><div style="position:relative;width:' .. width .. 'px">' end local image = getContainerImage(args, map) local currentTitle = mw.title.getCurrentTitle() retval = string.format( '%s[[File:%s|%spx|%s%s|class=notpageimage noviewer]]', retval, image, width, args.alt or ((args.label or currentTitle.text) .. ' is located in ' .. map('name')), args.maplink and ('|link=' .. args.maplink) or '' ) if args.caption and args.caption ~= '' then if (currentTitle.namespace == 0) and mw.ustring.find(args.caption, '##') then retval = retval .. '[[Category:Pages using location map with a double number sign in the caption]]' end end if args.overlay_image then return retval .. '<div style="position:absolute;top:0;left:0">[[File:' .. args.overlay_image .. '|' .. width .. 'px|class=notpageimage noviewer]]</div>' else return retval end end function p.bottom(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end local retval = '</div>' local currentTitle = mw.title.getCurrentTitle() if not args.caption or args.border == 'infobox' then if args.border then retval = retval .. '<div style="padding-top:0.2em">' else retval = retval .. '<div style="font-size:91%;padding-top:3px">' end retval = retval .. (args.caption or (args.label or currentTitle.text) .. ' (' .. map('name') .. ')') .. '</div>' elseif args.caption ~= '' then -- This is not the pipe trick. We're creating a link with no text on purpose, so that CSS can give us a nice image retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:File:' .. getContainerImage(args, map) .. '| ]]</div>' .. args.caption .. '</div>' end if args.switcherLabel then retval = retval .. '<span class="switcher-label" style="display:none">' .. args.switcherLabel .. '</span>' elseif args.autoSwitcherLabel then retval = retval .. '<span class="switcher-label" style="display:none">Show map of ' .. map('name') .. '</span>' end retval = retval .. '</div></div>' if args.caption_undefined then mw.log('Removed parameter caption_undefined used.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then retval = retval .. '[[Category:Location maps with removed parameters|caption_undefined]]' end end if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then mw.log('Removed parameter used in map definition ' .. map()) if currentTitle.namespace == 0 then local key = (map('skew') ~= '' and 'skew' or '') .. (map('lat_skew') ~= '' and 'lat_skew' or '') .. (map('crosses180') ~= '' and 'crosses180' or '') .. (map('type') ~= '' and 'type' or '') retval = retval .. '[[Category:Location maps with removed parameters|' .. key .. ' ]]' end end if string.find(map('name'), '|', 1, true) then mw.log('Pipe used in name of map definition ' .. map()) if currentTitle.namespace == 0 then retval = retval .. '[[Category:Location maps with a name containing a pipe]]' end end if args.float == 'center' then retval = retval .. '</div>' end return retval end local function markOuterDiv(x, y, imageDiv, labelDiv, label_size) return mw.html.create('div') :addClass('od') :addClass('notheme') -- T236137 :cssText('top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%;font-size:' .. label_size .. '%') :node(imageDiv) :node(labelDiv) end local function markImageDiv(mark, marksize, label, link, alt, title) local builder = mw.html.create('div') :addClass('id') :cssText('left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px') :attr('title', title) if marksize ~= 0 then builder:wikitext(string.format( '[[File:%s|%dx%dpx|%s|link=%s%s|class=notpageimage noviewer]]', mark, marksize, marksize, label, link, alt and ('|alt=' .. alt) or '' )) end return builder end local function markLabelDiv(label, label_size, label_width, position, background, x, marksize) if tonumber(label_size) == 0 then return mw.html.create('div'):addClass('l0'):wikitext(label) end local builder = mw.html.create('div') :cssText('width:' .. label_width .. 'em') local distance = round(marksize / 2 + 1) if position == 'top' then -- specified top builder:addClass('pv'):cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em') elseif position == 'bottom' then -- specified bottom builder:addClass('pv'):cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em') elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left builder:addClass('pl'):cssText('right:' .. distance .. 'px') else -- specified right or autodetected to right builder:addClass('pr'):cssText('left:' .. distance .. 'px') end builder = builder:tag('div') :wikitext(label) if background then builder:cssText('background-color:' .. background) end return builder:done() end local function getX(longitude, left, right) local width = (right - left) % 360 if width == 0 then width = 360 end local distanceFromLeft = (longitude - left) % 360 -- the distance needed past the map to the right equals distanceFromLeft - width. the distance needed past the map to the left equals 360 - distanceFromLeft. to minimize page stretching, go whichever way is shorter if distanceFromLeft - width / 2 >= 180 then distanceFromLeft = distanceFromLeft - 360 end return 100 * distanceFromLeft / width end local function getY(latitude, top, bottom) return 100 * (top - latitude) / (top - bottom) end function p.mark(frame, args, map) if not args then args = getArgs(frame, {wrappers = 'Template:Location map~'}) end local mapnames = {} if not map then if args[1] then map = {} for mapname in mw.text.gsplit(args[1], '#', true) do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) mapnames[#mapnames + 1] = mapname end if #map == 1 then map = map[1] end else map = p.getMapParams('World', frame) args[1] = 'World' end end if type(map) == 'table' then local outputs = {} local oldargs = args[1] for k,v in ipairs(map) do args[1] = mapnames[k] outputs[k] = tostring(p.mark(frame, args, v)) end args[1] = oldargs return table.concat(outputs, '#PlaceList#') .. '#PlaceList#' end local x, y, longitude, latitude longitude = decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, args.long, 'longitude') latitude = decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, args.lat, 'latitude') if args.excludefrom then -- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps) for exclusionmap in mw.text.gsplit(args.excludefrom, '#', true) do -- Check if this map is excluded. If so, return an empty string. if args[1] == exclusionmap then return '' end end end local builder = mw.html.create() local currentTitle = mw.title.getCurrentTitle() if args.coordinates then -- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]] -- if longitude or latitude then -- error('Coordinates from [[Module:Coordinates]] and individual coordinates cannot both be provided') -- end longitude = coord2text('longitude', args.coordinates) latitude = coord2text('latitude', args.coordinates) elseif not longitude and not latitude and args.useWikidata then -- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't. local entity = mw.wikibase.getEntity() if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then local value = entity.claims.P625[1].mainsnak.datavalue.value longitude, latitude = value.longitude, value.latitude end if args.link and (currentTitle.namespace == 0) then builder:wikitext('[[Category:Location maps with linked markers with coordinates from Wikidata]]') end end if not longitude then error('No value was provided for longitude') elseif not latitude then error('No value was provided for latitude') end if currentTitle.namespace > 0 then if (not args.lon_deg) ~= (not args.lat_deg) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Degrees]]') elseif (not args.lon_min) ~= (not args.lat_min) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Minutes]]') elseif (not args.lon_sec) ~= (not args.lat_sec) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Seconds]]') elseif (not args.lon_dir) ~= (not args.lat_dir) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Hemisphere]]') elseif (not args.long) ~= (not args.lat) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Decimal]]') end end if ((tonumber(args.lat_deg) or 0) < 0) and ((tonumber(args.lat_min) or 0) ~= 0 or (tonumber(args.lat_sec) or 0) ~= 0 or (args.lat_dir and args.lat_dir ~='')) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if ((tonumber(args.lon_deg) or 0) < 0) and ((tonumber(args.lon_min) or 0) ~= 0 or (tonumber(args.lon_sec) or 0) ~= 0 or (args.lon_dir and args.lon_dir ~= '')) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if (((tonumber(args.lat_min) or 0) < 0) or ((tonumber(args.lat_sec) or 0) < 0)) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if (((tonumber(args.lon_min) or 0) < 0) or ((tonumber(args.lon_sec) or 0) < 0)) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if args.skew or args.lon_shift or args.markhigh then mw.log('Removed parameter used in invocation.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then local key = (args.skew and 'skew' or '') .. (args.lon_shift and 'lon_shift' or '') .. (args.markhigh and 'markhigh' or '') builder:wikitext('[[Category:Location maps with removed parameters|' .. key ..' ]]') end end if map('x') ~= '' then x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude }))) else x = tonumber(getX(longitude, map('left'), map('right'))) end if map('y') ~= '' then y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude }))) else y = tonumber(getY(latitude, map('top'), map('bottom'))) end if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then mw.log('Mark placed outside map boundaries without outside flag set. x = ' .. x .. ', y = ' .. y) local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then local key = currentTitle.prefixedText builder:wikitext('[[Category:Location maps with marks outside map and outside parameter not set|' .. key .. ' ]]') end end local mark = args.mark or map('mark') if mark == '' then mark = 'Red pog.svg' end local marksize = tonumber(args.marksize) or tonumber(map('marksize')) or 8 local imageDiv = markImageDiv(mark, marksize, args.label or mw.title.getCurrentTitle().text, args.link or '', args.alt, args[2]) local label_size = args.label_size or 91 local labelDiv if args.label and args.position ~= 'none' then labelDiv = markLabelDiv(args.label, label_size, args.label_width or 6, args.position, args.background, x, marksize) end return builder:node(markOuterDiv(x, y, imageDiv, labelDiv, label_size)) end local function switcherSeparate(s) if s == nil then return {} end local retval = {} for i in string.gmatch(s .. '#', '([^#]*)#') do i = mw.text.trim(i) retval[#retval + 1] = (i ~= '' and i) end return retval end function p.main(frame, args, map) local caption_list = {} if not args then args = getArgs(frame, {wrappers = 'Template:Location map', valueFunc = p.valueFunc}) end if args.useWikidata == nil then args.useWikidata = true end if not map then if args[1] then map = {} for mapname in string.gmatch(args[1], '[^#]+') do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) end if args['caption'] then if args['caption'] == "" then while #caption_list < #map do caption_list[#caption_list + 1] = args['caption'] end else for caption in mw.text.gsplit(args['caption'], '##', true) do caption_list[#caption_list + 1] = caption end end end if #map == 1 then map = map[1] end else map = p.getMapParams('World', frame) end end if type(map) == 'table' then local altmaps = switcherSeparate(args.AlternativeMap) if #altmaps > #map then error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map)) end local overlays = switcherSeparate(args.overlay_image) if #overlays > #map then error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map)) end if #caption_list > #map then error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map)) end local outputs = {} args.autoSwitcherLabel = true for k,v in ipairs(map) do args.AlternativeMap = altmaps[k] args.overlay_image = overlays[k] args.caption = caption_list[k] outputs[k] = p.main(frame, args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' else return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map) end end return p syktp1i03qwxjbvix5bjynetsaw4ld6 746184 746183 2026-06-12T21:51:57Z Robertsky 51025 1 revision imported from [[:en:Module:Location_map]]: for workshop activity 746183 Scribunto text/plain require('strict') local p = {} local getArgs = require('Module:Arguments').getArgs local function round(n, decimals) local pow = 10^(decimals or 0) return math.floor(n * pow + 0.5) / pow end function p.getMapParams(map, frame) if not map then error('The name of the location map definition to use must be specified', 2) end local moduletitle = mw.title.new('Module:Location map/data/' .. map) if not moduletitle then error(string.format('%q is not a valid name for a location map definition', map), 2) elseif moduletitle.exists then local mapData = mw.loadData('Module:Location map/data/' .. map) return function(name, params) if name == nil then return 'Module:Location map/data/' .. map elseif mapData[name] == nil then return '' elseif params then return mw.message.newRawMessage(tostring(mapData[name]), unpack(params)):plain() else return mapData[name] end end else error('Unable to find the specified location map definition: "Module:Location map/data/' .. map .. '" does not exist', 2) end end function p.data(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true}) end if not map then map = p.getMapParams(args[1], frame) end local params = {} for k,v in ipairs(args) do if k > 2 then params[k-2] = v end end return map(args[2], #params ~= 0 and params) end local hemisphereMultipliers = { longitude = { W = -1, w = -1, E = 1, e = 1 }, latitude = { S = -1, s = -1, N = 1, n = 1 } } local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction) if decimal then if degrees then error('Decimal and DMS degrees cannot both be provided for ' .. direction, 2) elseif minutes then error('Minutes can only be provided with DMS degrees for ' .. direction, 2) elseif seconds then error('Seconds can only be provided with DMS degrees for ' .. direction, 2) elseif hemisphere then error('A hemisphere can only be provided with DMS degrees for ' .. direction, 2) end local retval = tonumber(decimal) if retval then return retval end error('The value "' .. decimal .. '" provided for ' .. direction .. ' is not valid', 2) elseif seconds and not minutes then error('Seconds were provided for ' .. direction .. ' without minutes also being provided', 2) elseif not degrees then if minutes then error('Minutes were provided for ' .. direction .. ' without degrees also being provided', 2) elseif hemisphere then error('A hemisphere was provided for ' .. direction .. ' without degrees also being provided', 2) end return nil end decimal = tonumber(degrees) if not decimal then error('The degree value "' .. degrees .. '" provided for ' .. direction .. ' is not valid', 2) elseif minutes and not tonumber(minutes) then error('The minute value "' .. minutes .. '" provided for ' .. direction .. ' is not valid', 2) elseif seconds and not tonumber(seconds) then error('The second value "' .. seconds .. '" provided for ' .. direction .. ' is not valid', 2) end decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600 if hemisphere then local multiplier = hemisphereMultipliers[direction][hemisphere] if not multiplier then error('The hemisphere "' .. hemisphere .. '" provided for ' .. direction .. ' is not valid', 2) end decimal = decimal * multiplier end return decimal end -- Finds a parameter in a transclusion of {{Coord}}. local function coord2text(para,coord) -- this should be changed for languages which do not use Arabic numerals or the degree sign local lat, long = mw.ustring.match(coord,'<span class="p%-latitude latitude">([^<]+)</span><span class="p%-longitude longitude">([^<]+)</span>') if lat then return tonumber(para == 'longitude' and long or lat) end local result = mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NS] %-?[%.%d]+°[EW]') or '', '[ °]') if para == 'longitude' then result = {result[3], result[4]} end if not tonumber(result[1]) or not result[2] then mw.log('Malformed coordinates value') mw.logObject(para, 'para') mw.logObject(coord, 'coord') return error('Malformed coordinates value', 2) end return tonumber(result[1]) * hemisphereMultipliers[para][result[2]] end -- effectively make removeBlanks false for caption and maplink, and true for everything else -- if useWikidata is present but blank, convert it to false instead of nil -- p.top, p.bottom, and their callers need to use this function p.valueFunc(key, value) if value then value = mw.text.trim(value) end if value ~= '' or key == 'caption' or key == 'maplink' then return value elseif key == 'useWikidata' then return false end end local function getContainerImage(args, map) if args.AlternativeMap then return args.AlternativeMap elseif args.relief then local digits = mw.ustring.match(args.relief,'^[1-9][0-9]?$') or '1' -- image1 to image99 if map('image' .. digits) ~= '' then return map('image' .. digits) end end return map('image') end function p.top(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end local width local default_as_number = tonumber(mw.ustring.match(tostring(args.default_width),"%d*")) if not args.width then width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1)) elseif mw.ustring.sub(args.width, -2) == 'px' then width = mw.ustring.sub(args.width, 1, -3) else width = args.width end local width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0; if width_as_number == 0 then -- check to see if width is junk. If it is, then use default calculation width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1)) width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0; end if args.max_width ~= "" and args.max_width ~= nil then -- check to see if width bigger than max_width local max_as_number = tonumber(mw.ustring.match(args.max_width,"%d*")) or 0; if width_as_number>max_as_number and max_as_number>0 then width = args.max_width; end end local retval = frame:extensionTag{name = 'templatestyles', args = {src = 'Module:Location map/styles.css'}} if args.float == 'center' then retval = retval .. '<div class="center">' end if args.caption and args.caption ~= '' and args.border ~= 'infobox' then retval = retval .. '<div class="locmap noresize thumb ' if args.float == '"left"' or args.float == 'left' then retval = retval .. 'floatleft' elseif args.float == '"center"' or args.float == 'center' or args.float == '"none"' or args.float == 'none' then retval = retval .. 'tnone' else retval = retval .. 'floatright' end retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px' if args.border == 'none' then retval = retval .. ';border:none' elseif args.border then retval = retval .. ';border-color:' .. args.border end retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (args.border ~= 'none' and ';border:1px solid lightgray">' or '">') else retval = retval .. '<div class="locmap" style="width:' .. width .. 'px;' if args.float == '"left"' or args.float == 'left' then retval = retval .. 'float:left;clear:left' elseif args.float == '"center"' or args.float == 'center' then retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto' elseif args.float == '"none"' or args.float == 'none' then retval = retval .. 'float:none;clear:none' else retval = retval .. 'float:right;clear:right' end retval = retval .. '"><div style="width:' .. width .. 'px;padding:0"><div style="position:relative;width:' .. width .. 'px">' end local image = getContainerImage(args, map) local currentTitle = mw.title.getCurrentTitle() retval = string.format( '%s[[File:%s|%spx|%s%s|class=notpageimage noviewer]]', retval, image, width, args.alt or ((args.label or currentTitle.text) .. ' is located in ' .. map('name')), args.maplink and ('|link=' .. args.maplink) or '' ) if args.caption and args.caption ~= '' then if (currentTitle.namespace == 0) and mw.ustring.find(args.caption, '##') then retval = retval .. '[[Category:Pages using location map with a double number sign in the caption]]' end end if args.overlay_image then return retval .. '<div style="position:absolute;top:0;left:0">[[File:' .. args.overlay_image .. '|' .. width .. 'px|class=notpageimage noviewer]]</div>' else return retval end end function p.bottom(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end local retval = '</div>' local currentTitle = mw.title.getCurrentTitle() if not args.caption or args.border == 'infobox' then if args.border then retval = retval .. '<div style="padding-top:0.2em">' else retval = retval .. '<div style="font-size:91%;padding-top:3px">' end retval = retval .. (args.caption or (args.label or currentTitle.text) .. ' (' .. map('name') .. ')') .. '</div>' elseif args.caption ~= '' then -- This is not the pipe trick. We're creating a link with no text on purpose, so that CSS can give us a nice image retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:File:' .. getContainerImage(args, map) .. '| ]]</div>' .. args.caption .. '</div>' end if args.switcherLabel then retval = retval .. '<span class="switcher-label" style="display:none">' .. args.switcherLabel .. '</span>' elseif args.autoSwitcherLabel then retval = retval .. '<span class="switcher-label" style="display:none">Show map of ' .. map('name') .. '</span>' end retval = retval .. '</div></div>' if args.caption_undefined then mw.log('Removed parameter caption_undefined used.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then retval = retval .. '[[Category:Location maps with removed parameters|caption_undefined]]' end end if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then mw.log('Removed parameter used in map definition ' .. map()) if currentTitle.namespace == 0 then local key = (map('skew') ~= '' and 'skew' or '') .. (map('lat_skew') ~= '' and 'lat_skew' or '') .. (map('crosses180') ~= '' and 'crosses180' or '') .. (map('type') ~= '' and 'type' or '') retval = retval .. '[[Category:Location maps with removed parameters|' .. key .. ' ]]' end end if string.find(map('name'), '|', 1, true) then mw.log('Pipe used in name of map definition ' .. map()) if currentTitle.namespace == 0 then retval = retval .. '[[Category:Location maps with a name containing a pipe]]' end end if args.float == 'center' then retval = retval .. '</div>' end return retval end local function markOuterDiv(x, y, imageDiv, labelDiv, label_size) return mw.html.create('div') :addClass('od') :addClass('notheme') -- T236137 :cssText('top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%;font-size:' .. label_size .. '%') :node(imageDiv) :node(labelDiv) end local function markImageDiv(mark, marksize, label, link, alt, title) local builder = mw.html.create('div') :addClass('id') :cssText('left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px') :attr('title', title) if marksize ~= 0 then builder:wikitext(string.format( '[[File:%s|%dx%dpx|%s|link=%s%s|class=notpageimage noviewer]]', mark, marksize, marksize, label, link, alt and ('|alt=' .. alt) or '' )) end return builder end local function markLabelDiv(label, label_size, label_width, position, background, x, marksize) if tonumber(label_size) == 0 then return mw.html.create('div'):addClass('l0'):wikitext(label) end local builder = mw.html.create('div') :cssText('width:' .. label_width .. 'em') local distance = round(marksize / 2 + 1) if position == 'top' then -- specified top builder:addClass('pv'):cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em') elseif position == 'bottom' then -- specified bottom builder:addClass('pv'):cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em') elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left builder:addClass('pl'):cssText('right:' .. distance .. 'px') else -- specified right or autodetected to right builder:addClass('pr'):cssText('left:' .. distance .. 'px') end builder = builder:tag('div') :wikitext(label) if background then builder:cssText('background-color:' .. background) end return builder:done() end local function getX(longitude, left, right) local width = (right - left) % 360 if width == 0 then width = 360 end local distanceFromLeft = (longitude - left) % 360 -- the distance needed past the map to the right equals distanceFromLeft - width. the distance needed past the map to the left equals 360 - distanceFromLeft. to minimize page stretching, go whichever way is shorter if distanceFromLeft - width / 2 >= 180 then distanceFromLeft = distanceFromLeft - 360 end return 100 * distanceFromLeft / width end local function getY(latitude, top, bottom) return 100 * (top - latitude) / (top - bottom) end function p.mark(frame, args, map) if not args then args = getArgs(frame, {wrappers = 'Template:Location map~'}) end local mapnames = {} if not map then if args[1] then map = {} for mapname in mw.text.gsplit(args[1], '#', true) do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) mapnames[#mapnames + 1] = mapname end if #map == 1 then map = map[1] end else map = p.getMapParams('World', frame) args[1] = 'World' end end if type(map) == 'table' then local outputs = {} local oldargs = args[1] for k,v in ipairs(map) do args[1] = mapnames[k] outputs[k] = tostring(p.mark(frame, args, v)) end args[1] = oldargs return table.concat(outputs, '#PlaceList#') .. '#PlaceList#' end local x, y, longitude, latitude longitude = decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, args.long, 'longitude') latitude = decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, args.lat, 'latitude') if args.excludefrom then -- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps) for exclusionmap in mw.text.gsplit(args.excludefrom, '#', true) do -- Check if this map is excluded. If so, return an empty string. if args[1] == exclusionmap then return '' end end end local builder = mw.html.create() local currentTitle = mw.title.getCurrentTitle() if args.coordinates then -- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]] -- if longitude or latitude then -- error('Coordinates from [[Module:Coordinates]] and individual coordinates cannot both be provided') -- end longitude = coord2text('longitude', args.coordinates) latitude = coord2text('latitude', args.coordinates) elseif not longitude and not latitude and args.useWikidata then -- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't. local entity = mw.wikibase.getEntity() if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then local value = entity.claims.P625[1].mainsnak.datavalue.value longitude, latitude = value.longitude, value.latitude end if args.link and (currentTitle.namespace == 0) then builder:wikitext('[[Category:Location maps with linked markers with coordinates from Wikidata]]') end end if not longitude then error('No value was provided for longitude') elseif not latitude then error('No value was provided for latitude') end if currentTitle.namespace > 0 then if (not args.lon_deg) ~= (not args.lat_deg) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Degrees]]') elseif (not args.lon_min) ~= (not args.lat_min) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Minutes]]') elseif (not args.lon_sec) ~= (not args.lat_sec) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Seconds]]') elseif (not args.lon_dir) ~= (not args.lat_dir) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Hemisphere]]') elseif (not args.long) ~= (not args.lat) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Decimal]]') end end if ((tonumber(args.lat_deg) or 0) < 0) and ((tonumber(args.lat_min) or 0) ~= 0 or (tonumber(args.lat_sec) or 0) ~= 0 or (args.lat_dir and args.lat_dir ~='')) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if ((tonumber(args.lon_deg) or 0) < 0) and ((tonumber(args.lon_min) or 0) ~= 0 or (tonumber(args.lon_sec) or 0) ~= 0 or (args.lon_dir and args.lon_dir ~= '')) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if (((tonumber(args.lat_min) or 0) < 0) or ((tonumber(args.lat_sec) or 0) < 0)) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if (((tonumber(args.lon_min) or 0) < 0) or ((tonumber(args.lon_sec) or 0) < 0)) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if args.skew or args.lon_shift or args.markhigh then mw.log('Removed parameter used in invocation.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then local key = (args.skew and 'skew' or '') .. (args.lon_shift and 'lon_shift' or '') .. (args.markhigh and 'markhigh' or '') builder:wikitext('[[Category:Location maps with removed parameters|' .. key ..' ]]') end end if map('x') ~= '' then x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude }))) else x = tonumber(getX(longitude, map('left'), map('right'))) end if map('y') ~= '' then y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude }))) else y = tonumber(getY(latitude, map('top'), map('bottom'))) end if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then mw.log('Mark placed outside map boundaries without outside flag set. x = ' .. x .. ', y = ' .. y) local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then local key = currentTitle.prefixedText builder:wikitext('[[Category:Location maps with marks outside map and outside parameter not set|' .. key .. ' ]]') end end local mark = args.mark or map('mark') if mark == '' then mark = 'Red pog.svg' end local marksize = tonumber(args.marksize) or tonumber(map('marksize')) or 8 local imageDiv = markImageDiv(mark, marksize, args.label or mw.title.getCurrentTitle().text, args.link or '', args.alt, args[2]) local label_size = args.label_size or 91 local labelDiv if args.label and args.position ~= 'none' then labelDiv = markLabelDiv(args.label, label_size, args.label_width or 6, args.position, args.background, x, marksize) end return builder:node(markOuterDiv(x, y, imageDiv, labelDiv, label_size)) end local function switcherSeparate(s) if s == nil then return {} end local retval = {} for i in string.gmatch(s .. '#', '([^#]*)#') do i = mw.text.trim(i) retval[#retval + 1] = (i ~= '' and i) end return retval end function p.main(frame, args, map) local caption_list = {} if not args then args = getArgs(frame, {wrappers = 'Template:Location map', valueFunc = p.valueFunc}) end if args.useWikidata == nil then args.useWikidata = true end if not map then if args[1] then map = {} for mapname in string.gmatch(args[1], '[^#]+') do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) end if args['caption'] then if args['caption'] == "" then while #caption_list < #map do caption_list[#caption_list + 1] = args['caption'] end else for caption in mw.text.gsplit(args['caption'], '##', true) do caption_list[#caption_list + 1] = caption end end end if #map == 1 then map = map[1] end else map = p.getMapParams('World', frame) end end if type(map) == 'table' then local altmaps = switcherSeparate(args.AlternativeMap) if #altmaps > #map then error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map)) end local overlays = switcherSeparate(args.overlay_image) if #overlays > #map then error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map)) end if #caption_list > #map then error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map)) end local outputs = {} args.autoSwitcherLabel = true for k,v in ipairs(map) do args.AlternativeMap = altmaps[k] args.overlay_image = overlays[k] args.caption = caption_list[k] outputs[k] = p.main(frame, args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' else return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map) end end return p syktp1i03qwxjbvix5bjynetsaw4ld6 Talk:Foo 1 123305 746128 653871 2026-06-12T17:52:29Z Trialpears 43074 Notification: [[Wikipedia:Redirects for discussion/Log/2026 June 12#Test redirect|listing]] of [[:Test redirect]] at [[WP:Redirects for discussion]]. 746128 wikitext text/x-wiki Testing subpages, take a look at [[Talk:Foo / bar]] or maybe [[Talk:Foo/bar]] Talk page edit testing [[User:QTE-Test1-WMF|QTE-Test1-WMF]] ([[User talk:QTE-Test1-WMF|talk]]) 16:11, 13 December 2023 (UTC) :@[[User:QTE-Test1-WMF|QTE-Test1-WMF]] test. [[User:Cooltey|Cooltey]] ([[User talk:Cooltey|talk]]) 21:54, 10 July 2024 (UTC) ::[[Special:Contributions/&#126;2025-44370|&#126;2025-44370]] ([[User talk:&#126;2025-44370|talk]]) 20:10, 11 April 2025 (UTC) == Foo == Bar [[Special:Contributions/217.138.206.84|217.138.206.84]] 21:37, 21 December 2021 (UTC) [[File:Dubai Burj Khalifa area 62.jpg | thumb | 220x124px | right]] ==Testing== Here is some text. '''Some''' of it is ''formatted''. <ref>Here is a ref.</ref> [[HelloWorld|Here is a link.]] {{Here is a citation.}} Here is a picture: [[File:Anas rubripes PM3.jpg | thumb | 220x124px | right | Duck]] * list **list1 # numbered ## numbered 1 The replace and replace works. The replace and replace. == test == edit tags [[User:Cooltey|Cooltey]] ([[User talk:Cooltey|talk]]) 21:55, 10 July 2024 (UTC) == Foobar == Hey @[[User:ToadetteEdit|ToadetteEdit]], check out this. [[Special:Contributions/&#126;2024-1652|&#126;2024-1652]] ([[User talk:&#126;2024-1652|talk]]) 13:46, 23 July 2024 (UTC) {{subst:rfd notice|1=Test redirect}} [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) eytm8uqa7ese55e8vjaxyiw4l3240fe 746144 746128 2026-06-12T18:12:59Z Trialpears 43074 Old RFD: [[Wikipedia:Redirects for discussion/Log/2026 June 12#Test redirect]] closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746144 wikitext text/x-wiki {{Old RfD |date=12 June 2026 |result='''no consensus''' |page=2026 June 12#Test redirect}} Testing subpages, take a look at [[Talk:Foo / bar]] or maybe [[Talk:Foo/bar]] Talk page edit testing [[User:QTE-Test1-WMF|QTE-Test1-WMF]] ([[User talk:QTE-Test1-WMF|talk]]) 16:11, 13 December 2023 (UTC) :@[[User:QTE-Test1-WMF|QTE-Test1-WMF]] test. [[User:Cooltey|Cooltey]] ([[User talk:Cooltey|talk]]) 21:54, 10 July 2024 (UTC) ::[[Special:Contributions/&#126;2025-44370|&#126;2025-44370]] ([[User talk:&#126;2025-44370|talk]]) 20:10, 11 April 2025 (UTC) == Foo == Bar [[Special:Contributions/217.138.206.84|217.138.206.84]] 21:37, 21 December 2021 (UTC) [[File:Dubai Burj Khalifa area 62.jpg | thumb | 220x124px | right]] ==Testing== Here is some text. '''Some''' of it is ''formatted''. <ref>Here is a ref.</ref> [[HelloWorld|Here is a link.]] {{Here is a citation.}} Here is a picture: [[File:Anas rubripes PM3.jpg | thumb | 220x124px | right | Duck]] * list **list1 # numbered ## numbered 1 The replace and replace works. The replace and replace. == test == edit tags [[User:Cooltey|Cooltey]] ([[User talk:Cooltey|talk]]) 21:55, 10 July 2024 (UTC) == Foobar == Hey @[[User:ToadetteEdit|ToadetteEdit]], check out this. [[Special:Contributions/&#126;2024-1652|&#126;2024-1652]] ([[User talk:&#126;2024-1652|talk]]) 13:46, 23 July 2024 (UTC) {{subst:rfd notice|1=Test redirect}} [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) p96xk4w5z7ar6ul665g6zqrdpyiqqz6 Template:Has short description 10 125105 746173 505690 2026-01-17T16:25:34Z en>Jonesey95 0 detect underscore; see https://en.wikipedia.org/w/index.php?title=Wikipedia_talk:Shortdesc_helper&curid=57540048&diff=1333407932&oldid=1333406234 746173 wikitext text/x-wiki {{#invoke:string |findpagetext |text={%{ *[Ss]hort[ _]description |plain=false |title={{{title|{{{1|}}} }}} }}<noinclude> {{documentation}} </noinclude> aubnx4twcqpm99qou9julb70vehiizk 746174 746173 2026-06-12T21:51:55Z Robertsky 51025 1 revision imported from [[:en:Template:Has_short_description]]: for workshop activity 746173 wikitext text/x-wiki {{#invoke:string |findpagetext |text={%{ *[Ss]hort[ _]description |plain=false |title={{{title|{{{1|}}} }}} }}<noinclude> {{documentation}} </noinclude> aubnx4twcqpm99qou9julb70vehiizk Module:Detect singular 828 125121 746273 583838 2025-10-16T06:01:56Z en>Hike395 0 handle ampersand the same as "and" 746273 Scribunto text/plain local p = {} local getArgs = require('Module:Arguments').getArgs local yesNo = require('Module:Yesno') -- function to determine whether "sub" occurs in "s" local function plainFind(s, sub) return mw.ustring.find(s, sub, 1, true) end -- function to count the number of times "pattern" (a regex) occurs in "s" local function countMatches(s, pattern) local _, count = mw.ustring.gsub(s, pattern, '') return count end local singular = 1 local likelyPlural = 2 local plural = 3 -- Determine whether a string is singular or plural (i.e., it represents one -- item or many) -- Arguments: -- origArgs[1]: string to process -- origArgs.no_comma: if false, use commas to detect plural (default false) -- origArgs.parse_links: if false, treat wikilinks as opaque singular objects (default false) -- origArgs.any_comma: if true, allow any comma to cause likely plural, including ones between digits (default false) -- origArgs.no_and: if false, use existence of "and" to detect plural (default false) -- origArgs.parse_number: if true, parse number in argument: if 1, singular; if >1, plural (default false) -- Returns: -- singular, likelyPlural, or plural (see constants above), or nil for completely unknown function p._main(origArgs) origArgs = type(origArgs) == 'table' and origArgs or {} local args = {} -- canonicalize boolean arguments for key, default in pairs({no_comma=false,parse_links=false,any_comma=false, no_and=false,parse_number=false}) do if origArgs[key] == nil then args[key] = default else args[key] = yesNo(origArgs[key],default) end end local checkComma = not args.no_comma local checkAnd = not args.no_and local rewriteLinks = not args.parse_links local anyComma = args.any_comma local parseNumber = args.parse_number local s = origArgs[1] -- the input string if not s then return nil -- empty input returns nil end s = tostring(s) s = mw.text.decode(s,true) --- replace HTML entities (to avoid spurious semicolons) if plainFind(s,'data-plural="0"') then -- magic data string to return true return singular end if plainFind(s,'data-plural="1"') then -- magic data string to return false return plural end -- count number of list items local numListItems = countMatches(s,'<%s*li') -- if exactly one, then singular, if more than one, then plural if numListItems == 1 then return singular end if numListItems > 1 then return plural end -- if "list of" occurs inside of wlink, then it's plural if mw.ustring.find(s:lower(), '%[%[[^%]]*list of[^%]]+%]%]') then return plural end if parseNumber then local m = tonumber(mw.ustring.match(s,"^%s*(%d+)")) if m then return m > 1 and plural or singular end end -- fix for trailing br tags passed through [[template:marriage]] s = mw.ustring.gsub(s, '<%s*br[^>]*>%s*(</div>)', '%1') -- replace all wikilinks with fixed string if rewriteLinks then s = mw.ustring.gsub(s,'%b[]','WIKILINK') end -- Five conditions: any one of them can make the string a likely plural or plural local hasBreak = mw.ustring.find(s,'<%s*br') -- For the last 4, evaluate on string stripped of wikimarkup local getPlain = require('Module:Text').Text().getPlain s = getPlain(s) local hasBullets = countMatches(s,'%*+') > 1 local multipleQids = mw.ustring.find(s,'Q%d+[%p%s]+Q%d+') -- has multiple QIDs in a row if hasBullets or multipleQids then return plural end local commaPattern = anyComma and '[,;]' or '%D[,;]%D' -- semi-colon similar to comma local hasComma = checkComma and mw.ustring.find(s, commaPattern) local hasAnd = checkAnd and (mw.ustring.find(s,'[,%s]and%s') or mw.ustring.find(s,'&',1,true)) if hasBreak or hasComma or hasAnd then return likelyPlural end return singular end function p._pluralize(args) args = type(args) == 'table' and args or {} local singularForm = args[3] or args.singular or "" local pluralForm = args[4] or args.plural or "" local likelyForm = args.likely or pluralForm local link = args[5] or args.link if link then link = tostring(link) singularForm = '[['..link..'|'..singularForm..']]' pluralForm = '[['..link..'|'..pluralForm..']]' likelyForm = '[['..link..'|'..likelyForm..']]' end if args[2] then return pluralForm end local detect = p._main(args) if detect == nil then return "" -- return blank on complete failure end if detect == singular then return singularForm elseif detect == likelyPlural then return likelyForm else return pluralForm end end function p.main(frame) local args = getArgs(frame) -- For template, return 1 if singular, blank if plural or empty local result = p._main(args) if result == nil then return 1 end return result == singular and 1 or "" end function p.pluralize(frame) local args = getArgs(frame) return p._pluralize(args) end return p ks2mlneszbgw2vr1nl2rhac5ypdp5y2 746274 746273 2026-06-12T21:56:14Z Robertsky 51025 1 revision imported from [[:en:Module:Detect_singular]] 746273 Scribunto text/plain local p = {} local getArgs = require('Module:Arguments').getArgs local yesNo = require('Module:Yesno') -- function to determine whether "sub" occurs in "s" local function plainFind(s, sub) return mw.ustring.find(s, sub, 1, true) end -- function to count the number of times "pattern" (a regex) occurs in "s" local function countMatches(s, pattern) local _, count = mw.ustring.gsub(s, pattern, '') return count end local singular = 1 local likelyPlural = 2 local plural = 3 -- Determine whether a string is singular or plural (i.e., it represents one -- item or many) -- Arguments: -- origArgs[1]: string to process -- origArgs.no_comma: if false, use commas to detect plural (default false) -- origArgs.parse_links: if false, treat wikilinks as opaque singular objects (default false) -- origArgs.any_comma: if true, allow any comma to cause likely plural, including ones between digits (default false) -- origArgs.no_and: if false, use existence of "and" to detect plural (default false) -- origArgs.parse_number: if true, parse number in argument: if 1, singular; if >1, plural (default false) -- Returns: -- singular, likelyPlural, or plural (see constants above), or nil for completely unknown function p._main(origArgs) origArgs = type(origArgs) == 'table' and origArgs or {} local args = {} -- canonicalize boolean arguments for key, default in pairs({no_comma=false,parse_links=false,any_comma=false, no_and=false,parse_number=false}) do if origArgs[key] == nil then args[key] = default else args[key] = yesNo(origArgs[key],default) end end local checkComma = not args.no_comma local checkAnd = not args.no_and local rewriteLinks = not args.parse_links local anyComma = args.any_comma local parseNumber = args.parse_number local s = origArgs[1] -- the input string if not s then return nil -- empty input returns nil end s = tostring(s) s = mw.text.decode(s,true) --- replace HTML entities (to avoid spurious semicolons) if plainFind(s,'data-plural="0"') then -- magic data string to return true return singular end if plainFind(s,'data-plural="1"') then -- magic data string to return false return plural end -- count number of list items local numListItems = countMatches(s,'<%s*li') -- if exactly one, then singular, if more than one, then plural if numListItems == 1 then return singular end if numListItems > 1 then return plural end -- if "list of" occurs inside of wlink, then it's plural if mw.ustring.find(s:lower(), '%[%[[^%]]*list of[^%]]+%]%]') then return plural end if parseNumber then local m = tonumber(mw.ustring.match(s,"^%s*(%d+)")) if m then return m > 1 and plural or singular end end -- fix for trailing br tags passed through [[template:marriage]] s = mw.ustring.gsub(s, '<%s*br[^>]*>%s*(</div>)', '%1') -- replace all wikilinks with fixed string if rewriteLinks then s = mw.ustring.gsub(s,'%b[]','WIKILINK') end -- Five conditions: any one of them can make the string a likely plural or plural local hasBreak = mw.ustring.find(s,'<%s*br') -- For the last 4, evaluate on string stripped of wikimarkup local getPlain = require('Module:Text').Text().getPlain s = getPlain(s) local hasBullets = countMatches(s,'%*+') > 1 local multipleQids = mw.ustring.find(s,'Q%d+[%p%s]+Q%d+') -- has multiple QIDs in a row if hasBullets or multipleQids then return plural end local commaPattern = anyComma and '[,;]' or '%D[,;]%D' -- semi-colon similar to comma local hasComma = checkComma and mw.ustring.find(s, commaPattern) local hasAnd = checkAnd and (mw.ustring.find(s,'[,%s]and%s') or mw.ustring.find(s,'&',1,true)) if hasBreak or hasComma or hasAnd then return likelyPlural end return singular end function p._pluralize(args) args = type(args) == 'table' and args or {} local singularForm = args[3] or args.singular or "" local pluralForm = args[4] or args.plural or "" local likelyForm = args.likely or pluralForm local link = args[5] or args.link if link then link = tostring(link) singularForm = '[['..link..'|'..singularForm..']]' pluralForm = '[['..link..'|'..pluralForm..']]' likelyForm = '[['..link..'|'..likelyForm..']]' end if args[2] then return pluralForm end local detect = p._main(args) if detect == nil then return "" -- return blank on complete failure end if detect == singular then return singularForm elseif detect == likelyPlural then return likelyForm else return pluralForm end end function p.main(frame) local args = getArgs(frame) -- For template, return 1 if singular, blank if plural or empty local result = p._main(args) if result == nil then return 1 end return result == singular and 1 or "" end function p.pluralize(frame) local args = getArgs(frame) return p._pluralize(args) end return p ks2mlneszbgw2vr1nl2rhac5ypdp5y2 Module:If preview 828 126159 746169 511353 2024-09-09T19:58:02Z en>MSGJ 0 requested enhancements by [[User:Awesome Aasim]] 746169 Scribunto text/plain local p = {} local getArgs = require("Module:Arguments").getArgs local yn = require("Module:Yesno") local cfg = mw.loadData('Module:If preview/configuration') --[[ main This function returns either the first argument or second argument passed to this module, depending on whether the page is being previewed. ]] function p.main(frame) local args = getArgs(frame) if cfg.preview then return args[1] or '' else return args[2] or '' end end --[[ pmain This function returns either the first argument or second argument passed to this module's parent (i.e. template using this module), depending on whether it is being previewed. ]] function p.pmain(frame) return p.main(frame:getParent()) end local function warning_text(warning) return mw.ustring.format( cfg.warning_infrastructure, cfg.templatestyles, warning ) end function p._warning(args) local warning = args[1] and args[1]:match('^%s*(.-)%s*$') or '' if warning == '' then return warning_text(cfg.missing_warning) end if not cfg.preview then return '' end if yn(args['consolewarning']) then mw.addWarning(args[1] or cfg.missing_warning) end return warning_text(warning) end --[[ warning This function returns a "preview warning", which is the first argument marked up with HTML and some supporting text, depending on whether the page is being previewed. ]] -- function p.warning(frame) -- mw.addWarning(frame.args[1] or cfg.missing_warning) -- return p._warning(frame.args) -- end --[[ warning, but for pass-through templates like {{preview warning}} ]] function p.pwarning(frame) local args = getArgs(frame) return p._warning(args) end --[[ Does both mw.addWarning and preview warning ]] function p.warn(text) if text == nil or text == "" then return "" end mw.addWarning(text) return p._warning({text}) end --[[ Console warning ]] function p.consoleWarning(frame) local args = getArgs(frame) mw.addWarning(args[1] or cfg.missing_warning) return '' end return p 9xxiwh6yksz0t17svyd7nlq7rj3f5rk 746170 746169 2026-06-12T21:51:54Z Robertsky 51025 1 revision imported from [[:en:Module:If_preview]]: for workshop activity 746169 Scribunto text/plain local p = {} local getArgs = require("Module:Arguments").getArgs local yn = require("Module:Yesno") local cfg = mw.loadData('Module:If preview/configuration') --[[ main This function returns either the first argument or second argument passed to this module, depending on whether the page is being previewed. ]] function p.main(frame) local args = getArgs(frame) if cfg.preview then return args[1] or '' else return args[2] or '' end end --[[ pmain This function returns either the first argument or second argument passed to this module's parent (i.e. template using this module), depending on whether it is being previewed. ]] function p.pmain(frame) return p.main(frame:getParent()) end local function warning_text(warning) return mw.ustring.format( cfg.warning_infrastructure, cfg.templatestyles, warning ) end function p._warning(args) local warning = args[1] and args[1]:match('^%s*(.-)%s*$') or '' if warning == '' then return warning_text(cfg.missing_warning) end if not cfg.preview then return '' end if yn(args['consolewarning']) then mw.addWarning(args[1] or cfg.missing_warning) end return warning_text(warning) end --[[ warning This function returns a "preview warning", which is the first argument marked up with HTML and some supporting text, depending on whether the page is being previewed. ]] -- function p.warning(frame) -- mw.addWarning(frame.args[1] or cfg.missing_warning) -- return p._warning(frame.args) -- end --[[ warning, but for pass-through templates like {{preview warning}} ]] function p.pwarning(frame) local args = getArgs(frame) return p._warning(args) end --[[ Does both mw.addWarning and preview warning ]] function p.warn(text) if text == nil or text == "" then return "" end mw.addWarning(text) return p._warning({text}) end --[[ Console warning ]] function p.consoleWarning(frame) local args = getArgs(frame) mw.addWarning(args[1] or cfg.missing_warning) return '' end return p 9xxiwh6yksz0t17svyd7nlq7rj3f5rk Module:If preview/styles.css 828 126161 746171 511357 2026-05-11T21:46:11Z en>Izno 0 + 746171 sanitized-css text/css /* {{pp|small=yes}} */ .preview-warning { font-style: italic; /* @noflip */ padding-left: 1.6em; margin-bottom: 0.5em; color: var(--color-error, red); } /* The templatestyles causes an 'empty' span between hatnotes */ .preview-warning + span.mw-empty-elt + .preview-warning, /* remove this selector when Parsoid is the only parser, see also [[phab:T200206]] */ .preview-warning + link + .preview-warning { margin-top: -0.5em; } f1m5cy9ikp9xcry3obpmw1xl2aem71y 746172 746171 2026-06-12T21:51:54Z Robertsky 51025 1 revision imported from [[:en:Module:If_preview/styles.css]]: for workshop activity 746171 sanitized-css text/css /* {{pp|small=yes}} */ .preview-warning { font-style: italic; /* @noflip */ padding-left: 1.6em; margin-bottom: 0.5em; color: var(--color-error, red); } /* The templatestyles causes an 'empty' span between hatnotes */ .preview-warning + span.mw-empty-elt + .preview-warning, /* remove this selector when Parsoid is the only parser, see also [[phab:T200206]] */ .preview-warning + link + .preview-warning { margin-top: -0.5em; } f1m5cy9ikp9xcry3obpmw1xl2aem71y Template:Subpage other 10 158066 746199 609818 2025-08-05T04:51:03Z en>Theknightwho 0 Make substable. 746199 wikitext text/x-wiki <onlyinclude>{{safesubst:<noinclude/>#ifeq:{{safesubst:<noinclude/>SUBPAGENAME}}|{{safesubst:<noinclude/>ROOTPAGENAME}}|{{{2|}}}|{{{1|}}}}}</onlyinclude><!-- -->{{documentation}} k0itkwe4s7i80kxzt0zhv9wfh26yh2z 746200 746199 2026-06-12T21:51:59Z Robertsky 51025 1 revision imported from [[:en:Template:Subpage_other]]: for workshop activity 746199 wikitext text/x-wiki <onlyinclude>{{safesubst:<noinclude/>#ifeq:{{safesubst:<noinclude/>SUBPAGENAME}}|{{safesubst:<noinclude/>ROOTPAGENAME}}|{{{2|}}}|{{{1|}}}}}</onlyinclude><!-- -->{{documentation}} k0itkwe4s7i80kxzt0zhv9wfh26yh2z Module:Lang/data/iana languages 828 163186 746231 733554 2026-04-16T17:41:38Z en>Trappist the monk 0 update to 2026-04-09 data; 746231 Scribunto text/plain -- File-Date: 2026-04-09 local active = { ["aa"] = {"Afar"}, ["ab"] = {"Abkhazian"}, ["ae"] = {"Avestan"}, ["af"] = {"Afrikaans"}, ["ak"] = {"Akan"}, ["am"] = {"Amharic"}, ["an"] = {"Aragonese"}, ["ar"] = {"Arabic"}, ["as"] = {"Assamese"}, ["av"] = {"Avaric"}, ["ay"] = {"Aymara"}, ["az"] = {"Azerbaijani"}, ["ba"] = {"Bashkir"}, ["be"] = {"Belarusian"}, ["bg"] = {"Bulgarian"}, ["bh"] = {"Bihari languages"}, ["bi"] = {"Bislama"}, ["bm"] = {"Bambara"}, ["bn"] = {"Bengali", "Bangla"}, ["bo"] = {"Tibetan"}, ["br"] = {"Breton"}, ["bs"] = {"Bosnian"}, ["ca"] = {"Catalan", "Valencian"}, ["ce"] = {"Chechen"}, ["ch"] = {"Chamorro"}, ["co"] = {"Corsican"}, ["cr"] = {"Cree"}, ["cs"] = {"Czech"}, ["cu"] = {"Church Slavic", "Church Slavonic", "Old Bulgarian", "Old Church Slavonic", "Old Slavonic"}, ["cv"] = {"Chuvash"}, ["cy"] = {"Welsh"}, ["da"] = {"Danish"}, ["de"] = {"German"}, ["dv"] = {"Dhivehi", "Divehi", "Maldivian"}, ["dz"] = {"Dzongkha"}, ["ee"] = {"Ewe"}, ["el"] = {"Modern Greek (1453-)"}, ["en"] = {"English"}, ["eo"] = {"Esperanto"}, ["es"] = {"Spanish", "Castilian"}, ["et"] = {"Estonian"}, ["eu"] = {"Basque"}, ["fa"] = {"Persian"}, ["ff"] = {"Fulah"}, ["fi"] = {"Finnish"}, ["fj"] = {"Fijian"}, ["fo"] = {"Faroese"}, ["fr"] = {"French"}, ["fy"] = {"Western Frisian"}, ["ga"] = {"Irish"}, ["gd"] = {"Scottish Gaelic", "Gaelic"}, ["gl"] = {"Galician"}, ["gn"] = {"Guarani"}, ["gu"] = {"Gujarati"}, ["gv"] = {"Manx"}, ["ha"] = {"Hausa"}, ["he"] = {"Hebrew"}, ["hi"] = {"Hindi"}, ["ho"] = {"Hiri Motu"}, ["hr"] = {"Croatian"}, ["ht"] = {"Haitian", "Haitian Creole"}, ["hu"] = {"Hungarian"}, ["hy"] = {"Armenian"}, ["hz"] = {"Herero"}, ["ia"] = {"Interlingua (International Auxiliary Language Association)"}, ["id"] = {"Indonesian"}, ["ie"] = {"Interlingue", "Occidental"}, ["ig"] = {"Igbo"}, ["ii"] = {"Sichuan Yi", "Nuosu"}, ["ik"] = {"Inupiaq"}, ["io"] = {"Ido"}, ["is"] = {"Icelandic"}, ["it"] = {"Italian"}, ["iu"] = {"Inuktitut"}, ["ja"] = {"Japanese"}, ["jv"] = {"Javanese"}, ["ka"] = {"Georgian"}, ["kg"] = {"Kongo"}, ["ki"] = {"Kikuyu", "Gikuyu"}, ["kj"] = {"Kuanyama", "Kwanyama"}, ["kk"] = {"Kazakh"}, ["kl"] = {"Kalaallisut", "Greenlandic"}, ["km"] = {"Khmer", "Central Khmer"}, ["kn"] = {"Kannada"}, ["ko"] = {"Korean"}, ["kr"] = {"Kanuri"}, ["ks"] = {"Kashmiri"}, ["ku"] = {"Kurdish"}, ["kv"] = {"Komi"}, ["kw"] = {"Cornish"}, ["ky"] = {"Kirghiz", "Kyrgyz"}, ["la"] = {"Latin"}, ["lb"] = {"Luxembourgish", "Letzeburgesch"}, ["lg"] = {"Ganda", "Luganda"}, ["li"] = {"Limburgan", "Limburger", "Limburgish"}, ["ln"] = {"Lingala"}, ["lo"] = {"Lao"}, ["lt"] = {"Lithuanian"}, ["lu"] = {"Luba-Katanga"}, ["lv"] = {"Latvian"}, ["mg"] = {"Malagasy"}, ["mh"] = {"Marshallese"}, ["mi"] = {"Maori"}, ["mk"] = {"Macedonian"}, ["ml"] = {"Malayalam"}, ["mn"] = {"Mongolian"}, ["mr"] = {"Marathi"}, ["ms"] = {"Malay (macrolanguage)"}, ["mt"] = {"Maltese"}, ["my"] = {"Burmese"}, ["na"] = {"Nauru"}, ["nb"] = {"Norwegian Bokmål"}, ["nd"] = {"North Ndebele"}, ["ne"] = {"Nepali (macrolanguage)"}, ["ng"] = {"Ndonga"}, ["nl"] = {"Dutch", "Flemish"}, ["nn"] = {"Norwegian Nynorsk"}, ["no"] = {"Norwegian"}, ["nr"] = {"South Ndebele"}, ["nv"] = {"Navajo", "Navaho"}, ["ny"] = {"Chichewa", "Chewa", "Nyanja"}, ["oc"] = {"Occitan (post 1500)"}, ["oj"] = {"Ojibwa"}, ["om"] = {"Oromo"}, ["or"] = {"Oriya (macrolanguage)", "Odia (macrolanguage)"}, ["os"] = {"Iron Ossetic", "Iron", "Iron Ossetian", "Ossetian", "Ossetic"}, ["pa"] = {"Panjabi", "Punjabi"}, ["pi"] = {"Pali"}, ["pl"] = {"Polish"}, ["ps"] = {"Pushto", "Pashto"}, ["pt"] = {"Portuguese"}, ["qu"] = {"Quechua"}, ["rm"] = {"Romansh"}, ["rn"] = {"Rundi"}, ["ro"] = {"Romanian", "Moldavian", "Moldovan"}, ["ru"] = {"Russian"}, ["rw"] = {"Kinyarwanda"}, ["sa"] = {"Sanskrit"}, ["sc"] = {"Sardinian"}, ["sd"] = {"Sindhi"}, ["se"] = {"Northern Sami"}, ["sg"] = {"Sango"}, ["sh"] = {"Serbo-Croatian"}, ["si"] = {"Sinhala", "Sinhalese"}, ["sk"] = {"Slovak"}, ["sl"] = {"Slovenian"}, ["sm"] = {"Samoan"}, ["sn"] = {"Shona"}, ["so"] = {"Somali"}, ["sq"] = {"Albanian"}, ["sr"] = {"Serbian"}, ["ss"] = {"Swati"}, ["st"] = {"Southern Sotho"}, ["su"] = {"Sundanese"}, ["sv"] = {"Swedish"}, ["sw"] = {"Swahili (macrolanguage)"}, ["ta"] = {"Tamil"}, ["te"] = {"Telugu"}, ["tg"] = {"Tajik"}, ["th"] = {"Thai"}, ["ti"] = {"Tigrinya"}, ["tk"] = {"Turkmen"}, ["tl"] = {"Tagalog"}, ["tn"] = {"Tswana"}, ["to"] = {"Tonga (Tonga Islands)"}, ["tr"] = {"Turkish"}, ["ts"] = {"Tsonga"}, ["tt"] = {"Tatar"}, ["tw"] = {"Twi"}, ["ty"] = {"Tahitian"}, ["ug"] = {"Uighur", "Uyghur"}, ["uk"] = {"Ukrainian"}, ["ur"] = {"Urdu"}, ["uz"] = {"Uzbek"}, ["ve"] = {"Venda"}, ["vi"] = {"Vietnamese"}, ["vo"] = {"Volapük"}, ["wa"] = {"Walloon"}, ["wo"] = {"Wolof"}, ["xh"] = {"Xhosa"}, ["yi"] = {"Yiddish"}, ["yo"] = {"Yoruba"}, ["za"] = {"Zhuang", "Chuang"}, ["zh"] = {"Chinese"}, ["zu"] = {"Zulu"}, ["aaa"] = {"Ghotuo"}, ["aab"] = {"Alumu-Tesu"}, ["aac"] = {"Ari"}, ["aad"] = {"Amal"}, ["aae"] = {"Arbëreshë Albanian"}, ["aaf"] = {"Aranadan"}, ["aag"] = {"Ambrak"}, ["aah"] = {"Abu' Arapesh"}, ["aai"] = {"Arifama-Miniafia"}, ["aak"] = {"Ankave"}, ["aal"] = {"Afade"}, ["aan"] = {"Anambé"}, ["aao"] = {"Algerian Saharan Arabic"}, ["aap"] = {"Pará Arára"}, ["aaq"] = {"Eastern Abnaki"}, ["aas"] = {"Aasáx"}, ["aat"] = {"Arvanitika Albanian"}, ["aau"] = {"Abau"}, ["aav"] = {"Austro-Asiatic languages"}, ["aaw"] = {"Solong"}, ["aax"] = {"Mandobo Atas"}, ["aaz"] = {"Amarasi"}, ["aba"] = {"Abé"}, ["abb"] = {"Bankon"}, ["abc"] = {"Ambala Ayta"}, ["abd"] = {"Manide"}, ["abe"] = {"Western Abnaki"}, ["abf"] = {"Abai Sungai"}, ["abg"] = {"Abaga"}, ["abh"] = {"Tajiki Arabic"}, ["abi"] = {"Abidji"}, ["abj"] = {"Aka-Bea"}, ["abl"] = {"Lampung Nyo"}, ["abm"] = {"Abanyom"}, ["abn"] = {"Abua"}, ["abo"] = {"Abon"}, ["abp"] = {"Abellen Ayta"}, ["abq"] = {"Abaza"}, ["abr"] = {"Abron"}, ["abs"] = {"Ambonese Malay"}, ["abt"] = {"Ambulas"}, ["abu"] = {"Abure"}, ["abv"] = {"Baharna Arabic"}, ["abw"] = {"Pal"}, ["abx"] = {"Inabaknon"}, ["aby"] = {"Aneme Wake"}, ["abz"] = {"Abui"}, ["aca"] = {"Achagua"}, ["acb"] = {"Áncá"}, ["acd"] = {"Gikyode"}, ["ace"] = {"Achinese"}, ["acf"] = {"Saint Lucian Creole French"}, ["ach"] = {"Acoli"}, ["aci"] = {"Aka-Cari"}, ["ack"] = {"Aka-Kora"}, ["acl"] = {"Akar-Bale"}, ["acm"] = {"Mesopotamian Arabic"}, ["acn"] = {"Achang"}, ["acp"] = {"Eastern Acipa"}, ["acq"] = {"Ta'izzi-Adeni Arabic"}, ["acr"] = {"Achi"}, ["acs"] = {"Acroá"}, ["act"] = {"Achterhoeks"}, ["acu"] = {"Achuar-Shiwiar"}, ["acv"] = {"Achumawi"}, ["acw"] = {"Hijazi Arabic"}, ["acx"] = {"Omani Arabic"}, ["acy"] = {"Cypriot Arabic"}, ["acz"] = {"Acheron"}, ["ada"] = {"Adangme"}, ["adb"] = {"Atauran"}, ["add"] = {"Lidzonka", "Dzodinka"}, ["ade"] = {"Adele"}, ["adf"] = {"Dhofari Arabic"}, ["adg"] = {"Andegerebinha"}, ["adh"] = {"Adhola"}, ["adi"] = {"Adi"}, ["adj"] = {"Adioukrou"}, ["adl"] = {"Galo"}, ["adn"] = {"Adang"}, ["ado"] = {"Abu"}, ["adq"] = {"Adangbe"}, ["adr"] = {"Adonara"}, ["ads"] = {"Adamorobe Sign Language"}, ["adt"] = {"Adnyamathanha"}, ["adu"] = {"Aduge"}, ["adw"] = {"Amundava"}, ["adx"] = {"Amdo Tibetan"}, ["ady"] = {"Adyghe", "Adygei"}, ["adz"] = {"Adzera"}, ["aea"] = {"Areba"}, ["aeb"] = {"Tunisian Arabic"}, ["aec"] = {"Saidi Arabic"}, ["aed"] = {"Argentine Sign Language"}, ["aee"] = {"Northeast Pashai", "Northeast Pashayi"}, ["aek"] = {"Haeke"}, ["ael"] = {"Ambele"}, ["aem"] = {"Arem"}, ["aen"] = {"Armenian Sign Language"}, ["aeq"] = {"Aer"}, ["aer"] = {"Eastern Arrernte"}, ["aes"] = {"Alsea"}, ["aeu"] = {"Akeu"}, ["aew"] = {"Ambakich"}, ["aey"] = {"Amele"}, ["aez"] = {"Aeka"}, ["afa"] = {"Afro-Asiatic languages"}, ["afb"] = {"Gulf Arabic"}, ["afd"] = {"Andai"}, ["afe"] = {"Putukwam"}, ["afg"] = {"Afghan Sign Language"}, ["afh"] = {"Afrihili"}, ["afi"] = {"Akrukay", "Chini"}, ["afk"] = {"Nanubae"}, ["afn"] = {"Defaka"}, ["afo"] = {"Eloyi"}, ["afp"] = {"Tapei"}, ["afs"] = {"Afro-Seminole Creole"}, ["aft"] = {"Afitti"}, ["afu"] = {"Awutu"}, ["afz"] = {"Obokuitai"}, ["aga"] = {"Aguano"}, ["agb"] = {"Legbo"}, ["agc"] = {"Agatu"}, ["agd"] = {"Agarabi"}, ["age"] = {"Angal"}, ["agf"] = {"Arguni"}, ["agg"] = {"Angor"}, ["agh"] = {"Ngelima"}, ["agi"] = {"Agariya"}, ["agj"] = {"Argobba"}, ["agk"] = {"Isarog Agta"}, ["agl"] = {"Fembe"}, ["agm"] = {"Angaataha"}, ["agn"] = {"Agutaynen"}, ["ago"] = {"Tainae"}, ["agq"] = {"Aghem"}, ["agr"] = {"Aguaruna"}, ["ags"] = {"Esimbi"}, ["agt"] = {"Central Cagayan Agta"}, ["agu"] = {"Aguacateco"}, ["agv"] = {"Remontado Dumagat"}, ["agw"] = {"Kahua"}, ["agx"] = {"Aghul"}, ["agy"] = {"Southern Alta"}, ["agz"] = {"Mt. Iriga Agta"}, ["aha"] = {"Ahanta"}, ["ahb"] = {"Axamb"}, ["ahg"] = {"Qimant"}, ["ahh"] = {"Aghu"}, ["ahi"] = {"Tiagbamrin Aizi"}, ["ahk"] = {"Akha"}, ["ahl"] = {"Igo"}, ["ahm"] = {"Mobumrin Aizi"}, ["ahn"] = {"Àhàn"}, ["aho"] = {"Ahom"}, ["ahp"] = {"Aproumu Aizi"}, ["ahr"] = {"Ahirani"}, ["ahs"] = {"Ashe"}, ["aht"] = {"Ahtena"}, ["aia"] = {"Arosi"}, ["aib"] = {"Ainu (China)"}, ["aic"] = {"Ainbai"}, ["aid"] = {"Alngith"}, ["aie"] = {"Amara"}, ["aif"] = {"Agi"}, ["aig"] = {"Antigua and Barbuda Creole English"}, ["aih"] = {"Ai-Cham"}, ["aii"] = {"Assyrian Neo-Aramaic"}, ["aij"] = {"Lishanid Noshan"}, ["aik"] = {"Ake"}, ["ail"] = {"Aimele"}, ["aim"] = {"Aimol"}, ["ain"] = {"Ainu (Japan)"}, ["aio"] = {"Aiton"}, ["aip"] = {"Burumakok"}, ["aiq"] = {"Aimaq"}, ["air"] = {"Airoran"}, ["ait"] = {"Arikem"}, ["aiw"] = {"Aari"}, ["aix"] = {"Aighon"}, ["aiy"] = {"Ali"}, ["aja"] = {"Aja (South Sudan)"}, ["ajg"] = {"Aja (Benin)"}, ["aji"] = {"Ajië"}, ["ajn"] = {"Andajin"}, ["ajs"] = {"Algerian Jewish Sign Language"}, ["aju"] = {"Judeo-Moroccan Arabic"}, ["ajw"] = {"Ajawa"}, ["ajz"] = {"Amri Karbi"}, ["akb"] = {"Batak Angkola"}, ["akc"] = {"Mpur"}, ["akd"] = {"Ukpet-Ehom"}, ["ake"] = {"Akawaio"}, ["akf"] = {"Akpa"}, ["akg"] = {"Anakalangu"}, ["akh"] = {"Angal Heneng"}, ["aki"] = {"Aiome"}, ["akj"] = {"Aka-Jeru"}, ["akk"] = {"Akkadian"}, ["akl"] = {"Aklanon"}, ["akm"] = {"Aka-Bo"}, ["ako"] = {"Akurio"}, ["akp"] = {"Siwu"}, ["akq"] = {"Ak"}, ["akr"] = {"Araki"}, ["aks"] = {"Akaselem"}, ["akt"] = {"Akolet"}, ["aku"] = {"Akum"}, ["akv"] = {"Akhvakh"}, ["akw"] = {"Akwa"}, ["akx"] = {"Aka-Kede"}, ["aky"] = {"Aka-Kol"}, ["akz"] = {"Alabama"}, ["ala"] = {"Alago"}, ["alc"] = {"Qawasqar"}, ["ald"] = {"Alladian"}, ["ale"] = {"Aleut"}, ["alf"] = {"Alege"}, ["alg"] = {"Algonquian languages"}, ["alh"] = {"Alawa"}, ["ali"] = {"Amaimon"}, ["alj"] = {"Alangan"}, ["alk"] = {"Alak"}, ["all"] = {"Allar"}, ["alm"] = {"Amblong"}, ["aln"] = {"Gheg Albanian"}, ["alo"] = {"Larike-Wakasihu"}, ["alp"] = {"Alune"}, ["alq"] = {"Algonquin"}, ["alr"] = {"Alutor"}, ["als"] = {"Tosk Albanian"}, ["alt"] = {"Southern Altai"}, ["alu"] = {"'Are'are"}, ["alv"] = {"Atlantic-Congo languages"}, ["alw"] = {"Alaba-K’abeena", "Wanbasana"}, ["alx"] = {"Amol"}, ["aly"] = {"Alyawarr"}, ["alz"] = {"Alur"}, ["ama"] = {"Amanayé"}, ["amb"] = {"Ambo"}, ["amc"] = {"Amahuaca"}, ["ame"] = {"Yanesha'"}, ["amf"] = {"Hamer-Banna"}, ["amg"] = {"Amurdak"}, ["ami"] = {"Amis"}, ["amj"] = {"Amdang"}, ["amk"] = {"Ambai"}, ["aml"] = {"War-Jaintia"}, ["amm"] = {"Ama (Papua New Guinea)"}, ["amn"] = {"Amanab"}, ["amo"] = {"Amo"}, ["amp"] = {"Alamblak"}, ["amq"] = {"Amahai"}, ["amr"] = {"Amarakaeri"}, ["ams"] = {"Southern Amami-Oshima"}, ["amt"] = {"Amto"}, ["amu"] = {"Guerrero Amuzgo"}, ["amv"] = {"Ambelau"}, ["amw"] = {"Western Neo-Aramaic"}, ["amx"] = {"Anmatyerre"}, ["amy"] = {"Ami"}, ["amz"] = {"Atampaya"}, ["ana"] = {"Andaqui"}, ["anb"] = {"Andoa"}, ["anc"] = {"Ngas"}, ["and"] = {"Ansus"}, ["ane"] = {"Xârâcùù"}, ["anf"] = {"Animere"}, ["ang"] = {"Old English (ca. 450-1100)"}, ["anh"] = {"Nend"}, ["ani"] = {"Andi"}, ["anj"] = {"Anor"}, ["ank"] = {"Goemai"}, ["anl"] = {"Anu-Hkongso Chin"}, ["anm"] = {"Anal"}, ["ann"] = {"Obolo"}, ["ano"] = {"Andoque"}, ["anp"] = {"Angika"}, ["anq"] = {"Jarawa (India)"}, ["anr"] = {"Andh"}, ["ans"] = {"Anserma"}, ["ant"] = {"Antakarinya", "Antikarinya"}, ["anu"] = {"Anuak"}, ["anv"] = {"Denya"}, ["anw"] = {"Anaang"}, ["anx"] = {"Andra-Hus"}, ["any"] = {"Anyin"}, ["anz"] = {"Anem"}, ["aoa"] = {"Angolar"}, ["aob"] = {"Abom"}, ["aoc"] = {"Pemon"}, ["aod"] = {"Andarum"}, ["aoe"] = {"Angal Enen"}, ["aof"] = {"Bragat"}, ["aog"] = {"Angoram"}, ["aoi"] = {"Anindilyakwa"}, ["aoj"] = {"Mufian"}, ["aok"] = {"Arhö"}, ["aol"] = {"Alor"}, ["aom"] = {"Ömie"}, ["aon"] = {"Bumbita Arapesh"}, ["aor"] = {"Aore"}, ["aos"] = {"Taikat"}, ["aot"] = {"Atong (India)", "A'tong"}, ["aou"] = {"A'ou"}, ["aox"] = {"Atorada"}, ["aoz"] = {"Uab Meto"}, ["apa"] = {"Apache languages"}, ["apb"] = {"Sa'a"}, ["apc"] = {"Levantine Arabic"}, ["apd"] = {"Sudanese Arabic"}, ["ape"] = {"Bukiyip"}, ["apf"] = {"Pahanan Agta"}, ["apg"] = {"Ampanang"}, ["aph"] = {"Athpariya"}, ["api"] = {"Apiaká"}, ["apj"] = {"Jicarilla Apache"}, ["apk"] = {"Kiowa Apache"}, ["apl"] = {"Lipan Apache"}, ["apm"] = {"Mescalero-Chiricahua Apache"}, ["apn"] = {"Apinayé"}, ["apo"] = {"Ambul"}, ["app"] = {"Apma"}, ["apq"] = {"A-Pucikwar"}, ["apr"] = {"Arop-Lokep"}, ["aps"] = {"Arop-Sissano"}, ["apt"] = {"Apatani"}, ["apu"] = {"Apurinã"}, ["apv"] = {"Alapmunte"}, ["apw"] = {"Western Apache"}, ["apx"] = {"Aputai"}, ["apy"] = {"Apalaí"}, ["apz"] = {"Safeyoka"}, ["aqa"] = {"Alacalufan languages"}, ["aqc"] = {"Archi"}, ["aqd"] = {"Ampari Dogon"}, ["aqg"] = {"Arigidi"}, ["aqk"] = {"Aninka"}, ["aql"] = {"Algic languages"}, ["aqm"] = {"Atohwaim"}, ["aqn"] = {"Northern Alta"}, ["aqp"] = {"Atakapa"}, ["aqr"] = {"Arhâ"}, ["aqt"] = {"Angaité"}, ["aqz"] = {"Akuntsu"}, ["arb"] = {"Standard Arabic"}, ["arc"] = {"Official Aramaic (700-300 BCE)", "Imperial Aramaic (700-300 BCE)"}, ["ard"] = {"Arabana"}, ["are"] = {"Western Arrarnta"}, ["arh"] = {"Arhuaco"}, ["ari"] = {"Arikara"}, ["arj"] = {"Arapaso"}, ["ark"] = {"Arikapú"}, ["arl"] = {"Arabela"}, ["arn"] = {"Mapudungun", "Mapuche"}, ["aro"] = {"Araona"}, ["arp"] = {"Arapaho"}, ["arq"] = {"Algerian Arabic"}, ["arr"] = {"Karo (Brazil)"}, ["ars"] = {"Najdi Arabic"}, ["art"] = {"Artificial languages"}, ["aru"] = {"Aruá (Amazonas State)", "Arawá"}, ["arv"] = {"Arbore"}, ["arw"] = {"Arawak"}, ["arx"] = {"Aruá (Rodonia State)"}, ["ary"] = {"Moroccan Arabic"}, ["arz"] = {"Egyptian Arabic"}, ["asa"] = {"Asu (Tanzania)"}, ["asb"] = {"Assiniboine", "Nakoda Assiniboine"}, ["asc"] = {"Casuarina Coast Asmat"}, ["ase"] = {"American Sign Language"}, ["asf"] = {"Auslan", "Australian Sign Language"}, ["asg"] = {"Cishingini"}, ["ash"] = {"Abishira"}, ["asi"] = {"Buruwai"}, ["asj"] = {"Sari"}, ["ask"] = {"Ashkun"}, ["asl"] = {"Asilulu"}, ["asn"] = {"Xingú Asuriní"}, ["aso"] = {"Dano"}, ["asp"] = {"Algerian Sign Language"}, ["asq"] = {"Austrian Sign Language"}, ["asr"] = {"Asuri"}, ["ass"] = {"Ipulo"}, ["ast"] = {"Asturian", "Asturleonese", "Bable", "Leonese"}, ["asu"] = {"Tocantins Asurini"}, ["asv"] = {"Asoa"}, ["asw"] = {"Australian Aborigines Sign Language"}, ["asx"] = {"Muratayak"}, ["asy"] = {"Yaosakor Asmat"}, ["asz"] = {"As"}, ["ata"] = {"Pele-Ata"}, ["atb"] = {"Zaiwa"}, ["atc"] = {"Atsahuaca"}, ["atd"] = {"Ata Manobo"}, ["ate"] = {"Atemble"}, ["atg"] = {"Ivbie North-Okpela-Arhe"}, ["ath"] = {"Athapascan languages"}, ["ati"] = {"Attié"}, ["atj"] = {"Atikamekw", "Nehirowimowin"}, ["atk"] = {"Ati"}, ["atl"] = {"Mt. Iraya Agta"}, ["atm"] = {"Ata"}, ["atn"] = {"Ashtiani"}, ["ato"] = {"Atong (Cameroon)"}, ["atp"] = {"Pudtol Atta"}, ["atq"] = {"Aralle-Tabulahan"}, ["atr"] = {"Waimiri-Atroari"}, ["ats"] = {"Gros Ventre"}, ["att"] = {"Pamplona Atta"}, ["atu"] = {"Reel"}, ["atv"] = {"Northern Altai"}, ["atw"] = {"Atsugewi"}, ["atx"] = {"Arutani"}, ["aty"] = {"Aneityum"}, ["atz"] = {"Arta"}, ["aua"] = {"Asumboa"}, ["aub"] = {"Alugu"}, ["auc"] = {"Waorani"}, ["aud"] = {"Anuta"}, ["auf"] = {"Arauan languages"}, ["aug"] = {"Aguna"}, ["auh"] = {"Aushi"}, ["aui"] = {"Anuki"}, ["auj"] = {"Awjilah"}, ["auk"] = {"Heyo"}, ["aul"] = {"Aulua"}, ["aum"] = {"Asu (Nigeria)"}, ["aun"] = {"Molmo One"}, ["auo"] = {"Auyokawa"}, ["aup"] = {"Makayam"}, ["auq"] = {"Anus", "Korur"}, ["aur"] = {"Aruek"}, ["aus"] = {"Australian languages"}, ["aut"] = {"Austral"}, ["auu"] = {"Auye"}, ["auw"] = {"Awyi"}, ["aux"] = {"Aurá"}, ["auy"] = {"Awiyaana"}, ["auz"] = {"Uzbeki Arabic"}, ["avb"] = {"Avau"}, ["avd"] = {"Alviri-Vidari"}, ["avi"] = {"Avikam"}, ["avk"] = {"Kotava"}, ["avl"] = {"Eastern Egyptian Bedawi Arabic"}, ["avm"] = {"Angkamuthi"}, ["avn"] = {"Avatime"}, ["avo"] = {"Agavotaguerra"}, ["avs"] = {"Aushiri"}, ["avt"] = {"Au"}, ["avu"] = {"Avokaya"}, ["avv"] = {"Avá-Canoeiro"}, ["awa"] = {"Awadhi"}, ["awb"] = {"Awa (Papua New Guinea)"}, ["awc"] = {"Cicipu"}, ["awd"] = {"Arawakan languages"}, ["awe"] = {"Awetí"}, ["awg"] = {"Anguthimri"}, ["awh"] = {"Awbono"}, ["awi"] = {"Aekyom"}, ["awk"] = {"Awabakal"}, ["awm"] = {"Arawum"}, ["awn"] = {"Awngi"}, ["awo"] = {"Awak"}, ["awr"] = {"Awera"}, ["aws"] = {"South Awyu"}, ["awt"] = {"Araweté"}, ["awu"] = {"Central Awyu"}, ["awv"] = {"Jair Awyu"}, ["aww"] = {"Awun"}, ["awx"] = {"Awara"}, ["awy"] = {"Edera Awyu"}, ["axb"] = {"Abipon"}, ["axe"] = {"Ayerrerenge"}, ["axg"] = {"Mato Grosso Arára"}, ["axk"] = {"Yaka (Central African Republic)"}, ["axl"] = {"Lower Southern Aranda"}, ["axm"] = {"Middle Armenian"}, ["axx"] = {"Xârâgurè"}, ["aya"] = {"Awar"}, ["ayb"] = {"Ayizo Gbe"}, ["ayc"] = {"Southern Aymara"}, ["ayd"] = {"Ayabadhu"}, ["aye"] = {"Ayere"}, ["ayg"] = {"Ginyanga"}, ["ayh"] = {"Hadrami Arabic"}, ["ayi"] = {"Leyigha"}, ["ayk"] = {"Akuku"}, ["ayl"] = {"Libyan Arabic"}, ["ayn"] = {"Sanaani Arabic"}, ["ayo"] = {"Ayoreo"}, ["ayp"] = {"North Mesopotamian Arabic"}, ["ayq"] = {"Ayi (Papua New Guinea)"}, ["ayr"] = {"Central Aymara"}, ["ays"] = {"Sorsogon Ayta"}, ["ayt"] = {"Magbukun Ayta"}, ["ayu"] = {"Ayu"}, ["ayz"] = {"Mai Brat"}, ["aza"] = {"Azha"}, ["azb"] = {"South Azerbaijani"}, ["azc"] = {"Uto-Aztecan languages"}, ["azd"] = {"Eastern Durango Nahuatl"}, ["azg"] = {"San Pedro Amuzgos Amuzgo"}, ["azj"] = {"North Azerbaijani"}, ["azm"] = {"Ipalapa Amuzgo"}, ["azn"] = {"Western Durango Nahuatl"}, ["azo"] = {"Awing"}, ["azt"] = {"Faire Atta"}, ["azz"] = {"Highland Puebla Nahuatl"}, ["baa"] = {"Babatana"}, ["bab"] = {"Bainouk-Gunyuño"}, ["bac"] = {"Badui"}, ["bad"] = {"Banda languages"}, ["bae"] = {"Baré"}, ["baf"] = {"Nubaca"}, ["bag"] = {"Tuki"}, ["bah"] = {"Bahamas Creole English"}, ["bai"] = {"Bamileke languages"}, ["baj"] = {"Barakai"}, ["bal"] = {"Baluchi"}, ["ban"] = {"Balinese"}, ["bao"] = {"Waimaha"}, ["bap"] = {"Bantawa"}, ["bar"] = {"Bavarian"}, ["bas"] = {"Basa (Cameroon)"}, ["bat"] = {"Baltic languages"}, ["bau"] = {"Bada (Nigeria)"}, ["bav"] = {"Vengo"}, ["baw"] = {"Bambili-Bambui"}, ["bax"] = {"Bamun"}, ["bay"] = {"Batuley"}, ["bba"] = {"Baatonum"}, ["bbb"] = {"Barai"}, ["bbc"] = {"Batak Toba"}, ["bbd"] = {"Bau"}, ["bbe"] = {"Bangba"}, ["bbf"] = {"Baibai"}, ["bbg"] = {"Barama"}, ["bbh"] = {"Bugan"}, ["bbi"] = {"Barombi"}, ["bbj"] = {"Ghomálá'"}, ["bbk"] = {"Babanki"}, ["bbl"] = {"Bats"}, ["bbm"] = {"Babango"}, ["bbn"] = {"Uneapa"}, ["bbo"] = {"Northern Bobo Madaré", "Konabéré"}, ["bbp"] = {"West Central Banda"}, ["bbq"] = {"Bamali"}, ["bbr"] = {"Girawa"}, ["bbs"] = {"Bakpinka"}, ["bbt"] = {"Mburku"}, ["bbu"] = {"Kulung (Nigeria)"}, ["bbv"] = {"Karnai"}, ["bbw"] = {"Baba"}, ["bbx"] = {"Bubia"}, ["bby"] = {"Befang"}, ["bca"] = {"Central Bai"}, ["bcb"] = {"Bainouk-Samik"}, ["bcc"] = {"Southern Balochi"}, ["bcd"] = {"North Babar"}, ["bce"] = {"Bamenyam"}, ["bcf"] = {"Bamu"}, ["bcg"] = {"Baga Pokur"}, ["bch"] = {"Bariai"}, ["bci"] = {"Baoulé"}, ["bcj"] = {"Bardi"}, ["bck"] = {"Bunuba"}, ["bcl"] = {"Central Bikol"}, ["bcm"] = {"Bannoni"}, ["bcn"] = {"Bali (Nigeria)"}, ["bco"] = {"Kaluli"}, ["bcp"] = {"Bali (Democratic Republic of Congo)"}, ["bcq"] = {"Bench"}, ["bcr"] = {"Babine"}, ["bcs"] = {"Kohumono"}, ["bct"] = {"Bendi"}, ["bcu"] = {"Awad Bing"}, ["bcv"] = {"Shoo-Minda-Nye"}, ["bcw"] = {"Bana"}, ["bcy"] = {"Bacama"}, ["bcz"] = {"Bainouk-Gunyaamolo"}, ["bda"] = {"Bayot"}, ["bdb"] = {"Basap"}, ["bdc"] = {"Emberá-Baudó"}, ["bdd"] = {"Bunama"}, ["bde"] = {"Bade"}, ["bdf"] = {"Biage"}, ["bdg"] = {"Bonggi"}, ["bdh"] = {"Baka (South Sudan)"}, ["bdi"] = {"Burun"}, ["bdj"] = {"Bai (South Sudan)", "Bai"}, ["bdk"] = {"Budukh"}, ["bdl"] = {"Indonesian Bajau"}, ["bdm"] = {"Buduma"}, ["bdn"] = {"Baldemu"}, ["bdo"] = {"Morom"}, ["bdp"] = {"Bende"}, ["bdq"] = {"Bahnar"}, ["bdr"] = {"West Coast Bajau"}, ["bds"] = {"Burunge"}, ["bdt"] = {"Bokoto"}, ["bdu"] = {"Oroko"}, ["bdv"] = {"Bodo Parja"}, ["bdw"] = {"Baham"}, ["bdx"] = {"Budong-Budong"}, ["bdy"] = {"Bandjalang"}, ["bdz"] = {"Badeshi"}, ["bea"] = {"Beaver"}, ["beb"] = {"Bebele"}, ["bec"] = {"Iceve-Maci"}, ["bed"] = {"Bedoanas"}, ["bee"] = {"Byangsi"}, ["bef"] = {"Benabena"}, ["beg"] = {"Belait"}, ["beh"] = {"Biali"}, ["bei"] = {"Bekati'"}, ["bej"] = {"Beja", "Bedawiyet"}, ["bek"] = {"Bebeli"}, ["bem"] = {"Bemba (Zambia)"}, ["beo"] = {"Beami"}, ["bep"] = {"Besoa"}, ["beq"] = {"Beembe"}, ["ber"] = {"Berber languages"}, ["bes"] = {"Besme"}, ["bet"] = {"Guiberoua Béte"}, ["beu"] = {"Blagar"}, ["bev"] = {"Daloa Bété"}, ["bew"] = {"Betawi"}, ["bex"] = {"Jur Modo"}, ["bey"] = {"Beli (Papua New Guinea)"}, ["bez"] = {"Bena (Tanzania)"}, ["bfa"] = {"Bari"}, ["bfb"] = {"Pauri Bareli"}, ["bfc"] = {"Panyi Bai", "Northern Bai"}, ["bfd"] = {"Bafut"}, ["bfe"] = {"Betaf", "Tena"}, ["bff"] = {"Bofi"}, ["bfg"] = {"Busang Kayan"}, ["bfh"] = {"Blafe"}, ["bfi"] = {"British Sign Language"}, ["bfj"] = {"Bafanji"}, ["bfk"] = {"Ban Khor Sign Language"}, ["bfl"] = {"Banda-Ndélé"}, ["bfm"] = {"Mmen"}, ["bfn"] = {"Bunak"}, ["bfo"] = {"Malba Birifor"}, ["bfp"] = {"Beba"}, ["bfq"] = {"Badaga"}, ["bfr"] = {"Bazigar"}, ["bfs"] = {"Southern Bai"}, ["bft"] = {"Balti"}, ["bfu"] = {"Gahri"}, ["bfw"] = {"Bondo"}, ["bfx"] = {"Bantayanon"}, ["bfy"] = {"Bagheli"}, ["bfz"] = {"Mahasu Pahari"}, ["bga"] = {"Gwamhi-Wuri"}, ["bgb"] = {"Bobongko"}, ["bgc"] = {"Haryanvi"}, ["bgd"] = {"Rathwi Bareli"}, ["bge"] = {"Bauria"}, ["bgf"] = {"Bangandu"}, ["bgg"] = {"Bugun"}, ["bgi"] = {"Giangan"}, ["bgj"] = {"Bangolan"}, ["bgk"] = {"Bit", "Buxinhua"}, ["bgl"] = {"Bo (Laos)"}, ["bgn"] = {"Western Balochi"}, ["bgo"] = {"Baga Koga"}, ["bgp"] = {"Eastern Balochi"}, ["bgq"] = {"Bagri"}, ["bgr"] = {"Bawm Chin"}, ["bgs"] = {"Tagabawa"}, ["bgt"] = {"Bughotu"}, ["bgu"] = {"Mbongno"}, ["bgv"] = {"Warkay-Bipim"}, ["bgw"] = {"Bhatri"}, ["bgx"] = {"Balkan Gagauz Turkish"}, ["bgy"] = {"Benggoi"}, ["bgz"] = {"Banggai"}, ["bha"] = {"Bharia"}, ["bhb"] = {"Bhili"}, ["bhc"] = {"Biga"}, ["bhd"] = {"Bhadrawahi"}, ["bhe"] = {"Bhaya"}, ["bhf"] = {"Odiai"}, ["bhg"] = {"Binandere"}, ["bhh"] = {"Bukharic"}, ["bhi"] = {"Bhilali"}, ["bhj"] = {"Bahing"}, ["bhl"] = {"Bimin"}, ["bhm"] = {"Bathari"}, ["bhn"] = {"Bohtan Neo-Aramaic"}, ["bho"] = {"Bhojpuri"}, ["bhp"] = {"Bima"}, ["bhq"] = {"Tukang Besi South"}, ["bhr"] = {"Bara Malagasy"}, ["bhs"] = {"Buwal"}, ["bht"] = {"Bhattiyali"}, ["bhu"] = {"Bhunjia"}, ["bhv"] = {"Bahau"}, ["bhw"] = {"Biak"}, ["bhx"] = {"Bhalay"}, ["bhy"] = {"Bhele"}, ["bhz"] = {"Bada (Indonesia)"}, ["bia"] = {"Badimaya"}, ["bib"] = {"Bissa", "Bisa"}, ["bid"] = {"Bidiyo"}, ["bie"] = {"Bepour"}, ["bif"] = {"Biafada"}, ["big"] = {"Biangai"}, ["bik"] = {"Bikol"}, ["bil"] = {"Bile"}, ["bim"] = {"Bimoba"}, ["bin"] = {"Bini", "Edo"}, ["bio"] = {"Nai"}, ["bip"] = {"Bila"}, ["biq"] = {"Bipi"}, ["bir"] = {"Bisorio"}, ["bit"] = {"Berinomo"}, ["biu"] = {"Biete"}, ["biv"] = {"Southern Birifor"}, ["biw"] = {"Kol (Cameroon)"}, ["bix"] = {"Bijori"}, ["biy"] = {"Birhor"}, ["biz"] = {"Baloi"}, ["bja"] = {"Budza"}, ["bjb"] = {"Banggarla"}, ["bjc"] = {"Bariji"}, ["bje"] = {"Biao-Jiao Mien"}, ["bjf"] = {"Barzani Jewish Neo-Aramaic"}, ["bjg"] = {"Bidyogo"}, ["bjh"] = {"Bahinemo"}, ["bji"] = {"Burji"}, ["bjj"] = {"Kanauji"}, ["bjk"] = {"Barok"}, ["bjl"] = {"Bulu (Papua New Guinea)"}, ["bjm"] = {"Bajelani"}, ["bjn"] = {"Banjar"}, ["bjo"] = {"Mid-Southern Banda"}, ["bjp"] = {"Fanamaket"}, ["bjr"] = {"Binumarien"}, ["bjs"] = {"Bajan"}, ["bjt"] = {"Balanta-Ganja"}, ["bju"] = {"Busuu"}, ["bjv"] = {"Bedjond"}, ["bjw"] = {"Bakwé"}, ["bjx"] = {"Banao Itneg"}, ["bjy"] = {"Bayali"}, ["bjz"] = {"Baruga"}, ["bka"] = {"Kyak"}, ["bkc"] = {"Baka (Cameroon)"}, ["bkd"] = {"Binukid", "Talaandig"}, ["bkf"] = {"Beeke"}, ["bkg"] = {"Buraka"}, ["bkh"] = {"Bakoko"}, ["bki"] = {"Baki"}, ["bkj"] = {"Pande"}, ["bkk"] = {"Brokskat"}, ["bkl"] = {"Berik"}, ["bkm"] = {"Kom (Cameroon)"}, ["bkn"] = {"Bukitan"}, ["bko"] = {"Kwa'"}, ["bkp"] = {"Boko (Democratic Republic of Congo)"}, ["bkq"] = {"Bakairí"}, ["bkr"] = {"Bakumpai"}, ["bks"] = {"Northern Sorsoganon"}, ["bkt"] = {"Boloki"}, ["bku"] = {"Buhid"}, ["bkv"] = {"Bekwarra"}, ["bkw"] = {"Bekwel"}, ["bkx"] = {"Baikeno"}, ["bky"] = {"Bokyi"}, ["bkz"] = {"Bungku"}, ["bla"] = {"Siksika"}, ["blb"] = {"Bilua"}, ["blc"] = {"Bella Coola"}, ["bld"] = {"Bolango"}, ["ble"] = {"Balanta-Kentohe"}, ["blf"] = {"Buol"}, ["blh"] = {"Kuwaa"}, ["bli"] = {"Bolia"}, ["blj"] = {"Bolongan"}, ["blk"] = {"Pa'o Karen", "Pa'O"}, ["bll"] = {"Biloxi"}, ["blm"] = {"Beli (South Sudan)"}, ["bln"] = {"Southern Catanduanes Bikol"}, ["blo"] = {"Anii"}, ["blp"] = {"Blablanga"}, ["blq"] = {"Baluan-Pam"}, ["blr"] = {"Blang"}, ["bls"] = {"Balaesang"}, ["blt"] = {"Tai Dam"}, ["blv"] = {"Kibala", "Bolo"}, ["blw"] = {"Balangao"}, ["blx"] = {"Mag-Indi Ayta"}, ["bly"] = {"Notre"}, ["blz"] = {"Balantak"}, ["bma"] = {"Lame"}, ["bmb"] = {"Bembe"}, ["bmc"] = {"Biem"}, ["bmd"] = {"Baga Manduri"}, ["bme"] = {"Limassa"}, ["bmf"] = {"Bom-Kim"}, ["bmg"] = {"Bamwe"}, ["bmh"] = {"Kein"}, ["bmi"] = {"Bagirmi"}, ["bmj"] = {"Bote-Majhi"}, ["bmk"] = {"Ghayavi"}, ["bml"] = {"Bomboli"}, ["bmm"] = {"Northern Betsimisaraka Malagasy"}, ["bmn"] = {"Bina (Papua New Guinea)"}, ["bmo"] = {"Bambalang"}, ["bmp"] = {"Bulgebi"}, ["bmq"] = {"Bomu"}, ["bmr"] = {"Muinane"}, ["bms"] = {"Bilma Kanuri"}, ["bmt"] = {"Biao Mon"}, ["bmu"] = {"Somba-Siawari"}, ["bmv"] = {"Bum"}, ["bmw"] = {"Bomwali"}, ["bmx"] = {"Baimak"}, ["bmz"] = {"Baramu"}, ["bna"] = {"Bonerate"}, ["bnb"] = {"Bookan"}, ["bnc"] = {"Bontok"}, ["bnd"] = {"Banda (Indonesia)"}, ["bne"] = {"Bintauna"}, ["bnf"] = {"Masiwang"}, ["bng"] = {"Benga"}, ["bni"] = {"Bangi"}, ["bnj"] = {"Eastern Tawbuid"}, ["bnk"] = {"Bierebo"}, ["bnl"] = {"Boon"}, ["bnm"] = {"Batanga"}, ["bnn"] = {"Bunun"}, ["bno"] = {"Bantoanon"}, ["bnp"] = {"Bola"}, ["bnq"] = {"Bantik"}, ["bnr"] = {"Butmas-Tur"}, ["bns"] = {"Bundeli"}, ["bnt"] = {"Bantu languages"}, ["bnu"] = {"Bentong"}, ["bnv"] = {"Bonerif", "Beneraf", "Edwas"}, ["bnw"] = {"Bisis"}, ["bnx"] = {"Bangubangu"}, ["bny"] = {"Bintulu"}, ["bnz"] = {"Beezen"}, ["boa"] = {"Bora"}, ["bob"] = {"Aweer"}, ["boe"] = {"Mundabli-Mufu"}, ["bof"] = {"Bolon"}, ["bog"] = {"Bamako Sign Language"}, ["boh"] = {"Boma"}, ["boi"] = {"Barbareño"}, ["boj"] = {"Anjam"}, ["bok"] = {"Bonjo"}, ["bol"] = {"Bole"}, ["bom"] = {"Berom"}, ["bon"] = {"Bine"}, ["boo"] = {"Tiemacèwè Bozo"}, ["bop"] = {"Bonkiman"}, ["boq"] = {"Bogaya"}, ["bor"] = {"Borôro"}, ["bot"] = {"Bongo"}, ["bou"] = {"Bondei"}, ["bov"] = {"Tuwuli"}, ["bow"] = {"Rema"}, ["box"] = {"Buamu"}, ["boy"] = {"Bodo (Central African Republic)"}, ["boz"] = {"Tiéyaxo Bozo"}, ["bpa"] = {"Daakaka"}, ["bpc"] = {"Mbuk"}, ["bpd"] = {"Banda-Banda"}, ["bpe"] = {"Bauni"}, ["bpg"] = {"Bonggo"}, ["bph"] = {"Botlikh"}, ["bpi"] = {"Bagupi"}, ["bpj"] = {"Binji"}, ["bpk"] = {"Orowe", "'Ôrôê"}, ["bpl"] = {"Broome Pearling Lugger Pidgin"}, ["bpm"] = {"Biyom"}, ["bpn"] = {"Dzao Min"}, ["bpo"] = {"Anasi"}, ["bpp"] = {"Kaure"}, ["bpq"] = {"Banda Malay"}, ["bpr"] = {"Koronadal Blaan"}, ["bps"] = {"Sarangani Blaan"}, ["bpt"] = {"Barrow Point"}, ["bpu"] = {"Bongu"}, ["bpv"] = {"Bian Marind"}, ["bpw"] = {"Bo (Papua New Guinea)"}, ["bpx"] = {"Palya Bareli"}, ["bpy"] = {"Bishnupriya"}, ["bpz"] = {"Bilba"}, ["bqa"] = {"Tchumbuli"}, ["bqb"] = {"Bagusa"}, ["bqc"] = {"Boko (Benin)", "Boo"}, ["bqd"] = {"Bung"}, ["bqf"] = {"Baga Kaloum"}, ["bqg"] = {"Bago-Kusuntu"}, ["bqh"] = {"Baima"}, ["bqi"] = {"Bakhtiari"}, ["bqj"] = {"Bandial"}, ["bqk"] = {"Banda-Mbrès"}, ["bql"] = {"Karian", "Bilakura"}, ["bqm"] = {"Wumboko"}, ["bqn"] = {"Bulgarian Sign Language"}, ["bqo"] = {"Balo"}, ["bqp"] = {"Busa"}, ["bqq"] = {"Biritai"}, ["bqr"] = {"Burusu"}, ["bqs"] = {"Bosngun"}, ["bqt"] = {"Bamukumbit"}, ["bqu"] = {"Boguru"}, ["bqv"] = {"Koro Wachi", "Begbere-Ejar"}, ["bqw"] = {"Buru (Nigeria)"}, ["bqx"] = {"Baangi"}, ["bqy"] = {"Bengkala Sign Language"}, ["bqz"] = {"Bakaka"}, ["bra"] = {"Braj"}, ["brb"] = {"Brao", "Lave"}, ["brc"] = {"Berbice Creole Dutch"}, ["brd"] = {"Baraamu"}, ["brf"] = {"Bira"}, ["brg"] = {"Baure"}, ["brh"] = {"Brahui"}, ["bri"] = {"Mokpwe"}, ["brj"] = {"Bieria"}, ["brk"] = {"Birked"}, ["brl"] = {"Birwa"}, ["brm"] = {"Barambu"}, ["brn"] = {"Boruca"}, ["bro"] = {"Brokkat"}, ["brp"] = {"Barapasi"}, ["brq"] = {"Breri"}, ["brr"] = {"Birao"}, ["brs"] = {"Baras"}, ["brt"] = {"Bitare"}, ["bru"] = {"Eastern Bru"}, ["brv"] = {"Western Bru"}, ["brw"] = {"Bellari"}, ["brx"] = {"Bodo (India)"}, ["bry"] = {"Burui"}, ["brz"] = {"Bilbil"}, ["bsa"] = {"Abinomn"}, ["bsb"] = {"Brunei Bisaya"}, ["bsc"] = {"Bassari", "Oniyan"}, ["bse"] = {"Wushi"}, ["bsf"] = {"Bauchi"}, ["bsg"] = {"Bashkardi"}, ["bsh"] = {"Kati"}, ["bsi"] = {"Bassossi"}, ["bsj"] = {"Bangwinji"}, ["bsk"] = {"Burushaski"}, ["bsl"] = {"Basa-Gumna"}, ["bsm"] = {"Busami"}, ["bsn"] = {"Barasana-Eduria"}, ["bso"] = {"Buso"}, ["bsp"] = {"Baga Sitemu"}, ["bsq"] = {"Bassa"}, ["bsr"] = {"Bassa-Kontagora"}, ["bss"] = {"Akoose"}, ["bst"] = {"Basketo"}, ["bsu"] = {"Bahonsuai"}, ["bsv"] = {"Baga Sobané"}, ["bsw"] = {"Baiso"}, ["bsx"] = {"Yangkam"}, ["bsy"] = {"Sabah Bisaya"}, ["bta"] = {"Bata"}, ["btc"] = {"Bati (Cameroon)"}, ["btd"] = {"Batak Dairi"}, ["bte"] = {"Gamo-Ningi"}, ["btf"] = {"Birgit"}, ["btg"] = {"Gagnoa Bété"}, ["bth"] = {"Biatah Bidayuh"}, ["bti"] = {"Burate"}, ["btj"] = {"Bacanese Malay"}, ["btk"] = {"Batak languages"}, ["btm"] = {"Batak Mandailing"}, ["btn"] = {"Ratagnon"}, ["bto"] = {"Rinconada Bikol"}, ["btp"] = {"Budibud"}, ["btq"] = {"Batek"}, ["btr"] = {"Baetora"}, ["bts"] = {"Batak Simalungun"}, ["btt"] = {"Bete-Bendi"}, ["btu"] = {"Batu"}, ["btv"] = {"Bateri"}, ["btw"] = {"Butuanon"}, ["btx"] = {"Batak Karo"}, ["bty"] = {"Bobot"}, ["btz"] = {"Batak Alas-Kluet"}, ["bua"] = {"Buriat"}, ["bub"] = {"Bua"}, ["buc"] = {"Bushi"}, ["bud"] = {"Ntcham"}, ["bue"] = {"Beothuk"}, ["buf"] = {"Bushoong"}, ["bug"] = {"Buginese"}, ["buh"] = {"Younuo Bunu"}, ["bui"] = {"Bongili"}, ["buj"] = {"Basa-Gurmana"}, ["buk"] = {"Bugawac"}, ["bum"] = {"Bulu (Cameroon)"}, ["bun"] = {"Sherbro"}, ["buo"] = {"Terei"}, ["bup"] = {"Busoa"}, ["buq"] = {"Brem"}, ["bus"] = {"Bokobaru"}, ["but"] = {"Bungain"}, ["buu"] = {"Budu"}, ["buv"] = {"Bun"}, ["buw"] = {"Bubi"}, ["bux"] = {"Boghom"}, ["buy"] = {"Bullom So"}, ["buz"] = {"Bukwen"}, ["bva"] = {"Barein"}, ["bvb"] = {"Bube"}, ["bvc"] = {"Baelelea"}, ["bvd"] = {"Baeggu"}, ["bve"] = {"Berau Malay"}, ["bvf"] = {"Boor"}, ["bvg"] = {"Bonkeng"}, ["bvh"] = {"Bure"}, ["bvi"] = {"Belanda Viri"}, ["bvj"] = {"Baan"}, ["bvk"] = {"Bukat"}, ["bvl"] = {"Bolivian Sign Language"}, ["bvm"] = {"Bamunka"}, ["bvn"] = {"Buna"}, ["bvo"] = {"Bolgo"}, ["bvp"] = {"Bumang"}, ["bvq"] = {"Birri"}, ["bvr"] = {"Burarra"}, ["bvt"] = {"Bati (Indonesia)"}, ["bvu"] = {"Bukit Malay"}, ["bvv"] = {"Baniva"}, ["bvw"] = {"Boga"}, ["bvx"] = {"Dibole"}, ["bvy"] = {"Baybayanon"}, ["bvz"] = {"Bauzi"}, ["bwa"] = {"Bwatoo"}, ["bwb"] = {"Namosi-Naitasiri-Serua"}, ["bwc"] = {"Bwile"}, ["bwd"] = {"Bwaidoka"}, ["bwe"] = {"Bwe Karen"}, ["bwf"] = {"Boselewa"}, ["bwg"] = {"Barwe"}, ["bwh"] = {"Bishuo"}, ["bwi"] = {"Baniwa"}, ["bwj"] = {"Láá Láá Bwamu"}, ["bwk"] = {"Bauwaki"}, ["bwl"] = {"Bwela"}, ["bwm"] = {"Biwat"}, ["bwn"] = {"Wunai Bunu"}, ["bwo"] = {"Boro (Ethiopia)", "Borna (Ethiopia)"}, ["bwp"] = {"Mandobo Bawah"}, ["bwq"] = {"Southern Bobo Madaré"}, ["bwr"] = {"Bura-Pabir"}, ["bws"] = {"Bomboma"}, ["bwt"] = {"Bafaw-Balong"}, ["bwu"] = {"Buli (Ghana)"}, ["bww"] = {"Bwa"}, ["bwx"] = {"Bu-Nao Bunu"}, ["bwy"] = {"Cwi Bwamu"}, ["bwz"] = {"Bwisi"}, ["bxa"] = {"Tairaha"}, ["bxb"] = {"Belanda Bor"}, ["bxc"] = {"Molengue"}, ["bxd"] = {"Pela"}, ["bxe"] = {"Birale"}, ["bxf"] = {"Bilur", "Minigir"}, ["bxg"] = {"Bangala"}, ["bxh"] = {"Buhutu"}, ["bxi"] = {"Pirlatapa"}, ["bxj"] = {"Bayungu"}, ["bxk"] = {"Bukusu", "Lubukusu"}, ["bxl"] = {"Jalkunan"}, ["bxm"] = {"Mongolia Buriat"}, ["bxn"] = {"Burduna"}, ["bxo"] = {"Barikanchi"}, ["bxp"] = {"Bebil"}, ["bxq"] = {"Beele"}, ["bxr"] = {"Russia Buriat"}, ["bxs"] = {"Busam"}, ["bxu"] = {"China Buriat"}, ["bxv"] = {"Berakou"}, ["bxw"] = {"Bankagooma"}, ["bxz"] = {"Binahari"}, ["bya"] = {"Batak"}, ["byb"] = {"Bikya"}, ["byc"] = {"Ubaghara"}, ["byd"] = {"Benyadu'"}, ["bye"] = {"Pouye"}, ["byf"] = {"Bete"}, ["byg"] = {"Baygo"}, ["byh"] = {"Bhujel"}, ["byi"] = {"Buyu"}, ["byj"] = {"Bina (Nigeria)"}, ["byk"] = {"Biao"}, ["byl"] = {"Bayono"}, ["bym"] = {"Bidjara"}, ["byn"] = {"Bilin", "Blin"}, ["byo"] = {"Biyo"}, ["byp"] = {"Bumaji"}, ["byq"] = {"Basay"}, ["byr"] = {"Baruya", "Yipma"}, ["bys"] = {"Burak"}, ["byt"] = {"Berti"}, ["byv"] = {"Medumba"}, ["byw"] = {"Belhariya"}, ["byx"] = {"Qaqet"}, ["byz"] = {"Banaro"}, ["bza"] = {"Bandi"}, ["bzb"] = {"Andio"}, ["bzc"] = {"Southern Betsimisaraka Malagasy"}, ["bzd"] = {"Bribri"}, ["bze"] = {"Jenaama Bozo"}, ["bzf"] = {"Boikin"}, ["bzg"] = {"Babuza"}, ["bzh"] = {"Mapos Buang"}, ["bzi"] = {"Bisu"}, ["bzj"] = {"Belize Kriol English"}, ["bzk"] = {"Nicaragua Creole English"}, ["bzl"] = {"Boano (Sulawesi)"}, ["bzm"] = {"Bolondo"}, ["bzn"] = {"Boano (Maluku)"}, ["bzo"] = {"Bozaba"}, ["bzp"] = {"Kemberano"}, ["bzq"] = {"Buli (Indonesia)"}, ["bzr"] = {"Biri"}, ["bzs"] = {"Brazilian Sign Language"}, ["bzt"] = {"Brithenig"}, ["bzu"] = {"Burmeso"}, ["bzv"] = {"Naami"}, ["bzw"] = {"Basa (Nigeria)"}, ["bzx"] = {"Kɛlɛngaxo Bozo"}, ["bzy"] = {"Obanliku"}, ["bzz"] = {"Evant"}, ["caa"] = {"Chortí"}, ["cab"] = {"Garifuna"}, ["cac"] = {"Chuj"}, ["cad"] = {"Caddo"}, ["cae"] = {"Lehar", "Laalaa"}, ["caf"] = {"Southern Carrier"}, ["cag"] = {"Nivaclé"}, ["cah"] = {"Cahuarano"}, ["cai"] = {"Central American Indian languages"}, ["caj"] = {"Chané"}, ["cak"] = {"Kaqchikel", "Cakchiquel"}, ["cal"] = {"Carolinian"}, ["cam"] = {"Cemuhî"}, ["can"] = {"Chambri"}, ["cao"] = {"Chácobo"}, ["cap"] = {"Chipaya"}, ["caq"] = {"Car Nicobarese"}, ["car"] = {"Galibi Carib"}, ["cas"] = {"Tsimané"}, ["cau"] = {"Caucasian languages"}, ["cav"] = {"Cavineña"}, ["caw"] = {"Callawalla"}, ["cax"] = {"Chiquitano"}, ["cay"] = {"Cayuga"}, ["caz"] = {"Canichana"}, ["cba"] = {"Chibchan languages"}, ["cbb"] = {"Cabiyarí"}, ["cbc"] = {"Carapana"}, ["cbd"] = {"Carijona"}, ["cbg"] = {"Chimila"}, ["cbi"] = {"Chachi"}, ["cbj"] = {"Ede Cabe"}, ["cbk"] = {"Chavacano"}, ["cbl"] = {"Bualkhaw Chin"}, ["cbn"] = {"Nyahkur"}, ["cbo"] = {"Izora"}, ["cbq"] = {"Tsucuba", "Cuba"}, ["cbr"] = {"Cashibo-Cacataibo"}, ["cbs"] = {"Cashinahua"}, ["cbt"] = {"Chayahuita"}, ["cbu"] = {"Candoshi-Shapra"}, ["cbv"] = {"Cacua"}, ["cbw"] = {"Kinabalian"}, ["cby"] = {"Carabayo"}, ["ccc"] = {"Chamicuro"}, ["ccd"] = {"Cafundo Creole"}, ["cce"] = {"Chopi"}, ["ccg"] = {"Samba Daka"}, ["cch"] = {"Atsam"}, ["ccj"] = {"Kasanga"}, ["ccl"] = {"Cutchi-Swahili"}, ["ccm"] = {"Malaccan Creole Malay"}, ["ccn"] = {"North Caucasian languages"}, ["cco"] = {"Comaltepec Chinantec"}, ["ccp"] = {"Chakma"}, ["ccr"] = {"Cacaopera"}, ["ccs"] = {"South Caucasian languages"}, ["cda"] = {"Choni"}, ["cdc"] = {"Chadic languages"}, ["cdd"] = {"Caddoan languages"}, ["cde"] = {"Chenchu"}, ["cdf"] = {"Chiru"}, ["cdh"] = {"Chambeali"}, ["cdi"] = {"Chodri"}, ["cdj"] = {"Churahi"}, ["cdm"] = {"Chepang"}, ["cdn"] = {"Chaudangsi"}, ["cdo"] = {"Min Dong Chinese"}, ["cdr"] = {"Cinda-Regi-Tiyal"}, ["cds"] = {"Chadian Sign Language"}, ["cdy"] = {"Chadong"}, ["cdz"] = {"Koda"}, ["cea"] = {"Lower Chehalis"}, ["ceb"] = {"Cebuano"}, ["ceg"] = {"Chamacoco"}, ["cek"] = {"Eastern Khumi Chin"}, ["cel"] = {"Celtic languages"}, ["cen"] = {"Cen"}, ["cet"] = {"Centúúm"}, ["cey"] = {"Ekai Chin"}, ["cfa"] = {"Dijim-Bwilim"}, ["cfd"] = {"Cara"}, ["cfg"] = {"Como Karim"}, ["cfm"] = {"Falam Chin"}, ["cga"] = {"Changriwa"}, ["cgc"] = {"Kagayanen"}, ["cgg"] = {"Chiga"}, ["cgk"] = {"Chocangacakha"}, ["chb"] = {"Chibcha"}, ["chc"] = {"Catawba"}, ["chd"] = {"Highland Oaxaca Chontal"}, ["chf"] = {"Tabasco Chontal"}, ["chg"] = {"Chagatai"}, ["chh"] = {"Chinook"}, ["chj"] = {"Ojitlán Chinantec"}, ["chk"] = {"Chuukese"}, ["chl"] = {"Cahuilla"}, ["chm"] = {"Mari (Russia)"}, ["chn"] = {"Chinook jargon"}, ["cho"] = {"Choctaw"}, ["chp"] = {"Chipewyan", "Dene Suline"}, ["chq"] = {"Quiotepec Chinantec"}, ["chr"] = {"Cherokee"}, ["cht"] = {"Cholón"}, ["chw"] = {"Chuwabu"}, ["chx"] = {"Chantyal"}, ["chy"] = {"Cheyenne"}, ["chz"] = {"Ozumacín Chinantec"}, ["cia"] = {"Cia-Cia"}, ["cib"] = {"Ci Gbe"}, ["cic"] = {"Chickasaw"}, ["cid"] = {"Chimariko"}, ["cie"] = {"Cineni"}, ["cih"] = {"Chinali"}, ["cik"] = {"Chitkuli Kinnauri"}, ["cim"] = {"Cimbrian"}, ["cin"] = {"Cinta Larga"}, ["cip"] = {"Chiapanec"}, ["cir"] = {"Tiri", "Haméa", "Méa"}, ["ciw"] = {"Chippewa"}, ["ciy"] = {"Chaima"}, ["cja"] = {"Western Cham"}, ["cje"] = {"Chru"}, ["cjh"] = {"Upper Chehalis"}, ["cji"] = {"Chamalal"}, ["cjk"] = {"Chokwe"}, ["cjm"] = {"Eastern Cham"}, ["cjn"] = {"Chenapian"}, ["cjo"] = {"Ashéninka Pajonal"}, ["cjp"] = {"Cabécar"}, ["cjs"] = {"Shor"}, ["cjv"] = {"Chuave"}, ["cjy"] = {"Jinyu Chinese"}, ["ckb"] = {"Central Kurdish"}, ["ckh"] = {"Chak"}, ["ckl"] = {"Cibak"}, ["ckm"] = {"Chakavian"}, ["ckn"] = {"Kaang Chin"}, ["cko"] = {"Anufo"}, ["ckq"] = {"Kajakse"}, ["ckr"] = {"Kairak"}, ["cks"] = {"Tayo"}, ["ckt"] = {"Chukot"}, ["cku"] = {"Koasati"}, ["ckv"] = {"Kavalan"}, ["ckx"] = {"Caka"}, ["cky"] = {"Cakfem-Mushere"}, ["ckz"] = {"Cakchiquel-Quiché Mixed Language"}, ["cla"] = {"Ron"}, ["clc"] = {"Chilcotin", "Tsilhqot’in"}, ["cld"] = {"Chaldean Neo-Aramaic"}, ["cle"] = {"Lealao Chinantec"}, ["clh"] = {"Chilisso"}, ["cli"] = {"Chakali"}, ["clj"] = {"Laitu Chin"}, ["clk"] = {"Idu-Mishmi"}, ["cll"] = {"Chala"}, ["clm"] = {"Klallam", "Clallam"}, ["clo"] = {"Lowland Oaxaca Chontal"}, ["cls"] = {"Classical Sanskrit"}, ["clt"] = {"Lautu Chin"}, ["clu"] = {"Caluyanun"}, ["clw"] = {"Chulym"}, ["cly"] = {"Eastern Highland Chatino"}, ["cma"] = {"Maa"}, ["cmc"] = {"Chamic languages"}, ["cme"] = {"Cerma"}, ["cmg"] = {"Classical Mongolian"}, ["cmi"] = {"Emberá-Chamí"}, ["cml"] = {"Campalagian"}, ["cmm"] = {"Michigamea"}, ["cmn"] = {"Mandarin Chinese"}, ["cmo"] = {"Central Mnong"}, ["cmr"] = {"Mro-Khimi Chin"}, ["cms"] = {"Messapic"}, ["cmt"] = {"Camtho"}, ["cna"] = {"Changthang"}, ["cnb"] = {"Chinbon Chin"}, ["cnc"] = {"Côông"}, ["cng"] = {"Northern Qiang"}, ["cnh"] = {"Hakha Chin", "Haka Chin"}, ["cni"] = {"Asháninka"}, ["cnk"] = {"Khumi Chin"}, ["cnl"] = {"Lalana Chinantec"}, ["cno"] = {"Con"}, ["cnp"] = {"Northern Ping Chinese", "Northern Pinghua"}, ["cnq"] = {"Chung"}, ["cnr"] = {"Montenegrin"}, ["cns"] = {"Central Asmat"}, ["cnt"] = {"Tepetotutla Chinantec"}, ["cnu"] = {"Chenoua"}, ["cnw"] = {"Ngawn Chin"}, ["cnx"] = {"Middle Cornish"}, ["coa"] = {"Cocos Islands Malay"}, ["cob"] = {"Chicomuceltec"}, ["coc"] = {"Cocopa"}, ["cod"] = {"Cocama-Cocamilla"}, ["coe"] = {"Koreguaje"}, ["cof"] = {"Colorado"}, ["cog"] = {"Chong"}, ["coh"] = {"Chonyi-Dzihana-Kauma", "Chichonyi-Chidzihana-Chikauma"}, ["coj"] = {"Cochimi"}, ["cok"] = {"Santa Teresa Cora"}, ["col"] = {"Columbia-Wenatchi"}, ["com"] = {"Comanche"}, ["con"] = {"Cofán"}, ["coo"] = {"Comox"}, ["cop"] = {"Coptic"}, ["coq"] = {"Coquille"}, ["cot"] = {"Caquinte"}, ["cou"] = {"Wamey"}, ["cov"] = {"Cao Miao"}, ["cow"] = {"Cowlitz"}, ["cox"] = {"Nanti"}, ["coz"] = {"Chochotec"}, ["cpa"] = {"Palantla Chinantec"}, ["cpb"] = {"Ucayali-Yurúa Ashéninka"}, ["cpc"] = {"Ajyíninka Apurucayali"}, ["cpe"] = {"English-based creoles and pidgins"}, ["cpf"] = {"French-based creoles and pidgins"}, ["cpg"] = {"Cappadocian Greek"}, ["cpi"] = {"Chinese Pidgin English"}, ["cpn"] = {"Cherepon"}, ["cpo"] = {"Kpeego"}, ["cpp"] = {"Portuguese-based creoles and pidgins"}, ["cps"] = {"Capiznon"}, ["cpu"] = {"Pichis Ashéninka"}, ["cpx"] = {"Pu-Xian Chinese"}, ["cpy"] = {"South Ucayali Ashéninka"}, ["cqd"] = {"Chuanqiandian Cluster Miao"}, ["cra"] = {"Chara"}, ["crb"] = {"Island Carib"}, ["crc"] = {"Lonwolwol"}, ["crd"] = {"Coeur d'Alene"}, ["crf"] = {"Caramanta"}, ["crg"] = {"Michif"}, ["crh"] = {"Crimean Tatar", "Crimean Turkish"}, ["cri"] = {"Sãotomense"}, ["crj"] = {"Southern East Cree"}, ["crk"] = {"Plains Cree"}, ["crl"] = {"Northern East Cree"}, ["crm"] = {"Moose Cree"}, ["crn"] = {"El Nayar Cora"}, ["cro"] = {"Crow"}, ["crp"] = {"Creoles and pidgins"}, ["crq"] = {"Iyo'wujwa Chorote"}, ["crr"] = {"Carolina Algonquian"}, ["crs"] = {"Seselwa Creole French"}, ["crt"] = {"Iyojwa'ja Chorote"}, ["crv"] = {"Chaura"}, ["crw"] = {"Chrau"}, ["crx"] = {"Carrier"}, ["cry"] = {"Cori"}, ["crz"] = {"Cruzeño"}, ["csa"] = {"Chiltepec Chinantec"}, ["csb"] = {"Kashubian"}, ["csc"] = {"Catalan Sign Language", "Lengua de señas catalana", "Llengua de Signes Catalana"}, ["csd"] = {"Chiangmai Sign Language"}, ["cse"] = {"Czech Sign Language"}, ["csf"] = {"Cuba Sign Language"}, ["csg"] = {"Chilean Sign Language"}, ["csh"] = {"Asho Chin"}, ["csi"] = {"Coast Miwok"}, ["csj"] = {"Songlai Chin"}, ["csk"] = {"Jola-Kasa"}, ["csl"] = {"Chinese Sign Language"}, ["csm"] = {"Central Sierra Miwok"}, ["csn"] = {"Colombian Sign Language"}, ["cso"] = {"Sochiapam Chinantec", "Sochiapan Chinantec"}, ["csp"] = {"Southern Ping Chinese", "Southern Pinghua"}, ["csq"] = {"Croatia Sign Language"}, ["csr"] = {"Costa Rican Sign Language"}, ["css"] = {"Southern Ohlone"}, ["cst"] = {"Northern Ohlone"}, ["csu"] = {"Central Sudanic languages"}, ["csv"] = {"Sumtu Chin"}, ["csw"] = {"Swampy Cree"}, ["csx"] = {"Cambodian Sign Language"}, ["csy"] = {"Siyin Chin"}, ["csz"] = {"Coos"}, ["cta"] = {"Tataltepec Chatino"}, ["ctc"] = {"Chetco"}, ["ctd"] = {"Tedim Chin"}, ["cte"] = {"Tepinapa Chinantec"}, ["ctg"] = {"Chittagonian"}, ["cth"] = {"Thaiphum Chin"}, ["ctl"] = {"Tlacoatzintepec Chinantec"}, ["ctm"] = {"Chitimacha"}, ["ctn"] = {"Chhintange"}, ["cto"] = {"Emberá-Catío"}, ["ctp"] = {"Western Highland Chatino"}, ["cts"] = {"Northern Catanduanes Bikol"}, ["ctt"] = {"Wayanad Chetti"}, ["ctu"] = {"Chol"}, ["cty"] = {"Moundadan Chetty"}, ["ctz"] = {"Zacatepec Chatino"}, ["cua"] = {"Cua"}, ["cub"] = {"Cubeo"}, ["cuc"] = {"Usila Chinantec"}, ["cuh"] = {"Chuka", "Gichuka"}, ["cui"] = {"Cuiba"}, ["cuj"] = {"Mashco Piro"}, ["cuk"] = {"San Blas Kuna"}, ["cul"] = {"Culina", "Kulina"}, ["cuo"] = {"Cumanagoto"}, ["cup"] = {"Cupeño"}, ["cuq"] = {"Cun"}, ["cur"] = {"Chhulung"}, ["cus"] = {"Cushitic languages"}, ["cut"] = {"Teutila Cuicatec"}, ["cuu"] = {"Tai Ya"}, ["cuv"] = {"Cuvok"}, ["cuw"] = {"Chukwa"}, ["cux"] = {"Tepeuxila Cuicatec"}, ["cuy"] = {"Cuitlatec"}, ["cvg"] = {"Chug"}, ["cvn"] = {"Valle Nacional Chinantec"}, ["cwa"] = {"Kabwa"}, ["cwb"] = {"Maindo"}, ["cwd"] = {"Woods Cree"}, ["cwe"] = {"Kwere"}, ["cwg"] = {"Chewong", "Cheq Wong"}, ["cwt"] = {"Kuwaataay"}, ["cxh"] = {"Cha'ari"}, ["cya"] = {"Nopala Chatino"}, ["cyb"] = {"Cayubaba"}, ["cyo"] = {"Cuyonon"}, ["czh"] = {"Huizhou Chinese"}, ["czk"] = {"Knaanic"}, ["czn"] = {"Zenzontepec Chatino"}, ["czo"] = {"Min Zhong Chinese"}, ["czt"] = {"Zotung Chin"}, ["daa"] = {"Dangaléat"}, ["dac"] = {"Dambi"}, ["dad"] = {"Marik"}, ["dae"] = {"Duupa"}, ["dag"] = {"Dagbani"}, ["dah"] = {"Gwahatike"}, ["dai"] = {"Day"}, ["daj"] = {"Dar Fur Daju"}, ["dak"] = {"Dakota"}, ["dal"] = {"Dahalo"}, ["dam"] = {"Damakawa"}, ["dao"] = {"Daai Chin"}, ["daq"] = {"Dandami Maria"}, ["dar"] = {"Dargwa"}, ["das"] = {"Daho-Doo"}, ["dau"] = {"Dar Sila Daju"}, ["dav"] = {"Taita", "Dawida"}, ["daw"] = {"Davawenyo"}, ["dax"] = {"Dayi"}, ["day"] = {"Land Dayak languages"}, ["daz"] = {"Moi-Wadea", "Dao"}, ["dba"] = {"Bangime"}, ["dbb"] = {"Deno"}, ["dbd"] = {"Dadiya"}, ["dbe"] = {"Dabe"}, ["dbf"] = {"Edopi"}, ["dbg"] = {"Dogul Dom Dogon"}, ["dbi"] = {"Doka"}, ["dbj"] = {"Ida'an"}, ["dbl"] = {"Dyirbal"}, ["dbm"] = {"Duguri"}, ["dbn"] = {"Duriankere"}, ["dbo"] = {"Dulbu"}, ["dbp"] = {"Duwai"}, ["dbq"] = {"Daba"}, ["dbr"] = {"Dabarre"}, ["dbt"] = {"Ben Tey Dogon"}, ["dbu"] = {"Bondum Dom Dogon"}, ["dbv"] = {"Dungu"}, ["dbw"] = {"Bankan Tey Dogon"}, ["dby"] = {"Dibiyaso"}, ["dcc"] = {"Deccan"}, ["dcr"] = {"Negerhollands"}, ["dda"] = {"Dadi Dadi"}, ["ddd"] = {"Dongotono"}, ["dde"] = {"Doondo"}, ["ddg"] = {"Fataluku"}, ["ddi"] = {"West Goodenough"}, ["ddj"] = {"Jaru"}, ["ddn"] = {"Dendi (Benin)"}, ["ddo"] = {"Dido"}, ["ddr"] = {"Dhudhuroa"}, ["dds"] = {"Donno So Dogon"}, ["ddw"] = {"Dawera-Daweloor"}, ["dec"] = {"Dagik"}, ["ded"] = {"Dedua"}, ["dee"] = {"Dewoin"}, ["def"] = {"Dezfuli"}, ["deg"] = {"Degema"}, ["deh"] = {"Dehwari"}, ["dei"] = {"Demisa"}, ["del"] = {"Delaware"}, ["dem"] = {"Dem"}, ["den"] = {"Slave (Athapascan)"}, ["dep"] = {"Pidgin Delaware"}, ["deq"] = {"Dendi (Central African Republic)"}, ["der"] = {"Deori"}, ["des"] = {"Desano"}, ["dev"] = {"Domung"}, ["dez"] = {"Dengese"}, ["dga"] = {"Southern Dagaare"}, ["dgb"] = {"Bunoge Dogon"}, ["dgc"] = {"Casiguran Dumagat Agta"}, ["dgd"] = {"Dagaari Dioula"}, ["dge"] = {"Degenan"}, ["dgg"] = {"Doga"}, ["dgh"] = {"Dghwede"}, ["dgi"] = {"Northern Dagara"}, ["dgk"] = {"Dagba"}, ["dgl"] = {"Andaandi", "Dongolawi"}, ["dgn"] = {"Dagoman"}, ["dgo"] = {"Dogri (individual language)"}, ["dgr"] = {"Tlicho", "Dogrib", "Tłı̨chǫ"}, ["dgs"] = {"Dogoso"}, ["dgt"] = {"Ndra'ngith"}, ["dgw"] = {"Daungwurrung"}, ["dgx"] = {"Doghoro"}, ["dgz"] = {"Daga"}, ["dhd"] = {"Dhundari"}, ["dhg"] = {"Dhangu-Djangu", "Dhangu", "Djangu"}, ["dhi"] = {"Dhimal"}, ["dhl"] = {"Dhalandji"}, ["dhm"] = {"Zemba"}, ["dhn"] = {"Dhanki"}, ["dho"] = {"Dhodia"}, ["dhr"] = {"Dhargari"}, ["dhs"] = {"Dhaiso"}, ["dhu"] = {"Dhurga"}, ["dhv"] = {"Dehu", "Drehu"}, ["dhw"] = {"Dhanwar (Nepal)"}, ["dhx"] = {"Dhungaloo"}, ["dia"] = {"Dia"}, ["dib"] = {"South Central Dinka"}, ["dic"] = {"Lakota Dida"}, ["did"] = {"Didinga"}, ["dif"] = {"Dieri", "Diyari"}, ["dig"] = {"Digo", "Chidigo"}, ["dih"] = {"Kumiai"}, ["dii"] = {"Dimbong"}, ["dij"] = {"Dai"}, ["dik"] = {"Southwestern Dinka"}, ["dil"] = {"Dilling"}, ["dim"] = {"Dime"}, ["din"] = {"Dinka"}, ["dio"] = {"Dibo"}, ["dip"] = {"Northeastern Dinka"}, ["diq"] = {"Dimli (individual language)"}, ["dir"] = {"Dirim"}, ["dis"] = {"Dimasa"}, ["diu"] = {"Diriku"}, ["diw"] = {"Northwestern Dinka"}, ["dix"] = {"Dixon Reef"}, ["diy"] = {"Diuwe"}, ["diz"] = {"Ding"}, ["dja"] = {"Djadjawurrung"}, ["djb"] = {"Djinba"}, ["djc"] = {"Dar Daju Daju"}, ["djd"] = {"Djamindjung", "Ngaliwurru"}, ["dje"] = {"Zarma"}, ["djf"] = {"Djangun"}, ["dji"] = {"Djinang"}, ["djj"] = {"Djeebbana"}, ["djk"] = {"Eastern Maroon Creole", "Businenge Tongo", "Nenge"}, ["djm"] = {"Jamsay Dogon"}, ["djn"] = {"Jawoyn", "Djauan"}, ["djo"] = {"Jangkang"}, ["djr"] = {"Djambarrpuyngu"}, ["dju"] = {"Kapriman"}, ["djw"] = {"Djawi"}, ["dka"] = {"Dakpakha"}, ["dkg"] = {"Kadung"}, ["dkk"] = {"Dakka"}, ["dkr"] = {"Kuijau"}, ["dks"] = {"Southeastern Dinka"}, ["dkx"] = {"Mazagway"}, ["dlg"] = {"Dolgan"}, ["dlk"] = {"Dahalik"}, ["dlm"] = {"Dalmatian"}, ["dln"] = {"Darlong"}, ["dma"] = {"Duma"}, ["dmb"] = {"Mombo Dogon"}, ["dmc"] = {"Gavak"}, ["dmd"] = {"Madhi Madhi"}, ["dme"] = {"Dugwor"}, ["dmf"] = {"Medefaidrin"}, ["dmg"] = {"Upper Kinabatangan"}, ["dmk"] = {"Domaaki"}, ["dml"] = {"Dameli"}, ["dmm"] = {"Dama"}, ["dmn"] = {"Mande languages"}, ["dmo"] = {"Kemedzung"}, ["dmr"] = {"East Damar"}, ["dms"] = {"Dampelas"}, ["dmu"] = {"Dubu", "Tebi"}, ["dmv"] = {"Dumpas"}, ["dmw"] = {"Mudburra"}, ["dmx"] = {"Dema"}, ["dmy"] = {"Demta", "Sowari"}, ["dna"] = {"Upper Grand Valley Dani"}, ["dnd"] = {"Daonda"}, ["dne"] = {"Ndendeule"}, ["dng"] = {"Dungan"}, ["dni"] = {"Lower Grand Valley Dani"}, ["dnj"] = {"Dan"}, ["dnk"] = {"Dengka"}, ["dnn"] = {"Dzùùngoo"}, ["dno"] = {"Ndrulo", "Northern Lendu"}, ["dnr"] = {"Danaru"}, ["dnt"] = {"Mid Grand Valley Dani"}, ["dnu"] = {"Danau"}, ["dnv"] = {"Danu"}, ["dnw"] = {"Western Dani"}, ["dny"] = {"Dení"}, ["doa"] = {"Dom"}, ["dob"] = {"Dobu"}, ["doc"] = {"Northern Dong"}, ["doe"] = {"Doe"}, ["dof"] = {"Domu"}, ["doh"] = {"Dong"}, ["doi"] = {"Dogri (macrolanguage)"}, ["dok"] = {"Dondo"}, ["dol"] = {"Doso"}, ["don"] = {"Toura (Papua New Guinea)"}, ["doo"] = {"Dongo"}, ["dop"] = {"Lukpa"}, ["doq"] = {"Dominican Sign Language"}, ["dor"] = {"Dori'o"}, ["dos"] = {"Dogosé"}, ["dot"] = {"Dass"}, ["dov"] = {"Dombe"}, ["dow"] = {"Doyayo"}, ["dox"] = {"Bussa"}, ["doy"] = {"Dompo"}, ["doz"] = {"Dorze"}, ["dpp"] = {"Papar"}, ["dra"] = {"Dravidian languages"}, ["drb"] = {"Dair"}, ["drc"] = {"Minderico"}, ["drd"] = {"Darmiya"}, ["dre"] = {"Dolpo"}, ["drg"] = {"Rungus"}, ["dri"] = {"C'Lela"}, ["drl"] = {"Paakantyi"}, ["drn"] = {"West Damar"}, ["dro"] = {"Daro-Matu Melanau"}, ["drq"] = {"Dura"}, ["drs"] = {"Gedeo"}, ["drt"] = {"Drents"}, ["dru"] = {"Rukai"}, ["dry"] = {"Darai"}, ["dsb"] = {"Lower Sorbian"}, ["dse"] = {"Dutch Sign Language"}, ["dsh"] = {"Daasanach"}, ["dsi"] = {"Disa"}, ["dsk"] = {"Dokshi"}, ["dsl"] = {"Danish Sign Language"}, ["dsn"] = {"Dusner"}, ["dso"] = {"Desiya"}, ["dsq"] = {"Tadaksahak"}, ["dsz"] = {"Mardin Sign Language"}, ["dta"] = {"Daur"}, ["dtb"] = {"Labuk-Kinabatangan Kadazan"}, ["dtd"] = {"Ditidaht"}, ["dth"] = {"Adithinngithigh"}, ["dti"] = {"Ana Tinga Dogon"}, ["dtk"] = {"Tene Kan Dogon"}, ["dtm"] = {"Tomo Kan Dogon"}, ["dtn"] = {"Daatsʼíin"}, ["dto"] = {"Tommo So Dogon"}, ["dtp"] = {"Kadazan Dusun", "Central Dusun"}, ["dtr"] = {"Lotud"}, ["dts"] = {"Toro So Dogon"}, ["dtt"] = {"Toro Tegu Dogon"}, ["dtu"] = {"Tebul Ure Dogon"}, ["dty"] = {"Dotyali"}, ["dua"] = {"Duala"}, ["dub"] = {"Dubli"}, ["duc"] = {"Duna"}, ["due"] = {"Umiray Dumaget Agta"}, ["duf"] = {"Dumbea", "Drubea"}, ["dug"] = {"Duruma", "Chiduruma"}, ["duh"] = {"Dungra Bhil"}, ["dui"] = {"Dumun"}, ["duk"] = {"Uyajitaya"}, ["dul"] = {"Alabat Island Agta"}, ["dum"] = {"Middle Dutch (ca. 1050-1350)"}, ["dun"] = {"Dusun Deyah"}, ["duo"] = {"Dupaninan Agta"}, ["dup"] = {"Duano"}, ["duq"] = {"Dusun Malang"}, ["dur"] = {"Dii"}, ["dus"] = {"Dumi"}, ["duu"] = {"Drung"}, ["duv"] = {"Duvle"}, ["duw"] = {"Dusun Witu"}, ["dux"] = {"Duungooma"}, ["duy"] = {"Dicamay Agta"}, ["duz"] = {"Duli-Gey"}, ["dva"] = {"Duau"}, ["dwa"] = {"Diri"}, ["dwk"] = {"Dawik Kui"}, ["dwr"] = {"Dawro"}, ["dws"] = {"Dutton World Speedwords"}, ["dwu"] = {"Dhuwal"}, ["dww"] = {"Dawawa"}, ["dwy"] = {"Dhuwaya"}, ["dwz"] = {"Dewas Rai"}, ["dya"] = {"Dyan"}, ["dyb"] = {"Dyaberdyaber"}, ["dyd"] = {"Dyugun"}, ["dyg"] = {"Villa Viciosa Agta"}, ["dyi"] = {"Djimini Senoufo"}, ["dyl"] = {"Bhutanese Sign Language"}, ["dym"] = {"Yanda Dom Dogon"}, ["dyn"] = {"Dyangadi", "Dhanggatti"}, ["dyo"] = {"Jola-Fonyi"}, ["dyr"] = {"Dyarim"}, ["dyu"] = {"Dyula"}, ["dyy"] = {"Djabugay", "Dyaabugay"}, ["dza"] = {"Tunzu"}, ["dzd"] = {"Daza"}, ["dze"] = {"Djiwarli"}, ["dzg"] = {"Dazaga"}, ["dzl"] = {"Dzalakha"}, ["dzn"] = {"Dzando"}, ["eaa"] = {"Karenggapa"}, ["ebc"] = {"Beginci"}, ["ebg"] = {"Ebughu"}, ["ebk"] = {"Eastern Bontok"}, ["ebo"] = {"Teke-Ebo"}, ["ebr"] = {"Ebrié"}, ["ebu"] = {"Embu", "Kiembu"}, ["ecr"] = {"Eteocretan"}, ["ecs"] = {"Ecuadorian Sign Language"}, ["ecy"] = {"Eteocypriot"}, ["eee"] = {"E"}, ["efa"] = {"Efai"}, ["efe"] = {"Efe"}, ["efi"] = {"Efik"}, ["ega"] = {"Ega"}, ["egl"] = {"Emilian"}, ["egm"] = {"Benamanga"}, ["ego"] = {"Eggon"}, ["egx"] = {"Egyptian languages"}, ["egy"] = {"Egyptian (Ancient)"}, ["ehs"] = {"Miyakubo Sign Language"}, ["ehu"] = {"Ehueun"}, ["eip"] = {"Eipomek"}, ["eit"] = {"Eitiep"}, ["eiv"] = {"Askopan"}, ["eja"] = {"Ejamat"}, ["eka"] = {"Ekajuk"}, ["eke"] = {"Ekit"}, ["ekg"] = {"Ekari"}, ["eki"] = {"Eki"}, ["ekk"] = {"Standard Estonian"}, ["ekl"] = {"Kol (Bangladesh)", "Kol"}, ["ekm"] = {"Elip"}, ["eko"] = {"Koti"}, ["ekp"] = {"Ekpeye"}, ["ekr"] = {"Yace"}, ["eky"] = {"Eastern Kayah"}, ["ele"] = {"Elepi"}, ["elh"] = {"El Hugeirat"}, ["eli"] = {"Nding"}, ["elk"] = {"Elkei"}, ["elm"] = {"Eleme"}, ["elo"] = {"El Molo"}, ["elu"] = {"Elu"}, ["elx"] = {"Elamite"}, ["ema"] = {"Emai-Iuleha-Ora"}, ["emb"] = {"Embaloh"}, ["eme"] = {"Emerillon"}, ["emg"] = {"Eastern Meohang"}, ["emi"] = {"Mussau-Emira"}, ["emk"] = {"Eastern Maninkakan"}, ["emm"] = {"Mamulique"}, ["emn"] = {"Eman"}, ["emp"] = {"Northern Emberá"}, ["emq"] = {"Eastern Minyag"}, ["ems"] = {"Pacific Gulf Yupik"}, ["emu"] = {"Eastern Muria"}, ["emw"] = {"Emplawas"}, ["emx"] = {"Erromintxela"}, ["emy"] = {"Epigraphic Mayan"}, ["emz"] = {"Mbessa"}, ["ena"] = {"Apali"}, ["enb"] = {"Markweeta"}, ["enc"] = {"En"}, ["end"] = {"Ende"}, ["enf"] = {"Forest Enets"}, ["enh"] = {"Tundra Enets"}, ["enl"] = {"Enlhet"}, ["enm"] = {"Middle English (1100-1500)"}, ["enn"] = {"Engenni"}, ["eno"] = {"Enggano"}, ["enq"] = {"Enga"}, ["enr"] = {"Emumu", "Emem"}, ["enu"] = {"Enu"}, ["env"] = {"Enwan (Edo State)"}, ["enw"] = {"Enwan (Akwa Ibom State)"}, ["enx"] = {"Enxet"}, ["eot"] = {"Beti (Côte d'Ivoire)"}, ["epi"] = {"Epie"}, ["era"] = {"Eravallan"}, ["erg"] = {"Sie"}, ["erh"] = {"Eruwa"}, ["eri"] = {"Ogea"}, ["erk"] = {"South Efate"}, ["ero"] = {"Horpa"}, ["err"] = {"Erre"}, ["ers"] = {"Ersu"}, ["ert"] = {"Eritai"}, ["erw"] = {"Erokwanas"}, ["ese"] = {"Ese Ejja"}, ["esg"] = {"Aheri Gondi"}, ["esh"] = {"Eshtehardi"}, ["esi"] = {"North Alaskan Inupiatun"}, ["esk"] = {"Northwest Alaska Inupiatun"}, ["esl"] = {"Egypt Sign Language"}, ["esm"] = {"Esuma"}, ["esn"] = {"Salvadoran Sign Language"}, ["eso"] = {"Estonian Sign Language"}, ["esq"] = {"Esselen"}, ["ess"] = {"Central Siberian Yupik"}, ["esu"] = {"Central Yupik"}, ["esx"] = {"Eskimo-Aleut languages"}, ["esy"] = {"Eskayan"}, ["etb"] = {"Etebi"}, ["etc"] = {"Etchemin"}, ["eth"] = {"Ethiopian Sign Language"}, ["etn"] = {"Eton (Vanuatu)"}, ["eto"] = {"Eton (Cameroon)"}, ["etr"] = {"Edolo"}, ["ets"] = {"Yekhee"}, ["ett"] = {"Etruscan"}, ["etu"] = {"Ejagham"}, ["etx"] = {"Eten"}, ["etz"] = {"Semimi"}, ["eud"] = {"Eudeve"}, ["euq"] = {"Basque (family)"}, ["eve"] = {"Even"}, ["evh"] = {"Uvbie"}, ["evn"] = {"Evenki"}, ["ewo"] = {"Ewondo"}, ["ext"] = {"Extremaduran"}, ["eya"] = {"Eyak"}, ["eyo"] = {"Keiyo"}, ["eza"] = {"Ezaa"}, ["eze"] = {"Uzekwe"}, ["faa"] = {"Fasu"}, ["fab"] = {"Fa d'Ambu"}, ["fad"] = {"Wagi"}, ["faf"] = {"Fagani"}, ["fag"] = {"Finongan"}, ["fah"] = {"Baissa Fali"}, ["fai"] = {"Faiwol"}, ["faj"] = {"Faita"}, ["fak"] = {"Fang (Cameroon)"}, ["fal"] = {"South Fali"}, ["fam"] = {"Fam"}, ["fan"] = {"Fang (Equatorial Guinea)"}, ["fap"] = {"Paloor"}, ["far"] = {"Fataleka"}, ["fat"] = {"Fanti"}, ["fau"] = {"Fayu"}, ["fax"] = {"Fala"}, ["fay"] = {"Southwestern Fars"}, ["faz"] = {"Northwestern Fars"}, ["fbl"] = {"West Albay Bikol"}, ["fcs"] = {"Quebec Sign Language"}, ["fer"] = {"Feroge"}, ["ffi"] = {"Foia Foia"}, ["ffm"] = {"Maasina Fulfulde"}, ["fgr"] = {"Fongoro"}, ["fia"] = {"Nobiin"}, ["fie"] = {"Fyer"}, ["fif"] = {"Faifi"}, ["fil"] = {"Filipino", "Pilipino"}, ["fip"] = {"Fipa"}, ["fir"] = {"Firan"}, ["fit"] = {"Tornedalen Finnish", "Meänkieli"}, ["fiu"] = {"Finno-Ugrian languages"}, ["fiw"] = {"Fiwaga"}, ["fkk"] = {"Kirya-Konzəl"}, ["fkv"] = {"Kven Finnish"}, ["fla"] = {"Kalispel-Pend d'Oreille"}, ["flh"] = {"Foau"}, ["fli"] = {"Fali"}, ["fll"] = {"North Fali"}, ["fln"] = {"Flinders Island"}, ["flr"] = {"Fuliiru"}, ["fly"] = {"Flaaitaal", "Tsotsitaal"}, ["fmp"] = {"Fe'fe'"}, ["fmu"] = {"Far Western Muria"}, ["fnb"] = {"Fanbak"}, ["fng"] = {"Fanagalo"}, ["fni"] = {"Fania"}, ["fod"] = {"Foodo"}, ["foi"] = {"Foi"}, ["fom"] = {"Foma"}, ["fon"] = {"Fon"}, ["for"] = {"Fore"}, ["fos"] = {"Siraya"}, ["fox"] = {"Formosan languages"}, ["fpe"] = {"Fernando Po Creole English"}, ["fqs"] = {"Fas"}, ["frc"] = {"Cajun French"}, ["frd"] = {"Fordata"}, ["frk"] = {"Frankish"}, ["frm"] = {"Middle French (ca. 1400-1600)"}, ["fro"] = {"Old French (842-ca. 1400)"}, ["frp"] = {"Arpitan", "Francoprovençal"}, ["frq"] = {"Forak"}, ["frr"] = {"Northern Frisian"}, ["frs"] = {"Eastern Frisian"}, ["frt"] = {"Fortsenal"}, ["fse"] = {"Finnish Sign Language"}, ["fsl"] = {"French Sign Language"}, ["fss"] = {"Finland-Swedish Sign Language", "finlandssvenskt teckenspråk", "suomenruotsalainen viittomakieli"}, ["fub"] = {"Adamawa Fulfulde"}, ["fuc"] = {"Pulaar"}, ["fud"] = {"East Futuna"}, ["fue"] = {"Borgu Fulfulde"}, ["fuf"] = {"Pular"}, ["fuh"] = {"Western Niger Fulfulde"}, ["fui"] = {"Bagirmi Fulfulde"}, ["fuj"] = {"Ko"}, ["fum"] = {"Fum"}, ["fun"] = {"Fulniô"}, ["fuq"] = {"Central-Eastern Niger Fulfulde"}, ["fur"] = {"Friulian"}, ["fut"] = {"Futuna-Aniwa"}, ["fuu"] = {"Furu"}, ["fuv"] = {"Nigerian Fulfulde"}, ["fuy"] = {"Fuyug"}, ["fvr"] = {"Fur"}, ["fwa"] = {"Fwâi"}, ["fwe"] = {"Fwe"}, ["gaa"] = {"Ga"}, ["gab"] = {"Gabri"}, ["gac"] = {"Mixed Great Andamanese"}, ["gad"] = {"Gaddang"}, ["gae"] = {"Guarequena"}, ["gaf"] = {"Gende"}, ["gag"] = {"Gagauz"}, ["gah"] = {"Alekano"}, ["gai"] = {"Borei"}, ["gaj"] = {"Gadsup"}, ["gak"] = {"Gamkonora"}, ["gal"] = {"Galolen"}, ["gam"] = {"Kandawo"}, ["gan"] = {"Gan Chinese"}, ["gao"] = {"Gants"}, ["gap"] = {"Gal"}, ["gaq"] = {"Gata'"}, ["gar"] = {"Galeya"}, ["gas"] = {"Adiwasi Garasia"}, ["gat"] = {"Kenati"}, ["gau"] = {"Mudhili Gadaba"}, ["gaw"] = {"Nobonob"}, ["gax"] = {"Borana-Arsi-Guji Oromo"}, ["gay"] = {"Gayo"}, ["gaz"] = {"West Central Oromo"}, ["gba"] = {"Gbaya (Central African Republic)"}, ["gbb"] = {"Kaytetye"}, ["gbd"] = {"Karajarri"}, ["gbe"] = {"Niksek"}, ["gbf"] = {"Gaikundi"}, ["gbg"] = {"Gbanziri"}, ["gbh"] = {"Defi Gbe"}, ["gbi"] = {"Galela"}, ["gbj"] = {"Bodo Gadaba"}, ["gbk"] = {"Gaddi"}, ["gbl"] = {"Gamit"}, ["gbm"] = {"Garhwali"}, ["gbn"] = {"Mo'da"}, ["gbo"] = {"Northern Grebo"}, ["gbp"] = {"Gbaya-Bossangoa"}, ["gbq"] = {"Gbaya-Bozoum"}, ["gbr"] = {"Gbagyi"}, ["gbs"] = {"Gbesi Gbe"}, ["gbu"] = {"Gagadu"}, ["gbv"] = {"Gbanu"}, ["gbw"] = {"Gabi-Gabi"}, ["gbx"] = {"Eastern Xwla Gbe"}, ["gby"] = {"Gbari"}, ["gbz"] = {"Zoroastrian Dari"}, ["gcc"] = {"Mali"}, ["gcd"] = {"Ganggalida"}, ["gce"] = {"Galice"}, ["gcf"] = {"Guadeloupean Creole French"}, ["gcl"] = {"Grenadian Creole English"}, ["gcn"] = {"Gaina"}, ["gcr"] = {"Guianese Creole French"}, ["gct"] = {"Colonia Tovar German"}, ["gda"] = {"Gade Lohar"}, ["gdb"] = {"Pottangi Ollar Gadaba"}, ["gdc"] = {"Gugu Badhun"}, ["gdd"] = {"Gedaged"}, ["gde"] = {"Gude"}, ["gdf"] = {"Guduf-Gava"}, ["gdg"] = {"Ga'dang"}, ["gdh"] = {"Gadjerawang", "Gajirrabeng"}, ["gdi"] = {"Gundi"}, ["gdj"] = {"Gurdjar"}, ["gdk"] = {"Gadang"}, ["gdl"] = {"Dirasha"}, ["gdm"] = {"Laal"}, ["gdn"] = {"Umanakaina"}, ["gdo"] = {"Ghodoberi"}, ["gdq"] = {"Mehri"}, ["gdr"] = {"Wipi"}, ["gds"] = {"Ghandruk Sign Language"}, ["gdt"] = {"Kungardutyi"}, ["gdu"] = {"Gudu"}, ["gdx"] = {"Godwari"}, ["gea"] = {"Geruma"}, ["geb"] = {"Kire"}, ["gec"] = {"Gboloo Grebo"}, ["ged"] = {"Gade"}, ["gef"] = {"Gerai"}, ["geg"] = {"Gengle"}, ["geh"] = {"Hutterite German", "Hutterisch"}, ["gei"] = {"Gebe"}, ["gej"] = {"Gen"}, ["gek"] = {"Ywom"}, ["gel"] = {"ut-Ma'in"}, ["gem"] = {"Germanic languages"}, ["geq"] = {"Geme"}, ["ges"] = {"Geser-Gorom"}, ["gev"] = {"Eviya"}, ["gew"] = {"Gera"}, ["gex"] = {"Garre"}, ["gey"] = {"Enya"}, ["gez"] = {"Geez"}, ["gfk"] = {"Patpatar"}, ["gft"] = {"Gafat"}, ["gga"] = {"Gao"}, ["ggb"] = {"Gbii"}, ["ggd"] = {"Gugadj"}, ["gge"] = {"Gurr-goni"}, ["ggg"] = {"Gurgula"}, ["ggk"] = {"Kungarakany"}, ["ggl"] = {"Ganglau"}, ["ggt"] = {"Gitua"}, ["ggu"] = {"Gagu", "Gban"}, ["ggw"] = {"Gogodala"}, ["gha"] = {"Ghadamès"}, ["ghc"] = {"Hiberno-Scottish Gaelic"}, ["ghe"] = {"Southern Ghale"}, ["ghh"] = {"Northern Ghale"}, ["ghk"] = {"Geko Karen"}, ["ghl"] = {"Ghulfan"}, ["ghn"] = {"Ghanongga"}, ["gho"] = {"Ghomara"}, ["ghr"] = {"Ghera"}, ["ghs"] = {"Guhu-Samane"}, ["ght"] = {"Kuke", "Kutang Ghale"}, ["gia"] = {"Kija"}, ["gib"] = {"Gibanawa"}, ["gic"] = {"Gail"}, ["gid"] = {"Gidar"}, ["gie"] = {"Gaɓogbo", "Guébie"}, ["gig"] = {"Goaria"}, ["gih"] = {"Githabul"}, ["gii"] = {"Girirra"}, ["gil"] = {"Gilbertese"}, ["gim"] = {"Gimi (Eastern Highlands)"}, ["gin"] = {"Hinukh"}, ["gip"] = {"Gimi (West New Britain)"}, ["giq"] = {"Green Gelao"}, ["gir"] = {"Red Gelao"}, ["gis"] = {"North Giziga"}, ["git"] = {"Gitxsan"}, ["giu"] = {"Mulao"}, ["giw"] = {"White Gelao"}, ["gix"] = {"Gilima"}, ["giy"] = {"Giyug"}, ["giz"] = {"South Giziga"}, ["gjk"] = {"Kachi Koli"}, ["gjm"] = {"Gunditjmara"}, ["gjn"] = {"Gonja"}, ["gjr"] = {"Gurindji Kriol"}, ["gju"] = {"Gujari"}, ["gka"] = {"Guya"}, ["gkd"] = {"Magɨ (Madang Province)"}, ["gke"] = {"Ndai"}, ["gkn"] = {"Gokana"}, ["gko"] = {"Kok-Nar"}, ["gkp"] = {"Guinea Kpelle"}, ["gku"] = {"ǂUngkue"}, ["glb"] = {"Belning"}, ["glc"] = {"Bon Gula"}, ["gld"] = {"Nanai"}, ["glh"] = {"Northwest Pashai", "Northwest Pashayi"}, ["glj"] = {"Gula Iro"}, ["glk"] = {"Gilaki"}, ["gll"] = {"Garlali"}, ["glo"] = {"Galambu"}, ["glr"] = {"Glaro-Twabo"}, ["glu"] = {"Gula (Chad)"}, ["glw"] = {"Glavda"}, ["gly"] = {"Gule"}, ["gma"] = {"Gambera"}, ["gmb"] = {"Gula'alaa"}, ["gmd"] = {"Mághdì"}, ["gme"] = {"East Germanic languages"}, ["gmg"] = {"Magɨyi"}, ["gmh"] = {"Middle High German (ca. 1050-1500)"}, ["gml"] = {"Middle Low German"}, ["gmm"] = {"Gbaya-Mbodomo"}, ["gmn"] = {"Gimnime"}, ["gmq"] = {"North Germanic languages"}, ["gmr"] = {"Mirning", "Mirniny"}, ["gmu"] = {"Gumalu"}, ["gmv"] = {"Gamo"}, ["gmw"] = {"West Germanic languages"}, ["gmx"] = {"Magoma"}, ["gmy"] = {"Mycenaean Greek"}, ["gmz"] = {"Mgbolizhia"}, ["gna"] = {"Kaansa"}, ["gnb"] = {"Gangte"}, ["gnc"] = {"Guanche"}, ["gnd"] = {"Zulgo-Gemzek"}, ["gne"] = {"Ganang"}, ["gng"] = {"Ngangam"}, ["gnh"] = {"Lere"}, ["gni"] = {"Gooniyandi"}, ["gnj"] = {"Ngen"}, ["gnk"] = {"ǁGana"}, ["gnl"] = {"Gangulu"}, ["gnm"] = {"Ginuman"}, ["gnn"] = {"Gumatj"}, ["gno"] = {"Northern Gondi"}, ["gnq"] = {"Gana"}, ["gnr"] = {"Gureng Gureng"}, ["gnt"] = {"Guntai"}, ["gnu"] = {"Gnau"}, ["gnw"] = {"Western Bolivian Guaraní"}, ["gnz"] = {"Ganzi"}, ["goa"] = {"Guro"}, ["gob"] = {"Playero"}, ["goc"] = {"Gorakor"}, ["god"] = {"Godié"}, ["goe"] = {"Gongduk"}, ["gof"] = {"Gofa"}, ["gog"] = {"Gogo"}, ["goh"] = {"Old High German (ca. 750-1050)"}, ["goi"] = {"Gobasi"}, ["goj"] = {"Gowlan"}, ["gok"] = {"Gowli"}, ["gol"] = {"Gola"}, ["gom"] = {"Goan Konkani"}, ["gon"] = {"Gondi"}, ["goo"] = {"Gone Dau"}, ["gop"] = {"Yeretuar"}, ["goq"] = {"Gorap"}, ["gor"] = {"Gorontalo"}, ["gos"] = {"Gronings"}, ["got"] = {"Gothic"}, ["gou"] = {"Gavar"}, ["gov"] = {"Goo"}, ["gow"] = {"Gorowa"}, ["gox"] = {"Gobu"}, ["goy"] = {"Goundo"}, ["goz"] = {"Gozarkhani"}, ["gpa"] = {"Gupa-Abawa"}, ["gpe"] = {"Ghanaian Pidgin English"}, ["gpn"] = {"Taiap"}, ["gqa"] = {"Ga'anda"}, ["gqi"] = {"Guiqiong"}, ["gqn"] = {"Guana (Brazil)"}, ["gqr"] = {"Gor"}, ["gqu"] = {"Qau"}, ["gra"] = {"Rajput Garasia"}, ["grb"] = {"Grebo"}, ["grc"] = {"Ancient Greek (to 1453)"}, ["grd"] = {"Guruntum-Mbaaru"}, ["grg"] = {"Madi"}, ["grh"] = {"Gbiri-Niragu"}, ["gri"] = {"Ghari"}, ["grj"] = {"Southern Grebo"}, ["grk"] = {"Greek languages"}, ["grm"] = {"Kota Marudu Talantang"}, ["gro"] = {"Groma"}, ["grq"] = {"Gorovu"}, ["grr"] = {"Taznatit"}, ["grs"] = {"Gresi"}, ["grt"] = {"Garo"}, ["gru"] = {"Kistane"}, ["grv"] = {"Central Grebo"}, ["grw"] = {"Gweda"}, ["grx"] = {"Guriaso"}, ["gry"] = {"Barclayville Grebo"}, ["grz"] = {"Guramalum"}, ["gse"] = {"Ghanaian Sign Language"}, ["gsg"] = {"German Sign Language"}, ["gsl"] = {"Gusilay"}, ["gsm"] = {"Guatemalan Sign Language"}, ["gsn"] = {"Nema", "Gusan"}, ["gso"] = {"Southwest Gbaya"}, ["gsp"] = {"Wasembo"}, ["gss"] = {"Greek Sign Language"}, ["gsw"] = {"Swiss German", "Alemannic", "Alsatian"}, ["gta"] = {"Guató"}, ["gtu"] = {"Aghu-Tharnggala"}, ["gua"] = {"Shiki"}, ["gub"] = {"Guajajára"}, ["guc"] = {"Wayuu"}, ["gud"] = {"Yocoboué Dida"}, ["gue"] = {"Gurindji"}, ["guf"] = {"Gupapuyngu"}, ["gug"] = {"Paraguayan Guaraní"}, ["guh"] = {"Guahibo"}, ["gui"] = {"Eastern Bolivian Guaraní"}, ["guk"] = {"Gumuz"}, ["gul"] = {"Sea Island Creole English"}, ["gum"] = {"Guambiano"}, ["gun"] = {"Mbyá Guaraní"}, ["guo"] = {"Guayabero"}, ["gup"] = {"Gunwinggu"}, ["guq"] = {"Aché"}, ["gur"] = {"Farefare"}, ["gus"] = {"Guinean Sign Language"}, ["gut"] = {"Maléku Jaíka"}, ["guu"] = {"Yanomamö"}, ["guw"] = {"Gun"}, ["gux"] = {"Gourmanchéma"}, ["guz"] = {"Gusii", "Ekegusii"}, ["gva"] = {"Guana (Paraguay)"}, ["gvc"] = {"Guanano"}, ["gve"] = {"Duwet"}, ["gvf"] = {"Golin"}, ["gvj"] = {"Guajá"}, ["gvl"] = {"Gulay"}, ["gvm"] = {"Gurmana"}, ["gvn"] = {"Kuku-Yalanji"}, ["gvo"] = {"Gavião Do Jiparaná"}, ["gvp"] = {"Pará Gavião"}, ["gvr"] = {"Gurung"}, ["gvs"] = {"Gumawana"}, ["gvy"] = {"Guyani"}, ["gwa"] = {"Mbato"}, ["gwb"] = {"Gwa"}, ["gwc"] = {"Gawri", "Kalami"}, ["gwd"] = {"Gawwada"}, ["gwe"] = {"Gweno"}, ["gwf"] = {"Gowro"}, ["gwg"] = {"Moo"}, ["gwi"] = {"Gwichʼin"}, ["gwj"] = {"ǀGwi"}, ["gwm"] = {"Awngthim"}, ["gwn"] = {"Gwandara"}, ["gwr"] = {"Gwere"}, ["gwt"] = {"Gawar-Bati"}, ["gwu"] = {"Guwamu"}, ["gww"] = {"Kwini"}, ["gwx"] = {"Gua"}, ["gxx"] = {"Wè Southern"}, ["gya"] = {"Northwest Gbaya"}, ["gyb"] = {"Garus"}, ["gyd"] = {"Kayardild"}, ["gye"] = {"Gyem"}, ["gyf"] = {"Gungabula"}, ["gyg"] = {"Gbayi"}, ["gyi"] = {"Gyele"}, ["gyl"] = {"Gayil"}, ["gym"] = {"Ngäbere"}, ["gyn"] = {"Guyanese Creole English"}, ["gyo"] = {"Gyalsumdo"}, ["gyr"] = {"Guarayu"}, ["gyy"] = {"Gunya"}, ["gyz"] = {"Geji", "Gyaazi"}, ["gza"] = {"Ganza"}, ["gzi"] = {"Gazi"}, ["gzn"] = {"Gane"}, ["haa"] = {"Hän"}, ["hab"] = {"Hanoi Sign Language"}, ["hac"] = {"Gurani"}, ["had"] = {"Hatam"}, ["hae"] = {"Eastern Oromo"}, ["haf"] = {"Haiphong Sign Language"}, ["hag"] = {"Hanga"}, ["hah"] = {"Hahon"}, ["hai"] = {"Haida"}, ["haj"] = {"Hajong"}, ["hak"] = {"Hakka Chinese"}, ["hal"] = {"Halang"}, ["ham"] = {"Hewa"}, ["han"] = {"Hangaza"}, ["hao"] = {"Hakö"}, ["hap"] = {"Hupla"}, ["haq"] = {"Ha"}, ["har"] = {"Harari"}, ["has"] = {"Haisla"}, ["hav"] = {"Havu"}, ["haw"] = {"Hawaiian"}, ["hax"] = {"Southern Haida"}, ["hay"] = {"Haya"}, ["haz"] = {"Hazaragi"}, ["hba"] = {"Hamba"}, ["hbb"] = {"Huba"}, ["hbn"] = {"Heiban"}, ["hbo"] = {"Ancient Hebrew"}, ["hbu"] = {"Habu"}, ["hca"] = {"Andaman Creole Hindi"}, ["hch"] = {"Huichol"}, ["hdn"] = {"Northern Haida"}, ["hds"] = {"Honduras Sign Language"}, ["hdy"] = {"Hadiyya"}, ["hea"] = {"Northern Qiandong Miao"}, ["hed"] = {"Herdé"}, ["heg"] = {"Helong"}, ["heh"] = {"Hehe"}, ["hei"] = {"Heiltsuk"}, ["hem"] = {"Hemba"}, ["hgm"] = {"Haiǁom"}, ["hgw"] = {"Haigwai"}, ["hhi"] = {"Hoia Hoia"}, ["hhr"] = {"Kerak"}, ["hhy"] = {"Hoyahoya"}, ["hia"] = {"Lamang"}, ["hib"] = {"Hibito"}, ["hid"] = {"Hidatsa"}, ["hif"] = {"Fiji Hindi"}, ["hig"] = {"Kamwe"}, ["hih"] = {"Pamosu"}, ["hii"] = {"Hinduri"}, ["hij"] = {"Hijuk"}, ["hik"] = {"Seit-Kaitetu"}, ["hil"] = {"Hiligaynon"}, ["him"] = {"Himachali languages", "Western Pahari languages"}, ["hio"] = {"Tsoa"}, ["hir"] = {"Himarimã"}, ["hit"] = {"Hittite"}, ["hiw"] = {"Hiw"}, ["hix"] = {"Hixkaryána"}, ["hji"] = {"Haji"}, ["hka"] = {"Kahe"}, ["hke"] = {"Hunde"}, ["hkh"] = {"Khah", "Poguli"}, ["hkk"] = {"Hunjara-Kaina Ke"}, ["hkn"] = {"Mel-Khaonh"}, ["hks"] = {"Hong Kong Sign Language", "Heung Kong Sau Yue"}, ["hla"] = {"Halia"}, ["hlb"] = {"Halbi"}, ["hld"] = {"Halang Doan"}, ["hle"] = {"Hlersu"}, ["hlt"] = {"Matu Chin"}, ["hlu"] = {"Hieroglyphic Luwian"}, ["hma"] = {"Southern Mashan Hmong", "Southern Mashan Miao"}, ["hmb"] = {"Humburi Senni Songhay"}, ["hmc"] = {"Central Huishui Hmong", "Central Huishui Miao"}, ["hmd"] = {"Large Flowery Miao", "A-hmaos", "Da-Hua Miao"}, ["hme"] = {"Eastern Huishui Hmong", "Eastern Huishui Miao"}, ["hmf"] = {"Hmong Don"}, ["hmg"] = {"Southwestern Guiyang Hmong"}, ["hmh"] = {"Southwestern Huishui Hmong", "Southwestern Huishui Miao"}, ["hmi"] = {"Northern Huishui Hmong", "Northern Huishui Miao"}, ["hmj"] = {"Ge", "Gejia"}, ["hmk"] = {"Maek"}, ["hml"] = {"Luopohe Hmong", "Luopohe Miao"}, ["hmm"] = {"Central Mashan Hmong", "Central Mashan Miao"}, ["hmn"] = {"Hmong", "Mong"}, ["hmp"] = {"Northern Mashan Hmong", "Northern Mashan Miao"}, ["hmq"] = {"Eastern Qiandong Miao"}, ["hmr"] = {"Hmar"}, ["hms"] = {"Southern Qiandong Miao"}, ["hmt"] = {"Hamtai"}, ["hmu"] = {"Hamap"}, ["hmv"] = {"Hmong Dô"}, ["hmw"] = {"Western Mashan Hmong", "Western Mashan Miao"}, ["hmx"] = {"Hmong-Mien languages"}, ["hmy"] = {"Southern Guiyang Hmong", "Southern Guiyang Miao"}, ["hmz"] = {"Hmong Shua", "Sinicized Miao"}, ["hna"] = {"Mina (Cameroon)"}, ["hnd"] = {"Southern Hindko"}, ["hne"] = {"Chhattisgarhi"}, ["hng"] = {"Hungu"}, ["hnh"] = {"ǁAni"}, ["hni"] = {"Hani"}, ["hnj"] = {"Hmong Njua", "Mong Leng", "Mong Njua"}, ["hnm"] = {"Hainanese"}, ["hnn"] = {"Hanunoo"}, ["hno"] = {"Northern Hindko"}, ["hns"] = {"Caribbean Hindustani"}, ["hnu"] = {"Hung"}, ["hoa"] = {"Hoava"}, ["hob"] = {"Mari (Madang Province)"}, ["hoc"] = {"Ho"}, ["hod"] = {"Holma"}, ["hoe"] = {"Horom"}, ["hoh"] = {"Hobyót"}, ["hoi"] = {"Holikachuk"}, ["hoj"] = {"Hadothi", "Haroti"}, ["hok"] = {"Hokan languages"}, ["hol"] = {"Holu"}, ["hom"] = {"Homa"}, ["hoo"] = {"Holoholo"}, ["hop"] = {"Hopi"}, ["hor"] = {"Horo"}, ["hos"] = {"Ho Chi Minh City Sign Language"}, ["hot"] = {"Hote", "Malê"}, ["hov"] = {"Hovongan"}, ["how"] = {"Honi"}, ["hoy"] = {"Holiya"}, ["hoz"] = {"Hozo"}, ["hpo"] = {"Hpon"}, ["hps"] = {"Hawai'i Sign Language (HSL)", "Hawai'i Pidgin Sign Language"}, ["hra"] = {"Hrangkhol"}, ["hrc"] = {"Niwer Mil"}, ["hre"] = {"Hre"}, ["hrk"] = {"Haruku"}, ["hrm"] = {"Horned Miao"}, ["hro"] = {"Haroi"}, ["hrp"] = {"Nhirrpi"}, ["hrt"] = {"Hértevin"}, ["hru"] = {"Hruso"}, ["hrw"] = {"Warwar Feni"}, ["hrx"] = {"Hunsrik"}, ["hrz"] = {"Harzani"}, ["hsb"] = {"Upper Sorbian"}, ["hsh"] = {"Hungarian Sign Language"}, ["hsl"] = {"Hausa Sign Language"}, ["hsn"] = {"Xiang Chinese"}, ["hss"] = {"Harsusi"}, ["hti"] = {"Hoti"}, ["hto"] = {"Minica Huitoto"}, ["hts"] = {"Hadza"}, ["htu"] = {"Hitu"}, ["htx"] = {"Middle Hittite"}, ["hub"] = {"Huambisa"}, ["huc"] = {"ǂHua", "ǂʼAmkhoe"}, ["hud"] = {"Huaulu"}, ["hue"] = {"San Francisco Del Mar Huave"}, ["huf"] = {"Humene"}, ["hug"] = {"Huachipaeri"}, ["huh"] = {"Huilliche"}, ["hui"] = {"Huli"}, ["huj"] = {"Northern Guiyang Hmong", "Northern Guiyang Miao"}, ["huk"] = {"Hulung"}, ["hul"] = {"Hula"}, ["hum"] = {"Hungana"}, ["huo"] = {"Hu"}, ["hup"] = {"Hupa"}, ["huq"] = {"Tsat"}, ["hur"] = {"Halkomelem"}, ["hus"] = {"Huastec"}, ["hut"] = {"Humla"}, ["huu"] = {"Murui Huitoto"}, ["huv"] = {"San Mateo Del Mar Huave"}, ["huw"] = {"Hukumina"}, ["hux"] = {"Nüpode Huitoto"}, ["huy"] = {"Hulaulá"}, ["huz"] = {"Hunzib"}, ["hvc"] = {"Haitian Vodoun Culture Language"}, ["hve"] = {"San Dionisio Del Mar Huave"}, ["hvk"] = {"Haveke"}, ["hvn"] = {"Sabu"}, ["hvv"] = {"Santa María Del Mar Huave"}, ["hwa"] = {"Wané"}, ["hwc"] = {"Hawai'i Creole English", "Hawai'i Pidgin"}, ["hwo"] = {"Hwana"}, ["hya"] = {"Hya"}, ["hyw"] = {"Western Armenian"}, ["hyx"] = {"Armenian (family)"}, ["iai"] = {"Iaai"}, ["ian"] = {"Iatmul"}, ["iar"] = {"Purari"}, ["iba"] = {"Iban"}, ["ibb"] = {"Ibibio"}, ["ibd"] = {"Iwaidja"}, ["ibe"] = {"Akpes"}, ["ibg"] = {"Ibanag"}, ["ibh"] = {"Bih"}, ["ibl"] = {"Ibaloi"}, ["ibm"] = {"Agoi"}, ["ibn"] = {"Ibino"}, ["ibr"] = {"Ibuoro"}, ["ibu"] = {"Ibu"}, ["iby"] = {"Ibani"}, ["ica"] = {"Ede Ica"}, ["ich"] = {"Etkywan"}, ["icl"] = {"Icelandic Sign Language"}, ["icr"] = {"Islander Creole English"}, ["ida"] = {"Idakho-Isukha-Tiriki", "Luidakho-Luisukha-Lutirichi"}, ["idb"] = {"Indo-Portuguese"}, ["idc"] = {"Idon", "Ajiya"}, ["idd"] = {"Ede Idaca"}, ["ide"] = {"Idere"}, ["idi"] = {"Idi"}, ["idr"] = {"Indri"}, ["ids"] = {"Idesa"}, ["idt"] = {"Idaté"}, ["idu"] = {"Idoma"}, ["ifa"] = {"Amganad Ifugao"}, ["ifb"] = {"Batad Ifugao", "Ayangan Ifugao"}, ["ife"] = {"Ifè"}, ["iff"] = {"Ifo"}, ["ifk"] = {"Tuwali Ifugao"}, ["ifm"] = {"Teke-Fuumu"}, ["ifu"] = {"Mayoyao Ifugao"}, ["ify"] = {"Keley-I Kallahan"}, ["igb"] = {"Ebira"}, ["ige"] = {"Igede"}, ["igg"] = {"Igana"}, ["igl"] = {"Igala"}, ["igm"] = {"Kanggape"}, ["ign"] = {"Ignaciano"}, ["igo"] = {"Isebe"}, ["igs"] = {"Interglossa"}, ["igw"] = {"Igwe"}, ["ihb"] = {"Iha Based Pidgin"}, ["ihi"] = {"Ihievbe"}, ["ihp"] = {"Iha"}, ["ihw"] = {"Bidhawal"}, ["iin"] = {"Thiin"}, ["iir"] = {"Indo-Iranian languages"}, ["ijc"] = {"Izon"}, ["ije"] = {"Biseni"}, ["ijj"] = {"Ede Ije"}, ["ijn"] = {"Kalabari"}, ["ijo"] = {"Ijo languages"}, ["ijs"] = {"Southeast Ijo"}, ["ike"] = {"Eastern Canadian Inuktitut"}, ["ikh"] = {"Ikhin-Arokho"}, ["iki"] = {"Iko"}, ["ikk"] = {"Ika"}, ["ikl"] = {"Ikulu"}, ["iko"] = {"Olulumo-Ikom"}, ["ikp"] = {"Ikpeshi"}, ["ikr"] = {"Ikaranggal"}, ["iks"] = {"Inuit Sign Language"}, ["ikt"] = {"Inuinnaqtun", "Western Canadian Inuktitut"}, ["ikv"] = {"Iku-Gora-Ankwa"}, ["ikw"] = {"Ikwere"}, ["ikx"] = {"Ik"}, ["ikz"] = {"Ikizu"}, ["ila"] = {"Ile Ape"}, ["ilb"] = {"Ila"}, ["ilg"] = {"Garig-Ilgar"}, ["ili"] = {"Ili Turki"}, ["ilk"] = {"Ilongot"}, ["ilm"] = {"Iranun (Malaysia)"}, ["ilo"] = {"Iloko"}, ["ilp"] = {"Iranun (Philippines)"}, ["ils"] = {"International Sign"}, ["ilu"] = {"Ili'uun"}, ["ilv"] = {"Ilue"}, ["ima"] = {"Mala Malasar"}, ["imi"] = {"Anamgura"}, ["iml"] = {"Miluk"}, ["imn"] = {"Imonda"}, ["imo"] = {"Imbongu"}, ["imr"] = {"Imroing"}, ["ims"] = {"Marsian"}, ["imt"] = {"Imotong"}, ["imy"] = {"Milyan"}, ["inb"] = {"Inga"}, ["inc"] = {"Indic languages"}, ["ine"] = {"Indo-European languages"}, ["ing"] = {"Degexit'an"}, ["inh"] = {"Ingush"}, ["inj"] = {"Jungle Inga"}, ["inl"] = {"Indonesian Sign Language"}, ["inm"] = {"Minaean"}, ["inn"] = {"Isinai"}, ["ino"] = {"Inoke-Yate"}, ["inp"] = {"Iñapari"}, ["ins"] = {"Indian Sign Language"}, ["int"] = {"Intha"}, ["inz"] = {"Ineseño"}, ["ior"] = {"Inor"}, ["iou"] = {"Tuma-Irumu"}, ["iow"] = {"Iowa-Oto"}, ["ipi"] = {"Ipili"}, ["ipo"] = {"Ipiko"}, ["iqu"] = {"Iquito"}, ["iqw"] = {"Ikwo"}, ["ira"] = {"Iranian languages"}, ["ire"] = {"Iresim"}, ["irh"] = {"Irarutu"}, ["iri"] = {"Rigwe", "Irigwe"}, ["irk"] = {"Iraqw"}, ["irn"] = {"Irántxe"}, ["iro"] = {"Iroquoian languages"}, ["irr"] = {"Ir"}, ["iru"] = {"Irula"}, ["irx"] = {"Kamberau"}, ["iry"] = {"Iraya"}, ["isa"] = {"Isabi"}, ["isc"] = {"Isconahua"}, ["isd"] = {"Isnag"}, ["ise"] = {"Italian Sign Language"}, ["isg"] = {"Irish Sign Language"}, ["ish"] = {"Esan"}, ["isi"] = {"Nkem-Nkum"}, ["isk"] = {"Ishkashimi"}, ["ism"] = {"Masimasi"}, ["isn"] = {"Isanzu"}, ["iso"] = {"Isoko"}, ["isr"] = {"Israeli Sign Language"}, ["ist"] = {"Istriot"}, ["isu"] = {"Isu (Menchum Division)"}, ["isv"] = {"Interslavic"}, ["itb"] = {"Binongan Itneg"}, ["itc"] = {"Italic languages"}, ["itd"] = {"Southern Tidung"}, ["ite"] = {"Itene"}, ["iti"] = {"Inlaod Itneg"}, ["itk"] = {"Judeo-Italian"}, ["itl"] = {"Itelmen"}, ["itm"] = {"Itu Mbon Uzo"}, ["ito"] = {"Itonama"}, ["itr"] = {"Iteri"}, ["its"] = {"Isekiri"}, ["itt"] = {"Maeng Itneg"}, ["itv"] = {"Itawit"}, ["itw"] = {"Ito"}, ["itx"] = {"Itik"}, ["ity"] = {"Moyadan Itneg"}, ["itz"] = {"Itzá"}, ["ium"] = {"Iu Mien"}, ["ivb"] = {"Ibatan"}, ["ivv"] = {"Ivatan"}, ["iwk"] = {"I-Wak"}, ["iwm"] = {"Iwam"}, ["iwo"] = {"Iwur"}, ["iws"] = {"Sepik Iwam"}, ["ixc"] = {"Ixcatec"}, ["ixl"] = {"Ixil"}, ["iya"] = {"Iyayu"}, ["iyo"] = {"Mesaka"}, ["iyx"] = {"Yaka (Congo)"}, ["izh"] = {"Ingrian"}, ["izm"] = {"Kizamani"}, ["izr"] = {"Izere"}, ["izz"] = {"Izii"}, ["jaa"] = {"Jamamadí"}, ["jab"] = {"Hyam"}, ["jac"] = {"Popti'", "Jakalteko"}, ["jad"] = {"Jahanka"}, ["jae"] = {"Yabem"}, ["jaf"] = {"Jara"}, ["jah"] = {"Jah Hut"}, ["jaj"] = {"Zazao"}, ["jak"] = {"Jakun"}, ["jal"] = {"Yalahatan"}, ["jam"] = {"Jamaican Creole English"}, ["jan"] = {"Jandai"}, ["jao"] = {"Yanyuwa"}, ["jaq"] = {"Yaqay"}, ["jas"] = {"New Caledonian Javanese"}, ["jat"] = {"Jakati"}, ["jau"] = {"Yaur"}, ["jax"] = {"Jambi Malay"}, ["jay"] = {"Yan-nhangu", "Nhangu"}, ["jaz"] = {"Jawe"}, ["jbe"] = {"Judeo-Berber"}, ["jbi"] = {"Badjiri"}, ["jbj"] = {"Arandai"}, ["jbk"] = {"Barikewa"}, ["jbm"] = {"Bijim"}, ["jbn"] = {"Nafusi"}, ["jbo"] = {"Lojban"}, ["jbr"] = {"Jofotek-Bromnya"}, ["jbt"] = {"Jabutí"}, ["jbu"] = {"Jukun Takum"}, ["jbw"] = {"Yawijibaya"}, ["jcs"] = {"Jamaican Country Sign Language"}, ["jct"] = {"Krymchak"}, ["jda"] = {"Jad"}, ["jdg"] = {"Jadgali"}, ["jdt"] = {"Judeo-Tat"}, ["jeb"] = {"Jebero"}, ["jee"] = {"Jerung"}, ["jeh"] = {"Jeh"}, ["jei"] = {"Yei"}, ["jek"] = {"Jeri Kuo"}, ["jel"] = {"Yelmek"}, ["jen"] = {"Dza"}, ["jer"] = {"Jere"}, ["jet"] = {"Manem"}, ["jeu"] = {"Jonkor Bourmataguil"}, ["jgb"] = {"Ngbee"}, ["jge"] = {"Judeo-Georgian"}, ["jgk"] = {"Gwak"}, ["jgo"] = {"Ngomba"}, ["jhi"] = {"Jehai"}, ["jhs"] = {"Jhankot Sign Language"}, ["jia"] = {"Jina"}, ["jib"] = {"Jibu"}, ["jic"] = {"Tol"}, ["jid"] = {"Bu (Kaduna State)"}, ["jie"] = {"Jilbe"}, ["jig"] = {"Jingulu", "Djingili"}, ["jih"] = {"sTodsde", "Shangzhai"}, ["jii"] = {"Jiiddu"}, ["jil"] = {"Jilim"}, ["jim"] = {"Jimi (Cameroon)"}, ["jio"] = {"Jiamao"}, ["jiq"] = {"Guanyinqiao", "Lavrung"}, ["jit"] = {"Jita"}, ["jiu"] = {"Youle Jinuo"}, ["jiv"] = {"Shuar"}, ["jiy"] = {"Buyuan Jinuo"}, ["jje"] = {"Jejueo"}, ["jjr"] = {"Bankal"}, ["jka"] = {"Kaera"}, ["jkm"] = {"Mobwa Karen"}, ["jko"] = {"Kubo"}, ["jkp"] = {"Paku Karen"}, ["jkr"] = {"Koro (India)"}, ["jks"] = {"Amami Koniya Sign Language"}, ["jku"] = {"Labir"}, ["jle"] = {"Ngile"}, ["jls"] = {"Jamaican Sign Language"}, ["jma"] = {"Dima"}, ["jmb"] = {"Zumbun"}, ["jmc"] = {"Machame"}, ["jmd"] = {"Yamdena"}, ["jmi"] = {"Jimi (Nigeria)"}, ["jml"] = {"Jumli"}, ["jmn"] = {"Makuri Naga"}, ["jmr"] = {"Kamara"}, ["jms"] = {"Mashi (Nigeria)"}, ["jmw"] = {"Mouwase"}, ["jmx"] = {"Western Juxtlahuaca Mixtec"}, ["jna"] = {"Jangshung"}, ["jnd"] = {"Jandavra"}, ["jng"] = {"Yangman"}, ["jni"] = {"Janji"}, ["jnj"] = {"Yemsa"}, ["jnl"] = {"Rawat"}, ["jns"] = {"Jaunsari"}, ["job"] = {"Joba"}, ["jod"] = {"Wojenaka"}, ["jog"] = {"Jogi"}, ["jor"] = {"Jorá"}, ["jos"] = {"Jordanian Sign Language"}, ["jow"] = {"Jowulu"}, ["jpa"] = {"Jewish Palestinian Aramaic"}, ["jpr"] = {"Judeo-Persian"}, ["jpx"] = {"Japanese (family)"}, ["jqr"] = {"Jaqaru"}, ["jra"] = {"Jarai"}, ["jrb"] = {"Judeo-Arabic"}, ["jrr"] = {"Jiru"}, ["jrt"] = {"Jakattoe"}, ["jru"] = {"Japrería"}, ["jsl"] = {"Japanese Sign Language"}, ["jua"] = {"Júma"}, ["jub"] = {"Wannu"}, ["juc"] = {"Jurchen"}, ["jud"] = {"Worodougou"}, ["juh"] = {"Hõne"}, ["jui"] = {"Ngadjuri"}, ["juk"] = {"Wapan"}, ["jul"] = {"Jirel"}, ["jum"] = {"Jumjum"}, ["jun"] = {"Juang"}, ["juo"] = {"Jiba"}, ["jup"] = {"Hupdë"}, ["jur"] = {"Jurúna"}, ["jus"] = {"Jumla Sign Language"}, ["jut"] = {"Jutish"}, ["juu"] = {"Ju"}, ["juw"] = {"Wãpha"}, ["juy"] = {"Juray"}, ["jvd"] = {"Javindo"}, ["jvn"] = {"Caribbean Javanese"}, ["jwi"] = {"Jwira-Pepesa"}, ["jya"] = {"Jiarong"}, ["jye"] = {"Judeo-Yemeni Arabic"}, ["jyy"] = {"Jaya"}, ["kaa"] = {"Kara-Kalpak", "Karakalpak"}, ["kab"] = {"Kabyle"}, ["kac"] = {"Kachin", "Jingpho"}, ["kad"] = {"Adara"}, ["kae"] = {"Ketangalan"}, ["kaf"] = {"Katso"}, ["kag"] = {"Kajaman"}, ["kah"] = {"Kara (Central African Republic)"}, ["kai"] = {"Karekare"}, ["kaj"] = {"Jju"}, ["kak"] = {"Kalanguya", "Kayapa Kallahan"}, ["kam"] = {"Kamba (Kenya)"}, ["kao"] = {"Xaasongaxango"}, ["kap"] = {"Bezhta"}, ["kaq"] = {"Capanahua"}, ["kar"] = {"Karen languages"}, ["kav"] = {"Katukína"}, ["kaw"] = {"Kawi"}, ["kax"] = {"Kao"}, ["kay"] = {"Kamayurá"}, ["kba"] = {"Kalarko"}, ["kbb"] = {"Kaxuiâna"}, ["kbc"] = {"Kadiwéu"}, ["kbd"] = {"Kabardian"}, ["kbe"] = {"Kanju"}, ["kbg"] = {"Khamba"}, ["kbh"] = {"Camsá"}, ["kbi"] = {"Kaptiau"}, ["kbj"] = {"Kari"}, ["kbk"] = {"Grass Koiari"}, ["kbl"] = {"Kanembu"}, ["kbm"] = {"Iwal"}, ["kbn"] = {"Kare (Central African Republic)"}, ["kbo"] = {"Keliko"}, ["kbp"] = {"Kabiyè"}, ["kbq"] = {"Kamano"}, ["kbr"] = {"Kafa"}, ["kbs"] = {"Kande"}, ["kbt"] = {"Abadi"}, ["kbu"] = {"Kabutra"}, ["kbv"] = {"Dera (Indonesia)"}, ["kbw"] = {"Kaiep"}, ["kbx"] = {"Ap Ma"}, ["kby"] = {"Manga Kanuri"}, ["kbz"] = {"Duhwa"}, ["kca"] = {"Khanty"}, ["kcb"] = {"Kawacha"}, ["kcc"] = {"Lubila"}, ["kcd"] = {"Ngkâlmpw Kanum"}, ["kce"] = {"Kaivi"}, ["kcf"] = {"Ukaan"}, ["kcg"] = {"Tyap"}, ["kch"] = {"Vono"}, ["kci"] = {"Ngyian", "Kamantan"}, ["kcj"] = {"Kobiana"}, ["kck"] = {"Kalanga"}, ["kcl"] = {"Kela (Papua New Guinea)", "Kala"}, ["kcm"] = {"Gula (Central African Republic)"}, ["kcn"] = {"Nubi"}, ["kco"] = {"Kinalakna"}, ["kcp"] = {"Kanga"}, ["kcq"] = {"Kamo"}, ["kcr"] = {"Katla"}, ["kcs"] = {"Koenoem"}, ["kct"] = {"Kaian"}, ["kcu"] = {"Kami (Tanzania)"}, ["kcv"] = {"Kete"}, ["kcw"] = {"Kabwari"}, ["kcx"] = {"Kachama-Ganjule"}, ["kcy"] = {"Korandje"}, ["kcz"] = {"Konongo"}, ["kda"] = {"Worimi"}, ["kdc"] = {"Kutu"}, ["kdd"] = {"Yankunytjatjara"}, ["kde"] = {"Makonde"}, ["kdf"] = {"Mamusi"}, ["kdg"] = {"Seba"}, ["kdh"] = {"Tem"}, ["kdi"] = {"Kumam"}, ["kdj"] = {"Karamojong"}, ["kdk"] = {"Numèè", "Kwényi"}, ["kdl"] = {"Tsikimba"}, ["kdm"] = {"Kagoma"}, ["kdn"] = {"Kunda"}, ["kdo"] = {"Kordofanian languages"}, ["kdp"] = {"Kaningdon-Nindem"}, ["kdq"] = {"Koch"}, ["kdr"] = {"Karaim"}, ["kdt"] = {"Kuy"}, ["kdu"] = {"Kadaru"}, ["kdw"] = {"Koneraw"}, ["kdx"] = {"Kam"}, ["kdy"] = {"Keder", "Keijar"}, ["kdz"] = {"Kwaja"}, ["kea"] = {"Kabuverdianu"}, ["keb"] = {"Kélé"}, ["kec"] = {"Keiga"}, ["ked"] = {"Kerewe"}, ["kee"] = {"Eastern Keres"}, ["kef"] = {"Kpessi"}, ["keg"] = {"Tese"}, ["keh"] = {"Keak"}, ["kei"] = {"Kei"}, ["kej"] = {"Kadar"}, ["kek"] = {"Kekchí"}, ["kel"] = {"Kela (Democratic Republic of Congo)"}, ["kem"] = {"Kemak"}, ["ken"] = {"Kenyang"}, ["keo"] = {"Kakwa"}, ["kep"] = {"Kaikadi"}, ["keq"] = {"Kamar"}, ["ker"] = {"Kera"}, ["kes"] = {"Kugbo"}, ["ket"] = {"Ket"}, ["keu"] = {"Akebu"}, ["kev"] = {"Kanikkaran"}, ["kew"] = {"West Kewa"}, ["kex"] = {"Kukna"}, ["key"] = {"Kupia"}, ["kez"] = {"Kukele"}, ["kfa"] = {"Kodava"}, ["kfb"] = {"Northwestern Kolami"}, ["kfc"] = {"Konda-Dora"}, ["kfd"] = {"Korra Koraga"}, ["kfe"] = {"Kota (India)"}, ["kff"] = {"Koya"}, ["kfg"] = {"Kudiya"}, ["kfh"] = {"Kurichiya"}, ["kfi"] = {"Kannada Kurumba"}, ["kfj"] = {"Kemiehua"}, ["kfk"] = {"Kinnauri"}, ["kfl"] = {"Kung"}, ["kfm"] = {"Khunsari"}, ["kfn"] = {"Kuk"}, ["kfo"] = {"Koro (Côte d'Ivoire)"}, ["kfp"] = {"Korwa"}, ["kfq"] = {"Korku"}, ["kfr"] = {"Kachhi", "Kutchi"}, ["kfs"] = {"Bilaspuri"}, ["kft"] = {"Kanjari"}, ["kfu"] = {"Katkari"}, ["kfv"] = {"Kurmukar"}, ["kfw"] = {"Kharam Naga"}, ["kfx"] = {"Kullu Pahari"}, ["kfy"] = {"Kumaoni"}, ["kfz"] = {"Koromfé"}, ["kga"] = {"Koyaga"}, ["kgb"] = {"Kawe"}, ["kge"] = {"Komering"}, ["kgf"] = {"Kube"}, ["kgg"] = {"Kusunda"}, ["kgi"] = {"Selangor Sign Language"}, ["kgj"] = {"Gamale Kham"}, ["kgk"] = {"Kaiwá"}, ["kgl"] = {"Kunggari"}, ["kgn"] = {"Karingani"}, ["kgo"] = {"Krongo"}, ["kgp"] = {"Kaingang"}, ["kgq"] = {"Kamoro"}, ["kgr"] = {"Abun"}, ["kgs"] = {"Kumbainggar"}, ["kgt"] = {"Somyev"}, ["kgu"] = {"Kobol"}, ["kgv"] = {"Karas"}, ["kgw"] = {"Karon Dori"}, ["kgx"] = {"Kamaru"}, ["kgy"] = {"Kyerung"}, ["kha"] = {"Khasi"}, ["khb"] = {"Lü"}, ["khc"] = {"Tukang Besi North"}, ["khd"] = {"Bädi Kanum"}, ["khe"] = {"Korowai"}, ["khf"] = {"Khuen"}, ["khg"] = {"Khams Tibetan"}, ["khh"] = {"Kehu"}, ["khi"] = {"Khoisan languages"}, ["khj"] = {"Kuturmi"}, ["khk"] = {"Halh Mongolian"}, ["khl"] = {"Lusi"}, ["khn"] = {"Khandesi"}, ["kho"] = {"Khotanese", "Sakan"}, ["khp"] = {"Kapori", "Kapauri"}, ["khq"] = {"Koyra Chiini Songhay"}, ["khr"] = {"Kharia"}, ["khs"] = {"Kasua"}, ["kht"] = {"Khamti"}, ["khu"] = {"Nkhumbi"}, ["khv"] = {"Khvarshi"}, ["khw"] = {"Khowar"}, ["khx"] = {"Kanu"}, ["khy"] = {"Kele (Democratic Republic of Congo)"}, ["khz"] = {"Keapara"}, ["kia"] = {"Kim"}, ["kib"] = {"Koalib"}, ["kic"] = {"Kickapoo"}, ["kid"] = {"Koshin"}, ["kie"] = {"Kibet"}, ["kif"] = {"Eastern Parbate Kham"}, ["kig"] = {"Kimaama", "Kimaghima"}, ["kih"] = {"Kilmeri"}, ["kii"] = {"Kitsai"}, ["kij"] = {"Kilivila"}, ["kil"] = {"Kariya"}, ["kim"] = {"Karagas"}, ["kio"] = {"Kiowa"}, ["kip"] = {"Sheshi Kham"}, ["kiq"] = {"Kosadle", "Kosare"}, ["kis"] = {"Kis"}, ["kit"] = {"Agob"}, ["kiu"] = {"Kirmanjki (individual language)"}, ["kiv"] = {"Kimbu"}, ["kiw"] = {"Northeast Kiwai"}, ["kix"] = {"Khiamniungan Naga"}, ["kiy"] = {"Kirikiri"}, ["kiz"] = {"Kisi"}, ["kja"] = {"Mlap"}, ["kjb"] = {"Q'anjob'al", "Kanjobal"}, ["kjc"] = {"Coastal Konjo"}, ["kjd"] = {"Southern Kiwai"}, ["kje"] = {"Kisar"}, ["kjg"] = {"Khmu"}, ["kjh"] = {"Khakas"}, ["kji"] = {"Zabana"}, ["kjj"] = {"Khinalugh"}, ["kjk"] = {"Highland Konjo"}, ["kjl"] = {"Western Parbate Kham"}, ["kjm"] = {"Kháng"}, ["kjn"] = {"Kunjen"}, ["kjo"] = {"Harijan Kinnauri"}, ["kjp"] = {"Pwo Eastern Karen"}, ["kjq"] = {"Western Keres"}, ["kjr"] = {"Kurudu"}, ["kjs"] = {"East Kewa"}, ["kjt"] = {"Phrae Pwo Karen"}, ["kju"] = {"Kashaya"}, ["kjv"] = {"Kaikavian Literary Language"}, ["kjx"] = {"Ramopa"}, ["kjy"] = {"Erave"}, ["kjz"] = {"Bumthangkha"}, ["kka"] = {"Kakanda"}, ["kkb"] = {"Kwerisa"}, ["kkc"] = {"Odoodee"}, ["kkd"] = {"Kinuku"}, ["kke"] = {"Kakabe"}, ["kkf"] = {"Kalaktang Monpa"}, ["kkg"] = {"Mabaka Valley Kalinga"}, ["kkh"] = {"Khün"}, ["kki"] = {"Kagulu"}, ["kkj"] = {"Kako"}, ["kkk"] = {"Kokota"}, ["kkl"] = {"Kosarek Yale"}, ["kkm"] = {"Kiong"}, ["kkn"] = {"Kon Keu"}, ["kko"] = {"Karko"}, ["kkp"] = {"Gugubera", "Koko-Bera"}, ["kkq"] = {"Kaeku"}, ["kkr"] = {"Kir-Balar"}, ["kks"] = {"Giiwo"}, ["kkt"] = {"Koi"}, ["kku"] = {"Tumi"}, ["kkv"] = {"Kangean"}, ["kkw"] = {"Teke-Kukuya"}, ["kkx"] = {"Kohin"}, ["kky"] = {"Guugu Yimidhirr", "Guguyimidjir"}, ["kkz"] = {"Kaska"}, ["kla"] = {"Klamath-Modoc"}, ["klb"] = {"Kiliwa"}, ["klc"] = {"Kolbila"}, ["kld"] = {"Gamilaraay"}, ["kle"] = {"Kulung (Nepal)"}, ["klf"] = {"Kendeje"}, ["klg"] = {"Tagakaulo"}, ["klh"] = {"Weliki"}, ["kli"] = {"Kalumpang"}, ["klj"] = {"Khalaj"}, ["klk"] = {"Kono (Nigeria)"}, ["kll"] = {"Kagan Kalagan"}, ["klm"] = {"Migum"}, ["kln"] = {"Kalenjin"}, ["klo"] = {"Kapya"}, ["klp"] = {"Kamasa"}, ["klq"] = {"Rumu"}, ["klr"] = {"Khaling"}, ["kls"] = {"Kalasha"}, ["klt"] = {"Nukna"}, ["klu"] = {"Klao"}, ["klv"] = {"Maskelynes"}, ["klw"] = {"Tado", "Lindu"}, ["klx"] = {"Koluwawa"}, ["kly"] = {"Kalao"}, ["klz"] = {"Kabola"}, ["kma"] = {"Konni"}, ["kmb"] = {"Kimbundu"}, ["kmc"] = {"Southern Dong"}, ["kmd"] = {"Majukayang Kalinga"}, ["kme"] = {"Bakole"}, ["kmf"] = {"Kare (Papua New Guinea)"}, ["kmg"] = {"Kâte"}, ["kmh"] = {"Kalam"}, ["kmi"] = {"Kami (Nigeria)"}, ["kmj"] = {"Kumarbhag Paharia"}, ["kmk"] = {"Limos Kalinga"}, ["kml"] = {"Tanudan Kalinga"}, ["kmm"] = {"Kom (India)"}, ["kmn"] = {"Awtuw"}, ["kmo"] = {"Kwoma"}, ["kmp"] = {"Gimme"}, ["kmq"] = {"Kwama"}, ["kmr"] = {"Northern Kurdish"}, ["kms"] = {"Kamasau"}, ["kmt"] = {"Kemtuik"}, ["kmu"] = {"Kanite"}, ["kmv"] = {"Karipúna Creole French"}, ["kmw"] = {"Komo (Democratic Republic of Congo)"}, ["kmx"] = {"Waboda"}, ["kmy"] = {"Koma"}, ["kmz"] = {"Khorasani Turkish"}, ["kna"] = {"Dera (Nigeria)"}, ["knb"] = {"Lubuagan Kalinga"}, ["knc"] = {"Central Kanuri"}, ["knd"] = {"Konda"}, ["kne"] = {"Kankanaey"}, ["knf"] = {"Mankanya"}, ["kng"] = {"Koongo"}, ["kni"] = {"Kanufi"}, ["knj"] = {"Western Kanjobal"}, ["knk"] = {"Kuranko"}, ["knl"] = {"Keninjal"}, ["knm"] = {"Kanamarí"}, ["knn"] = {"Konkani (individual language)"}, ["kno"] = {"Kono (Sierra Leone)"}, ["knp"] = {"Kwanja"}, ["knq"] = {"Kintaq"}, ["knr"] = {"Kaningra"}, ["kns"] = {"Kensiu"}, ["knt"] = {"Panoan Katukína"}, ["knu"] = {"Kono (Guinea)"}, ["knv"] = {"Tabo"}, ["knw"] = {"Kung-Ekoka"}, ["knx"] = {"Kendayan", "Salako"}, ["kny"] = {"Kanyok"}, ["knz"] = {"Kalamsé"}, ["koa"] = {"Konomala"}, ["koc"] = {"Kpati"}, ["kod"] = {"Kodi"}, ["koe"] = {"Kacipo-Bale Suri"}, ["kof"] = {"Kubi"}, ["kog"] = {"Cogui", "Kogi"}, ["koh"] = {"Koyo"}, ["koi"] = {"Komi-Permyak"}, ["kok"] = {"Konkani (macrolanguage)"}, ["kol"] = {"Kol (Papua New Guinea)"}, ["koo"] = {"Konzo"}, ["kop"] = {"Waube"}, ["koq"] = {"Kota (Gabon)"}, ["kos"] = {"Kosraean"}, ["kot"] = {"Lagwan"}, ["kou"] = {"Koke"}, ["kov"] = {"Kudu-Camo"}, ["kow"] = {"Kugama"}, ["koy"] = {"Koyukon"}, ["koz"] = {"Korak"}, ["kpa"] = {"Kutto"}, ["kpb"] = {"Mullu Kurumba"}, ["kpc"] = {"Curripaco"}, ["kpd"] = {"Koba"}, ["kpe"] = {"Kpelle"}, ["kpf"] = {"Komba"}, ["kpg"] = {"Kapingamarangi"}, ["kph"] = {"Kplang"}, ["kpi"] = {"Kofei"}, ["kpj"] = {"Karajá"}, ["kpk"] = {"Kpan"}, ["kpl"] = {"Kpala"}, ["kpm"] = {"Koho"}, ["kpn"] = {"Kepkiriwát"}, ["kpo"] = {"Ikposo"}, ["kpq"] = {"Korupun-Sela"}, ["kpr"] = {"Korafe-Yegha"}, ["kps"] = {"Tehit"}, ["kpt"] = {"Karata"}, ["kpu"] = {"Kafoa"}, ["kpv"] = {"Komi-Zyrian"}, ["kpw"] = {"Kobon"}, ["kpx"] = {"Mountain Koiali"}, ["kpy"] = {"Koryak"}, ["kpz"] = {"Kupsabiny"}, ["kqa"] = {"Mum"}, ["kqb"] = {"Kovai"}, ["kqc"] = {"Doromu-Koki"}, ["kqd"] = {"Koy Sanjaq Surat"}, ["kqe"] = {"Kalagan"}, ["kqf"] = {"Kakabai"}, ["kqg"] = {"Khe"}, ["kqh"] = {"Kisankasa"}, ["kqi"] = {"Koitabu"}, ["kqj"] = {"Koromira"}, ["kqk"] = {"Kotafon Gbe"}, ["kql"] = {"Kyenele"}, ["kqm"] = {"Khisa"}, ["kqn"] = {"Kaonde"}, ["kqo"] = {"Eastern Krahn"}, ["kqp"] = {"Kimré"}, ["kqq"] = {"Krenak"}, ["kqr"] = {"Kimaragang"}, ["kqs"] = {"Northern Kissi"}, ["kqt"] = {"Klias River Kadazan"}, ["kqu"] = {"Seroa"}, ["kqv"] = {"Okolod"}, ["kqw"] = {"Kandas"}, ["kqx"] = {"Mser"}, ["kqy"] = {"Koorete"}, ["kqz"] = {"Korana"}, ["kra"] = {"Kumhali"}, ["krb"] = {"Karkin"}, ["krc"] = {"Karachay-Balkar"}, ["krd"] = {"Kairui-Midiki"}, ["kre"] = {"Panará"}, ["krf"] = {"Koro (Vanuatu)"}, ["krh"] = {"Kurama"}, ["kri"] = {"Krio"}, ["krj"] = {"Kinaray-A"}, ["krk"] = {"Kerek"}, ["krl"] = {"Karelian"}, ["krn"] = {"Sapo"}, ["kro"] = {"Kru languages"}, ["krp"] = {"Durop"}, ["krr"] = {"Krung"}, ["krs"] = {"Gbaya (Sudan)"}, ["krt"] = {"Tumari Kanuri"}, ["kru"] = {"Kurukh"}, ["krv"] = {"Kavet"}, ["krw"] = {"Western Krahn"}, ["krx"] = {"Karon"}, ["kry"] = {"Kryts"}, ["krz"] = {"Sota Kanum"}, ["ksb"] = {"Shambala"}, ["ksc"] = {"Southern Kalinga"}, ["ksd"] = {"Kuanua"}, ["kse"] = {"Kuni"}, ["ksf"] = {"Bafia"}, ["ksg"] = {"Kusaghe"}, ["ksh"] = {"Kölsch"}, ["ksi"] = {"Krisa", "I'saka"}, ["ksj"] = {"Uare"}, ["ksk"] = {"Kansa"}, ["ksl"] = {"Kumalu"}, ["ksm"] = {"Kumba"}, ["ksn"] = {"Kasiguranin"}, ["kso"] = {"Kofa"}, ["ksp"] = {"Kaba"}, ["ksq"] = {"Kwaami"}, ["ksr"] = {"Borong"}, ["kss"] = {"Southern Kisi"}, ["kst"] = {"Winyé"}, ["ksu"] = {"Khamyang"}, ["ksv"] = {"Kusu"}, ["ksw"] = {"S'gaw Karen"}, ["ksx"] = {"Kedang"}, ["ksy"] = {"Kharia Thar"}, ["ksz"] = {"Kodaku"}, ["kta"] = {"Katua"}, ["ktb"] = {"Kambaata"}, ["ktc"] = {"Kholok"}, ["ktd"] = {"Kokata", "Kukatha"}, ["kte"] = {"Nubri"}, ["ktf"] = {"Kwami"}, ["ktg"] = {"Kalkutung"}, ["kth"] = {"Karanga"}, ["kti"] = {"North Muyu"}, ["ktj"] = {"Plapo Krumen"}, ["ktk"] = {"Kaniet"}, ["ktl"] = {"Koroshi"}, ["ktm"] = {"Kurti"}, ["ktn"] = {"Karitiâna"}, ["kto"] = {"Kuot"}, ["ktp"] = {"Kaduo"}, ["ktq"] = {"Katabaga"}, ["kts"] = {"South Muyu"}, ["ktt"] = {"Ketum"}, ["ktu"] = {"Kituba (Democratic Republic of Congo)"}, ["ktv"] = {"Eastern Katu"}, ["ktw"] = {"Kato"}, ["ktx"] = {"Kaxararí"}, ["kty"] = {"Kango (Bas-Uélé District)"}, ["ktz"] = {"Juǀʼhoan", "Juǀʼhoansi"}, ["kub"] = {"Kutep"}, ["kuc"] = {"Kwinsu"}, ["kud"] = {"'Auhelawa"}, ["kue"] = {"Kuman (Papua New Guinea)"}, ["kuf"] = {"Western Katu"}, ["kug"] = {"Kupa"}, ["kuh"] = {"Kushi"}, ["kui"] = {"Kuikúro-Kalapálo", "Kalapalo"}, ["kuj"] = {"Kuria"}, ["kuk"] = {"Kepo'"}, ["kul"] = {"Kulere"}, ["kum"] = {"Kumyk"}, ["kun"] = {"Kunama"}, ["kuo"] = {"Kumukio"}, ["kup"] = {"Kunimaipa"}, ["kuq"] = {"Karipuna"}, ["kus"] = {"Kusaal"}, ["kut"] = {"Kutenai"}, ["kuu"] = {"Upper Kuskokwim"}, ["kuv"] = {"Kur"}, ["kuw"] = {"Kpagua"}, ["kux"] = {"Kukatja"}, ["kuy"] = {"Kuuku-Ya'u"}, ["kuz"] = {"Kunza"}, ["kva"] = {"Bagvalal"}, ["kvb"] = {"Kubu"}, ["kvc"] = {"Kove"}, ["kvd"] = {"Kui (Indonesia)"}, ["kve"] = {"Kalabakan"}, ["kvf"] = {"Kabalai"}, ["kvg"] = {"Kuni-Boazi"}, ["kvh"] = {"Komodo"}, ["kvi"] = {"Kwang"}, ["kvj"] = {"Psikye"}, ["kvk"] = {"Korean Sign Language"}, ["kvl"] = {"Kayaw"}, ["kvm"] = {"Kendem"}, ["kvn"] = {"Border Kuna"}, ["kvo"] = {"Dobel"}, ["kvp"] = {"Kompane"}, ["kvq"] = {"Geba Karen"}, ["kvr"] = {"Kerinci"}, ["kvt"] = {"Lahta Karen", "Lahta"}, ["kvu"] = {"Yinbaw Karen"}, ["kvv"] = {"Kola"}, ["kvw"] = {"Wersing"}, ["kvx"] = {"Parkari Koli"}, ["kvy"] = {"Yintale Karen", "Yintale"}, ["kvz"] = {"Tsakwambo", "Tsaukambo"}, ["kwa"] = {"Dâw"}, ["kwb"] = {"Kwa"}, ["kwc"] = {"Likwala"}, ["kwd"] = {"Kwaio"}, ["kwe"] = {"Kwerba"}, ["kwf"] = {"Kwara'ae"}, ["kwg"] = {"Sara Kaba Deme"}, ["kwh"] = {"Kowiai"}, ["kwi"] = {"Awa-Cuaiquer"}, ["kwj"] = {"Kwanga"}, ["kwk"] = {"Kwak'wala", "Kwakiutl"}, ["kwl"] = {"Kofyar"}, ["kwm"] = {"Kwambi"}, ["kwn"] = {"Kwangali"}, ["kwo"] = {"Kwomtari"}, ["kwp"] = {"Kodia"}, ["kwr"] = {"Kwer"}, ["kws"] = {"Kwese"}, ["kwt"] = {"Kwesten"}, ["kwu"] = {"Kwakum"}, ["kwv"] = {"Sara Kaba Náà"}, ["kww"] = {"Kwinti"}, ["kwx"] = {"Khirwar"}, ["kwy"] = {"San Salvador Kongo"}, ["kwz"] = {"Kwadi"}, ["kxa"] = {"Kairiru"}, ["kxb"] = {"Krobu"}, ["kxc"] = {"Konso", "Khonso"}, ["kxd"] = {"Brunei"}, ["kxf"] = {"Manumanaw Karen", "Manumanaw"}, ["kxh"] = {"Karo (Ethiopia)"}, ["kxi"] = {"Keningau Murut"}, ["kxj"] = {"Kulfa"}, ["kxk"] = {"Zayein Karen"}, ["kxm"] = {"Northern Khmer"}, ["kxn"] = {"Kanowit-Tanjong Melanau"}, ["kxo"] = {"Kanoé"}, ["kxp"] = {"Wadiyara Koli"}, ["kxq"] = {"Smärky Kanum"}, ["kxr"] = {"Koro (Papua New Guinea)"}, ["kxs"] = {"Kangjia"}, ["kxt"] = {"Koiwat"}, ["kxv"] = {"Kuvi"}, ["kxw"] = {"Konai"}, ["kxx"] = {"Likuba"}, ["kxy"] = {"Kayong"}, ["kxz"] = {"Kerewo"}, ["kya"] = {"Kwaya"}, ["kyb"] = {"Butbut Kalinga"}, ["kyc"] = {"Kyaka"}, ["kyd"] = {"Karey"}, ["kye"] = {"Krache"}, ["kyf"] = {"Kouya"}, ["kyg"] = {"Keyagana"}, ["kyh"] = {"Karok"}, ["kyi"] = {"Kiput"}, ["kyj"] = {"Karao"}, ["kyk"] = {"Kamayo"}, ["kyl"] = {"Kalapuya"}, ["kym"] = {"Kpatili"}, ["kyn"] = {"Northern Binukidnon"}, ["kyo"] = {"Kelon"}, ["kyp"] = {"Kang"}, ["kyq"] = {"Kenga"}, ["kyr"] = {"Kuruáya"}, ["kys"] = {"Baram Kayan"}, ["kyt"] = {"Kayagar"}, ["kyu"] = {"Western Kayah"}, ["kyv"] = {"Kayort"}, ["kyw"] = {"Kudmali"}, ["kyx"] = {"Rapoisi"}, ["kyy"] = {"Kambaira"}, ["kyz"] = {"Kayabí"}, ["kza"] = {"Western Karaboro"}, ["kzb"] = {"Kaibobo"}, ["kzc"] = {"Bondoukou Kulango"}, ["kzd"] = {"Kadai"}, ["kze"] = {"Kosena"}, ["kzf"] = {"Da'a Kaili"}, ["kzg"] = {"Kikai"}, ["kzi"] = {"Kelabit"}, ["kzk"] = {"Kazukuru"}, ["kzl"] = {"Kayeli"}, ["kzm"] = {"Kais"}, ["kzn"] = {"Kokola"}, ["kzo"] = {"Kaningi"}, ["kzp"] = {"Kaidipang"}, ["kzq"] = {"Kaike"}, ["kzr"] = {"Karang"}, ["kzs"] = {"Sugut Dusun"}, ["kzu"] = {"Kayupulau"}, ["kzv"] = {"Komyandaret"}, ["kzw"] = {"Karirí-Xocó"}, ["kzx"] = {"Kamarian"}, ["kzy"] = {"Kango (Tshopo District)"}, ["kzz"] = {"Kalabra"}, ["laa"] = {"Southern Subanen"}, ["lab"] = {"Linear A"}, ["lac"] = {"Lacandon"}, ["lad"] = {"Ladino"}, ["lae"] = {"Pattani"}, ["laf"] = {"Lafofa"}, ["lag"] = {"Rangi"}, ["lah"] = {"Lahnda"}, ["lai"] = {"Lambya"}, ["laj"] = {"Lango (Uganda)"}, ["lal"] = {"Lalia"}, ["lam"] = {"Lamba"}, ["lan"] = {"Laru"}, ["lap"] = {"Laka (Chad)"}, ["laq"] = {"Qabiao"}, ["lar"] = {"Larteh"}, ["las"] = {"Lama (Togo)"}, ["lau"] = {"Laba"}, ["law"] = {"Lauje"}, ["lax"] = {"Tiwa"}, ["lay"] = {"Lama Bai"}, ["laz"] = {"Aribwatsa"}, ["lbb"] = {"Label"}, ["lbc"] = {"Lakkia"}, ["lbe"] = {"Lak"}, ["lbf"] = {"Tinani"}, ["lbg"] = {"Laopang"}, ["lbi"] = {"La'bi"}, ["lbj"] = {"Ladakhi"}, ["lbk"] = {"Central Bontok"}, ["lbl"] = {"Libon Bikol"}, ["lbm"] = {"Lodhi"}, ["lbn"] = {"Rmeet"}, ["lbo"] = {"Laven"}, ["lbq"] = {"Wampar"}, ["lbr"] = {"Lohorung"}, ["lbs"] = {"Libyan Sign Language"}, ["lbt"] = {"Lachi"}, ["lbu"] = {"Labu"}, ["lbv"] = {"Lavatbura-Lamusong"}, ["lbw"] = {"Tolaki"}, ["lbx"] = {"Lawangan"}, ["lby"] = {"Lamalama", "Lamu-Lamu"}, ["lbz"] = {"Lardil"}, ["lcc"] = {"Legenyem"}, ["lcd"] = {"Lola"}, ["lce"] = {"Loncong", "Sekak"}, ["lcf"] = {"Lubu"}, ["lch"] = {"Luchazi"}, ["lcl"] = {"Lisela"}, ["lcm"] = {"Tungag"}, ["lcp"] = {"Western Lawa"}, ["lcq"] = {"Luhu"}, ["lcs"] = {"Lisabata-Nuniali"}, ["lda"] = {"Kla-Dan"}, ["ldb"] = {"Dũya"}, ["ldd"] = {"Luri"}, ["ldg"] = {"Lenyima"}, ["ldh"] = {"Lamja-Dengsa-Tola"}, ["ldi"] = {"Laari"}, ["ldj"] = {"Lemoro"}, ["ldk"] = {"Leelau"}, ["ldl"] = {"Kaan"}, ["ldm"] = {"Landoma"}, ["ldn"] = {"Láadan"}, ["ldo"] = {"Loo"}, ["ldp"] = {"Tso"}, ["ldq"] = {"Lufu"}, ["lea"] = {"Lega-Shabunda"}, ["leb"] = {"Lala-Bisa"}, ["lec"] = {"Leco"}, ["led"] = {"Lendu"}, ["lee"] = {"Lyélé"}, ["lef"] = {"Lelemi"}, ["leh"] = {"Lenje"}, ["lei"] = {"Lemio"}, ["lej"] = {"Lengola"}, ["lek"] = {"Leipon"}, ["lel"] = {"Lele (Democratic Republic of Congo)"}, ["lem"] = {"Nomaande"}, ["len"] = {"Lenca"}, ["leo"] = {"Leti (Cameroon)"}, ["lep"] = {"Lepcha"}, ["leq"] = {"Lembena"}, ["ler"] = {"Lenkau"}, ["les"] = {"Lese"}, ["let"] = {"Lesing-Gelimi", "Amio-Gelimi"}, ["leu"] = {"Kara (Papua New Guinea)"}, ["lev"] = {"Lamma"}, ["lew"] = {"Ledo Kaili"}, ["lex"] = {"Luang"}, ["ley"] = {"Lemolang"}, ["lez"] = {"Lezghian"}, ["lfa"] = {"Lefa"}, ["lfb"] = {"Buu (Cameroon)"}, ["lfn"] = {"Lingua Franca Nova"}, ["lga"] = {"Lungga"}, ["lgb"] = {"Laghu"}, ["lgg"] = {"Lugbara"}, ["lgh"] = {"Laghuu"}, ["lgi"] = {"Lengilu"}, ["lgk"] = {"Lingarak", "Neverver"}, ["lgl"] = {"Wala"}, ["lgm"] = {"Lega-Mwenga"}, ["lgn"] = {"T'apo", "Opuuo"}, ["lgo"] = {"Lango (South Sudan)"}, ["lgq"] = {"Logba"}, ["lgr"] = {"Lengo"}, ["lgs"] = {"Guinea-Bissau Sign Language", "Língua Gestual Guineense"}, ["lgt"] = {"Pahi"}, ["lgu"] = {"Longgu"}, ["lgz"] = {"Ligenza"}, ["lha"] = {"Laha (Viet Nam)"}, ["lhh"] = {"Laha (Indonesia)"}, ["lhi"] = {"Lahu Shi"}, ["lhl"] = {"Lahul Lohar"}, ["lhm"] = {"Lhomi"}, ["lhn"] = {"Lahanan"}, ["lhp"] = {"Lhokpu"}, ["lhs"] = {"Mlahsö"}, ["lht"] = {"Lo-Toga"}, ["lhu"] = {"Lahu"}, ["lia"] = {"West-Central Limba"}, ["lib"] = {"Likum"}, ["lic"] = {"Hlai"}, ["lid"] = {"Nyindrou"}, ["lie"] = {"Likila"}, ["lif"] = {"Limbu"}, ["lig"] = {"Ligbi"}, ["lih"] = {"Lihir"}, ["lij"] = {"Ligurian"}, ["lik"] = {"Lika"}, ["lil"] = {"Lillooet"}, ["lio"] = {"Liki"}, ["lip"] = {"Sekpele"}, ["liq"] = {"Libido"}, ["lir"] = {"Liberian English"}, ["lis"] = {"Lisu"}, ["liu"] = {"Logorik"}, ["liv"] = {"Liv"}, ["liw"] = {"Col"}, ["lix"] = {"Liabuku"}, ["liy"] = {"Banda-Bambari"}, ["liz"] = {"Libinza"}, ["lja"] = {"Golpa"}, ["lje"] = {"Rampi"}, ["lji"] = {"Laiyolo"}, ["ljl"] = {"Li'o"}, ["ljp"] = {"Lampung Api"}, ["ljw"] = {"Yirandali"}, ["ljx"] = {"Yuru"}, ["lka"] = {"Lakalei"}, ["lkb"] = {"Kabras", "Lukabaras"}, ["lkc"] = {"Kucong"}, ["lkd"] = {"Lakondê"}, ["lke"] = {"Kenyi"}, ["lkh"] = {"Lakha"}, ["lki"] = {"Laki"}, ["lkj"] = {"Remun"}, ["lkl"] = {"Laeko-Libuat"}, ["lkm"] = {"Kalaamaya"}, ["lkn"] = {"Lakon", "Vure"}, ["lko"] = {"Khayo", "Olukhayo"}, ["lkr"] = {"Päri"}, ["lks"] = {"Kisa", "Olushisa"}, ["lkt"] = {"Lakota"}, ["lku"] = {"Kungkari"}, ["lky"] = {"Lokoya"}, ["lla"] = {"Lala-Roba"}, ["llb"] = {"Lolo"}, ["llc"] = {"Lele (Guinea)"}, ["lld"] = {"Ladin"}, ["lle"] = {"Lele (Papua New Guinea)"}, ["llf"] = {"Hermit"}, ["llg"] = {"Lole"}, ["llh"] = {"Lamu"}, ["lli"] = {"Teke-Laali"}, ["llj"] = {"Ladji Ladji"}, ["llk"] = {"Lelak"}, ["lll"] = {"Lilau"}, ["llm"] = {"Lasalimu"}, ["lln"] = {"Lele (Chad)"}, ["llp"] = {"North Efate"}, ["llq"] = {"Lolak"}, ["lls"] = {"Lithuanian Sign Language"}, ["llu"] = {"Lau"}, ["llx"] = {"Lauan"}, ["lma"] = {"East Limba"}, ["lmb"] = {"Merei"}, ["lmc"] = {"Limilngan"}, ["lmd"] = {"Lumun"}, ["lme"] = {"Pévé"}, ["lmf"] = {"South Lembata"}, ["lmg"] = {"Lamogai"}, ["lmh"] = {"Lambichhong"}, ["lmi"] = {"Lombi"}, ["lmj"] = {"West Lembata"}, ["lmk"] = {"Lamkang"}, ["lml"] = {"Hano"}, ["lmn"] = {"Lambadi"}, ["lmo"] = {"Lombard"}, ["lmp"] = {"Limbum"}, ["lmq"] = {"Lamatuka"}, ["lmr"] = {"Lamalera"}, ["lmu"] = {"Lamenu"}, ["lmv"] = {"Lomaiviti"}, ["lmw"] = {"Lake Miwok"}, ["lmx"] = {"Laimbue"}, ["lmy"] = {"Lamboya"}, ["lna"] = {"Langbashe"}, ["lnb"] = {"Mbalanhu"}, ["lnd"] = {"Lundayeh", "Lun Bawang"}, ["lng"] = {"Langobardic"}, ["lnh"] = {"Lanoh"}, ["lni"] = {"Daantanai'"}, ["lnj"] = {"Leningitij"}, ["lnl"] = {"South Central Banda"}, ["lnm"] = {"Langam"}, ["lnn"] = {"Lorediakarkar"}, ["lns"] = {"Lamnso'"}, ["lnu"] = {"Longuda"}, ["lnw"] = {"Lanima"}, ["lnz"] = {"Lonzo"}, ["loa"] = {"Loloda"}, ["lob"] = {"Lobi"}, ["loc"] = {"Inonhan"}, ["loe"] = {"Saluan"}, ["lof"] = {"Logol"}, ["log"] = {"Logo"}, ["loh"] = {"Laarim", "Narim"}, ["loi"] = {"Loma (Côte d'Ivoire)"}, ["loj"] = {"Lou"}, ["lok"] = {"Loko"}, ["lol"] = {"Mongo"}, ["lom"] = {"Loma (Liberia)"}, ["lon"] = {"Malawi Lomwe"}, ["loo"] = {"Lombo"}, ["lop"] = {"Lopa"}, ["loq"] = {"Lobala"}, ["lor"] = {"Téén"}, ["los"] = {"Loniu"}, ["lot"] = {"Otuho"}, ["lou"] = {"Louisiana Creole"}, ["lov"] = {"Lopi"}, ["low"] = {"Tampias Lobu"}, ["lox"] = {"Loun"}, ["loy"] = {"Loke"}, ["loz"] = {"Lozi"}, ["lpa"] = {"Lelepa"}, ["lpe"] = {"Lepki"}, ["lpn"] = {"Long Phuri Naga"}, ["lpo"] = {"Lipo"}, ["lpx"] = {"Lopit"}, ["lqr"] = {"Logir"}, ["lra"] = {"Rara Bakati'"}, ["lrc"] = {"Northern Luri"}, ["lre"] = {"Laurentian"}, ["lrg"] = {"Laragia"}, ["lri"] = {"Marachi", "Olumarachi"}, ["lrk"] = {"Loarki"}, ["lrl"] = {"Lari"}, ["lrm"] = {"Marama", "Olumarama"}, ["lrn"] = {"Lorang"}, ["lro"] = {"Laro"}, ["lrr"] = {"Southern Yamphu"}, ["lrt"] = {"Larantuka Malay"}, ["lrv"] = {"Larevat"}, ["lrz"] = {"Lemerig"}, ["lsa"] = {"Lasgerdi"}, ["lsb"] = {"Burundian Sign Language", "Langue des Signes Burundaise"}, ["lsc"] = {"Albarradas Sign Language", "Lengua de señas Albarradas"}, ["lsd"] = {"Lishana Deni"}, ["lse"] = {"Lusengo"}, ["lsh"] = {"Lish"}, ["lsi"] = {"Lashi"}, ["lsl"] = {"Latvian Sign Language"}, ["lsm"] = {"Saamia", "Olusamia"}, ["lsn"] = {"Tibetan Sign Language"}, ["lso"] = {"Laos Sign Language"}, ["lsp"] = {"Panamanian Sign Language", "Lengua de Señas Panameñas"}, ["lsr"] = {"Aruop"}, ["lss"] = {"Lasi"}, ["lst"] = {"Trinidad and Tobago Sign Language"}, ["lsv"] = {"Sivia Sign Language"}, ["lsw"] = {"Seychelles Sign Language", "Lalang Siny Seselwa", "Langue des Signes Seychelloise"}, ["lsy"] = {"Mauritian Sign Language"}, ["ltc"] = {"Late Middle Chinese"}, ["ltg"] = {"Latgalian"}, ["lth"] = {"Thur"}, ["lti"] = {"Leti (Indonesia)"}, ["ltn"] = {"Latundê"}, ["lto"] = {"Tsotso", "Olutsotso"}, ["lts"] = {"Tachoni", "Lutachoni"}, ["ltu"] = {"Latu"}, ["lua"] = {"Luba-Lulua"}, ["luc"] = {"Aringa"}, ["lud"] = {"Ludian"}, ["lue"] = {"Luvale"}, ["luf"] = {"Laua"}, ["luh"] = {"Leizhou Chinese"}, ["lui"] = {"Luiseño"}, ["luj"] = {"Luna"}, ["luk"] = {"Lunanakha"}, ["lul"] = {"Olu'bo"}, ["lum"] = {"Luimbi"}, ["lun"] = {"Lunda"}, ["luo"] = {"Luo (Kenya and Tanzania)", "Dholuo"}, ["lup"] = {"Lumbu"}, ["luq"] = {"Lucumi"}, ["lur"] = {"Laura"}, ["lus"] = {"Lushai"}, ["lut"] = {"Lushootseed"}, ["luu"] = {"Lumba-Yakkha"}, ["luv"] = {"Luwati"}, ["luw"] = {"Luo (Cameroon)"}, ["luy"] = {"Luyia", "Oluluyia"}, ["luz"] = {"Southern Luri"}, ["lva"] = {"Maku'a"}, ["lvi"] = {"Lavi"}, ["lvk"] = {"Lavukaleve"}, ["lvl"] = {"Lwel"}, ["lvs"] = {"Standard Latvian"}, ["lvu"] = {"Levuka"}, ["lwa"] = {"Lwalu"}, ["lwe"] = {"Lewo Eleng"}, ["lwg"] = {"Wanga", "Oluwanga"}, ["lwh"] = {"White Lachi"}, ["lwl"] = {"Eastern Lawa"}, ["lwm"] = {"Laomian"}, ["lwo"] = {"Luwo"}, ["lws"] = {"Malawian Sign Language"}, ["lwt"] = {"Lewotobi"}, ["lwu"] = {"Lawu"}, ["lww"] = {"Lewo"}, ["lxm"] = {"Lakurumau"}, ["lya"] = {"Layakha"}, ["lyg"] = {"Lyngngam"}, ["lyn"] = {"Luyana"}, ["lzh"] = {"Literary Chinese"}, ["lzl"] = {"Litzlitz"}, ["lzn"] = {"Leinong Naga"}, ["lzz"] = {"Laz"}, ["maa"] = {"San Jerónimo Tecóatl Mazatec"}, ["mab"] = {"Yutanduchi Mixtec"}, ["mad"] = {"Madurese"}, ["mae"] = {"Bo-Rukul"}, ["maf"] = {"Mafa"}, ["mag"] = {"Magahi"}, ["mai"] = {"Maithili"}, ["maj"] = {"Jalapa De Díaz Mazatec"}, ["mak"] = {"Makasar"}, ["mam"] = {"Mam"}, ["man"] = {"Mandingo", "Manding"}, ["map"] = {"Austronesian languages"}, ["maq"] = {"Chiquihuitlán Mazatec"}, ["mas"] = {"Masai"}, ["mat"] = {"San Francisco Matlatzinca"}, ["mau"] = {"Huautla Mazatec"}, ["mav"] = {"Sateré-Mawé"}, ["maw"] = {"Mampruli"}, ["max"] = {"North Moluccan Malay"}, ["maz"] = {"Central Mazahua"}, ["mba"] = {"Higaonon"}, ["mbb"] = {"Western Bukidnon Manobo"}, ["mbc"] = {"Macushi"}, ["mbd"] = {"Dibabawon Manobo"}, ["mbe"] = {"Molale"}, ["mbf"] = {"Baba Malay"}, ["mbh"] = {"Mangseng"}, ["mbi"] = {"Ilianen Manobo"}, ["mbj"] = {"Nadëb"}, ["mbk"] = {"Malol"}, ["mbl"] = {"Maxakalí"}, ["mbm"] = {"Ombamba"}, ["mbn"] = {"Macaguán"}, ["mbo"] = {"Mbo (Cameroon)"}, ["mbp"] = {"Malayo"}, ["mbq"] = {"Maisin"}, ["mbr"] = {"Nukak Makú"}, ["mbs"] = {"Sarangani Manobo"}, ["mbt"] = {"Matigsalug Manobo"}, ["mbu"] = {"Mbula-Bwazza"}, ["mbv"] = {"Mbulungish"}, ["mbw"] = {"Maring"}, ["mbx"] = {"Mari (East Sepik Province)"}, ["mby"] = {"Memoni"}, ["mbz"] = {"Amoltepec Mixtec"}, ["mca"] = {"Maca"}, ["mcb"] = {"Machiguenga"}, ["mcc"] = {"Bitur"}, ["mcd"] = {"Sharanahua"}, ["mce"] = {"Itundujia Mixtec"}, ["mcf"] = {"Matsés"}, ["mcg"] = {"Mapoyo"}, ["mch"] = {"Maquiritari"}, ["mci"] = {"Mese"}, ["mcj"] = {"Mvanip"}, ["mck"] = {"Mbunda"}, ["mcl"] = {"Macaguaje"}, ["mcm"] = {"Malaccan Creole Portuguese"}, ["mcn"] = {"Masana"}, ["mco"] = {"Coatlán Mixe"}, ["mcp"] = {"Makaa"}, ["mcq"] = {"Ese"}, ["mcr"] = {"Menya"}, ["mcs"] = {"Mambai"}, ["mct"] = {"Mengisa"}, ["mcu"] = {"Cameroon Mambila"}, ["mcv"] = {"Minanibai"}, ["mcw"] = {"Mawa (Chad)"}, ["mcx"] = {"Mpiemo"}, ["mcy"] = {"South Watut"}, ["mcz"] = {"Mawan"}, ["mda"] = {"Mada (Nigeria)"}, ["mdb"] = {"Morigi"}, ["mdc"] = {"Male (Papua New Guinea)"}, ["mdd"] = {"Mbum"}, ["mde"] = {"Maba (Chad)"}, ["mdf"] = {"Moksha"}, ["mdg"] = {"Massalat"}, ["mdh"] = {"Maguindanaon"}, ["mdi"] = {"Mamvu"}, ["mdj"] = {"Mangbetu"}, ["mdk"] = {"Mangbutu"}, ["mdl"] = {"Maltese Sign Language"}, ["mdm"] = {"Mayogo"}, ["mdn"] = {"Mbati"}, ["mdp"] = {"Mbala"}, ["mdq"] = {"Mbole"}, ["mdr"] = {"Mandar"}, ["mds"] = {"Maria (Papua New Guinea)"}, ["mdt"] = {"Mbere"}, ["mdu"] = {"Mboko"}, ["mdv"] = {"Santa Lucía Monteverde Mixtec"}, ["mdw"] = {"Mbosi"}, ["mdx"] = {"Dizin"}, ["mdy"] = {"Male (Ethiopia)"}, ["mdz"] = {"Suruí Do Pará"}, ["mea"] = {"Menka"}, ["meb"] = {"Ikobi"}, ["mec"] = {"Marra"}, ["med"] = {"Melpa"}, ["mee"] = {"Mengen"}, ["mef"] = {"Megam"}, ["meh"] = {"Southwestern Tlaxiaco Mixtec"}, ["mei"] = {"Midob"}, ["mej"] = {"Meyah"}, ["mek"] = {"Mekeo"}, ["mel"] = {"Central Melanau"}, ["mem"] = {"Mangala"}, ["men"] = {"Mende (Sierra Leone)"}, ["meo"] = {"Kedah Malay"}, ["mep"] = {"Miriwoong"}, ["meq"] = {"Merey"}, ["mer"] = {"Meru"}, ["mes"] = {"Masmaje"}, ["met"] = {"Mato"}, ["meu"] = {"Motu"}, ["mev"] = {"Mano"}, ["mew"] = {"Maaka"}, ["mey"] = {"Hassaniyya"}, ["mez"] = {"Menominee"}, ["mfa"] = {"Pattani Malay"}, ["mfb"] = {"Bangka"}, ["mfc"] = {"Mba"}, ["mfd"] = {"Mendankwe-Nkwen"}, ["mfe"] = {"Morisyen"}, ["mff"] = {"Naki"}, ["mfg"] = {"Mogofin"}, ["mfh"] = {"Matal"}, ["mfi"] = {"Wandala"}, ["mfj"] = {"Mefele"}, ["mfk"] = {"North Mofu"}, ["mfl"] = {"Putai"}, ["mfm"] = {"Marghi South"}, ["mfn"] = {"Cross River Mbembe"}, ["mfo"] = {"Mbe"}, ["mfp"] = {"Makassar Malay"}, ["mfq"] = {"Moba"}, ["mfr"] = {"Marrithiyel"}, ["mfs"] = {"Mexican Sign Language"}, ["mft"] = {"Mokerang"}, ["mfu"] = {"Mbwela"}, ["mfv"] = {"Mandjak"}, ["mfw"] = {"Mulaha"}, ["mfx"] = {"Melo"}, ["mfy"] = {"Mayo"}, ["mfz"] = {"Mabaan"}, ["mga"] = {"Middle Irish (900-1200)"}, ["mgb"] = {"Mararit"}, ["mgc"] = {"Morokodo"}, ["mgd"] = {"Moru"}, ["mge"] = {"Mango"}, ["mgf"] = {"Maklew"}, ["mgg"] = {"Mpumpong"}, ["mgh"] = {"Makhuwa-Meetto"}, ["mgi"] = {"Lijili"}, ["mgj"] = {"Abureni"}, ["mgk"] = {"Mawes"}, ["mgl"] = {"Maleu-Kilenge"}, ["mgm"] = {"Mambae"}, ["mgn"] = {"Mbangi"}, ["mgo"] = {"Meta'"}, ["mgp"] = {"Eastern Magar"}, ["mgq"] = {"Malila"}, ["mgr"] = {"Mambwe-Lungu"}, ["mgs"] = {"Manda (Tanzania)"}, ["mgt"] = {"Mongol"}, ["mgu"] = {"Mailu"}, ["mgv"] = {"Matengo"}, ["mgw"] = {"Matumbi"}, ["mgy"] = {"Mbunga"}, ["mgz"] = {"Mbugwe"}, ["mha"] = {"Manda (India)"}, ["mhb"] = {"Mahongwe"}, ["mhc"] = {"Mocho"}, ["mhd"] = {"Mbugu"}, ["mhe"] = {"Besisi", "Mah Meri"}, ["mhf"] = {"Mamaa"}, ["mhg"] = {"Margu"}, ["mhi"] = {"Ma'di"}, ["mhj"] = {"Mogholi"}, ["mhk"] = {"Mungaka"}, ["mhl"] = {"Mauwake"}, ["mhm"] = {"Makhuwa-Moniga"}, ["mhn"] = {"Mòcheno"}, ["mho"] = {"Mashi (Zambia)"}, ["mhp"] = {"Balinese Malay"}, ["mhq"] = {"Mandan"}, ["mhr"] = {"Eastern Mari"}, ["mhs"] = {"Buru (Indonesia)"}, ["mht"] = {"Mandahuaca"}, ["mhu"] = {"Digaro-Mishmi", "Darang Deng"}, ["mhw"] = {"Mbukushu"}, ["mhx"] = {"Maru", "Lhaovo"}, ["mhy"] = {"Ma'anyan"}, ["mhz"] = {"Mor (Mor Islands)"}, ["mia"] = {"Miami"}, ["mib"] = {"Atatláhuca Mixtec"}, ["mic"] = {"Mi'kmaq", "Micmac"}, ["mid"] = {"Mandaic"}, ["mie"] = {"Ocotepec Mixtec"}, ["mif"] = {"Mofu-Gudur"}, ["mig"] = {"San Miguel El Grande Mixtec"}, ["mih"] = {"Chayuco Mixtec"}, ["mii"] = {"Chigmecatitlán Mixtec"}, ["mij"] = {"Abar", "Mungbam"}, ["mik"] = {"Mikasuki"}, ["mil"] = {"Peñoles Mixtec"}, ["mim"] = {"Alacatlatzala Mixtec"}, ["min"] = {"Minangkabau"}, ["mio"] = {"Pinotepa Nacional Mixtec"}, ["mip"] = {"Apasco-Apoala Mixtec"}, ["miq"] = {"Mískito"}, ["mir"] = {"Isthmus Mixe"}, ["mis"] = {"Uncoded languages"}, ["mit"] = {"Southern Puebla Mixtec"}, ["miu"] = {"Cacaloxtepec Mixtec"}, ["miw"] = {"Akoye"}, ["mix"] = {"Mixtepec Mixtec"}, ["miy"] = {"Ayutla Mixtec"}, ["miz"] = {"Coatzospan Mixtec"}, ["mjb"] = {"Makalero"}, ["mjc"] = {"San Juan Colorado Mixtec"}, ["mjd"] = {"Northwest Maidu"}, ["mje"] = {"Muskum"}, ["mjg"] = {"Tu"}, ["mjh"] = {"Mwera (Nyasa)"}, ["mji"] = {"Kim Mun"}, ["mjj"] = {"Mawak"}, ["mjk"] = {"Matukar"}, ["mjl"] = {"Mandeali"}, ["mjm"] = {"Medebur"}, ["mjn"] = {"Ma (Papua New Guinea)"}, ["mjo"] = {"Malankuravan"}, ["mjp"] = {"Malapandaram"}, ["mjq"] = {"Malaryan"}, ["mjr"] = {"Malavedan"}, ["mjs"] = {"Miship"}, ["mjt"] = {"Sauria Paharia"}, ["mju"] = {"Manna-Dora"}, ["mjv"] = {"Mannan"}, ["mjw"] = {"Karbi"}, ["mjx"] = {"Mahali"}, ["mjy"] = {"Mahican"}, ["mjz"] = {"Majhi"}, ["mka"] = {"Mbre"}, ["mkb"] = {"Mal Paharia"}, ["mkc"] = {"Siliput"}, ["mke"] = {"Mawchi"}, ["mkf"] = {"Miya"}, ["mkg"] = {"Mak (China)"}, ["mkh"] = {"Mon-Khmer languages"}, ["mki"] = {"Dhatki"}, ["mkj"] = {"Mokilese"}, ["mkk"] = {"Byep"}, ["mkl"] = {"Mokole"}, ["mkm"] = {"Moklen"}, ["mkn"] = {"Kupang Malay"}, ["mko"] = {"Mingang Doso"}, ["mkp"] = {"Moikodi"}, ["mkq"] = {"Bay Miwok"}, ["mkr"] = {"Malas"}, ["mks"] = {"Silacayoapan Mixtec"}, ["mkt"] = {"Vamale"}, ["mku"] = {"Konyanka Maninka"}, ["mkv"] = {"Mafea"}, ["mkw"] = {"Kituba (Congo)"}, ["mkx"] = {"Kinamiging Manobo"}, ["mky"] = {"East Makian"}, ["mkz"] = {"Makasae"}, ["mla"] = {"Malo"}, ["mlb"] = {"Mbule"}, ["mlc"] = {"Cao Lan"}, ["mle"] = {"Manambu"}, ["mlf"] = {"Mal"}, ["mlh"] = {"Mape"}, ["mli"] = {"Malimpung"}, ["mlj"] = {"Miltu"}, ["mlk"] = {"Ilwana", "Kiwilwana"}, ["mll"] = {"Malua Bay"}, ["mlm"] = {"Mulam"}, ["mln"] = {"Malango"}, ["mlo"] = {"Mlomp"}, ["mlp"] = {"Bargam"}, ["mlq"] = {"Western Maninkakan"}, ["mlr"] = {"Vame"}, ["mls"] = {"Masalit"}, ["mlu"] = {"To'abaita"}, ["mlv"] = {"Motlav", "Mwotlap"}, ["mlw"] = {"Moloko"}, ["mlx"] = {"Malfaxal", "Naha'ai"}, ["mlz"] = {"Malaynon"}, ["mma"] = {"Mama"}, ["mmb"] = {"Momina"}, ["mmc"] = {"Michoacán Mazahua"}, ["mmd"] = {"Maonan"}, ["mme"] = {"Mae"}, ["mmf"] = {"Mundat"}, ["mmg"] = {"North Ambrym"}, ["mmh"] = {"Mehináku"}, ["mmi"] = {"Hember Avu", "Amben", "Musar"}, ["mmj"] = {"Majhwar"}, ["mmk"] = {"Mukha-Dora"}, ["mml"] = {"Man Met"}, ["mmm"] = {"Maii"}, ["mmn"] = {"Mamanwa"}, ["mmo"] = {"Mangga Buang"}, ["mmp"] = {"Siawi"}, ["mmq"] = {"Musak"}, ["mmr"] = {"Western Xiangxi Miao"}, ["mmt"] = {"Malalamai"}, ["mmu"] = {"Mmaala"}, ["mmv"] = {"Miriti"}, ["mmw"] = {"Emae"}, ["mmx"] = {"Madak"}, ["mmy"] = {"Migaama"}, ["mmz"] = {"Mabaale"}, ["mna"] = {"Mbula"}, ["mnb"] = {"Muna"}, ["mnc"] = {"Manchu"}, ["mnd"] = {"Mondé"}, ["mne"] = {"Naba"}, ["mnf"] = {"Mundani"}, ["mng"] = {"Eastern Mnong"}, ["mnh"] = {"Mono (Democratic Republic of Congo)"}, ["mni"] = {"Manipuri"}, ["mnj"] = {"Munji"}, ["mnk"] = {"Mandinka"}, ["mnl"] = {"Tiale"}, ["mnm"] = {"Mapena"}, ["mnn"] = {"Southern Mnong"}, ["mno"] = {"Manobo languages"}, ["mnp"] = {"Min Bei Chinese"}, ["mnq"] = {"Minriq"}, ["mnr"] = {"Mono (USA)"}, ["mns"] = {"Mansi"}, ["mnu"] = {"Mer"}, ["mnv"] = {"Rennell-Bellona"}, ["mnw"] = {"Mon"}, ["mnx"] = {"Manikion"}, ["mny"] = {"Manyawa"}, ["mnz"] = {"Moni"}, ["moa"] = {"Mwan"}, ["moc"] = {"Mocoví"}, ["mod"] = {"Mobilian"}, ["moe"] = {"Innu", "Montagnais"}, ["mog"] = {"Mongondow"}, ["moh"] = {"Mohawk"}, ["moi"] = {"Mboi"}, ["moj"] = {"Monzombo"}, ["mok"] = {"Morori"}, ["mom"] = {"Mangue"}, ["moo"] = {"Monom"}, ["mop"] = {"Mopán Maya"}, ["moq"] = {"Mor (Bomberai Peninsula)"}, ["mor"] = {"Moro"}, ["mos"] = {"Mossi"}, ["mot"] = {"Barí"}, ["mou"] = {"Mogum"}, ["mov"] = {"Mohave"}, ["mow"] = {"Moi (Congo)"}, ["mox"] = {"Molima"}, ["moy"] = {"Shekkacho"}, ["moz"] = {"Mukulu", "Gergiko"}, ["mpa"] = {"Mpoto"}, ["mpb"] = {"Malak Malak", "Mullukmulluk"}, ["mpc"] = {"Mangarrayi"}, ["mpd"] = {"Machinere"}, ["mpe"] = {"Majang"}, ["mpg"] = {"Marba"}, ["mph"] = {"Maung"}, ["mpi"] = {"Mpade"}, ["mpj"] = {"Martu Wangka", "Wangkajunga"}, ["mpk"] = {"Mbara (Chad)"}, ["mpl"] = {"Middle Watut"}, ["mpm"] = {"Yosondúa Mixtec"}, ["mpn"] = {"Mindiri"}, ["mpo"] = {"Miu"}, ["mpp"] = {"Migabac"}, ["mpq"] = {"Matís"}, ["mpr"] = {"Vangunu"}, ["mps"] = {"Dadibi"}, ["mpt"] = {"Mian"}, ["mpu"] = {"Makuráp"}, ["mpv"] = {"Mungkip"}, ["mpw"] = {"Mapidian"}, ["mpx"] = {"Misima-Panaeati"}, ["mpy"] = {"Mapia"}, ["mpz"] = {"Mpi"}, ["mqa"] = {"Maba (Indonesia)"}, ["mqb"] = {"Mbuko"}, ["mqc"] = {"Mangole"}, ["mqe"] = {"Matepi"}, ["mqf"] = {"Momuna"}, ["mqg"] = {"Kota Bangun Kutai Malay"}, ["mqh"] = {"Tlazoyaltepec Mixtec"}, ["mqi"] = {"Mariri"}, ["mqj"] = {"Mamasa"}, ["mqk"] = {"Rajah Kabunsuwan Manobo"}, ["mql"] = {"Mbelime"}, ["mqm"] = {"South Marquesan"}, ["mqn"] = {"Moronene"}, ["mqo"] = {"Modole"}, ["mqp"] = {"Manipa"}, ["mqq"] = {"Minokok"}, ["mqr"] = {"Mander"}, ["mqs"] = {"West Makian"}, ["mqt"] = {"Mok"}, ["mqu"] = {"Mandari"}, ["mqv"] = {"Mosimo"}, ["mqw"] = {"Murupi"}, ["mqx"] = {"Mamuju"}, ["mqy"] = {"Manggarai"}, ["mqz"] = {"Pano"}, ["mra"] = {"Mlabri"}, ["mrb"] = {"Marino"}, ["mrc"] = {"Maricopa"}, ["mrd"] = {"Western Magar"}, ["mre"] = {"Martha's Vineyard Sign Language"}, ["mrf"] = {"Elseng"}, ["mrg"] = {"Mising"}, ["mrh"] = {"Mara Chin"}, ["mrj"] = {"Western Mari"}, ["mrk"] = {"Hmwaveke"}, ["mrl"] = {"Mortlockese"}, ["mrm"] = {"Merlav", "Mwerlap"}, ["mrn"] = {"Cheke Holo"}, ["mro"] = {"Mru"}, ["mrp"] = {"Morouas"}, ["mrq"] = {"North Marquesan"}, ["mrr"] = {"Maria (India)"}, ["mrs"] = {"Maragus"}, ["mrt"] = {"Marghi Central"}, ["mru"] = {"Mono (Cameroon)"}, ["mrv"] = {"Mangareva"}, ["mrw"] = {"Maranao"}, ["mrx"] = {"Maremgi", "Dineor"}, ["mry"] = {"Mandaya"}, ["mrz"] = {"Marind"}, ["msb"] = {"Masbatenyo"}, ["msc"] = {"Sankaran Maninka"}, ["msd"] = {"Yucatec Maya Sign Language"}, ["mse"] = {"Musey"}, ["msf"] = {"Mekwei"}, ["msg"] = {"Moraid"}, ["msh"] = {"Masikoro Malagasy"}, ["msi"] = {"Sabah Malay"}, ["msj"] = {"Ma (Democratic Republic of Congo)"}, ["msk"] = {"Mansaka"}, ["msl"] = {"Molof", "Poule"}, ["msm"] = {"Agusan Manobo"}, ["msn"] = {"Vurës"}, ["mso"] = {"Mombum"}, ["msp"] = {"Maritsauá"}, ["msq"] = {"Caac"}, ["msr"] = {"Mongolian Sign Language"}, ["mss"] = {"West Masela"}, ["msu"] = {"Musom"}, ["msv"] = {"Maslam"}, ["msw"] = {"Mansoanka"}, ["msx"] = {"Moresada"}, ["msy"] = {"Aruamu"}, ["msz"] = {"Momare"}, ["mta"] = {"Cotabato Manobo"}, ["mtb"] = {"Anyin Morofo"}, ["mtc"] = {"Munit"}, ["mtd"] = {"Mualang"}, ["mte"] = {"Mono (Solomon Islands)"}, ["mtf"] = {"Murik (Papua New Guinea)"}, ["mtg"] = {"Una"}, ["mth"] = {"Munggui"}, ["mti"] = {"Maiwa (Papua New Guinea)"}, ["mtj"] = {"Moskona"}, ["mtk"] = {"Mbe'"}, ["mtl"] = {"Montol"}, ["mtm"] = {"Mator"}, ["mtn"] = {"Matagalpa"}, ["mto"] = {"Totontepec Mixe"}, ["mtp"] = {"Wichí Lhamtés Nocten"}, ["mtq"] = {"Muong"}, ["mtr"] = {"Mewari"}, ["mts"] = {"Yora"}, ["mtt"] = {"Mota"}, ["mtu"] = {"Tututepec Mixtec"}, ["mtv"] = {"Asaro'o"}, ["mtw"] = {"Southern Binukidnon"}, ["mtx"] = {"Tidaá Mixtec"}, ["mty"] = {"Nabi"}, ["mua"] = {"Mundang"}, ["mub"] = {"Mubi"}, ["muc"] = {"Ajumbu"}, ["mud"] = {"Mednyj Aleut"}, ["mue"] = {"Media Lengua"}, ["mug"] = {"Musgu"}, ["muh"] = {"Mündü"}, ["mui"] = {"Musi"}, ["muj"] = {"Mabire"}, ["muk"] = {"Mugom"}, ["mul"] = {"Multiple languages"}, ["mum"] = {"Maiwala"}, ["mun"] = {"Munda languages"}, ["muo"] = {"Nyong"}, ["mup"] = {"Malvi"}, ["muq"] = {"Eastern Xiangxi Miao"}, ["mur"] = {"Murle"}, ["mus"] = {"Creek"}, ["mut"] = {"Western Muria"}, ["muu"] = {"Yaaku"}, ["muv"] = {"Muthuvan"}, ["mux"] = {"Bo-Ung"}, ["muy"] = {"Muyang"}, ["muz"] = {"Mursi"}, ["mva"] = {"Manam"}, ["mvb"] = {"Mattole"}, ["mvd"] = {"Mamboru"}, ["mve"] = {"Marwari (Pakistan)"}, ["mvf"] = {"Peripheral Mongolian"}, ["mvg"] = {"Yucuañe Mixtec"}, ["mvh"] = {"Mulgi"}, ["mvi"] = {"Miyako"}, ["mvk"] = {"Mekmek"}, ["mvl"] = {"Mbara (Australia)"}, ["mvn"] = {"Minaveha"}, ["mvo"] = {"Marovo"}, ["mvp"] = {"Duri"}, ["mvq"] = {"Moere"}, ["mvr"] = {"Marau"}, ["mvs"] = {"Massep"}, ["mvt"] = {"Mpotovoro"}, ["mvu"] = {"Marfa"}, ["mvv"] = {"Tagal Murut"}, ["mvw"] = {"Machinga"}, ["mvx"] = {"Meoswar"}, ["mvy"] = {"Indus Kohistani"}, ["mvz"] = {"Mesqan"}, ["mwa"] = {"Mwatebu"}, ["mwb"] = {"Juwal"}, ["mwc"] = {"Are"}, ["mwe"] = {"Mwera (Chimwera)"}, ["mwf"] = {"Murrinh-Patha"}, ["mwg"] = {"Aiklep"}, ["mwh"] = {"Mouk-Aria"}, ["mwi"] = {"Labo", "Ninde"}, ["mwk"] = {"Kita Maninkakan"}, ["mwl"] = {"Mirandese"}, ["mwm"] = {"Sar"}, ["mwn"] = {"Nyamwanga"}, ["mwo"] = {"Central Maewo"}, ["mwp"] = {"Kala Lagaw Ya"}, ["mwq"] = {"Mün Chin"}, ["mwr"] = {"Marwari"}, ["mws"] = {"Mwimbi-Muthambi"}, ["mwt"] = {"Moken"}, ["mwu"] = {"Mittu"}, ["mwv"] = {"Mentawai"}, ["mww"] = {"Hmong Daw"}, ["mwz"] = {"Moingi"}, ["mxa"] = {"Northwest Oaxaca Mixtec"}, ["mxb"] = {"Tezoatlán Mixtec"}, ["mxc"] = {"Manyika"}, ["mxd"] = {"Modang"}, ["mxe"] = {"Mele-Fila"}, ["mxf"] = {"Malgbe"}, ["mxg"] = {"Mbangala"}, ["mxh"] = {"Mvuba"}, ["mxi"] = {"Mozarabic"}, ["mxj"] = {"Miju-Mishmi", "Geman Deng"}, ["mxk"] = {"Monumbo"}, ["mxl"] = {"Maxi Gbe"}, ["mxm"] = {"Meramera"}, ["mxn"] = {"Moi (Indonesia)"}, ["mxo"] = {"Mbowe"}, ["mxp"] = {"Tlahuitoltepec Mixe"}, ["mxq"] = {"Juquila Mixe"}, ["mxr"] = {"Murik (Malaysia)"}, ["mxs"] = {"Huitepec Mixtec"}, ["mxt"] = {"Jamiltepec Mixtec"}, ["mxu"] = {"Mada (Cameroon)"}, ["mxv"] = {"Metlatónoc Mixtec"}, ["mxw"] = {"Namo"}, ["mxx"] = {"Mahou", "Mawukakan"}, ["mxy"] = {"Southeastern Nochixtlán Mixtec"}, ["mxz"] = {"Central Masela"}, ["myb"] = {"Mbay"}, ["myc"] = {"Mayeka"}, ["mye"] = {"Myene"}, ["myf"] = {"Bambassi"}, ["myg"] = {"Manta"}, ["myh"] = {"Makah"}, ["myj"] = {"Mangayat"}, ["myk"] = {"Mamara Senoufo"}, ["myl"] = {"Moma"}, ["mym"] = {"Me'en"}, ["myn"] = {"Mayan languages"}, ["myo"] = {"Anfillo"}, ["myp"] = {"Pirahã"}, ["myr"] = {"Muniche"}, ["mys"] = {"Mesmes"}, ["myu"] = {"Mundurukú"}, ["myv"] = {"Erzya"}, ["myw"] = {"Muyuw"}, ["myx"] = {"Masaaba"}, ["myy"] = {"Macuna"}, ["myz"] = {"Classical Mandaic"}, ["mza"] = {"Santa María Zacatepec Mixtec"}, ["mzb"] = {"Tumzabt"}, ["mzc"] = {"Madagascar Sign Language"}, ["mzd"] = {"Malimba"}, ["mze"] = {"Morawa"}, ["mzg"] = {"Monastic Sign Language"}, ["mzh"] = {"Wichí Lhamtés Güisnay"}, ["mzi"] = {"Ixcatlán Mazatec"}, ["mzj"] = {"Manya"}, ["mzk"] = {"Nigeria Mambila"}, ["mzl"] = {"Mazatlán Mixe"}, ["mzm"] = {"Mumuye"}, ["mzn"] = {"Mazanderani"}, ["mzo"] = {"Matipuhy"}, ["mzp"] = {"Movima"}, ["mzq"] = {"Mori Atas"}, ["mzr"] = {"Marúbo"}, ["mzs"] = {"Macanese"}, ["mzt"] = {"Mintil"}, ["mzu"] = {"Inapang"}, ["mzv"] = {"Manza"}, ["mzw"] = {"Deg"}, ["mzx"] = {"Mawayana"}, ["mzy"] = {"Mozambican Sign Language"}, ["mzz"] = {"Maiadomu"}, ["naa"] = {"Namla"}, ["nab"] = {"Southern Nambikuára"}, ["nac"] = {"Narak"}, ["nae"] = {"Naka'ela"}, ["naf"] = {"Nabak"}, ["nag"] = {"Naga Pidgin"}, ["nah"] = {"Nahuatl languages"}, ["nai"] = {"North American Indian languages"}, ["naj"] = {"Nalu"}, ["nak"] = {"Nakanai"}, ["nal"] = {"Nalik"}, ["nam"] = {"Ngan'gityemerri"}, ["nan"] = {"Min Nan Chinese"}, ["nao"] = {"Naaba"}, ["nap"] = {"Neapolitan"}, ["naq"] = {"Khoekhoe", "Nama (Namibia)"}, ["nar"] = {"Iguta"}, ["nas"] = {"Naasioi"}, ["nat"] = {"Ca̱hungwa̱rya̱", "Hungworo"}, ["naw"] = {"Nawuri"}, ["nax"] = {"Nakwi"}, ["nay"] = {"Ngarrindjeri"}, ["naz"] = {"Coatepec Nahuatl"}, ["nba"] = {"Nyemba"}, ["nbb"] = {"Ndoe"}, ["nbc"] = {"Chang Naga"}, ["nbd"] = {"Ngbinda"}, ["nbe"] = {"Konyak Naga"}, ["nbg"] = {"Nagarchal"}, ["nbh"] = {"Ngamo"}, ["nbi"] = {"Mao Naga"}, ["nbj"] = {"Ngarinyman"}, ["nbk"] = {"Nake"}, ["nbm"] = {"Ngbaka Ma'bo"}, ["nbn"] = {"Kuri"}, ["nbo"] = {"Nkukoli"}, ["nbp"] = {"Nnam"}, ["nbq"] = {"Nggem"}, ["nbr"] = {"Numana"}, ["nbs"] = {"Namibian Sign Language"}, ["nbt"] = {"Na"}, ["nbu"] = {"Rongmei Naga"}, ["nbv"] = {"Ngamambo"}, ["nbw"] = {"Southern Ngbandi"}, ["nby"] = {"Ningera"}, ["nca"] = {"Iyo"}, ["ncb"] = {"Central Nicobarese"}, ["ncc"] = {"Ponam"}, ["ncd"] = {"Nachering"}, ["nce"] = {"Yale"}, ["ncf"] = {"Notsi"}, ["ncg"] = {"Nisga'a"}, ["nch"] = {"Central Huasteca Nahuatl"}, ["nci"] = {"Classical Nahuatl"}, ["ncj"] = {"Northern Puebla Nahuatl"}, ["nck"] = {"Na-kara"}, ["ncl"] = {"Michoacán Nahuatl"}, ["ncm"] = {"Nambo"}, ["ncn"] = {"Nauna"}, ["nco"] = {"Sibe"}, ["ncq"] = {"Northern Katang"}, ["ncr"] = {"Ncane"}, ["ncs"] = {"Nicaraguan Sign Language"}, ["nct"] = {"Chothe Naga"}, ["ncu"] = {"Chumburung"}, ["ncx"] = {"Central Puebla Nahuatl"}, ["ncz"] = {"Natchez"}, ["nda"] = {"Ndasa"}, ["ndb"] = {"Kenswei Nsei"}, ["ndc"] = {"Ndau"}, ["ndd"] = {"Nde-Nsele-Nta"}, ["ndf"] = {"Nadruvian"}, ["ndg"] = {"Ndengereko"}, ["ndh"] = {"Ndali"}, ["ndi"] = {"Samba Leko"}, ["ndj"] = {"Ndamba"}, ["ndk"] = {"Ndaka"}, ["ndl"] = {"Ndolo"}, ["ndm"] = {"Ndam"}, ["ndn"] = {"Ngundi"}, ["ndp"] = {"Ndo"}, ["ndq"] = {"Ndombe"}, ["ndr"] = {"Ndoola"}, ["nds"] = {"Low German", "Low Saxon"}, ["ndt"] = {"Ndunga"}, ["ndu"] = {"Dugun"}, ["ndv"] = {"Ndut"}, ["ndw"] = {"Ndobo"}, ["ndx"] = {"Nduga"}, ["ndy"] = {"Lutos"}, ["ndz"] = {"Ndogo"}, ["nea"] = {"Eastern Ngad'a"}, ["neb"] = {"Toura (Côte d'Ivoire)"}, ["nec"] = {"Nedebang"}, ["ned"] = {"Nde-Gbite"}, ["nee"] = {"Nêlêmwa-Nixumwak"}, ["nef"] = {"Nefamese"}, ["neg"] = {"Negidal"}, ["neh"] = {"Nyenkha"}, ["nei"] = {"Neo-Hittite"}, ["nej"] = {"Neko"}, ["nek"] = {"Neku"}, ["nem"] = {"Nemi"}, ["nen"] = {"Nengone"}, ["neo"] = {"Ná-Meo"}, ["neq"] = {"North Central Mixe"}, ["ner"] = {"Yahadian"}, ["nes"] = {"Bhoti Kinnauri"}, ["net"] = {"Nete"}, ["neu"] = {"Neo"}, ["nev"] = {"Nyaheun"}, ["new"] = {"Nepal Bhasa", "Newar", "Newari"}, ["nex"] = {"Neme"}, ["ney"] = {"Neyo"}, ["nez"] = {"Nez Perce"}, ["nfa"] = {"Dhao"}, ["nfd"] = {"Ahwai"}, ["nfl"] = {"Ayiwo", "Äiwoo"}, ["nfr"] = {"Nafaanra"}, ["nfu"] = {"Mfumte"}, ["nga"] = {"Ngbaka"}, ["ngb"] = {"Northern Ngbandi"}, ["ngc"] = {"Ngombe (Democratic Republic of Congo)"}, ["ngd"] = {"Ngando (Central African Republic)"}, ["nge"] = {"Ngemba"}, ["ngf"] = {"Trans-New Guinea languages"}, ["ngg"] = {"Ngbaka Manza"}, ["ngh"] = {"Nǁng"}, ["ngi"] = {"Ngizim"}, ["ngj"] = {"Ngie"}, ["ngk"] = {"Dalabon"}, ["ngl"] = {"Lomwe"}, ["ngm"] = {"Ngatik Men's Creole"}, ["ngn"] = {"Ngwo"}, ["ngp"] = {"Ngulu"}, ["ngq"] = {"Ngurimi", "Ngoreme"}, ["ngr"] = {"Engdewu"}, ["ngs"] = {"Gvoko"}, ["ngt"] = {"Kriang", "Ngeq"}, ["ngu"] = {"Guerrero Nahuatl"}, ["ngv"] = {"Nagumi"}, ["ngw"] = {"Ngwaba"}, ["ngx"] = {"Nggwahyi"}, ["ngy"] = {"Tibea"}, ["ngz"] = {"Ngungwel"}, ["nha"] = {"Nhanda"}, ["nhb"] = {"Beng"}, ["nhc"] = {"Tabasco Nahuatl"}, ["nhd"] = {"Chiripá", "Ava Guaraní"}, ["nhe"] = {"Eastern Huasteca Nahuatl"}, ["nhf"] = {"Nhuwala"}, ["nhg"] = {"Tetelcingo Nahuatl"}, ["nhh"] = {"Nahari"}, ["nhi"] = {"Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"}, ["nhk"] = {"Isthmus-Cosoleacaque Nahuatl"}, ["nhm"] = {"Morelos Nahuatl"}, ["nhn"] = {"Central Nahuatl"}, ["nho"] = {"Takuu"}, ["nhp"] = {"Isthmus-Pajapan Nahuatl"}, ["nhq"] = {"Huaxcaleca Nahuatl"}, ["nhr"] = {"Naro"}, ["nht"] = {"Ometepec Nahuatl"}, ["nhu"] = {"Noone"}, ["nhv"] = {"Temascaltepec Nahuatl"}, ["nhw"] = {"Western Huasteca Nahuatl"}, ["nhx"] = {"Isthmus-Mecayapan Nahuatl"}, ["nhy"] = {"Northern Oaxaca Nahuatl"}, ["nhz"] = {"Santa María La Alta Nahuatl"}, ["nia"] = {"Nias"}, ["nib"] = {"Nakame"}, ["nic"] = {"Niger-Kordofanian languages"}, ["nid"] = {"Ngandi"}, ["nie"] = {"Niellim"}, ["nif"] = {"Nek"}, ["nig"] = {"Ngalakgan"}, ["nih"] = {"Nyiha (Tanzania)"}, ["nii"] = {"Nii"}, ["nij"] = {"Ngaju"}, ["nik"] = {"Southern Nicobarese"}, ["nil"] = {"Nila"}, ["nim"] = {"Nilamba"}, ["nin"] = {"Ninzo"}, ["nio"] = {"Nganasan"}, ["niq"] = {"Nandi"}, ["nir"] = {"Nimboran"}, ["nis"] = {"Nimi"}, ["nit"] = {"Southeastern Kolami"}, ["niu"] = {"Niuean"}, ["niv"] = {"Gilyak"}, ["niw"] = {"Nimo"}, ["nix"] = {"Hema"}, ["niy"] = {"Ngiti"}, ["niz"] = {"Ningil"}, ["nja"] = {"Nzanyi"}, ["njb"] = {"Nocte Naga"}, ["njd"] = {"Ndonde Hamba"}, ["njh"] = {"Lotha Naga"}, ["nji"] = {"Gudanji"}, ["njj"] = {"Njen"}, ["njl"] = {"Njalgulgule"}, ["njm"] = {"Angami Naga"}, ["njn"] = {"Liangmai Naga"}, ["njo"] = {"Ao Naga"}, ["njr"] = {"Njerep"}, ["njs"] = {"Nisa"}, ["njt"] = {"Ndyuka-Trio Pidgin"}, ["nju"] = {"Ngadjunmaya"}, ["njx"] = {"Kunyi"}, ["njy"] = {"Njyem"}, ["njz"] = {"Nyishi"}, ["nka"] = {"Nkoya"}, ["nkb"] = {"Khoibu Naga"}, ["nkc"] = {"Nkongho"}, ["nkd"] = {"Koireng"}, ["nke"] = {"Duke"}, ["nkf"] = {"Inpui Naga"}, ["nkg"] = {"Nekgini"}, ["nkh"] = {"Khezha Naga"}, ["nki"] = {"Thangal Naga"}, ["nkj"] = {"Nakai"}, ["nkk"] = {"Nokuku"}, ["nkm"] = {"Namat"}, ["nkn"] = {"Nkangala"}, ["nko"] = {"Nkonya"}, ["nkp"] = {"Niuatoputapu"}, ["nkq"] = {"Nkami"}, ["nkr"] = {"Nukuoro"}, ["nks"] = {"North Asmat"}, ["nkt"] = {"Nyika (Tanzania)"}, ["nku"] = {"Bouna Kulango"}, ["nkv"] = {"Nyika (Malawi and Zambia)"}, ["nkw"] = {"Nkutu"}, ["nkx"] = {"Nkoroo"}, ["nkz"] = {"Nkari"}, ["nla"] = {"Ngombale"}, ["nlc"] = {"Nalca"}, ["nle"] = {"East Nyala"}, ["nlg"] = {"Gela"}, ["nli"] = {"Grangali"}, ["nlj"] = {"Nyali"}, ["nlk"] = {"Ninia Yali"}, ["nll"] = {"Nihali"}, ["nlm"] = {"Mankiyali"}, ["nlo"] = {"Ngul"}, ["nlq"] = {"Lao Naga"}, ["nlu"] = {"Nchumbulu"}, ["nlv"] = {"Orizaba Nahuatl"}, ["nlw"] = {"Walangama"}, ["nlx"] = {"Nahali"}, ["nly"] = {"Nyamal"}, ["nlz"] = {"Nalögo"}, ["nma"] = {"Maram Naga"}, ["nmb"] = {"Big Nambas", "V'ënen Taut"}, ["nmc"] = {"Ngam"}, ["nmd"] = {"Ndumu"}, ["nme"] = {"Mzieme Naga"}, ["nmf"] = {"Tangkhul Naga (India)"}, ["nmg"] = {"Kwasio"}, ["nmh"] = {"Monsang Naga"}, ["nmi"] = {"Nyam"}, ["nmj"] = {"Ngombe (Central African Republic)"}, ["nmk"] = {"Namakura"}, ["nml"] = {"Ndemli"}, ["nmm"] = {"Manangba"}, ["nmn"] = {"ǃXóõ"}, ["nmo"] = {"Moyon Naga"}, ["nmp"] = {"Nimanbur"}, ["nmq"] = {"Nambya"}, ["nmr"] = {"Nimbari"}, ["nms"] = {"Letemboi"}, ["nmt"] = {"Namonuito"}, ["nmu"] = {"Northeast Maidu"}, ["nmv"] = {"Ngamini"}, ["nmw"] = {"Nimoa", "Rifao"}, ["nmx"] = {"Nama (Papua New Guinea)"}, ["nmy"] = {"Namuyi"}, ["nmz"] = {"Nawdm"}, ["nna"] = {"Nyangumarta"}, ["nnb"] = {"Nande"}, ["nnc"] = {"Nancere"}, ["nnd"] = {"West Ambae"}, ["nne"] = {"Ngandyera"}, ["nnf"] = {"Ngaing"}, ["nng"] = {"Maring Naga"}, ["nnh"] = {"Ngiemboon"}, ["nni"] = {"North Nuaulu"}, ["nnj"] = {"Nyangatom"}, ["nnk"] = {"Nankina"}, ["nnl"] = {"Northern Rengma Naga"}, ["nnm"] = {"Namia"}, ["nnn"] = {"Ngete"}, ["nnp"] = {"Wancho Naga"}, ["nnq"] = {"Ngindo"}, ["nnr"] = {"Narungga"}, ["nnt"] = {"Nanticoke"}, ["nnu"] = {"Dwang"}, ["nnv"] = {"Nugunu (Australia)"}, ["nnw"] = {"Southern Nuni"}, ["nny"] = {"Nyangga"}, ["nnz"] = {"Nda'nda'"}, ["noa"] = {"Woun Meu"}, ["noc"] = {"Nuk"}, ["nod"] = {"Northern Thai"}, ["noe"] = {"Nimadi"}, ["nof"] = {"Nomane"}, ["nog"] = {"Nogai"}, ["noh"] = {"Nomu"}, ["noi"] = {"Noiri"}, ["noj"] = {"Nonuya"}, ["nok"] = {"Nooksack"}, ["nol"] = {"Nomlaki"}, ["non"] = {"Old Norse"}, ["nop"] = {"Numanggang"}, ["noq"] = {"Ngongo"}, ["nos"] = {"Eastern Nisu"}, ["not"] = {"Nomatsiguenga"}, ["nou"] = {"Ewage-Notu"}, ["nov"] = {"Novial"}, ["now"] = {"Nyambo"}, ["noy"] = {"Noy"}, ["noz"] = {"Nayi"}, ["npa"] = {"Nar Phu"}, ["npb"] = {"Nupbikha"}, ["npg"] = {"Ponyo-Gongwang Naga"}, ["nph"] = {"Phom Naga"}, ["npi"] = {"Nepali (individual language)"}, ["npl"] = {"Southeastern Puebla Nahuatl"}, ["npn"] = {"Mondropolon"}, ["npo"] = {"Pochuri Naga"}, ["nps"] = {"Nipsan"}, ["npu"] = {"Puimei Naga"}, ["npx"] = {"Noipx"}, ["npy"] = {"Napu"}, ["nqg"] = {"Southern Nago"}, ["nqk"] = {"Kura Ede Nago"}, ["nql"] = {"Ngendelengo"}, ["nqm"] = {"Ndom"}, ["nqn"] = {"Nen"}, ["nqo"] = {"N'Ko", "N’Ko"}, ["nqq"] = {"Kyan-Karyaw Naga"}, ["nqt"] = {"Nteng"}, ["nqy"] = {"Akyaung Ari Naga"}, ["nra"] = {"Ngom"}, ["nrb"] = {"Nara"}, ["nrc"] = {"Noric"}, ["nre"] = {"Southern Rengma Naga"}, ["nrf"] = {"Jèrriais", "Guernésiais", "Sercquiais"}, ["nrg"] = {"Narango"}, ["nri"] = {"Chokri Naga"}, ["nrk"] = {"Ngarla"}, ["nrl"] = {"Ngarluma"}, ["nrm"] = {"Narom"}, ["nrn"] = {"Norn"}, ["nrp"] = {"North Picene"}, ["nrr"] = {"Norra", "Nora"}, ["nrt"] = {"Northern Kalapuya"}, ["nru"] = {"Narua"}, ["nrx"] = {"Ngurmbur"}, ["nrz"] = {"Lala"}, ["nsa"] = {"Sangtam Naga"}, ["nsb"] = {"Lower Nossob"}, ["nsc"] = {"Nshi"}, ["nsd"] = {"Southern Nisu"}, ["nse"] = {"Nsenga"}, ["nsf"] = {"Northwestern Nisu"}, ["nsg"] = {"Ngasa"}, ["nsh"] = {"Ngoshie"}, ["nsi"] = {"Nigerian Sign Language"}, ["nsk"] = {"Naskapi"}, ["nsl"] = {"Norwegian Sign Language"}, ["nsm"] = {"Sumi Naga"}, ["nsn"] = {"Nehan"}, ["nso"] = {"Pedi", "Northern Sotho", "Sepedi"}, ["nsp"] = {"Nepalese Sign Language"}, ["nsq"] = {"Northern Sierra Miwok"}, ["nsr"] = {"Maritime Sign Language"}, ["nss"] = {"Nali"}, ["nst"] = {"Tase Naga"}, ["nsu"] = {"Sierra Negra Nahuatl"}, ["nsv"] = {"Southwestern Nisu"}, ["nsw"] = {"Navut"}, ["nsx"] = {"Nsongo"}, ["nsy"] = {"Nasal"}, ["nsz"] = {"Nisenan"}, ["ntd"] = {"Northern Tidung"}, ["ntg"] = {"Ngantangarra"}, ["nti"] = {"Natioro"}, ["ntj"] = {"Ngaanyatjarra"}, ["ntk"] = {"Ikoma-Nata-Isenye"}, ["ntm"] = {"Nateni"}, ["nto"] = {"Ntomba"}, ["ntp"] = {"Northern Tepehuan"}, ["ntr"] = {"Delo"}, ["ntu"] = {"Natügu"}, ["ntw"] = {"Nottoway"}, ["ntx"] = {"Tangkhul Naga (Myanmar)"}, ["nty"] = {"Mantsi"}, ["ntz"] = {"Natanzi"}, ["nua"] = {"Yuanga"}, ["nub"] = {"Nubian languages"}, ["nuc"] = {"Nukuini"}, ["nud"] = {"Ngala"}, ["nue"] = {"Ngundu"}, ["nuf"] = {"Nusu"}, ["nug"] = {"Nungali"}, ["nuh"] = {"Ndunda"}, ["nui"] = {"Ngumbi"}, ["nuj"] = {"Nyole"}, ["nuk"] = {"Nuu-chah-nulth", "Nuuchahnulth"}, ["nul"] = {"Nusa Laut"}, ["num"] = {"Niuafo'ou"}, ["nun"] = {"Anong"}, ["nuo"] = {"Nguôn"}, ["nup"] = {"Nupe-Nupe-Tako"}, ["nuq"] = {"Nukumanu"}, ["nur"] = {"Nukuria"}, ["nus"] = {"Nuer"}, ["nut"] = {"Nung (Viet Nam)"}, ["nuu"] = {"Ngbundu"}, ["nuv"] = {"Northern Nuni"}, ["nuw"] = {"Nguluwan"}, ["nux"] = {"Mehek"}, ["nuy"] = {"Nunggubuyu"}, ["nuz"] = {"Tlamacazapa Nahuatl"}, ["nvh"] = {"Nasarian"}, ["nvm"] = {"Namiae"}, ["nvo"] = {"Nyokon"}, ["nwa"] = {"Nawathinehena"}, ["nwb"] = {"Nyabwa"}, ["nwc"] = {"Classical Newari", "Classical Nepal Bhasa", "Old Newari"}, ["nwe"] = {"Ngwe"}, ["nwg"] = {"Ngayawung"}, ["nwi"] = {"Southwest Tanna"}, ["nwm"] = {"Nyamusa-Molo"}, ["nwo"] = {"Nauo"}, ["nwr"] = {"Nawaru"}, ["nww"] = {"Ndwewe"}, ["nwx"] = {"Middle Newar"}, ["nwy"] = {"Nottoway-Meherrin"}, ["nxa"] = {"Nauete"}, ["nxd"] = {"Ngando (Democratic Republic of Congo)"}, ["nxe"] = {"Nage"}, ["nxg"] = {"Ngad'a"}, ["nxi"] = {"Nindi"}, ["nxk"] = {"Koki Naga"}, ["nxl"] = {"South Nuaulu"}, ["nxm"] = {"Numidian"}, ["nxn"] = {"Ngawun"}, ["nxo"] = {"Ndambomo"}, ["nxq"] = {"Naxi"}, ["nxr"] = {"Ninggerum"}, ["nxx"] = {"Nafri"}, ["nyb"] = {"Nyangbo"}, ["nyc"] = {"Nyanga-li"}, ["nyd"] = {"Nyore", "Olunyole"}, ["nye"] = {"Nyengo"}, ["nyf"] = {"Giryama", "Kigiryama"}, ["nyg"] = {"Nyindu"}, ["nyh"] = {"Nyikina"}, ["nyi"] = {"Ama (Sudan)"}, ["nyj"] = {"Nyanga"}, ["nyk"] = {"Nyaneka"}, ["nyl"] = {"Nyeu"}, ["nym"] = {"Nyamwezi"}, ["nyn"] = {"Nyankole"}, ["nyo"] = {"Nyoro"}, ["nyp"] = {"Nyang'i"}, ["nyq"] = {"Nayini"}, ["nyr"] = {"Nyiha (Malawi)"}, ["nys"] = {"Nyungar"}, ["nyt"] = {"Nyawaygi"}, ["nyu"] = {"Nyungwe"}, ["nyv"] = {"Nyulnyul"}, ["nyw"] = {"Nyaw"}, ["nyx"] = {"Nganyaywana"}, ["nyy"] = {"Nyakyusa-Ngonde"}, ["nza"] = {"Tigon Mbembe"}, ["nzb"] = {"Njebi"}, ["nzd"] = {"Nzadi"}, ["nzi"] = {"Nzima"}, ["nzk"] = {"Nzakara"}, ["nzm"] = {"Zeme Naga"}, ["nzr"] = {"Dir-Nyamzak-Mbarimi"}, ["nzs"] = {"New Zealand Sign Language"}, ["nzu"] = {"Teke-Nzikou"}, ["nzy"] = {"Nzakambay"}, ["nzz"] = {"Nanga Dama Dogon"}, ["oaa"] = {"Orok"}, ["oac"] = {"Oroch"}, ["oak"] = {"Noakhali", "Noakhailla"}, ["oar"] = {"Old Aramaic (up to 700 BCE)", "Ancient Aramaic (up to 700 BCE)"}, ["oav"] = {"Old Avar"}, ["obi"] = {"Obispeño"}, ["obk"] = {"Southern Bontok"}, ["obl"] = {"Oblo"}, ["obm"] = {"Moabite"}, ["obo"] = {"Obo Manobo"}, ["obr"] = {"Old Burmese"}, ["obt"] = {"Old Breton"}, ["obu"] = {"Obulom"}, ["oca"] = {"Ocaina"}, ["och"] = {"Old Chinese"}, ["ocm"] = {"Old Cham"}, ["oco"] = {"Old Cornish"}, ["ocu"] = {"Atzingo Matlatzinca"}, ["oda"] = {"Odut"}, ["odk"] = {"Od"}, ["odt"] = {"Old Dutch"}, ["odu"] = {"Odual"}, ["ofo"] = {"Ofo"}, ["ofs"] = {"Old Frisian"}, ["ofu"] = {"Efutop"}, ["ogb"] = {"Ogbia"}, ["ogc"] = {"Ogbah"}, ["oge"] = {"Old Georgian"}, ["ogg"] = {"Ogbogolo"}, ["ogo"] = {"Khana"}, ["ogu"] = {"Ogbronuagum"}, ["oht"] = {"Old Hittite"}, ["ohu"] = {"Old Hungarian"}, ["oia"] = {"Oirata"}, ["oie"] = {"Okolie"}, ["oin"] = {"Inebu One"}, ["ojb"] = {"Northwestern Ojibwa"}, ["ojc"] = {"Central Ojibwa"}, ["ojg"] = {"Eastern Ojibwa"}, ["ojp"] = {"Old Japanese"}, ["ojs"] = {"Severn Ojibwa"}, ["ojv"] = {"Ontong Java"}, ["ojw"] = {"Western Ojibwa"}, ["oka"] = {"Okanagan"}, ["okb"] = {"Okobo"}, ["okc"] = {"Kobo"}, ["okd"] = {"Okodia"}, ["oke"] = {"Okpe (Southwestern Edo)"}, ["okg"] = {"Koko Babangk"}, ["okh"] = {"Koresh-e Rostam"}, ["oki"] = {"Okiek"}, ["okj"] = {"Oko-Juwoi"}, ["okk"] = {"Kwamtim One"}, ["okl"] = {"Old Kentish Sign Language"}, ["okm"] = {"Middle Korean (10th-16th cent.)"}, ["okn"] = {"Oki-No-Erabu"}, ["oko"] = {"Old Korean (3rd-9th cent.)"}, ["okr"] = {"Kirike"}, ["oks"] = {"Oko-Eni-Osayen"}, ["oku"] = {"Oku"}, ["okv"] = {"Orokaiva"}, ["okx"] = {"Okpe (Northwestern Edo)"}, ["okz"] = {"Old Khmer"}, ["ola"] = {"Walungge"}, ["olb"] = {"Oli-Bodiman"}, ["old"] = {"Mochi"}, ["ole"] = {"Olekha"}, ["olk"] = {"Olkol"}, ["olm"] = {"Oloma"}, ["olo"] = {"Livvi"}, ["olr"] = {"Olrat"}, ["olt"] = {"Old Lithuanian"}, ["olu"] = {"Kuvale"}, ["oma"] = {"Omaha-Ponca"}, ["omb"] = {"East Ambae"}, ["omc"] = {"Mochica"}, ["omg"] = {"Omagua"}, ["omi"] = {"Omi"}, ["omk"] = {"Omok"}, ["oml"] = {"Ombo"}, ["omn"] = {"Minoan"}, ["omo"] = {"Utarmbung"}, ["omp"] = {"Old Manipuri"}, ["omq"] = {"Oto-Manguean languages"}, ["omr"] = {"Old Marathi"}, ["omt"] = {"Omotik"}, ["omu"] = {"Omurano"}, ["omv"] = {"Omotic languages"}, ["omw"] = {"South Tairora"}, ["omx"] = {"Old Mon"}, ["omy"] = {"Old Malay"}, ["ona"] = {"Ona"}, ["onb"] = {"Lingao"}, ["one"] = {"Oneida"}, ["ong"] = {"Olo"}, ["oni"] = {"Onin"}, ["onj"] = {"Onjob"}, ["onk"] = {"Kabore One"}, ["onn"] = {"Onobasulu"}, ["ono"] = {"Onondaga"}, ["onp"] = {"Sartang"}, ["onr"] = {"Northern One"}, ["ons"] = {"Ono"}, ["ont"] = {"Ontenu"}, ["onu"] = {"Unua"}, ["onw"] = {"Old Nubian"}, ["onx"] = {"Onin Based Pidgin"}, ["ood"] = {"Tohono O'odham"}, ["oog"] = {"Ong"}, ["oon"] = {"Önge"}, ["oor"] = {"Oorlams"}, ["oos"] = {"Old Ossetic"}, ["opa"] = {"Okpamheri"}, ["opk"] = {"Kopkaka"}, ["opm"] = {"Oksapmin"}, ["opo"] = {"Opao"}, ["opt"] = {"Opata"}, ["opy"] = {"Ofayé"}, ["ora"] = {"Oroha"}, ["orc"] = {"Orma"}, ["ore"] = {"Orejón"}, ["org"] = {"Oring"}, ["orh"] = {"Oroqen"}, ["orn"] = {"Orang Kanaq"}, ["oro"] = {"Orokolo"}, ["orr"] = {"Oruma"}, ["ors"] = {"Orang Seletar"}, ["ort"] = {"Adivasi Oriya"}, ["oru"] = {"Ormuri"}, ["orv"] = {"Old Russian"}, ["orw"] = {"Oro Win"}, ["orx"] = {"Oro"}, ["ory"] = {"Odia (individual language)", "Oriya (individual language)"}, ["orz"] = {"Ormu"}, ["osa"] = {"Osage"}, ["osc"] = {"Oscan"}, ["osd"] = {"Digor Ossetic", "Digor", "Digor Ossetian"}, ["osi"] = {"Osing"}, ["osn"] = {"Old Sundanese"}, ["oso"] = {"Ososo"}, ["osp"] = {"Old Spanish"}, ["ost"] = {"Osatu"}, ["osu"] = {"Southern One"}, ["osx"] = {"Old Saxon"}, ["ota"] = {"Ottoman Turkish (1500-1928)"}, ["otb"] = {"Old Tibetan"}, ["otd"] = {"Ot Danum"}, ["ote"] = {"Mezquital Otomi"}, ["oti"] = {"Oti"}, ["otk"] = {"Old Turkish"}, ["otl"] = {"Tilapa Otomi"}, ["otm"] = {"Eastern Highland Otomi"}, ["otn"] = {"Tenango Otomi"}, ["oto"] = {"Otomian languages"}, ["otq"] = {"Querétaro Otomi"}, ["otr"] = {"Otoro"}, ["ots"] = {"Estado de México Otomi"}, ["ott"] = {"Temoaya Otomi"}, ["otu"] = {"Otuke"}, ["otw"] = {"Ottawa"}, ["otx"] = {"Texcatepec Otomi"}, ["oty"] = {"Old Tamil"}, ["otz"] = {"Ixtenco Otomi"}, ["oua"] = {"Tagargrent"}, ["oub"] = {"Glio-Oubi"}, ["oue"] = {"Oune"}, ["oui"] = {"Old Uighur"}, ["oum"] = {"Ouma"}, ["ovd"] = {"Elfdalian", "Övdalian"}, ["owi"] = {"Owiniga"}, ["owl"] = {"Old Welsh"}, ["oyb"] = {"Oy"}, ["oyd"] = {"Oyda"}, ["oym"] = {"Wayampi"}, ["oyy"] = {"Oya'oya"}, ["ozm"] = {"Koonzime"}, ["paa"] = {"Papuan languages"}, ["pab"] = {"Parecís"}, ["pac"] = {"Pacoh"}, ["pad"] = {"Paumarí"}, ["pae"] = {"Pagibete"}, ["paf"] = {"Paranawát"}, ["pag"] = {"Pangasinan"}, ["pah"] = {"Tenharim"}, ["pai"] = {"Pe"}, ["pak"] = {"Parakanã"}, ["pal"] = {"Pahlavi"}, ["pam"] = {"Pampanga", "Kapampangan"}, ["pao"] = {"Northern Paiute"}, ["pap"] = {"Papiamento"}, ["paq"] = {"Parya"}, ["par"] = {"Panamint", "Timbisha"}, ["pas"] = {"Papasena"}, ["pau"] = {"Palauan"}, ["pav"] = {"Pakaásnovos"}, ["paw"] = {"Pawnee"}, ["pax"] = {"Pankararé"}, ["pay"] = {"Pech"}, ["paz"] = {"Pankararú"}, ["pbb"] = {"Páez"}, ["pbc"] = {"Patamona"}, ["pbe"] = {"Mezontla Popoloca"}, ["pbf"] = {"Coyotepec Popoloca"}, ["pbg"] = {"Paraujano"}, ["pbh"] = {"E'ñapa Woromaipu"}, ["pbi"] = {"Parkwa"}, ["pbl"] = {"Mak (Nigeria)"}, ["pbm"] = {"Puebla Mazatec"}, ["pbn"] = {"Kpasam"}, ["pbo"] = {"Papel"}, ["pbp"] = {"Badyara"}, ["pbr"] = {"Pangwa"}, ["pbs"] = {"Central Pame"}, ["pbt"] = {"Southern Pashto"}, ["pbu"] = {"Northern Pashto"}, ["pbv"] = {"Pnar"}, ["pby"] = {"Pyu (Papua New Guinea)"}, ["pca"] = {"Santa Inés Ahuatempan Popoloca"}, ["pcb"] = {"Pear"}, ["pcc"] = {"Bouyei"}, ["pcd"] = {"Picard"}, ["pce"] = {"Ruching Palaung"}, ["pcf"] = {"Paliyan"}, ["pcg"] = {"Paniya"}, ["pch"] = {"Pardhan"}, ["pci"] = {"Duruwa"}, ["pcj"] = {"Parenga"}, ["pck"] = {"Paite Chin"}, ["pcl"] = {"Pardhi"}, ["pcm"] = {"Nigerian Pidgin"}, ["pcn"] = {"Piti"}, ["pcp"] = {"Pacahuara"}, ["pcw"] = {"Pyapun"}, ["pda"] = {"Anam"}, ["pdc"] = {"Pennsylvania German"}, ["pdi"] = {"Pa Di"}, ["pdn"] = {"Podena", "Fedan"}, ["pdo"] = {"Padoe"}, ["pdt"] = {"Plautdietsch"}, ["pdu"] = {"Kayan"}, ["pea"] = {"Peranakan Indonesian"}, ["peb"] = {"Eastern Pomo"}, ["ped"] = {"Mala (Papua New Guinea)"}, ["pee"] = {"Taje"}, ["pef"] = {"Northeastern Pomo"}, ["peg"] = {"Pengo"}, ["peh"] = {"Bonan"}, ["pei"] = {"Chichimeca-Jonaz"}, ["pej"] = {"Northern Pomo"}, ["pek"] = {"Penchal"}, ["pel"] = {"Pekal"}, ["pem"] = {"Phende"}, ["peo"] = {"Old Persian (ca. 600-400 B.C.)"}, ["pep"] = {"Kunja"}, ["peq"] = {"Southern Pomo"}, ["pes"] = {"Iranian Persian"}, ["pev"] = {"Pémono"}, ["pex"] = {"Petats"}, ["pey"] = {"Petjo"}, ["pez"] = {"Eastern Penan"}, ["pfa"] = {"Pááfang"}, ["pfe"] = {"Pere"}, ["pfl"] = {"Pfaelzisch"}, ["pga"] = {"Sudanese Creole Arabic"}, ["pgd"] = {"Gāndhārī"}, ["pgg"] = {"Pangwali"}, ["pgi"] = {"Pagi"}, ["pgk"] = {"Rerep"}, ["pgl"] = {"Primitive Irish"}, ["pgn"] = {"Paelignian"}, ["pgs"] = {"Pangseng"}, ["pgu"] = {"Pagu"}, ["pgz"] = {"Papua New Guinean Sign Language"}, ["pha"] = {"Pa-Hng"}, ["phd"] = {"Phudagi"}, ["phg"] = {"Phuong"}, ["phh"] = {"Phukha"}, ["phi"] = {"Philippine languages"}, ["phj"] = {"Pahari"}, ["phk"] = {"Phake"}, ["phl"] = {"Phalura", "Palula"}, ["phm"] = {"Phimbi"}, ["phn"] = {"Phoenician"}, ["pho"] = {"Phunoi"}, ["phq"] = {"Phana'"}, ["phr"] = {"Pahari-Potwari"}, ["pht"] = {"Phu Thai"}, ["phu"] = {"Phuan"}, ["phv"] = {"Pahlavani"}, ["phw"] = {"Phangduwali"}, ["pia"] = {"Pima Bajo"}, ["pib"] = {"Yine"}, ["pic"] = {"Pinji"}, ["pid"] = {"Piaroa"}, ["pie"] = {"Piro"}, ["pif"] = {"Pingelapese"}, ["pig"] = {"Pisabo"}, ["pih"] = {"Pitcairn-Norfolk"}, ["pij"] = {"Pijao"}, ["pil"] = {"Yom"}, ["pim"] = {"Powhatan"}, ["pin"] = {"Piame"}, ["pio"] = {"Piapoco"}, ["pip"] = {"Pero"}, ["pir"] = {"Piratapuyo"}, ["pis"] = {"Pijin"}, ["pit"] = {"Pitta Pitta"}, ["piu"] = {"Pintupi-Luritja"}, ["piv"] = {"Pileni", "Vaeakau-Taumako"}, ["piw"] = {"Pimbwe"}, ["pix"] = {"Piu"}, ["piy"] = {"Piya-Kwonci"}, ["piz"] = {"Pije"}, ["pjt"] = {"Pitjantjatjara"}, ["pka"] = {"Ardhamāgadhī Prākrit"}, ["pkb"] = {"Pokomo", "Kipfokomo"}, ["pkc"] = {"Paekche"}, ["pkg"] = {"Pak-Tong"}, ["pkh"] = {"Pankhu"}, ["pkn"] = {"Pakanha"}, ["pko"] = {"Pökoot"}, ["pkp"] = {"Pukapuka"}, ["pkr"] = {"Attapady Kurumba"}, ["pks"] = {"Pakistan Sign Language"}, ["pkt"] = {"Maleng"}, ["pku"] = {"Paku"}, ["pla"] = {"Miani"}, ["plb"] = {"Polonombauk"}, ["plc"] = {"Central Palawano"}, ["pld"] = {"Polari"}, ["ple"] = {"Palu'e"}, ["plf"] = {"Central Malayo-Polynesian languages"}, ["plg"] = {"Pilagá"}, ["plh"] = {"Paulohi"}, ["plk"] = {"Kohistani Shina"}, ["pll"] = {"Shwe Palaung"}, ["pln"] = {"Palenquero"}, ["plo"] = {"Oluta Popoluca"}, ["plq"] = {"Palaic"}, ["plr"] = {"Palaka Senoufo"}, ["pls"] = {"San Marcos Tlacoyalco Popoloca", "San Marcos Tlalcoyalco Popoloca"}, ["plt"] = {"Plateau Malagasy"}, ["plu"] = {"Palikúr"}, ["plv"] = {"Southwest Palawano"}, ["plw"] = {"Brooke's Point Palawano"}, ["ply"] = {"Bolyu"}, ["plz"] = {"Paluan"}, ["pma"] = {"Paama"}, ["pmb"] = {"Pambia"}, ["pmd"] = {"Pallanganmiddang"}, ["pme"] = {"Pwaamei"}, ["pmf"] = {"Pamona"}, ["pmh"] = {"Māhārāṣṭri Prākrit"}, ["pmi"] = {"Northern Pumi"}, ["pmj"] = {"Southern Pumi"}, ["pml"] = {"Lingua Franca"}, ["pmm"] = {"Pomo"}, ["pmn"] = {"Pam"}, ["pmo"] = {"Pom"}, ["pmq"] = {"Northern Pame"}, ["pmr"] = {"Paynamar"}, ["pms"] = {"Piemontese"}, ["pmt"] = {"Tuamotuan"}, ["pmw"] = {"Plains Miwok"}, ["pmx"] = {"Poumei Naga"}, ["pmy"] = {"Papuan Malay"}, ["pmz"] = {"Southern Pame"}, ["pna"] = {"Punan Bah-Biau"}, ["pnb"] = {"Western Panjabi"}, ["pnc"] = {"Pannei"}, ["pnd"] = {"Mpinda"}, ["pne"] = {"Western Penan"}, ["png"] = {"Pangu", "Pongu"}, ["pnh"] = {"Penrhyn"}, ["pni"] = {"Aoheng"}, ["pnj"] = {"Pinjarup"}, ["pnk"] = {"Paunaka"}, ["pnl"] = {"Paleni"}, ["pnm"] = {"Punan Batu 1"}, ["pnn"] = {"Pinai-Hagahai"}, ["pno"] = {"Panobo"}, ["pnp"] = {"Pancana"}, ["pnq"] = {"Pana (Burkina Faso)"}, ["pnr"] = {"Panim"}, ["pns"] = {"Ponosakan"}, ["pnt"] = {"Pontic"}, ["pnu"] = {"Jiongnai Bunu"}, ["pnv"] = {"Pinigura"}, ["pnw"] = {"Banyjima", "Panytyima"}, ["pnx"] = {"Phong-Kniang"}, ["pny"] = {"Pinyin"}, ["pnz"] = {"Pana (Central African Republic)"}, ["poc"] = {"Poqomam"}, ["poe"] = {"San Juan Atzingo Popoloca"}, ["pof"] = {"Poke"}, ["pog"] = {"Potiguára"}, ["poh"] = {"Poqomchi'"}, ["poi"] = {"Highland Popoluca"}, ["pok"] = {"Pokangá"}, ["pom"] = {"Southeastern Pomo"}, ["pon"] = {"Pohnpeian"}, ["poo"] = {"Central Pomo"}, ["pop"] = {"Pwapwâ"}, ["poq"] = {"Texistepec Popoluca"}, ["pos"] = {"Sayula Popoluca"}, ["pot"] = {"Potawatomi"}, ["pov"] = {"Upper Guinea Crioulo"}, ["pow"] = {"San Felipe Otlaltepec Popoloca"}, ["pox"] = {"Polabian"}, ["poy"] = {"Pogolo"}, ["poz"] = {"Malayo-Polynesian languages"}, ["ppe"] = {"Papi"}, ["ppi"] = {"Paipai"}, ["ppk"] = {"Uma"}, ["ppl"] = {"Pipil", "Nicarao"}, ["ppm"] = {"Papuma"}, ["ppn"] = {"Papapana"}, ["ppo"] = {"Folopa"}, ["ppp"] = {"Pelende"}, ["ppq"] = {"Pei"}, ["pps"] = {"San Luís Temalacayuca Popoloca"}, ["ppt"] = {"Pare"}, ["ppu"] = {"Papora"}, ["pqa"] = {"Pa'a"}, ["pqe"] = {"Eastern Malayo-Polynesian languages"}, ["pqm"] = {"Malecite-Passamaquoddy"}, ["pqw"] = {"Western Malayo-Polynesian languages"}, ["pra"] = {"Prakrit languages"}, ["prc"] = {"Parachi"}, ["prd"] = {"Parsi-Dari"}, ["pre"] = {"Principense"}, ["prf"] = {"Paranan"}, ["prg"] = {"Prussian"}, ["prh"] = {"Porohanon"}, ["pri"] = {"Paicî"}, ["prk"] = {"Parauk"}, ["prl"] = {"Peruvian Sign Language"}, ["prm"] = {"Kibiri"}, ["prn"] = {"Prasuni"}, ["pro"] = {"Old Provençal (to 1500)", "Old Occitan (to 1500)"}, ["prq"] = {"Ashéninka Perené"}, ["prr"] = {"Puri"}, ["prs"] = {"Dari", "Afghan Persian"}, ["prt"] = {"Phai"}, ["pru"] = {"Puragi"}, ["prw"] = {"Parawen"}, ["prx"] = {"Purik"}, ["prz"] = {"Providencia Sign Language"}, ["psa"] = {"Asue Awyu"}, ["psc"] = {"Iranian Sign Language", "Persian Sign Language"}, ["psd"] = {"Plains Indian Sign Language"}, ["pse"] = {"Central Malay"}, ["psg"] = {"Penang Sign Language"}, ["psh"] = {"Southwest Pashai", "Southwest Pashayi"}, ["psi"] = {"Southeast Pashai", "Southeast Pashayi"}, ["psl"] = {"Puerto Rican Sign Language"}, ["psm"] = {"Pauserna"}, ["psn"] = {"Panasuan"}, ["pso"] = {"Polish Sign Language"}, ["psp"] = {"Philippine Sign Language"}, ["psq"] = {"Pasi"}, ["psr"] = {"Portuguese Sign Language"}, ["pss"] = {"Kaulong"}, ["pst"] = {"Central Pashto"}, ["psu"] = {"Sauraseni Prākrit"}, ["psw"] = {"Port Sandwich"}, ["psy"] = {"Piscataway"}, ["pta"] = {"Pai Tavytera"}, ["pth"] = {"Pataxó Hã-Ha-Hãe"}, ["pti"] = {"Pindiini", "Wangkatha"}, ["ptn"] = {"Patani"}, ["pto"] = {"Zo'é"}, ["ptp"] = {"Patep"}, ["ptq"] = {"Pattapu"}, ["ptr"] = {"Piamatsina"}, ["ptt"] = {"Enrekang"}, ["ptu"] = {"Bambam"}, ["ptv"] = {"Port Vato"}, ["ptw"] = {"Pentlatch"}, ["pty"] = {"Pathiya"}, ["pua"] = {"Western Highland Purepecha"}, ["pub"] = {"Purum"}, ["puc"] = {"Punan Merap"}, ["pud"] = {"Punan Aput"}, ["pue"] = {"Puelche"}, ["puf"] = {"Punan Merah"}, ["pug"] = {"Phuie"}, ["pui"] = {"Puinave"}, ["puj"] = {"Punan Tubu"}, ["pum"] = {"Puma"}, ["puo"] = {"Puoc"}, ["pup"] = {"Pulabu"}, ["puq"] = {"Puquina"}, ["pur"] = {"Puruborá"}, ["put"] = {"Putoh"}, ["puu"] = {"Punu"}, ["puw"] = {"Puluwatese"}, ["pux"] = {"Puare"}, ["puy"] = {"Purisimeño"}, ["pwa"] = {"Pawaia"}, ["pwb"] = {"Panawa"}, ["pwg"] = {"Gapapaiwa"}, ["pwi"] = {"Patwin"}, ["pwm"] = {"Molbog"}, ["pwn"] = {"Paiwan"}, ["pwo"] = {"Pwo Western Karen"}, ["pwr"] = {"Powari"}, ["pww"] = {"Pwo Northern Karen"}, ["pxm"] = {"Quetzaltepec Mixe"}, ["pye"] = {"Pye Krumen"}, ["pym"] = {"Fyam"}, ["pyn"] = {"Poyanáwa"}, ["pys"] = {"Paraguayan Sign Language", "Lengua de Señas del Paraguay"}, ["pyu"] = {"Puyuma"}, ["pyx"] = {"Pyu (Myanmar)"}, ["pyy"] = {"Pyen"}, ["pze"] = {"Pesse"}, ["pzh"] = {"Pazeh"}, ["pzn"] = {"Jejara Naga", "Para Naga"}, ["qua"] = {"Quapaw"}, ["qub"] = {"Huallaga Huánuco Quechua"}, ["quc"] = {"K'iche'", "Quiché"}, ["qud"] = {"Calderón Highland Quichua"}, ["quf"] = {"Lambayeque Quechua"}, ["qug"] = {"Chimborazo Highland Quichua"}, ["quh"] = {"South Bolivian Quechua"}, ["qui"] = {"Quileute"}, ["quk"] = {"Chachapoyas Quechua"}, ["qul"] = {"North Bolivian Quechua"}, ["qum"] = {"Sipacapense"}, ["qun"] = {"Quinault"}, ["qup"] = {"Southern Pastaza Quechua"}, ["quq"] = {"Quinqui"}, ["qur"] = {"Yanahuanca Pasco Quechua"}, ["qus"] = {"Santiago del Estero Quichua"}, ["quv"] = {"Sacapulteco"}, ["quw"] = {"Tena Lowland Quichua"}, ["qux"] = {"Yauyos Quechua"}, ["quy"] = {"Ayacucho Quechua"}, ["quz"] = {"Cusco Quechua"}, ["qva"] = {"Ambo-Pasco Quechua"}, ["qvc"] = {"Cajamarca Quechua"}, ["qve"] = {"Eastern Apurímac Quechua"}, ["qvh"] = {"Huamalíes-Dos de Mayo Huánuco Quechua"}, ["qvi"] = {"Imbabura Highland Quichua"}, ["qvj"] = {"Loja Highland Quichua"}, ["qvl"] = {"Cajatambo North Lima Quechua"}, ["qvm"] = {"Margos-Yarowilca-Lauricocha Quechua"}, ["qvn"] = {"North Junín Quechua"}, ["qvo"] = {"Napo Lowland Quechua"}, ["qvp"] = {"Pacaraos Quechua"}, ["qvs"] = {"San Martín Quechua"}, ["qvw"] = {"Huaylla Wanca Quechua"}, ["qvy"] = {"Queyu"}, ["qvz"] = {"Northern Pastaza Quichua"}, ["qwa"] = {"Corongo Ancash Quechua"}, ["qwc"] = {"Classical Quechua"}, ["qwe"] = {"Quechuan (family)"}, ["qwh"] = {"Huaylas Ancash Quechua"}, ["qwm"] = {"Kuman (Russia)"}, ["qws"] = {"Sihuas Ancash Quechua"}, ["qwt"] = {"Kwalhioqua-Tlatskanai"}, ["qxa"] = {"Chiquián Ancash Quechua"}, ["qxc"] = {"Chincha Quechua"}, ["qxh"] = {"Panao Huánuco Quechua"}, ["qxl"] = {"Salasaca Highland Quichua"}, ["qxn"] = {"Northern Conchucos Ancash Quechua"}, ["qxo"] = {"Southern Conchucos Ancash Quechua"}, ["qxp"] = {"Puno Quechua"}, ["qxq"] = {"Qashqa'i"}, ["qxr"] = {"Cañar Highland Quichua"}, ["qxs"] = {"Southern Qiang"}, ["qxt"] = {"Santa Ana de Tusi Pasco Quechua"}, ["qxu"] = {"Arequipa-La Unión Quechua"}, ["qxw"] = {"Jauja Wanca Quechua"}, ["qya"] = {"Quenya"}, ["qyp"] = {"Quiripi"}, ["raa"] = {"Dungmali"}, ["rab"] = {"Camling"}, ["rac"] = {"Rasawa"}, ["rad"] = {"Rade"}, ["raf"] = {"Western Meohang"}, ["rag"] = {"Logooli", "Lulogooli"}, ["rah"] = {"Rabha"}, ["rai"] = {"Ramoaaina"}, ["raj"] = {"Rajasthani"}, ["rak"] = {"Tulu-Bohuai"}, ["ral"] = {"Ralte"}, ["ram"] = {"Canela"}, ["ran"] = {"Riantana"}, ["rao"] = {"Rao"}, ["rap"] = {"Rapanui"}, ["raq"] = {"Saam"}, ["rar"] = {"Rarotongan", "Cook Islands Maori"}, ["ras"] = {"Tegali"}, ["rat"] = {"Razajerdi"}, ["rau"] = {"Raute"}, ["rav"] = {"Sampang"}, ["raw"] = {"Rawang"}, ["rax"] = {"Rang"}, ["ray"] = {"Rapa"}, ["raz"] = {"Rahambuu"}, ["rbb"] = {"Rumai Palaung"}, ["rbk"] = {"Northern Bontok"}, ["rbl"] = {"Miraya Bikol"}, ["rbp"] = {"Barababaraba"}, ["rcf"] = {"Réunion Creole French"}, ["rdb"] = {"Rudbari"}, ["rea"] = {"Rerau"}, ["reb"] = {"Rembong"}, ["ree"] = {"Rejang Kayan"}, ["reg"] = {"Kara (Tanzania)"}, ["rei"] = {"Reli"}, ["rej"] = {"Rejang"}, ["rel"] = {"Rendille"}, ["rem"] = {"Remo"}, ["ren"] = {"Rengao"}, ["rer"] = {"Rer Bare"}, ["res"] = {"Reshe"}, ["ret"] = {"Retta"}, ["rey"] = {"Reyesano"}, ["rga"] = {"Roria"}, ["rge"] = {"Romano-Greek"}, ["rgk"] = {"Rangkas"}, ["rgn"] = {"Romagnol"}, ["rgr"] = {"Resígaro"}, ["rgs"] = {"Southern Roglai"}, ["rgu"] = {"Ringgou"}, ["rhg"] = {"Rohingya"}, ["rhp"] = {"Yahang"}, ["ria"] = {"Riang (India)"}, ["rib"] = {"Bribri Sign Language"}, ["rif"] = {"Tarifit"}, ["ril"] = {"Riang Lang", "Riang (Myanmar)"}, ["rim"] = {"Nyaturu"}, ["rin"] = {"Nungu"}, ["rir"] = {"Ribun"}, ["rit"] = {"Ritharrngu"}, ["riu"] = {"Riung"}, ["rjg"] = {"Rajong"}, ["rji"] = {"Raji"}, ["rjs"] = {"Rajbanshi"}, ["rka"] = {"Kraol"}, ["rkb"] = {"Rikbaktsa"}, ["rkh"] = {"Rakahanga-Manihiki"}, ["rki"] = {"Rakhine"}, ["rkm"] = {"Marka"}, ["rkt"] = {"Rangpuri", "Kamta"}, ["rkw"] = {"Arakwal"}, ["rma"] = {"Rama"}, ["rmb"] = {"Rembarrnga"}, ["rmc"] = {"Carpathian Romani"}, ["rmd"] = {"Traveller Danish"}, ["rme"] = {"Angloromani"}, ["rmf"] = {"Kalo Finnish Romani"}, ["rmg"] = {"Traveller Norwegian"}, ["rmh"] = {"Murkim"}, ["rmi"] = {"Lomavren"}, ["rmk"] = {"Romkun"}, ["rml"] = {"Baltic Romani"}, ["rmm"] = {"Roma"}, ["rmn"] = {"Balkan Romani"}, ["rmo"] = {"Sinte Romani"}, ["rmp"] = {"Rempi"}, ["rmq"] = {"Caló"}, ["rms"] = {"Romanian Sign Language"}, ["rmt"] = {"Domari"}, ["rmu"] = {"Tavringer Romani"}, ["rmv"] = {"Romanova"}, ["rmw"] = {"Welsh Romani"}, ["rmx"] = {"Romam"}, ["rmy"] = {"Vlax Romani"}, ["rmz"] = {"Marma"}, ["rnb"] = {"Brunca Sign Language"}, ["rnd"] = {"Ruund"}, ["rng"] = {"Ronga"}, ["rnl"] = {"Ranglong"}, ["rnn"] = {"Roon"}, ["rnp"] = {"Rongpo"}, ["rnr"] = {"Nari Nari"}, ["rnw"] = {"Rungwa"}, ["roa"] = {"Romance languages"}, ["rob"] = {"Tae'"}, ["roc"] = {"Cacgia Roglai"}, ["rod"] = {"Rogo"}, ["roe"] = {"Ronji"}, ["rof"] = {"Rombo"}, ["rog"] = {"Northern Roglai"}, ["rol"] = {"Romblomanon"}, ["rom"] = {"Romany"}, ["roo"] = {"Rotokas"}, ["rop"] = {"Kriol"}, ["ror"] = {"Rongga"}, ["rou"] = {"Runga"}, ["row"] = {"Dela-Oenale"}, ["rpn"] = {"Repanbitip"}, ["rpt"] = {"Rapting"}, ["rri"] = {"Ririo"}, ["rrm"] = {"Moriori"}, ["rro"] = {"Waima"}, ["rrt"] = {"Arritinngithigh"}, ["rsb"] = {"Romano-Serbian"}, ["rsk"] = {"Ruthenian", "Rusnak"}, ["rsl"] = {"Russian Sign Language"}, ["rsm"] = {"Miriwoong Sign Language"}, ["rsn"] = {"Rwandan Sign Language"}, ["rsw"] = {"Rishiwa"}, ["rtc"] = {"Rungtu Chin"}, ["rth"] = {"Ratahan"}, ["rtm"] = {"Rotuman"}, ["rts"] = {"Yurats"}, ["rtw"] = {"Rathawi"}, ["rub"] = {"Gungu"}, ["ruc"] = {"Ruuli"}, ["rue"] = {"Rusyn"}, ["ruf"] = {"Luguru"}, ["rug"] = {"Roviana"}, ["ruh"] = {"Ruga"}, ["rui"] = {"Rufiji"}, ["ruk"] = {"Che"}, ["ruo"] = {"Istro Romanian"}, ["rup"] = {"Macedo-Romanian", "Aromanian", "Arumanian"}, ["ruq"] = {"Megleno Romanian"}, ["rut"] = {"Rutul"}, ["ruu"] = {"Lanas Lobu"}, ["ruy"] = {"Mala (Nigeria)"}, ["ruz"] = {"Ruma"}, ["rwa"] = {"Rawo"}, ["rwk"] = {"Rwa"}, ["rwl"] = {"Ruwila"}, ["rwm"] = {"Amba (Uganda)"}, ["rwo"] = {"Rawa"}, ["rwr"] = {"Marwari (India)"}, ["rxd"] = {"Ngardi"}, ["rxw"] = {"Karuwali", "Garuwali"}, ["ryn"] = {"Northern Amami-Oshima"}, ["rys"] = {"Yaeyama"}, ["ryu"] = {"Central Okinawan"}, ["rzh"] = {"Rāziḥī"}, ["saa"] = {"Saba"}, ["sab"] = {"Buglere"}, ["sac"] = {"Meskwaki"}, ["sad"] = {"Sandawe"}, ["sae"] = {"Sabanê"}, ["saf"] = {"Safaliba"}, ["sah"] = {"Yakut"}, ["sai"] = {"South American Indian languages"}, ["saj"] = {"Sahu"}, ["sak"] = {"Sake"}, ["sal"] = {"Salishan languages"}, ["sam"] = {"Samaritan Aramaic"}, ["sao"] = {"Sause"}, ["saq"] = {"Samburu"}, ["sar"] = {"Saraveca"}, ["sas"] = {"Sasak"}, ["sat"] = {"Santali"}, ["sau"] = {"Saleman"}, ["sav"] = {"Saafi-Saafi"}, ["saw"] = {"Sawi"}, ["sax"] = {"Sa"}, ["say"] = {"Saya"}, ["saz"] = {"Saurashtra"}, ["sba"] = {"Ngambay"}, ["sbb"] = {"Simbo"}, ["sbc"] = {"Kele (Papua New Guinea)"}, ["sbd"] = {"Southern Samo"}, ["sbe"] = {"Saliba"}, ["sbf"] = {"Chabu", "Shabo"}, ["sbg"] = {"Seget"}, ["sbh"] = {"Sori-Harengan"}, ["sbi"] = {"Seti"}, ["sbj"] = {"Surbakhal"}, ["sbk"] = {"Safwa"}, ["sbl"] = {"Botolan Sambal"}, ["sbm"] = {"Sagala"}, ["sbn"] = {"Sindhi Bhil"}, ["sbo"] = {"Sabüm"}, ["sbp"] = {"Sangu (Tanzania)"}, ["sbq"] = {"Sileibi"}, ["sbr"] = {"Sembakung Murut"}, ["sbs"] = {"Subiya"}, ["sbt"] = {"Kimki"}, ["sbu"] = {"Stod Bhoti"}, ["sbv"] = {"Sabine"}, ["sbw"] = {"Simba"}, ["sbx"] = {"Seberuang"}, ["sby"] = {"Soli"}, ["sbz"] = {"Sara Kaba"}, ["scb"] = {"Chut"}, ["sce"] = {"Dongxiang"}, ["scf"] = {"San Miguel Creole French"}, ["scg"] = {"Sanggau"}, ["sch"] = {"Sakachep"}, ["sci"] = {"Sri Lankan Creole Malay"}, ["sck"] = {"Sadri"}, ["scl"] = {"Shina"}, ["scn"] = {"Sicilian"}, ["sco"] = {"Scots"}, ["scp"] = {"Hyolmo", "Helambu Sherpa"}, ["scq"] = {"Sa'och"}, ["scs"] = {"North Slavey"}, ["sct"] = {"Southern Katang"}, ["scu"] = {"Shumcho"}, ["scv"] = {"Sheni"}, ["scw"] = {"Sha"}, ["scx"] = {"Sicel"}, ["scz"] = {"Shaetlan"}, ["sda"] = {"Toraja-Sa'dan"}, ["sdb"] = {"Shabak"}, ["sdc"] = {"Sassarese Sardinian"}, ["sde"] = {"Surubu"}, ["sdf"] = {"Sarli"}, ["sdg"] = {"Savi"}, ["sdh"] = {"Southern Kurdish"}, ["sdj"] = {"Suundi"}, ["sdk"] = {"Sos Kundi"}, ["sdl"] = {"Saudi Arabian Sign Language"}, ["sdn"] = {"Gallurese Sardinian"}, ["sdo"] = {"Bukar-Sadung Bidayuh"}, ["sdp"] = {"Sherdukpen"}, ["sdq"] = {"Semandang"}, ["sdr"] = {"Oraon Sadri"}, ["sds"] = {"Sened"}, ["sdt"] = {"Shuadit"}, ["sdu"] = {"Sarudu"}, ["sdv"] = {"Eastern Sudanic languages"}, ["sdx"] = {"Sibu Melanau"}, ["sdz"] = {"Sallands"}, ["sea"] = {"Semai"}, ["seb"] = {"Shempire Senoufo"}, ["sec"] = {"Sechelt", "She shashishalhem"}, ["sed"] = {"Sedang"}, ["see"] = {"Seneca"}, ["sef"] = {"Cebaara Senoufo"}, ["seg"] = {"Segeju"}, ["seh"] = {"Sena"}, ["sei"] = {"Seri"}, ["sej"] = {"Sene"}, ["sek"] = {"Sekani"}, ["sel"] = {"Selkup"}, ["sem"] = {"Semitic languages"}, ["sen"] = {"Nanerigé Sénoufo"}, ["seo"] = {"Suarmin"}, ["sep"] = {"Sìcìté Sénoufo"}, ["seq"] = {"Senara Sénoufo"}, ["ser"] = {"Serrano"}, ["ses"] = {"Koyraboro Senni Songhai"}, ["set"] = {"Sentani"}, ["seu"] = {"Serui-Laut"}, ["sev"] = {"Nyarafolo Senoufo"}, ["sew"] = {"Sewa Bay"}, ["sey"] = {"Secoya"}, ["sez"] = {"Senthang Chin"}, ["sfb"] = {"Langue des signes de Belgique Francophone", "French Belgian Sign Language"}, ["sfe"] = {"Eastern Subanen"}, ["sfm"] = {"Small Flowery Miao"}, ["sfs"] = {"South African Sign Language"}, ["sfw"] = {"Sehwi"}, ["sga"] = {"Old Irish (to 900)"}, ["sgb"] = {"Mag-antsi Ayta"}, ["sgc"] = {"Kipsigis"}, ["sgd"] = {"Surigaonon"}, ["sge"] = {"Segai"}, ["sgg"] = {"Swiss-German Sign Language"}, ["sgh"] = {"Shughni"}, ["sgi"] = {"Suga"}, ["sgj"] = {"Surgujia"}, ["sgk"] = {"Sangkong"}, ["sgm"] = {"Singa"}, ["sgn"] = {"Sign languages"}, ["sgp"] = {"Singpho"}, ["sgr"] = {"Sangisari"}, ["sgs"] = {"Samogitian"}, ["sgt"] = {"Brokpake"}, ["sgu"] = {"Salas"}, ["sgw"] = {"Sebat Bet Gurage"}, ["sgx"] = {"Sierra Leone Sign Language"}, ["sgy"] = {"Sanglechi"}, ["sgz"] = {"Sursurunga"}, ["sha"] = {"Shall-Zwall"}, ["shb"] = {"Ninam"}, ["shc"] = {"Sonde"}, ["shd"] = {"Kundal Shahi"}, ["she"] = {"Sheko"}, ["shg"] = {"Shua"}, ["shh"] = {"Shoshoni"}, ["shi"] = {"Tachelhit"}, ["shj"] = {"Shatt"}, ["shk"] = {"Shilluk"}, ["shl"] = {"Shendu"}, ["shm"] = {"Shahrudi"}, ["shn"] = {"Shan"}, ["sho"] = {"Shanga"}, ["shp"] = {"Shipibo-Conibo"}, ["shq"] = {"Sala"}, ["shr"] = {"Shi"}, ["shs"] = {"Shuswap", "Secwepemctsín"}, ["sht"] = {"Shasta"}, ["shu"] = {"Chadian Arabic"}, ["shv"] = {"Shehri"}, ["shw"] = {"Shwai"}, ["shx"] = {"She"}, ["shy"] = {"Tachawit"}, ["shz"] = {"Syenara Senoufo"}, ["sia"] = {"Akkala Sami"}, ["sib"] = {"Sebop"}, ["sid"] = {"Sidamo"}, ["sie"] = {"Simaa"}, ["sif"] = {"Siamou"}, ["sig"] = {"Paasaal"}, ["sih"] = {"Zire", "Sîshëë"}, ["sii"] = {"Shom Peng"}, ["sij"] = {"Numbami"}, ["sik"] = {"Sikiana"}, ["sil"] = {"Tumulung Sisaala"}, ["sim"] = {"Mende (Papua New Guinea)"}, ["sio"] = {"Siouan languages"}, ["sip"] = {"Sikkimese"}, ["siq"] = {"Sonia"}, ["sir"] = {"Siri"}, ["sis"] = {"Siuslaw"}, ["sit"] = {"Sino-Tibetan languages"}, ["siu"] = {"Sinagen"}, ["siv"] = {"Sumariup"}, ["siw"] = {"Siwai"}, ["six"] = {"Sumau"}, ["siy"] = {"Sivandi"}, ["siz"] = {"Siwi"}, ["sja"] = {"Epena"}, ["sjb"] = {"Sajau Basap"}, ["sjc"] = {"Shaojiang Chinese"}, ["sjd"] = {"Kildin Sami"}, ["sje"] = {"Pite Sami"}, ["sjg"] = {"Assangori"}, ["sjk"] = {"Kemi Sami"}, ["sjl"] = {"Sajalong", "Miji"}, ["sjm"] = {"Mapun"}, ["sjn"] = {"Sindarin"}, ["sjo"] = {"Xibe"}, ["sjp"] = {"Surjapuri"}, ["sjr"] = {"Siar-Lak"}, ["sjs"] = {"Senhaja De Srair"}, ["sjt"] = {"Ter Sami"}, ["sju"] = {"Ume Sami"}, ["sjw"] = {"Shawnee"}, ["ska"] = {"Skagit"}, ["skb"] = {"Saek"}, ["skc"] = {"Ma Manda"}, ["skd"] = {"Southern Sierra Miwok"}, ["ske"] = {"Seke (Vanuatu)"}, ["skf"] = {"Sakirabiá"}, ["skg"] = {"Sakalava Malagasy"}, ["skh"] = {"Sikule"}, ["ski"] = {"Sika"}, ["skj"] = {"Seke (Nepal)"}, ["skm"] = {"Kutong"}, ["skn"] = {"Kolibugan Subanon"}, ["sko"] = {"Seko Tengah"}, ["skp"] = {"Sekapan"}, ["skq"] = {"Sininkere"}, ["skr"] = {"Saraiki", "Seraiki"}, ["sks"] = {"Maia"}, ["skt"] = {"Sakata"}, ["sku"] = {"Sakao"}, ["skv"] = {"Skou"}, ["skw"] = {"Skepi Creole Dutch"}, ["skx"] = {"Seko Padang"}, ["sky"] = {"Sikaiana"}, ["skz"] = {"Sekar"}, ["sla"] = {"Slavic languages"}, ["slc"] = {"Sáliba"}, ["sld"] = {"Sissala"}, ["sle"] = {"Sholaga"}, ["slf"] = {"Swiss-Italian Sign Language"}, ["slg"] = {"Selungai Murut"}, ["slh"] = {"Southern Puget Sound Salish"}, ["sli"] = {"Lower Silesian"}, ["slj"] = {"Salumá"}, ["sll"] = {"Salt-Yui"}, ["slm"] = {"Pangutaran Sama"}, ["sln"] = {"Salinan"}, ["slp"] = {"Lamaholot"}, ["slr"] = {"Salar"}, ["sls"] = {"Singapore Sign Language"}, ["slt"] = {"Sila"}, ["slu"] = {"Selaru"}, ["slw"] = {"Sialum"}, ["slx"] = {"Salampasu"}, ["sly"] = {"Selayar"}, ["slz"] = {"Ma'ya"}, ["sma"] = {"Southern Sami"}, ["smb"] = {"Simbari"}, ["smc"] = {"Som"}, ["smf"] = {"Auwe"}, ["smg"] = {"Simbali"}, ["smh"] = {"Samei"}, ["smi"] = {"Sami languages"}, ["smj"] = {"Lule Sami"}, ["smk"] = {"Bolinao"}, ["sml"] = {"Central Sama"}, ["smm"] = {"Musasa"}, ["smn"] = {"Inari Sami"}, ["smp"] = {"Samaritan"}, ["smq"] = {"Samo"}, ["smr"] = {"Simeulue"}, ["sms"] = {"Skolt Sami"}, ["smt"] = {"Simte"}, ["smu"] = {"Somray"}, ["smv"] = {"Samvedi"}, ["smw"] = {"Sumbawa"}, ["smx"] = {"Samba"}, ["smy"] = {"Semnani"}, ["smz"] = {"Simeku"}, ["snc"] = {"Sinaugoro"}, ["sne"] = {"Bau Bidayuh"}, ["snf"] = {"Noon"}, ["sng"] = {"Sanga (Democratic Republic of Congo)"}, ["sni"] = {"Sensi"}, ["snj"] = {"Riverain Sango"}, ["snk"] = {"Soninke"}, ["snl"] = {"Sangil"}, ["snm"] = {"Southern Ma'di"}, ["snn"] = {"Siona"}, ["sno"] = {"Snohomish"}, ["snp"] = {"Siane"}, ["snq"] = {"Sangu (Gabon)"}, ["snr"] = {"Sihan"}, ["sns"] = {"South West Bay", "Nahavaq"}, ["snu"] = {"Senggi", "Viid"}, ["snv"] = {"Sa'ban"}, ["snw"] = {"Selee"}, ["snx"] = {"Sam"}, ["sny"] = {"Saniyo-Hiyewe"}, ["snz"] = {"Kou"}, ["soa"] = {"Thai Song"}, ["sob"] = {"Sobei"}, ["soc"] = {"So (Democratic Republic of Congo)"}, ["sod"] = {"Songoora"}, ["soe"] = {"Songomeno"}, ["sog"] = {"Sogdian"}, ["soh"] = {"Aka"}, ["soi"] = {"Sonha"}, ["soj"] = {"Soi"}, ["sok"] = {"Sokoro"}, ["sol"] = {"Solos"}, ["son"] = {"Songhai languages"}, ["soo"] = {"Songo"}, ["sop"] = {"Songe"}, ["soq"] = {"Kanasi"}, ["sor"] = {"Somrai"}, ["sos"] = {"Seeku"}, ["sou"] = {"Southern Thai"}, ["sov"] = {"Sonsorol"}, ["sow"] = {"Sowanda"}, ["sox"] = {"Swo"}, ["soy"] = {"Miyobe"}, ["soz"] = {"Temi"}, ["spb"] = {"Sepa (Indonesia)"}, ["spc"] = {"Sapé"}, ["spd"] = {"Saep"}, ["spe"] = {"Sepa (Papua New Guinea)"}, ["spg"] = {"Sian"}, ["spi"] = {"Saponi"}, ["spk"] = {"Sengo"}, ["spl"] = {"Selepet"}, ["spm"] = {"Akukem"}, ["spn"] = {"Sanapaná"}, ["spo"] = {"Spokane"}, ["spp"] = {"Supyire Senoufo"}, ["spq"] = {"Loreto-Ucayali Spanish"}, ["spr"] = {"Saparua"}, ["sps"] = {"Saposa"}, ["spt"] = {"Spiti Bhoti"}, ["spu"] = {"Sapuan"}, ["spv"] = {"Sambalpuri", "Kosli"}, ["spx"] = {"South Picene"}, ["spy"] = {"Sabaot"}, ["sqa"] = {"Shama-Sambuga"}, ["sqh"] = {"Shau"}, ["sqj"] = {"Albanian languages"}, ["sqk"] = {"Albanian Sign Language"}, ["sqm"] = {"Suma"}, ["sqn"] = {"Susquehannock"}, ["sqo"] = {"Sorkhei"}, ["sqq"] = {"Sou"}, ["sqr"] = {"Siculo Arabic"}, ["sqs"] = {"Sri Lankan Sign Language"}, ["sqt"] = {"Soqotri"}, ["squ"] = {"Squamish", "Sḵwx̱wú7mesh sníchim"}, ["sqx"] = {"Kufr Qassem Sign Language (KQSL)"}, ["sra"] = {"Saruga"}, ["srb"] = {"Sora"}, ["src"] = {"Logudorese Sardinian"}, ["sre"] = {"Sara"}, ["srf"] = {"Nafi"}, ["srg"] = {"Sulod"}, ["srh"] = {"Sarikoli"}, ["sri"] = {"Siriano"}, ["srk"] = {"Serudung Murut"}, ["srl"] = {"Isirawa"}, ["srm"] = {"Saramaccan"}, ["srn"] = {"Sranan Tongo"}, ["sro"] = {"Campidanese Sardinian"}, ["srq"] = {"Sirionó"}, ["srr"] = {"Serer"}, ["srs"] = {"Sarsi"}, ["srt"] = {"Sauri"}, ["sru"] = {"Suruí"}, ["srv"] = {"Southern Sorsoganon"}, ["srw"] = {"Serua"}, ["srx"] = {"Sirmauri"}, ["sry"] = {"Sera"}, ["srz"] = {"Shahmirzadi"}, ["ssa"] = {"Nilo-Saharan languages"}, ["ssb"] = {"Southern Sama"}, ["ssc"] = {"Suba-Simbiti"}, ["ssd"] = {"Siroi"}, ["sse"] = {"Balangingi", "Bangingih Sama"}, ["ssf"] = {"Thao"}, ["ssg"] = {"Seimat"}, ["ssh"] = {"Shihhi Arabic"}, ["ssi"] = {"Sansi"}, ["ssj"] = {"Sausi"}, ["ssk"] = {"Sunam"}, ["ssl"] = {"Western Sisaala"}, ["ssm"] = {"Semnam"}, ["ssn"] = {"Waata"}, ["sso"] = {"Sissano"}, ["ssp"] = {"Spanish Sign Language"}, ["ssq"] = {"So'a"}, ["ssr"] = {"Swiss-French Sign Language"}, ["sss"] = {"Sô"}, ["sst"] = {"Sinasina"}, ["ssu"] = {"Susuami"}, ["ssv"] = {"Shark Bay"}, ["ssx"] = {"Samberigi"}, ["ssy"] = {"Saho"}, ["ssz"] = {"Sengseng"}, ["sta"] = {"Settla"}, ["stb"] = {"Northern Subanen"}, ["std"] = {"Sentinel"}, ["ste"] = {"Liana-Seti"}, ["stf"] = {"Seta"}, ["stg"] = {"Trieng"}, ["sth"] = {"Shelta"}, ["sti"] = {"Bulo Stieng"}, ["stj"] = {"Matya Samo"}, ["stk"] = {"Arammba"}, ["stl"] = {"Stellingwerfs"}, ["stm"] = {"Setaman"}, ["stn"] = {"Owa"}, ["sto"] = {"Stoney"}, ["stp"] = {"Southeastern Tepehuan"}, ["stq"] = {"Saterfriesisch"}, ["str"] = {"Straits Salish"}, ["sts"] = {"Shumashti"}, ["stt"] = {"Budeh Stieng"}, ["stu"] = {"Samtao"}, ["stv"] = {"Silt'e"}, ["stw"] = {"Satawalese"}, ["sty"] = {"Siberian Tatar"}, ["sua"] = {"Sulka"}, ["sub"] = {"Suku"}, ["suc"] = {"Western Subanon"}, ["sue"] = {"Suena"}, ["sug"] = {"Suganga"}, ["sui"] = {"Suki"}, ["suj"] = {"Shubi"}, ["suk"] = {"Sukuma"}, ["suo"] = {"Bouni"}, ["suq"] = {"Tirmaga-Chai Suri", "Suri"}, ["sur"] = {"Mwaghavul"}, ["sus"] = {"Susu"}, ["sut"] = {"Subtiaba"}, ["suv"] = {"Puroik"}, ["suw"] = {"Sumbwa"}, ["sux"] = {"Sumerian"}, ["suy"] = {"Suyá"}, ["suz"] = {"Sunwar"}, ["sva"] = {"Svan"}, ["svb"] = {"Ulau-Suain"}, ["svc"] = {"Vincentian Creole English"}, ["sve"] = {"Serili"}, ["svk"] = {"Slovakian Sign Language"}, ["svm"] = {"Slavomolisano"}, ["svs"] = {"Savosavo"}, ["svx"] = {"Skalvian"}, ["swb"] = {"Maore Comorian"}, ["swc"] = {"Congo Swahili"}, ["swf"] = {"Sere"}, ["swg"] = {"Swabian"}, ["swh"] = {"Swahili (individual language)", "Kiswahili"}, ["swi"] = {"Sui"}, ["swj"] = {"Sira"}, ["swk"] = {"Malawi Sena"}, ["swl"] = {"Swedish Sign Language"}, ["swm"] = {"Samosa"}, ["swn"] = {"Sawknah"}, ["swo"] = {"Shanenawa"}, ["swp"] = {"Suau"}, ["swq"] = {"Sharwa"}, ["swr"] = {"Saweru"}, ["sws"] = {"Seluwasan"}, ["swt"] = {"Sawila"}, ["swu"] = {"Suwawa"}, ["swv"] = {"Shekhawati"}, ["sww"] = {"Sowa"}, ["swx"] = {"Suruahá"}, ["swy"] = {"Sarua"}, ["sxb"] = {"Suba"}, ["sxc"] = {"Sicanian"}, ["sxe"] = {"Sighu"}, ["sxg"] = {"Shuhi", "Shixing"}, ["sxk"] = {"Southern Kalapuya"}, ["sxl"] = {"Selian"}, ["sxm"] = {"Samre"}, ["sxn"] = {"Sangir"}, ["sxo"] = {"Sorothaptic"}, ["sxr"] = {"Saaroa"}, ["sxs"] = {"Sasaru"}, ["sxu"] = {"Upper Saxon"}, ["sxw"] = {"Saxwe Gbe"}, ["sya"] = {"Siang"}, ["syb"] = {"Central Subanen"}, ["syc"] = {"Classical Syriac"}, ["syd"] = {"Samoyedic languages"}, ["syi"] = {"Seki"}, ["syk"] = {"Sukur"}, ["syl"] = {"Sylheti"}, ["sym"] = {"Maya Samo"}, ["syn"] = {"Senaya"}, ["syo"] = {"Suoy"}, ["syr"] = {"Syriac"}, ["sys"] = {"Sinyar"}, ["syw"] = {"Kagate"}, ["syx"] = {"Samay"}, ["syy"] = {"Al-Sayyid Bedouin Sign Language"}, ["sza"] = {"Semelai"}, ["szb"] = {"Ngalum"}, ["szc"] = {"Semaq Beri"}, ["sze"] = {"Seze"}, ["szg"] = {"Sengele"}, ["szl"] = {"Silesian"}, ["szn"] = {"Sula"}, ["szp"] = {"Suabo"}, ["szs"] = {"Solomon Islands Sign Language"}, ["szv"] = {"Isu (Fako Division)"}, ["szw"] = {"Sawai"}, ["szy"] = {"Sakizaya"}, ["taa"] = {"Lower Tanana"}, ["tab"] = {"Tabassaran"}, ["tac"] = {"Lowland Tarahumara"}, ["tad"] = {"Tause"}, ["tae"] = {"Tariana"}, ["taf"] = {"Tapirapé"}, ["tag"] = {"Tagoi"}, ["tai"] = {"Tai languages"}, ["taj"] = {"Eastern Tamang"}, ["tak"] = {"Tala"}, ["tal"] = {"Tal"}, ["tan"] = {"Tangale"}, ["tao"] = {"Yami"}, ["tap"] = {"Taabwa"}, ["taq"] = {"Tamasheq"}, ["tar"] = {"Central Tarahumara"}, ["tas"] = {"Tay Boi"}, ["tau"] = {"Upper Tanana"}, ["tav"] = {"Tatuyo"}, ["taw"] = {"Tai"}, ["tax"] = {"Tamki"}, ["tay"] = {"Atayal"}, ["taz"] = {"Tocho"}, ["tba"] = {"Aikanã"}, ["tbc"] = {"Takia"}, ["tbd"] = {"Kaki Ae"}, ["tbe"] = {"Tanimbili"}, ["tbf"] = {"Mandara"}, ["tbg"] = {"North Tairora"}, ["tbh"] = {"Dharawal", "Thurawal"}, ["tbi"] = {"Gaam"}, ["tbj"] = {"Tiang"}, ["tbk"] = {"Calamian Tagbanwa"}, ["tbl"] = {"Tboli"}, ["tbm"] = {"Tagbu"}, ["tbn"] = {"Barro Negro Tunebo"}, ["tbo"] = {"Tawala"}, ["tbp"] = {"Taworta", "Diebroud"}, ["tbq"] = {"Tibeto-Burman languages"}, ["tbr"] = {"Tumtum"}, ["tbs"] = {"Tanguat"}, ["tbt"] = {"Tembo (Kitembo)"}, ["tbu"] = {"Tubar"}, ["tbv"] = {"Tobo"}, ["tbw"] = {"Tagbanwa"}, ["tbx"] = {"Kapin"}, ["tby"] = {"Tabaru"}, ["tbz"] = {"Ditammari"}, ["tca"] = {"Ticuna"}, ["tcb"] = {"Tanacross"}, ["tcc"] = {"Datooga"}, ["tcd"] = {"Tafi"}, ["tce"] = {"Southern Tutchone"}, ["tcf"] = {"Malinaltepec Me'phaa", "Malinaltepec Tlapanec"}, ["tcg"] = {"Tamagario"}, ["tch"] = {"Turks And Caicos Creole English"}, ["tci"] = {"Wára"}, ["tck"] = {"Tchitchege"}, ["tcl"] = {"Taman (Myanmar)"}, ["tcm"] = {"Tanahmerah"}, ["tcn"] = {"Tichurong"}, ["tco"] = {"Taungyo"}, ["tcp"] = {"Tawr Chin"}, ["tcq"] = {"Kaiy"}, ["tcs"] = {"Torres Strait Creole", "Yumplatok"}, ["tct"] = {"T'en"}, ["tcu"] = {"Southeastern Tarahumara"}, ["tcw"] = {"Tecpatlán Totonac"}, ["tcx"] = {"Toda"}, ["tcy"] = {"Tulu"}, ["tcz"] = {"Thado Chin"}, ["tda"] = {"Tagdal"}, ["tdb"] = {"Panchpargania"}, ["tdc"] = {"Emberá-Tadó"}, ["tdd"] = {"Tai Nüa"}, ["tde"] = {"Tiranige Diga Dogon"}, ["tdf"] = {"Talieng"}, ["tdg"] = {"Western Tamang"}, ["tdh"] = {"Thulung"}, ["tdi"] = {"Tomadino"}, ["tdj"] = {"Tajio"}, ["tdk"] = {"Tambas"}, ["tdl"] = {"Sur"}, ["tdm"] = {"Taruma"}, ["tdn"] = {"Tondano"}, ["tdo"] = {"Teme"}, ["tdq"] = {"Tita"}, ["tdr"] = {"Todrah"}, ["tds"] = {"Doutai"}, ["tdt"] = {"Tetun Dili"}, ["tdv"] = {"Toro"}, ["tdx"] = {"Tandroy-Mahafaly Malagasy"}, ["tdy"] = {"Tadyawan"}, ["tea"] = {"Temiar"}, ["teb"] = {"Tetete"}, ["tec"] = {"Terik"}, ["ted"] = {"Tepo Krumen"}, ["tee"] = {"Huehuetla Tepehua"}, ["tef"] = {"Teressa"}, ["teg"] = {"Teke-Tege"}, ["teh"] = {"Tehuelche"}, ["tei"] = {"Torricelli"}, ["tek"] = {"Ibali Teke"}, ["tem"] = {"Timne"}, ["ten"] = {"Tama (Colombia)"}, ["teo"] = {"Teso"}, ["tep"] = {"Tepecano"}, ["teq"] = {"Temein"}, ["ter"] = {"Tereno"}, ["tes"] = {"Tengger"}, ["tet"] = {"Tetum"}, ["teu"] = {"Soo"}, ["tev"] = {"Teor"}, ["tew"] = {"Tewa (USA)"}, ["tex"] = {"Tennet"}, ["tey"] = {"Tulishi"}, ["tez"] = {"Tetserret"}, ["tfi"] = {"Tofin Gbe"}, ["tfn"] = {"Tanaina"}, ["tfo"] = {"Tefaro"}, ["tfr"] = {"Teribe"}, ["tft"] = {"Ternate"}, ["tga"] = {"Sagalla"}, ["tgb"] = {"Tobilung"}, ["tgc"] = {"Tigak"}, ["tgd"] = {"Ciwogai"}, ["tge"] = {"Eastern Gorkha Tamang"}, ["tgf"] = {"Chalikha"}, ["tgh"] = {"Tobagonian Creole English"}, ["tgi"] = {"Lawunuia"}, ["tgj"] = {"Tagin"}, ["tgn"] = {"Tandaganon"}, ["tgo"] = {"Sudest"}, ["tgp"] = {"Tangoa"}, ["tgq"] = {"Tring"}, ["tgr"] = {"Tareng"}, ["tgs"] = {"Nume"}, ["tgt"] = {"Central Tagbanwa"}, ["tgu"] = {"Tanggu"}, ["tgv"] = {"Tingui-Boto"}, ["tgw"] = {"Tagwana Senoufo"}, ["tgx"] = {"Tagish"}, ["tgy"] = {"Togoyo"}, ["tgz"] = {"Tagalaka"}, ["thd"] = {"Kuuk Thaayorre", "Thayore"}, ["the"] = {"Chitwania Tharu"}, ["thf"] = {"Thangmi"}, ["thh"] = {"Northern Tarahumara"}, ["thi"] = {"Tai Long"}, ["thk"] = {"Tharaka", "Kitharaka"}, ["thl"] = {"Dangaura Tharu"}, ["thm"] = {"Aheu"}, ["thn"] = {"Thachanadan"}, ["thp"] = {"Thompson", "Nłeʔkepmxcín", "Thompson River Salish"}, ["thq"] = {"Kochila Tharu"}, ["thr"] = {"Rana Tharu"}, ["ths"] = {"Thakali"}, ["tht"] = {"Tahltan", "Tāłtān"}, ["thu"] = {"Thuri"}, ["thv"] = {"Tahaggart Tamahaq"}, ["thy"] = {"Tha"}, ["thz"] = {"Tayart Tamajeq"}, ["tia"] = {"Tidikelt Tamazight"}, ["tic"] = {"Tira"}, ["tif"] = {"Tifal"}, ["tig"] = {"Tigre"}, ["tih"] = {"Timugon Murut"}, ["tii"] = {"Tiene"}, ["tij"] = {"Tilung"}, ["tik"] = {"Tikar"}, ["til"] = {"Tillamook"}, ["tim"] = {"Timbe"}, ["tin"] = {"Tindi"}, ["tio"] = {"Teop"}, ["tip"] = {"Trimuris"}, ["tiq"] = {"Tiéfo"}, ["tis"] = {"Masadiit Itneg"}, ["tit"] = {"Tinigua"}, ["tiu"] = {"Adasen"}, ["tiv"] = {"Tiv"}, ["tiw"] = {"Tiwi"}, ["tix"] = {"Southern Tiwa"}, ["tiy"] = {"Tiruray"}, ["tiz"] = {"Tai Hongjin"}, ["tja"] = {"Tajuasohn"}, ["tjg"] = {"Tunjung"}, ["tji"] = {"Northern Tujia"}, ["tjj"] = {"Tjungundji"}, ["tjl"] = {"Tai Laing"}, ["tjm"] = {"Timucua"}, ["tjn"] = {"Tonjon"}, ["tjo"] = {"Temacine Tamazight"}, ["tjp"] = {"Tjupany"}, ["tjs"] = {"Southern Tujia"}, ["tju"] = {"Tjurruru"}, ["tjw"] = {"Djabwurrung"}, ["tka"] = {"Truká"}, ["tkb"] = {"Buksa"}, ["tkd"] = {"Tukudede"}, ["tke"] = {"Takwane"}, ["tkf"] = {"Tukumanféd"}, ["tkg"] = {"Tesaka Malagasy"}, ["tkl"] = {"Tokelau"}, ["tkm"] = {"Takelma"}, ["tkn"] = {"Toku-No-Shima"}, ["tkp"] = {"Tikopia"}, ["tkq"] = {"Tee"}, ["tkr"] = {"Tsakhur"}, ["tks"] = {"Takestani"}, ["tkt"] = {"Kathoriya Tharu"}, ["tku"] = {"Upper Necaxa Totonac"}, ["tkv"] = {"Mur Pano"}, ["tkw"] = {"Teanu"}, ["tkx"] = {"Tangko"}, ["tkz"] = {"Takua"}, ["tla"] = {"Southwestern Tepehuan"}, ["tlb"] = {"Tobelo"}, ["tlc"] = {"Yecuatla Totonac"}, ["tld"] = {"Talaud"}, ["tlf"] = {"Telefol"}, ["tlg"] = {"Tofanma"}, ["tlh"] = {"Klingon", "tlhIngan Hol"}, ["tli"] = {"Tlingit"}, ["tlj"] = {"Talinga-Bwisi"}, ["tlk"] = {"Taloki"}, ["tll"] = {"Tetela"}, ["tlm"] = {"Tolomako"}, ["tln"] = {"Talondo'"}, ["tlo"] = {"Talodi"}, ["tlp"] = {"Filomena Mata-Coahuitlán Totonac"}, ["tlq"] = {"Tai Loi"}, ["tlr"] = {"Talise"}, ["tls"] = {"Tambotalo"}, ["tlt"] = {"Sou Nama", "Teluti"}, ["tlu"] = {"Tulehu"}, ["tlv"] = {"Taliabu"}, ["tlx"] = {"Khehek"}, ["tly"] = {"Talysh"}, ["tma"] = {"Tama (Chad)"}, ["tmb"] = {"Katbol", "Avava"}, ["tmc"] = {"Tumak"}, ["tmd"] = {"Haruai"}, ["tme"] = {"Tremembé"}, ["tmf"] = {"Toba-Maskoy"}, ["tmg"] = {"Ternateño"}, ["tmh"] = {"Tamashek"}, ["tmi"] = {"Tutuba"}, ["tmj"] = {"Samarokena"}, ["tml"] = {"Tamnim Citak"}, ["tmm"] = {"Tai Thanh"}, ["tmn"] = {"Taman (Indonesia)"}, ["tmo"] = {"Temoq"}, ["tmq"] = {"Tumleo"}, ["tmr"] = {"Jewish Babylonian Aramaic (ca. 200-1200 CE)"}, ["tms"] = {"Tima"}, ["tmt"] = {"Tasmate"}, ["tmu"] = {"Iau"}, ["tmv"] = {"Tembo (Motembo)"}, ["tmw"] = {"Temuan"}, ["tmy"] = {"Tami"}, ["tmz"] = {"Tamanaku"}, ["tna"] = {"Tacana"}, ["tnb"] = {"Western Tunebo"}, ["tnc"] = {"Tanimuca-Retuarã"}, ["tnd"] = {"Angosturas Tunebo"}, ["tng"] = {"Tobanga"}, ["tnh"] = {"Maiani"}, ["tni"] = {"Tandia"}, ["tnk"] = {"Kwamera"}, ["tnl"] = {"Lenakel"}, ["tnm"] = {"Tabla"}, ["tnn"] = {"North Tanna"}, ["tno"] = {"Toromono"}, ["tnp"] = {"Whitesands"}, ["tnq"] = {"Taino"}, ["tnr"] = {"Ménik"}, ["tns"] = {"Tenis"}, ["tnt"] = {"Tontemboan"}, ["tnu"] = {"Tay Khang"}, ["tnv"] = {"Tangchangya"}, ["tnw"] = {"Tonsawang"}, ["tnx"] = {"Tanema"}, ["tny"] = {"Tongwe"}, ["tnz"] = {"Ten'edn"}, ["tob"] = {"Toba"}, ["toc"] = {"Coyutla Totonac"}, ["tod"] = {"Toma"}, ["tof"] = {"Gizrra"}, ["tog"] = {"Tonga (Nyasa)"}, ["toh"] = {"Gitonga"}, ["toi"] = {"Tonga (Zambia)"}, ["toj"] = {"Tojolabal"}, ["tok"] = {"Toki Pona"}, ["tol"] = {"Tolowa"}, ["tom"] = {"Tombulu"}, ["too"] = {"Xicotepec De Juárez Totonac"}, ["top"] = {"Papantla Totonac"}, ["toq"] = {"Toposa"}, ["tor"] = {"Togbo-Vara Banda"}, ["tos"] = {"Highland Totonac"}, ["tou"] = {"Tho"}, ["tov"] = {"Upper Taromi"}, ["tow"] = {"Jemez"}, ["tox"] = {"Tobian"}, ["toy"] = {"Topoiyo"}, ["toz"] = {"To"}, ["tpa"] = {"Taupota"}, ["tpc"] = {"Azoyú Me'phaa", "Azoyú Tlapanec"}, ["tpe"] = {"Tippera"}, ["tpf"] = {"Tarpia"}, ["tpg"] = {"Kula"}, ["tpi"] = {"Tok Pisin"}, ["tpj"] = {"Tapieté"}, ["tpk"] = {"Tupinikin"}, ["tpl"] = {"Tlacoapa Me'phaa", "Tlacoapa Tlapanec"}, ["tpm"] = {"Tampulma"}, ["tpn"] = {"Tupinambá"}, ["tpo"] = {"Tai Pao"}, ["tpp"] = {"Pisaflores Tepehua"}, ["tpq"] = {"Tukpa"}, ["tpr"] = {"Tuparí"}, ["tpt"] = {"Tlachichilco Tepehua"}, ["tpu"] = {"Tampuan"}, ["tpv"] = {"Tanapag"}, ["tpx"] = {"Acatepec Me'phaa", "Acatepec Tlapanec"}, ["tpy"] = {"Trumai"}, ["tpz"] = {"Tinputz"}, ["tqb"] = {"Tembé"}, ["tql"] = {"Lehali"}, ["tqm"] = {"Turumsa"}, ["tqn"] = {"Tenino"}, ["tqo"] = {"Toaripi"}, ["tqp"] = {"Tomoip"}, ["tqq"] = {"Tunni"}, ["tqr"] = {"Torona"}, ["tqt"] = {"Western Totonac"}, ["tqu"] = {"Touo"}, ["tqw"] = {"Tonkawa"}, ["tra"] = {"Tirahi"}, ["trb"] = {"Terebu"}, ["trc"] = {"Copala Triqui"}, ["trd"] = {"Turi"}, ["tre"] = {"East Tarangan"}, ["trf"] = {"Trinidadian Creole English"}, ["trg"] = {"Lishán Didán"}, ["trh"] = {"Turaka"}, ["tri"] = {"Trió"}, ["trj"] = {"Toram"}, ["trk"] = {"Turkic languages"}, ["trl"] = {"Traveller Scottish"}, ["trm"] = {"Tregami"}, ["trn"] = {"Trinitario"}, ["tro"] = {"Tarao Naga"}, ["trp"] = {"Kok Borok"}, ["trq"] = {"San Martín Itunyoso Triqui"}, ["trr"] = {"Taushiro"}, ["trs"] = {"Chicahuaxtla Triqui"}, ["trt"] = {"Tunggare"}, ["tru"] = {"Turoyo", "Surayt"}, ["trv"] = {"Sediq", "Seediq", "Taroko"}, ["trw"] = {"Torwali"}, ["trx"] = {"Tringgus-Sembaan Bidayuh"}, ["try"] = {"Turung"}, ["trz"] = {"Torá"}, ["tsa"] = {"Tsaangi"}, ["tsb"] = {"Tsamai"}, ["tsc"] = {"Tswa"}, ["tsd"] = {"Tsakonian"}, ["tse"] = {"Tunisian Sign Language"}, ["tsg"] = {"Tausug"}, ["tsh"] = {"Tsuvan"}, ["tsi"] = {"Tsimshian"}, ["tsj"] = {"Tshangla"}, ["tsk"] = {"Tseku"}, ["tsl"] = {"Ts'ün-Lao"}, ["tsm"] = {"Turkish Sign Language", "Türk İşaret Dili"}, ["tsp"] = {"Northern Toussian"}, ["tsq"] = {"Thai Sign Language"}, ["tsr"] = {"Akei"}, ["tss"] = {"Taiwan Sign Language"}, ["tst"] = {"Tondi Songway Kiini"}, ["tsu"] = {"Tsou"}, ["tsv"] = {"Tsogo"}, ["tsw"] = {"Tsishingini"}, ["tsx"] = {"Mubami"}, ["tsy"] = {"Tebul Sign Language"}, ["tsz"] = {"Purepecha"}, ["tta"] = {"Tutelo"}, ["ttb"] = {"Gaa"}, ["ttc"] = {"Tektiteko"}, ["ttd"] = {"Tauade"}, ["tte"] = {"Bwanabwana"}, ["ttf"] = {"Tuotomb"}, ["ttg"] = {"Tutong"}, ["tth"] = {"Upper Ta'oih"}, ["tti"] = {"Tobati"}, ["ttj"] = {"Tooro"}, ["ttk"] = {"Totoro"}, ["ttl"] = {"Totela"}, ["ttm"] = {"Northern Tutchone"}, ["ttn"] = {"Towei"}, ["tto"] = {"Lower Ta'oih"}, ["ttp"] = {"Tombelala"}, ["ttq"] = {"Tawallammat Tamajaq"}, ["ttr"] = {"Tera"}, ["tts"] = {"Northeastern Thai"}, ["ttt"] = {"Muslim Tat"}, ["ttu"] = {"Torau"}, ["ttv"] = {"Titan"}, ["ttw"] = {"Long Wat"}, ["tty"] = {"Sikaritai"}, ["ttz"] = {"Tsum"}, ["tua"] = {"Wiarumus"}, ["tub"] = {"Tübatulabal"}, ["tuc"] = {"Mutu"}, ["tud"] = {"Tuxá"}, ["tue"] = {"Tuyuca"}, ["tuf"] = {"Central Tunebo"}, ["tug"] = {"Tunia"}, ["tuh"] = {"Taulil"}, ["tui"] = {"Tupuri"}, ["tuj"] = {"Tugutil"}, ["tul"] = {"Tula"}, ["tum"] = {"Tumbuka"}, ["tun"] = {"Tunica"}, ["tuo"] = {"Tucano"}, ["tup"] = {"Tupi languages"}, ["tuq"] = {"Tedaga"}, ["tus"] = {"Tuscarora"}, ["tut"] = {"Altaic languages"}, ["tuu"] = {"Tututni"}, ["tuv"] = {"Turkana"}, ["tuw"] = {"Tungus languages"}, ["tux"] = {"Tuxináwa"}, ["tuy"] = {"Tugen"}, ["tuz"] = {"Turka"}, ["tva"] = {"Vaghua"}, ["tvd"] = {"Tsuvadi"}, ["tve"] = {"Te'un"}, ["tvi"] = {"Tulai"}, ["tvk"] = {"Southeast Ambrym"}, ["tvl"] = {"Tuvalu"}, ["tvm"] = {"Tela-Masbuar"}, ["tvn"] = {"Tavoyan"}, ["tvo"] = {"Tidore"}, ["tvs"] = {"Taveta"}, ["tvt"] = {"Tutsa Naga"}, ["tvu"] = {"Tunen"}, ["tvw"] = {"Sedoa"}, ["tvx"] = {"Taivoan"}, ["tvy"] = {"Timor Pidgin"}, ["twa"] = {"Twana"}, ["twb"] = {"Western Tawbuid"}, ["twc"] = {"Teshenawa"}, ["twd"] = {"Twents"}, ["twe"] = {"Tewa (Indonesia)"}, ["twf"] = {"Northern Tiwa"}, ["twg"] = {"Tereweng"}, ["twh"] = {"Tai Dón"}, ["twl"] = {"Tawara"}, ["twm"] = {"Tawang Monpa"}, ["twn"] = {"Twendi"}, ["two"] = {"Tswapong"}, ["twp"] = {"Ere"}, ["twq"] = {"Tasawaq"}, ["twr"] = {"Southwestern Tarahumara"}, ["twt"] = {"Turiwára"}, ["twu"] = {"Termanu"}, ["tww"] = {"Tuwari"}, ["twx"] = {"Tewe"}, ["twy"] = {"Tawoyan"}, ["txa"] = {"Tombonuo"}, ["txb"] = {"Tokharian B"}, ["txc"] = {"Tsetsaut"}, ["txe"] = {"Totoli"}, ["txg"] = {"Tangut"}, ["txh"] = {"Thracian"}, ["txi"] = {"Ikpeng"}, ["txj"] = {"Tarjumo"}, ["txm"] = {"Tomini"}, ["txn"] = {"West Tarangan"}, ["txo"] = {"Toto"}, ["txq"] = {"Tii"}, ["txr"] = {"Tartessian"}, ["txs"] = {"Tonsea"}, ["txt"] = {"Citak"}, ["txu"] = {"Kayapó"}, ["txx"] = {"Tatana"}, ["txy"] = {"Tanosy Malagasy"}, ["tya"] = {"Tauya"}, ["tye"] = {"Kyanga"}, ["tyh"] = {"O'du"}, ["tyi"] = {"Teke-Tsaayi"}, ["tyj"] = {"Tai Do", "Tai Yo"}, ["tyl"] = {"Thu Lao"}, ["tyn"] = {"Kombai"}, ["typ"] = {"Thaypan"}, ["tyr"] = {"Tai Daeng"}, ["tys"] = {"Tày Sa Pa"}, ["tyt"] = {"Tày Tac"}, ["tyu"] = {"Kua"}, ["tyv"] = {"Tuvinian"}, ["tyx"] = {"Teke-Tyee"}, ["tyy"] = {"Tiyaa"}, ["tyz"] = {"Tày"}, ["tza"] = {"Tanzanian Sign Language"}, ["tzh"] = {"Tzeltal"}, ["tzj"] = {"Tz'utujil"}, ["tzl"] = {"Talossan"}, ["tzm"] = {"Central Atlas Tamazight"}, ["tzn"] = {"Tugun"}, ["tzo"] = {"Tzotzil"}, ["tzx"] = {"Tabriak"}, ["uam"] = {"Uamué"}, ["uan"] = {"Kuan"}, ["uar"] = {"Tairuma"}, ["uba"] = {"Ubang"}, ["ubi"] = {"Ubi"}, ["ubl"] = {"Buhi'non Bikol"}, ["ubr"] = {"Ubir"}, ["ubu"] = {"Umbu-Ungu"}, ["uby"] = {"Ubykh"}, ["uda"] = {"Uda"}, ["ude"] = {"Udihe"}, ["udg"] = {"Muduga"}, ["udi"] = {"Udi"}, ["udj"] = {"Ujir"}, ["udl"] = {"Wuzlam"}, ["udm"] = {"Udmurt"}, ["udu"] = {"Uduk"}, ["ues"] = {"Kioko"}, ["ufi"] = {"Ufim"}, ["uga"] = {"Ugaritic"}, ["ugb"] = {"Kuku-Ugbanh"}, ["uge"] = {"Ughele"}, ["ugh"] = {"Kubachi"}, ["ugn"] = {"Ugandan Sign Language"}, ["ugo"] = {"Ugong"}, ["ugy"] = {"Uruguayan Sign Language"}, ["uha"] = {"Uhami"}, ["uhn"] = {"Damal"}, ["uis"] = {"Uisai"}, ["uiv"] = {"Iyive"}, ["uji"] = {"Tanjijili"}, ["uka"] = {"Kaburi"}, ["ukg"] = {"Ukuriguma"}, ["ukh"] = {"Ukhwejo"}, ["uki"] = {"Kui (India)"}, ["ukk"] = {"Muak Sa-aak"}, ["ukl"] = {"Ukrainian Sign Language"}, ["ukp"] = {"Ukpe-Bayobiri"}, ["ukq"] = {"Ukwa"}, ["uks"] = {"Urubú-Kaapor Sign Language", "Kaapor Sign Language"}, ["uku"] = {"Ukue"}, ["ukv"] = {"Kuku"}, ["ukw"] = {"Ukwuani-Aboh-Ndoni"}, ["uky"] = {"Kuuk-Yak"}, ["ula"] = {"Fungwa"}, ["ulb"] = {"Ulukwumi"}, ["ulc"] = {"Ulch"}, ["ule"] = {"Lule"}, ["ulf"] = {"Usku", "Afra"}, ["uli"] = {"Ulithian"}, ["ulk"] = {"Meriam Mir"}, ["ull"] = {"Ullatan"}, ["ulm"] = {"Ulumanda'"}, ["uln"] = {"Unserdeutsch"}, ["ulu"] = {"Uma' Lung"}, ["ulw"] = {"Ulwa"}, ["uly"] = {"Buli"}, ["uma"] = {"Umatilla"}, ["umb"] = {"Umbundu"}, ["umc"] = {"Marrucinian"}, ["umd"] = {"Umbindhamu"}, ["umg"] = {"Morrobalama", "Umbuygamu"}, ["umi"] = {"Ukit"}, ["umm"] = {"Umon"}, ["umn"] = {"Makyan Naga"}, ["umo"] = {"Umotína"}, ["ump"] = {"Umpila"}, ["umr"] = {"Umbugarla"}, ["ums"] = {"Pendau"}, ["umu"] = {"Munsee"}, ["una"] = {"North Watut"}, ["und"] = {"Undetermined"}, ["une"] = {"Uneme"}, ["ung"] = {"Ngarinyin"}, ["uni"] = {"Uni"}, ["unk"] = {"Enawené-Nawé"}, ["unm"] = {"Unami"}, ["unn"] = {"Kurnai"}, ["unr"] = {"Mundari"}, ["unu"] = {"Unubahe"}, ["unx"] = {"Munda"}, ["unz"] = {"Unde Kaili"}, ["uon"] = {"Kulon"}, ["upi"] = {"Umeda"}, ["upv"] = {"Uripiv-Wala-Rano-Atchin"}, ["ura"] = {"Urarina"}, ["urb"] = {"Urubú-Kaapor", "Kaapor"}, ["urc"] = {"Urningangg"}, ["ure"] = {"Uru"}, ["urf"] = {"Uradhi"}, ["urg"] = {"Urigina"}, ["urh"] = {"Urhobo"}, ["uri"] = {"Urim"}, ["urj"] = {"Uralic languages"}, ["urk"] = {"Urak Lawoi'"}, ["url"] = {"Urali"}, ["urm"] = {"Urapmin"}, ["urn"] = {"Uruangnirin"}, ["uro"] = {"Ura (Papua New Guinea)"}, ["urp"] = {"Uru-Pa-In"}, ["urr"] = {"Lehalurup", "Löyöp"}, ["urt"] = {"Urat"}, ["uru"] = {"Urumi"}, ["urv"] = {"Uruava"}, ["urw"] = {"Sop"}, ["urx"] = {"Urimo"}, ["ury"] = {"Orya"}, ["urz"] = {"Uru-Eu-Wau-Wau"}, ["usa"] = {"Usarufa"}, ["ush"] = {"Ushojo"}, ["usi"] = {"Usui"}, ["usk"] = {"Usaghade"}, ["usp"] = {"Uspanteco"}, ["uss"] = {"us-Saare"}, ["usu"] = {"Uya"}, ["uta"] = {"Otank"}, ["ute"] = {"Ute-Southern Paiute"}, ["uth"] = {"ut-Hun"}, ["utp"] = {"Amba (Solomon Islands)"}, ["utr"] = {"Etulo"}, ["utu"] = {"Utu"}, ["uum"] = {"Urum"}, ["uur"] = {"Ura (Vanuatu)"}, ["uuu"] = {"U"}, ["uve"] = {"West Uvean", "Fagauvea"}, ["uvh"] = {"Uri"}, ["uvl"] = {"Lote"}, ["uwa"] = {"Kuku-Uwanh"}, ["uya"] = {"Doko-Uyanga"}, ["uzn"] = {"Northern Uzbek"}, ["uzs"] = {"Southern Uzbek"}, ["vaa"] = {"Vaagri Booli"}, ["vae"] = {"Vale"}, ["vaf"] = {"Vafsi"}, ["vag"] = {"Vagla"}, ["vah"] = {"Varhadi-Nagpuri"}, ["vai"] = {"Vai"}, ["vaj"] = {"Sekele", "Northwestern ǃKung", "Vasekele"}, ["val"] = {"Vehes"}, ["vam"] = {"Vanimo"}, ["van"] = {"Valman"}, ["vao"] = {"Vao"}, ["vap"] = {"Vaiphei"}, ["var"] = {"Huarijio"}, ["vas"] = {"Vasavi"}, ["vau"] = {"Vanuma"}, ["vav"] = {"Varli"}, ["vay"] = {"Wayu"}, ["vbb"] = {"Southeast Babar"}, ["vbk"] = {"Southwestern Bontok"}, ["vec"] = {"Venetian"}, ["ved"] = {"Veddah"}, ["vel"] = {"Veluws"}, ["vem"] = {"Vemgo-Mabas"}, ["veo"] = {"Ventureño"}, ["vep"] = {"Veps"}, ["ver"] = {"Mom Jango"}, ["vgr"] = {"Vaghri"}, ["vgt"] = {"Vlaamse Gebarentaal", "Flemish Sign Language"}, ["vic"] = {"Virgin Islands Creole English"}, ["vid"] = {"Vidunda"}, ["vif"] = {"Vili"}, ["vig"] = {"Viemo"}, ["vil"] = {"Vilela"}, ["vin"] = {"Vinza"}, ["vis"] = {"Vishavan"}, ["vit"] = {"Viti"}, ["viv"] = {"Iduna"}, ["vjk"] = {"Bajjika"}, ["vka"] = {"Kariyarra"}, ["vkj"] = {"Kujarge"}, ["vkk"] = {"Kaur"}, ["vkl"] = {"Kulisusu"}, ["vkm"] = {"Kamakan"}, ["vkn"] = {"Koro Nulu"}, ["vko"] = {"Kodeoha"}, ["vkp"] = {"Korlai Creole Portuguese"}, ["vkt"] = {"Tenggarong Kutai Malay"}, ["vku"] = {"Kurrama"}, ["vkz"] = {"Koro Zuba"}, ["vlp"] = {"Valpei"}, ["vls"] = {"Vlaams"}, ["vma"] = {"Martuyhunira"}, ["vmb"] = {"Barbaram"}, ["vmc"] = {"Juxtlahuaca Mixtec"}, ["vmd"] = {"Mudu Koraga"}, ["vme"] = {"East Masela"}, ["vmf"] = {"Mainfränkisch"}, ["vmg"] = {"Lungalunga"}, ["vmh"] = {"Maraghei"}, ["vmi"] = {"Miwa"}, ["vmj"] = {"Ixtayutla Mixtec"}, ["vmk"] = {"Makhuwa-Shirima"}, ["vml"] = {"Malgana"}, ["vmm"] = {"Mitlatongo Mixtec"}, ["vmp"] = {"Soyaltepec Mazatec"}, ["vmq"] = {"Soyaltepec Mixtec"}, ["vmr"] = {"Marenje"}, ["vms"] = {"Moksela"}, ["vmu"] = {"Muluridyi"}, ["vmv"] = {"Valley Maidu"}, ["vmw"] = {"Makhuwa"}, ["vmx"] = {"Tamazola Mixtec"}, ["vmy"] = {"Ayautla Mazatec"}, ["vmz"] = {"Mazatlán Mazatec"}, ["vnk"] = {"Vano", "Lovono"}, ["vnm"] = {"Vinmavis", "Neve'ei"}, ["vnp"] = {"Vunapu"}, ["vor"] = {"Voro"}, ["vot"] = {"Votic"}, ["vra"] = {"Vera'a"}, ["vro"] = {"Võro"}, ["vrs"] = {"Varisi"}, ["vrt"] = {"Burmbar", "Banam Bay"}, ["vsi"] = {"Moldova Sign Language"}, ["vsl"] = {"Venezuelan Sign Language"}, ["vsn"] = {"Vedic Sanskrit"}, ["vsv"] = {"Valencian Sign Language", "Llengua de signes valenciana"}, ["vto"] = {"Vitou"}, ["vum"] = {"Vumbu"}, ["vun"] = {"Vunjo"}, ["vut"] = {"Vute"}, ["vwa"] = {"Awa (China)"}, ["waa"] = {"Walla Walla"}, ["wab"] = {"Wab"}, ["wac"] = {"Wasco-Wishram"}, ["wad"] = {"Wamesa", "Wondama"}, ["wae"] = {"Walser"}, ["waf"] = {"Wakoná"}, ["wag"] = {"Wa'ema"}, ["wah"] = {"Watubela"}, ["wai"] = {"Wares"}, ["waj"] = {"Waffa"}, ["wak"] = {"Wakashan languages"}, ["wal"] = {"Wolaytta", "Wolaitta"}, ["wam"] = {"Wampanoag"}, ["wan"] = {"Wan"}, ["wao"] = {"Wappo"}, ["wap"] = {"Wapishana"}, ["waq"] = {"Wagiman"}, ["war"] = {"Waray (Philippines)"}, ["was"] = {"Washo"}, ["wat"] = {"Kaninuwa"}, ["wau"] = {"Waurá"}, ["wav"] = {"Waka"}, ["waw"] = {"Waiwai"}, ["wax"] = {"Watam", "Marangis"}, ["way"] = {"Wayana"}, ["waz"] = {"Wampur"}, ["wba"] = {"Warao"}, ["wbb"] = {"Wabo"}, ["wbe"] = {"Waritai"}, ["wbf"] = {"Wara"}, ["wbh"] = {"Wanda"}, ["wbi"] = {"Vwanji"}, ["wbj"] = {"Alagwa"}, ["wbk"] = {"Waigali"}, ["wbl"] = {"Wakhi"}, ["wbm"] = {"Wa"}, ["wbp"] = {"Warlpiri"}, ["wbq"] = {"Waddar"}, ["wbr"] = {"Wagdi"}, ["wbs"] = {"West Bengal Sign Language"}, ["wbt"] = {"Warnman"}, ["wbv"] = {"Wajarri"}, ["wbw"] = {"Woi"}, ["wca"] = {"Yanomámi"}, ["wci"] = {"Waci Gbe"}, ["wdd"] = {"Wandji"}, ["wdg"] = {"Wadaginam"}, ["wdj"] = {"Wadjiginy"}, ["wdk"] = {"Wadikali"}, ["wdt"] = {"Wendat"}, ["wdu"] = {"Wadjigu"}, ["wdy"] = {"Wadjabangayi"}, ["wea"] = {"Wewaw"}, ["wec"] = {"Wè Western"}, ["wed"] = {"Wedau"}, ["weg"] = {"Wergaia"}, ["weh"] = {"Weh"}, ["wei"] = {"Kiunum"}, ["wem"] = {"Weme Gbe"}, ["wen"] = {"Sorbian languages"}, ["weo"] = {"Wemale"}, ["wep"] = {"Westphalien"}, ["wer"] = {"Weri"}, ["wes"] = {"Cameroon Pidgin"}, ["wet"] = {"Perai"}, ["weu"] = {"Rawngtu Chin"}, ["wew"] = {"Wejewa"}, ["wfg"] = {"Yafi", "Zorop"}, ["wga"] = {"Wagaya"}, ["wgb"] = {"Wagawaga"}, ["wgg"] = {"Wangkangurru", "Wangganguru"}, ["wgi"] = {"Wahgi"}, ["wgo"] = {"Waigeo"}, ["wgu"] = {"Wirangu"}, ["wgy"] = {"Warrgamay"}, ["wha"] = {"Sou Upaa", "Manusela"}, ["whg"] = {"North Wahgi"}, ["whk"] = {"Wahau Kenyah"}, ["whu"] = {"Wahau Kayan"}, ["wib"] = {"Southern Toussian"}, ["wic"] = {"Wichita"}, ["wie"] = {"Wik-Epa"}, ["wif"] = {"Wik-Keyangan"}, ["wig"] = {"Wik Ngathan"}, ["wih"] = {"Wik-Me'anha"}, ["wii"] = {"Minidien"}, ["wij"] = {"Wik-Iiyanh"}, ["wik"] = {"Wikalkan"}, ["wil"] = {"Wilawila"}, ["wim"] = {"Wik-Mungkan"}, ["win"] = {"Ho-Chunk"}, ["wir"] = {"Wiraféd"}, ["wiu"] = {"Wiru"}, ["wiv"] = {"Vitu"}, ["wiy"] = {"Wiyot"}, ["wja"] = {"Waja"}, ["wji"] = {"Warji"}, ["wka"] = {"Kw'adza"}, ["wkb"] = {"Kumbaran"}, ["wkd"] = {"Wakde", "Mo"}, ["wkl"] = {"Kalanadi"}, ["wkr"] = {"Keerray-Woorroong"}, ["wku"] = {"Kunduvadi"}, ["wkw"] = {"Wakawaka"}, ["wky"] = {"Wangkayutyuru"}, ["wla"] = {"Walio"}, ["wlc"] = {"Mwali Comorian"}, ["wle"] = {"Wolane"}, ["wlg"] = {"Kunbarlang"}, ["wlh"] = {"Welaun"}, ["wli"] = {"Waioli"}, ["wlk"] = {"Wailaki"}, ["wll"] = {"Wali (Sudan)"}, ["wlm"] = {"Middle Welsh"}, ["wlo"] = {"Wolio"}, ["wlr"] = {"Wailapa"}, ["wls"] = {"Wallisian"}, ["wlu"] = {"Wuliwuli"}, ["wlv"] = {"Wichí Lhamtés Vejoz"}, ["wlw"] = {"Walak"}, ["wlx"] = {"Wali (Ghana)"}, ["wly"] = {"Waling"}, ["wma"] = {"Mawa (Nigeria)"}, ["wmb"] = {"Wambaya"}, ["wmc"] = {"Wamas"}, ["wmd"] = {"Mamaindé"}, ["wme"] = {"Wambule"}, ["wmg"] = {"Western Minyag"}, ["wmh"] = {"Waima'a"}, ["wmi"] = {"Wamin"}, ["wmm"] = {"Maiwa (Indonesia)"}, ["wmn"] = {"Waamwang"}, ["wmo"] = {"Wom (Papua New Guinea)"}, ["wms"] = {"Wambon"}, ["wmt"] = {"Walmajarri"}, ["wmw"] = {"Mwani"}, ["wmx"] = {"Womo"}, ["wnb"] = {"Mokati"}, ["wnc"] = {"Wantoat"}, ["wnd"] = {"Wandarang"}, ["wne"] = {"Waneci"}, ["wng"] = {"Wanggom"}, ["wni"] = {"Ndzwani Comorian"}, ["wnk"] = {"Wanukaka"}, ["wnm"] = {"Wanggamala"}, ["wnn"] = {"Wunumara"}, ["wno"] = {"Wano"}, ["wnp"] = {"Wanap"}, ["wnu"] = {"Usan"}, ["wnw"] = {"Wintu"}, ["wny"] = {"Wanyi", "Waanyi"}, ["woa"] = {"Kuwema", "Tyaraity"}, ["wob"] = {"Wè Northern"}, ["woc"] = {"Wogeo"}, ["wod"] = {"Wolani"}, ["woe"] = {"Woleaian"}, ["wof"] = {"Gambian Wolof"}, ["wog"] = {"Wogamusin"}, ["woi"] = {"Kamang"}, ["wok"] = {"Longto"}, ["wom"] = {"Wom (Nigeria)"}, ["won"] = {"Wongo"}, ["woo"] = {"Manombai"}, ["wor"] = {"Woria"}, ["wos"] = {"Hanga Hundi"}, ["wow"] = {"Wawonii"}, ["woy"] = {"Weyto"}, ["wpc"] = {"Maco"}, ["wrb"] = {"Waluwarra", "Warluwara"}, ["wrg"] = {"Warungu", "Gudjal"}, ["wrh"] = {"Wiradjuri"}, ["wri"] = {"Wariyangga"}, ["wrk"] = {"Garrwa"}, ["wrl"] = {"Warlmanpa"}, ["wrm"] = {"Warumungu"}, ["wrn"] = {"Warnang"}, ["wro"] = {"Worrorra"}, ["wrp"] = {"Waropen"}, ["wrr"] = {"Wardaman"}, ["wrs"] = {"Waris"}, ["wru"] = {"Waru"}, ["wrv"] = {"Waruna"}, ["wrw"] = {"Gugu Warra"}, ["wrx"] = {"Wae Rana"}, ["wry"] = {"Merwari"}, ["wrz"] = {"Waray (Australia)"}, ["wsa"] = {"Warembori"}, ["wsg"] = {"Adilabad Gondi"}, ["wsi"] = {"Wusi"}, ["wsk"] = {"Waskia"}, ["wsr"] = {"Owenia"}, ["wss"] = {"Wasa"}, ["wsu"] = {"Wasu"}, ["wsv"] = {"Wotapuri-Katarqalai"}, ["wtb"] = {"Matambwe"}, ["wtf"] = {"Watiwa"}, ["wth"] = {"Wathawurrung"}, ["wti"] = {"Berta"}, ["wtk"] = {"Watakataui"}, ["wtm"] = {"Mewati"}, ["wtw"] = {"Wotu"}, ["wua"] = {"Wikngenchera"}, ["wub"] = {"Wunambal"}, ["wud"] = {"Wudu"}, ["wuh"] = {"Wutunhua"}, ["wul"] = {"Silimo"}, ["wum"] = {"Wumbvu"}, ["wun"] = {"Bungu"}, ["wur"] = {"Wurrugu"}, ["wut"] = {"Wutung"}, ["wuu"] = {"Wu Chinese"}, ["wuv"] = {"Wuvulu-Aua"}, ["wux"] = {"Wulna"}, ["wuy"] = {"Wauyai"}, ["wwa"] = {"Waama"}, ["wwb"] = {"Wakabunga"}, ["wwo"] = {"Wetamut", "Dorig"}, ["wwr"] = {"Warrwa"}, ["www"] = {"Wawa"}, ["wxa"] = {"Waxianghua"}, ["wxw"] = {"Wardandi"}, ["wyb"] = {"Wangaaybuwan-Ngiyambaa"}, ["wyi"] = {"Woiwurrung"}, ["wym"] = {"Wymysorys"}, ["wyn"] = {"Wyandot"}, ["wyr"] = {"Wayoró"}, ["wyy"] = {"Western Fijian"}, ["xaa"] = {"Andalusian Arabic"}, ["xab"] = {"Sambe"}, ["xac"] = {"Kachari"}, ["xad"] = {"Adai"}, ["xae"] = {"Aequian"}, ["xag"] = {"Aghwan"}, ["xai"] = {"Kaimbé"}, ["xaj"] = {"Ararandewára"}, ["xak"] = {"Máku"}, ["xal"] = {"Kalmyk", "Oirat"}, ["xam"] = {"ǀXam"}, ["xan"] = {"Xamtanga"}, ["xao"] = {"Khao"}, ["xap"] = {"Apalachee"}, ["xaq"] = {"Aquitanian"}, ["xar"] = {"Karami"}, ["xas"] = {"Kamas"}, ["xat"] = {"Katawixi"}, ["xau"] = {"Kauwera"}, ["xav"] = {"Xavánte"}, ["xaw"] = {"Kawaiisu"}, ["xay"] = {"Kayan Mahakam"}, ["xbb"] = {"Lower Burdekin"}, ["xbc"] = {"Bactrian"}, ["xbd"] = {"Bindal"}, ["xbe"] = {"Bigambal"}, ["xbg"] = {"Bunganditj"}, ["xbi"] = {"Kombio"}, ["xbj"] = {"Birrpayi"}, ["xbm"] = {"Middle Breton"}, ["xbn"] = {"Kenaboi"}, ["xbo"] = {"Bolgarian"}, ["xbp"] = {"Bibbulman"}, ["xbr"] = {"Kambera"}, ["xbw"] = {"Kambiwá"}, ["xby"] = {"Batjala", "Batyala"}, ["xcb"] = {"Cumbric"}, ["xcc"] = {"Camunic"}, ["xce"] = {"Celtiberian"}, ["xcg"] = {"Cisalpine Gaulish"}, ["xch"] = {"Chemakum", "Chimakum"}, ["xcl"] = {"Classical Armenian"}, ["xcm"] = {"Comecrudo"}, ["xcn"] = {"Cotoname"}, ["xco"] = {"Chorasmian"}, ["xcr"] = {"Carian"}, ["xct"] = {"Classical Tibetan"}, ["xcu"] = {"Curonian"}, ["xcv"] = {"Chuvantsy"}, ["xcw"] = {"Coahuilteco"}, ["xcy"] = {"Cayuse"}, ["xda"] = {"Darkinyung"}, ["xdc"] = {"Dacian"}, ["xdk"] = {"Dharuk"}, ["xdm"] = {"Edomite"}, ["xdo"] = {"Kwandu"}, ["xdq"] = {"Kaitag"}, ["xdy"] = {"Malayic Dayak"}, ["xeb"] = {"Eblan"}, ["xed"] = {"Hdi"}, ["xeg"] = {"ǁXegwi"}, ["xel"] = {"Kelo"}, ["xem"] = {"Kembayan"}, ["xep"] = {"Epi-Olmec"}, ["xer"] = {"Xerénte"}, ["xes"] = {"Kesawai"}, ["xet"] = {"Xetá"}, ["xeu"] = {"Keoru-Ahia"}, ["xfa"] = {"Faliscan"}, ["xga"] = {"Galatian"}, ["xgb"] = {"Gbin"}, ["xgd"] = {"Gudang"}, ["xgf"] = {"Gabrielino-Fernandeño"}, ["xgg"] = {"Goreng"}, ["xgi"] = {"Garingbal"}, ["xgl"] = {"Galindan"}, ["xgm"] = {"Dharumbal", "Guwinmal"}, ["xgn"] = {"Mongolian languages"}, ["xgr"] = {"Garza"}, ["xgu"] = {"Unggumi"}, ["xgw"] = {"Guwa"}, ["xha"] = {"Harami"}, ["xhc"] = {"Hunnic"}, ["xhd"] = {"Hadrami"}, ["xhe"] = {"Khetrani"}, ["xhm"] = {"Middle Khmer (1400 to 1850 CE)"}, ["xhr"] = {"Hernican"}, ["xht"] = {"Hattic"}, ["xhu"] = {"Hurrian"}, ["xhv"] = {"Khua"}, ["xib"] = {"Iberian"}, ["xii"] = {"Xiri"}, ["xil"] = {"Illyrian"}, ["xin"] = {"Xinca"}, ["xir"] = {"Xiriâna"}, ["xis"] = {"Kisan"}, ["xiv"] = {"Indus Valley Language"}, ["xiy"] = {"Xipaya"}, ["xjb"] = {"Minjungbal"}, ["xjt"] = {"Jaitmatang"}, ["xka"] = {"Kalkoti"}, ["xkb"] = {"Northern Nago"}, ["xkc"] = {"Kho'ini"}, ["xkd"] = {"Mendalam Kayan"}, ["xke"] = {"Kereho"}, ["xkf"] = {"Khengkha"}, ["xkg"] = {"Kagoro"}, ["xki"] = {"Kenyan Sign Language"}, ["xkj"] = {"Kajali"}, ["xkk"] = {"Kachok", "Kaco'"}, ["xkl"] = {"Mainstream Kenyah"}, ["xkn"] = {"Kayan River Kayan"}, ["xko"] = {"Kiorr"}, ["xkp"] = {"Kabatei"}, ["xkq"] = {"Koroni"}, ["xkr"] = {"Xakriabá"}, ["xks"] = {"Kumbewaha"}, ["xkt"] = {"Kantosi"}, ["xku"] = {"Kaamba"}, ["xkv"] = {"Kgalagadi"}, ["xkw"] = {"Kembra"}, ["xkx"] = {"Karore"}, ["xky"] = {"Uma' Lasan"}, ["xkz"] = {"Kurtokha"}, ["xla"] = {"Kamula"}, ["xlb"] = {"Loup B"}, ["xlc"] = {"Lycian"}, ["xld"] = {"Lydian"}, ["xle"] = {"Lemnian"}, ["xlg"] = {"Ligurian (Ancient)"}, ["xli"] = {"Liburnian"}, ["xln"] = {"Alanic"}, ["xlo"] = {"Loup A"}, ["xlp"] = {"Lepontic"}, ["xls"] = {"Lusitanian"}, ["xlu"] = {"Cuneiform Luwian"}, ["xly"] = {"Elymian"}, ["xma"] = {"Mushungulu"}, ["xmb"] = {"Mbonga"}, ["xmc"] = {"Makhuwa-Marrevone"}, ["xmd"] = {"Mbudum"}, ["xme"] = {"Median"}, ["xmf"] = {"Mingrelian"}, ["xmg"] = {"Mengaka"}, ["xmh"] = {"Kugu-Muminh"}, ["xmj"] = {"Majera"}, ["xmk"] = {"Ancient Macedonian"}, ["xml"] = {"Malaysian Sign Language"}, ["xmm"] = {"Manado Malay"}, ["xmn"] = {"Manichaean Middle Persian"}, ["xmo"] = {"Morerebi"}, ["xmp"] = {"Kuku-Mu'inh"}, ["xmq"] = {"Kuku-Mangk"}, ["xmr"] = {"Meroitic"}, ["xms"] = {"Moroccan Sign Language"}, ["xmt"] = {"Matbat"}, ["xmu"] = {"Kamu"}, ["xmv"] = {"Antankarana Malagasy", "Tankarana Malagasy"}, ["xmw"] = {"Tsimihety Malagasy"}, ["xmx"] = {"Salawati", "Maden"}, ["xmy"] = {"Mayaguduna"}, ["xmz"] = {"Mori Bawah"}, ["xna"] = {"Ancient North Arabian"}, ["xnb"] = {"Kanakanabu"}, ["xnd"] = {"Na-Dene languages"}, ["xng"] = {"Middle Mongolian"}, ["xnh"] = {"Kuanhua"}, ["xni"] = {"Ngarigu"}, ["xnj"] = {"Ngoni (Tanzania)"}, ["xnk"] = {"Nganakarti"}, ["xnm"] = {"Ngumbarl"}, ["xnn"] = {"Northern Kankanay"}, ["xno"] = {"Anglo-Norman"}, ["xnq"] = {"Ngoni (Mozambique)"}, ["xnr"] = {"Kangri"}, ["xns"] = {"Kanashi"}, ["xnt"] = {"Narragansett"}, ["xnu"] = {"Nukunul"}, ["xny"] = {"Nyiyaparli"}, ["xnz"] = {"Kenzi", "Mattoki"}, ["xoc"] = {"O'chi'chi'"}, ["xod"] = {"Kokoda"}, ["xog"] = {"Soga"}, ["xoi"] = {"Kominimung"}, ["xok"] = {"Xokleng"}, ["xom"] = {"Komo (Sudan)"}, ["xon"] = {"Konkomba"}, ["xoo"] = {"Xukurú"}, ["xop"] = {"Kopar"}, ["xor"] = {"Korubo"}, ["xow"] = {"Kowaki"}, ["xpa"] = {"Pirriya"}, ["xpb"] = {"Northeastern Tasmanian", "Pyemmairrener"}, ["xpc"] = {"Pecheneg"}, ["xpd"] = {"Oyster Bay Tasmanian"}, ["xpe"] = {"Liberia Kpelle"}, ["xpf"] = {"Southeast Tasmanian", "Nuenonne"}, ["xpg"] = {"Phrygian"}, ["xph"] = {"North Midlands Tasmanian", "Tyerrenoterpanner"}, ["xpi"] = {"Pictish"}, ["xpj"] = {"Mpalitjanh"}, ["xpk"] = {"Kulina Pano"}, ["xpl"] = {"Port Sorell Tasmanian"}, ["xpm"] = {"Pumpokol"}, ["xpn"] = {"Kapinawá"}, ["xpo"] = {"Pochutec"}, ["xpp"] = {"Puyo-Paekche"}, ["xpq"] = {"Mohegan-Pequot"}, ["xpr"] = {"Parthian"}, ["xps"] = {"Pisidian"}, ["xpt"] = {"Punthamara"}, ["xpu"] = {"Punic"}, ["xpv"] = {"Northern Tasmanian", "Tommeginne"}, ["xpw"] = {"Northwestern Tasmanian", "Peerapper"}, ["xpx"] = {"Southwestern Tasmanian", "Toogee"}, ["xpy"] = {"Puyo"}, ["xpz"] = {"Bruny Island Tasmanian"}, ["xqa"] = {"Karakhanid"}, ["xqt"] = {"Qatabanian"}, ["xra"] = {"Krahô"}, ["xrb"] = {"Eastern Karaboro"}, ["xrd"] = {"Gundungurra"}, ["xre"] = {"Kreye"}, ["xrg"] = {"Minang"}, ["xri"] = {"Krikati-Timbira"}, ["xrm"] = {"Armazic"}, ["xrn"] = {"Arin"}, ["xrr"] = {"Raetic"}, ["xrt"] = {"Aranama-Tamique"}, ["xru"] = {"Marriammu"}, ["xrw"] = {"Karawa"}, ["xsa"] = {"Sabaean"}, ["xsb"] = {"Sambal"}, ["xsc"] = {"Scythian"}, ["xsd"] = {"Sidetic"}, ["xse"] = {"Sempan"}, ["xsh"] = {"Shamang"}, ["xsi"] = {"Sio"}, ["xsj"] = {"Subi"}, ["xsl"] = {"South Slavey"}, ["xsm"] = {"Kasem"}, ["xsn"] = {"Sanga (Nigeria)"}, ["xso"] = {"Solano"}, ["xsp"] = {"Silopi"}, ["xsq"] = {"Makhuwa-Saka"}, ["xsr"] = {"Sherpa"}, ["xsu"] = {"Sanumá"}, ["xsv"] = {"Sudovian"}, ["xsy"] = {"Saisiyat"}, ["xta"] = {"Alcozauca Mixtec"}, ["xtb"] = {"Chazumba Mixtec"}, ["xtc"] = {"Katcha-Kadugli-Miri"}, ["xtd"] = {"Diuxi-Tilantongo Mixtec"}, ["xte"] = {"Ketengban"}, ["xtg"] = {"Transalpine Gaulish"}, ["xth"] = {"Yitha Yitha"}, ["xti"] = {"Sinicahua Mixtec"}, ["xtj"] = {"San Juan Teita Mixtec"}, ["xtl"] = {"Tijaltepec Mixtec"}, ["xtm"] = {"Magdalena Peñasco Mixtec"}, ["xtn"] = {"Northern Tlaxiaco Mixtec"}, ["xto"] = {"Tokharian A"}, ["xtp"] = {"San Miguel Piedras Mixtec"}, ["xtq"] = {"Tumshuqese"}, ["xtr"] = {"Early Tripuri"}, ["xts"] = {"Sindihui Mixtec"}, ["xtt"] = {"Tacahua Mixtec"}, ["xtu"] = {"Cuyamecalco Mixtec"}, ["xtv"] = {"Thawa"}, ["xtw"] = {"Tawandê"}, ["xty"] = {"Yoloxochitl Mixtec"}, ["xua"] = {"Alu Kurumba"}, ["xub"] = {"Betta Kurumba"}, ["xud"] = {"Umiida"}, ["xug"] = {"Kunigami"}, ["xuj"] = {"Jennu Kurumba"}, ["xul"] = {"Ngunawal", "Nunukul"}, ["xum"] = {"Umbrian"}, ["xun"] = {"Unggaranggu"}, ["xuo"] = {"Kuo"}, ["xup"] = {"Upper Umpqua"}, ["xur"] = {"Urartian"}, ["xut"] = {"Kuthant"}, ["xuu"] = {"Kxoe", "Khwedam"}, ["xve"] = {"Venetic"}, ["xvi"] = {"Kamviri"}, ["xvn"] = {"Vandalic"}, ["xvo"] = {"Volscian"}, ["xvs"] = {"Vestinian"}, ["xwa"] = {"Kwaza"}, ["xwc"] = {"Woccon"}, ["xwd"] = {"Wadi Wadi"}, ["xwe"] = {"Xwela Gbe"}, ["xwg"] = {"Kwegu"}, ["xwj"] = {"Wajuk"}, ["xwk"] = {"Wangkumara"}, ["xwl"] = {"Western Xwla Gbe"}, ["xwo"] = {"Written Oirat"}, ["xwr"] = {"Kwerba Mamberamo"}, ["xwt"] = {"Wotjobaluk"}, ["xww"] = {"Wemba Wemba"}, ["xxb"] = {"Boro (Ghana)"}, ["xxk"] = {"Ke'o"}, ["xxm"] = {"Minkin"}, ["xxr"] = {"Koropó"}, ["xxt"] = {"Tambora"}, ["xya"] = {"Yaygir"}, ["xyb"] = {"Yandjibara"}, ["xyj"] = {"Mayi-Yapi"}, ["xyk"] = {"Mayi-Kulan"}, ["xyl"] = {"Yalakalore"}, ["xyt"] = {"Mayi-Thakurti"}, ["xyy"] = {"Yorta Yorta"}, ["xzh"] = {"Zhang-Zhung"}, ["xzm"] = {"Zemgalian"}, ["xzp"] = {"Ancient Zapotec"}, ["yaa"] = {"Yaminahua"}, ["yab"] = {"Yuhup"}, ["yac"] = {"Pass Valley Yali"}, ["yad"] = {"Yagua"}, ["yae"] = {"Pumé"}, ["yaf"] = {"Yaka (Democratic Republic of Congo)"}, ["yag"] = {"Yámana"}, ["yah"] = {"Yazgulyam"}, ["yai"] = {"Yagnobi"}, ["yaj"] = {"Banda-Yangere"}, ["yak"] = {"Yakama"}, ["yal"] = {"Yalunka"}, ["yam"] = {"Yamba"}, ["yan"] = {"Mayangna"}, ["yao"] = {"Yao"}, ["yap"] = {"Yapese"}, ["yaq"] = {"Yaqui"}, ["yar"] = {"Yabarana"}, ["yas"] = {"Nugunu (Cameroon)"}, ["yat"] = {"Yambeta"}, ["yau"] = {"Yuwana"}, ["yav"] = {"Yangben"}, ["yaw"] = {"Yawalapití"}, ["yax"] = {"Yauma"}, ["yay"] = {"Agwagwune"}, ["yaz"] = {"Lokaa"}, ["yba"] = {"Yala"}, ["ybb"] = {"Yemba"}, ["ybe"] = {"West Yugur"}, ["ybh"] = {"Yakha"}, ["ybi"] = {"Yamphu"}, ["ybj"] = {"Hasha"}, ["ybk"] = {"Bokha"}, ["ybl"] = {"Yukuben"}, ["ybm"] = {"Yaben"}, ["ybn"] = {"Yabaâna"}, ["ybo"] = {"Yabong"}, ["ybx"] = {"Yawiyo"}, ["yby"] = {"Yaweyuha"}, ["ych"] = {"Chesu"}, ["ycl"] = {"Lolopo"}, ["ycn"] = {"Yucuna"}, ["ycp"] = {"Chepya"}, ["ycr"] = {"Yilan Creole"}, ["yda"] = {"Yanda"}, ["ydd"] = {"Eastern Yiddish"}, ["yde"] = {"Yangum Dey"}, ["ydg"] = {"Yidgha"}, ["ydk"] = {"Yoidik"}, ["yea"] = {"Ravula"}, ["yec"] = {"Yeniche"}, ["yee"] = {"Yimas"}, ["yei"] = {"Yeni"}, ["yej"] = {"Yevanic"}, ["yel"] = {"Yela"}, ["yer"] = {"Tarok"}, ["yes"] = {"Nyankpa"}, ["yet"] = {"Yetfa"}, ["yeu"] = {"Yerukula"}, ["yev"] = {"Yapunda"}, ["yey"] = {"Yeyi"}, ["yga"] = {"Malyangapa"}, ["ygi"] = {"Yiningayi"}, ["ygl"] = {"Yangum Gel"}, ["ygm"] = {"Yagomi"}, ["ygp"] = {"Gepo"}, ["ygr"] = {"Yagaria"}, ["ygs"] = {"Yolŋu Sign Language"}, ["ygu"] = {"Yugul"}, ["ygw"] = {"Yagwoia"}, ["yha"] = {"Baha Buyang"}, ["yhd"] = {"Judeo-Iraqi Arabic"}, ["yhl"] = {"Hlepho Phowa"}, ["yhs"] = {"Yan-nhaŋu Sign Language"}, ["yia"] = {"Yinggarda"}, ["yif"] = {"Ache"}, ["yig"] = {"Wusa Nasu"}, ["yih"] = {"Western Yiddish"}, ["yii"] = {"Yidiny"}, ["yij"] = {"Yindjibarndi"}, ["yik"] = {"Dongshanba Lalo"}, ["yil"] = {"Yindjilandji"}, ["yim"] = {"Yimchungru Naga"}, ["yin"] = {"Riang Lai", "Yinchia"}, ["yip"] = {"Pholo"}, ["yiq"] = {"Miqie"}, ["yir"] = {"North Awyu"}, ["yis"] = {"Yis"}, ["yit"] = {"Eastern Lalu"}, ["yiu"] = {"Awu"}, ["yiv"] = {"Northern Nisu"}, ["yix"] = {"Axi Yi"}, ["yiz"] = {"Azhe"}, ["yka"] = {"Yakan"}, ["ykg"] = {"Northern Yukaghir"}, ["ykh"] = {"Khamnigan Mongol"}, ["yki"] = {"Yoke"}, ["ykk"] = {"Yakaikeke"}, ["ykl"] = {"Khlula"}, ["ykm"] = {"Kap"}, ["ykn"] = {"Kua-nsi"}, ["yko"] = {"Yasa"}, ["ykr"] = {"Yekora"}, ["ykt"] = {"Kathu"}, ["yku"] = {"Kuamasi"}, ["yky"] = {"Yakoma"}, ["yla"] = {"Yaul"}, ["ylb"] = {"Yaleba"}, ["yle"] = {"Yele"}, ["ylg"] = {"Yelogu"}, ["yli"] = {"Angguruk Yali"}, ["yll"] = {"Yil"}, ["ylm"] = {"Limi"}, ["yln"] = {"Langnian Buyang"}, ["ylo"] = {"Naluo Yi"}, ["ylr"] = {"Yalarnnga"}, ["ylu"] = {"Aribwaung"}, ["yly"] = {"Nyâlayu", "Nyelâyu"}, ["ymb"] = {"Yambes"}, ["ymc"] = {"Southern Muji"}, ["ymd"] = {"Muda"}, ["yme"] = {"Yameo"}, ["ymg"] = {"Yamongeri"}, ["ymh"] = {"Mili"}, ["ymi"] = {"Moji"}, ["ymk"] = {"Makwe"}, ["yml"] = {"Iamalele"}, ["ymm"] = {"Maay"}, ["ymn"] = {"Yamna", "Sunum"}, ["ymo"] = {"Yangum Mon"}, ["ymp"] = {"Yamap"}, ["ymq"] = {"Qila Muji"}, ["ymr"] = {"Malasar"}, ["yms"] = {"Mysian"}, ["ymx"] = {"Northern Muji"}, ["ymz"] = {"Muzi"}, ["yna"] = {"Aluo"}, ["ynb"] = {"Yamben"}, ["ynd"] = {"Yandruwandha"}, ["yne"] = {"Lang'e"}, ["yng"] = {"Yango"}, ["ynk"] = {"Naukan Yupik"}, ["ynl"] = {"Yangulam"}, ["ynn"] = {"Yana"}, ["yno"] = {"Yong"}, ["ynq"] = {"Yendang"}, ["yns"] = {"Yansi"}, ["ynu"] = {"Yahuna"}, ["yob"] = {"Yoba"}, ["yog"] = {"Yogad"}, ["yoi"] = {"Yonaguni"}, ["yok"] = {"Yokuts"}, ["yom"] = {"Yombe"}, ["yon"] = {"Yongkom"}, ["yot"] = {"Yotti"}, ["yox"] = {"Yoron"}, ["yoy"] = {"Yoy"}, ["ypa"] = {"Phala"}, ["ypb"] = {"Labo Phowa"}, ["ypg"] = {"Phola"}, ["yph"] = {"Phupha"}, ["ypk"] = {"Yupik languages"}, ["ypm"] = {"Phuma"}, ["ypn"] = {"Ani Phowa"}, ["ypo"] = {"Alo Phola"}, ["ypp"] = {"Phupa"}, ["ypz"] = {"Phuza"}, ["yra"] = {"Yerakai"}, ["yrb"] = {"Yareba"}, ["yre"] = {"Yaouré"}, ["yrk"] = {"Nenets"}, ["yrl"] = {"Nhengatu"}, ["yrm"] = {"Yirrk-Mel"}, ["yrn"] = {"Yerong"}, ["yro"] = {"Yaroamë"}, ["yrs"] = {"Yarsun"}, ["yrw"] = {"Yarawata"}, ["yry"] = {"Yarluyandi"}, ["ysc"] = {"Yassic"}, ["ysd"] = {"Samatao"}, ["ysg"] = {"Sonaga"}, ["ysl"] = {"Yugoslavian Sign Language"}, ["ysm"] = {"Myanmar Sign Language"}, ["ysn"] = {"Sani"}, ["yso"] = {"Nisi (China)"}, ["ysp"] = {"Southern Lolopo"}, ["ysr"] = {"Sirenik Yupik"}, ["yss"] = {"Yessan-Mayo"}, ["ysy"] = {"Sanie"}, ["yta"] = {"Talu"}, ["ytl"] = {"Tanglang"}, ["ytp"] = {"Thopho"}, ["ytw"] = {"Yout Wam"}, ["yty"] = {"Yatay"}, ["yua"] = {"Yucateco", "Yucatec Maya"}, ["yub"] = {"Yugambal"}, ["yuc"] = {"Yuchi"}, ["yud"] = {"Judeo-Tripolitanian Arabic"}, ["yue"] = {"Yue Chinese", "Cantonese"}, ["yuf"] = {"Havasupai-Walapai-Yavapai"}, ["yug"] = {"Yug"}, ["yui"] = {"Yurutí"}, ["yuj"] = {"Karkar-Yuri"}, ["yuk"] = {"Yuki"}, ["yul"] = {"Yulu"}, ["yum"] = {"Quechan"}, ["yun"] = {"Bena (Nigeria)"}, ["yup"] = {"Yukpa"}, ["yuq"] = {"Yuqui"}, ["yur"] = {"Yurok"}, ["yut"] = {"Yopno"}, ["yuw"] = {"Yau (Morobe Province)"}, ["yux"] = {"Southern Yukaghir"}, ["yuy"] = {"East Yugur"}, ["yuz"] = {"Yuracare"}, ["yva"] = {"Yawa"}, ["yvt"] = {"Yavitero"}, ["ywa"] = {"Kalou"}, ["ywg"] = {"Yinhawangka"}, ["ywl"] = {"Western Lalu"}, ["ywn"] = {"Yawanawa"}, ["ywq"] = {"Wuding-Luquan Yi"}, ["ywr"] = {"Yawuru"}, ["ywt"] = {"Xishanba Lalo", "Central Lalo"}, ["ywu"] = {"Wumeng Nasu"}, ["yww"] = {"Yawarawarga"}, ["yxa"] = {"Mayawali"}, ["yxg"] = {"Yagara"}, ["yxl"] = {"Yardliyawarra"}, ["yxm"] = {"Yinwum"}, ["yxu"] = {"Yuyu"}, ["yxy"] = {"Yabula Yabula"}, ["yyr"] = {"Yir Yoront"}, ["yyu"] = {"Yau (Sandaun Province)"}, ["yyz"] = {"Ayizi"}, ["yzg"] = {"E'ma Buyang"}, ["yzk"] = {"Zokhuo"}, ["zaa"] = {"Sierra de Juárez Zapotec"}, ["zab"] = {"Western Tlacolula Valley Zapotec", "San Juan Guelavía Zapotec"}, ["zac"] = {"Ocotlán Zapotec"}, ["zad"] = {"Cajonos Zapotec"}, ["zae"] = {"Yareni Zapotec"}, ["zaf"] = {"Ayoquesco Zapotec"}, ["zag"] = {"Zaghawa"}, ["zah"] = {"Zangwal"}, ["zai"] = {"Isthmus Zapotec"}, ["zaj"] = {"Zaramo"}, ["zak"] = {"Zanaki"}, ["zal"] = {"Zauzou"}, ["zam"] = {"Miahuatlán Zapotec"}, ["zao"] = {"Ozolotepec Zapotec"}, ["zap"] = {"Zapotec"}, ["zaq"] = {"Aloápam Zapotec"}, ["zar"] = {"Rincón Zapotec"}, ["zas"] = {"Santo Domingo Albarradas Zapotec"}, ["zat"] = {"Tabaa Zapotec"}, ["zau"] = {"Zangskari"}, ["zav"] = {"Yatzachi Zapotec"}, ["zaw"] = {"Mitla Zapotec"}, ["zax"] = {"Xadani Zapotec"}, ["zay"] = {"Zayse-Zergulla", "Zaysete"}, ["zaz"] = {"Zari"}, ["zba"] = {"Balaibalan"}, ["zbc"] = {"Central Berawan"}, ["zbe"] = {"East Berawan"}, ["zbl"] = {"Blissymbols", "Bliss", "Blissymbolics"}, ["zbt"] = {"Batui"}, ["zbu"] = {"Bu (Bauchi State)"}, ["zbw"] = {"West Berawan"}, ["zca"] = {"Coatecas Altas Zapotec"}, ["zcd"] = {"Las Delicias Zapotec"}, ["zch"] = {"Central Hongshuihe Zhuang"}, ["zdj"] = {"Ngazidja Comorian"}, ["zea"] = {"Zeeuws"}, ["zeg"] = {"Zenag"}, ["zeh"] = {"Eastern Hongshuihe Zhuang"}, ["zem"] = {"Zeem"}, ["zen"] = {"Zenaga"}, ["zga"] = {"Kinga"}, ["zgb"] = {"Guibei Zhuang"}, ["zgh"] = {"Standard Moroccan Tamazight"}, ["zgm"] = {"Minz Zhuang"}, ["zgn"] = {"Guibian Zhuang"}, ["zgr"] = {"Magori"}, ["zhb"] = {"Zhaba"}, ["zhd"] = {"Dai Zhuang"}, ["zhi"] = {"Zhire"}, ["zhn"] = {"Nong Zhuang"}, ["zhw"] = {"Zhoa"}, ["zhx"] = {"Chinese (family)"}, ["zia"] = {"Zia"}, ["zib"] = {"Zimbabwe Sign Language"}, ["zik"] = {"Zimakani"}, ["zil"] = {"Zialo"}, ["zim"] = {"Mesme"}, ["zin"] = {"Zinza"}, ["ziw"] = {"Zigula"}, ["ziz"] = {"Zizilivakan"}, ["zka"] = {"Kaimbulawa"}, ["zkd"] = {"Kadu"}, ["zkg"] = {"Koguryo"}, ["zkh"] = {"Khorezmian"}, ["zkk"] = {"Karankawa"}, ["zkn"] = {"Kanan"}, ["zko"] = {"Kott"}, ["zkp"] = {"São Paulo Kaingáng"}, ["zkr"] = {"Zakhring"}, ["zkt"] = {"Kitan"}, ["zku"] = {"Kaurna"}, ["zkv"] = {"Krevinian"}, ["zkz"] = {"Khazar"}, ["zla"] = {"Zula"}, ["zle"] = {"East Slavic languages"}, ["zlj"] = {"Liujiang Zhuang"}, ["zlm"] = {"Malay (individual language)"}, ["zln"] = {"Lianshan Zhuang"}, ["zlq"] = {"Liuqian Zhuang"}, ["zls"] = {"South Slavic languages"}, ["zlu"] = {"Zul"}, ["zlw"] = {"West Slavic languages"}, ["zma"] = {"Manda (Australia)"}, ["zmb"] = {"Zimba"}, ["zmc"] = {"Margany"}, ["zmd"] = {"Maridan"}, ["zme"] = {"Mangerr"}, ["zmf"] = {"Mfinu"}, ["zmg"] = {"Marti Ke"}, ["zmh"] = {"Makolkol"}, ["zmi"] = {"Negeri Sembilan Malay"}, ["zmj"] = {"Maridjabin"}, ["zmk"] = {"Mandandanyi"}, ["zml"] = {"Matngala"}, ["zmm"] = {"Marimanindji", "Marramaninyshi"}, ["zmn"] = {"Mbangwe"}, ["zmo"] = {"Molo"}, ["zmp"] = {"Mbuun"}, ["zmq"] = {"Mituku"}, ["zmr"] = {"Maranunggu"}, ["zms"] = {"Mbesa"}, ["zmt"] = {"Maringarr"}, ["zmu"] = {"Muruwari"}, ["zmv"] = {"Mbariman-Gudhinma"}, ["zmw"] = {"Mbo (Democratic Republic of Congo)"}, ["zmx"] = {"Bomitaba"}, ["zmy"] = {"Mariyedi"}, ["zmz"] = {"Mbandja"}, ["zna"] = {"Zan Gula"}, ["znd"] = {"Zande languages"}, ["zne"] = {"Zande (individual language)"}, ["zng"] = {"Mang"}, ["znk"] = {"Manangkari"}, ["zns"] = {"Mangas"}, ["zoc"] = {"Copainalá Zoque"}, ["zoh"] = {"Chimalapa Zoque"}, ["zom"] = {"Zou"}, ["zoo"] = {"Asunción Mixtepec Zapotec"}, ["zoq"] = {"Tabasco Zoque"}, ["zor"] = {"Rayón Zoque"}, ["zos"] = {"Francisco León Zoque"}, ["zpa"] = {"Lachiguiri Zapotec"}, ["zpb"] = {"Yautepec Zapotec"}, ["zpc"] = {"Choapan Zapotec"}, ["zpd"] = {"Southeastern Ixtlán Zapotec"}, ["zpe"] = {"Petapa Zapotec"}, ["zpf"] = {"San Pedro Quiatoni Zapotec"}, ["zpg"] = {"Guevea De Humboldt Zapotec"}, ["zph"] = {"Totomachapan Zapotec"}, ["zpi"] = {"Santa María Quiegolani Zapotec"}, ["zpj"] = {"Quiavicuzas Zapotec"}, ["zpk"] = {"Tlacolulita Zapotec"}, ["zpl"] = {"Lachixío Zapotec"}, ["zpm"] = {"Mixtepec Zapotec"}, ["zpn"] = {"Santa Inés Yatzechi Zapotec"}, ["zpo"] = {"Amatlán Zapotec"}, ["zpp"] = {"El Alto Zapotec"}, ["zpq"] = {"Zoogocho Zapotec"}, ["zpr"] = {"Santiago Xanica Zapotec"}, ["zps"] = {"Coatlán Zapotec"}, ["zpt"] = {"San Vicente Coatlán Zapotec"}, ["zpu"] = {"Yalálag Zapotec"}, ["zpv"] = {"Chichicapan Zapotec"}, ["zpw"] = {"Zaniza Zapotec"}, ["zpx"] = {"San Baltazar Loxicha Zapotec"}, ["zpy"] = {"Mazaltepec Zapotec"}, ["zpz"] = {"Texmelucan Zapotec"}, ["zqe"] = {"Qiubei Zhuang"}, ["zra"] = {"Kara (Korea)"}, ["zrg"] = {"Mirgan"}, ["zrn"] = {"Zerenkel"}, ["zro"] = {"Záparo"}, ["zrp"] = {"Zarphatic"}, ["zrs"] = {"Mairasi"}, ["zsa"] = {"Sarasira"}, ["zsk"] = {"Kaskean"}, ["zsl"] = {"Zambian Sign Language"}, ["zsm"] = {"Standard Malay"}, ["zsr"] = {"Southern Rincon Zapotec"}, ["zsu"] = {"Sukurum"}, ["zte"] = {"Elotepec Zapotec"}, ["ztg"] = {"Xanaguía Zapotec"}, ["ztl"] = {"Lapaguía-Guivini Zapotec"}, ["ztm"] = {"San Agustín Mixtepec Zapotec"}, ["ztn"] = {"Santa Catarina Albarradas Zapotec"}, ["ztp"] = {"Loxicha Zapotec"}, ["ztq"] = {"Quioquitani-Quierí Zapotec"}, ["zts"] = {"Tilquiapan Zapotec"}, ["ztt"] = {"Tejalapan Zapotec"}, ["ztu"] = {"Güilá Zapotec"}, ["ztx"] = {"Zaachila Zapotec"}, ["zty"] = {"Yatee Zapotec"}, ["zuh"] = {"Tokano"}, ["zum"] = {"Kumzari"}, ["zun"] = {"Zuni"}, ["zuy"] = {"Zumaya"}, ["zwa"] = {"Zay"}, ["zxx"] = {"No linguistic content", "Not applicable"}, ["zyb"] = {"Yongbei Zhuang"}, ["zyg"] = {"Yang Zhuang"}, ["zyj"] = {"Youjiang Zhuang"}, ["zyn"] = {"Yongnan Zhuang"}, ["zyp"] = {"Zyphe Chin"}, ["zza"] = {"Zaza", "Dimili", "Dimli (macrolanguage)", "Kirdki", "Kirmanjki (macrolanguage)", "Zazaki"}, ["zzj"] = {"Zuojiang Zhuang"} } local deprecated = { ["in"] = {"Indonesian"}, ["iw"] = {"Hebrew"}, ["ji"] = {"Yiddish"}, ["jw"] = {"Javanese"}, ["mo"] = {"Moldavian", "Moldovan"}, ["aam"] = {"Aramanik"}, ["adp"] = {"Adap"}, ["agp"] = {"Paranan"}, ["ais"] = {"Nataoran Amis"}, ["ajp"] = {"South Levantine Arabic"}, ["ajt"] = {"Judeo-Tunisian Arabic"}, ["aoh"] = {"Arma"}, ["asd"] = {"Asas"}, ["aue"] = {"ǂKxʼauǁʼein"}, ["ayx"] = {"Ayi (China)"}, ["ayy"] = {"Tayabas Ayta"}, ["baz"] = {"Tunen"}, ["bbz"] = {"Babalia Creole Arabic"}, ["bgm"] = {"Baga Mboteni"}, ["bhk"] = {"Albay Bicolano"}, ["bic"] = {"Bikaru"}, ["bij"] = {"Vaghat-Ya-Bijim-Legeri"}, ["bjd"] = {"Bandjigali"}, ["bjq"] = {"Southern Betsimisaraka Malagasy"}, ["bkb"] = {"Finallig"}, ["blg"] = {"Balau"}, ["bmy"] = {"Bemba (Democratic Republic of Congo)"}, ["bpb"] = {"Barbacoas"}, ["btb"] = {"Beti (Cameroon)"}, ["btl"] = {"Bhatola"}, ["bxx"] = {"Borna (Democratic Republic of Congo)"}, ["byy"] = {"Buya"}, ["cbe"] = {"Chipiajes"}, ["cbh"] = {"Cagua"}, ["cca"] = {"Cauca"}, ["ccq"] = {"Chaungtha"}, ["cdg"] = {"Chamari"}, ["cjr"] = {"Chorotega"}, ["cka"] = {"Khumi Awa Chin"}, ["cmk"] = {"Chimakum"}, ["coy"] = {"Coyaima"}, ["cqu"] = {"Chilean Quechua"}, ["cug"] = {"Chungmboko", "Cung"}, ["cum"] = {"Cumeral"}, ["daf"] = {"Dan"}, ["dap"] = {"Nisi (India)"}, ["dek"] = {"Dek"}, ["dgu"] = {"Degaru"}, ["dha"] = {"Dhanwar (India)"}, ["dit"] = {"Dirari"}, ["djl"] = {"Djiwarli"}, ["dkl"] = {"Kolum So Dogon"}, ["drh"] = {"Darkhat"}, ["drr"] = {"Dororo"}, ["drw"] = {"Darwazi"}, ["dud"] = {"Hun-Saare"}, ["duj"] = {"Dhuwal"}, ["dwl"] = {"Walo Kumbe Dogon"}, ["ekc"] = {"Eastern Karnic"}, ["elp"] = {"Elpaputih"}, ["emo"] = {"Emok"}, ["gav"] = {"Gabutamon"}, ["gbc"] = {"Garawa"}, ["gfx"] = {"Mangetti Dune ǃXung"}, ["ggn"] = {"Eastern Gurung"}, ["ggo"] = {"Southern Gondi"}, ["ggr"] = {"Aghu Tharnggalu"}, ["gio"] = {"Gelao"}, ["gji"] = {"Geji"}, ["gli"] = {"Guliguli"}, ["gti"] = {"Gbati-ri"}, ["guv"] = {"Gey"}, ["hrr"] = {"Horuru"}, ["iap"] = {"Iapama"}, ["ibi"] = {"Ibilo"}, ["ill"] = {"Iranun"}, ["ilw"] = {"Talur"}, ["ime"] = {"Imeraguen"}, ["izi"] = {"Izi-Ezaa-Ikwo-Mgbo"}, ["jar"] = {"Jarawa (Nigeria)"}, ["jeg"] = {"Jeng"}, ["kbf"] = {"Kakauhua"}, ["kdv"] = {"Kado"}, ["kgc"] = {"Kasseng"}, ["kgd"] = {"Kataang"}, ["kgh"] = {"Upper Tanudan Kalinga"}, ["kgm"] = {"Karipúna"}, ["kjf"] = {"Khalaj [Indo-Iranian]"}, ["koj"] = {"Sara Dunjo"}, ["kox"] = {"Coxima"}, ["kpp"] = {"Paku Karen"}, ["krm"] = {"Krim"}, ["ksa"] = {"Shuwa-Zamani"}, ["ktr"] = {"Kota Marudu Tinagas"}, ["kvs"] = {"Kunggara"}, ["kwq"] = {"Kwak"}, ["kxe"] = {"Kakihum"}, ["kxl"] = {"Nepali Kurux"}, ["kxu"] = {"Kui (India)"}, ["kzh"] = {"Kenuzi-Dongola"}, ["kzj"] = {"Coastal Kadazan"}, ["kzt"] = {"Tambunan Dusun"}, ["lak"] = {"Laka (Nigeria)"}, ["lba"] = {"Lui"}, ["leg"] = {"Lengua"}, ["lii"] = {"Lingkhim"}, ["llo"] = {"Khlor"}, ["lmm"] = {"Lamam"}, ["lmz"] = {"Lumbee"}, ["lno"] = {"Lango (South Sudan)"}, ["lsg"] = {"Lyons Sign Language"}, ["meg"] = {"Mea"}, ["mgx"] = {"Omati"}, ["mhh"] = {"Maskoy Pidgin"}, ["mja"] = {"Mahei"}, ["mld"] = {"Malakhel"}, ["mnt"] = {"Maykulan"}, ["mof"] = {"Mohegan-Montauk-Narragansett"}, ["mst"] = {"Cataelano Mandaya"}, ["mvm"] = {"Muya"}, ["mwd"] = {"Mudbura"}, ["mwj"] = {"Maligo"}, ["mwx"] = {"Mediak"}, ["mwy"] = {"Mosiro"}, ["myd"] = {"Maramba"}, ["myi"] = {"Mina (India)"}, ["myq"] = {"Forest Maninka"}, ["myt"] = {"Sangab Mandaya"}, ["nad"] = {"Nijadali"}, ["nbf"] = {"Naxi"}, ["nbx"] = {"Ngura"}, ["ncp"] = {"Ndaktup"}, ["ngo"] = {"Ngoni"}, ["nln"] = {"Durango Nahuatl"}, ["nlr"] = {"Ngarla"}, ["nns"] = {"Ningye"}, ["nnx"] = {"Ngong"}, ["nom"] = {"Nocamán"}, ["noo"] = {"Nootka"}, ["nte"] = {"Nathembo"}, ["nts"] = {"Natagaimas"}, ["nxu"] = {"Narau"}, ["ome"] = {"Omejes"}, ["oun"] = {"ǃOǃung"}, ["pat"] = {"Papitalai"}, ["pbz"] = {"Palu"}, ["pcr"] = {"Panang"}, ["pgy"] = {"Pongyong"}, ["pii"] = {"Pini"}, ["plj"] = {"Polci"}, ["plp"] = {"Palpa"}, ["pmc"] = {"Palumata"}, ["pmk"] = {"Pamlico"}, ["pmu"] = {"Mirpur Panjabi"}, ["pod"] = {"Ponares"}, ["ppa"] = {"Pao"}, ["ppr"] = {"Piru"}, ["prb"] = {"Lua'"}, ["prp"] = {"Parsi"}, ["pry"] = {"Pray 3"}, ["puk"] = {"Pu Ko"}, ["puz"] = {"Purum Naga"}, ["rie"] = {"Rien"}, ["rmr"] = {"Caló"}, ["rna"] = {"Runa"}, ["rsi"] = {"Rennellese Sign Language"}, ["sap"] = {"Sanapaná"}, ["sca"] = {"Sansu"}, ["sdm"] = {"Semandang"}, ["sgl"] = {"Sanglechi-Ishkashimi"}, ["sgo"] = {"Songa"}, ["skk"] = {"Sok"}, ["slq"] = {"Salchuq"}, ["smd"] = {"Sama"}, ["snb"] = {"Sebuyau"}, ["snh"] = {"Shinabo"}, ["sul"] = {"Surigaonon"}, ["sum"] = {"Sumo-Mayangna"}, ["svr"] = {"Savara"}, ["szd"] = {"Seru"}, ["tbb"] = {"Tapeba"}, ["tdu"] = {"Tempasuk Dusun"}, ["tgg"] = {"Tangga"}, ["thc"] = {"Tai Hang Tong"}, ["thw"] = {"Thudam"}, ["thx"] = {"The"}, ["tid"] = {"Tidong"}, ["tie"] = {"Tingal"}, ["tkk"] = {"Takpa"}, ["tlw"] = {"South Wemale"}, ["tmk"] = {"Northwestern Tamang"}, ["tmp"] = {"Tai Mène"}, ["tne"] = {"Tinoc Kallahan"}, ["tnf"] = {"Tangshewi"}, ["toe"] = {"Tomedes"}, ["tpw"] = {"Tupí"}, ["tsf"] = {"Southwestern Tamang"}, ["unp"] = {"Worora"}, ["uok"] = {"Uokha"}, ["uun"] = {"Kulon-Pazeh"}, ["vki"] = {"Ija-Zuba"}, ["wgw"] = {"Wagawaga"}, ["wit"] = {"Wintu"}, ["wiw"] = {"Wirangu"}, ["wra"] = {"Warapu"}, ["wrd"] = {"Warduji"}, ["wya"] = {"Wyandot"}, ["xba"] = {"Kamba (Brazil)"}, ["xbx"] = {"Kabixí"}, ["xia"] = {"Xiandao"}, ["xip"] = {"Xipináwa"}, ["xkh"] = {"Karahawyana"}, ["xrq"] = {"Karranga"}, ["xss"] = {"Assan"}, ["xtz"] = {"Tasmanian"}, ["ybd"] = {"Yangbye"}, ["yds"] = {"Yiddish Sign Language"}, ["yen"] = {"Yendang"}, ["yiy"] = {"Yir Yoront"}, ["yma"] = {"Yamphe"}, ["ymt"] = {"Mator-Taygi-Karagas"}, ["ynh"] = {"Yangho"}, ["yol"] = {"Yola"}, ["yos"] = {"Yos"}, ["yri"] = {"Yarí"}, ["yuu"] = {"Yugh"}, ["zir"] = {"Ziriya"}, ["zkb"] = {"Koibal"}, ["zua"] = {"Zeem"} } return { active = active, deprecated = deprecated, } lvtjy4barx2qygel3xiiq0zt2bdqn5t 746232 746231 2026-06-12T21:52:04Z Robertsky 51025 1 revision imported from [[:en:Module:Lang/data/iana_languages]]: for workshop activity 746231 Scribunto text/plain -- File-Date: 2026-04-09 local active = { ["aa"] = {"Afar"}, ["ab"] = {"Abkhazian"}, ["ae"] = {"Avestan"}, ["af"] = {"Afrikaans"}, ["ak"] = {"Akan"}, ["am"] = {"Amharic"}, ["an"] = {"Aragonese"}, ["ar"] = {"Arabic"}, ["as"] = {"Assamese"}, ["av"] = {"Avaric"}, ["ay"] = {"Aymara"}, ["az"] = {"Azerbaijani"}, ["ba"] = {"Bashkir"}, ["be"] = {"Belarusian"}, ["bg"] = {"Bulgarian"}, ["bh"] = {"Bihari languages"}, ["bi"] = {"Bislama"}, ["bm"] = {"Bambara"}, ["bn"] = {"Bengali", "Bangla"}, ["bo"] = {"Tibetan"}, ["br"] = {"Breton"}, ["bs"] = {"Bosnian"}, ["ca"] = {"Catalan", "Valencian"}, ["ce"] = {"Chechen"}, ["ch"] = {"Chamorro"}, ["co"] = {"Corsican"}, ["cr"] = {"Cree"}, ["cs"] = {"Czech"}, ["cu"] = {"Church Slavic", "Church Slavonic", "Old Bulgarian", "Old Church Slavonic", "Old Slavonic"}, ["cv"] = {"Chuvash"}, ["cy"] = {"Welsh"}, ["da"] = {"Danish"}, ["de"] = {"German"}, ["dv"] = {"Dhivehi", "Divehi", "Maldivian"}, ["dz"] = {"Dzongkha"}, ["ee"] = {"Ewe"}, ["el"] = {"Modern Greek (1453-)"}, ["en"] = {"English"}, ["eo"] = {"Esperanto"}, ["es"] = {"Spanish", "Castilian"}, ["et"] = {"Estonian"}, ["eu"] = {"Basque"}, ["fa"] = {"Persian"}, ["ff"] = {"Fulah"}, ["fi"] = {"Finnish"}, ["fj"] = {"Fijian"}, ["fo"] = {"Faroese"}, ["fr"] = {"French"}, ["fy"] = {"Western Frisian"}, ["ga"] = {"Irish"}, ["gd"] = {"Scottish Gaelic", "Gaelic"}, ["gl"] = {"Galician"}, ["gn"] = {"Guarani"}, ["gu"] = {"Gujarati"}, ["gv"] = {"Manx"}, ["ha"] = {"Hausa"}, ["he"] = {"Hebrew"}, ["hi"] = {"Hindi"}, ["ho"] = {"Hiri Motu"}, ["hr"] = {"Croatian"}, ["ht"] = {"Haitian", "Haitian Creole"}, ["hu"] = {"Hungarian"}, ["hy"] = {"Armenian"}, ["hz"] = {"Herero"}, ["ia"] = {"Interlingua (International Auxiliary Language Association)"}, ["id"] = {"Indonesian"}, ["ie"] = {"Interlingue", "Occidental"}, ["ig"] = {"Igbo"}, ["ii"] = {"Sichuan Yi", "Nuosu"}, ["ik"] = {"Inupiaq"}, ["io"] = {"Ido"}, ["is"] = {"Icelandic"}, ["it"] = {"Italian"}, ["iu"] = {"Inuktitut"}, ["ja"] = {"Japanese"}, ["jv"] = {"Javanese"}, ["ka"] = {"Georgian"}, ["kg"] = {"Kongo"}, ["ki"] = {"Kikuyu", "Gikuyu"}, ["kj"] = {"Kuanyama", "Kwanyama"}, ["kk"] = {"Kazakh"}, ["kl"] = {"Kalaallisut", "Greenlandic"}, ["km"] = {"Khmer", "Central Khmer"}, ["kn"] = {"Kannada"}, ["ko"] = {"Korean"}, ["kr"] = {"Kanuri"}, ["ks"] = {"Kashmiri"}, ["ku"] = {"Kurdish"}, ["kv"] = {"Komi"}, ["kw"] = {"Cornish"}, ["ky"] = {"Kirghiz", "Kyrgyz"}, ["la"] = {"Latin"}, ["lb"] = {"Luxembourgish", "Letzeburgesch"}, ["lg"] = {"Ganda", "Luganda"}, ["li"] = {"Limburgan", "Limburger", "Limburgish"}, ["ln"] = {"Lingala"}, ["lo"] = {"Lao"}, ["lt"] = {"Lithuanian"}, ["lu"] = {"Luba-Katanga"}, ["lv"] = {"Latvian"}, ["mg"] = {"Malagasy"}, ["mh"] = {"Marshallese"}, ["mi"] = {"Maori"}, ["mk"] = {"Macedonian"}, ["ml"] = {"Malayalam"}, ["mn"] = {"Mongolian"}, ["mr"] = {"Marathi"}, ["ms"] = {"Malay (macrolanguage)"}, ["mt"] = {"Maltese"}, ["my"] = {"Burmese"}, ["na"] = {"Nauru"}, ["nb"] = {"Norwegian Bokmål"}, ["nd"] = {"North Ndebele"}, ["ne"] = {"Nepali (macrolanguage)"}, ["ng"] = {"Ndonga"}, ["nl"] = {"Dutch", "Flemish"}, ["nn"] = {"Norwegian Nynorsk"}, ["no"] = {"Norwegian"}, ["nr"] = {"South Ndebele"}, ["nv"] = {"Navajo", "Navaho"}, ["ny"] = {"Chichewa", "Chewa", "Nyanja"}, ["oc"] = {"Occitan (post 1500)"}, ["oj"] = {"Ojibwa"}, ["om"] = {"Oromo"}, ["or"] = {"Oriya (macrolanguage)", "Odia (macrolanguage)"}, ["os"] = {"Iron Ossetic", "Iron", "Iron Ossetian", "Ossetian", "Ossetic"}, ["pa"] = {"Panjabi", "Punjabi"}, ["pi"] = {"Pali"}, ["pl"] = {"Polish"}, ["ps"] = {"Pushto", "Pashto"}, ["pt"] = {"Portuguese"}, ["qu"] = {"Quechua"}, ["rm"] = {"Romansh"}, ["rn"] = {"Rundi"}, ["ro"] = {"Romanian", "Moldavian", "Moldovan"}, ["ru"] = {"Russian"}, ["rw"] = {"Kinyarwanda"}, ["sa"] = {"Sanskrit"}, ["sc"] = {"Sardinian"}, ["sd"] = {"Sindhi"}, ["se"] = {"Northern Sami"}, ["sg"] = {"Sango"}, ["sh"] = {"Serbo-Croatian"}, ["si"] = {"Sinhala", "Sinhalese"}, ["sk"] = {"Slovak"}, ["sl"] = {"Slovenian"}, ["sm"] = {"Samoan"}, ["sn"] = {"Shona"}, ["so"] = {"Somali"}, ["sq"] = {"Albanian"}, ["sr"] = {"Serbian"}, ["ss"] = {"Swati"}, ["st"] = {"Southern Sotho"}, ["su"] = {"Sundanese"}, ["sv"] = {"Swedish"}, ["sw"] = {"Swahili (macrolanguage)"}, ["ta"] = {"Tamil"}, ["te"] = {"Telugu"}, ["tg"] = {"Tajik"}, ["th"] = {"Thai"}, ["ti"] = {"Tigrinya"}, ["tk"] = {"Turkmen"}, ["tl"] = {"Tagalog"}, ["tn"] = {"Tswana"}, ["to"] = {"Tonga (Tonga Islands)"}, ["tr"] = {"Turkish"}, ["ts"] = {"Tsonga"}, ["tt"] = {"Tatar"}, ["tw"] = {"Twi"}, ["ty"] = {"Tahitian"}, ["ug"] = {"Uighur", "Uyghur"}, ["uk"] = {"Ukrainian"}, ["ur"] = {"Urdu"}, ["uz"] = {"Uzbek"}, ["ve"] = {"Venda"}, ["vi"] = {"Vietnamese"}, ["vo"] = {"Volapük"}, ["wa"] = {"Walloon"}, ["wo"] = {"Wolof"}, ["xh"] = {"Xhosa"}, ["yi"] = {"Yiddish"}, ["yo"] = {"Yoruba"}, ["za"] = {"Zhuang", "Chuang"}, ["zh"] = {"Chinese"}, ["zu"] = {"Zulu"}, ["aaa"] = {"Ghotuo"}, ["aab"] = {"Alumu-Tesu"}, ["aac"] = {"Ari"}, ["aad"] = {"Amal"}, ["aae"] = {"Arbëreshë Albanian"}, ["aaf"] = {"Aranadan"}, ["aag"] = {"Ambrak"}, ["aah"] = {"Abu' Arapesh"}, ["aai"] = {"Arifama-Miniafia"}, ["aak"] = {"Ankave"}, ["aal"] = {"Afade"}, ["aan"] = {"Anambé"}, ["aao"] = {"Algerian Saharan Arabic"}, ["aap"] = {"Pará Arára"}, ["aaq"] = {"Eastern Abnaki"}, ["aas"] = {"Aasáx"}, ["aat"] = {"Arvanitika Albanian"}, ["aau"] = {"Abau"}, ["aav"] = {"Austro-Asiatic languages"}, ["aaw"] = {"Solong"}, ["aax"] = {"Mandobo Atas"}, ["aaz"] = {"Amarasi"}, ["aba"] = {"Abé"}, ["abb"] = {"Bankon"}, ["abc"] = {"Ambala Ayta"}, ["abd"] = {"Manide"}, ["abe"] = {"Western Abnaki"}, ["abf"] = {"Abai Sungai"}, ["abg"] = {"Abaga"}, ["abh"] = {"Tajiki Arabic"}, ["abi"] = {"Abidji"}, ["abj"] = {"Aka-Bea"}, ["abl"] = {"Lampung Nyo"}, ["abm"] = {"Abanyom"}, ["abn"] = {"Abua"}, ["abo"] = {"Abon"}, ["abp"] = {"Abellen Ayta"}, ["abq"] = {"Abaza"}, ["abr"] = {"Abron"}, ["abs"] = {"Ambonese Malay"}, ["abt"] = {"Ambulas"}, ["abu"] = {"Abure"}, ["abv"] = {"Baharna Arabic"}, ["abw"] = {"Pal"}, ["abx"] = {"Inabaknon"}, ["aby"] = {"Aneme Wake"}, ["abz"] = {"Abui"}, ["aca"] = {"Achagua"}, ["acb"] = {"Áncá"}, ["acd"] = {"Gikyode"}, ["ace"] = {"Achinese"}, ["acf"] = {"Saint Lucian Creole French"}, ["ach"] = {"Acoli"}, ["aci"] = {"Aka-Cari"}, ["ack"] = {"Aka-Kora"}, ["acl"] = {"Akar-Bale"}, ["acm"] = {"Mesopotamian Arabic"}, ["acn"] = {"Achang"}, ["acp"] = {"Eastern Acipa"}, ["acq"] = {"Ta'izzi-Adeni Arabic"}, ["acr"] = {"Achi"}, ["acs"] = {"Acroá"}, ["act"] = {"Achterhoeks"}, ["acu"] = {"Achuar-Shiwiar"}, ["acv"] = {"Achumawi"}, ["acw"] = {"Hijazi Arabic"}, ["acx"] = {"Omani Arabic"}, ["acy"] = {"Cypriot Arabic"}, ["acz"] = {"Acheron"}, ["ada"] = {"Adangme"}, ["adb"] = {"Atauran"}, ["add"] = {"Lidzonka", "Dzodinka"}, ["ade"] = {"Adele"}, ["adf"] = {"Dhofari Arabic"}, ["adg"] = {"Andegerebinha"}, ["adh"] = {"Adhola"}, ["adi"] = {"Adi"}, ["adj"] = {"Adioukrou"}, ["adl"] = {"Galo"}, ["adn"] = {"Adang"}, ["ado"] = {"Abu"}, ["adq"] = {"Adangbe"}, ["adr"] = {"Adonara"}, ["ads"] = {"Adamorobe Sign Language"}, ["adt"] = {"Adnyamathanha"}, ["adu"] = {"Aduge"}, ["adw"] = {"Amundava"}, ["adx"] = {"Amdo Tibetan"}, ["ady"] = {"Adyghe", "Adygei"}, ["adz"] = {"Adzera"}, ["aea"] = {"Areba"}, ["aeb"] = {"Tunisian Arabic"}, ["aec"] = {"Saidi Arabic"}, ["aed"] = {"Argentine Sign Language"}, ["aee"] = {"Northeast Pashai", "Northeast Pashayi"}, ["aek"] = {"Haeke"}, ["ael"] = {"Ambele"}, ["aem"] = {"Arem"}, ["aen"] = {"Armenian Sign Language"}, ["aeq"] = {"Aer"}, ["aer"] = {"Eastern Arrernte"}, ["aes"] = {"Alsea"}, ["aeu"] = {"Akeu"}, ["aew"] = {"Ambakich"}, ["aey"] = {"Amele"}, ["aez"] = {"Aeka"}, ["afa"] = {"Afro-Asiatic languages"}, ["afb"] = {"Gulf Arabic"}, ["afd"] = {"Andai"}, ["afe"] = {"Putukwam"}, ["afg"] = {"Afghan Sign Language"}, ["afh"] = {"Afrihili"}, ["afi"] = {"Akrukay", "Chini"}, ["afk"] = {"Nanubae"}, ["afn"] = {"Defaka"}, ["afo"] = {"Eloyi"}, ["afp"] = {"Tapei"}, ["afs"] = {"Afro-Seminole Creole"}, ["aft"] = {"Afitti"}, ["afu"] = {"Awutu"}, ["afz"] = {"Obokuitai"}, ["aga"] = {"Aguano"}, ["agb"] = {"Legbo"}, ["agc"] = {"Agatu"}, ["agd"] = {"Agarabi"}, ["age"] = {"Angal"}, ["agf"] = {"Arguni"}, ["agg"] = {"Angor"}, ["agh"] = {"Ngelima"}, ["agi"] = {"Agariya"}, ["agj"] = {"Argobba"}, ["agk"] = {"Isarog Agta"}, ["agl"] = {"Fembe"}, ["agm"] = {"Angaataha"}, ["agn"] = {"Agutaynen"}, ["ago"] = {"Tainae"}, ["agq"] = {"Aghem"}, ["agr"] = {"Aguaruna"}, ["ags"] = {"Esimbi"}, ["agt"] = {"Central Cagayan Agta"}, ["agu"] = {"Aguacateco"}, ["agv"] = {"Remontado Dumagat"}, ["agw"] = {"Kahua"}, ["agx"] = {"Aghul"}, ["agy"] = {"Southern Alta"}, ["agz"] = {"Mt. Iriga Agta"}, ["aha"] = {"Ahanta"}, ["ahb"] = {"Axamb"}, ["ahg"] = {"Qimant"}, ["ahh"] = {"Aghu"}, ["ahi"] = {"Tiagbamrin Aizi"}, ["ahk"] = {"Akha"}, ["ahl"] = {"Igo"}, ["ahm"] = {"Mobumrin Aizi"}, ["ahn"] = {"Àhàn"}, ["aho"] = {"Ahom"}, ["ahp"] = {"Aproumu Aizi"}, ["ahr"] = {"Ahirani"}, ["ahs"] = {"Ashe"}, ["aht"] = {"Ahtena"}, ["aia"] = {"Arosi"}, ["aib"] = {"Ainu (China)"}, ["aic"] = {"Ainbai"}, ["aid"] = {"Alngith"}, ["aie"] = {"Amara"}, ["aif"] = {"Agi"}, ["aig"] = {"Antigua and Barbuda Creole English"}, ["aih"] = {"Ai-Cham"}, ["aii"] = {"Assyrian Neo-Aramaic"}, ["aij"] = {"Lishanid Noshan"}, ["aik"] = {"Ake"}, ["ail"] = {"Aimele"}, ["aim"] = {"Aimol"}, ["ain"] = {"Ainu (Japan)"}, ["aio"] = {"Aiton"}, ["aip"] = {"Burumakok"}, ["aiq"] = {"Aimaq"}, ["air"] = {"Airoran"}, ["ait"] = {"Arikem"}, ["aiw"] = {"Aari"}, ["aix"] = {"Aighon"}, ["aiy"] = {"Ali"}, ["aja"] = {"Aja (South Sudan)"}, ["ajg"] = {"Aja (Benin)"}, ["aji"] = {"Ajië"}, ["ajn"] = {"Andajin"}, ["ajs"] = {"Algerian Jewish Sign Language"}, ["aju"] = {"Judeo-Moroccan Arabic"}, ["ajw"] = {"Ajawa"}, ["ajz"] = {"Amri Karbi"}, ["akb"] = {"Batak Angkola"}, ["akc"] = {"Mpur"}, ["akd"] = {"Ukpet-Ehom"}, ["ake"] = {"Akawaio"}, ["akf"] = {"Akpa"}, ["akg"] = {"Anakalangu"}, ["akh"] = {"Angal Heneng"}, ["aki"] = {"Aiome"}, ["akj"] = {"Aka-Jeru"}, ["akk"] = {"Akkadian"}, ["akl"] = {"Aklanon"}, ["akm"] = {"Aka-Bo"}, ["ako"] = {"Akurio"}, ["akp"] = {"Siwu"}, ["akq"] = {"Ak"}, ["akr"] = {"Araki"}, ["aks"] = {"Akaselem"}, ["akt"] = {"Akolet"}, ["aku"] = {"Akum"}, ["akv"] = {"Akhvakh"}, ["akw"] = {"Akwa"}, ["akx"] = {"Aka-Kede"}, ["aky"] = {"Aka-Kol"}, ["akz"] = {"Alabama"}, ["ala"] = {"Alago"}, ["alc"] = {"Qawasqar"}, ["ald"] = {"Alladian"}, ["ale"] = {"Aleut"}, ["alf"] = {"Alege"}, ["alg"] = {"Algonquian languages"}, ["alh"] = {"Alawa"}, ["ali"] = {"Amaimon"}, ["alj"] = {"Alangan"}, ["alk"] = {"Alak"}, ["all"] = {"Allar"}, ["alm"] = {"Amblong"}, ["aln"] = {"Gheg Albanian"}, ["alo"] = {"Larike-Wakasihu"}, ["alp"] = {"Alune"}, ["alq"] = {"Algonquin"}, ["alr"] = {"Alutor"}, ["als"] = {"Tosk Albanian"}, ["alt"] = {"Southern Altai"}, ["alu"] = {"'Are'are"}, ["alv"] = {"Atlantic-Congo languages"}, ["alw"] = {"Alaba-K’abeena", "Wanbasana"}, ["alx"] = {"Amol"}, ["aly"] = {"Alyawarr"}, ["alz"] = {"Alur"}, ["ama"] = {"Amanayé"}, ["amb"] = {"Ambo"}, ["amc"] = {"Amahuaca"}, ["ame"] = {"Yanesha'"}, ["amf"] = {"Hamer-Banna"}, ["amg"] = {"Amurdak"}, ["ami"] = {"Amis"}, ["amj"] = {"Amdang"}, ["amk"] = {"Ambai"}, ["aml"] = {"War-Jaintia"}, ["amm"] = {"Ama (Papua New Guinea)"}, ["amn"] = {"Amanab"}, ["amo"] = {"Amo"}, ["amp"] = {"Alamblak"}, ["amq"] = {"Amahai"}, ["amr"] = {"Amarakaeri"}, ["ams"] = {"Southern Amami-Oshima"}, ["amt"] = {"Amto"}, ["amu"] = {"Guerrero Amuzgo"}, ["amv"] = {"Ambelau"}, ["amw"] = {"Western Neo-Aramaic"}, ["amx"] = {"Anmatyerre"}, ["amy"] = {"Ami"}, ["amz"] = {"Atampaya"}, ["ana"] = {"Andaqui"}, ["anb"] = {"Andoa"}, ["anc"] = {"Ngas"}, ["and"] = {"Ansus"}, ["ane"] = {"Xârâcùù"}, ["anf"] = {"Animere"}, ["ang"] = {"Old English (ca. 450-1100)"}, ["anh"] = {"Nend"}, ["ani"] = {"Andi"}, ["anj"] = {"Anor"}, ["ank"] = {"Goemai"}, ["anl"] = {"Anu-Hkongso Chin"}, ["anm"] = {"Anal"}, ["ann"] = {"Obolo"}, ["ano"] = {"Andoque"}, ["anp"] = {"Angika"}, ["anq"] = {"Jarawa (India)"}, ["anr"] = {"Andh"}, ["ans"] = {"Anserma"}, ["ant"] = {"Antakarinya", "Antikarinya"}, ["anu"] = {"Anuak"}, ["anv"] = {"Denya"}, ["anw"] = {"Anaang"}, ["anx"] = {"Andra-Hus"}, ["any"] = {"Anyin"}, ["anz"] = {"Anem"}, ["aoa"] = {"Angolar"}, ["aob"] = {"Abom"}, ["aoc"] = {"Pemon"}, ["aod"] = {"Andarum"}, ["aoe"] = {"Angal Enen"}, ["aof"] = {"Bragat"}, ["aog"] = {"Angoram"}, ["aoi"] = {"Anindilyakwa"}, ["aoj"] = {"Mufian"}, ["aok"] = {"Arhö"}, ["aol"] = {"Alor"}, ["aom"] = {"Ömie"}, ["aon"] = {"Bumbita Arapesh"}, ["aor"] = {"Aore"}, ["aos"] = {"Taikat"}, ["aot"] = {"Atong (India)", "A'tong"}, ["aou"] = {"A'ou"}, ["aox"] = {"Atorada"}, ["aoz"] = {"Uab Meto"}, ["apa"] = {"Apache languages"}, ["apb"] = {"Sa'a"}, ["apc"] = {"Levantine Arabic"}, ["apd"] = {"Sudanese Arabic"}, ["ape"] = {"Bukiyip"}, ["apf"] = {"Pahanan Agta"}, ["apg"] = {"Ampanang"}, ["aph"] = {"Athpariya"}, ["api"] = {"Apiaká"}, ["apj"] = {"Jicarilla Apache"}, ["apk"] = {"Kiowa Apache"}, ["apl"] = {"Lipan Apache"}, ["apm"] = {"Mescalero-Chiricahua Apache"}, ["apn"] = {"Apinayé"}, ["apo"] = {"Ambul"}, ["app"] = {"Apma"}, ["apq"] = {"A-Pucikwar"}, ["apr"] = {"Arop-Lokep"}, ["aps"] = {"Arop-Sissano"}, ["apt"] = {"Apatani"}, ["apu"] = {"Apurinã"}, ["apv"] = {"Alapmunte"}, ["apw"] = {"Western Apache"}, ["apx"] = {"Aputai"}, ["apy"] = {"Apalaí"}, ["apz"] = {"Safeyoka"}, ["aqa"] = {"Alacalufan languages"}, ["aqc"] = {"Archi"}, ["aqd"] = {"Ampari Dogon"}, ["aqg"] = {"Arigidi"}, ["aqk"] = {"Aninka"}, ["aql"] = {"Algic languages"}, ["aqm"] = {"Atohwaim"}, ["aqn"] = {"Northern Alta"}, ["aqp"] = {"Atakapa"}, ["aqr"] = {"Arhâ"}, ["aqt"] = {"Angaité"}, ["aqz"] = {"Akuntsu"}, ["arb"] = {"Standard Arabic"}, ["arc"] = {"Official Aramaic (700-300 BCE)", "Imperial Aramaic (700-300 BCE)"}, ["ard"] = {"Arabana"}, ["are"] = {"Western Arrarnta"}, ["arh"] = {"Arhuaco"}, ["ari"] = {"Arikara"}, ["arj"] = {"Arapaso"}, ["ark"] = {"Arikapú"}, ["arl"] = {"Arabela"}, ["arn"] = {"Mapudungun", "Mapuche"}, ["aro"] = {"Araona"}, ["arp"] = {"Arapaho"}, ["arq"] = {"Algerian Arabic"}, ["arr"] = {"Karo (Brazil)"}, ["ars"] = {"Najdi Arabic"}, ["art"] = {"Artificial languages"}, ["aru"] = {"Aruá (Amazonas State)", "Arawá"}, ["arv"] = {"Arbore"}, ["arw"] = {"Arawak"}, ["arx"] = {"Aruá (Rodonia State)"}, ["ary"] = {"Moroccan Arabic"}, ["arz"] = {"Egyptian Arabic"}, ["asa"] = {"Asu (Tanzania)"}, ["asb"] = {"Assiniboine", "Nakoda Assiniboine"}, ["asc"] = {"Casuarina Coast Asmat"}, ["ase"] = {"American Sign Language"}, ["asf"] = {"Auslan", "Australian Sign Language"}, ["asg"] = {"Cishingini"}, ["ash"] = {"Abishira"}, ["asi"] = {"Buruwai"}, ["asj"] = {"Sari"}, ["ask"] = {"Ashkun"}, ["asl"] = {"Asilulu"}, ["asn"] = {"Xingú Asuriní"}, ["aso"] = {"Dano"}, ["asp"] = {"Algerian Sign Language"}, ["asq"] = {"Austrian Sign Language"}, ["asr"] = {"Asuri"}, ["ass"] = {"Ipulo"}, ["ast"] = {"Asturian", "Asturleonese", "Bable", "Leonese"}, ["asu"] = {"Tocantins Asurini"}, ["asv"] = {"Asoa"}, ["asw"] = {"Australian Aborigines Sign Language"}, ["asx"] = {"Muratayak"}, ["asy"] = {"Yaosakor Asmat"}, ["asz"] = {"As"}, ["ata"] = {"Pele-Ata"}, ["atb"] = {"Zaiwa"}, ["atc"] = {"Atsahuaca"}, ["atd"] = {"Ata Manobo"}, ["ate"] = {"Atemble"}, ["atg"] = {"Ivbie North-Okpela-Arhe"}, ["ath"] = {"Athapascan languages"}, ["ati"] = {"Attié"}, ["atj"] = {"Atikamekw", "Nehirowimowin"}, ["atk"] = {"Ati"}, ["atl"] = {"Mt. Iraya Agta"}, ["atm"] = {"Ata"}, ["atn"] = {"Ashtiani"}, ["ato"] = {"Atong (Cameroon)"}, ["atp"] = {"Pudtol Atta"}, ["atq"] = {"Aralle-Tabulahan"}, ["atr"] = {"Waimiri-Atroari"}, ["ats"] = {"Gros Ventre"}, ["att"] = {"Pamplona Atta"}, ["atu"] = {"Reel"}, ["atv"] = {"Northern Altai"}, ["atw"] = {"Atsugewi"}, ["atx"] = {"Arutani"}, ["aty"] = {"Aneityum"}, ["atz"] = {"Arta"}, ["aua"] = {"Asumboa"}, ["aub"] = {"Alugu"}, ["auc"] = {"Waorani"}, ["aud"] = {"Anuta"}, ["auf"] = {"Arauan languages"}, ["aug"] = {"Aguna"}, ["auh"] = {"Aushi"}, ["aui"] = {"Anuki"}, ["auj"] = {"Awjilah"}, ["auk"] = {"Heyo"}, ["aul"] = {"Aulua"}, ["aum"] = {"Asu (Nigeria)"}, ["aun"] = {"Molmo One"}, ["auo"] = {"Auyokawa"}, ["aup"] = {"Makayam"}, ["auq"] = {"Anus", "Korur"}, ["aur"] = {"Aruek"}, ["aus"] = {"Australian languages"}, ["aut"] = {"Austral"}, ["auu"] = {"Auye"}, ["auw"] = {"Awyi"}, ["aux"] = {"Aurá"}, ["auy"] = {"Awiyaana"}, ["auz"] = {"Uzbeki Arabic"}, ["avb"] = {"Avau"}, ["avd"] = {"Alviri-Vidari"}, ["avi"] = {"Avikam"}, ["avk"] = {"Kotava"}, ["avl"] = {"Eastern Egyptian Bedawi Arabic"}, ["avm"] = {"Angkamuthi"}, ["avn"] = {"Avatime"}, ["avo"] = {"Agavotaguerra"}, ["avs"] = {"Aushiri"}, ["avt"] = {"Au"}, ["avu"] = {"Avokaya"}, ["avv"] = {"Avá-Canoeiro"}, ["awa"] = {"Awadhi"}, ["awb"] = {"Awa (Papua New Guinea)"}, ["awc"] = {"Cicipu"}, ["awd"] = {"Arawakan languages"}, ["awe"] = {"Awetí"}, ["awg"] = {"Anguthimri"}, ["awh"] = {"Awbono"}, ["awi"] = {"Aekyom"}, ["awk"] = {"Awabakal"}, ["awm"] = {"Arawum"}, ["awn"] = {"Awngi"}, ["awo"] = {"Awak"}, ["awr"] = {"Awera"}, ["aws"] = {"South Awyu"}, ["awt"] = {"Araweté"}, ["awu"] = {"Central Awyu"}, ["awv"] = {"Jair Awyu"}, ["aww"] = {"Awun"}, ["awx"] = {"Awara"}, ["awy"] = {"Edera Awyu"}, ["axb"] = {"Abipon"}, ["axe"] = {"Ayerrerenge"}, ["axg"] = {"Mato Grosso Arára"}, ["axk"] = {"Yaka (Central African Republic)"}, ["axl"] = {"Lower Southern Aranda"}, ["axm"] = {"Middle Armenian"}, ["axx"] = {"Xârâgurè"}, ["aya"] = {"Awar"}, ["ayb"] = {"Ayizo Gbe"}, ["ayc"] = {"Southern Aymara"}, ["ayd"] = {"Ayabadhu"}, ["aye"] = {"Ayere"}, ["ayg"] = {"Ginyanga"}, ["ayh"] = {"Hadrami Arabic"}, ["ayi"] = {"Leyigha"}, ["ayk"] = {"Akuku"}, ["ayl"] = {"Libyan Arabic"}, ["ayn"] = {"Sanaani Arabic"}, ["ayo"] = {"Ayoreo"}, ["ayp"] = {"North Mesopotamian Arabic"}, ["ayq"] = {"Ayi (Papua New Guinea)"}, ["ayr"] = {"Central Aymara"}, ["ays"] = {"Sorsogon Ayta"}, ["ayt"] = {"Magbukun Ayta"}, ["ayu"] = {"Ayu"}, ["ayz"] = {"Mai Brat"}, ["aza"] = {"Azha"}, ["azb"] = {"South Azerbaijani"}, ["azc"] = {"Uto-Aztecan languages"}, ["azd"] = {"Eastern Durango Nahuatl"}, ["azg"] = {"San Pedro Amuzgos Amuzgo"}, ["azj"] = {"North Azerbaijani"}, ["azm"] = {"Ipalapa Amuzgo"}, ["azn"] = {"Western Durango Nahuatl"}, ["azo"] = {"Awing"}, ["azt"] = {"Faire Atta"}, ["azz"] = {"Highland Puebla Nahuatl"}, ["baa"] = {"Babatana"}, ["bab"] = {"Bainouk-Gunyuño"}, ["bac"] = {"Badui"}, ["bad"] = {"Banda languages"}, ["bae"] = {"Baré"}, ["baf"] = {"Nubaca"}, ["bag"] = {"Tuki"}, ["bah"] = {"Bahamas Creole English"}, ["bai"] = {"Bamileke languages"}, ["baj"] = {"Barakai"}, ["bal"] = {"Baluchi"}, ["ban"] = {"Balinese"}, ["bao"] = {"Waimaha"}, ["bap"] = {"Bantawa"}, ["bar"] = {"Bavarian"}, ["bas"] = {"Basa (Cameroon)"}, ["bat"] = {"Baltic languages"}, ["bau"] = {"Bada (Nigeria)"}, ["bav"] = {"Vengo"}, ["baw"] = {"Bambili-Bambui"}, ["bax"] = {"Bamun"}, ["bay"] = {"Batuley"}, ["bba"] = {"Baatonum"}, ["bbb"] = {"Barai"}, ["bbc"] = {"Batak Toba"}, ["bbd"] = {"Bau"}, ["bbe"] = {"Bangba"}, ["bbf"] = {"Baibai"}, ["bbg"] = {"Barama"}, ["bbh"] = {"Bugan"}, ["bbi"] = {"Barombi"}, ["bbj"] = {"Ghomálá'"}, ["bbk"] = {"Babanki"}, ["bbl"] = {"Bats"}, ["bbm"] = {"Babango"}, ["bbn"] = {"Uneapa"}, ["bbo"] = {"Northern Bobo Madaré", "Konabéré"}, ["bbp"] = {"West Central Banda"}, ["bbq"] = {"Bamali"}, ["bbr"] = {"Girawa"}, ["bbs"] = {"Bakpinka"}, ["bbt"] = {"Mburku"}, ["bbu"] = {"Kulung (Nigeria)"}, ["bbv"] = {"Karnai"}, ["bbw"] = {"Baba"}, ["bbx"] = {"Bubia"}, ["bby"] = {"Befang"}, ["bca"] = {"Central Bai"}, ["bcb"] = {"Bainouk-Samik"}, ["bcc"] = {"Southern Balochi"}, ["bcd"] = {"North Babar"}, ["bce"] = {"Bamenyam"}, ["bcf"] = {"Bamu"}, ["bcg"] = {"Baga Pokur"}, ["bch"] = {"Bariai"}, ["bci"] = {"Baoulé"}, ["bcj"] = {"Bardi"}, ["bck"] = {"Bunuba"}, ["bcl"] = {"Central Bikol"}, ["bcm"] = {"Bannoni"}, ["bcn"] = {"Bali (Nigeria)"}, ["bco"] = {"Kaluli"}, ["bcp"] = {"Bali (Democratic Republic of Congo)"}, ["bcq"] = {"Bench"}, ["bcr"] = {"Babine"}, ["bcs"] = {"Kohumono"}, ["bct"] = {"Bendi"}, ["bcu"] = {"Awad Bing"}, ["bcv"] = {"Shoo-Minda-Nye"}, ["bcw"] = {"Bana"}, ["bcy"] = {"Bacama"}, ["bcz"] = {"Bainouk-Gunyaamolo"}, ["bda"] = {"Bayot"}, ["bdb"] = {"Basap"}, ["bdc"] = {"Emberá-Baudó"}, ["bdd"] = {"Bunama"}, ["bde"] = {"Bade"}, ["bdf"] = {"Biage"}, ["bdg"] = {"Bonggi"}, ["bdh"] = {"Baka (South Sudan)"}, ["bdi"] = {"Burun"}, ["bdj"] = {"Bai (South Sudan)", "Bai"}, ["bdk"] = {"Budukh"}, ["bdl"] = {"Indonesian Bajau"}, ["bdm"] = {"Buduma"}, ["bdn"] = {"Baldemu"}, ["bdo"] = {"Morom"}, ["bdp"] = {"Bende"}, ["bdq"] = {"Bahnar"}, ["bdr"] = {"West Coast Bajau"}, ["bds"] = {"Burunge"}, ["bdt"] = {"Bokoto"}, ["bdu"] = {"Oroko"}, ["bdv"] = {"Bodo Parja"}, ["bdw"] = {"Baham"}, ["bdx"] = {"Budong-Budong"}, ["bdy"] = {"Bandjalang"}, ["bdz"] = {"Badeshi"}, ["bea"] = {"Beaver"}, ["beb"] = {"Bebele"}, ["bec"] = {"Iceve-Maci"}, ["bed"] = {"Bedoanas"}, ["bee"] = {"Byangsi"}, ["bef"] = {"Benabena"}, ["beg"] = {"Belait"}, ["beh"] = {"Biali"}, ["bei"] = {"Bekati'"}, ["bej"] = {"Beja", "Bedawiyet"}, ["bek"] = {"Bebeli"}, ["bem"] = {"Bemba (Zambia)"}, ["beo"] = {"Beami"}, ["bep"] = {"Besoa"}, ["beq"] = {"Beembe"}, ["ber"] = {"Berber languages"}, ["bes"] = {"Besme"}, ["bet"] = {"Guiberoua Béte"}, ["beu"] = {"Blagar"}, ["bev"] = {"Daloa Bété"}, ["bew"] = {"Betawi"}, ["bex"] = {"Jur Modo"}, ["bey"] = {"Beli (Papua New Guinea)"}, ["bez"] = {"Bena (Tanzania)"}, ["bfa"] = {"Bari"}, ["bfb"] = {"Pauri Bareli"}, ["bfc"] = {"Panyi Bai", "Northern Bai"}, ["bfd"] = {"Bafut"}, ["bfe"] = {"Betaf", "Tena"}, ["bff"] = {"Bofi"}, ["bfg"] = {"Busang Kayan"}, ["bfh"] = {"Blafe"}, ["bfi"] = {"British Sign Language"}, ["bfj"] = {"Bafanji"}, ["bfk"] = {"Ban Khor Sign Language"}, ["bfl"] = {"Banda-Ndélé"}, ["bfm"] = {"Mmen"}, ["bfn"] = {"Bunak"}, ["bfo"] = {"Malba Birifor"}, ["bfp"] = {"Beba"}, ["bfq"] = {"Badaga"}, ["bfr"] = {"Bazigar"}, ["bfs"] = {"Southern Bai"}, ["bft"] = {"Balti"}, ["bfu"] = {"Gahri"}, ["bfw"] = {"Bondo"}, ["bfx"] = {"Bantayanon"}, ["bfy"] = {"Bagheli"}, ["bfz"] = {"Mahasu Pahari"}, ["bga"] = {"Gwamhi-Wuri"}, ["bgb"] = {"Bobongko"}, ["bgc"] = {"Haryanvi"}, ["bgd"] = {"Rathwi Bareli"}, ["bge"] = {"Bauria"}, ["bgf"] = {"Bangandu"}, ["bgg"] = {"Bugun"}, ["bgi"] = {"Giangan"}, ["bgj"] = {"Bangolan"}, ["bgk"] = {"Bit", "Buxinhua"}, ["bgl"] = {"Bo (Laos)"}, ["bgn"] = {"Western Balochi"}, ["bgo"] = {"Baga Koga"}, ["bgp"] = {"Eastern Balochi"}, ["bgq"] = {"Bagri"}, ["bgr"] = {"Bawm Chin"}, ["bgs"] = {"Tagabawa"}, ["bgt"] = {"Bughotu"}, ["bgu"] = {"Mbongno"}, ["bgv"] = {"Warkay-Bipim"}, ["bgw"] = {"Bhatri"}, ["bgx"] = {"Balkan Gagauz Turkish"}, ["bgy"] = {"Benggoi"}, ["bgz"] = {"Banggai"}, ["bha"] = {"Bharia"}, ["bhb"] = {"Bhili"}, ["bhc"] = {"Biga"}, ["bhd"] = {"Bhadrawahi"}, ["bhe"] = {"Bhaya"}, ["bhf"] = {"Odiai"}, ["bhg"] = {"Binandere"}, ["bhh"] = {"Bukharic"}, ["bhi"] = {"Bhilali"}, ["bhj"] = {"Bahing"}, ["bhl"] = {"Bimin"}, ["bhm"] = {"Bathari"}, ["bhn"] = {"Bohtan Neo-Aramaic"}, ["bho"] = {"Bhojpuri"}, ["bhp"] = {"Bima"}, ["bhq"] = {"Tukang Besi South"}, ["bhr"] = {"Bara Malagasy"}, ["bhs"] = {"Buwal"}, ["bht"] = {"Bhattiyali"}, ["bhu"] = {"Bhunjia"}, ["bhv"] = {"Bahau"}, ["bhw"] = {"Biak"}, ["bhx"] = {"Bhalay"}, ["bhy"] = {"Bhele"}, ["bhz"] = {"Bada (Indonesia)"}, ["bia"] = {"Badimaya"}, ["bib"] = {"Bissa", "Bisa"}, ["bid"] = {"Bidiyo"}, ["bie"] = {"Bepour"}, ["bif"] = {"Biafada"}, ["big"] = {"Biangai"}, ["bik"] = {"Bikol"}, ["bil"] = {"Bile"}, ["bim"] = {"Bimoba"}, ["bin"] = {"Bini", "Edo"}, ["bio"] = {"Nai"}, ["bip"] = {"Bila"}, ["biq"] = {"Bipi"}, ["bir"] = {"Bisorio"}, ["bit"] = {"Berinomo"}, ["biu"] = {"Biete"}, ["biv"] = {"Southern Birifor"}, ["biw"] = {"Kol (Cameroon)"}, ["bix"] = {"Bijori"}, ["biy"] = {"Birhor"}, ["biz"] = {"Baloi"}, ["bja"] = {"Budza"}, ["bjb"] = {"Banggarla"}, ["bjc"] = {"Bariji"}, ["bje"] = {"Biao-Jiao Mien"}, ["bjf"] = {"Barzani Jewish Neo-Aramaic"}, ["bjg"] = {"Bidyogo"}, ["bjh"] = {"Bahinemo"}, ["bji"] = {"Burji"}, ["bjj"] = {"Kanauji"}, ["bjk"] = {"Barok"}, ["bjl"] = {"Bulu (Papua New Guinea)"}, ["bjm"] = {"Bajelani"}, ["bjn"] = {"Banjar"}, ["bjo"] = {"Mid-Southern Banda"}, ["bjp"] = {"Fanamaket"}, ["bjr"] = {"Binumarien"}, ["bjs"] = {"Bajan"}, ["bjt"] = {"Balanta-Ganja"}, ["bju"] = {"Busuu"}, ["bjv"] = {"Bedjond"}, ["bjw"] = {"Bakwé"}, ["bjx"] = {"Banao Itneg"}, ["bjy"] = {"Bayali"}, ["bjz"] = {"Baruga"}, ["bka"] = {"Kyak"}, ["bkc"] = {"Baka (Cameroon)"}, ["bkd"] = {"Binukid", "Talaandig"}, ["bkf"] = {"Beeke"}, ["bkg"] = {"Buraka"}, ["bkh"] = {"Bakoko"}, ["bki"] = {"Baki"}, ["bkj"] = {"Pande"}, ["bkk"] = {"Brokskat"}, ["bkl"] = {"Berik"}, ["bkm"] = {"Kom (Cameroon)"}, ["bkn"] = {"Bukitan"}, ["bko"] = {"Kwa'"}, ["bkp"] = {"Boko (Democratic Republic of Congo)"}, ["bkq"] = {"Bakairí"}, ["bkr"] = {"Bakumpai"}, ["bks"] = {"Northern Sorsoganon"}, ["bkt"] = {"Boloki"}, ["bku"] = {"Buhid"}, ["bkv"] = {"Bekwarra"}, ["bkw"] = {"Bekwel"}, ["bkx"] = {"Baikeno"}, ["bky"] = {"Bokyi"}, ["bkz"] = {"Bungku"}, ["bla"] = {"Siksika"}, ["blb"] = {"Bilua"}, ["blc"] = {"Bella Coola"}, ["bld"] = {"Bolango"}, ["ble"] = {"Balanta-Kentohe"}, ["blf"] = {"Buol"}, ["blh"] = {"Kuwaa"}, ["bli"] = {"Bolia"}, ["blj"] = {"Bolongan"}, ["blk"] = {"Pa'o Karen", "Pa'O"}, ["bll"] = {"Biloxi"}, ["blm"] = {"Beli (South Sudan)"}, ["bln"] = {"Southern Catanduanes Bikol"}, ["blo"] = {"Anii"}, ["blp"] = {"Blablanga"}, ["blq"] = {"Baluan-Pam"}, ["blr"] = {"Blang"}, ["bls"] = {"Balaesang"}, ["blt"] = {"Tai Dam"}, ["blv"] = {"Kibala", "Bolo"}, ["blw"] = {"Balangao"}, ["blx"] = {"Mag-Indi Ayta"}, ["bly"] = {"Notre"}, ["blz"] = {"Balantak"}, ["bma"] = {"Lame"}, ["bmb"] = {"Bembe"}, ["bmc"] = {"Biem"}, ["bmd"] = {"Baga Manduri"}, ["bme"] = {"Limassa"}, ["bmf"] = {"Bom-Kim"}, ["bmg"] = {"Bamwe"}, ["bmh"] = {"Kein"}, ["bmi"] = {"Bagirmi"}, ["bmj"] = {"Bote-Majhi"}, ["bmk"] = {"Ghayavi"}, ["bml"] = {"Bomboli"}, ["bmm"] = {"Northern Betsimisaraka Malagasy"}, ["bmn"] = {"Bina (Papua New Guinea)"}, ["bmo"] = {"Bambalang"}, ["bmp"] = {"Bulgebi"}, ["bmq"] = {"Bomu"}, ["bmr"] = {"Muinane"}, ["bms"] = {"Bilma Kanuri"}, ["bmt"] = {"Biao Mon"}, ["bmu"] = {"Somba-Siawari"}, ["bmv"] = {"Bum"}, ["bmw"] = {"Bomwali"}, ["bmx"] = {"Baimak"}, ["bmz"] = {"Baramu"}, ["bna"] = {"Bonerate"}, ["bnb"] = {"Bookan"}, ["bnc"] = {"Bontok"}, ["bnd"] = {"Banda (Indonesia)"}, ["bne"] = {"Bintauna"}, ["bnf"] = {"Masiwang"}, ["bng"] = {"Benga"}, ["bni"] = {"Bangi"}, ["bnj"] = {"Eastern Tawbuid"}, ["bnk"] = {"Bierebo"}, ["bnl"] = {"Boon"}, ["bnm"] = {"Batanga"}, ["bnn"] = {"Bunun"}, ["bno"] = {"Bantoanon"}, ["bnp"] = {"Bola"}, ["bnq"] = {"Bantik"}, ["bnr"] = {"Butmas-Tur"}, ["bns"] = {"Bundeli"}, ["bnt"] = {"Bantu languages"}, ["bnu"] = {"Bentong"}, ["bnv"] = {"Bonerif", "Beneraf", "Edwas"}, ["bnw"] = {"Bisis"}, ["bnx"] = {"Bangubangu"}, ["bny"] = {"Bintulu"}, ["bnz"] = {"Beezen"}, ["boa"] = {"Bora"}, ["bob"] = {"Aweer"}, ["boe"] = {"Mundabli-Mufu"}, ["bof"] = {"Bolon"}, ["bog"] = {"Bamako Sign Language"}, ["boh"] = {"Boma"}, ["boi"] = {"Barbareño"}, ["boj"] = {"Anjam"}, ["bok"] = {"Bonjo"}, ["bol"] = {"Bole"}, ["bom"] = {"Berom"}, ["bon"] = {"Bine"}, ["boo"] = {"Tiemacèwè Bozo"}, ["bop"] = {"Bonkiman"}, ["boq"] = {"Bogaya"}, ["bor"] = {"Borôro"}, ["bot"] = {"Bongo"}, ["bou"] = {"Bondei"}, ["bov"] = {"Tuwuli"}, ["bow"] = {"Rema"}, ["box"] = {"Buamu"}, ["boy"] = {"Bodo (Central African Republic)"}, ["boz"] = {"Tiéyaxo Bozo"}, ["bpa"] = {"Daakaka"}, ["bpc"] = {"Mbuk"}, ["bpd"] = {"Banda-Banda"}, ["bpe"] = {"Bauni"}, ["bpg"] = {"Bonggo"}, ["bph"] = {"Botlikh"}, ["bpi"] = {"Bagupi"}, ["bpj"] = {"Binji"}, ["bpk"] = {"Orowe", "'Ôrôê"}, ["bpl"] = {"Broome Pearling Lugger Pidgin"}, ["bpm"] = {"Biyom"}, ["bpn"] = {"Dzao Min"}, ["bpo"] = {"Anasi"}, ["bpp"] = {"Kaure"}, ["bpq"] = {"Banda Malay"}, ["bpr"] = {"Koronadal Blaan"}, ["bps"] = {"Sarangani Blaan"}, ["bpt"] = {"Barrow Point"}, ["bpu"] = {"Bongu"}, ["bpv"] = {"Bian Marind"}, ["bpw"] = {"Bo (Papua New Guinea)"}, ["bpx"] = {"Palya Bareli"}, ["bpy"] = {"Bishnupriya"}, ["bpz"] = {"Bilba"}, ["bqa"] = {"Tchumbuli"}, ["bqb"] = {"Bagusa"}, ["bqc"] = {"Boko (Benin)", "Boo"}, ["bqd"] = {"Bung"}, ["bqf"] = {"Baga Kaloum"}, ["bqg"] = {"Bago-Kusuntu"}, ["bqh"] = {"Baima"}, ["bqi"] = {"Bakhtiari"}, ["bqj"] = {"Bandial"}, ["bqk"] = {"Banda-Mbrès"}, ["bql"] = {"Karian", "Bilakura"}, ["bqm"] = {"Wumboko"}, ["bqn"] = {"Bulgarian Sign Language"}, ["bqo"] = {"Balo"}, ["bqp"] = {"Busa"}, ["bqq"] = {"Biritai"}, ["bqr"] = {"Burusu"}, ["bqs"] = {"Bosngun"}, ["bqt"] = {"Bamukumbit"}, ["bqu"] = {"Boguru"}, ["bqv"] = {"Koro Wachi", "Begbere-Ejar"}, ["bqw"] = {"Buru (Nigeria)"}, ["bqx"] = {"Baangi"}, ["bqy"] = {"Bengkala Sign Language"}, ["bqz"] = {"Bakaka"}, ["bra"] = {"Braj"}, ["brb"] = {"Brao", "Lave"}, ["brc"] = {"Berbice Creole Dutch"}, ["brd"] = {"Baraamu"}, ["brf"] = {"Bira"}, ["brg"] = {"Baure"}, ["brh"] = {"Brahui"}, ["bri"] = {"Mokpwe"}, ["brj"] = {"Bieria"}, ["brk"] = {"Birked"}, ["brl"] = {"Birwa"}, ["brm"] = {"Barambu"}, ["brn"] = {"Boruca"}, ["bro"] = {"Brokkat"}, ["brp"] = {"Barapasi"}, ["brq"] = {"Breri"}, ["brr"] = {"Birao"}, ["brs"] = {"Baras"}, ["brt"] = {"Bitare"}, ["bru"] = {"Eastern Bru"}, ["brv"] = {"Western Bru"}, ["brw"] = {"Bellari"}, ["brx"] = {"Bodo (India)"}, ["bry"] = {"Burui"}, ["brz"] = {"Bilbil"}, ["bsa"] = {"Abinomn"}, ["bsb"] = {"Brunei Bisaya"}, ["bsc"] = {"Bassari", "Oniyan"}, ["bse"] = {"Wushi"}, ["bsf"] = {"Bauchi"}, ["bsg"] = {"Bashkardi"}, ["bsh"] = {"Kati"}, ["bsi"] = {"Bassossi"}, ["bsj"] = {"Bangwinji"}, ["bsk"] = {"Burushaski"}, ["bsl"] = {"Basa-Gumna"}, ["bsm"] = {"Busami"}, ["bsn"] = {"Barasana-Eduria"}, ["bso"] = {"Buso"}, ["bsp"] = {"Baga Sitemu"}, ["bsq"] = {"Bassa"}, ["bsr"] = {"Bassa-Kontagora"}, ["bss"] = {"Akoose"}, ["bst"] = {"Basketo"}, ["bsu"] = {"Bahonsuai"}, ["bsv"] = {"Baga Sobané"}, ["bsw"] = {"Baiso"}, ["bsx"] = {"Yangkam"}, ["bsy"] = {"Sabah Bisaya"}, ["bta"] = {"Bata"}, ["btc"] = {"Bati (Cameroon)"}, ["btd"] = {"Batak Dairi"}, ["bte"] = {"Gamo-Ningi"}, ["btf"] = {"Birgit"}, ["btg"] = {"Gagnoa Bété"}, ["bth"] = {"Biatah Bidayuh"}, ["bti"] = {"Burate"}, ["btj"] = {"Bacanese Malay"}, ["btk"] = {"Batak languages"}, ["btm"] = {"Batak Mandailing"}, ["btn"] = {"Ratagnon"}, ["bto"] = {"Rinconada Bikol"}, ["btp"] = {"Budibud"}, ["btq"] = {"Batek"}, ["btr"] = {"Baetora"}, ["bts"] = {"Batak Simalungun"}, ["btt"] = {"Bete-Bendi"}, ["btu"] = {"Batu"}, ["btv"] = {"Bateri"}, ["btw"] = {"Butuanon"}, ["btx"] = {"Batak Karo"}, ["bty"] = {"Bobot"}, ["btz"] = {"Batak Alas-Kluet"}, ["bua"] = {"Buriat"}, ["bub"] = {"Bua"}, ["buc"] = {"Bushi"}, ["bud"] = {"Ntcham"}, ["bue"] = {"Beothuk"}, ["buf"] = {"Bushoong"}, ["bug"] = {"Buginese"}, ["buh"] = {"Younuo Bunu"}, ["bui"] = {"Bongili"}, ["buj"] = {"Basa-Gurmana"}, ["buk"] = {"Bugawac"}, ["bum"] = {"Bulu (Cameroon)"}, ["bun"] = {"Sherbro"}, ["buo"] = {"Terei"}, ["bup"] = {"Busoa"}, ["buq"] = {"Brem"}, ["bus"] = {"Bokobaru"}, ["but"] = {"Bungain"}, ["buu"] = {"Budu"}, ["buv"] = {"Bun"}, ["buw"] = {"Bubi"}, ["bux"] = {"Boghom"}, ["buy"] = {"Bullom So"}, ["buz"] = {"Bukwen"}, ["bva"] = {"Barein"}, ["bvb"] = {"Bube"}, ["bvc"] = {"Baelelea"}, ["bvd"] = {"Baeggu"}, ["bve"] = {"Berau Malay"}, ["bvf"] = {"Boor"}, ["bvg"] = {"Bonkeng"}, ["bvh"] = {"Bure"}, ["bvi"] = {"Belanda Viri"}, ["bvj"] = {"Baan"}, ["bvk"] = {"Bukat"}, ["bvl"] = {"Bolivian Sign Language"}, ["bvm"] = {"Bamunka"}, ["bvn"] = {"Buna"}, ["bvo"] = {"Bolgo"}, ["bvp"] = {"Bumang"}, ["bvq"] = {"Birri"}, ["bvr"] = {"Burarra"}, ["bvt"] = {"Bati (Indonesia)"}, ["bvu"] = {"Bukit Malay"}, ["bvv"] = {"Baniva"}, ["bvw"] = {"Boga"}, ["bvx"] = {"Dibole"}, ["bvy"] = {"Baybayanon"}, ["bvz"] = {"Bauzi"}, ["bwa"] = {"Bwatoo"}, ["bwb"] = {"Namosi-Naitasiri-Serua"}, ["bwc"] = {"Bwile"}, ["bwd"] = {"Bwaidoka"}, ["bwe"] = {"Bwe Karen"}, ["bwf"] = {"Boselewa"}, ["bwg"] = {"Barwe"}, ["bwh"] = {"Bishuo"}, ["bwi"] = {"Baniwa"}, ["bwj"] = {"Láá Láá Bwamu"}, ["bwk"] = {"Bauwaki"}, ["bwl"] = {"Bwela"}, ["bwm"] = {"Biwat"}, ["bwn"] = {"Wunai Bunu"}, ["bwo"] = {"Boro (Ethiopia)", "Borna (Ethiopia)"}, ["bwp"] = {"Mandobo Bawah"}, ["bwq"] = {"Southern Bobo Madaré"}, ["bwr"] = {"Bura-Pabir"}, ["bws"] = {"Bomboma"}, ["bwt"] = {"Bafaw-Balong"}, ["bwu"] = {"Buli (Ghana)"}, ["bww"] = {"Bwa"}, ["bwx"] = {"Bu-Nao Bunu"}, ["bwy"] = {"Cwi Bwamu"}, ["bwz"] = {"Bwisi"}, ["bxa"] = {"Tairaha"}, ["bxb"] = {"Belanda Bor"}, ["bxc"] = {"Molengue"}, ["bxd"] = {"Pela"}, ["bxe"] = {"Birale"}, ["bxf"] = {"Bilur", "Minigir"}, ["bxg"] = {"Bangala"}, ["bxh"] = {"Buhutu"}, ["bxi"] = {"Pirlatapa"}, ["bxj"] = {"Bayungu"}, ["bxk"] = {"Bukusu", "Lubukusu"}, ["bxl"] = {"Jalkunan"}, ["bxm"] = {"Mongolia Buriat"}, ["bxn"] = {"Burduna"}, ["bxo"] = {"Barikanchi"}, ["bxp"] = {"Bebil"}, ["bxq"] = {"Beele"}, ["bxr"] = {"Russia Buriat"}, ["bxs"] = {"Busam"}, ["bxu"] = {"China Buriat"}, ["bxv"] = {"Berakou"}, ["bxw"] = {"Bankagooma"}, ["bxz"] = {"Binahari"}, ["bya"] = {"Batak"}, ["byb"] = {"Bikya"}, ["byc"] = {"Ubaghara"}, ["byd"] = {"Benyadu'"}, ["bye"] = {"Pouye"}, ["byf"] = {"Bete"}, ["byg"] = {"Baygo"}, ["byh"] = {"Bhujel"}, ["byi"] = {"Buyu"}, ["byj"] = {"Bina (Nigeria)"}, ["byk"] = {"Biao"}, ["byl"] = {"Bayono"}, ["bym"] = {"Bidjara"}, ["byn"] = {"Bilin", "Blin"}, ["byo"] = {"Biyo"}, ["byp"] = {"Bumaji"}, ["byq"] = {"Basay"}, ["byr"] = {"Baruya", "Yipma"}, ["bys"] = {"Burak"}, ["byt"] = {"Berti"}, ["byv"] = {"Medumba"}, ["byw"] = {"Belhariya"}, ["byx"] = {"Qaqet"}, ["byz"] = {"Banaro"}, ["bza"] = {"Bandi"}, ["bzb"] = {"Andio"}, ["bzc"] = {"Southern Betsimisaraka Malagasy"}, ["bzd"] = {"Bribri"}, ["bze"] = {"Jenaama Bozo"}, ["bzf"] = {"Boikin"}, ["bzg"] = {"Babuza"}, ["bzh"] = {"Mapos Buang"}, ["bzi"] = {"Bisu"}, ["bzj"] = {"Belize Kriol English"}, ["bzk"] = {"Nicaragua Creole English"}, ["bzl"] = {"Boano (Sulawesi)"}, ["bzm"] = {"Bolondo"}, ["bzn"] = {"Boano (Maluku)"}, ["bzo"] = {"Bozaba"}, ["bzp"] = {"Kemberano"}, ["bzq"] = {"Buli (Indonesia)"}, ["bzr"] = {"Biri"}, ["bzs"] = {"Brazilian Sign Language"}, ["bzt"] = {"Brithenig"}, ["bzu"] = {"Burmeso"}, ["bzv"] = {"Naami"}, ["bzw"] = {"Basa (Nigeria)"}, ["bzx"] = {"Kɛlɛngaxo Bozo"}, ["bzy"] = {"Obanliku"}, ["bzz"] = {"Evant"}, ["caa"] = {"Chortí"}, ["cab"] = {"Garifuna"}, ["cac"] = {"Chuj"}, ["cad"] = {"Caddo"}, ["cae"] = {"Lehar", "Laalaa"}, ["caf"] = {"Southern Carrier"}, ["cag"] = {"Nivaclé"}, ["cah"] = {"Cahuarano"}, ["cai"] = {"Central American Indian languages"}, ["caj"] = {"Chané"}, ["cak"] = {"Kaqchikel", "Cakchiquel"}, ["cal"] = {"Carolinian"}, ["cam"] = {"Cemuhî"}, ["can"] = {"Chambri"}, ["cao"] = {"Chácobo"}, ["cap"] = {"Chipaya"}, ["caq"] = {"Car Nicobarese"}, ["car"] = {"Galibi Carib"}, ["cas"] = {"Tsimané"}, ["cau"] = {"Caucasian languages"}, ["cav"] = {"Cavineña"}, ["caw"] = {"Callawalla"}, ["cax"] = {"Chiquitano"}, ["cay"] = {"Cayuga"}, ["caz"] = {"Canichana"}, ["cba"] = {"Chibchan languages"}, ["cbb"] = {"Cabiyarí"}, ["cbc"] = {"Carapana"}, ["cbd"] = {"Carijona"}, ["cbg"] = {"Chimila"}, ["cbi"] = {"Chachi"}, ["cbj"] = {"Ede Cabe"}, ["cbk"] = {"Chavacano"}, ["cbl"] = {"Bualkhaw Chin"}, ["cbn"] = {"Nyahkur"}, ["cbo"] = {"Izora"}, ["cbq"] = {"Tsucuba", "Cuba"}, ["cbr"] = {"Cashibo-Cacataibo"}, ["cbs"] = {"Cashinahua"}, ["cbt"] = {"Chayahuita"}, ["cbu"] = {"Candoshi-Shapra"}, ["cbv"] = {"Cacua"}, ["cbw"] = {"Kinabalian"}, ["cby"] = {"Carabayo"}, ["ccc"] = {"Chamicuro"}, ["ccd"] = {"Cafundo Creole"}, ["cce"] = {"Chopi"}, ["ccg"] = {"Samba Daka"}, ["cch"] = {"Atsam"}, ["ccj"] = {"Kasanga"}, ["ccl"] = {"Cutchi-Swahili"}, ["ccm"] = {"Malaccan Creole Malay"}, ["ccn"] = {"North Caucasian languages"}, ["cco"] = {"Comaltepec Chinantec"}, ["ccp"] = {"Chakma"}, ["ccr"] = {"Cacaopera"}, ["ccs"] = {"South Caucasian languages"}, ["cda"] = {"Choni"}, ["cdc"] = {"Chadic languages"}, ["cdd"] = {"Caddoan languages"}, ["cde"] = {"Chenchu"}, ["cdf"] = {"Chiru"}, ["cdh"] = {"Chambeali"}, ["cdi"] = {"Chodri"}, ["cdj"] = {"Churahi"}, ["cdm"] = {"Chepang"}, ["cdn"] = {"Chaudangsi"}, ["cdo"] = {"Min Dong Chinese"}, ["cdr"] = {"Cinda-Regi-Tiyal"}, ["cds"] = {"Chadian Sign Language"}, ["cdy"] = {"Chadong"}, ["cdz"] = {"Koda"}, ["cea"] = {"Lower Chehalis"}, ["ceb"] = {"Cebuano"}, ["ceg"] = {"Chamacoco"}, ["cek"] = {"Eastern Khumi Chin"}, ["cel"] = {"Celtic languages"}, ["cen"] = {"Cen"}, ["cet"] = {"Centúúm"}, ["cey"] = {"Ekai Chin"}, ["cfa"] = {"Dijim-Bwilim"}, ["cfd"] = {"Cara"}, ["cfg"] = {"Como Karim"}, ["cfm"] = {"Falam Chin"}, ["cga"] = {"Changriwa"}, ["cgc"] = {"Kagayanen"}, ["cgg"] = {"Chiga"}, ["cgk"] = {"Chocangacakha"}, ["chb"] = {"Chibcha"}, ["chc"] = {"Catawba"}, ["chd"] = {"Highland Oaxaca Chontal"}, ["chf"] = {"Tabasco Chontal"}, ["chg"] = {"Chagatai"}, ["chh"] = {"Chinook"}, ["chj"] = {"Ojitlán Chinantec"}, ["chk"] = {"Chuukese"}, ["chl"] = {"Cahuilla"}, ["chm"] = {"Mari (Russia)"}, ["chn"] = {"Chinook jargon"}, ["cho"] = {"Choctaw"}, ["chp"] = {"Chipewyan", "Dene Suline"}, ["chq"] = {"Quiotepec Chinantec"}, ["chr"] = {"Cherokee"}, ["cht"] = {"Cholón"}, ["chw"] = {"Chuwabu"}, ["chx"] = {"Chantyal"}, ["chy"] = {"Cheyenne"}, ["chz"] = {"Ozumacín Chinantec"}, ["cia"] = {"Cia-Cia"}, ["cib"] = {"Ci Gbe"}, ["cic"] = {"Chickasaw"}, ["cid"] = {"Chimariko"}, ["cie"] = {"Cineni"}, ["cih"] = {"Chinali"}, ["cik"] = {"Chitkuli Kinnauri"}, ["cim"] = {"Cimbrian"}, ["cin"] = {"Cinta Larga"}, ["cip"] = {"Chiapanec"}, ["cir"] = {"Tiri", "Haméa", "Méa"}, ["ciw"] = {"Chippewa"}, ["ciy"] = {"Chaima"}, ["cja"] = {"Western Cham"}, ["cje"] = {"Chru"}, ["cjh"] = {"Upper Chehalis"}, ["cji"] = {"Chamalal"}, ["cjk"] = {"Chokwe"}, ["cjm"] = {"Eastern Cham"}, ["cjn"] = {"Chenapian"}, ["cjo"] = {"Ashéninka Pajonal"}, ["cjp"] = {"Cabécar"}, ["cjs"] = {"Shor"}, ["cjv"] = {"Chuave"}, ["cjy"] = {"Jinyu Chinese"}, ["ckb"] = {"Central Kurdish"}, ["ckh"] = {"Chak"}, ["ckl"] = {"Cibak"}, ["ckm"] = {"Chakavian"}, ["ckn"] = {"Kaang Chin"}, ["cko"] = {"Anufo"}, ["ckq"] = {"Kajakse"}, ["ckr"] = {"Kairak"}, ["cks"] = {"Tayo"}, ["ckt"] = {"Chukot"}, ["cku"] = {"Koasati"}, ["ckv"] = {"Kavalan"}, ["ckx"] = {"Caka"}, ["cky"] = {"Cakfem-Mushere"}, ["ckz"] = {"Cakchiquel-Quiché Mixed Language"}, ["cla"] = {"Ron"}, ["clc"] = {"Chilcotin", "Tsilhqot’in"}, ["cld"] = {"Chaldean Neo-Aramaic"}, ["cle"] = {"Lealao Chinantec"}, ["clh"] = {"Chilisso"}, ["cli"] = {"Chakali"}, ["clj"] = {"Laitu Chin"}, ["clk"] = {"Idu-Mishmi"}, ["cll"] = {"Chala"}, ["clm"] = {"Klallam", "Clallam"}, ["clo"] = {"Lowland Oaxaca Chontal"}, ["cls"] = {"Classical Sanskrit"}, ["clt"] = {"Lautu Chin"}, ["clu"] = {"Caluyanun"}, ["clw"] = {"Chulym"}, ["cly"] = {"Eastern Highland Chatino"}, ["cma"] = {"Maa"}, ["cmc"] = {"Chamic languages"}, ["cme"] = {"Cerma"}, ["cmg"] = {"Classical Mongolian"}, ["cmi"] = {"Emberá-Chamí"}, ["cml"] = {"Campalagian"}, ["cmm"] = {"Michigamea"}, ["cmn"] = {"Mandarin Chinese"}, ["cmo"] = {"Central Mnong"}, ["cmr"] = {"Mro-Khimi Chin"}, ["cms"] = {"Messapic"}, ["cmt"] = {"Camtho"}, ["cna"] = {"Changthang"}, ["cnb"] = {"Chinbon Chin"}, ["cnc"] = {"Côông"}, ["cng"] = {"Northern Qiang"}, ["cnh"] = {"Hakha Chin", "Haka Chin"}, ["cni"] = {"Asháninka"}, ["cnk"] = {"Khumi Chin"}, ["cnl"] = {"Lalana Chinantec"}, ["cno"] = {"Con"}, ["cnp"] = {"Northern Ping Chinese", "Northern Pinghua"}, ["cnq"] = {"Chung"}, ["cnr"] = {"Montenegrin"}, ["cns"] = {"Central Asmat"}, ["cnt"] = {"Tepetotutla Chinantec"}, ["cnu"] = {"Chenoua"}, ["cnw"] = {"Ngawn Chin"}, ["cnx"] = {"Middle Cornish"}, ["coa"] = {"Cocos Islands Malay"}, ["cob"] = {"Chicomuceltec"}, ["coc"] = {"Cocopa"}, ["cod"] = {"Cocama-Cocamilla"}, ["coe"] = {"Koreguaje"}, ["cof"] = {"Colorado"}, ["cog"] = {"Chong"}, ["coh"] = {"Chonyi-Dzihana-Kauma", "Chichonyi-Chidzihana-Chikauma"}, ["coj"] = {"Cochimi"}, ["cok"] = {"Santa Teresa Cora"}, ["col"] = {"Columbia-Wenatchi"}, ["com"] = {"Comanche"}, ["con"] = {"Cofán"}, ["coo"] = {"Comox"}, ["cop"] = {"Coptic"}, ["coq"] = {"Coquille"}, ["cot"] = {"Caquinte"}, ["cou"] = {"Wamey"}, ["cov"] = {"Cao Miao"}, ["cow"] = {"Cowlitz"}, ["cox"] = {"Nanti"}, ["coz"] = {"Chochotec"}, ["cpa"] = {"Palantla Chinantec"}, ["cpb"] = {"Ucayali-Yurúa Ashéninka"}, ["cpc"] = {"Ajyíninka Apurucayali"}, ["cpe"] = {"English-based creoles and pidgins"}, ["cpf"] = {"French-based creoles and pidgins"}, ["cpg"] = {"Cappadocian Greek"}, ["cpi"] = {"Chinese Pidgin English"}, ["cpn"] = {"Cherepon"}, ["cpo"] = {"Kpeego"}, ["cpp"] = {"Portuguese-based creoles and pidgins"}, ["cps"] = {"Capiznon"}, ["cpu"] = {"Pichis Ashéninka"}, ["cpx"] = {"Pu-Xian Chinese"}, ["cpy"] = {"South Ucayali Ashéninka"}, ["cqd"] = {"Chuanqiandian Cluster Miao"}, ["cra"] = {"Chara"}, ["crb"] = {"Island Carib"}, ["crc"] = {"Lonwolwol"}, ["crd"] = {"Coeur d'Alene"}, ["crf"] = {"Caramanta"}, ["crg"] = {"Michif"}, ["crh"] = {"Crimean Tatar", "Crimean Turkish"}, ["cri"] = {"Sãotomense"}, ["crj"] = {"Southern East Cree"}, ["crk"] = {"Plains Cree"}, ["crl"] = {"Northern East Cree"}, ["crm"] = {"Moose Cree"}, ["crn"] = {"El Nayar Cora"}, ["cro"] = {"Crow"}, ["crp"] = {"Creoles and pidgins"}, ["crq"] = {"Iyo'wujwa Chorote"}, ["crr"] = {"Carolina Algonquian"}, ["crs"] = {"Seselwa Creole French"}, ["crt"] = {"Iyojwa'ja Chorote"}, ["crv"] = {"Chaura"}, ["crw"] = {"Chrau"}, ["crx"] = {"Carrier"}, ["cry"] = {"Cori"}, ["crz"] = {"Cruzeño"}, ["csa"] = {"Chiltepec Chinantec"}, ["csb"] = {"Kashubian"}, ["csc"] = {"Catalan Sign Language", "Lengua de señas catalana", "Llengua de Signes Catalana"}, ["csd"] = {"Chiangmai Sign Language"}, ["cse"] = {"Czech Sign Language"}, ["csf"] = {"Cuba Sign Language"}, ["csg"] = {"Chilean Sign Language"}, ["csh"] = {"Asho Chin"}, ["csi"] = {"Coast Miwok"}, ["csj"] = {"Songlai Chin"}, ["csk"] = {"Jola-Kasa"}, ["csl"] = {"Chinese Sign Language"}, ["csm"] = {"Central Sierra Miwok"}, ["csn"] = {"Colombian Sign Language"}, ["cso"] = {"Sochiapam Chinantec", "Sochiapan Chinantec"}, ["csp"] = {"Southern Ping Chinese", "Southern Pinghua"}, ["csq"] = {"Croatia Sign Language"}, ["csr"] = {"Costa Rican Sign Language"}, ["css"] = {"Southern Ohlone"}, ["cst"] = {"Northern Ohlone"}, ["csu"] = {"Central Sudanic languages"}, ["csv"] = {"Sumtu Chin"}, ["csw"] = {"Swampy Cree"}, ["csx"] = {"Cambodian Sign Language"}, ["csy"] = {"Siyin Chin"}, ["csz"] = {"Coos"}, ["cta"] = {"Tataltepec Chatino"}, ["ctc"] = {"Chetco"}, ["ctd"] = {"Tedim Chin"}, ["cte"] = {"Tepinapa Chinantec"}, ["ctg"] = {"Chittagonian"}, ["cth"] = {"Thaiphum Chin"}, ["ctl"] = {"Tlacoatzintepec Chinantec"}, ["ctm"] = {"Chitimacha"}, ["ctn"] = {"Chhintange"}, ["cto"] = {"Emberá-Catío"}, ["ctp"] = {"Western Highland Chatino"}, ["cts"] = {"Northern Catanduanes Bikol"}, ["ctt"] = {"Wayanad Chetti"}, ["ctu"] = {"Chol"}, ["cty"] = {"Moundadan Chetty"}, ["ctz"] = {"Zacatepec Chatino"}, ["cua"] = {"Cua"}, ["cub"] = {"Cubeo"}, ["cuc"] = {"Usila Chinantec"}, ["cuh"] = {"Chuka", "Gichuka"}, ["cui"] = {"Cuiba"}, ["cuj"] = {"Mashco Piro"}, ["cuk"] = {"San Blas Kuna"}, ["cul"] = {"Culina", "Kulina"}, ["cuo"] = {"Cumanagoto"}, ["cup"] = {"Cupeño"}, ["cuq"] = {"Cun"}, ["cur"] = {"Chhulung"}, ["cus"] = {"Cushitic languages"}, ["cut"] = {"Teutila Cuicatec"}, ["cuu"] = {"Tai Ya"}, ["cuv"] = {"Cuvok"}, ["cuw"] = {"Chukwa"}, ["cux"] = {"Tepeuxila Cuicatec"}, ["cuy"] = {"Cuitlatec"}, ["cvg"] = {"Chug"}, ["cvn"] = {"Valle Nacional Chinantec"}, ["cwa"] = {"Kabwa"}, ["cwb"] = {"Maindo"}, ["cwd"] = {"Woods Cree"}, ["cwe"] = {"Kwere"}, ["cwg"] = {"Chewong", "Cheq Wong"}, ["cwt"] = {"Kuwaataay"}, ["cxh"] = {"Cha'ari"}, ["cya"] = {"Nopala Chatino"}, ["cyb"] = {"Cayubaba"}, ["cyo"] = {"Cuyonon"}, ["czh"] = {"Huizhou Chinese"}, ["czk"] = {"Knaanic"}, ["czn"] = {"Zenzontepec Chatino"}, ["czo"] = {"Min Zhong Chinese"}, ["czt"] = {"Zotung Chin"}, ["daa"] = {"Dangaléat"}, ["dac"] = {"Dambi"}, ["dad"] = {"Marik"}, ["dae"] = {"Duupa"}, ["dag"] = {"Dagbani"}, ["dah"] = {"Gwahatike"}, ["dai"] = {"Day"}, ["daj"] = {"Dar Fur Daju"}, ["dak"] = {"Dakota"}, ["dal"] = {"Dahalo"}, ["dam"] = {"Damakawa"}, ["dao"] = {"Daai Chin"}, ["daq"] = {"Dandami Maria"}, ["dar"] = {"Dargwa"}, ["das"] = {"Daho-Doo"}, ["dau"] = {"Dar Sila Daju"}, ["dav"] = {"Taita", "Dawida"}, ["daw"] = {"Davawenyo"}, ["dax"] = {"Dayi"}, ["day"] = {"Land Dayak languages"}, ["daz"] = {"Moi-Wadea", "Dao"}, ["dba"] = {"Bangime"}, ["dbb"] = {"Deno"}, ["dbd"] = {"Dadiya"}, ["dbe"] = {"Dabe"}, ["dbf"] = {"Edopi"}, ["dbg"] = {"Dogul Dom Dogon"}, ["dbi"] = {"Doka"}, ["dbj"] = {"Ida'an"}, ["dbl"] = {"Dyirbal"}, ["dbm"] = {"Duguri"}, ["dbn"] = {"Duriankere"}, ["dbo"] = {"Dulbu"}, ["dbp"] = {"Duwai"}, ["dbq"] = {"Daba"}, ["dbr"] = {"Dabarre"}, ["dbt"] = {"Ben Tey Dogon"}, ["dbu"] = {"Bondum Dom Dogon"}, ["dbv"] = {"Dungu"}, ["dbw"] = {"Bankan Tey Dogon"}, ["dby"] = {"Dibiyaso"}, ["dcc"] = {"Deccan"}, ["dcr"] = {"Negerhollands"}, ["dda"] = {"Dadi Dadi"}, ["ddd"] = {"Dongotono"}, ["dde"] = {"Doondo"}, ["ddg"] = {"Fataluku"}, ["ddi"] = {"West Goodenough"}, ["ddj"] = {"Jaru"}, ["ddn"] = {"Dendi (Benin)"}, ["ddo"] = {"Dido"}, ["ddr"] = {"Dhudhuroa"}, ["dds"] = {"Donno So Dogon"}, ["ddw"] = {"Dawera-Daweloor"}, ["dec"] = {"Dagik"}, ["ded"] = {"Dedua"}, ["dee"] = {"Dewoin"}, ["def"] = {"Dezfuli"}, ["deg"] = {"Degema"}, ["deh"] = {"Dehwari"}, ["dei"] = {"Demisa"}, ["del"] = {"Delaware"}, ["dem"] = {"Dem"}, ["den"] = {"Slave (Athapascan)"}, ["dep"] = {"Pidgin Delaware"}, ["deq"] = {"Dendi (Central African Republic)"}, ["der"] = {"Deori"}, ["des"] = {"Desano"}, ["dev"] = {"Domung"}, ["dez"] = {"Dengese"}, ["dga"] = {"Southern Dagaare"}, ["dgb"] = {"Bunoge Dogon"}, ["dgc"] = {"Casiguran Dumagat Agta"}, ["dgd"] = {"Dagaari Dioula"}, ["dge"] = {"Degenan"}, ["dgg"] = {"Doga"}, ["dgh"] = {"Dghwede"}, ["dgi"] = {"Northern Dagara"}, ["dgk"] = {"Dagba"}, ["dgl"] = {"Andaandi", "Dongolawi"}, ["dgn"] = {"Dagoman"}, ["dgo"] = {"Dogri (individual language)"}, ["dgr"] = {"Tlicho", "Dogrib", "Tłı̨chǫ"}, ["dgs"] = {"Dogoso"}, ["dgt"] = {"Ndra'ngith"}, ["dgw"] = {"Daungwurrung"}, ["dgx"] = {"Doghoro"}, ["dgz"] = {"Daga"}, ["dhd"] = {"Dhundari"}, ["dhg"] = {"Dhangu-Djangu", "Dhangu", "Djangu"}, ["dhi"] = {"Dhimal"}, ["dhl"] = {"Dhalandji"}, ["dhm"] = {"Zemba"}, ["dhn"] = {"Dhanki"}, ["dho"] = {"Dhodia"}, ["dhr"] = {"Dhargari"}, ["dhs"] = {"Dhaiso"}, ["dhu"] = {"Dhurga"}, ["dhv"] = {"Dehu", "Drehu"}, ["dhw"] = {"Dhanwar (Nepal)"}, ["dhx"] = {"Dhungaloo"}, ["dia"] = {"Dia"}, ["dib"] = {"South Central Dinka"}, ["dic"] = {"Lakota Dida"}, ["did"] = {"Didinga"}, ["dif"] = {"Dieri", "Diyari"}, ["dig"] = {"Digo", "Chidigo"}, ["dih"] = {"Kumiai"}, ["dii"] = {"Dimbong"}, ["dij"] = {"Dai"}, ["dik"] = {"Southwestern Dinka"}, ["dil"] = {"Dilling"}, ["dim"] = {"Dime"}, ["din"] = {"Dinka"}, ["dio"] = {"Dibo"}, ["dip"] = {"Northeastern Dinka"}, ["diq"] = {"Dimli (individual language)"}, ["dir"] = {"Dirim"}, ["dis"] = {"Dimasa"}, ["diu"] = {"Diriku"}, ["diw"] = {"Northwestern Dinka"}, ["dix"] = {"Dixon Reef"}, ["diy"] = {"Diuwe"}, ["diz"] = {"Ding"}, ["dja"] = {"Djadjawurrung"}, ["djb"] = {"Djinba"}, ["djc"] = {"Dar Daju Daju"}, ["djd"] = {"Djamindjung", "Ngaliwurru"}, ["dje"] = {"Zarma"}, ["djf"] = {"Djangun"}, ["dji"] = {"Djinang"}, ["djj"] = {"Djeebbana"}, ["djk"] = {"Eastern Maroon Creole", "Businenge Tongo", "Nenge"}, ["djm"] = {"Jamsay Dogon"}, ["djn"] = {"Jawoyn", "Djauan"}, ["djo"] = {"Jangkang"}, ["djr"] = {"Djambarrpuyngu"}, ["dju"] = {"Kapriman"}, ["djw"] = {"Djawi"}, ["dka"] = {"Dakpakha"}, ["dkg"] = {"Kadung"}, ["dkk"] = {"Dakka"}, ["dkr"] = {"Kuijau"}, ["dks"] = {"Southeastern Dinka"}, ["dkx"] = {"Mazagway"}, ["dlg"] = {"Dolgan"}, ["dlk"] = {"Dahalik"}, ["dlm"] = {"Dalmatian"}, ["dln"] = {"Darlong"}, ["dma"] = {"Duma"}, ["dmb"] = {"Mombo Dogon"}, ["dmc"] = {"Gavak"}, ["dmd"] = {"Madhi Madhi"}, ["dme"] = {"Dugwor"}, ["dmf"] = {"Medefaidrin"}, ["dmg"] = {"Upper Kinabatangan"}, ["dmk"] = {"Domaaki"}, ["dml"] = {"Dameli"}, ["dmm"] = {"Dama"}, ["dmn"] = {"Mande languages"}, ["dmo"] = {"Kemedzung"}, ["dmr"] = {"East Damar"}, ["dms"] = {"Dampelas"}, ["dmu"] = {"Dubu", "Tebi"}, ["dmv"] = {"Dumpas"}, ["dmw"] = {"Mudburra"}, ["dmx"] = {"Dema"}, ["dmy"] = {"Demta", "Sowari"}, ["dna"] = {"Upper Grand Valley Dani"}, ["dnd"] = {"Daonda"}, ["dne"] = {"Ndendeule"}, ["dng"] = {"Dungan"}, ["dni"] = {"Lower Grand Valley Dani"}, ["dnj"] = {"Dan"}, ["dnk"] = {"Dengka"}, ["dnn"] = {"Dzùùngoo"}, ["dno"] = {"Ndrulo", "Northern Lendu"}, ["dnr"] = {"Danaru"}, ["dnt"] = {"Mid Grand Valley Dani"}, ["dnu"] = {"Danau"}, ["dnv"] = {"Danu"}, ["dnw"] = {"Western Dani"}, ["dny"] = {"Dení"}, ["doa"] = {"Dom"}, ["dob"] = {"Dobu"}, ["doc"] = {"Northern Dong"}, ["doe"] = {"Doe"}, ["dof"] = {"Domu"}, ["doh"] = {"Dong"}, ["doi"] = {"Dogri (macrolanguage)"}, ["dok"] = {"Dondo"}, ["dol"] = {"Doso"}, ["don"] = {"Toura (Papua New Guinea)"}, ["doo"] = {"Dongo"}, ["dop"] = {"Lukpa"}, ["doq"] = {"Dominican Sign Language"}, ["dor"] = {"Dori'o"}, ["dos"] = {"Dogosé"}, ["dot"] = {"Dass"}, ["dov"] = {"Dombe"}, ["dow"] = {"Doyayo"}, ["dox"] = {"Bussa"}, ["doy"] = {"Dompo"}, ["doz"] = {"Dorze"}, ["dpp"] = {"Papar"}, ["dra"] = {"Dravidian languages"}, ["drb"] = {"Dair"}, ["drc"] = {"Minderico"}, ["drd"] = {"Darmiya"}, ["dre"] = {"Dolpo"}, ["drg"] = {"Rungus"}, ["dri"] = {"C'Lela"}, ["drl"] = {"Paakantyi"}, ["drn"] = {"West Damar"}, ["dro"] = {"Daro-Matu Melanau"}, ["drq"] = {"Dura"}, ["drs"] = {"Gedeo"}, ["drt"] = {"Drents"}, ["dru"] = {"Rukai"}, ["dry"] = {"Darai"}, ["dsb"] = {"Lower Sorbian"}, ["dse"] = {"Dutch Sign Language"}, ["dsh"] = {"Daasanach"}, ["dsi"] = {"Disa"}, ["dsk"] = {"Dokshi"}, ["dsl"] = {"Danish Sign Language"}, ["dsn"] = {"Dusner"}, ["dso"] = {"Desiya"}, ["dsq"] = {"Tadaksahak"}, ["dsz"] = {"Mardin Sign Language"}, ["dta"] = {"Daur"}, ["dtb"] = {"Labuk-Kinabatangan Kadazan"}, ["dtd"] = {"Ditidaht"}, ["dth"] = {"Adithinngithigh"}, ["dti"] = {"Ana Tinga Dogon"}, ["dtk"] = {"Tene Kan Dogon"}, ["dtm"] = {"Tomo Kan Dogon"}, ["dtn"] = {"Daatsʼíin"}, ["dto"] = {"Tommo So Dogon"}, ["dtp"] = {"Kadazan Dusun", "Central Dusun"}, ["dtr"] = {"Lotud"}, ["dts"] = {"Toro So Dogon"}, ["dtt"] = {"Toro Tegu Dogon"}, ["dtu"] = {"Tebul Ure Dogon"}, ["dty"] = {"Dotyali"}, ["dua"] = {"Duala"}, ["dub"] = {"Dubli"}, ["duc"] = {"Duna"}, ["due"] = {"Umiray Dumaget Agta"}, ["duf"] = {"Dumbea", "Drubea"}, ["dug"] = {"Duruma", "Chiduruma"}, ["duh"] = {"Dungra Bhil"}, ["dui"] = {"Dumun"}, ["duk"] = {"Uyajitaya"}, ["dul"] = {"Alabat Island Agta"}, ["dum"] = {"Middle Dutch (ca. 1050-1350)"}, ["dun"] = {"Dusun Deyah"}, ["duo"] = {"Dupaninan Agta"}, ["dup"] = {"Duano"}, ["duq"] = {"Dusun Malang"}, ["dur"] = {"Dii"}, ["dus"] = {"Dumi"}, ["duu"] = {"Drung"}, ["duv"] = {"Duvle"}, ["duw"] = {"Dusun Witu"}, ["dux"] = {"Duungooma"}, ["duy"] = {"Dicamay Agta"}, ["duz"] = {"Duli-Gey"}, ["dva"] = {"Duau"}, ["dwa"] = {"Diri"}, ["dwk"] = {"Dawik Kui"}, ["dwr"] = {"Dawro"}, ["dws"] = {"Dutton World Speedwords"}, ["dwu"] = {"Dhuwal"}, ["dww"] = {"Dawawa"}, ["dwy"] = {"Dhuwaya"}, ["dwz"] = {"Dewas Rai"}, ["dya"] = {"Dyan"}, ["dyb"] = {"Dyaberdyaber"}, ["dyd"] = {"Dyugun"}, ["dyg"] = {"Villa Viciosa Agta"}, ["dyi"] = {"Djimini Senoufo"}, ["dyl"] = {"Bhutanese Sign Language"}, ["dym"] = {"Yanda Dom Dogon"}, ["dyn"] = {"Dyangadi", "Dhanggatti"}, ["dyo"] = {"Jola-Fonyi"}, ["dyr"] = {"Dyarim"}, ["dyu"] = {"Dyula"}, ["dyy"] = {"Djabugay", "Dyaabugay"}, ["dza"] = {"Tunzu"}, ["dzd"] = {"Daza"}, ["dze"] = {"Djiwarli"}, ["dzg"] = {"Dazaga"}, ["dzl"] = {"Dzalakha"}, ["dzn"] = {"Dzando"}, ["eaa"] = {"Karenggapa"}, ["ebc"] = {"Beginci"}, ["ebg"] = {"Ebughu"}, ["ebk"] = {"Eastern Bontok"}, ["ebo"] = {"Teke-Ebo"}, ["ebr"] = {"Ebrié"}, ["ebu"] = {"Embu", "Kiembu"}, ["ecr"] = {"Eteocretan"}, ["ecs"] = {"Ecuadorian Sign Language"}, ["ecy"] = {"Eteocypriot"}, ["eee"] = {"E"}, ["efa"] = {"Efai"}, ["efe"] = {"Efe"}, ["efi"] = {"Efik"}, ["ega"] = {"Ega"}, ["egl"] = {"Emilian"}, ["egm"] = {"Benamanga"}, ["ego"] = {"Eggon"}, ["egx"] = {"Egyptian languages"}, ["egy"] = {"Egyptian (Ancient)"}, ["ehs"] = {"Miyakubo Sign Language"}, ["ehu"] = {"Ehueun"}, ["eip"] = {"Eipomek"}, ["eit"] = {"Eitiep"}, ["eiv"] = {"Askopan"}, ["eja"] = {"Ejamat"}, ["eka"] = {"Ekajuk"}, ["eke"] = {"Ekit"}, ["ekg"] = {"Ekari"}, ["eki"] = {"Eki"}, ["ekk"] = {"Standard Estonian"}, ["ekl"] = {"Kol (Bangladesh)", "Kol"}, ["ekm"] = {"Elip"}, ["eko"] = {"Koti"}, ["ekp"] = {"Ekpeye"}, ["ekr"] = {"Yace"}, ["eky"] = {"Eastern Kayah"}, ["ele"] = {"Elepi"}, ["elh"] = {"El Hugeirat"}, ["eli"] = {"Nding"}, ["elk"] = {"Elkei"}, ["elm"] = {"Eleme"}, ["elo"] = {"El Molo"}, ["elu"] = {"Elu"}, ["elx"] = {"Elamite"}, ["ema"] = {"Emai-Iuleha-Ora"}, ["emb"] = {"Embaloh"}, ["eme"] = {"Emerillon"}, ["emg"] = {"Eastern Meohang"}, ["emi"] = {"Mussau-Emira"}, ["emk"] = {"Eastern Maninkakan"}, ["emm"] = {"Mamulique"}, ["emn"] = {"Eman"}, ["emp"] = {"Northern Emberá"}, ["emq"] = {"Eastern Minyag"}, ["ems"] = {"Pacific Gulf Yupik"}, ["emu"] = {"Eastern Muria"}, ["emw"] = {"Emplawas"}, ["emx"] = {"Erromintxela"}, ["emy"] = {"Epigraphic Mayan"}, ["emz"] = {"Mbessa"}, ["ena"] = {"Apali"}, ["enb"] = {"Markweeta"}, ["enc"] = {"En"}, ["end"] = {"Ende"}, ["enf"] = {"Forest Enets"}, ["enh"] = {"Tundra Enets"}, ["enl"] = {"Enlhet"}, ["enm"] = {"Middle English (1100-1500)"}, ["enn"] = {"Engenni"}, ["eno"] = {"Enggano"}, ["enq"] = {"Enga"}, ["enr"] = {"Emumu", "Emem"}, ["enu"] = {"Enu"}, ["env"] = {"Enwan (Edo State)"}, ["enw"] = {"Enwan (Akwa Ibom State)"}, ["enx"] = {"Enxet"}, ["eot"] = {"Beti (Côte d'Ivoire)"}, ["epi"] = {"Epie"}, ["era"] = {"Eravallan"}, ["erg"] = {"Sie"}, ["erh"] = {"Eruwa"}, ["eri"] = {"Ogea"}, ["erk"] = {"South Efate"}, ["ero"] = {"Horpa"}, ["err"] = {"Erre"}, ["ers"] = {"Ersu"}, ["ert"] = {"Eritai"}, ["erw"] = {"Erokwanas"}, ["ese"] = {"Ese Ejja"}, ["esg"] = {"Aheri Gondi"}, ["esh"] = {"Eshtehardi"}, ["esi"] = {"North Alaskan Inupiatun"}, ["esk"] = {"Northwest Alaska Inupiatun"}, ["esl"] = {"Egypt Sign Language"}, ["esm"] = {"Esuma"}, ["esn"] = {"Salvadoran Sign Language"}, ["eso"] = {"Estonian Sign Language"}, ["esq"] = {"Esselen"}, ["ess"] = {"Central Siberian Yupik"}, ["esu"] = {"Central Yupik"}, ["esx"] = {"Eskimo-Aleut languages"}, ["esy"] = {"Eskayan"}, ["etb"] = {"Etebi"}, ["etc"] = {"Etchemin"}, ["eth"] = {"Ethiopian Sign Language"}, ["etn"] = {"Eton (Vanuatu)"}, ["eto"] = {"Eton (Cameroon)"}, ["etr"] = {"Edolo"}, ["ets"] = {"Yekhee"}, ["ett"] = {"Etruscan"}, ["etu"] = {"Ejagham"}, ["etx"] = {"Eten"}, ["etz"] = {"Semimi"}, ["eud"] = {"Eudeve"}, ["euq"] = {"Basque (family)"}, ["eve"] = {"Even"}, ["evh"] = {"Uvbie"}, ["evn"] = {"Evenki"}, ["ewo"] = {"Ewondo"}, ["ext"] = {"Extremaduran"}, ["eya"] = {"Eyak"}, ["eyo"] = {"Keiyo"}, ["eza"] = {"Ezaa"}, ["eze"] = {"Uzekwe"}, ["faa"] = {"Fasu"}, ["fab"] = {"Fa d'Ambu"}, ["fad"] = {"Wagi"}, ["faf"] = {"Fagani"}, ["fag"] = {"Finongan"}, ["fah"] = {"Baissa Fali"}, ["fai"] = {"Faiwol"}, ["faj"] = {"Faita"}, ["fak"] = {"Fang (Cameroon)"}, ["fal"] = {"South Fali"}, ["fam"] = {"Fam"}, ["fan"] = {"Fang (Equatorial Guinea)"}, ["fap"] = {"Paloor"}, ["far"] = {"Fataleka"}, ["fat"] = {"Fanti"}, ["fau"] = {"Fayu"}, ["fax"] = {"Fala"}, ["fay"] = {"Southwestern Fars"}, ["faz"] = {"Northwestern Fars"}, ["fbl"] = {"West Albay Bikol"}, ["fcs"] = {"Quebec Sign Language"}, ["fer"] = {"Feroge"}, ["ffi"] = {"Foia Foia"}, ["ffm"] = {"Maasina Fulfulde"}, ["fgr"] = {"Fongoro"}, ["fia"] = {"Nobiin"}, ["fie"] = {"Fyer"}, ["fif"] = {"Faifi"}, ["fil"] = {"Filipino", "Pilipino"}, ["fip"] = {"Fipa"}, ["fir"] = {"Firan"}, ["fit"] = {"Tornedalen Finnish", "Meänkieli"}, ["fiu"] = {"Finno-Ugrian languages"}, ["fiw"] = {"Fiwaga"}, ["fkk"] = {"Kirya-Konzəl"}, ["fkv"] = {"Kven Finnish"}, ["fla"] = {"Kalispel-Pend d'Oreille"}, ["flh"] = {"Foau"}, ["fli"] = {"Fali"}, ["fll"] = {"North Fali"}, ["fln"] = {"Flinders Island"}, ["flr"] = {"Fuliiru"}, ["fly"] = {"Flaaitaal", "Tsotsitaal"}, ["fmp"] = {"Fe'fe'"}, ["fmu"] = {"Far Western Muria"}, ["fnb"] = {"Fanbak"}, ["fng"] = {"Fanagalo"}, ["fni"] = {"Fania"}, ["fod"] = {"Foodo"}, ["foi"] = {"Foi"}, ["fom"] = {"Foma"}, ["fon"] = {"Fon"}, ["for"] = {"Fore"}, ["fos"] = {"Siraya"}, ["fox"] = {"Formosan languages"}, ["fpe"] = {"Fernando Po Creole English"}, ["fqs"] = {"Fas"}, ["frc"] = {"Cajun French"}, ["frd"] = {"Fordata"}, ["frk"] = {"Frankish"}, ["frm"] = {"Middle French (ca. 1400-1600)"}, ["fro"] = {"Old French (842-ca. 1400)"}, ["frp"] = {"Arpitan", "Francoprovençal"}, ["frq"] = {"Forak"}, ["frr"] = {"Northern Frisian"}, ["frs"] = {"Eastern Frisian"}, ["frt"] = {"Fortsenal"}, ["fse"] = {"Finnish Sign Language"}, ["fsl"] = {"French Sign Language"}, ["fss"] = {"Finland-Swedish Sign Language", "finlandssvenskt teckenspråk", "suomenruotsalainen viittomakieli"}, ["fub"] = {"Adamawa Fulfulde"}, ["fuc"] = {"Pulaar"}, ["fud"] = {"East Futuna"}, ["fue"] = {"Borgu Fulfulde"}, ["fuf"] = {"Pular"}, ["fuh"] = {"Western Niger Fulfulde"}, ["fui"] = {"Bagirmi Fulfulde"}, ["fuj"] = {"Ko"}, ["fum"] = {"Fum"}, ["fun"] = {"Fulniô"}, ["fuq"] = {"Central-Eastern Niger Fulfulde"}, ["fur"] = {"Friulian"}, ["fut"] = {"Futuna-Aniwa"}, ["fuu"] = {"Furu"}, ["fuv"] = {"Nigerian Fulfulde"}, ["fuy"] = {"Fuyug"}, ["fvr"] = {"Fur"}, ["fwa"] = {"Fwâi"}, ["fwe"] = {"Fwe"}, ["gaa"] = {"Ga"}, ["gab"] = {"Gabri"}, ["gac"] = {"Mixed Great Andamanese"}, ["gad"] = {"Gaddang"}, ["gae"] = {"Guarequena"}, ["gaf"] = {"Gende"}, ["gag"] = {"Gagauz"}, ["gah"] = {"Alekano"}, ["gai"] = {"Borei"}, ["gaj"] = {"Gadsup"}, ["gak"] = {"Gamkonora"}, ["gal"] = {"Galolen"}, ["gam"] = {"Kandawo"}, ["gan"] = {"Gan Chinese"}, ["gao"] = {"Gants"}, ["gap"] = {"Gal"}, ["gaq"] = {"Gata'"}, ["gar"] = {"Galeya"}, ["gas"] = {"Adiwasi Garasia"}, ["gat"] = {"Kenati"}, ["gau"] = {"Mudhili Gadaba"}, ["gaw"] = {"Nobonob"}, ["gax"] = {"Borana-Arsi-Guji Oromo"}, ["gay"] = {"Gayo"}, ["gaz"] = {"West Central Oromo"}, ["gba"] = {"Gbaya (Central African Republic)"}, ["gbb"] = {"Kaytetye"}, ["gbd"] = {"Karajarri"}, ["gbe"] = {"Niksek"}, ["gbf"] = {"Gaikundi"}, ["gbg"] = {"Gbanziri"}, ["gbh"] = {"Defi Gbe"}, ["gbi"] = {"Galela"}, ["gbj"] = {"Bodo Gadaba"}, ["gbk"] = {"Gaddi"}, ["gbl"] = {"Gamit"}, ["gbm"] = {"Garhwali"}, ["gbn"] = {"Mo'da"}, ["gbo"] = {"Northern Grebo"}, ["gbp"] = {"Gbaya-Bossangoa"}, ["gbq"] = {"Gbaya-Bozoum"}, ["gbr"] = {"Gbagyi"}, ["gbs"] = {"Gbesi Gbe"}, ["gbu"] = {"Gagadu"}, ["gbv"] = {"Gbanu"}, ["gbw"] = {"Gabi-Gabi"}, ["gbx"] = {"Eastern Xwla Gbe"}, ["gby"] = {"Gbari"}, ["gbz"] = {"Zoroastrian Dari"}, ["gcc"] = {"Mali"}, ["gcd"] = {"Ganggalida"}, ["gce"] = {"Galice"}, ["gcf"] = {"Guadeloupean Creole French"}, ["gcl"] = {"Grenadian Creole English"}, ["gcn"] = {"Gaina"}, ["gcr"] = {"Guianese Creole French"}, ["gct"] = {"Colonia Tovar German"}, ["gda"] = {"Gade Lohar"}, ["gdb"] = {"Pottangi Ollar Gadaba"}, ["gdc"] = {"Gugu Badhun"}, ["gdd"] = {"Gedaged"}, ["gde"] = {"Gude"}, ["gdf"] = {"Guduf-Gava"}, ["gdg"] = {"Ga'dang"}, ["gdh"] = {"Gadjerawang", "Gajirrabeng"}, ["gdi"] = {"Gundi"}, ["gdj"] = {"Gurdjar"}, ["gdk"] = {"Gadang"}, ["gdl"] = {"Dirasha"}, ["gdm"] = {"Laal"}, ["gdn"] = {"Umanakaina"}, ["gdo"] = {"Ghodoberi"}, ["gdq"] = {"Mehri"}, ["gdr"] = {"Wipi"}, ["gds"] = {"Ghandruk Sign Language"}, ["gdt"] = {"Kungardutyi"}, ["gdu"] = {"Gudu"}, ["gdx"] = {"Godwari"}, ["gea"] = {"Geruma"}, ["geb"] = {"Kire"}, ["gec"] = {"Gboloo Grebo"}, ["ged"] = {"Gade"}, ["gef"] = {"Gerai"}, ["geg"] = {"Gengle"}, ["geh"] = {"Hutterite German", "Hutterisch"}, ["gei"] = {"Gebe"}, ["gej"] = {"Gen"}, ["gek"] = {"Ywom"}, ["gel"] = {"ut-Ma'in"}, ["gem"] = {"Germanic languages"}, ["geq"] = {"Geme"}, ["ges"] = {"Geser-Gorom"}, ["gev"] = {"Eviya"}, ["gew"] = {"Gera"}, ["gex"] = {"Garre"}, ["gey"] = {"Enya"}, ["gez"] = {"Geez"}, ["gfk"] = {"Patpatar"}, ["gft"] = {"Gafat"}, ["gga"] = {"Gao"}, ["ggb"] = {"Gbii"}, ["ggd"] = {"Gugadj"}, ["gge"] = {"Gurr-goni"}, ["ggg"] = {"Gurgula"}, ["ggk"] = {"Kungarakany"}, ["ggl"] = {"Ganglau"}, ["ggt"] = {"Gitua"}, ["ggu"] = {"Gagu", "Gban"}, ["ggw"] = {"Gogodala"}, ["gha"] = {"Ghadamès"}, ["ghc"] = {"Hiberno-Scottish Gaelic"}, ["ghe"] = {"Southern Ghale"}, ["ghh"] = {"Northern Ghale"}, ["ghk"] = {"Geko Karen"}, ["ghl"] = {"Ghulfan"}, ["ghn"] = {"Ghanongga"}, ["gho"] = {"Ghomara"}, ["ghr"] = {"Ghera"}, ["ghs"] = {"Guhu-Samane"}, ["ght"] = {"Kuke", "Kutang Ghale"}, ["gia"] = {"Kija"}, ["gib"] = {"Gibanawa"}, ["gic"] = {"Gail"}, ["gid"] = {"Gidar"}, ["gie"] = {"Gaɓogbo", "Guébie"}, ["gig"] = {"Goaria"}, ["gih"] = {"Githabul"}, ["gii"] = {"Girirra"}, ["gil"] = {"Gilbertese"}, ["gim"] = {"Gimi (Eastern Highlands)"}, ["gin"] = {"Hinukh"}, ["gip"] = {"Gimi (West New Britain)"}, ["giq"] = {"Green Gelao"}, ["gir"] = {"Red Gelao"}, ["gis"] = {"North Giziga"}, ["git"] = {"Gitxsan"}, ["giu"] = {"Mulao"}, ["giw"] = {"White Gelao"}, ["gix"] = {"Gilima"}, ["giy"] = {"Giyug"}, ["giz"] = {"South Giziga"}, ["gjk"] = {"Kachi Koli"}, ["gjm"] = {"Gunditjmara"}, ["gjn"] = {"Gonja"}, ["gjr"] = {"Gurindji Kriol"}, ["gju"] = {"Gujari"}, ["gka"] = {"Guya"}, ["gkd"] = {"Magɨ (Madang Province)"}, ["gke"] = {"Ndai"}, ["gkn"] = {"Gokana"}, ["gko"] = {"Kok-Nar"}, ["gkp"] = {"Guinea Kpelle"}, ["gku"] = {"ǂUngkue"}, ["glb"] = {"Belning"}, ["glc"] = {"Bon Gula"}, ["gld"] = {"Nanai"}, ["glh"] = {"Northwest Pashai", "Northwest Pashayi"}, ["glj"] = {"Gula Iro"}, ["glk"] = {"Gilaki"}, ["gll"] = {"Garlali"}, ["glo"] = {"Galambu"}, ["glr"] = {"Glaro-Twabo"}, ["glu"] = {"Gula (Chad)"}, ["glw"] = {"Glavda"}, ["gly"] = {"Gule"}, ["gma"] = {"Gambera"}, ["gmb"] = {"Gula'alaa"}, ["gmd"] = {"Mághdì"}, ["gme"] = {"East Germanic languages"}, ["gmg"] = {"Magɨyi"}, ["gmh"] = {"Middle High German (ca. 1050-1500)"}, ["gml"] = {"Middle Low German"}, ["gmm"] = {"Gbaya-Mbodomo"}, ["gmn"] = {"Gimnime"}, ["gmq"] = {"North Germanic languages"}, ["gmr"] = {"Mirning", "Mirniny"}, ["gmu"] = {"Gumalu"}, ["gmv"] = {"Gamo"}, ["gmw"] = {"West Germanic languages"}, ["gmx"] = {"Magoma"}, ["gmy"] = {"Mycenaean Greek"}, ["gmz"] = {"Mgbolizhia"}, ["gna"] = {"Kaansa"}, ["gnb"] = {"Gangte"}, ["gnc"] = {"Guanche"}, ["gnd"] = {"Zulgo-Gemzek"}, ["gne"] = {"Ganang"}, ["gng"] = {"Ngangam"}, ["gnh"] = {"Lere"}, ["gni"] = {"Gooniyandi"}, ["gnj"] = {"Ngen"}, ["gnk"] = {"ǁGana"}, ["gnl"] = {"Gangulu"}, ["gnm"] = {"Ginuman"}, ["gnn"] = {"Gumatj"}, ["gno"] = {"Northern Gondi"}, ["gnq"] = {"Gana"}, ["gnr"] = {"Gureng Gureng"}, ["gnt"] = {"Guntai"}, ["gnu"] = {"Gnau"}, ["gnw"] = {"Western Bolivian Guaraní"}, ["gnz"] = {"Ganzi"}, ["goa"] = {"Guro"}, ["gob"] = {"Playero"}, ["goc"] = {"Gorakor"}, ["god"] = {"Godié"}, ["goe"] = {"Gongduk"}, ["gof"] = {"Gofa"}, ["gog"] = {"Gogo"}, ["goh"] = {"Old High German (ca. 750-1050)"}, ["goi"] = {"Gobasi"}, ["goj"] = {"Gowlan"}, ["gok"] = {"Gowli"}, ["gol"] = {"Gola"}, ["gom"] = {"Goan Konkani"}, ["gon"] = {"Gondi"}, ["goo"] = {"Gone Dau"}, ["gop"] = {"Yeretuar"}, ["goq"] = {"Gorap"}, ["gor"] = {"Gorontalo"}, ["gos"] = {"Gronings"}, ["got"] = {"Gothic"}, ["gou"] = {"Gavar"}, ["gov"] = {"Goo"}, ["gow"] = {"Gorowa"}, ["gox"] = {"Gobu"}, ["goy"] = {"Goundo"}, ["goz"] = {"Gozarkhani"}, ["gpa"] = {"Gupa-Abawa"}, ["gpe"] = {"Ghanaian Pidgin English"}, ["gpn"] = {"Taiap"}, ["gqa"] = {"Ga'anda"}, ["gqi"] = {"Guiqiong"}, ["gqn"] = {"Guana (Brazil)"}, ["gqr"] = {"Gor"}, ["gqu"] = {"Qau"}, ["gra"] = {"Rajput Garasia"}, ["grb"] = {"Grebo"}, ["grc"] = {"Ancient Greek (to 1453)"}, ["grd"] = {"Guruntum-Mbaaru"}, ["grg"] = {"Madi"}, ["grh"] = {"Gbiri-Niragu"}, ["gri"] = {"Ghari"}, ["grj"] = {"Southern Grebo"}, ["grk"] = {"Greek languages"}, ["grm"] = {"Kota Marudu Talantang"}, ["gro"] = {"Groma"}, ["grq"] = {"Gorovu"}, ["grr"] = {"Taznatit"}, ["grs"] = {"Gresi"}, ["grt"] = {"Garo"}, ["gru"] = {"Kistane"}, ["grv"] = {"Central Grebo"}, ["grw"] = {"Gweda"}, ["grx"] = {"Guriaso"}, ["gry"] = {"Barclayville Grebo"}, ["grz"] = {"Guramalum"}, ["gse"] = {"Ghanaian Sign Language"}, ["gsg"] = {"German Sign Language"}, ["gsl"] = {"Gusilay"}, ["gsm"] = {"Guatemalan Sign Language"}, ["gsn"] = {"Nema", "Gusan"}, ["gso"] = {"Southwest Gbaya"}, ["gsp"] = {"Wasembo"}, ["gss"] = {"Greek Sign Language"}, ["gsw"] = {"Swiss German", "Alemannic", "Alsatian"}, ["gta"] = {"Guató"}, ["gtu"] = {"Aghu-Tharnggala"}, ["gua"] = {"Shiki"}, ["gub"] = {"Guajajára"}, ["guc"] = {"Wayuu"}, ["gud"] = {"Yocoboué Dida"}, ["gue"] = {"Gurindji"}, ["guf"] = {"Gupapuyngu"}, ["gug"] = {"Paraguayan Guaraní"}, ["guh"] = {"Guahibo"}, ["gui"] = {"Eastern Bolivian Guaraní"}, ["guk"] = {"Gumuz"}, ["gul"] = {"Sea Island Creole English"}, ["gum"] = {"Guambiano"}, ["gun"] = {"Mbyá Guaraní"}, ["guo"] = {"Guayabero"}, ["gup"] = {"Gunwinggu"}, ["guq"] = {"Aché"}, ["gur"] = {"Farefare"}, ["gus"] = {"Guinean Sign Language"}, ["gut"] = {"Maléku Jaíka"}, ["guu"] = {"Yanomamö"}, ["guw"] = {"Gun"}, ["gux"] = {"Gourmanchéma"}, ["guz"] = {"Gusii", "Ekegusii"}, ["gva"] = {"Guana (Paraguay)"}, ["gvc"] = {"Guanano"}, ["gve"] = {"Duwet"}, ["gvf"] = {"Golin"}, ["gvj"] = {"Guajá"}, ["gvl"] = {"Gulay"}, ["gvm"] = {"Gurmana"}, ["gvn"] = {"Kuku-Yalanji"}, ["gvo"] = {"Gavião Do Jiparaná"}, ["gvp"] = {"Pará Gavião"}, ["gvr"] = {"Gurung"}, ["gvs"] = {"Gumawana"}, ["gvy"] = {"Guyani"}, ["gwa"] = {"Mbato"}, ["gwb"] = {"Gwa"}, ["gwc"] = {"Gawri", "Kalami"}, ["gwd"] = {"Gawwada"}, ["gwe"] = {"Gweno"}, ["gwf"] = {"Gowro"}, ["gwg"] = {"Moo"}, ["gwi"] = {"Gwichʼin"}, ["gwj"] = {"ǀGwi"}, ["gwm"] = {"Awngthim"}, ["gwn"] = {"Gwandara"}, ["gwr"] = {"Gwere"}, ["gwt"] = {"Gawar-Bati"}, ["gwu"] = {"Guwamu"}, ["gww"] = {"Kwini"}, ["gwx"] = {"Gua"}, ["gxx"] = {"Wè Southern"}, ["gya"] = {"Northwest Gbaya"}, ["gyb"] = {"Garus"}, ["gyd"] = {"Kayardild"}, ["gye"] = {"Gyem"}, ["gyf"] = {"Gungabula"}, ["gyg"] = {"Gbayi"}, ["gyi"] = {"Gyele"}, ["gyl"] = {"Gayil"}, ["gym"] = {"Ngäbere"}, ["gyn"] = {"Guyanese Creole English"}, ["gyo"] = {"Gyalsumdo"}, ["gyr"] = {"Guarayu"}, ["gyy"] = {"Gunya"}, ["gyz"] = {"Geji", "Gyaazi"}, ["gza"] = {"Ganza"}, ["gzi"] = {"Gazi"}, ["gzn"] = {"Gane"}, ["haa"] = {"Hän"}, ["hab"] = {"Hanoi Sign Language"}, ["hac"] = {"Gurani"}, ["had"] = {"Hatam"}, ["hae"] = {"Eastern Oromo"}, ["haf"] = {"Haiphong Sign Language"}, ["hag"] = {"Hanga"}, ["hah"] = {"Hahon"}, ["hai"] = {"Haida"}, ["haj"] = {"Hajong"}, ["hak"] = {"Hakka Chinese"}, ["hal"] = {"Halang"}, ["ham"] = {"Hewa"}, ["han"] = {"Hangaza"}, ["hao"] = {"Hakö"}, ["hap"] = {"Hupla"}, ["haq"] = {"Ha"}, ["har"] = {"Harari"}, ["has"] = {"Haisla"}, ["hav"] = {"Havu"}, ["haw"] = {"Hawaiian"}, ["hax"] = {"Southern Haida"}, ["hay"] = {"Haya"}, ["haz"] = {"Hazaragi"}, ["hba"] = {"Hamba"}, ["hbb"] = {"Huba"}, ["hbn"] = {"Heiban"}, ["hbo"] = {"Ancient Hebrew"}, ["hbu"] = {"Habu"}, ["hca"] = {"Andaman Creole Hindi"}, ["hch"] = {"Huichol"}, ["hdn"] = {"Northern Haida"}, ["hds"] = {"Honduras Sign Language"}, ["hdy"] = {"Hadiyya"}, ["hea"] = {"Northern Qiandong Miao"}, ["hed"] = {"Herdé"}, ["heg"] = {"Helong"}, ["heh"] = {"Hehe"}, ["hei"] = {"Heiltsuk"}, ["hem"] = {"Hemba"}, ["hgm"] = {"Haiǁom"}, ["hgw"] = {"Haigwai"}, ["hhi"] = {"Hoia Hoia"}, ["hhr"] = {"Kerak"}, ["hhy"] = {"Hoyahoya"}, ["hia"] = {"Lamang"}, ["hib"] = {"Hibito"}, ["hid"] = {"Hidatsa"}, ["hif"] = {"Fiji Hindi"}, ["hig"] = {"Kamwe"}, ["hih"] = {"Pamosu"}, ["hii"] = {"Hinduri"}, ["hij"] = {"Hijuk"}, ["hik"] = {"Seit-Kaitetu"}, ["hil"] = {"Hiligaynon"}, ["him"] = {"Himachali languages", "Western Pahari languages"}, ["hio"] = {"Tsoa"}, ["hir"] = {"Himarimã"}, ["hit"] = {"Hittite"}, ["hiw"] = {"Hiw"}, ["hix"] = {"Hixkaryána"}, ["hji"] = {"Haji"}, ["hka"] = {"Kahe"}, ["hke"] = {"Hunde"}, ["hkh"] = {"Khah", "Poguli"}, ["hkk"] = {"Hunjara-Kaina Ke"}, ["hkn"] = {"Mel-Khaonh"}, ["hks"] = {"Hong Kong Sign Language", "Heung Kong Sau Yue"}, ["hla"] = {"Halia"}, ["hlb"] = {"Halbi"}, ["hld"] = {"Halang Doan"}, ["hle"] = {"Hlersu"}, ["hlt"] = {"Matu Chin"}, ["hlu"] = {"Hieroglyphic Luwian"}, ["hma"] = {"Southern Mashan Hmong", "Southern Mashan Miao"}, ["hmb"] = {"Humburi Senni Songhay"}, ["hmc"] = {"Central Huishui Hmong", "Central Huishui Miao"}, ["hmd"] = {"Large Flowery Miao", "A-hmaos", "Da-Hua Miao"}, ["hme"] = {"Eastern Huishui Hmong", "Eastern Huishui Miao"}, ["hmf"] = {"Hmong Don"}, ["hmg"] = {"Southwestern Guiyang Hmong"}, ["hmh"] = {"Southwestern Huishui Hmong", "Southwestern Huishui Miao"}, ["hmi"] = {"Northern Huishui Hmong", "Northern Huishui Miao"}, ["hmj"] = {"Ge", "Gejia"}, ["hmk"] = {"Maek"}, ["hml"] = {"Luopohe Hmong", "Luopohe Miao"}, ["hmm"] = {"Central Mashan Hmong", "Central Mashan Miao"}, ["hmn"] = {"Hmong", "Mong"}, ["hmp"] = {"Northern Mashan Hmong", "Northern Mashan Miao"}, ["hmq"] = {"Eastern Qiandong Miao"}, ["hmr"] = {"Hmar"}, ["hms"] = {"Southern Qiandong Miao"}, ["hmt"] = {"Hamtai"}, ["hmu"] = {"Hamap"}, ["hmv"] = {"Hmong Dô"}, ["hmw"] = {"Western Mashan Hmong", "Western Mashan Miao"}, ["hmx"] = {"Hmong-Mien languages"}, ["hmy"] = {"Southern Guiyang Hmong", "Southern Guiyang Miao"}, ["hmz"] = {"Hmong Shua", "Sinicized Miao"}, ["hna"] = {"Mina (Cameroon)"}, ["hnd"] = {"Southern Hindko"}, ["hne"] = {"Chhattisgarhi"}, ["hng"] = {"Hungu"}, ["hnh"] = {"ǁAni"}, ["hni"] = {"Hani"}, ["hnj"] = {"Hmong Njua", "Mong Leng", "Mong Njua"}, ["hnm"] = {"Hainanese"}, ["hnn"] = {"Hanunoo"}, ["hno"] = {"Northern Hindko"}, ["hns"] = {"Caribbean Hindustani"}, ["hnu"] = {"Hung"}, ["hoa"] = {"Hoava"}, ["hob"] = {"Mari (Madang Province)"}, ["hoc"] = {"Ho"}, ["hod"] = {"Holma"}, ["hoe"] = {"Horom"}, ["hoh"] = {"Hobyót"}, ["hoi"] = {"Holikachuk"}, ["hoj"] = {"Hadothi", "Haroti"}, ["hok"] = {"Hokan languages"}, ["hol"] = {"Holu"}, ["hom"] = {"Homa"}, ["hoo"] = {"Holoholo"}, ["hop"] = {"Hopi"}, ["hor"] = {"Horo"}, ["hos"] = {"Ho Chi Minh City Sign Language"}, ["hot"] = {"Hote", "Malê"}, ["hov"] = {"Hovongan"}, ["how"] = {"Honi"}, ["hoy"] = {"Holiya"}, ["hoz"] = {"Hozo"}, ["hpo"] = {"Hpon"}, ["hps"] = {"Hawai'i Sign Language (HSL)", "Hawai'i Pidgin Sign Language"}, ["hra"] = {"Hrangkhol"}, ["hrc"] = {"Niwer Mil"}, ["hre"] = {"Hre"}, ["hrk"] = {"Haruku"}, ["hrm"] = {"Horned Miao"}, ["hro"] = {"Haroi"}, ["hrp"] = {"Nhirrpi"}, ["hrt"] = {"Hértevin"}, ["hru"] = {"Hruso"}, ["hrw"] = {"Warwar Feni"}, ["hrx"] = {"Hunsrik"}, ["hrz"] = {"Harzani"}, ["hsb"] = {"Upper Sorbian"}, ["hsh"] = {"Hungarian Sign Language"}, ["hsl"] = {"Hausa Sign Language"}, ["hsn"] = {"Xiang Chinese"}, ["hss"] = {"Harsusi"}, ["hti"] = {"Hoti"}, ["hto"] = {"Minica Huitoto"}, ["hts"] = {"Hadza"}, ["htu"] = {"Hitu"}, ["htx"] = {"Middle Hittite"}, ["hub"] = {"Huambisa"}, ["huc"] = {"ǂHua", "ǂʼAmkhoe"}, ["hud"] = {"Huaulu"}, ["hue"] = {"San Francisco Del Mar Huave"}, ["huf"] = {"Humene"}, ["hug"] = {"Huachipaeri"}, ["huh"] = {"Huilliche"}, ["hui"] = {"Huli"}, ["huj"] = {"Northern Guiyang Hmong", "Northern Guiyang Miao"}, ["huk"] = {"Hulung"}, ["hul"] = {"Hula"}, ["hum"] = {"Hungana"}, ["huo"] = {"Hu"}, ["hup"] = {"Hupa"}, ["huq"] = {"Tsat"}, ["hur"] = {"Halkomelem"}, ["hus"] = {"Huastec"}, ["hut"] = {"Humla"}, ["huu"] = {"Murui Huitoto"}, ["huv"] = {"San Mateo Del Mar Huave"}, ["huw"] = {"Hukumina"}, ["hux"] = {"Nüpode Huitoto"}, ["huy"] = {"Hulaulá"}, ["huz"] = {"Hunzib"}, ["hvc"] = {"Haitian Vodoun Culture Language"}, ["hve"] = {"San Dionisio Del Mar Huave"}, ["hvk"] = {"Haveke"}, ["hvn"] = {"Sabu"}, ["hvv"] = {"Santa María Del Mar Huave"}, ["hwa"] = {"Wané"}, ["hwc"] = {"Hawai'i Creole English", "Hawai'i Pidgin"}, ["hwo"] = {"Hwana"}, ["hya"] = {"Hya"}, ["hyw"] = {"Western Armenian"}, ["hyx"] = {"Armenian (family)"}, ["iai"] = {"Iaai"}, ["ian"] = {"Iatmul"}, ["iar"] = {"Purari"}, ["iba"] = {"Iban"}, ["ibb"] = {"Ibibio"}, ["ibd"] = {"Iwaidja"}, ["ibe"] = {"Akpes"}, ["ibg"] = {"Ibanag"}, ["ibh"] = {"Bih"}, ["ibl"] = {"Ibaloi"}, ["ibm"] = {"Agoi"}, ["ibn"] = {"Ibino"}, ["ibr"] = {"Ibuoro"}, ["ibu"] = {"Ibu"}, ["iby"] = {"Ibani"}, ["ica"] = {"Ede Ica"}, ["ich"] = {"Etkywan"}, ["icl"] = {"Icelandic Sign Language"}, ["icr"] = {"Islander Creole English"}, ["ida"] = {"Idakho-Isukha-Tiriki", "Luidakho-Luisukha-Lutirichi"}, ["idb"] = {"Indo-Portuguese"}, ["idc"] = {"Idon", "Ajiya"}, ["idd"] = {"Ede Idaca"}, ["ide"] = {"Idere"}, ["idi"] = {"Idi"}, ["idr"] = {"Indri"}, ["ids"] = {"Idesa"}, ["idt"] = {"Idaté"}, ["idu"] = {"Idoma"}, ["ifa"] = {"Amganad Ifugao"}, ["ifb"] = {"Batad Ifugao", "Ayangan Ifugao"}, ["ife"] = {"Ifè"}, ["iff"] = {"Ifo"}, ["ifk"] = {"Tuwali Ifugao"}, ["ifm"] = {"Teke-Fuumu"}, ["ifu"] = {"Mayoyao Ifugao"}, ["ify"] = {"Keley-I Kallahan"}, ["igb"] = {"Ebira"}, ["ige"] = {"Igede"}, ["igg"] = {"Igana"}, ["igl"] = {"Igala"}, ["igm"] = {"Kanggape"}, ["ign"] = {"Ignaciano"}, ["igo"] = {"Isebe"}, ["igs"] = {"Interglossa"}, ["igw"] = {"Igwe"}, ["ihb"] = {"Iha Based Pidgin"}, ["ihi"] = {"Ihievbe"}, ["ihp"] = {"Iha"}, ["ihw"] = {"Bidhawal"}, ["iin"] = {"Thiin"}, ["iir"] = {"Indo-Iranian languages"}, ["ijc"] = {"Izon"}, ["ije"] = {"Biseni"}, ["ijj"] = {"Ede Ije"}, ["ijn"] = {"Kalabari"}, ["ijo"] = {"Ijo languages"}, ["ijs"] = {"Southeast Ijo"}, ["ike"] = {"Eastern Canadian Inuktitut"}, ["ikh"] = {"Ikhin-Arokho"}, ["iki"] = {"Iko"}, ["ikk"] = {"Ika"}, ["ikl"] = {"Ikulu"}, ["iko"] = {"Olulumo-Ikom"}, ["ikp"] = {"Ikpeshi"}, ["ikr"] = {"Ikaranggal"}, ["iks"] = {"Inuit Sign Language"}, ["ikt"] = {"Inuinnaqtun", "Western Canadian Inuktitut"}, ["ikv"] = {"Iku-Gora-Ankwa"}, ["ikw"] = {"Ikwere"}, ["ikx"] = {"Ik"}, ["ikz"] = {"Ikizu"}, ["ila"] = {"Ile Ape"}, ["ilb"] = {"Ila"}, ["ilg"] = {"Garig-Ilgar"}, ["ili"] = {"Ili Turki"}, ["ilk"] = {"Ilongot"}, ["ilm"] = {"Iranun (Malaysia)"}, ["ilo"] = {"Iloko"}, ["ilp"] = {"Iranun (Philippines)"}, ["ils"] = {"International Sign"}, ["ilu"] = {"Ili'uun"}, ["ilv"] = {"Ilue"}, ["ima"] = {"Mala Malasar"}, ["imi"] = {"Anamgura"}, ["iml"] = {"Miluk"}, ["imn"] = {"Imonda"}, ["imo"] = {"Imbongu"}, ["imr"] = {"Imroing"}, ["ims"] = {"Marsian"}, ["imt"] = {"Imotong"}, ["imy"] = {"Milyan"}, ["inb"] = {"Inga"}, ["inc"] = {"Indic languages"}, ["ine"] = {"Indo-European languages"}, ["ing"] = {"Degexit'an"}, ["inh"] = {"Ingush"}, ["inj"] = {"Jungle Inga"}, ["inl"] = {"Indonesian Sign Language"}, ["inm"] = {"Minaean"}, ["inn"] = {"Isinai"}, ["ino"] = {"Inoke-Yate"}, ["inp"] = {"Iñapari"}, ["ins"] = {"Indian Sign Language"}, ["int"] = {"Intha"}, ["inz"] = {"Ineseño"}, ["ior"] = {"Inor"}, ["iou"] = {"Tuma-Irumu"}, ["iow"] = {"Iowa-Oto"}, ["ipi"] = {"Ipili"}, ["ipo"] = {"Ipiko"}, ["iqu"] = {"Iquito"}, ["iqw"] = {"Ikwo"}, ["ira"] = {"Iranian languages"}, ["ire"] = {"Iresim"}, ["irh"] = {"Irarutu"}, ["iri"] = {"Rigwe", "Irigwe"}, ["irk"] = {"Iraqw"}, ["irn"] = {"Irántxe"}, ["iro"] = {"Iroquoian languages"}, ["irr"] = {"Ir"}, ["iru"] = {"Irula"}, ["irx"] = {"Kamberau"}, ["iry"] = {"Iraya"}, ["isa"] = {"Isabi"}, ["isc"] = {"Isconahua"}, ["isd"] = {"Isnag"}, ["ise"] = {"Italian Sign Language"}, ["isg"] = {"Irish Sign Language"}, ["ish"] = {"Esan"}, ["isi"] = {"Nkem-Nkum"}, ["isk"] = {"Ishkashimi"}, ["ism"] = {"Masimasi"}, ["isn"] = {"Isanzu"}, ["iso"] = {"Isoko"}, ["isr"] = {"Israeli Sign Language"}, ["ist"] = {"Istriot"}, ["isu"] = {"Isu (Menchum Division)"}, ["isv"] = {"Interslavic"}, ["itb"] = {"Binongan Itneg"}, ["itc"] = {"Italic languages"}, ["itd"] = {"Southern Tidung"}, ["ite"] = {"Itene"}, ["iti"] = {"Inlaod Itneg"}, ["itk"] = {"Judeo-Italian"}, ["itl"] = {"Itelmen"}, ["itm"] = {"Itu Mbon Uzo"}, ["ito"] = {"Itonama"}, ["itr"] = {"Iteri"}, ["its"] = {"Isekiri"}, ["itt"] = {"Maeng Itneg"}, ["itv"] = {"Itawit"}, ["itw"] = {"Ito"}, ["itx"] = {"Itik"}, ["ity"] = {"Moyadan Itneg"}, ["itz"] = {"Itzá"}, ["ium"] = {"Iu Mien"}, ["ivb"] = {"Ibatan"}, ["ivv"] = {"Ivatan"}, ["iwk"] = {"I-Wak"}, ["iwm"] = {"Iwam"}, ["iwo"] = {"Iwur"}, ["iws"] = {"Sepik Iwam"}, ["ixc"] = {"Ixcatec"}, ["ixl"] = {"Ixil"}, ["iya"] = {"Iyayu"}, ["iyo"] = {"Mesaka"}, ["iyx"] = {"Yaka (Congo)"}, ["izh"] = {"Ingrian"}, ["izm"] = {"Kizamani"}, ["izr"] = {"Izere"}, ["izz"] = {"Izii"}, ["jaa"] = {"Jamamadí"}, ["jab"] = {"Hyam"}, ["jac"] = {"Popti'", "Jakalteko"}, ["jad"] = {"Jahanka"}, ["jae"] = {"Yabem"}, ["jaf"] = {"Jara"}, ["jah"] = {"Jah Hut"}, ["jaj"] = {"Zazao"}, ["jak"] = {"Jakun"}, ["jal"] = {"Yalahatan"}, ["jam"] = {"Jamaican Creole English"}, ["jan"] = {"Jandai"}, ["jao"] = {"Yanyuwa"}, ["jaq"] = {"Yaqay"}, ["jas"] = {"New Caledonian Javanese"}, ["jat"] = {"Jakati"}, ["jau"] = {"Yaur"}, ["jax"] = {"Jambi Malay"}, ["jay"] = {"Yan-nhangu", "Nhangu"}, ["jaz"] = {"Jawe"}, ["jbe"] = {"Judeo-Berber"}, ["jbi"] = {"Badjiri"}, ["jbj"] = {"Arandai"}, ["jbk"] = {"Barikewa"}, ["jbm"] = {"Bijim"}, ["jbn"] = {"Nafusi"}, ["jbo"] = {"Lojban"}, ["jbr"] = {"Jofotek-Bromnya"}, ["jbt"] = {"Jabutí"}, ["jbu"] = {"Jukun Takum"}, ["jbw"] = {"Yawijibaya"}, ["jcs"] = {"Jamaican Country Sign Language"}, ["jct"] = {"Krymchak"}, ["jda"] = {"Jad"}, ["jdg"] = {"Jadgali"}, ["jdt"] = {"Judeo-Tat"}, ["jeb"] = {"Jebero"}, ["jee"] = {"Jerung"}, ["jeh"] = {"Jeh"}, ["jei"] = {"Yei"}, ["jek"] = {"Jeri Kuo"}, ["jel"] = {"Yelmek"}, ["jen"] = {"Dza"}, ["jer"] = {"Jere"}, ["jet"] = {"Manem"}, ["jeu"] = {"Jonkor Bourmataguil"}, ["jgb"] = {"Ngbee"}, ["jge"] = {"Judeo-Georgian"}, ["jgk"] = {"Gwak"}, ["jgo"] = {"Ngomba"}, ["jhi"] = {"Jehai"}, ["jhs"] = {"Jhankot Sign Language"}, ["jia"] = {"Jina"}, ["jib"] = {"Jibu"}, ["jic"] = {"Tol"}, ["jid"] = {"Bu (Kaduna State)"}, ["jie"] = {"Jilbe"}, ["jig"] = {"Jingulu", "Djingili"}, ["jih"] = {"sTodsde", "Shangzhai"}, ["jii"] = {"Jiiddu"}, ["jil"] = {"Jilim"}, ["jim"] = {"Jimi (Cameroon)"}, ["jio"] = {"Jiamao"}, ["jiq"] = {"Guanyinqiao", "Lavrung"}, ["jit"] = {"Jita"}, ["jiu"] = {"Youle Jinuo"}, ["jiv"] = {"Shuar"}, ["jiy"] = {"Buyuan Jinuo"}, ["jje"] = {"Jejueo"}, ["jjr"] = {"Bankal"}, ["jka"] = {"Kaera"}, ["jkm"] = {"Mobwa Karen"}, ["jko"] = {"Kubo"}, ["jkp"] = {"Paku Karen"}, ["jkr"] = {"Koro (India)"}, ["jks"] = {"Amami Koniya Sign Language"}, ["jku"] = {"Labir"}, ["jle"] = {"Ngile"}, ["jls"] = {"Jamaican Sign Language"}, ["jma"] = {"Dima"}, ["jmb"] = {"Zumbun"}, ["jmc"] = {"Machame"}, ["jmd"] = {"Yamdena"}, ["jmi"] = {"Jimi (Nigeria)"}, ["jml"] = {"Jumli"}, ["jmn"] = {"Makuri Naga"}, ["jmr"] = {"Kamara"}, ["jms"] = {"Mashi (Nigeria)"}, ["jmw"] = {"Mouwase"}, ["jmx"] = {"Western Juxtlahuaca Mixtec"}, ["jna"] = {"Jangshung"}, ["jnd"] = {"Jandavra"}, ["jng"] = {"Yangman"}, ["jni"] = {"Janji"}, ["jnj"] = {"Yemsa"}, ["jnl"] = {"Rawat"}, ["jns"] = {"Jaunsari"}, ["job"] = {"Joba"}, ["jod"] = {"Wojenaka"}, ["jog"] = {"Jogi"}, ["jor"] = {"Jorá"}, ["jos"] = {"Jordanian Sign Language"}, ["jow"] = {"Jowulu"}, ["jpa"] = {"Jewish Palestinian Aramaic"}, ["jpr"] = {"Judeo-Persian"}, ["jpx"] = {"Japanese (family)"}, ["jqr"] = {"Jaqaru"}, ["jra"] = {"Jarai"}, ["jrb"] = {"Judeo-Arabic"}, ["jrr"] = {"Jiru"}, ["jrt"] = {"Jakattoe"}, ["jru"] = {"Japrería"}, ["jsl"] = {"Japanese Sign Language"}, ["jua"] = {"Júma"}, ["jub"] = {"Wannu"}, ["juc"] = {"Jurchen"}, ["jud"] = {"Worodougou"}, ["juh"] = {"Hõne"}, ["jui"] = {"Ngadjuri"}, ["juk"] = {"Wapan"}, ["jul"] = {"Jirel"}, ["jum"] = {"Jumjum"}, ["jun"] = {"Juang"}, ["juo"] = {"Jiba"}, ["jup"] = {"Hupdë"}, ["jur"] = {"Jurúna"}, ["jus"] = {"Jumla Sign Language"}, ["jut"] = {"Jutish"}, ["juu"] = {"Ju"}, ["juw"] = {"Wãpha"}, ["juy"] = {"Juray"}, ["jvd"] = {"Javindo"}, ["jvn"] = {"Caribbean Javanese"}, ["jwi"] = {"Jwira-Pepesa"}, ["jya"] = {"Jiarong"}, ["jye"] = {"Judeo-Yemeni Arabic"}, ["jyy"] = {"Jaya"}, ["kaa"] = {"Kara-Kalpak", "Karakalpak"}, ["kab"] = {"Kabyle"}, ["kac"] = {"Kachin", "Jingpho"}, ["kad"] = {"Adara"}, ["kae"] = {"Ketangalan"}, ["kaf"] = {"Katso"}, ["kag"] = {"Kajaman"}, ["kah"] = {"Kara (Central African Republic)"}, ["kai"] = {"Karekare"}, ["kaj"] = {"Jju"}, ["kak"] = {"Kalanguya", "Kayapa Kallahan"}, ["kam"] = {"Kamba (Kenya)"}, ["kao"] = {"Xaasongaxango"}, ["kap"] = {"Bezhta"}, ["kaq"] = {"Capanahua"}, ["kar"] = {"Karen languages"}, ["kav"] = {"Katukína"}, ["kaw"] = {"Kawi"}, ["kax"] = {"Kao"}, ["kay"] = {"Kamayurá"}, ["kba"] = {"Kalarko"}, ["kbb"] = {"Kaxuiâna"}, ["kbc"] = {"Kadiwéu"}, ["kbd"] = {"Kabardian"}, ["kbe"] = {"Kanju"}, ["kbg"] = {"Khamba"}, ["kbh"] = {"Camsá"}, ["kbi"] = {"Kaptiau"}, ["kbj"] = {"Kari"}, ["kbk"] = {"Grass Koiari"}, ["kbl"] = {"Kanembu"}, ["kbm"] = {"Iwal"}, ["kbn"] = {"Kare (Central African Republic)"}, ["kbo"] = {"Keliko"}, ["kbp"] = {"Kabiyè"}, ["kbq"] = {"Kamano"}, ["kbr"] = {"Kafa"}, ["kbs"] = {"Kande"}, ["kbt"] = {"Abadi"}, ["kbu"] = {"Kabutra"}, ["kbv"] = {"Dera (Indonesia)"}, ["kbw"] = {"Kaiep"}, ["kbx"] = {"Ap Ma"}, ["kby"] = {"Manga Kanuri"}, ["kbz"] = {"Duhwa"}, ["kca"] = {"Khanty"}, ["kcb"] = {"Kawacha"}, ["kcc"] = {"Lubila"}, ["kcd"] = {"Ngkâlmpw Kanum"}, ["kce"] = {"Kaivi"}, ["kcf"] = {"Ukaan"}, ["kcg"] = {"Tyap"}, ["kch"] = {"Vono"}, ["kci"] = {"Ngyian", "Kamantan"}, ["kcj"] = {"Kobiana"}, ["kck"] = {"Kalanga"}, ["kcl"] = {"Kela (Papua New Guinea)", "Kala"}, ["kcm"] = {"Gula (Central African Republic)"}, ["kcn"] = {"Nubi"}, ["kco"] = {"Kinalakna"}, ["kcp"] = {"Kanga"}, ["kcq"] = {"Kamo"}, ["kcr"] = {"Katla"}, ["kcs"] = {"Koenoem"}, ["kct"] = {"Kaian"}, ["kcu"] = {"Kami (Tanzania)"}, ["kcv"] = {"Kete"}, ["kcw"] = {"Kabwari"}, ["kcx"] = {"Kachama-Ganjule"}, ["kcy"] = {"Korandje"}, ["kcz"] = {"Konongo"}, ["kda"] = {"Worimi"}, ["kdc"] = {"Kutu"}, ["kdd"] = {"Yankunytjatjara"}, ["kde"] = {"Makonde"}, ["kdf"] = {"Mamusi"}, ["kdg"] = {"Seba"}, ["kdh"] = {"Tem"}, ["kdi"] = {"Kumam"}, ["kdj"] = {"Karamojong"}, ["kdk"] = {"Numèè", "Kwényi"}, ["kdl"] = {"Tsikimba"}, ["kdm"] = {"Kagoma"}, ["kdn"] = {"Kunda"}, ["kdo"] = {"Kordofanian languages"}, ["kdp"] = {"Kaningdon-Nindem"}, ["kdq"] = {"Koch"}, ["kdr"] = {"Karaim"}, ["kdt"] = {"Kuy"}, ["kdu"] = {"Kadaru"}, ["kdw"] = {"Koneraw"}, ["kdx"] = {"Kam"}, ["kdy"] = {"Keder", "Keijar"}, ["kdz"] = {"Kwaja"}, ["kea"] = {"Kabuverdianu"}, ["keb"] = {"Kélé"}, ["kec"] = {"Keiga"}, ["ked"] = {"Kerewe"}, ["kee"] = {"Eastern Keres"}, ["kef"] = {"Kpessi"}, ["keg"] = {"Tese"}, ["keh"] = {"Keak"}, ["kei"] = {"Kei"}, ["kej"] = {"Kadar"}, ["kek"] = {"Kekchí"}, ["kel"] = {"Kela (Democratic Republic of Congo)"}, ["kem"] = {"Kemak"}, ["ken"] = {"Kenyang"}, ["keo"] = {"Kakwa"}, ["kep"] = {"Kaikadi"}, ["keq"] = {"Kamar"}, ["ker"] = {"Kera"}, ["kes"] = {"Kugbo"}, ["ket"] = {"Ket"}, ["keu"] = {"Akebu"}, ["kev"] = {"Kanikkaran"}, ["kew"] = {"West Kewa"}, ["kex"] = {"Kukna"}, ["key"] = {"Kupia"}, ["kez"] = {"Kukele"}, ["kfa"] = {"Kodava"}, ["kfb"] = {"Northwestern Kolami"}, ["kfc"] = {"Konda-Dora"}, ["kfd"] = {"Korra Koraga"}, ["kfe"] = {"Kota (India)"}, ["kff"] = {"Koya"}, ["kfg"] = {"Kudiya"}, ["kfh"] = {"Kurichiya"}, ["kfi"] = {"Kannada Kurumba"}, ["kfj"] = {"Kemiehua"}, ["kfk"] = {"Kinnauri"}, ["kfl"] = {"Kung"}, ["kfm"] = {"Khunsari"}, ["kfn"] = {"Kuk"}, ["kfo"] = {"Koro (Côte d'Ivoire)"}, ["kfp"] = {"Korwa"}, ["kfq"] = {"Korku"}, ["kfr"] = {"Kachhi", "Kutchi"}, ["kfs"] = {"Bilaspuri"}, ["kft"] = {"Kanjari"}, ["kfu"] = {"Katkari"}, ["kfv"] = {"Kurmukar"}, ["kfw"] = {"Kharam Naga"}, ["kfx"] = {"Kullu Pahari"}, ["kfy"] = {"Kumaoni"}, ["kfz"] = {"Koromfé"}, ["kga"] = {"Koyaga"}, ["kgb"] = {"Kawe"}, ["kge"] = {"Komering"}, ["kgf"] = {"Kube"}, ["kgg"] = {"Kusunda"}, ["kgi"] = {"Selangor Sign Language"}, ["kgj"] = {"Gamale Kham"}, ["kgk"] = {"Kaiwá"}, ["kgl"] = {"Kunggari"}, ["kgn"] = {"Karingani"}, ["kgo"] = {"Krongo"}, ["kgp"] = {"Kaingang"}, ["kgq"] = {"Kamoro"}, ["kgr"] = {"Abun"}, ["kgs"] = {"Kumbainggar"}, ["kgt"] = {"Somyev"}, ["kgu"] = {"Kobol"}, ["kgv"] = {"Karas"}, ["kgw"] = {"Karon Dori"}, ["kgx"] = {"Kamaru"}, ["kgy"] = {"Kyerung"}, ["kha"] = {"Khasi"}, ["khb"] = {"Lü"}, ["khc"] = {"Tukang Besi North"}, ["khd"] = {"Bädi Kanum"}, ["khe"] = {"Korowai"}, ["khf"] = {"Khuen"}, ["khg"] = {"Khams Tibetan"}, ["khh"] = {"Kehu"}, ["khi"] = {"Khoisan languages"}, ["khj"] = {"Kuturmi"}, ["khk"] = {"Halh Mongolian"}, ["khl"] = {"Lusi"}, ["khn"] = {"Khandesi"}, ["kho"] = {"Khotanese", "Sakan"}, ["khp"] = {"Kapori", "Kapauri"}, ["khq"] = {"Koyra Chiini Songhay"}, ["khr"] = {"Kharia"}, ["khs"] = {"Kasua"}, ["kht"] = {"Khamti"}, ["khu"] = {"Nkhumbi"}, ["khv"] = {"Khvarshi"}, ["khw"] = {"Khowar"}, ["khx"] = {"Kanu"}, ["khy"] = {"Kele (Democratic Republic of Congo)"}, ["khz"] = {"Keapara"}, ["kia"] = {"Kim"}, ["kib"] = {"Koalib"}, ["kic"] = {"Kickapoo"}, ["kid"] = {"Koshin"}, ["kie"] = {"Kibet"}, ["kif"] = {"Eastern Parbate Kham"}, ["kig"] = {"Kimaama", "Kimaghima"}, ["kih"] = {"Kilmeri"}, ["kii"] = {"Kitsai"}, ["kij"] = {"Kilivila"}, ["kil"] = {"Kariya"}, ["kim"] = {"Karagas"}, ["kio"] = {"Kiowa"}, ["kip"] = {"Sheshi Kham"}, ["kiq"] = {"Kosadle", "Kosare"}, ["kis"] = {"Kis"}, ["kit"] = {"Agob"}, ["kiu"] = {"Kirmanjki (individual language)"}, ["kiv"] = {"Kimbu"}, ["kiw"] = {"Northeast Kiwai"}, ["kix"] = {"Khiamniungan Naga"}, ["kiy"] = {"Kirikiri"}, ["kiz"] = {"Kisi"}, ["kja"] = {"Mlap"}, ["kjb"] = {"Q'anjob'al", "Kanjobal"}, ["kjc"] = {"Coastal Konjo"}, ["kjd"] = {"Southern Kiwai"}, ["kje"] = {"Kisar"}, ["kjg"] = {"Khmu"}, ["kjh"] = {"Khakas"}, ["kji"] = {"Zabana"}, ["kjj"] = {"Khinalugh"}, ["kjk"] = {"Highland Konjo"}, ["kjl"] = {"Western Parbate Kham"}, ["kjm"] = {"Kháng"}, ["kjn"] = {"Kunjen"}, ["kjo"] = {"Harijan Kinnauri"}, ["kjp"] = {"Pwo Eastern Karen"}, ["kjq"] = {"Western Keres"}, ["kjr"] = {"Kurudu"}, ["kjs"] = {"East Kewa"}, ["kjt"] = {"Phrae Pwo Karen"}, ["kju"] = {"Kashaya"}, ["kjv"] = {"Kaikavian Literary Language"}, ["kjx"] = {"Ramopa"}, ["kjy"] = {"Erave"}, ["kjz"] = {"Bumthangkha"}, ["kka"] = {"Kakanda"}, ["kkb"] = {"Kwerisa"}, ["kkc"] = {"Odoodee"}, ["kkd"] = {"Kinuku"}, ["kke"] = {"Kakabe"}, ["kkf"] = {"Kalaktang Monpa"}, ["kkg"] = {"Mabaka Valley Kalinga"}, ["kkh"] = {"Khün"}, ["kki"] = {"Kagulu"}, ["kkj"] = {"Kako"}, ["kkk"] = {"Kokota"}, ["kkl"] = {"Kosarek Yale"}, ["kkm"] = {"Kiong"}, ["kkn"] = {"Kon Keu"}, ["kko"] = {"Karko"}, ["kkp"] = {"Gugubera", "Koko-Bera"}, ["kkq"] = {"Kaeku"}, ["kkr"] = {"Kir-Balar"}, ["kks"] = {"Giiwo"}, ["kkt"] = {"Koi"}, ["kku"] = {"Tumi"}, ["kkv"] = {"Kangean"}, ["kkw"] = {"Teke-Kukuya"}, ["kkx"] = {"Kohin"}, ["kky"] = {"Guugu Yimidhirr", "Guguyimidjir"}, ["kkz"] = {"Kaska"}, ["kla"] = {"Klamath-Modoc"}, ["klb"] = {"Kiliwa"}, ["klc"] = {"Kolbila"}, ["kld"] = {"Gamilaraay"}, ["kle"] = {"Kulung (Nepal)"}, ["klf"] = {"Kendeje"}, ["klg"] = {"Tagakaulo"}, ["klh"] = {"Weliki"}, ["kli"] = {"Kalumpang"}, ["klj"] = {"Khalaj"}, ["klk"] = {"Kono (Nigeria)"}, ["kll"] = {"Kagan Kalagan"}, ["klm"] = {"Migum"}, ["kln"] = {"Kalenjin"}, ["klo"] = {"Kapya"}, ["klp"] = {"Kamasa"}, ["klq"] = {"Rumu"}, ["klr"] = {"Khaling"}, ["kls"] = {"Kalasha"}, ["klt"] = {"Nukna"}, ["klu"] = {"Klao"}, ["klv"] = {"Maskelynes"}, ["klw"] = {"Tado", "Lindu"}, ["klx"] = {"Koluwawa"}, ["kly"] = {"Kalao"}, ["klz"] = {"Kabola"}, ["kma"] = {"Konni"}, ["kmb"] = {"Kimbundu"}, ["kmc"] = {"Southern Dong"}, ["kmd"] = {"Majukayang Kalinga"}, ["kme"] = {"Bakole"}, ["kmf"] = {"Kare (Papua New Guinea)"}, ["kmg"] = {"Kâte"}, ["kmh"] = {"Kalam"}, ["kmi"] = {"Kami (Nigeria)"}, ["kmj"] = {"Kumarbhag Paharia"}, ["kmk"] = {"Limos Kalinga"}, ["kml"] = {"Tanudan Kalinga"}, ["kmm"] = {"Kom (India)"}, ["kmn"] = {"Awtuw"}, ["kmo"] = {"Kwoma"}, ["kmp"] = {"Gimme"}, ["kmq"] = {"Kwama"}, ["kmr"] = {"Northern Kurdish"}, ["kms"] = {"Kamasau"}, ["kmt"] = {"Kemtuik"}, ["kmu"] = {"Kanite"}, ["kmv"] = {"Karipúna Creole French"}, ["kmw"] = {"Komo (Democratic Republic of Congo)"}, ["kmx"] = {"Waboda"}, ["kmy"] = {"Koma"}, ["kmz"] = {"Khorasani Turkish"}, ["kna"] = {"Dera (Nigeria)"}, ["knb"] = {"Lubuagan Kalinga"}, ["knc"] = {"Central Kanuri"}, ["knd"] = {"Konda"}, ["kne"] = {"Kankanaey"}, ["knf"] = {"Mankanya"}, ["kng"] = {"Koongo"}, ["kni"] = {"Kanufi"}, ["knj"] = {"Western Kanjobal"}, ["knk"] = {"Kuranko"}, ["knl"] = {"Keninjal"}, ["knm"] = {"Kanamarí"}, ["knn"] = {"Konkani (individual language)"}, ["kno"] = {"Kono (Sierra Leone)"}, ["knp"] = {"Kwanja"}, ["knq"] = {"Kintaq"}, ["knr"] = {"Kaningra"}, ["kns"] = {"Kensiu"}, ["knt"] = {"Panoan Katukína"}, ["knu"] = {"Kono (Guinea)"}, ["knv"] = {"Tabo"}, ["knw"] = {"Kung-Ekoka"}, ["knx"] = {"Kendayan", "Salako"}, ["kny"] = {"Kanyok"}, ["knz"] = {"Kalamsé"}, ["koa"] = {"Konomala"}, ["koc"] = {"Kpati"}, ["kod"] = {"Kodi"}, ["koe"] = {"Kacipo-Bale Suri"}, ["kof"] = {"Kubi"}, ["kog"] = {"Cogui", "Kogi"}, ["koh"] = {"Koyo"}, ["koi"] = {"Komi-Permyak"}, ["kok"] = {"Konkani (macrolanguage)"}, ["kol"] = {"Kol (Papua New Guinea)"}, ["koo"] = {"Konzo"}, ["kop"] = {"Waube"}, ["koq"] = {"Kota (Gabon)"}, ["kos"] = {"Kosraean"}, ["kot"] = {"Lagwan"}, ["kou"] = {"Koke"}, ["kov"] = {"Kudu-Camo"}, ["kow"] = {"Kugama"}, ["koy"] = {"Koyukon"}, ["koz"] = {"Korak"}, ["kpa"] = {"Kutto"}, ["kpb"] = {"Mullu Kurumba"}, ["kpc"] = {"Curripaco"}, ["kpd"] = {"Koba"}, ["kpe"] = {"Kpelle"}, ["kpf"] = {"Komba"}, ["kpg"] = {"Kapingamarangi"}, ["kph"] = {"Kplang"}, ["kpi"] = {"Kofei"}, ["kpj"] = {"Karajá"}, ["kpk"] = {"Kpan"}, ["kpl"] = {"Kpala"}, ["kpm"] = {"Koho"}, ["kpn"] = {"Kepkiriwát"}, ["kpo"] = {"Ikposo"}, ["kpq"] = {"Korupun-Sela"}, ["kpr"] = {"Korafe-Yegha"}, ["kps"] = {"Tehit"}, ["kpt"] = {"Karata"}, ["kpu"] = {"Kafoa"}, ["kpv"] = {"Komi-Zyrian"}, ["kpw"] = {"Kobon"}, ["kpx"] = {"Mountain Koiali"}, ["kpy"] = {"Koryak"}, ["kpz"] = {"Kupsabiny"}, ["kqa"] = {"Mum"}, ["kqb"] = {"Kovai"}, ["kqc"] = {"Doromu-Koki"}, ["kqd"] = {"Koy Sanjaq Surat"}, ["kqe"] = {"Kalagan"}, ["kqf"] = {"Kakabai"}, ["kqg"] = {"Khe"}, ["kqh"] = {"Kisankasa"}, ["kqi"] = {"Koitabu"}, ["kqj"] = {"Koromira"}, ["kqk"] = {"Kotafon Gbe"}, ["kql"] = {"Kyenele"}, ["kqm"] = {"Khisa"}, ["kqn"] = {"Kaonde"}, ["kqo"] = {"Eastern Krahn"}, ["kqp"] = {"Kimré"}, ["kqq"] = {"Krenak"}, ["kqr"] = {"Kimaragang"}, ["kqs"] = {"Northern Kissi"}, ["kqt"] = {"Klias River Kadazan"}, ["kqu"] = {"Seroa"}, ["kqv"] = {"Okolod"}, ["kqw"] = {"Kandas"}, ["kqx"] = {"Mser"}, ["kqy"] = {"Koorete"}, ["kqz"] = {"Korana"}, ["kra"] = {"Kumhali"}, ["krb"] = {"Karkin"}, ["krc"] = {"Karachay-Balkar"}, ["krd"] = {"Kairui-Midiki"}, ["kre"] = {"Panará"}, ["krf"] = {"Koro (Vanuatu)"}, ["krh"] = {"Kurama"}, ["kri"] = {"Krio"}, ["krj"] = {"Kinaray-A"}, ["krk"] = {"Kerek"}, ["krl"] = {"Karelian"}, ["krn"] = {"Sapo"}, ["kro"] = {"Kru languages"}, ["krp"] = {"Durop"}, ["krr"] = {"Krung"}, ["krs"] = {"Gbaya (Sudan)"}, ["krt"] = {"Tumari Kanuri"}, ["kru"] = {"Kurukh"}, ["krv"] = {"Kavet"}, ["krw"] = {"Western Krahn"}, ["krx"] = {"Karon"}, ["kry"] = {"Kryts"}, ["krz"] = {"Sota Kanum"}, ["ksb"] = {"Shambala"}, ["ksc"] = {"Southern Kalinga"}, ["ksd"] = {"Kuanua"}, ["kse"] = {"Kuni"}, ["ksf"] = {"Bafia"}, ["ksg"] = {"Kusaghe"}, ["ksh"] = {"Kölsch"}, ["ksi"] = {"Krisa", "I'saka"}, ["ksj"] = {"Uare"}, ["ksk"] = {"Kansa"}, ["ksl"] = {"Kumalu"}, ["ksm"] = {"Kumba"}, ["ksn"] = {"Kasiguranin"}, ["kso"] = {"Kofa"}, ["ksp"] = {"Kaba"}, ["ksq"] = {"Kwaami"}, ["ksr"] = {"Borong"}, ["kss"] = {"Southern Kisi"}, ["kst"] = {"Winyé"}, ["ksu"] = {"Khamyang"}, ["ksv"] = {"Kusu"}, ["ksw"] = {"S'gaw Karen"}, ["ksx"] = {"Kedang"}, ["ksy"] = {"Kharia Thar"}, ["ksz"] = {"Kodaku"}, ["kta"] = {"Katua"}, ["ktb"] = {"Kambaata"}, ["ktc"] = {"Kholok"}, ["ktd"] = {"Kokata", "Kukatha"}, ["kte"] = {"Nubri"}, ["ktf"] = {"Kwami"}, ["ktg"] = {"Kalkutung"}, ["kth"] = {"Karanga"}, ["kti"] = {"North Muyu"}, ["ktj"] = {"Plapo Krumen"}, ["ktk"] = {"Kaniet"}, ["ktl"] = {"Koroshi"}, ["ktm"] = {"Kurti"}, ["ktn"] = {"Karitiâna"}, ["kto"] = {"Kuot"}, ["ktp"] = {"Kaduo"}, ["ktq"] = {"Katabaga"}, ["kts"] = {"South Muyu"}, ["ktt"] = {"Ketum"}, ["ktu"] = {"Kituba (Democratic Republic of Congo)"}, ["ktv"] = {"Eastern Katu"}, ["ktw"] = {"Kato"}, ["ktx"] = {"Kaxararí"}, ["kty"] = {"Kango (Bas-Uélé District)"}, ["ktz"] = {"Juǀʼhoan", "Juǀʼhoansi"}, ["kub"] = {"Kutep"}, ["kuc"] = {"Kwinsu"}, ["kud"] = {"'Auhelawa"}, ["kue"] = {"Kuman (Papua New Guinea)"}, ["kuf"] = {"Western Katu"}, ["kug"] = {"Kupa"}, ["kuh"] = {"Kushi"}, ["kui"] = {"Kuikúro-Kalapálo", "Kalapalo"}, ["kuj"] = {"Kuria"}, ["kuk"] = {"Kepo'"}, ["kul"] = {"Kulere"}, ["kum"] = {"Kumyk"}, ["kun"] = {"Kunama"}, ["kuo"] = {"Kumukio"}, ["kup"] = {"Kunimaipa"}, ["kuq"] = {"Karipuna"}, ["kus"] = {"Kusaal"}, ["kut"] = {"Kutenai"}, ["kuu"] = {"Upper Kuskokwim"}, ["kuv"] = {"Kur"}, ["kuw"] = {"Kpagua"}, ["kux"] = {"Kukatja"}, ["kuy"] = {"Kuuku-Ya'u"}, ["kuz"] = {"Kunza"}, ["kva"] = {"Bagvalal"}, ["kvb"] = {"Kubu"}, ["kvc"] = {"Kove"}, ["kvd"] = {"Kui (Indonesia)"}, ["kve"] = {"Kalabakan"}, ["kvf"] = {"Kabalai"}, ["kvg"] = {"Kuni-Boazi"}, ["kvh"] = {"Komodo"}, ["kvi"] = {"Kwang"}, ["kvj"] = {"Psikye"}, ["kvk"] = {"Korean Sign Language"}, ["kvl"] = {"Kayaw"}, ["kvm"] = {"Kendem"}, ["kvn"] = {"Border Kuna"}, ["kvo"] = {"Dobel"}, ["kvp"] = {"Kompane"}, ["kvq"] = {"Geba Karen"}, ["kvr"] = {"Kerinci"}, ["kvt"] = {"Lahta Karen", "Lahta"}, ["kvu"] = {"Yinbaw Karen"}, ["kvv"] = {"Kola"}, ["kvw"] = {"Wersing"}, ["kvx"] = {"Parkari Koli"}, ["kvy"] = {"Yintale Karen", "Yintale"}, ["kvz"] = {"Tsakwambo", "Tsaukambo"}, ["kwa"] = {"Dâw"}, ["kwb"] = {"Kwa"}, ["kwc"] = {"Likwala"}, ["kwd"] = {"Kwaio"}, ["kwe"] = {"Kwerba"}, ["kwf"] = {"Kwara'ae"}, ["kwg"] = {"Sara Kaba Deme"}, ["kwh"] = {"Kowiai"}, ["kwi"] = {"Awa-Cuaiquer"}, ["kwj"] = {"Kwanga"}, ["kwk"] = {"Kwak'wala", "Kwakiutl"}, ["kwl"] = {"Kofyar"}, ["kwm"] = {"Kwambi"}, ["kwn"] = {"Kwangali"}, ["kwo"] = {"Kwomtari"}, ["kwp"] = {"Kodia"}, ["kwr"] = {"Kwer"}, ["kws"] = {"Kwese"}, ["kwt"] = {"Kwesten"}, ["kwu"] = {"Kwakum"}, ["kwv"] = {"Sara Kaba Náà"}, ["kww"] = {"Kwinti"}, ["kwx"] = {"Khirwar"}, ["kwy"] = {"San Salvador Kongo"}, ["kwz"] = {"Kwadi"}, ["kxa"] = {"Kairiru"}, ["kxb"] = {"Krobu"}, ["kxc"] = {"Konso", "Khonso"}, ["kxd"] = {"Brunei"}, ["kxf"] = {"Manumanaw Karen", "Manumanaw"}, ["kxh"] = {"Karo (Ethiopia)"}, ["kxi"] = {"Keningau Murut"}, ["kxj"] = {"Kulfa"}, ["kxk"] = {"Zayein Karen"}, ["kxm"] = {"Northern Khmer"}, ["kxn"] = {"Kanowit-Tanjong Melanau"}, ["kxo"] = {"Kanoé"}, ["kxp"] = {"Wadiyara Koli"}, ["kxq"] = {"Smärky Kanum"}, ["kxr"] = {"Koro (Papua New Guinea)"}, ["kxs"] = {"Kangjia"}, ["kxt"] = {"Koiwat"}, ["kxv"] = {"Kuvi"}, ["kxw"] = {"Konai"}, ["kxx"] = {"Likuba"}, ["kxy"] = {"Kayong"}, ["kxz"] = {"Kerewo"}, ["kya"] = {"Kwaya"}, ["kyb"] = {"Butbut Kalinga"}, ["kyc"] = {"Kyaka"}, ["kyd"] = {"Karey"}, ["kye"] = {"Krache"}, ["kyf"] = {"Kouya"}, ["kyg"] = {"Keyagana"}, ["kyh"] = {"Karok"}, ["kyi"] = {"Kiput"}, ["kyj"] = {"Karao"}, ["kyk"] = {"Kamayo"}, ["kyl"] = {"Kalapuya"}, ["kym"] = {"Kpatili"}, ["kyn"] = {"Northern Binukidnon"}, ["kyo"] = {"Kelon"}, ["kyp"] = {"Kang"}, ["kyq"] = {"Kenga"}, ["kyr"] = {"Kuruáya"}, ["kys"] = {"Baram Kayan"}, ["kyt"] = {"Kayagar"}, ["kyu"] = {"Western Kayah"}, ["kyv"] = {"Kayort"}, ["kyw"] = {"Kudmali"}, ["kyx"] = {"Rapoisi"}, ["kyy"] = {"Kambaira"}, ["kyz"] = {"Kayabí"}, ["kza"] = {"Western Karaboro"}, ["kzb"] = {"Kaibobo"}, ["kzc"] = {"Bondoukou Kulango"}, ["kzd"] = {"Kadai"}, ["kze"] = {"Kosena"}, ["kzf"] = {"Da'a Kaili"}, ["kzg"] = {"Kikai"}, ["kzi"] = {"Kelabit"}, ["kzk"] = {"Kazukuru"}, ["kzl"] = {"Kayeli"}, ["kzm"] = {"Kais"}, ["kzn"] = {"Kokola"}, ["kzo"] = {"Kaningi"}, ["kzp"] = {"Kaidipang"}, ["kzq"] = {"Kaike"}, ["kzr"] = {"Karang"}, ["kzs"] = {"Sugut Dusun"}, ["kzu"] = {"Kayupulau"}, ["kzv"] = {"Komyandaret"}, ["kzw"] = {"Karirí-Xocó"}, ["kzx"] = {"Kamarian"}, ["kzy"] = {"Kango (Tshopo District)"}, ["kzz"] = {"Kalabra"}, ["laa"] = {"Southern Subanen"}, ["lab"] = {"Linear A"}, ["lac"] = {"Lacandon"}, ["lad"] = {"Ladino"}, ["lae"] = {"Pattani"}, ["laf"] = {"Lafofa"}, ["lag"] = {"Rangi"}, ["lah"] = {"Lahnda"}, ["lai"] = {"Lambya"}, ["laj"] = {"Lango (Uganda)"}, ["lal"] = {"Lalia"}, ["lam"] = {"Lamba"}, ["lan"] = {"Laru"}, ["lap"] = {"Laka (Chad)"}, ["laq"] = {"Qabiao"}, ["lar"] = {"Larteh"}, ["las"] = {"Lama (Togo)"}, ["lau"] = {"Laba"}, ["law"] = {"Lauje"}, ["lax"] = {"Tiwa"}, ["lay"] = {"Lama Bai"}, ["laz"] = {"Aribwatsa"}, ["lbb"] = {"Label"}, ["lbc"] = {"Lakkia"}, ["lbe"] = {"Lak"}, ["lbf"] = {"Tinani"}, ["lbg"] = {"Laopang"}, ["lbi"] = {"La'bi"}, ["lbj"] = {"Ladakhi"}, ["lbk"] = {"Central Bontok"}, ["lbl"] = {"Libon Bikol"}, ["lbm"] = {"Lodhi"}, ["lbn"] = {"Rmeet"}, ["lbo"] = {"Laven"}, ["lbq"] = {"Wampar"}, ["lbr"] = {"Lohorung"}, ["lbs"] = {"Libyan Sign Language"}, ["lbt"] = {"Lachi"}, ["lbu"] = {"Labu"}, ["lbv"] = {"Lavatbura-Lamusong"}, ["lbw"] = {"Tolaki"}, ["lbx"] = {"Lawangan"}, ["lby"] = {"Lamalama", "Lamu-Lamu"}, ["lbz"] = {"Lardil"}, ["lcc"] = {"Legenyem"}, ["lcd"] = {"Lola"}, ["lce"] = {"Loncong", "Sekak"}, ["lcf"] = {"Lubu"}, ["lch"] = {"Luchazi"}, ["lcl"] = {"Lisela"}, ["lcm"] = {"Tungag"}, ["lcp"] = {"Western Lawa"}, ["lcq"] = {"Luhu"}, ["lcs"] = {"Lisabata-Nuniali"}, ["lda"] = {"Kla-Dan"}, ["ldb"] = {"Dũya"}, ["ldd"] = {"Luri"}, ["ldg"] = {"Lenyima"}, ["ldh"] = {"Lamja-Dengsa-Tola"}, ["ldi"] = {"Laari"}, ["ldj"] = {"Lemoro"}, ["ldk"] = {"Leelau"}, ["ldl"] = {"Kaan"}, ["ldm"] = {"Landoma"}, ["ldn"] = {"Láadan"}, ["ldo"] = {"Loo"}, ["ldp"] = {"Tso"}, ["ldq"] = {"Lufu"}, ["lea"] = {"Lega-Shabunda"}, ["leb"] = {"Lala-Bisa"}, ["lec"] = {"Leco"}, ["led"] = {"Lendu"}, ["lee"] = {"Lyélé"}, ["lef"] = {"Lelemi"}, ["leh"] = {"Lenje"}, ["lei"] = {"Lemio"}, ["lej"] = {"Lengola"}, ["lek"] = {"Leipon"}, ["lel"] = {"Lele (Democratic Republic of Congo)"}, ["lem"] = {"Nomaande"}, ["len"] = {"Lenca"}, ["leo"] = {"Leti (Cameroon)"}, ["lep"] = {"Lepcha"}, ["leq"] = {"Lembena"}, ["ler"] = {"Lenkau"}, ["les"] = {"Lese"}, ["let"] = {"Lesing-Gelimi", "Amio-Gelimi"}, ["leu"] = {"Kara (Papua New Guinea)"}, ["lev"] = {"Lamma"}, ["lew"] = {"Ledo Kaili"}, ["lex"] = {"Luang"}, ["ley"] = {"Lemolang"}, ["lez"] = {"Lezghian"}, ["lfa"] = {"Lefa"}, ["lfb"] = {"Buu (Cameroon)"}, ["lfn"] = {"Lingua Franca Nova"}, ["lga"] = {"Lungga"}, ["lgb"] = {"Laghu"}, ["lgg"] = {"Lugbara"}, ["lgh"] = {"Laghuu"}, ["lgi"] = {"Lengilu"}, ["lgk"] = {"Lingarak", "Neverver"}, ["lgl"] = {"Wala"}, ["lgm"] = {"Lega-Mwenga"}, ["lgn"] = {"T'apo", "Opuuo"}, ["lgo"] = {"Lango (South Sudan)"}, ["lgq"] = {"Logba"}, ["lgr"] = {"Lengo"}, ["lgs"] = {"Guinea-Bissau Sign Language", "Língua Gestual Guineense"}, ["lgt"] = {"Pahi"}, ["lgu"] = {"Longgu"}, ["lgz"] = {"Ligenza"}, ["lha"] = {"Laha (Viet Nam)"}, ["lhh"] = {"Laha (Indonesia)"}, ["lhi"] = {"Lahu Shi"}, ["lhl"] = {"Lahul Lohar"}, ["lhm"] = {"Lhomi"}, ["lhn"] = {"Lahanan"}, ["lhp"] = {"Lhokpu"}, ["lhs"] = {"Mlahsö"}, ["lht"] = {"Lo-Toga"}, ["lhu"] = {"Lahu"}, ["lia"] = {"West-Central Limba"}, ["lib"] = {"Likum"}, ["lic"] = {"Hlai"}, ["lid"] = {"Nyindrou"}, ["lie"] = {"Likila"}, ["lif"] = {"Limbu"}, ["lig"] = {"Ligbi"}, ["lih"] = {"Lihir"}, ["lij"] = {"Ligurian"}, ["lik"] = {"Lika"}, ["lil"] = {"Lillooet"}, ["lio"] = {"Liki"}, ["lip"] = {"Sekpele"}, ["liq"] = {"Libido"}, ["lir"] = {"Liberian English"}, ["lis"] = {"Lisu"}, ["liu"] = {"Logorik"}, ["liv"] = {"Liv"}, ["liw"] = {"Col"}, ["lix"] = {"Liabuku"}, ["liy"] = {"Banda-Bambari"}, ["liz"] = {"Libinza"}, ["lja"] = {"Golpa"}, ["lje"] = {"Rampi"}, ["lji"] = {"Laiyolo"}, ["ljl"] = {"Li'o"}, ["ljp"] = {"Lampung Api"}, ["ljw"] = {"Yirandali"}, ["ljx"] = {"Yuru"}, ["lka"] = {"Lakalei"}, ["lkb"] = {"Kabras", "Lukabaras"}, ["lkc"] = {"Kucong"}, ["lkd"] = {"Lakondê"}, ["lke"] = {"Kenyi"}, ["lkh"] = {"Lakha"}, ["lki"] = {"Laki"}, ["lkj"] = {"Remun"}, ["lkl"] = {"Laeko-Libuat"}, ["lkm"] = {"Kalaamaya"}, ["lkn"] = {"Lakon", "Vure"}, ["lko"] = {"Khayo", "Olukhayo"}, ["lkr"] = {"Päri"}, ["lks"] = {"Kisa", "Olushisa"}, ["lkt"] = {"Lakota"}, ["lku"] = {"Kungkari"}, ["lky"] = {"Lokoya"}, ["lla"] = {"Lala-Roba"}, ["llb"] = {"Lolo"}, ["llc"] = {"Lele (Guinea)"}, ["lld"] = {"Ladin"}, ["lle"] = {"Lele (Papua New Guinea)"}, ["llf"] = {"Hermit"}, ["llg"] = {"Lole"}, ["llh"] = {"Lamu"}, ["lli"] = {"Teke-Laali"}, ["llj"] = {"Ladji Ladji"}, ["llk"] = {"Lelak"}, ["lll"] = {"Lilau"}, ["llm"] = {"Lasalimu"}, ["lln"] = {"Lele (Chad)"}, ["llp"] = {"North Efate"}, ["llq"] = {"Lolak"}, ["lls"] = {"Lithuanian Sign Language"}, ["llu"] = {"Lau"}, ["llx"] = {"Lauan"}, ["lma"] = {"East Limba"}, ["lmb"] = {"Merei"}, ["lmc"] = {"Limilngan"}, ["lmd"] = {"Lumun"}, ["lme"] = {"Pévé"}, ["lmf"] = {"South Lembata"}, ["lmg"] = {"Lamogai"}, ["lmh"] = {"Lambichhong"}, ["lmi"] = {"Lombi"}, ["lmj"] = {"West Lembata"}, ["lmk"] = {"Lamkang"}, ["lml"] = {"Hano"}, ["lmn"] = {"Lambadi"}, ["lmo"] = {"Lombard"}, ["lmp"] = {"Limbum"}, ["lmq"] = {"Lamatuka"}, ["lmr"] = {"Lamalera"}, ["lmu"] = {"Lamenu"}, ["lmv"] = {"Lomaiviti"}, ["lmw"] = {"Lake Miwok"}, ["lmx"] = {"Laimbue"}, ["lmy"] = {"Lamboya"}, ["lna"] = {"Langbashe"}, ["lnb"] = {"Mbalanhu"}, ["lnd"] = {"Lundayeh", "Lun Bawang"}, ["lng"] = {"Langobardic"}, ["lnh"] = {"Lanoh"}, ["lni"] = {"Daantanai'"}, ["lnj"] = {"Leningitij"}, ["lnl"] = {"South Central Banda"}, ["lnm"] = {"Langam"}, ["lnn"] = {"Lorediakarkar"}, ["lns"] = {"Lamnso'"}, ["lnu"] = {"Longuda"}, ["lnw"] = {"Lanima"}, ["lnz"] = {"Lonzo"}, ["loa"] = {"Loloda"}, ["lob"] = {"Lobi"}, ["loc"] = {"Inonhan"}, ["loe"] = {"Saluan"}, ["lof"] = {"Logol"}, ["log"] = {"Logo"}, ["loh"] = {"Laarim", "Narim"}, ["loi"] = {"Loma (Côte d'Ivoire)"}, ["loj"] = {"Lou"}, ["lok"] = {"Loko"}, ["lol"] = {"Mongo"}, ["lom"] = {"Loma (Liberia)"}, ["lon"] = {"Malawi Lomwe"}, ["loo"] = {"Lombo"}, ["lop"] = {"Lopa"}, ["loq"] = {"Lobala"}, ["lor"] = {"Téén"}, ["los"] = {"Loniu"}, ["lot"] = {"Otuho"}, ["lou"] = {"Louisiana Creole"}, ["lov"] = {"Lopi"}, ["low"] = {"Tampias Lobu"}, ["lox"] = {"Loun"}, ["loy"] = {"Loke"}, ["loz"] = {"Lozi"}, ["lpa"] = {"Lelepa"}, ["lpe"] = {"Lepki"}, ["lpn"] = {"Long Phuri Naga"}, ["lpo"] = {"Lipo"}, ["lpx"] = {"Lopit"}, ["lqr"] = {"Logir"}, ["lra"] = {"Rara Bakati'"}, ["lrc"] = {"Northern Luri"}, ["lre"] = {"Laurentian"}, ["lrg"] = {"Laragia"}, ["lri"] = {"Marachi", "Olumarachi"}, ["lrk"] = {"Loarki"}, ["lrl"] = {"Lari"}, ["lrm"] = {"Marama", "Olumarama"}, ["lrn"] = {"Lorang"}, ["lro"] = {"Laro"}, ["lrr"] = {"Southern Yamphu"}, ["lrt"] = {"Larantuka Malay"}, ["lrv"] = {"Larevat"}, ["lrz"] = {"Lemerig"}, ["lsa"] = {"Lasgerdi"}, ["lsb"] = {"Burundian Sign Language", "Langue des Signes Burundaise"}, ["lsc"] = {"Albarradas Sign Language", "Lengua de señas Albarradas"}, ["lsd"] = {"Lishana Deni"}, ["lse"] = {"Lusengo"}, ["lsh"] = {"Lish"}, ["lsi"] = {"Lashi"}, ["lsl"] = {"Latvian Sign Language"}, ["lsm"] = {"Saamia", "Olusamia"}, ["lsn"] = {"Tibetan Sign Language"}, ["lso"] = {"Laos Sign Language"}, ["lsp"] = {"Panamanian Sign Language", "Lengua de Señas Panameñas"}, ["lsr"] = {"Aruop"}, ["lss"] = {"Lasi"}, ["lst"] = {"Trinidad and Tobago Sign Language"}, ["lsv"] = {"Sivia Sign Language"}, ["lsw"] = {"Seychelles Sign Language", "Lalang Siny Seselwa", "Langue des Signes Seychelloise"}, ["lsy"] = {"Mauritian Sign Language"}, ["ltc"] = {"Late Middle Chinese"}, ["ltg"] = {"Latgalian"}, ["lth"] = {"Thur"}, ["lti"] = {"Leti (Indonesia)"}, ["ltn"] = {"Latundê"}, ["lto"] = {"Tsotso", "Olutsotso"}, ["lts"] = {"Tachoni", "Lutachoni"}, ["ltu"] = {"Latu"}, ["lua"] = {"Luba-Lulua"}, ["luc"] = {"Aringa"}, ["lud"] = {"Ludian"}, ["lue"] = {"Luvale"}, ["luf"] = {"Laua"}, ["luh"] = {"Leizhou Chinese"}, ["lui"] = {"Luiseño"}, ["luj"] = {"Luna"}, ["luk"] = {"Lunanakha"}, ["lul"] = {"Olu'bo"}, ["lum"] = {"Luimbi"}, ["lun"] = {"Lunda"}, ["luo"] = {"Luo (Kenya and Tanzania)", "Dholuo"}, ["lup"] = {"Lumbu"}, ["luq"] = {"Lucumi"}, ["lur"] = {"Laura"}, ["lus"] = {"Lushai"}, ["lut"] = {"Lushootseed"}, ["luu"] = {"Lumba-Yakkha"}, ["luv"] = {"Luwati"}, ["luw"] = {"Luo (Cameroon)"}, ["luy"] = {"Luyia", "Oluluyia"}, ["luz"] = {"Southern Luri"}, ["lva"] = {"Maku'a"}, ["lvi"] = {"Lavi"}, ["lvk"] = {"Lavukaleve"}, ["lvl"] = {"Lwel"}, ["lvs"] = {"Standard Latvian"}, ["lvu"] = {"Levuka"}, ["lwa"] = {"Lwalu"}, ["lwe"] = {"Lewo Eleng"}, ["lwg"] = {"Wanga", "Oluwanga"}, ["lwh"] = {"White Lachi"}, ["lwl"] = {"Eastern Lawa"}, ["lwm"] = {"Laomian"}, ["lwo"] = {"Luwo"}, ["lws"] = {"Malawian Sign Language"}, ["lwt"] = {"Lewotobi"}, ["lwu"] = {"Lawu"}, ["lww"] = {"Lewo"}, ["lxm"] = {"Lakurumau"}, ["lya"] = {"Layakha"}, ["lyg"] = {"Lyngngam"}, ["lyn"] = {"Luyana"}, ["lzh"] = {"Literary Chinese"}, ["lzl"] = {"Litzlitz"}, ["lzn"] = {"Leinong Naga"}, ["lzz"] = {"Laz"}, ["maa"] = {"San Jerónimo Tecóatl Mazatec"}, ["mab"] = {"Yutanduchi Mixtec"}, ["mad"] = {"Madurese"}, ["mae"] = {"Bo-Rukul"}, ["maf"] = {"Mafa"}, ["mag"] = {"Magahi"}, ["mai"] = {"Maithili"}, ["maj"] = {"Jalapa De Díaz Mazatec"}, ["mak"] = {"Makasar"}, ["mam"] = {"Mam"}, ["man"] = {"Mandingo", "Manding"}, ["map"] = {"Austronesian languages"}, ["maq"] = {"Chiquihuitlán Mazatec"}, ["mas"] = {"Masai"}, ["mat"] = {"San Francisco Matlatzinca"}, ["mau"] = {"Huautla Mazatec"}, ["mav"] = {"Sateré-Mawé"}, ["maw"] = {"Mampruli"}, ["max"] = {"North Moluccan Malay"}, ["maz"] = {"Central Mazahua"}, ["mba"] = {"Higaonon"}, ["mbb"] = {"Western Bukidnon Manobo"}, ["mbc"] = {"Macushi"}, ["mbd"] = {"Dibabawon Manobo"}, ["mbe"] = {"Molale"}, ["mbf"] = {"Baba Malay"}, ["mbh"] = {"Mangseng"}, ["mbi"] = {"Ilianen Manobo"}, ["mbj"] = {"Nadëb"}, ["mbk"] = {"Malol"}, ["mbl"] = {"Maxakalí"}, ["mbm"] = {"Ombamba"}, ["mbn"] = {"Macaguán"}, ["mbo"] = {"Mbo (Cameroon)"}, ["mbp"] = {"Malayo"}, ["mbq"] = {"Maisin"}, ["mbr"] = {"Nukak Makú"}, ["mbs"] = {"Sarangani Manobo"}, ["mbt"] = {"Matigsalug Manobo"}, ["mbu"] = {"Mbula-Bwazza"}, ["mbv"] = {"Mbulungish"}, ["mbw"] = {"Maring"}, ["mbx"] = {"Mari (East Sepik Province)"}, ["mby"] = {"Memoni"}, ["mbz"] = {"Amoltepec Mixtec"}, ["mca"] = {"Maca"}, ["mcb"] = {"Machiguenga"}, ["mcc"] = {"Bitur"}, ["mcd"] = {"Sharanahua"}, ["mce"] = {"Itundujia Mixtec"}, ["mcf"] = {"Matsés"}, ["mcg"] = {"Mapoyo"}, ["mch"] = {"Maquiritari"}, ["mci"] = {"Mese"}, ["mcj"] = {"Mvanip"}, ["mck"] = {"Mbunda"}, ["mcl"] = {"Macaguaje"}, ["mcm"] = {"Malaccan Creole Portuguese"}, ["mcn"] = {"Masana"}, ["mco"] = {"Coatlán Mixe"}, ["mcp"] = {"Makaa"}, ["mcq"] = {"Ese"}, ["mcr"] = {"Menya"}, ["mcs"] = {"Mambai"}, ["mct"] = {"Mengisa"}, ["mcu"] = {"Cameroon Mambila"}, ["mcv"] = {"Minanibai"}, ["mcw"] = {"Mawa (Chad)"}, ["mcx"] = {"Mpiemo"}, ["mcy"] = {"South Watut"}, ["mcz"] = {"Mawan"}, ["mda"] = {"Mada (Nigeria)"}, ["mdb"] = {"Morigi"}, ["mdc"] = {"Male (Papua New Guinea)"}, ["mdd"] = {"Mbum"}, ["mde"] = {"Maba (Chad)"}, ["mdf"] = {"Moksha"}, ["mdg"] = {"Massalat"}, ["mdh"] = {"Maguindanaon"}, ["mdi"] = {"Mamvu"}, ["mdj"] = {"Mangbetu"}, ["mdk"] = {"Mangbutu"}, ["mdl"] = {"Maltese Sign Language"}, ["mdm"] = {"Mayogo"}, ["mdn"] = {"Mbati"}, ["mdp"] = {"Mbala"}, ["mdq"] = {"Mbole"}, ["mdr"] = {"Mandar"}, ["mds"] = {"Maria (Papua New Guinea)"}, ["mdt"] = {"Mbere"}, ["mdu"] = {"Mboko"}, ["mdv"] = {"Santa Lucía Monteverde Mixtec"}, ["mdw"] = {"Mbosi"}, ["mdx"] = {"Dizin"}, ["mdy"] = {"Male (Ethiopia)"}, ["mdz"] = {"Suruí Do Pará"}, ["mea"] = {"Menka"}, ["meb"] = {"Ikobi"}, ["mec"] = {"Marra"}, ["med"] = {"Melpa"}, ["mee"] = {"Mengen"}, ["mef"] = {"Megam"}, ["meh"] = {"Southwestern Tlaxiaco Mixtec"}, ["mei"] = {"Midob"}, ["mej"] = {"Meyah"}, ["mek"] = {"Mekeo"}, ["mel"] = {"Central Melanau"}, ["mem"] = {"Mangala"}, ["men"] = {"Mende (Sierra Leone)"}, ["meo"] = {"Kedah Malay"}, ["mep"] = {"Miriwoong"}, ["meq"] = {"Merey"}, ["mer"] = {"Meru"}, ["mes"] = {"Masmaje"}, ["met"] = {"Mato"}, ["meu"] = {"Motu"}, ["mev"] = {"Mano"}, ["mew"] = {"Maaka"}, ["mey"] = {"Hassaniyya"}, ["mez"] = {"Menominee"}, ["mfa"] = {"Pattani Malay"}, ["mfb"] = {"Bangka"}, ["mfc"] = {"Mba"}, ["mfd"] = {"Mendankwe-Nkwen"}, ["mfe"] = {"Morisyen"}, ["mff"] = {"Naki"}, ["mfg"] = {"Mogofin"}, ["mfh"] = {"Matal"}, ["mfi"] = {"Wandala"}, ["mfj"] = {"Mefele"}, ["mfk"] = {"North Mofu"}, ["mfl"] = {"Putai"}, ["mfm"] = {"Marghi South"}, ["mfn"] = {"Cross River Mbembe"}, ["mfo"] = {"Mbe"}, ["mfp"] = {"Makassar Malay"}, ["mfq"] = {"Moba"}, ["mfr"] = {"Marrithiyel"}, ["mfs"] = {"Mexican Sign Language"}, ["mft"] = {"Mokerang"}, ["mfu"] = {"Mbwela"}, ["mfv"] = {"Mandjak"}, ["mfw"] = {"Mulaha"}, ["mfx"] = {"Melo"}, ["mfy"] = {"Mayo"}, ["mfz"] = {"Mabaan"}, ["mga"] = {"Middle Irish (900-1200)"}, ["mgb"] = {"Mararit"}, ["mgc"] = {"Morokodo"}, ["mgd"] = {"Moru"}, ["mge"] = {"Mango"}, ["mgf"] = {"Maklew"}, ["mgg"] = {"Mpumpong"}, ["mgh"] = {"Makhuwa-Meetto"}, ["mgi"] = {"Lijili"}, ["mgj"] = {"Abureni"}, ["mgk"] = {"Mawes"}, ["mgl"] = {"Maleu-Kilenge"}, ["mgm"] = {"Mambae"}, ["mgn"] = {"Mbangi"}, ["mgo"] = {"Meta'"}, ["mgp"] = {"Eastern Magar"}, ["mgq"] = {"Malila"}, ["mgr"] = {"Mambwe-Lungu"}, ["mgs"] = {"Manda (Tanzania)"}, ["mgt"] = {"Mongol"}, ["mgu"] = {"Mailu"}, ["mgv"] = {"Matengo"}, ["mgw"] = {"Matumbi"}, ["mgy"] = {"Mbunga"}, ["mgz"] = {"Mbugwe"}, ["mha"] = {"Manda (India)"}, ["mhb"] = {"Mahongwe"}, ["mhc"] = {"Mocho"}, ["mhd"] = {"Mbugu"}, ["mhe"] = {"Besisi", "Mah Meri"}, ["mhf"] = {"Mamaa"}, ["mhg"] = {"Margu"}, ["mhi"] = {"Ma'di"}, ["mhj"] = {"Mogholi"}, ["mhk"] = {"Mungaka"}, ["mhl"] = {"Mauwake"}, ["mhm"] = {"Makhuwa-Moniga"}, ["mhn"] = {"Mòcheno"}, ["mho"] = {"Mashi (Zambia)"}, ["mhp"] = {"Balinese Malay"}, ["mhq"] = {"Mandan"}, ["mhr"] = {"Eastern Mari"}, ["mhs"] = {"Buru (Indonesia)"}, ["mht"] = {"Mandahuaca"}, ["mhu"] = {"Digaro-Mishmi", "Darang Deng"}, ["mhw"] = {"Mbukushu"}, ["mhx"] = {"Maru", "Lhaovo"}, ["mhy"] = {"Ma'anyan"}, ["mhz"] = {"Mor (Mor Islands)"}, ["mia"] = {"Miami"}, ["mib"] = {"Atatláhuca Mixtec"}, ["mic"] = {"Mi'kmaq", "Micmac"}, ["mid"] = {"Mandaic"}, ["mie"] = {"Ocotepec Mixtec"}, ["mif"] = {"Mofu-Gudur"}, ["mig"] = {"San Miguel El Grande Mixtec"}, ["mih"] = {"Chayuco Mixtec"}, ["mii"] = {"Chigmecatitlán Mixtec"}, ["mij"] = {"Abar", "Mungbam"}, ["mik"] = {"Mikasuki"}, ["mil"] = {"Peñoles Mixtec"}, ["mim"] = {"Alacatlatzala Mixtec"}, ["min"] = {"Minangkabau"}, ["mio"] = {"Pinotepa Nacional Mixtec"}, ["mip"] = {"Apasco-Apoala Mixtec"}, ["miq"] = {"Mískito"}, ["mir"] = {"Isthmus Mixe"}, ["mis"] = {"Uncoded languages"}, ["mit"] = {"Southern Puebla Mixtec"}, ["miu"] = {"Cacaloxtepec Mixtec"}, ["miw"] = {"Akoye"}, ["mix"] = {"Mixtepec Mixtec"}, ["miy"] = {"Ayutla Mixtec"}, ["miz"] = {"Coatzospan Mixtec"}, ["mjb"] = {"Makalero"}, ["mjc"] = {"San Juan Colorado Mixtec"}, ["mjd"] = {"Northwest Maidu"}, ["mje"] = {"Muskum"}, ["mjg"] = {"Tu"}, ["mjh"] = {"Mwera (Nyasa)"}, ["mji"] = {"Kim Mun"}, ["mjj"] = {"Mawak"}, ["mjk"] = {"Matukar"}, ["mjl"] = {"Mandeali"}, ["mjm"] = {"Medebur"}, ["mjn"] = {"Ma (Papua New Guinea)"}, ["mjo"] = {"Malankuravan"}, ["mjp"] = {"Malapandaram"}, ["mjq"] = {"Malaryan"}, ["mjr"] = {"Malavedan"}, ["mjs"] = {"Miship"}, ["mjt"] = {"Sauria Paharia"}, ["mju"] = {"Manna-Dora"}, ["mjv"] = {"Mannan"}, ["mjw"] = {"Karbi"}, ["mjx"] = {"Mahali"}, ["mjy"] = {"Mahican"}, ["mjz"] = {"Majhi"}, ["mka"] = {"Mbre"}, ["mkb"] = {"Mal Paharia"}, ["mkc"] = {"Siliput"}, ["mke"] = {"Mawchi"}, ["mkf"] = {"Miya"}, ["mkg"] = {"Mak (China)"}, ["mkh"] = {"Mon-Khmer languages"}, ["mki"] = {"Dhatki"}, ["mkj"] = {"Mokilese"}, ["mkk"] = {"Byep"}, ["mkl"] = {"Mokole"}, ["mkm"] = {"Moklen"}, ["mkn"] = {"Kupang Malay"}, ["mko"] = {"Mingang Doso"}, ["mkp"] = {"Moikodi"}, ["mkq"] = {"Bay Miwok"}, ["mkr"] = {"Malas"}, ["mks"] = {"Silacayoapan Mixtec"}, ["mkt"] = {"Vamale"}, ["mku"] = {"Konyanka Maninka"}, ["mkv"] = {"Mafea"}, ["mkw"] = {"Kituba (Congo)"}, ["mkx"] = {"Kinamiging Manobo"}, ["mky"] = {"East Makian"}, ["mkz"] = {"Makasae"}, ["mla"] = {"Malo"}, ["mlb"] = {"Mbule"}, ["mlc"] = {"Cao Lan"}, ["mle"] = {"Manambu"}, ["mlf"] = {"Mal"}, ["mlh"] = {"Mape"}, ["mli"] = {"Malimpung"}, ["mlj"] = {"Miltu"}, ["mlk"] = {"Ilwana", "Kiwilwana"}, ["mll"] = {"Malua Bay"}, ["mlm"] = {"Mulam"}, ["mln"] = {"Malango"}, ["mlo"] = {"Mlomp"}, ["mlp"] = {"Bargam"}, ["mlq"] = {"Western Maninkakan"}, ["mlr"] = {"Vame"}, ["mls"] = {"Masalit"}, ["mlu"] = {"To'abaita"}, ["mlv"] = {"Motlav", "Mwotlap"}, ["mlw"] = {"Moloko"}, ["mlx"] = {"Malfaxal", "Naha'ai"}, ["mlz"] = {"Malaynon"}, ["mma"] = {"Mama"}, ["mmb"] = {"Momina"}, ["mmc"] = {"Michoacán Mazahua"}, ["mmd"] = {"Maonan"}, ["mme"] = {"Mae"}, ["mmf"] = {"Mundat"}, ["mmg"] = {"North Ambrym"}, ["mmh"] = {"Mehináku"}, ["mmi"] = {"Hember Avu", "Amben", "Musar"}, ["mmj"] = {"Majhwar"}, ["mmk"] = {"Mukha-Dora"}, ["mml"] = {"Man Met"}, ["mmm"] = {"Maii"}, ["mmn"] = {"Mamanwa"}, ["mmo"] = {"Mangga Buang"}, ["mmp"] = {"Siawi"}, ["mmq"] = {"Musak"}, ["mmr"] = {"Western Xiangxi Miao"}, ["mmt"] = {"Malalamai"}, ["mmu"] = {"Mmaala"}, ["mmv"] = {"Miriti"}, ["mmw"] = {"Emae"}, ["mmx"] = {"Madak"}, ["mmy"] = {"Migaama"}, ["mmz"] = {"Mabaale"}, ["mna"] = {"Mbula"}, ["mnb"] = {"Muna"}, ["mnc"] = {"Manchu"}, ["mnd"] = {"Mondé"}, ["mne"] = {"Naba"}, ["mnf"] = {"Mundani"}, ["mng"] = {"Eastern Mnong"}, ["mnh"] = {"Mono (Democratic Republic of Congo)"}, ["mni"] = {"Manipuri"}, ["mnj"] = {"Munji"}, ["mnk"] = {"Mandinka"}, ["mnl"] = {"Tiale"}, ["mnm"] = {"Mapena"}, ["mnn"] = {"Southern Mnong"}, ["mno"] = {"Manobo languages"}, ["mnp"] = {"Min Bei Chinese"}, ["mnq"] = {"Minriq"}, ["mnr"] = {"Mono (USA)"}, ["mns"] = {"Mansi"}, ["mnu"] = {"Mer"}, ["mnv"] = {"Rennell-Bellona"}, ["mnw"] = {"Mon"}, ["mnx"] = {"Manikion"}, ["mny"] = {"Manyawa"}, ["mnz"] = {"Moni"}, ["moa"] = {"Mwan"}, ["moc"] = {"Mocoví"}, ["mod"] = {"Mobilian"}, ["moe"] = {"Innu", "Montagnais"}, ["mog"] = {"Mongondow"}, ["moh"] = {"Mohawk"}, ["moi"] = {"Mboi"}, ["moj"] = {"Monzombo"}, ["mok"] = {"Morori"}, ["mom"] = {"Mangue"}, ["moo"] = {"Monom"}, ["mop"] = {"Mopán Maya"}, ["moq"] = {"Mor (Bomberai Peninsula)"}, ["mor"] = {"Moro"}, ["mos"] = {"Mossi"}, ["mot"] = {"Barí"}, ["mou"] = {"Mogum"}, ["mov"] = {"Mohave"}, ["mow"] = {"Moi (Congo)"}, ["mox"] = {"Molima"}, ["moy"] = {"Shekkacho"}, ["moz"] = {"Mukulu", "Gergiko"}, ["mpa"] = {"Mpoto"}, ["mpb"] = {"Malak Malak", "Mullukmulluk"}, ["mpc"] = {"Mangarrayi"}, ["mpd"] = {"Machinere"}, ["mpe"] = {"Majang"}, ["mpg"] = {"Marba"}, ["mph"] = {"Maung"}, ["mpi"] = {"Mpade"}, ["mpj"] = {"Martu Wangka", "Wangkajunga"}, ["mpk"] = {"Mbara (Chad)"}, ["mpl"] = {"Middle Watut"}, ["mpm"] = {"Yosondúa Mixtec"}, ["mpn"] = {"Mindiri"}, ["mpo"] = {"Miu"}, ["mpp"] = {"Migabac"}, ["mpq"] = {"Matís"}, ["mpr"] = {"Vangunu"}, ["mps"] = {"Dadibi"}, ["mpt"] = {"Mian"}, ["mpu"] = {"Makuráp"}, ["mpv"] = {"Mungkip"}, ["mpw"] = {"Mapidian"}, ["mpx"] = {"Misima-Panaeati"}, ["mpy"] = {"Mapia"}, ["mpz"] = {"Mpi"}, ["mqa"] = {"Maba (Indonesia)"}, ["mqb"] = {"Mbuko"}, ["mqc"] = {"Mangole"}, ["mqe"] = {"Matepi"}, ["mqf"] = {"Momuna"}, ["mqg"] = {"Kota Bangun Kutai Malay"}, ["mqh"] = {"Tlazoyaltepec Mixtec"}, ["mqi"] = {"Mariri"}, ["mqj"] = {"Mamasa"}, ["mqk"] = {"Rajah Kabunsuwan Manobo"}, ["mql"] = {"Mbelime"}, ["mqm"] = {"South Marquesan"}, ["mqn"] = {"Moronene"}, ["mqo"] = {"Modole"}, ["mqp"] = {"Manipa"}, ["mqq"] = {"Minokok"}, ["mqr"] = {"Mander"}, ["mqs"] = {"West Makian"}, ["mqt"] = {"Mok"}, ["mqu"] = {"Mandari"}, ["mqv"] = {"Mosimo"}, ["mqw"] = {"Murupi"}, ["mqx"] = {"Mamuju"}, ["mqy"] = {"Manggarai"}, ["mqz"] = {"Pano"}, ["mra"] = {"Mlabri"}, ["mrb"] = {"Marino"}, ["mrc"] = {"Maricopa"}, ["mrd"] = {"Western Magar"}, ["mre"] = {"Martha's Vineyard Sign Language"}, ["mrf"] = {"Elseng"}, ["mrg"] = {"Mising"}, ["mrh"] = {"Mara Chin"}, ["mrj"] = {"Western Mari"}, ["mrk"] = {"Hmwaveke"}, ["mrl"] = {"Mortlockese"}, ["mrm"] = {"Merlav", "Mwerlap"}, ["mrn"] = {"Cheke Holo"}, ["mro"] = {"Mru"}, ["mrp"] = {"Morouas"}, ["mrq"] = {"North Marquesan"}, ["mrr"] = {"Maria (India)"}, ["mrs"] = {"Maragus"}, ["mrt"] = {"Marghi Central"}, ["mru"] = {"Mono (Cameroon)"}, ["mrv"] = {"Mangareva"}, ["mrw"] = {"Maranao"}, ["mrx"] = {"Maremgi", "Dineor"}, ["mry"] = {"Mandaya"}, ["mrz"] = {"Marind"}, ["msb"] = {"Masbatenyo"}, ["msc"] = {"Sankaran Maninka"}, ["msd"] = {"Yucatec Maya Sign Language"}, ["mse"] = {"Musey"}, ["msf"] = {"Mekwei"}, ["msg"] = {"Moraid"}, ["msh"] = {"Masikoro Malagasy"}, ["msi"] = {"Sabah Malay"}, ["msj"] = {"Ma (Democratic Republic of Congo)"}, ["msk"] = {"Mansaka"}, ["msl"] = {"Molof", "Poule"}, ["msm"] = {"Agusan Manobo"}, ["msn"] = {"Vurës"}, ["mso"] = {"Mombum"}, ["msp"] = {"Maritsauá"}, ["msq"] = {"Caac"}, ["msr"] = {"Mongolian Sign Language"}, ["mss"] = {"West Masela"}, ["msu"] = {"Musom"}, ["msv"] = {"Maslam"}, ["msw"] = {"Mansoanka"}, ["msx"] = {"Moresada"}, ["msy"] = {"Aruamu"}, ["msz"] = {"Momare"}, ["mta"] = {"Cotabato Manobo"}, ["mtb"] = {"Anyin Morofo"}, ["mtc"] = {"Munit"}, ["mtd"] = {"Mualang"}, ["mte"] = {"Mono (Solomon Islands)"}, ["mtf"] = {"Murik (Papua New Guinea)"}, ["mtg"] = {"Una"}, ["mth"] = {"Munggui"}, ["mti"] = {"Maiwa (Papua New Guinea)"}, ["mtj"] = {"Moskona"}, ["mtk"] = {"Mbe'"}, ["mtl"] = {"Montol"}, ["mtm"] = {"Mator"}, ["mtn"] = {"Matagalpa"}, ["mto"] = {"Totontepec Mixe"}, ["mtp"] = {"Wichí Lhamtés Nocten"}, ["mtq"] = {"Muong"}, ["mtr"] = {"Mewari"}, ["mts"] = {"Yora"}, ["mtt"] = {"Mota"}, ["mtu"] = {"Tututepec Mixtec"}, ["mtv"] = {"Asaro'o"}, ["mtw"] = {"Southern Binukidnon"}, ["mtx"] = {"Tidaá Mixtec"}, ["mty"] = {"Nabi"}, ["mua"] = {"Mundang"}, ["mub"] = {"Mubi"}, ["muc"] = {"Ajumbu"}, ["mud"] = {"Mednyj Aleut"}, ["mue"] = {"Media Lengua"}, ["mug"] = {"Musgu"}, ["muh"] = {"Mündü"}, ["mui"] = {"Musi"}, ["muj"] = {"Mabire"}, ["muk"] = {"Mugom"}, ["mul"] = {"Multiple languages"}, ["mum"] = {"Maiwala"}, ["mun"] = {"Munda languages"}, ["muo"] = {"Nyong"}, ["mup"] = {"Malvi"}, ["muq"] = {"Eastern Xiangxi Miao"}, ["mur"] = {"Murle"}, ["mus"] = {"Creek"}, ["mut"] = {"Western Muria"}, ["muu"] = {"Yaaku"}, ["muv"] = {"Muthuvan"}, ["mux"] = {"Bo-Ung"}, ["muy"] = {"Muyang"}, ["muz"] = {"Mursi"}, ["mva"] = {"Manam"}, ["mvb"] = {"Mattole"}, ["mvd"] = {"Mamboru"}, ["mve"] = {"Marwari (Pakistan)"}, ["mvf"] = {"Peripheral Mongolian"}, ["mvg"] = {"Yucuañe Mixtec"}, ["mvh"] = {"Mulgi"}, ["mvi"] = {"Miyako"}, ["mvk"] = {"Mekmek"}, ["mvl"] = {"Mbara (Australia)"}, ["mvn"] = {"Minaveha"}, ["mvo"] = {"Marovo"}, ["mvp"] = {"Duri"}, ["mvq"] = {"Moere"}, ["mvr"] = {"Marau"}, ["mvs"] = {"Massep"}, ["mvt"] = {"Mpotovoro"}, ["mvu"] = {"Marfa"}, ["mvv"] = {"Tagal Murut"}, ["mvw"] = {"Machinga"}, ["mvx"] = {"Meoswar"}, ["mvy"] = {"Indus Kohistani"}, ["mvz"] = {"Mesqan"}, ["mwa"] = {"Mwatebu"}, ["mwb"] = {"Juwal"}, ["mwc"] = {"Are"}, ["mwe"] = {"Mwera (Chimwera)"}, ["mwf"] = {"Murrinh-Patha"}, ["mwg"] = {"Aiklep"}, ["mwh"] = {"Mouk-Aria"}, ["mwi"] = {"Labo", "Ninde"}, ["mwk"] = {"Kita Maninkakan"}, ["mwl"] = {"Mirandese"}, ["mwm"] = {"Sar"}, ["mwn"] = {"Nyamwanga"}, ["mwo"] = {"Central Maewo"}, ["mwp"] = {"Kala Lagaw Ya"}, ["mwq"] = {"Mün Chin"}, ["mwr"] = {"Marwari"}, ["mws"] = {"Mwimbi-Muthambi"}, ["mwt"] = {"Moken"}, ["mwu"] = {"Mittu"}, ["mwv"] = {"Mentawai"}, ["mww"] = {"Hmong Daw"}, ["mwz"] = {"Moingi"}, ["mxa"] = {"Northwest Oaxaca Mixtec"}, ["mxb"] = {"Tezoatlán Mixtec"}, ["mxc"] = {"Manyika"}, ["mxd"] = {"Modang"}, ["mxe"] = {"Mele-Fila"}, ["mxf"] = {"Malgbe"}, ["mxg"] = {"Mbangala"}, ["mxh"] = {"Mvuba"}, ["mxi"] = {"Mozarabic"}, ["mxj"] = {"Miju-Mishmi", "Geman Deng"}, ["mxk"] = {"Monumbo"}, ["mxl"] = {"Maxi Gbe"}, ["mxm"] = {"Meramera"}, ["mxn"] = {"Moi (Indonesia)"}, ["mxo"] = {"Mbowe"}, ["mxp"] = {"Tlahuitoltepec Mixe"}, ["mxq"] = {"Juquila Mixe"}, ["mxr"] = {"Murik (Malaysia)"}, ["mxs"] = {"Huitepec Mixtec"}, ["mxt"] = {"Jamiltepec Mixtec"}, ["mxu"] = {"Mada (Cameroon)"}, ["mxv"] = {"Metlatónoc Mixtec"}, ["mxw"] = {"Namo"}, ["mxx"] = {"Mahou", "Mawukakan"}, ["mxy"] = {"Southeastern Nochixtlán Mixtec"}, ["mxz"] = {"Central Masela"}, ["myb"] = {"Mbay"}, ["myc"] = {"Mayeka"}, ["mye"] = {"Myene"}, ["myf"] = {"Bambassi"}, ["myg"] = {"Manta"}, ["myh"] = {"Makah"}, ["myj"] = {"Mangayat"}, ["myk"] = {"Mamara Senoufo"}, ["myl"] = {"Moma"}, ["mym"] = {"Me'en"}, ["myn"] = {"Mayan languages"}, ["myo"] = {"Anfillo"}, ["myp"] = {"Pirahã"}, ["myr"] = {"Muniche"}, ["mys"] = {"Mesmes"}, ["myu"] = {"Mundurukú"}, ["myv"] = {"Erzya"}, ["myw"] = {"Muyuw"}, ["myx"] = {"Masaaba"}, ["myy"] = {"Macuna"}, ["myz"] = {"Classical Mandaic"}, ["mza"] = {"Santa María Zacatepec Mixtec"}, ["mzb"] = {"Tumzabt"}, ["mzc"] = {"Madagascar Sign Language"}, ["mzd"] = {"Malimba"}, ["mze"] = {"Morawa"}, ["mzg"] = {"Monastic Sign Language"}, ["mzh"] = {"Wichí Lhamtés Güisnay"}, ["mzi"] = {"Ixcatlán Mazatec"}, ["mzj"] = {"Manya"}, ["mzk"] = {"Nigeria Mambila"}, ["mzl"] = {"Mazatlán Mixe"}, ["mzm"] = {"Mumuye"}, ["mzn"] = {"Mazanderani"}, ["mzo"] = {"Matipuhy"}, ["mzp"] = {"Movima"}, ["mzq"] = {"Mori Atas"}, ["mzr"] = {"Marúbo"}, ["mzs"] = {"Macanese"}, ["mzt"] = {"Mintil"}, ["mzu"] = {"Inapang"}, ["mzv"] = {"Manza"}, ["mzw"] = {"Deg"}, ["mzx"] = {"Mawayana"}, ["mzy"] = {"Mozambican Sign Language"}, ["mzz"] = {"Maiadomu"}, ["naa"] = {"Namla"}, ["nab"] = {"Southern Nambikuára"}, ["nac"] = {"Narak"}, ["nae"] = {"Naka'ela"}, ["naf"] = {"Nabak"}, ["nag"] = {"Naga Pidgin"}, ["nah"] = {"Nahuatl languages"}, ["nai"] = {"North American Indian languages"}, ["naj"] = {"Nalu"}, ["nak"] = {"Nakanai"}, ["nal"] = {"Nalik"}, ["nam"] = {"Ngan'gityemerri"}, ["nan"] = {"Min Nan Chinese"}, ["nao"] = {"Naaba"}, ["nap"] = {"Neapolitan"}, ["naq"] = {"Khoekhoe", "Nama (Namibia)"}, ["nar"] = {"Iguta"}, ["nas"] = {"Naasioi"}, ["nat"] = {"Ca̱hungwa̱rya̱", "Hungworo"}, ["naw"] = {"Nawuri"}, ["nax"] = {"Nakwi"}, ["nay"] = {"Ngarrindjeri"}, ["naz"] = {"Coatepec Nahuatl"}, ["nba"] = {"Nyemba"}, ["nbb"] = {"Ndoe"}, ["nbc"] = {"Chang Naga"}, ["nbd"] = {"Ngbinda"}, ["nbe"] = {"Konyak Naga"}, ["nbg"] = {"Nagarchal"}, ["nbh"] = {"Ngamo"}, ["nbi"] = {"Mao Naga"}, ["nbj"] = {"Ngarinyman"}, ["nbk"] = {"Nake"}, ["nbm"] = {"Ngbaka Ma'bo"}, ["nbn"] = {"Kuri"}, ["nbo"] = {"Nkukoli"}, ["nbp"] = {"Nnam"}, ["nbq"] = {"Nggem"}, ["nbr"] = {"Numana"}, ["nbs"] = {"Namibian Sign Language"}, ["nbt"] = {"Na"}, ["nbu"] = {"Rongmei Naga"}, ["nbv"] = {"Ngamambo"}, ["nbw"] = {"Southern Ngbandi"}, ["nby"] = {"Ningera"}, ["nca"] = {"Iyo"}, ["ncb"] = {"Central Nicobarese"}, ["ncc"] = {"Ponam"}, ["ncd"] = {"Nachering"}, ["nce"] = {"Yale"}, ["ncf"] = {"Notsi"}, ["ncg"] = {"Nisga'a"}, ["nch"] = {"Central Huasteca Nahuatl"}, ["nci"] = {"Classical Nahuatl"}, ["ncj"] = {"Northern Puebla Nahuatl"}, ["nck"] = {"Na-kara"}, ["ncl"] = {"Michoacán Nahuatl"}, ["ncm"] = {"Nambo"}, ["ncn"] = {"Nauna"}, ["nco"] = {"Sibe"}, ["ncq"] = {"Northern Katang"}, ["ncr"] = {"Ncane"}, ["ncs"] = {"Nicaraguan Sign Language"}, ["nct"] = {"Chothe Naga"}, ["ncu"] = {"Chumburung"}, ["ncx"] = {"Central Puebla Nahuatl"}, ["ncz"] = {"Natchez"}, ["nda"] = {"Ndasa"}, ["ndb"] = {"Kenswei Nsei"}, ["ndc"] = {"Ndau"}, ["ndd"] = {"Nde-Nsele-Nta"}, ["ndf"] = {"Nadruvian"}, ["ndg"] = {"Ndengereko"}, ["ndh"] = {"Ndali"}, ["ndi"] = {"Samba Leko"}, ["ndj"] = {"Ndamba"}, ["ndk"] = {"Ndaka"}, ["ndl"] = {"Ndolo"}, ["ndm"] = {"Ndam"}, ["ndn"] = {"Ngundi"}, ["ndp"] = {"Ndo"}, ["ndq"] = {"Ndombe"}, ["ndr"] = {"Ndoola"}, ["nds"] = {"Low German", "Low Saxon"}, ["ndt"] = {"Ndunga"}, ["ndu"] = {"Dugun"}, ["ndv"] = {"Ndut"}, ["ndw"] = {"Ndobo"}, ["ndx"] = {"Nduga"}, ["ndy"] = {"Lutos"}, ["ndz"] = {"Ndogo"}, ["nea"] = {"Eastern Ngad'a"}, ["neb"] = {"Toura (Côte d'Ivoire)"}, ["nec"] = {"Nedebang"}, ["ned"] = {"Nde-Gbite"}, ["nee"] = {"Nêlêmwa-Nixumwak"}, ["nef"] = {"Nefamese"}, ["neg"] = {"Negidal"}, ["neh"] = {"Nyenkha"}, ["nei"] = {"Neo-Hittite"}, ["nej"] = {"Neko"}, ["nek"] = {"Neku"}, ["nem"] = {"Nemi"}, ["nen"] = {"Nengone"}, ["neo"] = {"Ná-Meo"}, ["neq"] = {"North Central Mixe"}, ["ner"] = {"Yahadian"}, ["nes"] = {"Bhoti Kinnauri"}, ["net"] = {"Nete"}, ["neu"] = {"Neo"}, ["nev"] = {"Nyaheun"}, ["new"] = {"Nepal Bhasa", "Newar", "Newari"}, ["nex"] = {"Neme"}, ["ney"] = {"Neyo"}, ["nez"] = {"Nez Perce"}, ["nfa"] = {"Dhao"}, ["nfd"] = {"Ahwai"}, ["nfl"] = {"Ayiwo", "Äiwoo"}, ["nfr"] = {"Nafaanra"}, ["nfu"] = {"Mfumte"}, ["nga"] = {"Ngbaka"}, ["ngb"] = {"Northern Ngbandi"}, ["ngc"] = {"Ngombe (Democratic Republic of Congo)"}, ["ngd"] = {"Ngando (Central African Republic)"}, ["nge"] = {"Ngemba"}, ["ngf"] = {"Trans-New Guinea languages"}, ["ngg"] = {"Ngbaka Manza"}, ["ngh"] = {"Nǁng"}, ["ngi"] = {"Ngizim"}, ["ngj"] = {"Ngie"}, ["ngk"] = {"Dalabon"}, ["ngl"] = {"Lomwe"}, ["ngm"] = {"Ngatik Men's Creole"}, ["ngn"] = {"Ngwo"}, ["ngp"] = {"Ngulu"}, ["ngq"] = {"Ngurimi", "Ngoreme"}, ["ngr"] = {"Engdewu"}, ["ngs"] = {"Gvoko"}, ["ngt"] = {"Kriang", "Ngeq"}, ["ngu"] = {"Guerrero Nahuatl"}, ["ngv"] = {"Nagumi"}, ["ngw"] = {"Ngwaba"}, ["ngx"] = {"Nggwahyi"}, ["ngy"] = {"Tibea"}, ["ngz"] = {"Ngungwel"}, ["nha"] = {"Nhanda"}, ["nhb"] = {"Beng"}, ["nhc"] = {"Tabasco Nahuatl"}, ["nhd"] = {"Chiripá", "Ava Guaraní"}, ["nhe"] = {"Eastern Huasteca Nahuatl"}, ["nhf"] = {"Nhuwala"}, ["nhg"] = {"Tetelcingo Nahuatl"}, ["nhh"] = {"Nahari"}, ["nhi"] = {"Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"}, ["nhk"] = {"Isthmus-Cosoleacaque Nahuatl"}, ["nhm"] = {"Morelos Nahuatl"}, ["nhn"] = {"Central Nahuatl"}, ["nho"] = {"Takuu"}, ["nhp"] = {"Isthmus-Pajapan Nahuatl"}, ["nhq"] = {"Huaxcaleca Nahuatl"}, ["nhr"] = {"Naro"}, ["nht"] = {"Ometepec Nahuatl"}, ["nhu"] = {"Noone"}, ["nhv"] = {"Temascaltepec Nahuatl"}, ["nhw"] = {"Western Huasteca Nahuatl"}, ["nhx"] = {"Isthmus-Mecayapan Nahuatl"}, ["nhy"] = {"Northern Oaxaca Nahuatl"}, ["nhz"] = {"Santa María La Alta Nahuatl"}, ["nia"] = {"Nias"}, ["nib"] = {"Nakame"}, ["nic"] = {"Niger-Kordofanian languages"}, ["nid"] = {"Ngandi"}, ["nie"] = {"Niellim"}, ["nif"] = {"Nek"}, ["nig"] = {"Ngalakgan"}, ["nih"] = {"Nyiha (Tanzania)"}, ["nii"] = {"Nii"}, ["nij"] = {"Ngaju"}, ["nik"] = {"Southern Nicobarese"}, ["nil"] = {"Nila"}, ["nim"] = {"Nilamba"}, ["nin"] = {"Ninzo"}, ["nio"] = {"Nganasan"}, ["niq"] = {"Nandi"}, ["nir"] = {"Nimboran"}, ["nis"] = {"Nimi"}, ["nit"] = {"Southeastern Kolami"}, ["niu"] = {"Niuean"}, ["niv"] = {"Gilyak"}, ["niw"] = {"Nimo"}, ["nix"] = {"Hema"}, ["niy"] = {"Ngiti"}, ["niz"] = {"Ningil"}, ["nja"] = {"Nzanyi"}, ["njb"] = {"Nocte Naga"}, ["njd"] = {"Ndonde Hamba"}, ["njh"] = {"Lotha Naga"}, ["nji"] = {"Gudanji"}, ["njj"] = {"Njen"}, ["njl"] = {"Njalgulgule"}, ["njm"] = {"Angami Naga"}, ["njn"] = {"Liangmai Naga"}, ["njo"] = {"Ao Naga"}, ["njr"] = {"Njerep"}, ["njs"] = {"Nisa"}, ["njt"] = {"Ndyuka-Trio Pidgin"}, ["nju"] = {"Ngadjunmaya"}, ["njx"] = {"Kunyi"}, ["njy"] = {"Njyem"}, ["njz"] = {"Nyishi"}, ["nka"] = {"Nkoya"}, ["nkb"] = {"Khoibu Naga"}, ["nkc"] = {"Nkongho"}, ["nkd"] = {"Koireng"}, ["nke"] = {"Duke"}, ["nkf"] = {"Inpui Naga"}, ["nkg"] = {"Nekgini"}, ["nkh"] = {"Khezha Naga"}, ["nki"] = {"Thangal Naga"}, ["nkj"] = {"Nakai"}, ["nkk"] = {"Nokuku"}, ["nkm"] = {"Namat"}, ["nkn"] = {"Nkangala"}, ["nko"] = {"Nkonya"}, ["nkp"] = {"Niuatoputapu"}, ["nkq"] = {"Nkami"}, ["nkr"] = {"Nukuoro"}, ["nks"] = {"North Asmat"}, ["nkt"] = {"Nyika (Tanzania)"}, ["nku"] = {"Bouna Kulango"}, ["nkv"] = {"Nyika (Malawi and Zambia)"}, ["nkw"] = {"Nkutu"}, ["nkx"] = {"Nkoroo"}, ["nkz"] = {"Nkari"}, ["nla"] = {"Ngombale"}, ["nlc"] = {"Nalca"}, ["nle"] = {"East Nyala"}, ["nlg"] = {"Gela"}, ["nli"] = {"Grangali"}, ["nlj"] = {"Nyali"}, ["nlk"] = {"Ninia Yali"}, ["nll"] = {"Nihali"}, ["nlm"] = {"Mankiyali"}, ["nlo"] = {"Ngul"}, ["nlq"] = {"Lao Naga"}, ["nlu"] = {"Nchumbulu"}, ["nlv"] = {"Orizaba Nahuatl"}, ["nlw"] = {"Walangama"}, ["nlx"] = {"Nahali"}, ["nly"] = {"Nyamal"}, ["nlz"] = {"Nalögo"}, ["nma"] = {"Maram Naga"}, ["nmb"] = {"Big Nambas", "V'ënen Taut"}, ["nmc"] = {"Ngam"}, ["nmd"] = {"Ndumu"}, ["nme"] = {"Mzieme Naga"}, ["nmf"] = {"Tangkhul Naga (India)"}, ["nmg"] = {"Kwasio"}, ["nmh"] = {"Monsang Naga"}, ["nmi"] = {"Nyam"}, ["nmj"] = {"Ngombe (Central African Republic)"}, ["nmk"] = {"Namakura"}, ["nml"] = {"Ndemli"}, ["nmm"] = {"Manangba"}, ["nmn"] = {"ǃXóõ"}, ["nmo"] = {"Moyon Naga"}, ["nmp"] = {"Nimanbur"}, ["nmq"] = {"Nambya"}, ["nmr"] = {"Nimbari"}, ["nms"] = {"Letemboi"}, ["nmt"] = {"Namonuito"}, ["nmu"] = {"Northeast Maidu"}, ["nmv"] = {"Ngamini"}, ["nmw"] = {"Nimoa", "Rifao"}, ["nmx"] = {"Nama (Papua New Guinea)"}, ["nmy"] = {"Namuyi"}, ["nmz"] = {"Nawdm"}, ["nna"] = {"Nyangumarta"}, ["nnb"] = {"Nande"}, ["nnc"] = {"Nancere"}, ["nnd"] = {"West Ambae"}, ["nne"] = {"Ngandyera"}, ["nnf"] = {"Ngaing"}, ["nng"] = {"Maring Naga"}, ["nnh"] = {"Ngiemboon"}, ["nni"] = {"North Nuaulu"}, ["nnj"] = {"Nyangatom"}, ["nnk"] = {"Nankina"}, ["nnl"] = {"Northern Rengma Naga"}, ["nnm"] = {"Namia"}, ["nnn"] = {"Ngete"}, ["nnp"] = {"Wancho Naga"}, ["nnq"] = {"Ngindo"}, ["nnr"] = {"Narungga"}, ["nnt"] = {"Nanticoke"}, ["nnu"] = {"Dwang"}, ["nnv"] = {"Nugunu (Australia)"}, ["nnw"] = {"Southern Nuni"}, ["nny"] = {"Nyangga"}, ["nnz"] = {"Nda'nda'"}, ["noa"] = {"Woun Meu"}, ["noc"] = {"Nuk"}, ["nod"] = {"Northern Thai"}, ["noe"] = {"Nimadi"}, ["nof"] = {"Nomane"}, ["nog"] = {"Nogai"}, ["noh"] = {"Nomu"}, ["noi"] = {"Noiri"}, ["noj"] = {"Nonuya"}, ["nok"] = {"Nooksack"}, ["nol"] = {"Nomlaki"}, ["non"] = {"Old Norse"}, ["nop"] = {"Numanggang"}, ["noq"] = {"Ngongo"}, ["nos"] = {"Eastern Nisu"}, ["not"] = {"Nomatsiguenga"}, ["nou"] = {"Ewage-Notu"}, ["nov"] = {"Novial"}, ["now"] = {"Nyambo"}, ["noy"] = {"Noy"}, ["noz"] = {"Nayi"}, ["npa"] = {"Nar Phu"}, ["npb"] = {"Nupbikha"}, ["npg"] = {"Ponyo-Gongwang Naga"}, ["nph"] = {"Phom Naga"}, ["npi"] = {"Nepali (individual language)"}, ["npl"] = {"Southeastern Puebla Nahuatl"}, ["npn"] = {"Mondropolon"}, ["npo"] = {"Pochuri Naga"}, ["nps"] = {"Nipsan"}, ["npu"] = {"Puimei Naga"}, ["npx"] = {"Noipx"}, ["npy"] = {"Napu"}, ["nqg"] = {"Southern Nago"}, ["nqk"] = {"Kura Ede Nago"}, ["nql"] = {"Ngendelengo"}, ["nqm"] = {"Ndom"}, ["nqn"] = {"Nen"}, ["nqo"] = {"N'Ko", "N’Ko"}, ["nqq"] = {"Kyan-Karyaw Naga"}, ["nqt"] = {"Nteng"}, ["nqy"] = {"Akyaung Ari Naga"}, ["nra"] = {"Ngom"}, ["nrb"] = {"Nara"}, ["nrc"] = {"Noric"}, ["nre"] = {"Southern Rengma Naga"}, ["nrf"] = {"Jèrriais", "Guernésiais", "Sercquiais"}, ["nrg"] = {"Narango"}, ["nri"] = {"Chokri Naga"}, ["nrk"] = {"Ngarla"}, ["nrl"] = {"Ngarluma"}, ["nrm"] = {"Narom"}, ["nrn"] = {"Norn"}, ["nrp"] = {"North Picene"}, ["nrr"] = {"Norra", "Nora"}, ["nrt"] = {"Northern Kalapuya"}, ["nru"] = {"Narua"}, ["nrx"] = {"Ngurmbur"}, ["nrz"] = {"Lala"}, ["nsa"] = {"Sangtam Naga"}, ["nsb"] = {"Lower Nossob"}, ["nsc"] = {"Nshi"}, ["nsd"] = {"Southern Nisu"}, ["nse"] = {"Nsenga"}, ["nsf"] = {"Northwestern Nisu"}, ["nsg"] = {"Ngasa"}, ["nsh"] = {"Ngoshie"}, ["nsi"] = {"Nigerian Sign Language"}, ["nsk"] = {"Naskapi"}, ["nsl"] = {"Norwegian Sign Language"}, ["nsm"] = {"Sumi Naga"}, ["nsn"] = {"Nehan"}, ["nso"] = {"Pedi", "Northern Sotho", "Sepedi"}, ["nsp"] = {"Nepalese Sign Language"}, ["nsq"] = {"Northern Sierra Miwok"}, ["nsr"] = {"Maritime Sign Language"}, ["nss"] = {"Nali"}, ["nst"] = {"Tase Naga"}, ["nsu"] = {"Sierra Negra Nahuatl"}, ["nsv"] = {"Southwestern Nisu"}, ["nsw"] = {"Navut"}, ["nsx"] = {"Nsongo"}, ["nsy"] = {"Nasal"}, ["nsz"] = {"Nisenan"}, ["ntd"] = {"Northern Tidung"}, ["ntg"] = {"Ngantangarra"}, ["nti"] = {"Natioro"}, ["ntj"] = {"Ngaanyatjarra"}, ["ntk"] = {"Ikoma-Nata-Isenye"}, ["ntm"] = {"Nateni"}, ["nto"] = {"Ntomba"}, ["ntp"] = {"Northern Tepehuan"}, ["ntr"] = {"Delo"}, ["ntu"] = {"Natügu"}, ["ntw"] = {"Nottoway"}, ["ntx"] = {"Tangkhul Naga (Myanmar)"}, ["nty"] = {"Mantsi"}, ["ntz"] = {"Natanzi"}, ["nua"] = {"Yuanga"}, ["nub"] = {"Nubian languages"}, ["nuc"] = {"Nukuini"}, ["nud"] = {"Ngala"}, ["nue"] = {"Ngundu"}, ["nuf"] = {"Nusu"}, ["nug"] = {"Nungali"}, ["nuh"] = {"Ndunda"}, ["nui"] = {"Ngumbi"}, ["nuj"] = {"Nyole"}, ["nuk"] = {"Nuu-chah-nulth", "Nuuchahnulth"}, ["nul"] = {"Nusa Laut"}, ["num"] = {"Niuafo'ou"}, ["nun"] = {"Anong"}, ["nuo"] = {"Nguôn"}, ["nup"] = {"Nupe-Nupe-Tako"}, ["nuq"] = {"Nukumanu"}, ["nur"] = {"Nukuria"}, ["nus"] = {"Nuer"}, ["nut"] = {"Nung (Viet Nam)"}, ["nuu"] = {"Ngbundu"}, ["nuv"] = {"Northern Nuni"}, ["nuw"] = {"Nguluwan"}, ["nux"] = {"Mehek"}, ["nuy"] = {"Nunggubuyu"}, ["nuz"] = {"Tlamacazapa Nahuatl"}, ["nvh"] = {"Nasarian"}, ["nvm"] = {"Namiae"}, ["nvo"] = {"Nyokon"}, ["nwa"] = {"Nawathinehena"}, ["nwb"] = {"Nyabwa"}, ["nwc"] = {"Classical Newari", "Classical Nepal Bhasa", "Old Newari"}, ["nwe"] = {"Ngwe"}, ["nwg"] = {"Ngayawung"}, ["nwi"] = {"Southwest Tanna"}, ["nwm"] = {"Nyamusa-Molo"}, ["nwo"] = {"Nauo"}, ["nwr"] = {"Nawaru"}, ["nww"] = {"Ndwewe"}, ["nwx"] = {"Middle Newar"}, ["nwy"] = {"Nottoway-Meherrin"}, ["nxa"] = {"Nauete"}, ["nxd"] = {"Ngando (Democratic Republic of Congo)"}, ["nxe"] = {"Nage"}, ["nxg"] = {"Ngad'a"}, ["nxi"] = {"Nindi"}, ["nxk"] = {"Koki Naga"}, ["nxl"] = {"South Nuaulu"}, ["nxm"] = {"Numidian"}, ["nxn"] = {"Ngawun"}, ["nxo"] = {"Ndambomo"}, ["nxq"] = {"Naxi"}, ["nxr"] = {"Ninggerum"}, ["nxx"] = {"Nafri"}, ["nyb"] = {"Nyangbo"}, ["nyc"] = {"Nyanga-li"}, ["nyd"] = {"Nyore", "Olunyole"}, ["nye"] = {"Nyengo"}, ["nyf"] = {"Giryama", "Kigiryama"}, ["nyg"] = {"Nyindu"}, ["nyh"] = {"Nyikina"}, ["nyi"] = {"Ama (Sudan)"}, ["nyj"] = {"Nyanga"}, ["nyk"] = {"Nyaneka"}, ["nyl"] = {"Nyeu"}, ["nym"] = {"Nyamwezi"}, ["nyn"] = {"Nyankole"}, ["nyo"] = {"Nyoro"}, ["nyp"] = {"Nyang'i"}, ["nyq"] = {"Nayini"}, ["nyr"] = {"Nyiha (Malawi)"}, ["nys"] = {"Nyungar"}, ["nyt"] = {"Nyawaygi"}, ["nyu"] = {"Nyungwe"}, ["nyv"] = {"Nyulnyul"}, ["nyw"] = {"Nyaw"}, ["nyx"] = {"Nganyaywana"}, ["nyy"] = {"Nyakyusa-Ngonde"}, ["nza"] = {"Tigon Mbembe"}, ["nzb"] = {"Njebi"}, ["nzd"] = {"Nzadi"}, ["nzi"] = {"Nzima"}, ["nzk"] = {"Nzakara"}, ["nzm"] = {"Zeme Naga"}, ["nzr"] = {"Dir-Nyamzak-Mbarimi"}, ["nzs"] = {"New Zealand Sign Language"}, ["nzu"] = {"Teke-Nzikou"}, ["nzy"] = {"Nzakambay"}, ["nzz"] = {"Nanga Dama Dogon"}, ["oaa"] = {"Orok"}, ["oac"] = {"Oroch"}, ["oak"] = {"Noakhali", "Noakhailla"}, ["oar"] = {"Old Aramaic (up to 700 BCE)", "Ancient Aramaic (up to 700 BCE)"}, ["oav"] = {"Old Avar"}, ["obi"] = {"Obispeño"}, ["obk"] = {"Southern Bontok"}, ["obl"] = {"Oblo"}, ["obm"] = {"Moabite"}, ["obo"] = {"Obo Manobo"}, ["obr"] = {"Old Burmese"}, ["obt"] = {"Old Breton"}, ["obu"] = {"Obulom"}, ["oca"] = {"Ocaina"}, ["och"] = {"Old Chinese"}, ["ocm"] = {"Old Cham"}, ["oco"] = {"Old Cornish"}, ["ocu"] = {"Atzingo Matlatzinca"}, ["oda"] = {"Odut"}, ["odk"] = {"Od"}, ["odt"] = {"Old Dutch"}, ["odu"] = {"Odual"}, ["ofo"] = {"Ofo"}, ["ofs"] = {"Old Frisian"}, ["ofu"] = {"Efutop"}, ["ogb"] = {"Ogbia"}, ["ogc"] = {"Ogbah"}, ["oge"] = {"Old Georgian"}, ["ogg"] = {"Ogbogolo"}, ["ogo"] = {"Khana"}, ["ogu"] = {"Ogbronuagum"}, ["oht"] = {"Old Hittite"}, ["ohu"] = {"Old Hungarian"}, ["oia"] = {"Oirata"}, ["oie"] = {"Okolie"}, ["oin"] = {"Inebu One"}, ["ojb"] = {"Northwestern Ojibwa"}, ["ojc"] = {"Central Ojibwa"}, ["ojg"] = {"Eastern Ojibwa"}, ["ojp"] = {"Old Japanese"}, ["ojs"] = {"Severn Ojibwa"}, ["ojv"] = {"Ontong Java"}, ["ojw"] = {"Western Ojibwa"}, ["oka"] = {"Okanagan"}, ["okb"] = {"Okobo"}, ["okc"] = {"Kobo"}, ["okd"] = {"Okodia"}, ["oke"] = {"Okpe (Southwestern Edo)"}, ["okg"] = {"Koko Babangk"}, ["okh"] = {"Koresh-e Rostam"}, ["oki"] = {"Okiek"}, ["okj"] = {"Oko-Juwoi"}, ["okk"] = {"Kwamtim One"}, ["okl"] = {"Old Kentish Sign Language"}, ["okm"] = {"Middle Korean (10th-16th cent.)"}, ["okn"] = {"Oki-No-Erabu"}, ["oko"] = {"Old Korean (3rd-9th cent.)"}, ["okr"] = {"Kirike"}, ["oks"] = {"Oko-Eni-Osayen"}, ["oku"] = {"Oku"}, ["okv"] = {"Orokaiva"}, ["okx"] = {"Okpe (Northwestern Edo)"}, ["okz"] = {"Old Khmer"}, ["ola"] = {"Walungge"}, ["olb"] = {"Oli-Bodiman"}, ["old"] = {"Mochi"}, ["ole"] = {"Olekha"}, ["olk"] = {"Olkol"}, ["olm"] = {"Oloma"}, ["olo"] = {"Livvi"}, ["olr"] = {"Olrat"}, ["olt"] = {"Old Lithuanian"}, ["olu"] = {"Kuvale"}, ["oma"] = {"Omaha-Ponca"}, ["omb"] = {"East Ambae"}, ["omc"] = {"Mochica"}, ["omg"] = {"Omagua"}, ["omi"] = {"Omi"}, ["omk"] = {"Omok"}, ["oml"] = {"Ombo"}, ["omn"] = {"Minoan"}, ["omo"] = {"Utarmbung"}, ["omp"] = {"Old Manipuri"}, ["omq"] = {"Oto-Manguean languages"}, ["omr"] = {"Old Marathi"}, ["omt"] = {"Omotik"}, ["omu"] = {"Omurano"}, ["omv"] = {"Omotic languages"}, ["omw"] = {"South Tairora"}, ["omx"] = {"Old Mon"}, ["omy"] = {"Old Malay"}, ["ona"] = {"Ona"}, ["onb"] = {"Lingao"}, ["one"] = {"Oneida"}, ["ong"] = {"Olo"}, ["oni"] = {"Onin"}, ["onj"] = {"Onjob"}, ["onk"] = {"Kabore One"}, ["onn"] = {"Onobasulu"}, ["ono"] = {"Onondaga"}, ["onp"] = {"Sartang"}, ["onr"] = {"Northern One"}, ["ons"] = {"Ono"}, ["ont"] = {"Ontenu"}, ["onu"] = {"Unua"}, ["onw"] = {"Old Nubian"}, ["onx"] = {"Onin Based Pidgin"}, ["ood"] = {"Tohono O'odham"}, ["oog"] = {"Ong"}, ["oon"] = {"Önge"}, ["oor"] = {"Oorlams"}, ["oos"] = {"Old Ossetic"}, ["opa"] = {"Okpamheri"}, ["opk"] = {"Kopkaka"}, ["opm"] = {"Oksapmin"}, ["opo"] = {"Opao"}, ["opt"] = {"Opata"}, ["opy"] = {"Ofayé"}, ["ora"] = {"Oroha"}, ["orc"] = {"Orma"}, ["ore"] = {"Orejón"}, ["org"] = {"Oring"}, ["orh"] = {"Oroqen"}, ["orn"] = {"Orang Kanaq"}, ["oro"] = {"Orokolo"}, ["orr"] = {"Oruma"}, ["ors"] = {"Orang Seletar"}, ["ort"] = {"Adivasi Oriya"}, ["oru"] = {"Ormuri"}, ["orv"] = {"Old Russian"}, ["orw"] = {"Oro Win"}, ["orx"] = {"Oro"}, ["ory"] = {"Odia (individual language)", "Oriya (individual language)"}, ["orz"] = {"Ormu"}, ["osa"] = {"Osage"}, ["osc"] = {"Oscan"}, ["osd"] = {"Digor Ossetic", "Digor", "Digor Ossetian"}, ["osi"] = {"Osing"}, ["osn"] = {"Old Sundanese"}, ["oso"] = {"Ososo"}, ["osp"] = {"Old Spanish"}, ["ost"] = {"Osatu"}, ["osu"] = {"Southern One"}, ["osx"] = {"Old Saxon"}, ["ota"] = {"Ottoman Turkish (1500-1928)"}, ["otb"] = {"Old Tibetan"}, ["otd"] = {"Ot Danum"}, ["ote"] = {"Mezquital Otomi"}, ["oti"] = {"Oti"}, ["otk"] = {"Old Turkish"}, ["otl"] = {"Tilapa Otomi"}, ["otm"] = {"Eastern Highland Otomi"}, ["otn"] = {"Tenango Otomi"}, ["oto"] = {"Otomian languages"}, ["otq"] = {"Querétaro Otomi"}, ["otr"] = {"Otoro"}, ["ots"] = {"Estado de México Otomi"}, ["ott"] = {"Temoaya Otomi"}, ["otu"] = {"Otuke"}, ["otw"] = {"Ottawa"}, ["otx"] = {"Texcatepec Otomi"}, ["oty"] = {"Old Tamil"}, ["otz"] = {"Ixtenco Otomi"}, ["oua"] = {"Tagargrent"}, ["oub"] = {"Glio-Oubi"}, ["oue"] = {"Oune"}, ["oui"] = {"Old Uighur"}, ["oum"] = {"Ouma"}, ["ovd"] = {"Elfdalian", "Övdalian"}, ["owi"] = {"Owiniga"}, ["owl"] = {"Old Welsh"}, ["oyb"] = {"Oy"}, ["oyd"] = {"Oyda"}, ["oym"] = {"Wayampi"}, ["oyy"] = {"Oya'oya"}, ["ozm"] = {"Koonzime"}, ["paa"] = {"Papuan languages"}, ["pab"] = {"Parecís"}, ["pac"] = {"Pacoh"}, ["pad"] = {"Paumarí"}, ["pae"] = {"Pagibete"}, ["paf"] = {"Paranawát"}, ["pag"] = {"Pangasinan"}, ["pah"] = {"Tenharim"}, ["pai"] = {"Pe"}, ["pak"] = {"Parakanã"}, ["pal"] = {"Pahlavi"}, ["pam"] = {"Pampanga", "Kapampangan"}, ["pao"] = {"Northern Paiute"}, ["pap"] = {"Papiamento"}, ["paq"] = {"Parya"}, ["par"] = {"Panamint", "Timbisha"}, ["pas"] = {"Papasena"}, ["pau"] = {"Palauan"}, ["pav"] = {"Pakaásnovos"}, ["paw"] = {"Pawnee"}, ["pax"] = {"Pankararé"}, ["pay"] = {"Pech"}, ["paz"] = {"Pankararú"}, ["pbb"] = {"Páez"}, ["pbc"] = {"Patamona"}, ["pbe"] = {"Mezontla Popoloca"}, ["pbf"] = {"Coyotepec Popoloca"}, ["pbg"] = {"Paraujano"}, ["pbh"] = {"E'ñapa Woromaipu"}, ["pbi"] = {"Parkwa"}, ["pbl"] = {"Mak (Nigeria)"}, ["pbm"] = {"Puebla Mazatec"}, ["pbn"] = {"Kpasam"}, ["pbo"] = {"Papel"}, ["pbp"] = {"Badyara"}, ["pbr"] = {"Pangwa"}, ["pbs"] = {"Central Pame"}, ["pbt"] = {"Southern Pashto"}, ["pbu"] = {"Northern Pashto"}, ["pbv"] = {"Pnar"}, ["pby"] = {"Pyu (Papua New Guinea)"}, ["pca"] = {"Santa Inés Ahuatempan Popoloca"}, ["pcb"] = {"Pear"}, ["pcc"] = {"Bouyei"}, ["pcd"] = {"Picard"}, ["pce"] = {"Ruching Palaung"}, ["pcf"] = {"Paliyan"}, ["pcg"] = {"Paniya"}, ["pch"] = {"Pardhan"}, ["pci"] = {"Duruwa"}, ["pcj"] = {"Parenga"}, ["pck"] = {"Paite Chin"}, ["pcl"] = {"Pardhi"}, ["pcm"] = {"Nigerian Pidgin"}, ["pcn"] = {"Piti"}, ["pcp"] = {"Pacahuara"}, ["pcw"] = {"Pyapun"}, ["pda"] = {"Anam"}, ["pdc"] = {"Pennsylvania German"}, ["pdi"] = {"Pa Di"}, ["pdn"] = {"Podena", "Fedan"}, ["pdo"] = {"Padoe"}, ["pdt"] = {"Plautdietsch"}, ["pdu"] = {"Kayan"}, ["pea"] = {"Peranakan Indonesian"}, ["peb"] = {"Eastern Pomo"}, ["ped"] = {"Mala (Papua New Guinea)"}, ["pee"] = {"Taje"}, ["pef"] = {"Northeastern Pomo"}, ["peg"] = {"Pengo"}, ["peh"] = {"Bonan"}, ["pei"] = {"Chichimeca-Jonaz"}, ["pej"] = {"Northern Pomo"}, ["pek"] = {"Penchal"}, ["pel"] = {"Pekal"}, ["pem"] = {"Phende"}, ["peo"] = {"Old Persian (ca. 600-400 B.C.)"}, ["pep"] = {"Kunja"}, ["peq"] = {"Southern Pomo"}, ["pes"] = {"Iranian Persian"}, ["pev"] = {"Pémono"}, ["pex"] = {"Petats"}, ["pey"] = {"Petjo"}, ["pez"] = {"Eastern Penan"}, ["pfa"] = {"Pááfang"}, ["pfe"] = {"Pere"}, ["pfl"] = {"Pfaelzisch"}, ["pga"] = {"Sudanese Creole Arabic"}, ["pgd"] = {"Gāndhārī"}, ["pgg"] = {"Pangwali"}, ["pgi"] = {"Pagi"}, ["pgk"] = {"Rerep"}, ["pgl"] = {"Primitive Irish"}, ["pgn"] = {"Paelignian"}, ["pgs"] = {"Pangseng"}, ["pgu"] = {"Pagu"}, ["pgz"] = {"Papua New Guinean Sign Language"}, ["pha"] = {"Pa-Hng"}, ["phd"] = {"Phudagi"}, ["phg"] = {"Phuong"}, ["phh"] = {"Phukha"}, ["phi"] = {"Philippine languages"}, ["phj"] = {"Pahari"}, ["phk"] = {"Phake"}, ["phl"] = {"Phalura", "Palula"}, ["phm"] = {"Phimbi"}, ["phn"] = {"Phoenician"}, ["pho"] = {"Phunoi"}, ["phq"] = {"Phana'"}, ["phr"] = {"Pahari-Potwari"}, ["pht"] = {"Phu Thai"}, ["phu"] = {"Phuan"}, ["phv"] = {"Pahlavani"}, ["phw"] = {"Phangduwali"}, ["pia"] = {"Pima Bajo"}, ["pib"] = {"Yine"}, ["pic"] = {"Pinji"}, ["pid"] = {"Piaroa"}, ["pie"] = {"Piro"}, ["pif"] = {"Pingelapese"}, ["pig"] = {"Pisabo"}, ["pih"] = {"Pitcairn-Norfolk"}, ["pij"] = {"Pijao"}, ["pil"] = {"Yom"}, ["pim"] = {"Powhatan"}, ["pin"] = {"Piame"}, ["pio"] = {"Piapoco"}, ["pip"] = {"Pero"}, ["pir"] = {"Piratapuyo"}, ["pis"] = {"Pijin"}, ["pit"] = {"Pitta Pitta"}, ["piu"] = {"Pintupi-Luritja"}, ["piv"] = {"Pileni", "Vaeakau-Taumako"}, ["piw"] = {"Pimbwe"}, ["pix"] = {"Piu"}, ["piy"] = {"Piya-Kwonci"}, ["piz"] = {"Pije"}, ["pjt"] = {"Pitjantjatjara"}, ["pka"] = {"Ardhamāgadhī Prākrit"}, ["pkb"] = {"Pokomo", "Kipfokomo"}, ["pkc"] = {"Paekche"}, ["pkg"] = {"Pak-Tong"}, ["pkh"] = {"Pankhu"}, ["pkn"] = {"Pakanha"}, ["pko"] = {"Pökoot"}, ["pkp"] = {"Pukapuka"}, ["pkr"] = {"Attapady Kurumba"}, ["pks"] = {"Pakistan Sign Language"}, ["pkt"] = {"Maleng"}, ["pku"] = {"Paku"}, ["pla"] = {"Miani"}, ["plb"] = {"Polonombauk"}, ["plc"] = {"Central Palawano"}, ["pld"] = {"Polari"}, ["ple"] = {"Palu'e"}, ["plf"] = {"Central Malayo-Polynesian languages"}, ["plg"] = {"Pilagá"}, ["plh"] = {"Paulohi"}, ["plk"] = {"Kohistani Shina"}, ["pll"] = {"Shwe Palaung"}, ["pln"] = {"Palenquero"}, ["plo"] = {"Oluta Popoluca"}, ["plq"] = {"Palaic"}, ["plr"] = {"Palaka Senoufo"}, ["pls"] = {"San Marcos Tlacoyalco Popoloca", "San Marcos Tlalcoyalco Popoloca"}, ["plt"] = {"Plateau Malagasy"}, ["plu"] = {"Palikúr"}, ["plv"] = {"Southwest Palawano"}, ["plw"] = {"Brooke's Point Palawano"}, ["ply"] = {"Bolyu"}, ["plz"] = {"Paluan"}, ["pma"] = {"Paama"}, ["pmb"] = {"Pambia"}, ["pmd"] = {"Pallanganmiddang"}, ["pme"] = {"Pwaamei"}, ["pmf"] = {"Pamona"}, ["pmh"] = {"Māhārāṣṭri Prākrit"}, ["pmi"] = {"Northern Pumi"}, ["pmj"] = {"Southern Pumi"}, ["pml"] = {"Lingua Franca"}, ["pmm"] = {"Pomo"}, ["pmn"] = {"Pam"}, ["pmo"] = {"Pom"}, ["pmq"] = {"Northern Pame"}, ["pmr"] = {"Paynamar"}, ["pms"] = {"Piemontese"}, ["pmt"] = {"Tuamotuan"}, ["pmw"] = {"Plains Miwok"}, ["pmx"] = {"Poumei Naga"}, ["pmy"] = {"Papuan Malay"}, ["pmz"] = {"Southern Pame"}, ["pna"] = {"Punan Bah-Biau"}, ["pnb"] = {"Western Panjabi"}, ["pnc"] = {"Pannei"}, ["pnd"] = {"Mpinda"}, ["pne"] = {"Western Penan"}, ["png"] = {"Pangu", "Pongu"}, ["pnh"] = {"Penrhyn"}, ["pni"] = {"Aoheng"}, ["pnj"] = {"Pinjarup"}, ["pnk"] = {"Paunaka"}, ["pnl"] = {"Paleni"}, ["pnm"] = {"Punan Batu 1"}, ["pnn"] = {"Pinai-Hagahai"}, ["pno"] = {"Panobo"}, ["pnp"] = {"Pancana"}, ["pnq"] = {"Pana (Burkina Faso)"}, ["pnr"] = {"Panim"}, ["pns"] = {"Ponosakan"}, ["pnt"] = {"Pontic"}, ["pnu"] = {"Jiongnai Bunu"}, ["pnv"] = {"Pinigura"}, ["pnw"] = {"Banyjima", "Panytyima"}, ["pnx"] = {"Phong-Kniang"}, ["pny"] = {"Pinyin"}, ["pnz"] = {"Pana (Central African Republic)"}, ["poc"] = {"Poqomam"}, ["poe"] = {"San Juan Atzingo Popoloca"}, ["pof"] = {"Poke"}, ["pog"] = {"Potiguára"}, ["poh"] = {"Poqomchi'"}, ["poi"] = {"Highland Popoluca"}, ["pok"] = {"Pokangá"}, ["pom"] = {"Southeastern Pomo"}, ["pon"] = {"Pohnpeian"}, ["poo"] = {"Central Pomo"}, ["pop"] = {"Pwapwâ"}, ["poq"] = {"Texistepec Popoluca"}, ["pos"] = {"Sayula Popoluca"}, ["pot"] = {"Potawatomi"}, ["pov"] = {"Upper Guinea Crioulo"}, ["pow"] = {"San Felipe Otlaltepec Popoloca"}, ["pox"] = {"Polabian"}, ["poy"] = {"Pogolo"}, ["poz"] = {"Malayo-Polynesian languages"}, ["ppe"] = {"Papi"}, ["ppi"] = {"Paipai"}, ["ppk"] = {"Uma"}, ["ppl"] = {"Pipil", "Nicarao"}, ["ppm"] = {"Papuma"}, ["ppn"] = {"Papapana"}, ["ppo"] = {"Folopa"}, ["ppp"] = {"Pelende"}, ["ppq"] = {"Pei"}, ["pps"] = {"San Luís Temalacayuca Popoloca"}, ["ppt"] = {"Pare"}, ["ppu"] = {"Papora"}, ["pqa"] = {"Pa'a"}, ["pqe"] = {"Eastern Malayo-Polynesian languages"}, ["pqm"] = {"Malecite-Passamaquoddy"}, ["pqw"] = {"Western Malayo-Polynesian languages"}, ["pra"] = {"Prakrit languages"}, ["prc"] = {"Parachi"}, ["prd"] = {"Parsi-Dari"}, ["pre"] = {"Principense"}, ["prf"] = {"Paranan"}, ["prg"] = {"Prussian"}, ["prh"] = {"Porohanon"}, ["pri"] = {"Paicî"}, ["prk"] = {"Parauk"}, ["prl"] = {"Peruvian Sign Language"}, ["prm"] = {"Kibiri"}, ["prn"] = {"Prasuni"}, ["pro"] = {"Old Provençal (to 1500)", "Old Occitan (to 1500)"}, ["prq"] = {"Ashéninka Perené"}, ["prr"] = {"Puri"}, ["prs"] = {"Dari", "Afghan Persian"}, ["prt"] = {"Phai"}, ["pru"] = {"Puragi"}, ["prw"] = {"Parawen"}, ["prx"] = {"Purik"}, ["prz"] = {"Providencia Sign Language"}, ["psa"] = {"Asue Awyu"}, ["psc"] = {"Iranian Sign Language", "Persian Sign Language"}, ["psd"] = {"Plains Indian Sign Language"}, ["pse"] = {"Central Malay"}, ["psg"] = {"Penang Sign Language"}, ["psh"] = {"Southwest Pashai", "Southwest Pashayi"}, ["psi"] = {"Southeast Pashai", "Southeast Pashayi"}, ["psl"] = {"Puerto Rican Sign Language"}, ["psm"] = {"Pauserna"}, ["psn"] = {"Panasuan"}, ["pso"] = {"Polish Sign Language"}, ["psp"] = {"Philippine Sign Language"}, ["psq"] = {"Pasi"}, ["psr"] = {"Portuguese Sign Language"}, ["pss"] = {"Kaulong"}, ["pst"] = {"Central Pashto"}, ["psu"] = {"Sauraseni Prākrit"}, ["psw"] = {"Port Sandwich"}, ["psy"] = {"Piscataway"}, ["pta"] = {"Pai Tavytera"}, ["pth"] = {"Pataxó Hã-Ha-Hãe"}, ["pti"] = {"Pindiini", "Wangkatha"}, ["ptn"] = {"Patani"}, ["pto"] = {"Zo'é"}, ["ptp"] = {"Patep"}, ["ptq"] = {"Pattapu"}, ["ptr"] = {"Piamatsina"}, ["ptt"] = {"Enrekang"}, ["ptu"] = {"Bambam"}, ["ptv"] = {"Port Vato"}, ["ptw"] = {"Pentlatch"}, ["pty"] = {"Pathiya"}, ["pua"] = {"Western Highland Purepecha"}, ["pub"] = {"Purum"}, ["puc"] = {"Punan Merap"}, ["pud"] = {"Punan Aput"}, ["pue"] = {"Puelche"}, ["puf"] = {"Punan Merah"}, ["pug"] = {"Phuie"}, ["pui"] = {"Puinave"}, ["puj"] = {"Punan Tubu"}, ["pum"] = {"Puma"}, ["puo"] = {"Puoc"}, ["pup"] = {"Pulabu"}, ["puq"] = {"Puquina"}, ["pur"] = {"Puruborá"}, ["put"] = {"Putoh"}, ["puu"] = {"Punu"}, ["puw"] = {"Puluwatese"}, ["pux"] = {"Puare"}, ["puy"] = {"Purisimeño"}, ["pwa"] = {"Pawaia"}, ["pwb"] = {"Panawa"}, ["pwg"] = {"Gapapaiwa"}, ["pwi"] = {"Patwin"}, ["pwm"] = {"Molbog"}, ["pwn"] = {"Paiwan"}, ["pwo"] = {"Pwo Western Karen"}, ["pwr"] = {"Powari"}, ["pww"] = {"Pwo Northern Karen"}, ["pxm"] = {"Quetzaltepec Mixe"}, ["pye"] = {"Pye Krumen"}, ["pym"] = {"Fyam"}, ["pyn"] = {"Poyanáwa"}, ["pys"] = {"Paraguayan Sign Language", "Lengua de Señas del Paraguay"}, ["pyu"] = {"Puyuma"}, ["pyx"] = {"Pyu (Myanmar)"}, ["pyy"] = {"Pyen"}, ["pze"] = {"Pesse"}, ["pzh"] = {"Pazeh"}, ["pzn"] = {"Jejara Naga", "Para Naga"}, ["qua"] = {"Quapaw"}, ["qub"] = {"Huallaga Huánuco Quechua"}, ["quc"] = {"K'iche'", "Quiché"}, ["qud"] = {"Calderón Highland Quichua"}, ["quf"] = {"Lambayeque Quechua"}, ["qug"] = {"Chimborazo Highland Quichua"}, ["quh"] = {"South Bolivian Quechua"}, ["qui"] = {"Quileute"}, ["quk"] = {"Chachapoyas Quechua"}, ["qul"] = {"North Bolivian Quechua"}, ["qum"] = {"Sipacapense"}, ["qun"] = {"Quinault"}, ["qup"] = {"Southern Pastaza Quechua"}, ["quq"] = {"Quinqui"}, ["qur"] = {"Yanahuanca Pasco Quechua"}, ["qus"] = {"Santiago del Estero Quichua"}, ["quv"] = {"Sacapulteco"}, ["quw"] = {"Tena Lowland Quichua"}, ["qux"] = {"Yauyos Quechua"}, ["quy"] = {"Ayacucho Quechua"}, ["quz"] = {"Cusco Quechua"}, ["qva"] = {"Ambo-Pasco Quechua"}, ["qvc"] = {"Cajamarca Quechua"}, ["qve"] = {"Eastern Apurímac Quechua"}, ["qvh"] = {"Huamalíes-Dos de Mayo Huánuco Quechua"}, ["qvi"] = {"Imbabura Highland Quichua"}, ["qvj"] = {"Loja Highland Quichua"}, ["qvl"] = {"Cajatambo North Lima Quechua"}, ["qvm"] = {"Margos-Yarowilca-Lauricocha Quechua"}, ["qvn"] = {"North Junín Quechua"}, ["qvo"] = {"Napo Lowland Quechua"}, ["qvp"] = {"Pacaraos Quechua"}, ["qvs"] = {"San Martín Quechua"}, ["qvw"] = {"Huaylla Wanca Quechua"}, ["qvy"] = {"Queyu"}, ["qvz"] = {"Northern Pastaza Quichua"}, ["qwa"] = {"Corongo Ancash Quechua"}, ["qwc"] = {"Classical Quechua"}, ["qwe"] = {"Quechuan (family)"}, ["qwh"] = {"Huaylas Ancash Quechua"}, ["qwm"] = {"Kuman (Russia)"}, ["qws"] = {"Sihuas Ancash Quechua"}, ["qwt"] = {"Kwalhioqua-Tlatskanai"}, ["qxa"] = {"Chiquián Ancash Quechua"}, ["qxc"] = {"Chincha Quechua"}, ["qxh"] = {"Panao Huánuco Quechua"}, ["qxl"] = {"Salasaca Highland Quichua"}, ["qxn"] = {"Northern Conchucos Ancash Quechua"}, ["qxo"] = {"Southern Conchucos Ancash Quechua"}, ["qxp"] = {"Puno Quechua"}, ["qxq"] = {"Qashqa'i"}, ["qxr"] = {"Cañar Highland Quichua"}, ["qxs"] = {"Southern Qiang"}, ["qxt"] = {"Santa Ana de Tusi Pasco Quechua"}, ["qxu"] = {"Arequipa-La Unión Quechua"}, ["qxw"] = {"Jauja Wanca Quechua"}, ["qya"] = {"Quenya"}, ["qyp"] = {"Quiripi"}, ["raa"] = {"Dungmali"}, ["rab"] = {"Camling"}, ["rac"] = {"Rasawa"}, ["rad"] = {"Rade"}, ["raf"] = {"Western Meohang"}, ["rag"] = {"Logooli", "Lulogooli"}, ["rah"] = {"Rabha"}, ["rai"] = {"Ramoaaina"}, ["raj"] = {"Rajasthani"}, ["rak"] = {"Tulu-Bohuai"}, ["ral"] = {"Ralte"}, ["ram"] = {"Canela"}, ["ran"] = {"Riantana"}, ["rao"] = {"Rao"}, ["rap"] = {"Rapanui"}, ["raq"] = {"Saam"}, ["rar"] = {"Rarotongan", "Cook Islands Maori"}, ["ras"] = {"Tegali"}, ["rat"] = {"Razajerdi"}, ["rau"] = {"Raute"}, ["rav"] = {"Sampang"}, ["raw"] = {"Rawang"}, ["rax"] = {"Rang"}, ["ray"] = {"Rapa"}, ["raz"] = {"Rahambuu"}, ["rbb"] = {"Rumai Palaung"}, ["rbk"] = {"Northern Bontok"}, ["rbl"] = {"Miraya Bikol"}, ["rbp"] = {"Barababaraba"}, ["rcf"] = {"Réunion Creole French"}, ["rdb"] = {"Rudbari"}, ["rea"] = {"Rerau"}, ["reb"] = {"Rembong"}, ["ree"] = {"Rejang Kayan"}, ["reg"] = {"Kara (Tanzania)"}, ["rei"] = {"Reli"}, ["rej"] = {"Rejang"}, ["rel"] = {"Rendille"}, ["rem"] = {"Remo"}, ["ren"] = {"Rengao"}, ["rer"] = {"Rer Bare"}, ["res"] = {"Reshe"}, ["ret"] = {"Retta"}, ["rey"] = {"Reyesano"}, ["rga"] = {"Roria"}, ["rge"] = {"Romano-Greek"}, ["rgk"] = {"Rangkas"}, ["rgn"] = {"Romagnol"}, ["rgr"] = {"Resígaro"}, ["rgs"] = {"Southern Roglai"}, ["rgu"] = {"Ringgou"}, ["rhg"] = {"Rohingya"}, ["rhp"] = {"Yahang"}, ["ria"] = {"Riang (India)"}, ["rib"] = {"Bribri Sign Language"}, ["rif"] = {"Tarifit"}, ["ril"] = {"Riang Lang", "Riang (Myanmar)"}, ["rim"] = {"Nyaturu"}, ["rin"] = {"Nungu"}, ["rir"] = {"Ribun"}, ["rit"] = {"Ritharrngu"}, ["riu"] = {"Riung"}, ["rjg"] = {"Rajong"}, ["rji"] = {"Raji"}, ["rjs"] = {"Rajbanshi"}, ["rka"] = {"Kraol"}, ["rkb"] = {"Rikbaktsa"}, ["rkh"] = {"Rakahanga-Manihiki"}, ["rki"] = {"Rakhine"}, ["rkm"] = {"Marka"}, ["rkt"] = {"Rangpuri", "Kamta"}, ["rkw"] = {"Arakwal"}, ["rma"] = {"Rama"}, ["rmb"] = {"Rembarrnga"}, ["rmc"] = {"Carpathian Romani"}, ["rmd"] = {"Traveller Danish"}, ["rme"] = {"Angloromani"}, ["rmf"] = {"Kalo Finnish Romani"}, ["rmg"] = {"Traveller Norwegian"}, ["rmh"] = {"Murkim"}, ["rmi"] = {"Lomavren"}, ["rmk"] = {"Romkun"}, ["rml"] = {"Baltic Romani"}, ["rmm"] = {"Roma"}, ["rmn"] = {"Balkan Romani"}, ["rmo"] = {"Sinte Romani"}, ["rmp"] = {"Rempi"}, ["rmq"] = {"Caló"}, ["rms"] = {"Romanian Sign Language"}, ["rmt"] = {"Domari"}, ["rmu"] = {"Tavringer Romani"}, ["rmv"] = {"Romanova"}, ["rmw"] = {"Welsh Romani"}, ["rmx"] = {"Romam"}, ["rmy"] = {"Vlax Romani"}, ["rmz"] = {"Marma"}, ["rnb"] = {"Brunca Sign Language"}, ["rnd"] = {"Ruund"}, ["rng"] = {"Ronga"}, ["rnl"] = {"Ranglong"}, ["rnn"] = {"Roon"}, ["rnp"] = {"Rongpo"}, ["rnr"] = {"Nari Nari"}, ["rnw"] = {"Rungwa"}, ["roa"] = {"Romance languages"}, ["rob"] = {"Tae'"}, ["roc"] = {"Cacgia Roglai"}, ["rod"] = {"Rogo"}, ["roe"] = {"Ronji"}, ["rof"] = {"Rombo"}, ["rog"] = {"Northern Roglai"}, ["rol"] = {"Romblomanon"}, ["rom"] = {"Romany"}, ["roo"] = {"Rotokas"}, ["rop"] = {"Kriol"}, ["ror"] = {"Rongga"}, ["rou"] = {"Runga"}, ["row"] = {"Dela-Oenale"}, ["rpn"] = {"Repanbitip"}, ["rpt"] = {"Rapting"}, ["rri"] = {"Ririo"}, ["rrm"] = {"Moriori"}, ["rro"] = {"Waima"}, ["rrt"] = {"Arritinngithigh"}, ["rsb"] = {"Romano-Serbian"}, ["rsk"] = {"Ruthenian", "Rusnak"}, ["rsl"] = {"Russian Sign Language"}, ["rsm"] = {"Miriwoong Sign Language"}, ["rsn"] = {"Rwandan Sign Language"}, ["rsw"] = {"Rishiwa"}, ["rtc"] = {"Rungtu Chin"}, ["rth"] = {"Ratahan"}, ["rtm"] = {"Rotuman"}, ["rts"] = {"Yurats"}, ["rtw"] = {"Rathawi"}, ["rub"] = {"Gungu"}, ["ruc"] = {"Ruuli"}, ["rue"] = {"Rusyn"}, ["ruf"] = {"Luguru"}, ["rug"] = {"Roviana"}, ["ruh"] = {"Ruga"}, ["rui"] = {"Rufiji"}, ["ruk"] = {"Che"}, ["ruo"] = {"Istro Romanian"}, ["rup"] = {"Macedo-Romanian", "Aromanian", "Arumanian"}, ["ruq"] = {"Megleno Romanian"}, ["rut"] = {"Rutul"}, ["ruu"] = {"Lanas Lobu"}, ["ruy"] = {"Mala (Nigeria)"}, ["ruz"] = {"Ruma"}, ["rwa"] = {"Rawo"}, ["rwk"] = {"Rwa"}, ["rwl"] = {"Ruwila"}, ["rwm"] = {"Amba (Uganda)"}, ["rwo"] = {"Rawa"}, ["rwr"] = {"Marwari (India)"}, ["rxd"] = {"Ngardi"}, ["rxw"] = {"Karuwali", "Garuwali"}, ["ryn"] = {"Northern Amami-Oshima"}, ["rys"] = {"Yaeyama"}, ["ryu"] = {"Central Okinawan"}, ["rzh"] = {"Rāziḥī"}, ["saa"] = {"Saba"}, ["sab"] = {"Buglere"}, ["sac"] = {"Meskwaki"}, ["sad"] = {"Sandawe"}, ["sae"] = {"Sabanê"}, ["saf"] = {"Safaliba"}, ["sah"] = {"Yakut"}, ["sai"] = {"South American Indian languages"}, ["saj"] = {"Sahu"}, ["sak"] = {"Sake"}, ["sal"] = {"Salishan languages"}, ["sam"] = {"Samaritan Aramaic"}, ["sao"] = {"Sause"}, ["saq"] = {"Samburu"}, ["sar"] = {"Saraveca"}, ["sas"] = {"Sasak"}, ["sat"] = {"Santali"}, ["sau"] = {"Saleman"}, ["sav"] = {"Saafi-Saafi"}, ["saw"] = {"Sawi"}, ["sax"] = {"Sa"}, ["say"] = {"Saya"}, ["saz"] = {"Saurashtra"}, ["sba"] = {"Ngambay"}, ["sbb"] = {"Simbo"}, ["sbc"] = {"Kele (Papua New Guinea)"}, ["sbd"] = {"Southern Samo"}, ["sbe"] = {"Saliba"}, ["sbf"] = {"Chabu", "Shabo"}, ["sbg"] = {"Seget"}, ["sbh"] = {"Sori-Harengan"}, ["sbi"] = {"Seti"}, ["sbj"] = {"Surbakhal"}, ["sbk"] = {"Safwa"}, ["sbl"] = {"Botolan Sambal"}, ["sbm"] = {"Sagala"}, ["sbn"] = {"Sindhi Bhil"}, ["sbo"] = {"Sabüm"}, ["sbp"] = {"Sangu (Tanzania)"}, ["sbq"] = {"Sileibi"}, ["sbr"] = {"Sembakung Murut"}, ["sbs"] = {"Subiya"}, ["sbt"] = {"Kimki"}, ["sbu"] = {"Stod Bhoti"}, ["sbv"] = {"Sabine"}, ["sbw"] = {"Simba"}, ["sbx"] = {"Seberuang"}, ["sby"] = {"Soli"}, ["sbz"] = {"Sara Kaba"}, ["scb"] = {"Chut"}, ["sce"] = {"Dongxiang"}, ["scf"] = {"San Miguel Creole French"}, ["scg"] = {"Sanggau"}, ["sch"] = {"Sakachep"}, ["sci"] = {"Sri Lankan Creole Malay"}, ["sck"] = {"Sadri"}, ["scl"] = {"Shina"}, ["scn"] = {"Sicilian"}, ["sco"] = {"Scots"}, ["scp"] = {"Hyolmo", "Helambu Sherpa"}, ["scq"] = {"Sa'och"}, ["scs"] = {"North Slavey"}, ["sct"] = {"Southern Katang"}, ["scu"] = {"Shumcho"}, ["scv"] = {"Sheni"}, ["scw"] = {"Sha"}, ["scx"] = {"Sicel"}, ["scz"] = {"Shaetlan"}, ["sda"] = {"Toraja-Sa'dan"}, ["sdb"] = {"Shabak"}, ["sdc"] = {"Sassarese Sardinian"}, ["sde"] = {"Surubu"}, ["sdf"] = {"Sarli"}, ["sdg"] = {"Savi"}, ["sdh"] = {"Southern Kurdish"}, ["sdj"] = {"Suundi"}, ["sdk"] = {"Sos Kundi"}, ["sdl"] = {"Saudi Arabian Sign Language"}, ["sdn"] = {"Gallurese Sardinian"}, ["sdo"] = {"Bukar-Sadung Bidayuh"}, ["sdp"] = {"Sherdukpen"}, ["sdq"] = {"Semandang"}, ["sdr"] = {"Oraon Sadri"}, ["sds"] = {"Sened"}, ["sdt"] = {"Shuadit"}, ["sdu"] = {"Sarudu"}, ["sdv"] = {"Eastern Sudanic languages"}, ["sdx"] = {"Sibu Melanau"}, ["sdz"] = {"Sallands"}, ["sea"] = {"Semai"}, ["seb"] = {"Shempire Senoufo"}, ["sec"] = {"Sechelt", "She shashishalhem"}, ["sed"] = {"Sedang"}, ["see"] = {"Seneca"}, ["sef"] = {"Cebaara Senoufo"}, ["seg"] = {"Segeju"}, ["seh"] = {"Sena"}, ["sei"] = {"Seri"}, ["sej"] = {"Sene"}, ["sek"] = {"Sekani"}, ["sel"] = {"Selkup"}, ["sem"] = {"Semitic languages"}, ["sen"] = {"Nanerigé Sénoufo"}, ["seo"] = {"Suarmin"}, ["sep"] = {"Sìcìté Sénoufo"}, ["seq"] = {"Senara Sénoufo"}, ["ser"] = {"Serrano"}, ["ses"] = {"Koyraboro Senni Songhai"}, ["set"] = {"Sentani"}, ["seu"] = {"Serui-Laut"}, ["sev"] = {"Nyarafolo Senoufo"}, ["sew"] = {"Sewa Bay"}, ["sey"] = {"Secoya"}, ["sez"] = {"Senthang Chin"}, ["sfb"] = {"Langue des signes de Belgique Francophone", "French Belgian Sign Language"}, ["sfe"] = {"Eastern Subanen"}, ["sfm"] = {"Small Flowery Miao"}, ["sfs"] = {"South African Sign Language"}, ["sfw"] = {"Sehwi"}, ["sga"] = {"Old Irish (to 900)"}, ["sgb"] = {"Mag-antsi Ayta"}, ["sgc"] = {"Kipsigis"}, ["sgd"] = {"Surigaonon"}, ["sge"] = {"Segai"}, ["sgg"] = {"Swiss-German Sign Language"}, ["sgh"] = {"Shughni"}, ["sgi"] = {"Suga"}, ["sgj"] = {"Surgujia"}, ["sgk"] = {"Sangkong"}, ["sgm"] = {"Singa"}, ["sgn"] = {"Sign languages"}, ["sgp"] = {"Singpho"}, ["sgr"] = {"Sangisari"}, ["sgs"] = {"Samogitian"}, ["sgt"] = {"Brokpake"}, ["sgu"] = {"Salas"}, ["sgw"] = {"Sebat Bet Gurage"}, ["sgx"] = {"Sierra Leone Sign Language"}, ["sgy"] = {"Sanglechi"}, ["sgz"] = {"Sursurunga"}, ["sha"] = {"Shall-Zwall"}, ["shb"] = {"Ninam"}, ["shc"] = {"Sonde"}, ["shd"] = {"Kundal Shahi"}, ["she"] = {"Sheko"}, ["shg"] = {"Shua"}, ["shh"] = {"Shoshoni"}, ["shi"] = {"Tachelhit"}, ["shj"] = {"Shatt"}, ["shk"] = {"Shilluk"}, ["shl"] = {"Shendu"}, ["shm"] = {"Shahrudi"}, ["shn"] = {"Shan"}, ["sho"] = {"Shanga"}, ["shp"] = {"Shipibo-Conibo"}, ["shq"] = {"Sala"}, ["shr"] = {"Shi"}, ["shs"] = {"Shuswap", "Secwepemctsín"}, ["sht"] = {"Shasta"}, ["shu"] = {"Chadian Arabic"}, ["shv"] = {"Shehri"}, ["shw"] = {"Shwai"}, ["shx"] = {"She"}, ["shy"] = {"Tachawit"}, ["shz"] = {"Syenara Senoufo"}, ["sia"] = {"Akkala Sami"}, ["sib"] = {"Sebop"}, ["sid"] = {"Sidamo"}, ["sie"] = {"Simaa"}, ["sif"] = {"Siamou"}, ["sig"] = {"Paasaal"}, ["sih"] = {"Zire", "Sîshëë"}, ["sii"] = {"Shom Peng"}, ["sij"] = {"Numbami"}, ["sik"] = {"Sikiana"}, ["sil"] = {"Tumulung Sisaala"}, ["sim"] = {"Mende (Papua New Guinea)"}, ["sio"] = {"Siouan languages"}, ["sip"] = {"Sikkimese"}, ["siq"] = {"Sonia"}, ["sir"] = {"Siri"}, ["sis"] = {"Siuslaw"}, ["sit"] = {"Sino-Tibetan languages"}, ["siu"] = {"Sinagen"}, ["siv"] = {"Sumariup"}, ["siw"] = {"Siwai"}, ["six"] = {"Sumau"}, ["siy"] = {"Sivandi"}, ["siz"] = {"Siwi"}, ["sja"] = {"Epena"}, ["sjb"] = {"Sajau Basap"}, ["sjc"] = {"Shaojiang Chinese"}, ["sjd"] = {"Kildin Sami"}, ["sje"] = {"Pite Sami"}, ["sjg"] = {"Assangori"}, ["sjk"] = {"Kemi Sami"}, ["sjl"] = {"Sajalong", "Miji"}, ["sjm"] = {"Mapun"}, ["sjn"] = {"Sindarin"}, ["sjo"] = {"Xibe"}, ["sjp"] = {"Surjapuri"}, ["sjr"] = {"Siar-Lak"}, ["sjs"] = {"Senhaja De Srair"}, ["sjt"] = {"Ter Sami"}, ["sju"] = {"Ume Sami"}, ["sjw"] = {"Shawnee"}, ["ska"] = {"Skagit"}, ["skb"] = {"Saek"}, ["skc"] = {"Ma Manda"}, ["skd"] = {"Southern Sierra Miwok"}, ["ske"] = {"Seke (Vanuatu)"}, ["skf"] = {"Sakirabiá"}, ["skg"] = {"Sakalava Malagasy"}, ["skh"] = {"Sikule"}, ["ski"] = {"Sika"}, ["skj"] = {"Seke (Nepal)"}, ["skm"] = {"Kutong"}, ["skn"] = {"Kolibugan Subanon"}, ["sko"] = {"Seko Tengah"}, ["skp"] = {"Sekapan"}, ["skq"] = {"Sininkere"}, ["skr"] = {"Saraiki", "Seraiki"}, ["sks"] = {"Maia"}, ["skt"] = {"Sakata"}, ["sku"] = {"Sakao"}, ["skv"] = {"Skou"}, ["skw"] = {"Skepi Creole Dutch"}, ["skx"] = {"Seko Padang"}, ["sky"] = {"Sikaiana"}, ["skz"] = {"Sekar"}, ["sla"] = {"Slavic languages"}, ["slc"] = {"Sáliba"}, ["sld"] = {"Sissala"}, ["sle"] = {"Sholaga"}, ["slf"] = {"Swiss-Italian Sign Language"}, ["slg"] = {"Selungai Murut"}, ["slh"] = {"Southern Puget Sound Salish"}, ["sli"] = {"Lower Silesian"}, ["slj"] = {"Salumá"}, ["sll"] = {"Salt-Yui"}, ["slm"] = {"Pangutaran Sama"}, ["sln"] = {"Salinan"}, ["slp"] = {"Lamaholot"}, ["slr"] = {"Salar"}, ["sls"] = {"Singapore Sign Language"}, ["slt"] = {"Sila"}, ["slu"] = {"Selaru"}, ["slw"] = {"Sialum"}, ["slx"] = {"Salampasu"}, ["sly"] = {"Selayar"}, ["slz"] = {"Ma'ya"}, ["sma"] = {"Southern Sami"}, ["smb"] = {"Simbari"}, ["smc"] = {"Som"}, ["smf"] = {"Auwe"}, ["smg"] = {"Simbali"}, ["smh"] = {"Samei"}, ["smi"] = {"Sami languages"}, ["smj"] = {"Lule Sami"}, ["smk"] = {"Bolinao"}, ["sml"] = {"Central Sama"}, ["smm"] = {"Musasa"}, ["smn"] = {"Inari Sami"}, ["smp"] = {"Samaritan"}, ["smq"] = {"Samo"}, ["smr"] = {"Simeulue"}, ["sms"] = {"Skolt Sami"}, ["smt"] = {"Simte"}, ["smu"] = {"Somray"}, ["smv"] = {"Samvedi"}, ["smw"] = {"Sumbawa"}, ["smx"] = {"Samba"}, ["smy"] = {"Semnani"}, ["smz"] = {"Simeku"}, ["snc"] = {"Sinaugoro"}, ["sne"] = {"Bau Bidayuh"}, ["snf"] = {"Noon"}, ["sng"] = {"Sanga (Democratic Republic of Congo)"}, ["sni"] = {"Sensi"}, ["snj"] = {"Riverain Sango"}, ["snk"] = {"Soninke"}, ["snl"] = {"Sangil"}, ["snm"] = {"Southern Ma'di"}, ["snn"] = {"Siona"}, ["sno"] = {"Snohomish"}, ["snp"] = {"Siane"}, ["snq"] = {"Sangu (Gabon)"}, ["snr"] = {"Sihan"}, ["sns"] = {"South West Bay", "Nahavaq"}, ["snu"] = {"Senggi", "Viid"}, ["snv"] = {"Sa'ban"}, ["snw"] = {"Selee"}, ["snx"] = {"Sam"}, ["sny"] = {"Saniyo-Hiyewe"}, ["snz"] = {"Kou"}, ["soa"] = {"Thai Song"}, ["sob"] = {"Sobei"}, ["soc"] = {"So (Democratic Republic of Congo)"}, ["sod"] = {"Songoora"}, ["soe"] = {"Songomeno"}, ["sog"] = {"Sogdian"}, ["soh"] = {"Aka"}, ["soi"] = {"Sonha"}, ["soj"] = {"Soi"}, ["sok"] = {"Sokoro"}, ["sol"] = {"Solos"}, ["son"] = {"Songhai languages"}, ["soo"] = {"Songo"}, ["sop"] = {"Songe"}, ["soq"] = {"Kanasi"}, ["sor"] = {"Somrai"}, ["sos"] = {"Seeku"}, ["sou"] = {"Southern Thai"}, ["sov"] = {"Sonsorol"}, ["sow"] = {"Sowanda"}, ["sox"] = {"Swo"}, ["soy"] = {"Miyobe"}, ["soz"] = {"Temi"}, ["spb"] = {"Sepa (Indonesia)"}, ["spc"] = {"Sapé"}, ["spd"] = {"Saep"}, ["spe"] = {"Sepa (Papua New Guinea)"}, ["spg"] = {"Sian"}, ["spi"] = {"Saponi"}, ["spk"] = {"Sengo"}, ["spl"] = {"Selepet"}, ["spm"] = {"Akukem"}, ["spn"] = {"Sanapaná"}, ["spo"] = {"Spokane"}, ["spp"] = {"Supyire Senoufo"}, ["spq"] = {"Loreto-Ucayali Spanish"}, ["spr"] = {"Saparua"}, ["sps"] = {"Saposa"}, ["spt"] = {"Spiti Bhoti"}, ["spu"] = {"Sapuan"}, ["spv"] = {"Sambalpuri", "Kosli"}, ["spx"] = {"South Picene"}, ["spy"] = {"Sabaot"}, ["sqa"] = {"Shama-Sambuga"}, ["sqh"] = {"Shau"}, ["sqj"] = {"Albanian languages"}, ["sqk"] = {"Albanian Sign Language"}, ["sqm"] = {"Suma"}, ["sqn"] = {"Susquehannock"}, ["sqo"] = {"Sorkhei"}, ["sqq"] = {"Sou"}, ["sqr"] = {"Siculo Arabic"}, ["sqs"] = {"Sri Lankan Sign Language"}, ["sqt"] = {"Soqotri"}, ["squ"] = {"Squamish", "Sḵwx̱wú7mesh sníchim"}, ["sqx"] = {"Kufr Qassem Sign Language (KQSL)"}, ["sra"] = {"Saruga"}, ["srb"] = {"Sora"}, ["src"] = {"Logudorese Sardinian"}, ["sre"] = {"Sara"}, ["srf"] = {"Nafi"}, ["srg"] = {"Sulod"}, ["srh"] = {"Sarikoli"}, ["sri"] = {"Siriano"}, ["srk"] = {"Serudung Murut"}, ["srl"] = {"Isirawa"}, ["srm"] = {"Saramaccan"}, ["srn"] = {"Sranan Tongo"}, ["sro"] = {"Campidanese Sardinian"}, ["srq"] = {"Sirionó"}, ["srr"] = {"Serer"}, ["srs"] = {"Sarsi"}, ["srt"] = {"Sauri"}, ["sru"] = {"Suruí"}, ["srv"] = {"Southern Sorsoganon"}, ["srw"] = {"Serua"}, ["srx"] = {"Sirmauri"}, ["sry"] = {"Sera"}, ["srz"] = {"Shahmirzadi"}, ["ssa"] = {"Nilo-Saharan languages"}, ["ssb"] = {"Southern Sama"}, ["ssc"] = {"Suba-Simbiti"}, ["ssd"] = {"Siroi"}, ["sse"] = {"Balangingi", "Bangingih Sama"}, ["ssf"] = {"Thao"}, ["ssg"] = {"Seimat"}, ["ssh"] = {"Shihhi Arabic"}, ["ssi"] = {"Sansi"}, ["ssj"] = {"Sausi"}, ["ssk"] = {"Sunam"}, ["ssl"] = {"Western Sisaala"}, ["ssm"] = {"Semnam"}, ["ssn"] = {"Waata"}, ["sso"] = {"Sissano"}, ["ssp"] = {"Spanish Sign Language"}, ["ssq"] = {"So'a"}, ["ssr"] = {"Swiss-French Sign Language"}, ["sss"] = {"Sô"}, ["sst"] = {"Sinasina"}, ["ssu"] = {"Susuami"}, ["ssv"] = {"Shark Bay"}, ["ssx"] = {"Samberigi"}, ["ssy"] = {"Saho"}, ["ssz"] = {"Sengseng"}, ["sta"] = {"Settla"}, ["stb"] = {"Northern Subanen"}, ["std"] = {"Sentinel"}, ["ste"] = {"Liana-Seti"}, ["stf"] = {"Seta"}, ["stg"] = {"Trieng"}, ["sth"] = {"Shelta"}, ["sti"] = {"Bulo Stieng"}, ["stj"] = {"Matya Samo"}, ["stk"] = {"Arammba"}, ["stl"] = {"Stellingwerfs"}, ["stm"] = {"Setaman"}, ["stn"] = {"Owa"}, ["sto"] = {"Stoney"}, ["stp"] = {"Southeastern Tepehuan"}, ["stq"] = {"Saterfriesisch"}, ["str"] = {"Straits Salish"}, ["sts"] = {"Shumashti"}, ["stt"] = {"Budeh Stieng"}, ["stu"] = {"Samtao"}, ["stv"] = {"Silt'e"}, ["stw"] = {"Satawalese"}, ["sty"] = {"Siberian Tatar"}, ["sua"] = {"Sulka"}, ["sub"] = {"Suku"}, ["suc"] = {"Western Subanon"}, ["sue"] = {"Suena"}, ["sug"] = {"Suganga"}, ["sui"] = {"Suki"}, ["suj"] = {"Shubi"}, ["suk"] = {"Sukuma"}, ["suo"] = {"Bouni"}, ["suq"] = {"Tirmaga-Chai Suri", "Suri"}, ["sur"] = {"Mwaghavul"}, ["sus"] = {"Susu"}, ["sut"] = {"Subtiaba"}, ["suv"] = {"Puroik"}, ["suw"] = {"Sumbwa"}, ["sux"] = {"Sumerian"}, ["suy"] = {"Suyá"}, ["suz"] = {"Sunwar"}, ["sva"] = {"Svan"}, ["svb"] = {"Ulau-Suain"}, ["svc"] = {"Vincentian Creole English"}, ["sve"] = {"Serili"}, ["svk"] = {"Slovakian Sign Language"}, ["svm"] = {"Slavomolisano"}, ["svs"] = {"Savosavo"}, ["svx"] = {"Skalvian"}, ["swb"] = {"Maore Comorian"}, ["swc"] = {"Congo Swahili"}, ["swf"] = {"Sere"}, ["swg"] = {"Swabian"}, ["swh"] = {"Swahili (individual language)", "Kiswahili"}, ["swi"] = {"Sui"}, ["swj"] = {"Sira"}, ["swk"] = {"Malawi Sena"}, ["swl"] = {"Swedish Sign Language"}, ["swm"] = {"Samosa"}, ["swn"] = {"Sawknah"}, ["swo"] = {"Shanenawa"}, ["swp"] = {"Suau"}, ["swq"] = {"Sharwa"}, ["swr"] = {"Saweru"}, ["sws"] = {"Seluwasan"}, ["swt"] = {"Sawila"}, ["swu"] = {"Suwawa"}, ["swv"] = {"Shekhawati"}, ["sww"] = {"Sowa"}, ["swx"] = {"Suruahá"}, ["swy"] = {"Sarua"}, ["sxb"] = {"Suba"}, ["sxc"] = {"Sicanian"}, ["sxe"] = {"Sighu"}, ["sxg"] = {"Shuhi", "Shixing"}, ["sxk"] = {"Southern Kalapuya"}, ["sxl"] = {"Selian"}, ["sxm"] = {"Samre"}, ["sxn"] = {"Sangir"}, ["sxo"] = {"Sorothaptic"}, ["sxr"] = {"Saaroa"}, ["sxs"] = {"Sasaru"}, ["sxu"] = {"Upper Saxon"}, ["sxw"] = {"Saxwe Gbe"}, ["sya"] = {"Siang"}, ["syb"] = {"Central Subanen"}, ["syc"] = {"Classical Syriac"}, ["syd"] = {"Samoyedic languages"}, ["syi"] = {"Seki"}, ["syk"] = {"Sukur"}, ["syl"] = {"Sylheti"}, ["sym"] = {"Maya Samo"}, ["syn"] = {"Senaya"}, ["syo"] = {"Suoy"}, ["syr"] = {"Syriac"}, ["sys"] = {"Sinyar"}, ["syw"] = {"Kagate"}, ["syx"] = {"Samay"}, ["syy"] = {"Al-Sayyid Bedouin Sign Language"}, ["sza"] = {"Semelai"}, ["szb"] = {"Ngalum"}, ["szc"] = {"Semaq Beri"}, ["sze"] = {"Seze"}, ["szg"] = {"Sengele"}, ["szl"] = {"Silesian"}, ["szn"] = {"Sula"}, ["szp"] = {"Suabo"}, ["szs"] = {"Solomon Islands Sign Language"}, ["szv"] = {"Isu (Fako Division)"}, ["szw"] = {"Sawai"}, ["szy"] = {"Sakizaya"}, ["taa"] = {"Lower Tanana"}, ["tab"] = {"Tabassaran"}, ["tac"] = {"Lowland Tarahumara"}, ["tad"] = {"Tause"}, ["tae"] = {"Tariana"}, ["taf"] = {"Tapirapé"}, ["tag"] = {"Tagoi"}, ["tai"] = {"Tai languages"}, ["taj"] = {"Eastern Tamang"}, ["tak"] = {"Tala"}, ["tal"] = {"Tal"}, ["tan"] = {"Tangale"}, ["tao"] = {"Yami"}, ["tap"] = {"Taabwa"}, ["taq"] = {"Tamasheq"}, ["tar"] = {"Central Tarahumara"}, ["tas"] = {"Tay Boi"}, ["tau"] = {"Upper Tanana"}, ["tav"] = {"Tatuyo"}, ["taw"] = {"Tai"}, ["tax"] = {"Tamki"}, ["tay"] = {"Atayal"}, ["taz"] = {"Tocho"}, ["tba"] = {"Aikanã"}, ["tbc"] = {"Takia"}, ["tbd"] = {"Kaki Ae"}, ["tbe"] = {"Tanimbili"}, ["tbf"] = {"Mandara"}, ["tbg"] = {"North Tairora"}, ["tbh"] = {"Dharawal", "Thurawal"}, ["tbi"] = {"Gaam"}, ["tbj"] = {"Tiang"}, ["tbk"] = {"Calamian Tagbanwa"}, ["tbl"] = {"Tboli"}, ["tbm"] = {"Tagbu"}, ["tbn"] = {"Barro Negro Tunebo"}, ["tbo"] = {"Tawala"}, ["tbp"] = {"Taworta", "Diebroud"}, ["tbq"] = {"Tibeto-Burman languages"}, ["tbr"] = {"Tumtum"}, ["tbs"] = {"Tanguat"}, ["tbt"] = {"Tembo (Kitembo)"}, ["tbu"] = {"Tubar"}, ["tbv"] = {"Tobo"}, ["tbw"] = {"Tagbanwa"}, ["tbx"] = {"Kapin"}, ["tby"] = {"Tabaru"}, ["tbz"] = {"Ditammari"}, ["tca"] = {"Ticuna"}, ["tcb"] = {"Tanacross"}, ["tcc"] = {"Datooga"}, ["tcd"] = {"Tafi"}, ["tce"] = {"Southern Tutchone"}, ["tcf"] = {"Malinaltepec Me'phaa", "Malinaltepec Tlapanec"}, ["tcg"] = {"Tamagario"}, ["tch"] = {"Turks And Caicos Creole English"}, ["tci"] = {"Wára"}, ["tck"] = {"Tchitchege"}, ["tcl"] = {"Taman (Myanmar)"}, ["tcm"] = {"Tanahmerah"}, ["tcn"] = {"Tichurong"}, ["tco"] = {"Taungyo"}, ["tcp"] = {"Tawr Chin"}, ["tcq"] = {"Kaiy"}, ["tcs"] = {"Torres Strait Creole", "Yumplatok"}, ["tct"] = {"T'en"}, ["tcu"] = {"Southeastern Tarahumara"}, ["tcw"] = {"Tecpatlán Totonac"}, ["tcx"] = {"Toda"}, ["tcy"] = {"Tulu"}, ["tcz"] = {"Thado Chin"}, ["tda"] = {"Tagdal"}, ["tdb"] = {"Panchpargania"}, ["tdc"] = {"Emberá-Tadó"}, ["tdd"] = {"Tai Nüa"}, ["tde"] = {"Tiranige Diga Dogon"}, ["tdf"] = {"Talieng"}, ["tdg"] = {"Western Tamang"}, ["tdh"] = {"Thulung"}, ["tdi"] = {"Tomadino"}, ["tdj"] = {"Tajio"}, ["tdk"] = {"Tambas"}, ["tdl"] = {"Sur"}, ["tdm"] = {"Taruma"}, ["tdn"] = {"Tondano"}, ["tdo"] = {"Teme"}, ["tdq"] = {"Tita"}, ["tdr"] = {"Todrah"}, ["tds"] = {"Doutai"}, ["tdt"] = {"Tetun Dili"}, ["tdv"] = {"Toro"}, ["tdx"] = {"Tandroy-Mahafaly Malagasy"}, ["tdy"] = {"Tadyawan"}, ["tea"] = {"Temiar"}, ["teb"] = {"Tetete"}, ["tec"] = {"Terik"}, ["ted"] = {"Tepo Krumen"}, ["tee"] = {"Huehuetla Tepehua"}, ["tef"] = {"Teressa"}, ["teg"] = {"Teke-Tege"}, ["teh"] = {"Tehuelche"}, ["tei"] = {"Torricelli"}, ["tek"] = {"Ibali Teke"}, ["tem"] = {"Timne"}, ["ten"] = {"Tama (Colombia)"}, ["teo"] = {"Teso"}, ["tep"] = {"Tepecano"}, ["teq"] = {"Temein"}, ["ter"] = {"Tereno"}, ["tes"] = {"Tengger"}, ["tet"] = {"Tetum"}, ["teu"] = {"Soo"}, ["tev"] = {"Teor"}, ["tew"] = {"Tewa (USA)"}, ["tex"] = {"Tennet"}, ["tey"] = {"Tulishi"}, ["tez"] = {"Tetserret"}, ["tfi"] = {"Tofin Gbe"}, ["tfn"] = {"Tanaina"}, ["tfo"] = {"Tefaro"}, ["tfr"] = {"Teribe"}, ["tft"] = {"Ternate"}, ["tga"] = {"Sagalla"}, ["tgb"] = {"Tobilung"}, ["tgc"] = {"Tigak"}, ["tgd"] = {"Ciwogai"}, ["tge"] = {"Eastern Gorkha Tamang"}, ["tgf"] = {"Chalikha"}, ["tgh"] = {"Tobagonian Creole English"}, ["tgi"] = {"Lawunuia"}, ["tgj"] = {"Tagin"}, ["tgn"] = {"Tandaganon"}, ["tgo"] = {"Sudest"}, ["tgp"] = {"Tangoa"}, ["tgq"] = {"Tring"}, ["tgr"] = {"Tareng"}, ["tgs"] = {"Nume"}, ["tgt"] = {"Central Tagbanwa"}, ["tgu"] = {"Tanggu"}, ["tgv"] = {"Tingui-Boto"}, ["tgw"] = {"Tagwana Senoufo"}, ["tgx"] = {"Tagish"}, ["tgy"] = {"Togoyo"}, ["tgz"] = {"Tagalaka"}, ["thd"] = {"Kuuk Thaayorre", "Thayore"}, ["the"] = {"Chitwania Tharu"}, ["thf"] = {"Thangmi"}, ["thh"] = {"Northern Tarahumara"}, ["thi"] = {"Tai Long"}, ["thk"] = {"Tharaka", "Kitharaka"}, ["thl"] = {"Dangaura Tharu"}, ["thm"] = {"Aheu"}, ["thn"] = {"Thachanadan"}, ["thp"] = {"Thompson", "Nłeʔkepmxcín", "Thompson River Salish"}, ["thq"] = {"Kochila Tharu"}, ["thr"] = {"Rana Tharu"}, ["ths"] = {"Thakali"}, ["tht"] = {"Tahltan", "Tāłtān"}, ["thu"] = {"Thuri"}, ["thv"] = {"Tahaggart Tamahaq"}, ["thy"] = {"Tha"}, ["thz"] = {"Tayart Tamajeq"}, ["tia"] = {"Tidikelt Tamazight"}, ["tic"] = {"Tira"}, ["tif"] = {"Tifal"}, ["tig"] = {"Tigre"}, ["tih"] = {"Timugon Murut"}, ["tii"] = {"Tiene"}, ["tij"] = {"Tilung"}, ["tik"] = {"Tikar"}, ["til"] = {"Tillamook"}, ["tim"] = {"Timbe"}, ["tin"] = {"Tindi"}, ["tio"] = {"Teop"}, ["tip"] = {"Trimuris"}, ["tiq"] = {"Tiéfo"}, ["tis"] = {"Masadiit Itneg"}, ["tit"] = {"Tinigua"}, ["tiu"] = {"Adasen"}, ["tiv"] = {"Tiv"}, ["tiw"] = {"Tiwi"}, ["tix"] = {"Southern Tiwa"}, ["tiy"] = {"Tiruray"}, ["tiz"] = {"Tai Hongjin"}, ["tja"] = {"Tajuasohn"}, ["tjg"] = {"Tunjung"}, ["tji"] = {"Northern Tujia"}, ["tjj"] = {"Tjungundji"}, ["tjl"] = {"Tai Laing"}, ["tjm"] = {"Timucua"}, ["tjn"] = {"Tonjon"}, ["tjo"] = {"Temacine Tamazight"}, ["tjp"] = {"Tjupany"}, ["tjs"] = {"Southern Tujia"}, ["tju"] = {"Tjurruru"}, ["tjw"] = {"Djabwurrung"}, ["tka"] = {"Truká"}, ["tkb"] = {"Buksa"}, ["tkd"] = {"Tukudede"}, ["tke"] = {"Takwane"}, ["tkf"] = {"Tukumanféd"}, ["tkg"] = {"Tesaka Malagasy"}, ["tkl"] = {"Tokelau"}, ["tkm"] = {"Takelma"}, ["tkn"] = {"Toku-No-Shima"}, ["tkp"] = {"Tikopia"}, ["tkq"] = {"Tee"}, ["tkr"] = {"Tsakhur"}, ["tks"] = {"Takestani"}, ["tkt"] = {"Kathoriya Tharu"}, ["tku"] = {"Upper Necaxa Totonac"}, ["tkv"] = {"Mur Pano"}, ["tkw"] = {"Teanu"}, ["tkx"] = {"Tangko"}, ["tkz"] = {"Takua"}, ["tla"] = {"Southwestern Tepehuan"}, ["tlb"] = {"Tobelo"}, ["tlc"] = {"Yecuatla Totonac"}, ["tld"] = {"Talaud"}, ["tlf"] = {"Telefol"}, ["tlg"] = {"Tofanma"}, ["tlh"] = {"Klingon", "tlhIngan Hol"}, ["tli"] = {"Tlingit"}, ["tlj"] = {"Talinga-Bwisi"}, ["tlk"] = {"Taloki"}, ["tll"] = {"Tetela"}, ["tlm"] = {"Tolomako"}, ["tln"] = {"Talondo'"}, ["tlo"] = {"Talodi"}, ["tlp"] = {"Filomena Mata-Coahuitlán Totonac"}, ["tlq"] = {"Tai Loi"}, ["tlr"] = {"Talise"}, ["tls"] = {"Tambotalo"}, ["tlt"] = {"Sou Nama", "Teluti"}, ["tlu"] = {"Tulehu"}, ["tlv"] = {"Taliabu"}, ["tlx"] = {"Khehek"}, ["tly"] = {"Talysh"}, ["tma"] = {"Tama (Chad)"}, ["tmb"] = {"Katbol", "Avava"}, ["tmc"] = {"Tumak"}, ["tmd"] = {"Haruai"}, ["tme"] = {"Tremembé"}, ["tmf"] = {"Toba-Maskoy"}, ["tmg"] = {"Ternateño"}, ["tmh"] = {"Tamashek"}, ["tmi"] = {"Tutuba"}, ["tmj"] = {"Samarokena"}, ["tml"] = {"Tamnim Citak"}, ["tmm"] = {"Tai Thanh"}, ["tmn"] = {"Taman (Indonesia)"}, ["tmo"] = {"Temoq"}, ["tmq"] = {"Tumleo"}, ["tmr"] = {"Jewish Babylonian Aramaic (ca. 200-1200 CE)"}, ["tms"] = {"Tima"}, ["tmt"] = {"Tasmate"}, ["tmu"] = {"Iau"}, ["tmv"] = {"Tembo (Motembo)"}, ["tmw"] = {"Temuan"}, ["tmy"] = {"Tami"}, ["tmz"] = {"Tamanaku"}, ["tna"] = {"Tacana"}, ["tnb"] = {"Western Tunebo"}, ["tnc"] = {"Tanimuca-Retuarã"}, ["tnd"] = {"Angosturas Tunebo"}, ["tng"] = {"Tobanga"}, ["tnh"] = {"Maiani"}, ["tni"] = {"Tandia"}, ["tnk"] = {"Kwamera"}, ["tnl"] = {"Lenakel"}, ["tnm"] = {"Tabla"}, ["tnn"] = {"North Tanna"}, ["tno"] = {"Toromono"}, ["tnp"] = {"Whitesands"}, ["tnq"] = {"Taino"}, ["tnr"] = {"Ménik"}, ["tns"] = {"Tenis"}, ["tnt"] = {"Tontemboan"}, ["tnu"] = {"Tay Khang"}, ["tnv"] = {"Tangchangya"}, ["tnw"] = {"Tonsawang"}, ["tnx"] = {"Tanema"}, ["tny"] = {"Tongwe"}, ["tnz"] = {"Ten'edn"}, ["tob"] = {"Toba"}, ["toc"] = {"Coyutla Totonac"}, ["tod"] = {"Toma"}, ["tof"] = {"Gizrra"}, ["tog"] = {"Tonga (Nyasa)"}, ["toh"] = {"Gitonga"}, ["toi"] = {"Tonga (Zambia)"}, ["toj"] = {"Tojolabal"}, ["tok"] = {"Toki Pona"}, ["tol"] = {"Tolowa"}, ["tom"] = {"Tombulu"}, ["too"] = {"Xicotepec De Juárez Totonac"}, ["top"] = {"Papantla Totonac"}, ["toq"] = {"Toposa"}, ["tor"] = {"Togbo-Vara Banda"}, ["tos"] = {"Highland Totonac"}, ["tou"] = {"Tho"}, ["tov"] = {"Upper Taromi"}, ["tow"] = {"Jemez"}, ["tox"] = {"Tobian"}, ["toy"] = {"Topoiyo"}, ["toz"] = {"To"}, ["tpa"] = {"Taupota"}, ["tpc"] = {"Azoyú Me'phaa", "Azoyú Tlapanec"}, ["tpe"] = {"Tippera"}, ["tpf"] = {"Tarpia"}, ["tpg"] = {"Kula"}, ["tpi"] = {"Tok Pisin"}, ["tpj"] = {"Tapieté"}, ["tpk"] = {"Tupinikin"}, ["tpl"] = {"Tlacoapa Me'phaa", "Tlacoapa Tlapanec"}, ["tpm"] = {"Tampulma"}, ["tpn"] = {"Tupinambá"}, ["tpo"] = {"Tai Pao"}, ["tpp"] = {"Pisaflores Tepehua"}, ["tpq"] = {"Tukpa"}, ["tpr"] = {"Tuparí"}, ["tpt"] = {"Tlachichilco Tepehua"}, ["tpu"] = {"Tampuan"}, ["tpv"] = {"Tanapag"}, ["tpx"] = {"Acatepec Me'phaa", "Acatepec Tlapanec"}, ["tpy"] = {"Trumai"}, ["tpz"] = {"Tinputz"}, ["tqb"] = {"Tembé"}, ["tql"] = {"Lehali"}, ["tqm"] = {"Turumsa"}, ["tqn"] = {"Tenino"}, ["tqo"] = {"Toaripi"}, ["tqp"] = {"Tomoip"}, ["tqq"] = {"Tunni"}, ["tqr"] = {"Torona"}, ["tqt"] = {"Western Totonac"}, ["tqu"] = {"Touo"}, ["tqw"] = {"Tonkawa"}, ["tra"] = {"Tirahi"}, ["trb"] = {"Terebu"}, ["trc"] = {"Copala Triqui"}, ["trd"] = {"Turi"}, ["tre"] = {"East Tarangan"}, ["trf"] = {"Trinidadian Creole English"}, ["trg"] = {"Lishán Didán"}, ["trh"] = {"Turaka"}, ["tri"] = {"Trió"}, ["trj"] = {"Toram"}, ["trk"] = {"Turkic languages"}, ["trl"] = {"Traveller Scottish"}, ["trm"] = {"Tregami"}, ["trn"] = {"Trinitario"}, ["tro"] = {"Tarao Naga"}, ["trp"] = {"Kok Borok"}, ["trq"] = {"San Martín Itunyoso Triqui"}, ["trr"] = {"Taushiro"}, ["trs"] = {"Chicahuaxtla Triqui"}, ["trt"] = {"Tunggare"}, ["tru"] = {"Turoyo", "Surayt"}, ["trv"] = {"Sediq", "Seediq", "Taroko"}, ["trw"] = {"Torwali"}, ["trx"] = {"Tringgus-Sembaan Bidayuh"}, ["try"] = {"Turung"}, ["trz"] = {"Torá"}, ["tsa"] = {"Tsaangi"}, ["tsb"] = {"Tsamai"}, ["tsc"] = {"Tswa"}, ["tsd"] = {"Tsakonian"}, ["tse"] = {"Tunisian Sign Language"}, ["tsg"] = {"Tausug"}, ["tsh"] = {"Tsuvan"}, ["tsi"] = {"Tsimshian"}, ["tsj"] = {"Tshangla"}, ["tsk"] = {"Tseku"}, ["tsl"] = {"Ts'ün-Lao"}, ["tsm"] = {"Turkish Sign Language", "Türk İşaret Dili"}, ["tsp"] = {"Northern Toussian"}, ["tsq"] = {"Thai Sign Language"}, ["tsr"] = {"Akei"}, ["tss"] = {"Taiwan Sign Language"}, ["tst"] = {"Tondi Songway Kiini"}, ["tsu"] = {"Tsou"}, ["tsv"] = {"Tsogo"}, ["tsw"] = {"Tsishingini"}, ["tsx"] = {"Mubami"}, ["tsy"] = {"Tebul Sign Language"}, ["tsz"] = {"Purepecha"}, ["tta"] = {"Tutelo"}, ["ttb"] = {"Gaa"}, ["ttc"] = {"Tektiteko"}, ["ttd"] = {"Tauade"}, ["tte"] = {"Bwanabwana"}, ["ttf"] = {"Tuotomb"}, ["ttg"] = {"Tutong"}, ["tth"] = {"Upper Ta'oih"}, ["tti"] = {"Tobati"}, ["ttj"] = {"Tooro"}, ["ttk"] = {"Totoro"}, ["ttl"] = {"Totela"}, ["ttm"] = {"Northern Tutchone"}, ["ttn"] = {"Towei"}, ["tto"] = {"Lower Ta'oih"}, ["ttp"] = {"Tombelala"}, ["ttq"] = {"Tawallammat Tamajaq"}, ["ttr"] = {"Tera"}, ["tts"] = {"Northeastern Thai"}, ["ttt"] = {"Muslim Tat"}, ["ttu"] = {"Torau"}, ["ttv"] = {"Titan"}, ["ttw"] = {"Long Wat"}, ["tty"] = {"Sikaritai"}, ["ttz"] = {"Tsum"}, ["tua"] = {"Wiarumus"}, ["tub"] = {"Tübatulabal"}, ["tuc"] = {"Mutu"}, ["tud"] = {"Tuxá"}, ["tue"] = {"Tuyuca"}, ["tuf"] = {"Central Tunebo"}, ["tug"] = {"Tunia"}, ["tuh"] = {"Taulil"}, ["tui"] = {"Tupuri"}, ["tuj"] = {"Tugutil"}, ["tul"] = {"Tula"}, ["tum"] = {"Tumbuka"}, ["tun"] = {"Tunica"}, ["tuo"] = {"Tucano"}, ["tup"] = {"Tupi languages"}, ["tuq"] = {"Tedaga"}, ["tus"] = {"Tuscarora"}, ["tut"] = {"Altaic languages"}, ["tuu"] = {"Tututni"}, ["tuv"] = {"Turkana"}, ["tuw"] = {"Tungus languages"}, ["tux"] = {"Tuxináwa"}, ["tuy"] = {"Tugen"}, ["tuz"] = {"Turka"}, ["tva"] = {"Vaghua"}, ["tvd"] = {"Tsuvadi"}, ["tve"] = {"Te'un"}, ["tvi"] = {"Tulai"}, ["tvk"] = {"Southeast Ambrym"}, ["tvl"] = {"Tuvalu"}, ["tvm"] = {"Tela-Masbuar"}, ["tvn"] = {"Tavoyan"}, ["tvo"] = {"Tidore"}, ["tvs"] = {"Taveta"}, ["tvt"] = {"Tutsa Naga"}, ["tvu"] = {"Tunen"}, ["tvw"] = {"Sedoa"}, ["tvx"] = {"Taivoan"}, ["tvy"] = {"Timor Pidgin"}, ["twa"] = {"Twana"}, ["twb"] = {"Western Tawbuid"}, ["twc"] = {"Teshenawa"}, ["twd"] = {"Twents"}, ["twe"] = {"Tewa (Indonesia)"}, ["twf"] = {"Northern Tiwa"}, ["twg"] = {"Tereweng"}, ["twh"] = {"Tai Dón"}, ["twl"] = {"Tawara"}, ["twm"] = {"Tawang Monpa"}, ["twn"] = {"Twendi"}, ["two"] = {"Tswapong"}, ["twp"] = {"Ere"}, ["twq"] = {"Tasawaq"}, ["twr"] = {"Southwestern Tarahumara"}, ["twt"] = {"Turiwára"}, ["twu"] = {"Termanu"}, ["tww"] = {"Tuwari"}, ["twx"] = {"Tewe"}, ["twy"] = {"Tawoyan"}, ["txa"] = {"Tombonuo"}, ["txb"] = {"Tokharian B"}, ["txc"] = {"Tsetsaut"}, ["txe"] = {"Totoli"}, ["txg"] = {"Tangut"}, ["txh"] = {"Thracian"}, ["txi"] = {"Ikpeng"}, ["txj"] = {"Tarjumo"}, ["txm"] = {"Tomini"}, ["txn"] = {"West Tarangan"}, ["txo"] = {"Toto"}, ["txq"] = {"Tii"}, ["txr"] = {"Tartessian"}, ["txs"] = {"Tonsea"}, ["txt"] = {"Citak"}, ["txu"] = {"Kayapó"}, ["txx"] = {"Tatana"}, ["txy"] = {"Tanosy Malagasy"}, ["tya"] = {"Tauya"}, ["tye"] = {"Kyanga"}, ["tyh"] = {"O'du"}, ["tyi"] = {"Teke-Tsaayi"}, ["tyj"] = {"Tai Do", "Tai Yo"}, ["tyl"] = {"Thu Lao"}, ["tyn"] = {"Kombai"}, ["typ"] = {"Thaypan"}, ["tyr"] = {"Tai Daeng"}, ["tys"] = {"Tày Sa Pa"}, ["tyt"] = {"Tày Tac"}, ["tyu"] = {"Kua"}, ["tyv"] = {"Tuvinian"}, ["tyx"] = {"Teke-Tyee"}, ["tyy"] = {"Tiyaa"}, ["tyz"] = {"Tày"}, ["tza"] = {"Tanzanian Sign Language"}, ["tzh"] = {"Tzeltal"}, ["tzj"] = {"Tz'utujil"}, ["tzl"] = {"Talossan"}, ["tzm"] = {"Central Atlas Tamazight"}, ["tzn"] = {"Tugun"}, ["tzo"] = {"Tzotzil"}, ["tzx"] = {"Tabriak"}, ["uam"] = {"Uamué"}, ["uan"] = {"Kuan"}, ["uar"] = {"Tairuma"}, ["uba"] = {"Ubang"}, ["ubi"] = {"Ubi"}, ["ubl"] = {"Buhi'non Bikol"}, ["ubr"] = {"Ubir"}, ["ubu"] = {"Umbu-Ungu"}, ["uby"] = {"Ubykh"}, ["uda"] = {"Uda"}, ["ude"] = {"Udihe"}, ["udg"] = {"Muduga"}, ["udi"] = {"Udi"}, ["udj"] = {"Ujir"}, ["udl"] = {"Wuzlam"}, ["udm"] = {"Udmurt"}, ["udu"] = {"Uduk"}, ["ues"] = {"Kioko"}, ["ufi"] = {"Ufim"}, ["uga"] = {"Ugaritic"}, ["ugb"] = {"Kuku-Ugbanh"}, ["uge"] = {"Ughele"}, ["ugh"] = {"Kubachi"}, ["ugn"] = {"Ugandan Sign Language"}, ["ugo"] = {"Ugong"}, ["ugy"] = {"Uruguayan Sign Language"}, ["uha"] = {"Uhami"}, ["uhn"] = {"Damal"}, ["uis"] = {"Uisai"}, ["uiv"] = {"Iyive"}, ["uji"] = {"Tanjijili"}, ["uka"] = {"Kaburi"}, ["ukg"] = {"Ukuriguma"}, ["ukh"] = {"Ukhwejo"}, ["uki"] = {"Kui (India)"}, ["ukk"] = {"Muak Sa-aak"}, ["ukl"] = {"Ukrainian Sign Language"}, ["ukp"] = {"Ukpe-Bayobiri"}, ["ukq"] = {"Ukwa"}, ["uks"] = {"Urubú-Kaapor Sign Language", "Kaapor Sign Language"}, ["uku"] = {"Ukue"}, ["ukv"] = {"Kuku"}, ["ukw"] = {"Ukwuani-Aboh-Ndoni"}, ["uky"] = {"Kuuk-Yak"}, ["ula"] = {"Fungwa"}, ["ulb"] = {"Ulukwumi"}, ["ulc"] = {"Ulch"}, ["ule"] = {"Lule"}, ["ulf"] = {"Usku", "Afra"}, ["uli"] = {"Ulithian"}, ["ulk"] = {"Meriam Mir"}, ["ull"] = {"Ullatan"}, ["ulm"] = {"Ulumanda'"}, ["uln"] = {"Unserdeutsch"}, ["ulu"] = {"Uma' Lung"}, ["ulw"] = {"Ulwa"}, ["uly"] = {"Buli"}, ["uma"] = {"Umatilla"}, ["umb"] = {"Umbundu"}, ["umc"] = {"Marrucinian"}, ["umd"] = {"Umbindhamu"}, ["umg"] = {"Morrobalama", "Umbuygamu"}, ["umi"] = {"Ukit"}, ["umm"] = {"Umon"}, ["umn"] = {"Makyan Naga"}, ["umo"] = {"Umotína"}, ["ump"] = {"Umpila"}, ["umr"] = {"Umbugarla"}, ["ums"] = {"Pendau"}, ["umu"] = {"Munsee"}, ["una"] = {"North Watut"}, ["und"] = {"Undetermined"}, ["une"] = {"Uneme"}, ["ung"] = {"Ngarinyin"}, ["uni"] = {"Uni"}, ["unk"] = {"Enawené-Nawé"}, ["unm"] = {"Unami"}, ["unn"] = {"Kurnai"}, ["unr"] = {"Mundari"}, ["unu"] = {"Unubahe"}, ["unx"] = {"Munda"}, ["unz"] = {"Unde Kaili"}, ["uon"] = {"Kulon"}, ["upi"] = {"Umeda"}, ["upv"] = {"Uripiv-Wala-Rano-Atchin"}, ["ura"] = {"Urarina"}, ["urb"] = {"Urubú-Kaapor", "Kaapor"}, ["urc"] = {"Urningangg"}, ["ure"] = {"Uru"}, ["urf"] = {"Uradhi"}, ["urg"] = {"Urigina"}, ["urh"] = {"Urhobo"}, ["uri"] = {"Urim"}, ["urj"] = {"Uralic languages"}, ["urk"] = {"Urak Lawoi'"}, ["url"] = {"Urali"}, ["urm"] = {"Urapmin"}, ["urn"] = {"Uruangnirin"}, ["uro"] = {"Ura (Papua New Guinea)"}, ["urp"] = {"Uru-Pa-In"}, ["urr"] = {"Lehalurup", "Löyöp"}, ["urt"] = {"Urat"}, ["uru"] = {"Urumi"}, ["urv"] = {"Uruava"}, ["urw"] = {"Sop"}, ["urx"] = {"Urimo"}, ["ury"] = {"Orya"}, ["urz"] = {"Uru-Eu-Wau-Wau"}, ["usa"] = {"Usarufa"}, ["ush"] = {"Ushojo"}, ["usi"] = {"Usui"}, ["usk"] = {"Usaghade"}, ["usp"] = {"Uspanteco"}, ["uss"] = {"us-Saare"}, ["usu"] = {"Uya"}, ["uta"] = {"Otank"}, ["ute"] = {"Ute-Southern Paiute"}, ["uth"] = {"ut-Hun"}, ["utp"] = {"Amba (Solomon Islands)"}, ["utr"] = {"Etulo"}, ["utu"] = {"Utu"}, ["uum"] = {"Urum"}, ["uur"] = {"Ura (Vanuatu)"}, ["uuu"] = {"U"}, ["uve"] = {"West Uvean", "Fagauvea"}, ["uvh"] = {"Uri"}, ["uvl"] = {"Lote"}, ["uwa"] = {"Kuku-Uwanh"}, ["uya"] = {"Doko-Uyanga"}, ["uzn"] = {"Northern Uzbek"}, ["uzs"] = {"Southern Uzbek"}, ["vaa"] = {"Vaagri Booli"}, ["vae"] = {"Vale"}, ["vaf"] = {"Vafsi"}, ["vag"] = {"Vagla"}, ["vah"] = {"Varhadi-Nagpuri"}, ["vai"] = {"Vai"}, ["vaj"] = {"Sekele", "Northwestern ǃKung", "Vasekele"}, ["val"] = {"Vehes"}, ["vam"] = {"Vanimo"}, ["van"] = {"Valman"}, ["vao"] = {"Vao"}, ["vap"] = {"Vaiphei"}, ["var"] = {"Huarijio"}, ["vas"] = {"Vasavi"}, ["vau"] = {"Vanuma"}, ["vav"] = {"Varli"}, ["vay"] = {"Wayu"}, ["vbb"] = {"Southeast Babar"}, ["vbk"] = {"Southwestern Bontok"}, ["vec"] = {"Venetian"}, ["ved"] = {"Veddah"}, ["vel"] = {"Veluws"}, ["vem"] = {"Vemgo-Mabas"}, ["veo"] = {"Ventureño"}, ["vep"] = {"Veps"}, ["ver"] = {"Mom Jango"}, ["vgr"] = {"Vaghri"}, ["vgt"] = {"Vlaamse Gebarentaal", "Flemish Sign Language"}, ["vic"] = {"Virgin Islands Creole English"}, ["vid"] = {"Vidunda"}, ["vif"] = {"Vili"}, ["vig"] = {"Viemo"}, ["vil"] = {"Vilela"}, ["vin"] = {"Vinza"}, ["vis"] = {"Vishavan"}, ["vit"] = {"Viti"}, ["viv"] = {"Iduna"}, ["vjk"] = {"Bajjika"}, ["vka"] = {"Kariyarra"}, ["vkj"] = {"Kujarge"}, ["vkk"] = {"Kaur"}, ["vkl"] = {"Kulisusu"}, ["vkm"] = {"Kamakan"}, ["vkn"] = {"Koro Nulu"}, ["vko"] = {"Kodeoha"}, ["vkp"] = {"Korlai Creole Portuguese"}, ["vkt"] = {"Tenggarong Kutai Malay"}, ["vku"] = {"Kurrama"}, ["vkz"] = {"Koro Zuba"}, ["vlp"] = {"Valpei"}, ["vls"] = {"Vlaams"}, ["vma"] = {"Martuyhunira"}, ["vmb"] = {"Barbaram"}, ["vmc"] = {"Juxtlahuaca Mixtec"}, ["vmd"] = {"Mudu Koraga"}, ["vme"] = {"East Masela"}, ["vmf"] = {"Mainfränkisch"}, ["vmg"] = {"Lungalunga"}, ["vmh"] = {"Maraghei"}, ["vmi"] = {"Miwa"}, ["vmj"] = {"Ixtayutla Mixtec"}, ["vmk"] = {"Makhuwa-Shirima"}, ["vml"] = {"Malgana"}, ["vmm"] = {"Mitlatongo Mixtec"}, ["vmp"] = {"Soyaltepec Mazatec"}, ["vmq"] = {"Soyaltepec Mixtec"}, ["vmr"] = {"Marenje"}, ["vms"] = {"Moksela"}, ["vmu"] = {"Muluridyi"}, ["vmv"] = {"Valley Maidu"}, ["vmw"] = {"Makhuwa"}, ["vmx"] = {"Tamazola Mixtec"}, ["vmy"] = {"Ayautla Mazatec"}, ["vmz"] = {"Mazatlán Mazatec"}, ["vnk"] = {"Vano", "Lovono"}, ["vnm"] = {"Vinmavis", "Neve'ei"}, ["vnp"] = {"Vunapu"}, ["vor"] = {"Voro"}, ["vot"] = {"Votic"}, ["vra"] = {"Vera'a"}, ["vro"] = {"Võro"}, ["vrs"] = {"Varisi"}, ["vrt"] = {"Burmbar", "Banam Bay"}, ["vsi"] = {"Moldova Sign Language"}, ["vsl"] = {"Venezuelan Sign Language"}, ["vsn"] = {"Vedic Sanskrit"}, ["vsv"] = {"Valencian Sign Language", "Llengua de signes valenciana"}, ["vto"] = {"Vitou"}, ["vum"] = {"Vumbu"}, ["vun"] = {"Vunjo"}, ["vut"] = {"Vute"}, ["vwa"] = {"Awa (China)"}, ["waa"] = {"Walla Walla"}, ["wab"] = {"Wab"}, ["wac"] = {"Wasco-Wishram"}, ["wad"] = {"Wamesa", "Wondama"}, ["wae"] = {"Walser"}, ["waf"] = {"Wakoná"}, ["wag"] = {"Wa'ema"}, ["wah"] = {"Watubela"}, ["wai"] = {"Wares"}, ["waj"] = {"Waffa"}, ["wak"] = {"Wakashan languages"}, ["wal"] = {"Wolaytta", "Wolaitta"}, ["wam"] = {"Wampanoag"}, ["wan"] = {"Wan"}, ["wao"] = {"Wappo"}, ["wap"] = {"Wapishana"}, ["waq"] = {"Wagiman"}, ["war"] = {"Waray (Philippines)"}, ["was"] = {"Washo"}, ["wat"] = {"Kaninuwa"}, ["wau"] = {"Waurá"}, ["wav"] = {"Waka"}, ["waw"] = {"Waiwai"}, ["wax"] = {"Watam", "Marangis"}, ["way"] = {"Wayana"}, ["waz"] = {"Wampur"}, ["wba"] = {"Warao"}, ["wbb"] = {"Wabo"}, ["wbe"] = {"Waritai"}, ["wbf"] = {"Wara"}, ["wbh"] = {"Wanda"}, ["wbi"] = {"Vwanji"}, ["wbj"] = {"Alagwa"}, ["wbk"] = {"Waigali"}, ["wbl"] = {"Wakhi"}, ["wbm"] = {"Wa"}, ["wbp"] = {"Warlpiri"}, ["wbq"] = {"Waddar"}, ["wbr"] = {"Wagdi"}, ["wbs"] = {"West Bengal Sign Language"}, ["wbt"] = {"Warnman"}, ["wbv"] = {"Wajarri"}, ["wbw"] = {"Woi"}, ["wca"] = {"Yanomámi"}, ["wci"] = {"Waci Gbe"}, ["wdd"] = {"Wandji"}, ["wdg"] = {"Wadaginam"}, ["wdj"] = {"Wadjiginy"}, ["wdk"] = {"Wadikali"}, ["wdt"] = {"Wendat"}, ["wdu"] = {"Wadjigu"}, ["wdy"] = {"Wadjabangayi"}, ["wea"] = {"Wewaw"}, ["wec"] = {"Wè Western"}, ["wed"] = {"Wedau"}, ["weg"] = {"Wergaia"}, ["weh"] = {"Weh"}, ["wei"] = {"Kiunum"}, ["wem"] = {"Weme Gbe"}, ["wen"] = {"Sorbian languages"}, ["weo"] = {"Wemale"}, ["wep"] = {"Westphalien"}, ["wer"] = {"Weri"}, ["wes"] = {"Cameroon Pidgin"}, ["wet"] = {"Perai"}, ["weu"] = {"Rawngtu Chin"}, ["wew"] = {"Wejewa"}, ["wfg"] = {"Yafi", "Zorop"}, ["wga"] = {"Wagaya"}, ["wgb"] = {"Wagawaga"}, ["wgg"] = {"Wangkangurru", "Wangganguru"}, ["wgi"] = {"Wahgi"}, ["wgo"] = {"Waigeo"}, ["wgu"] = {"Wirangu"}, ["wgy"] = {"Warrgamay"}, ["wha"] = {"Sou Upaa", "Manusela"}, ["whg"] = {"North Wahgi"}, ["whk"] = {"Wahau Kenyah"}, ["whu"] = {"Wahau Kayan"}, ["wib"] = {"Southern Toussian"}, ["wic"] = {"Wichita"}, ["wie"] = {"Wik-Epa"}, ["wif"] = {"Wik-Keyangan"}, ["wig"] = {"Wik Ngathan"}, ["wih"] = {"Wik-Me'anha"}, ["wii"] = {"Minidien"}, ["wij"] = {"Wik-Iiyanh"}, ["wik"] = {"Wikalkan"}, ["wil"] = {"Wilawila"}, ["wim"] = {"Wik-Mungkan"}, ["win"] = {"Ho-Chunk"}, ["wir"] = {"Wiraféd"}, ["wiu"] = {"Wiru"}, ["wiv"] = {"Vitu"}, ["wiy"] = {"Wiyot"}, ["wja"] = {"Waja"}, ["wji"] = {"Warji"}, ["wka"] = {"Kw'adza"}, ["wkb"] = {"Kumbaran"}, ["wkd"] = {"Wakde", "Mo"}, ["wkl"] = {"Kalanadi"}, ["wkr"] = {"Keerray-Woorroong"}, ["wku"] = {"Kunduvadi"}, ["wkw"] = {"Wakawaka"}, ["wky"] = {"Wangkayutyuru"}, ["wla"] = {"Walio"}, ["wlc"] = {"Mwali Comorian"}, ["wle"] = {"Wolane"}, ["wlg"] = {"Kunbarlang"}, ["wlh"] = {"Welaun"}, ["wli"] = {"Waioli"}, ["wlk"] = {"Wailaki"}, ["wll"] = {"Wali (Sudan)"}, ["wlm"] = {"Middle Welsh"}, ["wlo"] = {"Wolio"}, ["wlr"] = {"Wailapa"}, ["wls"] = {"Wallisian"}, ["wlu"] = {"Wuliwuli"}, ["wlv"] = {"Wichí Lhamtés Vejoz"}, ["wlw"] = {"Walak"}, ["wlx"] = {"Wali (Ghana)"}, ["wly"] = {"Waling"}, ["wma"] = {"Mawa (Nigeria)"}, ["wmb"] = {"Wambaya"}, ["wmc"] = {"Wamas"}, ["wmd"] = {"Mamaindé"}, ["wme"] = {"Wambule"}, ["wmg"] = {"Western Minyag"}, ["wmh"] = {"Waima'a"}, ["wmi"] = {"Wamin"}, ["wmm"] = {"Maiwa (Indonesia)"}, ["wmn"] = {"Waamwang"}, ["wmo"] = {"Wom (Papua New Guinea)"}, ["wms"] = {"Wambon"}, ["wmt"] = {"Walmajarri"}, ["wmw"] = {"Mwani"}, ["wmx"] = {"Womo"}, ["wnb"] = {"Mokati"}, ["wnc"] = {"Wantoat"}, ["wnd"] = {"Wandarang"}, ["wne"] = {"Waneci"}, ["wng"] = {"Wanggom"}, ["wni"] = {"Ndzwani Comorian"}, ["wnk"] = {"Wanukaka"}, ["wnm"] = {"Wanggamala"}, ["wnn"] = {"Wunumara"}, ["wno"] = {"Wano"}, ["wnp"] = {"Wanap"}, ["wnu"] = {"Usan"}, ["wnw"] = {"Wintu"}, ["wny"] = {"Wanyi", "Waanyi"}, ["woa"] = {"Kuwema", "Tyaraity"}, ["wob"] = {"Wè Northern"}, ["woc"] = {"Wogeo"}, ["wod"] = {"Wolani"}, ["woe"] = {"Woleaian"}, ["wof"] = {"Gambian Wolof"}, ["wog"] = {"Wogamusin"}, ["woi"] = {"Kamang"}, ["wok"] = {"Longto"}, ["wom"] = {"Wom (Nigeria)"}, ["won"] = {"Wongo"}, ["woo"] = {"Manombai"}, ["wor"] = {"Woria"}, ["wos"] = {"Hanga Hundi"}, ["wow"] = {"Wawonii"}, ["woy"] = {"Weyto"}, ["wpc"] = {"Maco"}, ["wrb"] = {"Waluwarra", "Warluwara"}, ["wrg"] = {"Warungu", "Gudjal"}, ["wrh"] = {"Wiradjuri"}, ["wri"] = {"Wariyangga"}, ["wrk"] = {"Garrwa"}, ["wrl"] = {"Warlmanpa"}, ["wrm"] = {"Warumungu"}, ["wrn"] = {"Warnang"}, ["wro"] = {"Worrorra"}, ["wrp"] = {"Waropen"}, ["wrr"] = {"Wardaman"}, ["wrs"] = {"Waris"}, ["wru"] = {"Waru"}, ["wrv"] = {"Waruna"}, ["wrw"] = {"Gugu Warra"}, ["wrx"] = {"Wae Rana"}, ["wry"] = {"Merwari"}, ["wrz"] = {"Waray (Australia)"}, ["wsa"] = {"Warembori"}, ["wsg"] = {"Adilabad Gondi"}, ["wsi"] = {"Wusi"}, ["wsk"] = {"Waskia"}, ["wsr"] = {"Owenia"}, ["wss"] = {"Wasa"}, ["wsu"] = {"Wasu"}, ["wsv"] = {"Wotapuri-Katarqalai"}, ["wtb"] = {"Matambwe"}, ["wtf"] = {"Watiwa"}, ["wth"] = {"Wathawurrung"}, ["wti"] = {"Berta"}, ["wtk"] = {"Watakataui"}, ["wtm"] = {"Mewati"}, ["wtw"] = {"Wotu"}, ["wua"] = {"Wikngenchera"}, ["wub"] = {"Wunambal"}, ["wud"] = {"Wudu"}, ["wuh"] = {"Wutunhua"}, ["wul"] = {"Silimo"}, ["wum"] = {"Wumbvu"}, ["wun"] = {"Bungu"}, ["wur"] = {"Wurrugu"}, ["wut"] = {"Wutung"}, ["wuu"] = {"Wu Chinese"}, ["wuv"] = {"Wuvulu-Aua"}, ["wux"] = {"Wulna"}, ["wuy"] = {"Wauyai"}, ["wwa"] = {"Waama"}, ["wwb"] = {"Wakabunga"}, ["wwo"] = {"Wetamut", "Dorig"}, ["wwr"] = {"Warrwa"}, ["www"] = {"Wawa"}, ["wxa"] = {"Waxianghua"}, ["wxw"] = {"Wardandi"}, ["wyb"] = {"Wangaaybuwan-Ngiyambaa"}, ["wyi"] = {"Woiwurrung"}, ["wym"] = {"Wymysorys"}, ["wyn"] = {"Wyandot"}, ["wyr"] = {"Wayoró"}, ["wyy"] = {"Western Fijian"}, ["xaa"] = {"Andalusian Arabic"}, ["xab"] = {"Sambe"}, ["xac"] = {"Kachari"}, ["xad"] = {"Adai"}, ["xae"] = {"Aequian"}, ["xag"] = {"Aghwan"}, ["xai"] = {"Kaimbé"}, ["xaj"] = {"Ararandewára"}, ["xak"] = {"Máku"}, ["xal"] = {"Kalmyk", "Oirat"}, ["xam"] = {"ǀXam"}, ["xan"] = {"Xamtanga"}, ["xao"] = {"Khao"}, ["xap"] = {"Apalachee"}, ["xaq"] = {"Aquitanian"}, ["xar"] = {"Karami"}, ["xas"] = {"Kamas"}, ["xat"] = {"Katawixi"}, ["xau"] = {"Kauwera"}, ["xav"] = {"Xavánte"}, ["xaw"] = {"Kawaiisu"}, ["xay"] = {"Kayan Mahakam"}, ["xbb"] = {"Lower Burdekin"}, ["xbc"] = {"Bactrian"}, ["xbd"] = {"Bindal"}, ["xbe"] = {"Bigambal"}, ["xbg"] = {"Bunganditj"}, ["xbi"] = {"Kombio"}, ["xbj"] = {"Birrpayi"}, ["xbm"] = {"Middle Breton"}, ["xbn"] = {"Kenaboi"}, ["xbo"] = {"Bolgarian"}, ["xbp"] = {"Bibbulman"}, ["xbr"] = {"Kambera"}, ["xbw"] = {"Kambiwá"}, ["xby"] = {"Batjala", "Batyala"}, ["xcb"] = {"Cumbric"}, ["xcc"] = {"Camunic"}, ["xce"] = {"Celtiberian"}, ["xcg"] = {"Cisalpine Gaulish"}, ["xch"] = {"Chemakum", "Chimakum"}, ["xcl"] = {"Classical Armenian"}, ["xcm"] = {"Comecrudo"}, ["xcn"] = {"Cotoname"}, ["xco"] = {"Chorasmian"}, ["xcr"] = {"Carian"}, ["xct"] = {"Classical Tibetan"}, ["xcu"] = {"Curonian"}, ["xcv"] = {"Chuvantsy"}, ["xcw"] = {"Coahuilteco"}, ["xcy"] = {"Cayuse"}, ["xda"] = {"Darkinyung"}, ["xdc"] = {"Dacian"}, ["xdk"] = {"Dharuk"}, ["xdm"] = {"Edomite"}, ["xdo"] = {"Kwandu"}, ["xdq"] = {"Kaitag"}, ["xdy"] = {"Malayic Dayak"}, ["xeb"] = {"Eblan"}, ["xed"] = {"Hdi"}, ["xeg"] = {"ǁXegwi"}, ["xel"] = {"Kelo"}, ["xem"] = {"Kembayan"}, ["xep"] = {"Epi-Olmec"}, ["xer"] = {"Xerénte"}, ["xes"] = {"Kesawai"}, ["xet"] = {"Xetá"}, ["xeu"] = {"Keoru-Ahia"}, ["xfa"] = {"Faliscan"}, ["xga"] = {"Galatian"}, ["xgb"] = {"Gbin"}, ["xgd"] = {"Gudang"}, ["xgf"] = {"Gabrielino-Fernandeño"}, ["xgg"] = {"Goreng"}, ["xgi"] = {"Garingbal"}, ["xgl"] = {"Galindan"}, ["xgm"] = {"Dharumbal", "Guwinmal"}, ["xgn"] = {"Mongolian languages"}, ["xgr"] = {"Garza"}, ["xgu"] = {"Unggumi"}, ["xgw"] = {"Guwa"}, ["xha"] = {"Harami"}, ["xhc"] = {"Hunnic"}, ["xhd"] = {"Hadrami"}, ["xhe"] = {"Khetrani"}, ["xhm"] = {"Middle Khmer (1400 to 1850 CE)"}, ["xhr"] = {"Hernican"}, ["xht"] = {"Hattic"}, ["xhu"] = {"Hurrian"}, ["xhv"] = {"Khua"}, ["xib"] = {"Iberian"}, ["xii"] = {"Xiri"}, ["xil"] = {"Illyrian"}, ["xin"] = {"Xinca"}, ["xir"] = {"Xiriâna"}, ["xis"] = {"Kisan"}, ["xiv"] = {"Indus Valley Language"}, ["xiy"] = {"Xipaya"}, ["xjb"] = {"Minjungbal"}, ["xjt"] = {"Jaitmatang"}, ["xka"] = {"Kalkoti"}, ["xkb"] = {"Northern Nago"}, ["xkc"] = {"Kho'ini"}, ["xkd"] = {"Mendalam Kayan"}, ["xke"] = {"Kereho"}, ["xkf"] = {"Khengkha"}, ["xkg"] = {"Kagoro"}, ["xki"] = {"Kenyan Sign Language"}, ["xkj"] = {"Kajali"}, ["xkk"] = {"Kachok", "Kaco'"}, ["xkl"] = {"Mainstream Kenyah"}, ["xkn"] = {"Kayan River Kayan"}, ["xko"] = {"Kiorr"}, ["xkp"] = {"Kabatei"}, ["xkq"] = {"Koroni"}, ["xkr"] = {"Xakriabá"}, ["xks"] = {"Kumbewaha"}, ["xkt"] = {"Kantosi"}, ["xku"] = {"Kaamba"}, ["xkv"] = {"Kgalagadi"}, ["xkw"] = {"Kembra"}, ["xkx"] = {"Karore"}, ["xky"] = {"Uma' Lasan"}, ["xkz"] = {"Kurtokha"}, ["xla"] = {"Kamula"}, ["xlb"] = {"Loup B"}, ["xlc"] = {"Lycian"}, ["xld"] = {"Lydian"}, ["xle"] = {"Lemnian"}, ["xlg"] = {"Ligurian (Ancient)"}, ["xli"] = {"Liburnian"}, ["xln"] = {"Alanic"}, ["xlo"] = {"Loup A"}, ["xlp"] = {"Lepontic"}, ["xls"] = {"Lusitanian"}, ["xlu"] = {"Cuneiform Luwian"}, ["xly"] = {"Elymian"}, ["xma"] = {"Mushungulu"}, ["xmb"] = {"Mbonga"}, ["xmc"] = {"Makhuwa-Marrevone"}, ["xmd"] = {"Mbudum"}, ["xme"] = {"Median"}, ["xmf"] = {"Mingrelian"}, ["xmg"] = {"Mengaka"}, ["xmh"] = {"Kugu-Muminh"}, ["xmj"] = {"Majera"}, ["xmk"] = {"Ancient Macedonian"}, ["xml"] = {"Malaysian Sign Language"}, ["xmm"] = {"Manado Malay"}, ["xmn"] = {"Manichaean Middle Persian"}, ["xmo"] = {"Morerebi"}, ["xmp"] = {"Kuku-Mu'inh"}, ["xmq"] = {"Kuku-Mangk"}, ["xmr"] = {"Meroitic"}, ["xms"] = {"Moroccan Sign Language"}, ["xmt"] = {"Matbat"}, ["xmu"] = {"Kamu"}, ["xmv"] = {"Antankarana Malagasy", "Tankarana Malagasy"}, ["xmw"] = {"Tsimihety Malagasy"}, ["xmx"] = {"Salawati", "Maden"}, ["xmy"] = {"Mayaguduna"}, ["xmz"] = {"Mori Bawah"}, ["xna"] = {"Ancient North Arabian"}, ["xnb"] = {"Kanakanabu"}, ["xnd"] = {"Na-Dene languages"}, ["xng"] = {"Middle Mongolian"}, ["xnh"] = {"Kuanhua"}, ["xni"] = {"Ngarigu"}, ["xnj"] = {"Ngoni (Tanzania)"}, ["xnk"] = {"Nganakarti"}, ["xnm"] = {"Ngumbarl"}, ["xnn"] = {"Northern Kankanay"}, ["xno"] = {"Anglo-Norman"}, ["xnq"] = {"Ngoni (Mozambique)"}, ["xnr"] = {"Kangri"}, ["xns"] = {"Kanashi"}, ["xnt"] = {"Narragansett"}, ["xnu"] = {"Nukunul"}, ["xny"] = {"Nyiyaparli"}, ["xnz"] = {"Kenzi", "Mattoki"}, ["xoc"] = {"O'chi'chi'"}, ["xod"] = {"Kokoda"}, ["xog"] = {"Soga"}, ["xoi"] = {"Kominimung"}, ["xok"] = {"Xokleng"}, ["xom"] = {"Komo (Sudan)"}, ["xon"] = {"Konkomba"}, ["xoo"] = {"Xukurú"}, ["xop"] = {"Kopar"}, ["xor"] = {"Korubo"}, ["xow"] = {"Kowaki"}, ["xpa"] = {"Pirriya"}, ["xpb"] = {"Northeastern Tasmanian", "Pyemmairrener"}, ["xpc"] = {"Pecheneg"}, ["xpd"] = {"Oyster Bay Tasmanian"}, ["xpe"] = {"Liberia Kpelle"}, ["xpf"] = {"Southeast Tasmanian", "Nuenonne"}, ["xpg"] = {"Phrygian"}, ["xph"] = {"North Midlands Tasmanian", "Tyerrenoterpanner"}, ["xpi"] = {"Pictish"}, ["xpj"] = {"Mpalitjanh"}, ["xpk"] = {"Kulina Pano"}, ["xpl"] = {"Port Sorell Tasmanian"}, ["xpm"] = {"Pumpokol"}, ["xpn"] = {"Kapinawá"}, ["xpo"] = {"Pochutec"}, ["xpp"] = {"Puyo-Paekche"}, ["xpq"] = {"Mohegan-Pequot"}, ["xpr"] = {"Parthian"}, ["xps"] = {"Pisidian"}, ["xpt"] = {"Punthamara"}, ["xpu"] = {"Punic"}, ["xpv"] = {"Northern Tasmanian", "Tommeginne"}, ["xpw"] = {"Northwestern Tasmanian", "Peerapper"}, ["xpx"] = {"Southwestern Tasmanian", "Toogee"}, ["xpy"] = {"Puyo"}, ["xpz"] = {"Bruny Island Tasmanian"}, ["xqa"] = {"Karakhanid"}, ["xqt"] = {"Qatabanian"}, ["xra"] = {"Krahô"}, ["xrb"] = {"Eastern Karaboro"}, ["xrd"] = {"Gundungurra"}, ["xre"] = {"Kreye"}, ["xrg"] = {"Minang"}, ["xri"] = {"Krikati-Timbira"}, ["xrm"] = {"Armazic"}, ["xrn"] = {"Arin"}, ["xrr"] = {"Raetic"}, ["xrt"] = {"Aranama-Tamique"}, ["xru"] = {"Marriammu"}, ["xrw"] = {"Karawa"}, ["xsa"] = {"Sabaean"}, ["xsb"] = {"Sambal"}, ["xsc"] = {"Scythian"}, ["xsd"] = {"Sidetic"}, ["xse"] = {"Sempan"}, ["xsh"] = {"Shamang"}, ["xsi"] = {"Sio"}, ["xsj"] = {"Subi"}, ["xsl"] = {"South Slavey"}, ["xsm"] = {"Kasem"}, ["xsn"] = {"Sanga (Nigeria)"}, ["xso"] = {"Solano"}, ["xsp"] = {"Silopi"}, ["xsq"] = {"Makhuwa-Saka"}, ["xsr"] = {"Sherpa"}, ["xsu"] = {"Sanumá"}, ["xsv"] = {"Sudovian"}, ["xsy"] = {"Saisiyat"}, ["xta"] = {"Alcozauca Mixtec"}, ["xtb"] = {"Chazumba Mixtec"}, ["xtc"] = {"Katcha-Kadugli-Miri"}, ["xtd"] = {"Diuxi-Tilantongo Mixtec"}, ["xte"] = {"Ketengban"}, ["xtg"] = {"Transalpine Gaulish"}, ["xth"] = {"Yitha Yitha"}, ["xti"] = {"Sinicahua Mixtec"}, ["xtj"] = {"San Juan Teita Mixtec"}, ["xtl"] = {"Tijaltepec Mixtec"}, ["xtm"] = {"Magdalena Peñasco Mixtec"}, ["xtn"] = {"Northern Tlaxiaco Mixtec"}, ["xto"] = {"Tokharian A"}, ["xtp"] = {"San Miguel Piedras Mixtec"}, ["xtq"] = {"Tumshuqese"}, ["xtr"] = {"Early Tripuri"}, ["xts"] = {"Sindihui Mixtec"}, ["xtt"] = {"Tacahua Mixtec"}, ["xtu"] = {"Cuyamecalco Mixtec"}, ["xtv"] = {"Thawa"}, ["xtw"] = {"Tawandê"}, ["xty"] = {"Yoloxochitl Mixtec"}, ["xua"] = {"Alu Kurumba"}, ["xub"] = {"Betta Kurumba"}, ["xud"] = {"Umiida"}, ["xug"] = {"Kunigami"}, ["xuj"] = {"Jennu Kurumba"}, ["xul"] = {"Ngunawal", "Nunukul"}, ["xum"] = {"Umbrian"}, ["xun"] = {"Unggaranggu"}, ["xuo"] = {"Kuo"}, ["xup"] = {"Upper Umpqua"}, ["xur"] = {"Urartian"}, ["xut"] = {"Kuthant"}, ["xuu"] = {"Kxoe", "Khwedam"}, ["xve"] = {"Venetic"}, ["xvi"] = {"Kamviri"}, ["xvn"] = {"Vandalic"}, ["xvo"] = {"Volscian"}, ["xvs"] = {"Vestinian"}, ["xwa"] = {"Kwaza"}, ["xwc"] = {"Woccon"}, ["xwd"] = {"Wadi Wadi"}, ["xwe"] = {"Xwela Gbe"}, ["xwg"] = {"Kwegu"}, ["xwj"] = {"Wajuk"}, ["xwk"] = {"Wangkumara"}, ["xwl"] = {"Western Xwla Gbe"}, ["xwo"] = {"Written Oirat"}, ["xwr"] = {"Kwerba Mamberamo"}, ["xwt"] = {"Wotjobaluk"}, ["xww"] = {"Wemba Wemba"}, ["xxb"] = {"Boro (Ghana)"}, ["xxk"] = {"Ke'o"}, ["xxm"] = {"Minkin"}, ["xxr"] = {"Koropó"}, ["xxt"] = {"Tambora"}, ["xya"] = {"Yaygir"}, ["xyb"] = {"Yandjibara"}, ["xyj"] = {"Mayi-Yapi"}, ["xyk"] = {"Mayi-Kulan"}, ["xyl"] = {"Yalakalore"}, ["xyt"] = {"Mayi-Thakurti"}, ["xyy"] = {"Yorta Yorta"}, ["xzh"] = {"Zhang-Zhung"}, ["xzm"] = {"Zemgalian"}, ["xzp"] = {"Ancient Zapotec"}, ["yaa"] = {"Yaminahua"}, ["yab"] = {"Yuhup"}, ["yac"] = {"Pass Valley Yali"}, ["yad"] = {"Yagua"}, ["yae"] = {"Pumé"}, ["yaf"] = {"Yaka (Democratic Republic of Congo)"}, ["yag"] = {"Yámana"}, ["yah"] = {"Yazgulyam"}, ["yai"] = {"Yagnobi"}, ["yaj"] = {"Banda-Yangere"}, ["yak"] = {"Yakama"}, ["yal"] = {"Yalunka"}, ["yam"] = {"Yamba"}, ["yan"] = {"Mayangna"}, ["yao"] = {"Yao"}, ["yap"] = {"Yapese"}, ["yaq"] = {"Yaqui"}, ["yar"] = {"Yabarana"}, ["yas"] = {"Nugunu (Cameroon)"}, ["yat"] = {"Yambeta"}, ["yau"] = {"Yuwana"}, ["yav"] = {"Yangben"}, ["yaw"] = {"Yawalapití"}, ["yax"] = {"Yauma"}, ["yay"] = {"Agwagwune"}, ["yaz"] = {"Lokaa"}, ["yba"] = {"Yala"}, ["ybb"] = {"Yemba"}, ["ybe"] = {"West Yugur"}, ["ybh"] = {"Yakha"}, ["ybi"] = {"Yamphu"}, ["ybj"] = {"Hasha"}, ["ybk"] = {"Bokha"}, ["ybl"] = {"Yukuben"}, ["ybm"] = {"Yaben"}, ["ybn"] = {"Yabaâna"}, ["ybo"] = {"Yabong"}, ["ybx"] = {"Yawiyo"}, ["yby"] = {"Yaweyuha"}, ["ych"] = {"Chesu"}, ["ycl"] = {"Lolopo"}, ["ycn"] = {"Yucuna"}, ["ycp"] = {"Chepya"}, ["ycr"] = {"Yilan Creole"}, ["yda"] = {"Yanda"}, ["ydd"] = {"Eastern Yiddish"}, ["yde"] = {"Yangum Dey"}, ["ydg"] = {"Yidgha"}, ["ydk"] = {"Yoidik"}, ["yea"] = {"Ravula"}, ["yec"] = {"Yeniche"}, ["yee"] = {"Yimas"}, ["yei"] = {"Yeni"}, ["yej"] = {"Yevanic"}, ["yel"] = {"Yela"}, ["yer"] = {"Tarok"}, ["yes"] = {"Nyankpa"}, ["yet"] = {"Yetfa"}, ["yeu"] = {"Yerukula"}, ["yev"] = {"Yapunda"}, ["yey"] = {"Yeyi"}, ["yga"] = {"Malyangapa"}, ["ygi"] = {"Yiningayi"}, ["ygl"] = {"Yangum Gel"}, ["ygm"] = {"Yagomi"}, ["ygp"] = {"Gepo"}, ["ygr"] = {"Yagaria"}, ["ygs"] = {"Yolŋu Sign Language"}, ["ygu"] = {"Yugul"}, ["ygw"] = {"Yagwoia"}, ["yha"] = {"Baha Buyang"}, ["yhd"] = {"Judeo-Iraqi Arabic"}, ["yhl"] = {"Hlepho Phowa"}, ["yhs"] = {"Yan-nhaŋu Sign Language"}, ["yia"] = {"Yinggarda"}, ["yif"] = {"Ache"}, ["yig"] = {"Wusa Nasu"}, ["yih"] = {"Western Yiddish"}, ["yii"] = {"Yidiny"}, ["yij"] = {"Yindjibarndi"}, ["yik"] = {"Dongshanba Lalo"}, ["yil"] = {"Yindjilandji"}, ["yim"] = {"Yimchungru Naga"}, ["yin"] = {"Riang Lai", "Yinchia"}, ["yip"] = {"Pholo"}, ["yiq"] = {"Miqie"}, ["yir"] = {"North Awyu"}, ["yis"] = {"Yis"}, ["yit"] = {"Eastern Lalu"}, ["yiu"] = {"Awu"}, ["yiv"] = {"Northern Nisu"}, ["yix"] = {"Axi Yi"}, ["yiz"] = {"Azhe"}, ["yka"] = {"Yakan"}, ["ykg"] = {"Northern Yukaghir"}, ["ykh"] = {"Khamnigan Mongol"}, ["yki"] = {"Yoke"}, ["ykk"] = {"Yakaikeke"}, ["ykl"] = {"Khlula"}, ["ykm"] = {"Kap"}, ["ykn"] = {"Kua-nsi"}, ["yko"] = {"Yasa"}, ["ykr"] = {"Yekora"}, ["ykt"] = {"Kathu"}, ["yku"] = {"Kuamasi"}, ["yky"] = {"Yakoma"}, ["yla"] = {"Yaul"}, ["ylb"] = {"Yaleba"}, ["yle"] = {"Yele"}, ["ylg"] = {"Yelogu"}, ["yli"] = {"Angguruk Yali"}, ["yll"] = {"Yil"}, ["ylm"] = {"Limi"}, ["yln"] = {"Langnian Buyang"}, ["ylo"] = {"Naluo Yi"}, ["ylr"] = {"Yalarnnga"}, ["ylu"] = {"Aribwaung"}, ["yly"] = {"Nyâlayu", "Nyelâyu"}, ["ymb"] = {"Yambes"}, ["ymc"] = {"Southern Muji"}, ["ymd"] = {"Muda"}, ["yme"] = {"Yameo"}, ["ymg"] = {"Yamongeri"}, ["ymh"] = {"Mili"}, ["ymi"] = {"Moji"}, ["ymk"] = {"Makwe"}, ["yml"] = {"Iamalele"}, ["ymm"] = {"Maay"}, ["ymn"] = {"Yamna", "Sunum"}, ["ymo"] = {"Yangum Mon"}, ["ymp"] = {"Yamap"}, ["ymq"] = {"Qila Muji"}, ["ymr"] = {"Malasar"}, ["yms"] = {"Mysian"}, ["ymx"] = {"Northern Muji"}, ["ymz"] = {"Muzi"}, ["yna"] = {"Aluo"}, ["ynb"] = {"Yamben"}, ["ynd"] = {"Yandruwandha"}, ["yne"] = {"Lang'e"}, ["yng"] = {"Yango"}, ["ynk"] = {"Naukan Yupik"}, ["ynl"] = {"Yangulam"}, ["ynn"] = {"Yana"}, ["yno"] = {"Yong"}, ["ynq"] = {"Yendang"}, ["yns"] = {"Yansi"}, ["ynu"] = {"Yahuna"}, ["yob"] = {"Yoba"}, ["yog"] = {"Yogad"}, ["yoi"] = {"Yonaguni"}, ["yok"] = {"Yokuts"}, ["yom"] = {"Yombe"}, ["yon"] = {"Yongkom"}, ["yot"] = {"Yotti"}, ["yox"] = {"Yoron"}, ["yoy"] = {"Yoy"}, ["ypa"] = {"Phala"}, ["ypb"] = {"Labo Phowa"}, ["ypg"] = {"Phola"}, ["yph"] = {"Phupha"}, ["ypk"] = {"Yupik languages"}, ["ypm"] = {"Phuma"}, ["ypn"] = {"Ani Phowa"}, ["ypo"] = {"Alo Phola"}, ["ypp"] = {"Phupa"}, ["ypz"] = {"Phuza"}, ["yra"] = {"Yerakai"}, ["yrb"] = {"Yareba"}, ["yre"] = {"Yaouré"}, ["yrk"] = {"Nenets"}, ["yrl"] = {"Nhengatu"}, ["yrm"] = {"Yirrk-Mel"}, ["yrn"] = {"Yerong"}, ["yro"] = {"Yaroamë"}, ["yrs"] = {"Yarsun"}, ["yrw"] = {"Yarawata"}, ["yry"] = {"Yarluyandi"}, ["ysc"] = {"Yassic"}, ["ysd"] = {"Samatao"}, ["ysg"] = {"Sonaga"}, ["ysl"] = {"Yugoslavian Sign Language"}, ["ysm"] = {"Myanmar Sign Language"}, ["ysn"] = {"Sani"}, ["yso"] = {"Nisi (China)"}, ["ysp"] = {"Southern Lolopo"}, ["ysr"] = {"Sirenik Yupik"}, ["yss"] = {"Yessan-Mayo"}, ["ysy"] = {"Sanie"}, ["yta"] = {"Talu"}, ["ytl"] = {"Tanglang"}, ["ytp"] = {"Thopho"}, ["ytw"] = {"Yout Wam"}, ["yty"] = {"Yatay"}, ["yua"] = {"Yucateco", "Yucatec Maya"}, ["yub"] = {"Yugambal"}, ["yuc"] = {"Yuchi"}, ["yud"] = {"Judeo-Tripolitanian Arabic"}, ["yue"] = {"Yue Chinese", "Cantonese"}, ["yuf"] = {"Havasupai-Walapai-Yavapai"}, ["yug"] = {"Yug"}, ["yui"] = {"Yurutí"}, ["yuj"] = {"Karkar-Yuri"}, ["yuk"] = {"Yuki"}, ["yul"] = {"Yulu"}, ["yum"] = {"Quechan"}, ["yun"] = {"Bena (Nigeria)"}, ["yup"] = {"Yukpa"}, ["yuq"] = {"Yuqui"}, ["yur"] = {"Yurok"}, ["yut"] = {"Yopno"}, ["yuw"] = {"Yau (Morobe Province)"}, ["yux"] = {"Southern Yukaghir"}, ["yuy"] = {"East Yugur"}, ["yuz"] = {"Yuracare"}, ["yva"] = {"Yawa"}, ["yvt"] = {"Yavitero"}, ["ywa"] = {"Kalou"}, ["ywg"] = {"Yinhawangka"}, ["ywl"] = {"Western Lalu"}, ["ywn"] = {"Yawanawa"}, ["ywq"] = {"Wuding-Luquan Yi"}, ["ywr"] = {"Yawuru"}, ["ywt"] = {"Xishanba Lalo", "Central Lalo"}, ["ywu"] = {"Wumeng Nasu"}, ["yww"] = {"Yawarawarga"}, ["yxa"] = {"Mayawali"}, ["yxg"] = {"Yagara"}, ["yxl"] = {"Yardliyawarra"}, ["yxm"] = {"Yinwum"}, ["yxu"] = {"Yuyu"}, ["yxy"] = {"Yabula Yabula"}, ["yyr"] = {"Yir Yoront"}, ["yyu"] = {"Yau (Sandaun Province)"}, ["yyz"] = {"Ayizi"}, ["yzg"] = {"E'ma Buyang"}, ["yzk"] = {"Zokhuo"}, ["zaa"] = {"Sierra de Juárez Zapotec"}, ["zab"] = {"Western Tlacolula Valley Zapotec", "San Juan Guelavía Zapotec"}, ["zac"] = {"Ocotlán Zapotec"}, ["zad"] = {"Cajonos Zapotec"}, ["zae"] = {"Yareni Zapotec"}, ["zaf"] = {"Ayoquesco Zapotec"}, ["zag"] = {"Zaghawa"}, ["zah"] = {"Zangwal"}, ["zai"] = {"Isthmus Zapotec"}, ["zaj"] = {"Zaramo"}, ["zak"] = {"Zanaki"}, ["zal"] = {"Zauzou"}, ["zam"] = {"Miahuatlán Zapotec"}, ["zao"] = {"Ozolotepec Zapotec"}, ["zap"] = {"Zapotec"}, ["zaq"] = {"Aloápam Zapotec"}, ["zar"] = {"Rincón Zapotec"}, ["zas"] = {"Santo Domingo Albarradas Zapotec"}, ["zat"] = {"Tabaa Zapotec"}, ["zau"] = {"Zangskari"}, ["zav"] = {"Yatzachi Zapotec"}, ["zaw"] = {"Mitla Zapotec"}, ["zax"] = {"Xadani Zapotec"}, ["zay"] = {"Zayse-Zergulla", "Zaysete"}, ["zaz"] = {"Zari"}, ["zba"] = {"Balaibalan"}, ["zbc"] = {"Central Berawan"}, ["zbe"] = {"East Berawan"}, ["zbl"] = {"Blissymbols", "Bliss", "Blissymbolics"}, ["zbt"] = {"Batui"}, ["zbu"] = {"Bu (Bauchi State)"}, ["zbw"] = {"West Berawan"}, ["zca"] = {"Coatecas Altas Zapotec"}, ["zcd"] = {"Las Delicias Zapotec"}, ["zch"] = {"Central Hongshuihe Zhuang"}, ["zdj"] = {"Ngazidja Comorian"}, ["zea"] = {"Zeeuws"}, ["zeg"] = {"Zenag"}, ["zeh"] = {"Eastern Hongshuihe Zhuang"}, ["zem"] = {"Zeem"}, ["zen"] = {"Zenaga"}, ["zga"] = {"Kinga"}, ["zgb"] = {"Guibei Zhuang"}, ["zgh"] = {"Standard Moroccan Tamazight"}, ["zgm"] = {"Minz Zhuang"}, ["zgn"] = {"Guibian Zhuang"}, ["zgr"] = {"Magori"}, ["zhb"] = {"Zhaba"}, ["zhd"] = {"Dai Zhuang"}, ["zhi"] = {"Zhire"}, ["zhn"] = {"Nong Zhuang"}, ["zhw"] = {"Zhoa"}, ["zhx"] = {"Chinese (family)"}, ["zia"] = {"Zia"}, ["zib"] = {"Zimbabwe Sign Language"}, ["zik"] = {"Zimakani"}, ["zil"] = {"Zialo"}, ["zim"] = {"Mesme"}, ["zin"] = {"Zinza"}, ["ziw"] = {"Zigula"}, ["ziz"] = {"Zizilivakan"}, ["zka"] = {"Kaimbulawa"}, ["zkd"] = {"Kadu"}, ["zkg"] = {"Koguryo"}, ["zkh"] = {"Khorezmian"}, ["zkk"] = {"Karankawa"}, ["zkn"] = {"Kanan"}, ["zko"] = {"Kott"}, ["zkp"] = {"São Paulo Kaingáng"}, ["zkr"] = {"Zakhring"}, ["zkt"] = {"Kitan"}, ["zku"] = {"Kaurna"}, ["zkv"] = {"Krevinian"}, ["zkz"] = {"Khazar"}, ["zla"] = {"Zula"}, ["zle"] = {"East Slavic languages"}, ["zlj"] = {"Liujiang Zhuang"}, ["zlm"] = {"Malay (individual language)"}, ["zln"] = {"Lianshan Zhuang"}, ["zlq"] = {"Liuqian Zhuang"}, ["zls"] = {"South Slavic languages"}, ["zlu"] = {"Zul"}, ["zlw"] = {"West Slavic languages"}, ["zma"] = {"Manda (Australia)"}, ["zmb"] = {"Zimba"}, ["zmc"] = {"Margany"}, ["zmd"] = {"Maridan"}, ["zme"] = {"Mangerr"}, ["zmf"] = {"Mfinu"}, ["zmg"] = {"Marti Ke"}, ["zmh"] = {"Makolkol"}, ["zmi"] = {"Negeri Sembilan Malay"}, ["zmj"] = {"Maridjabin"}, ["zmk"] = {"Mandandanyi"}, ["zml"] = {"Matngala"}, ["zmm"] = {"Marimanindji", "Marramaninyshi"}, ["zmn"] = {"Mbangwe"}, ["zmo"] = {"Molo"}, ["zmp"] = {"Mbuun"}, ["zmq"] = {"Mituku"}, ["zmr"] = {"Maranunggu"}, ["zms"] = {"Mbesa"}, ["zmt"] = {"Maringarr"}, ["zmu"] = {"Muruwari"}, ["zmv"] = {"Mbariman-Gudhinma"}, ["zmw"] = {"Mbo (Democratic Republic of Congo)"}, ["zmx"] = {"Bomitaba"}, ["zmy"] = {"Mariyedi"}, ["zmz"] = {"Mbandja"}, ["zna"] = {"Zan Gula"}, ["znd"] = {"Zande languages"}, ["zne"] = {"Zande (individual language)"}, ["zng"] = {"Mang"}, ["znk"] = {"Manangkari"}, ["zns"] = {"Mangas"}, ["zoc"] = {"Copainalá Zoque"}, ["zoh"] = {"Chimalapa Zoque"}, ["zom"] = {"Zou"}, ["zoo"] = {"Asunción Mixtepec Zapotec"}, ["zoq"] = {"Tabasco Zoque"}, ["zor"] = {"Rayón Zoque"}, ["zos"] = {"Francisco León Zoque"}, ["zpa"] = {"Lachiguiri Zapotec"}, ["zpb"] = {"Yautepec Zapotec"}, ["zpc"] = {"Choapan Zapotec"}, ["zpd"] = {"Southeastern Ixtlán Zapotec"}, ["zpe"] = {"Petapa Zapotec"}, ["zpf"] = {"San Pedro Quiatoni Zapotec"}, ["zpg"] = {"Guevea De Humboldt Zapotec"}, ["zph"] = {"Totomachapan Zapotec"}, ["zpi"] = {"Santa María Quiegolani Zapotec"}, ["zpj"] = {"Quiavicuzas Zapotec"}, ["zpk"] = {"Tlacolulita Zapotec"}, ["zpl"] = {"Lachixío Zapotec"}, ["zpm"] = {"Mixtepec Zapotec"}, ["zpn"] = {"Santa Inés Yatzechi Zapotec"}, ["zpo"] = {"Amatlán Zapotec"}, ["zpp"] = {"El Alto Zapotec"}, ["zpq"] = {"Zoogocho Zapotec"}, ["zpr"] = {"Santiago Xanica Zapotec"}, ["zps"] = {"Coatlán Zapotec"}, ["zpt"] = {"San Vicente Coatlán Zapotec"}, ["zpu"] = {"Yalálag Zapotec"}, ["zpv"] = {"Chichicapan Zapotec"}, ["zpw"] = {"Zaniza Zapotec"}, ["zpx"] = {"San Baltazar Loxicha Zapotec"}, ["zpy"] = {"Mazaltepec Zapotec"}, ["zpz"] = {"Texmelucan Zapotec"}, ["zqe"] = {"Qiubei Zhuang"}, ["zra"] = {"Kara (Korea)"}, ["zrg"] = {"Mirgan"}, ["zrn"] = {"Zerenkel"}, ["zro"] = {"Záparo"}, ["zrp"] = {"Zarphatic"}, ["zrs"] = {"Mairasi"}, ["zsa"] = {"Sarasira"}, ["zsk"] = {"Kaskean"}, ["zsl"] = {"Zambian Sign Language"}, ["zsm"] = {"Standard Malay"}, ["zsr"] = {"Southern Rincon Zapotec"}, ["zsu"] = {"Sukurum"}, ["zte"] = {"Elotepec Zapotec"}, ["ztg"] = {"Xanaguía Zapotec"}, ["ztl"] = {"Lapaguía-Guivini Zapotec"}, ["ztm"] = {"San Agustín Mixtepec Zapotec"}, ["ztn"] = {"Santa Catarina Albarradas Zapotec"}, ["ztp"] = {"Loxicha Zapotec"}, ["ztq"] = {"Quioquitani-Quierí Zapotec"}, ["zts"] = {"Tilquiapan Zapotec"}, ["ztt"] = {"Tejalapan Zapotec"}, ["ztu"] = {"Güilá Zapotec"}, ["ztx"] = {"Zaachila Zapotec"}, ["zty"] = {"Yatee Zapotec"}, ["zuh"] = {"Tokano"}, ["zum"] = {"Kumzari"}, ["zun"] = {"Zuni"}, ["zuy"] = {"Zumaya"}, ["zwa"] = {"Zay"}, ["zxx"] = {"No linguistic content", "Not applicable"}, ["zyb"] = {"Yongbei Zhuang"}, ["zyg"] = {"Yang Zhuang"}, ["zyj"] = {"Youjiang Zhuang"}, ["zyn"] = {"Yongnan Zhuang"}, ["zyp"] = {"Zyphe Chin"}, ["zza"] = {"Zaza", "Dimili", "Dimli (macrolanguage)", "Kirdki", "Kirmanjki (macrolanguage)", "Zazaki"}, ["zzj"] = {"Zuojiang Zhuang"} } local deprecated = { ["in"] = {"Indonesian"}, ["iw"] = {"Hebrew"}, ["ji"] = {"Yiddish"}, ["jw"] = {"Javanese"}, ["mo"] = {"Moldavian", "Moldovan"}, ["aam"] = {"Aramanik"}, ["adp"] = {"Adap"}, ["agp"] = {"Paranan"}, ["ais"] = {"Nataoran Amis"}, ["ajp"] = {"South Levantine Arabic"}, ["ajt"] = {"Judeo-Tunisian Arabic"}, ["aoh"] = {"Arma"}, ["asd"] = {"Asas"}, ["aue"] = {"ǂKxʼauǁʼein"}, ["ayx"] = {"Ayi (China)"}, ["ayy"] = {"Tayabas Ayta"}, ["baz"] = {"Tunen"}, ["bbz"] = {"Babalia Creole Arabic"}, ["bgm"] = {"Baga Mboteni"}, ["bhk"] = {"Albay Bicolano"}, ["bic"] = {"Bikaru"}, ["bij"] = {"Vaghat-Ya-Bijim-Legeri"}, ["bjd"] = {"Bandjigali"}, ["bjq"] = {"Southern Betsimisaraka Malagasy"}, ["bkb"] = {"Finallig"}, ["blg"] = {"Balau"}, ["bmy"] = {"Bemba (Democratic Republic of Congo)"}, ["bpb"] = {"Barbacoas"}, ["btb"] = {"Beti (Cameroon)"}, ["btl"] = {"Bhatola"}, ["bxx"] = {"Borna (Democratic Republic of Congo)"}, ["byy"] = {"Buya"}, ["cbe"] = {"Chipiajes"}, ["cbh"] = {"Cagua"}, ["cca"] = {"Cauca"}, ["ccq"] = {"Chaungtha"}, ["cdg"] = {"Chamari"}, ["cjr"] = {"Chorotega"}, ["cka"] = {"Khumi Awa Chin"}, ["cmk"] = {"Chimakum"}, ["coy"] = {"Coyaima"}, ["cqu"] = {"Chilean Quechua"}, ["cug"] = {"Chungmboko", "Cung"}, ["cum"] = {"Cumeral"}, ["daf"] = {"Dan"}, ["dap"] = {"Nisi (India)"}, ["dek"] = {"Dek"}, ["dgu"] = {"Degaru"}, ["dha"] = {"Dhanwar (India)"}, ["dit"] = {"Dirari"}, ["djl"] = {"Djiwarli"}, ["dkl"] = {"Kolum So Dogon"}, ["drh"] = {"Darkhat"}, ["drr"] = {"Dororo"}, ["drw"] = {"Darwazi"}, ["dud"] = {"Hun-Saare"}, ["duj"] = {"Dhuwal"}, ["dwl"] = {"Walo Kumbe Dogon"}, ["ekc"] = {"Eastern Karnic"}, ["elp"] = {"Elpaputih"}, ["emo"] = {"Emok"}, ["gav"] = {"Gabutamon"}, ["gbc"] = {"Garawa"}, ["gfx"] = {"Mangetti Dune ǃXung"}, ["ggn"] = {"Eastern Gurung"}, ["ggo"] = {"Southern Gondi"}, ["ggr"] = {"Aghu Tharnggalu"}, ["gio"] = {"Gelao"}, ["gji"] = {"Geji"}, ["gli"] = {"Guliguli"}, ["gti"] = {"Gbati-ri"}, ["guv"] = {"Gey"}, ["hrr"] = {"Horuru"}, ["iap"] = {"Iapama"}, ["ibi"] = {"Ibilo"}, ["ill"] = {"Iranun"}, ["ilw"] = {"Talur"}, ["ime"] = {"Imeraguen"}, ["izi"] = {"Izi-Ezaa-Ikwo-Mgbo"}, ["jar"] = {"Jarawa (Nigeria)"}, ["jeg"] = {"Jeng"}, ["kbf"] = {"Kakauhua"}, ["kdv"] = {"Kado"}, ["kgc"] = {"Kasseng"}, ["kgd"] = {"Kataang"}, ["kgh"] = {"Upper Tanudan Kalinga"}, ["kgm"] = {"Karipúna"}, ["kjf"] = {"Khalaj [Indo-Iranian]"}, ["koj"] = {"Sara Dunjo"}, ["kox"] = {"Coxima"}, ["kpp"] = {"Paku Karen"}, ["krm"] = {"Krim"}, ["ksa"] = {"Shuwa-Zamani"}, ["ktr"] = {"Kota Marudu Tinagas"}, ["kvs"] = {"Kunggara"}, ["kwq"] = {"Kwak"}, ["kxe"] = {"Kakihum"}, ["kxl"] = {"Nepali Kurux"}, ["kxu"] = {"Kui (India)"}, ["kzh"] = {"Kenuzi-Dongola"}, ["kzj"] = {"Coastal Kadazan"}, ["kzt"] = {"Tambunan Dusun"}, ["lak"] = {"Laka (Nigeria)"}, ["lba"] = {"Lui"}, ["leg"] = {"Lengua"}, ["lii"] = {"Lingkhim"}, ["llo"] = {"Khlor"}, ["lmm"] = {"Lamam"}, ["lmz"] = {"Lumbee"}, ["lno"] = {"Lango (South Sudan)"}, ["lsg"] = {"Lyons Sign Language"}, ["meg"] = {"Mea"}, ["mgx"] = {"Omati"}, ["mhh"] = {"Maskoy Pidgin"}, ["mja"] = {"Mahei"}, ["mld"] = {"Malakhel"}, ["mnt"] = {"Maykulan"}, ["mof"] = {"Mohegan-Montauk-Narragansett"}, ["mst"] = {"Cataelano Mandaya"}, ["mvm"] = {"Muya"}, ["mwd"] = {"Mudbura"}, ["mwj"] = {"Maligo"}, ["mwx"] = {"Mediak"}, ["mwy"] = {"Mosiro"}, ["myd"] = {"Maramba"}, ["myi"] = {"Mina (India)"}, ["myq"] = {"Forest Maninka"}, ["myt"] = {"Sangab Mandaya"}, ["nad"] = {"Nijadali"}, ["nbf"] = {"Naxi"}, ["nbx"] = {"Ngura"}, ["ncp"] = {"Ndaktup"}, ["ngo"] = {"Ngoni"}, ["nln"] = {"Durango Nahuatl"}, ["nlr"] = {"Ngarla"}, ["nns"] = {"Ningye"}, ["nnx"] = {"Ngong"}, ["nom"] = {"Nocamán"}, ["noo"] = {"Nootka"}, ["nte"] = {"Nathembo"}, ["nts"] = {"Natagaimas"}, ["nxu"] = {"Narau"}, ["ome"] = {"Omejes"}, ["oun"] = {"ǃOǃung"}, ["pat"] = {"Papitalai"}, ["pbz"] = {"Palu"}, ["pcr"] = {"Panang"}, ["pgy"] = {"Pongyong"}, ["pii"] = {"Pini"}, ["plj"] = {"Polci"}, ["plp"] = {"Palpa"}, ["pmc"] = {"Palumata"}, ["pmk"] = {"Pamlico"}, ["pmu"] = {"Mirpur Panjabi"}, ["pod"] = {"Ponares"}, ["ppa"] = {"Pao"}, ["ppr"] = {"Piru"}, ["prb"] = {"Lua'"}, ["prp"] = {"Parsi"}, ["pry"] = {"Pray 3"}, ["puk"] = {"Pu Ko"}, ["puz"] = {"Purum Naga"}, ["rie"] = {"Rien"}, ["rmr"] = {"Caló"}, ["rna"] = {"Runa"}, ["rsi"] = {"Rennellese Sign Language"}, ["sap"] = {"Sanapaná"}, ["sca"] = {"Sansu"}, ["sdm"] = {"Semandang"}, ["sgl"] = {"Sanglechi-Ishkashimi"}, ["sgo"] = {"Songa"}, ["skk"] = {"Sok"}, ["slq"] = {"Salchuq"}, ["smd"] = {"Sama"}, ["snb"] = {"Sebuyau"}, ["snh"] = {"Shinabo"}, ["sul"] = {"Surigaonon"}, ["sum"] = {"Sumo-Mayangna"}, ["svr"] = {"Savara"}, ["szd"] = {"Seru"}, ["tbb"] = {"Tapeba"}, ["tdu"] = {"Tempasuk Dusun"}, ["tgg"] = {"Tangga"}, ["thc"] = {"Tai Hang Tong"}, ["thw"] = {"Thudam"}, ["thx"] = {"The"}, ["tid"] = {"Tidong"}, ["tie"] = {"Tingal"}, ["tkk"] = {"Takpa"}, ["tlw"] = {"South Wemale"}, ["tmk"] = {"Northwestern Tamang"}, ["tmp"] = {"Tai Mène"}, ["tne"] = {"Tinoc Kallahan"}, ["tnf"] = {"Tangshewi"}, ["toe"] = {"Tomedes"}, ["tpw"] = {"Tupí"}, ["tsf"] = {"Southwestern Tamang"}, ["unp"] = {"Worora"}, ["uok"] = {"Uokha"}, ["uun"] = {"Kulon-Pazeh"}, ["vki"] = {"Ija-Zuba"}, ["wgw"] = {"Wagawaga"}, ["wit"] = {"Wintu"}, ["wiw"] = {"Wirangu"}, ["wra"] = {"Warapu"}, ["wrd"] = {"Warduji"}, ["wya"] = {"Wyandot"}, ["xba"] = {"Kamba (Brazil)"}, ["xbx"] = {"Kabixí"}, ["xia"] = {"Xiandao"}, ["xip"] = {"Xipináwa"}, ["xkh"] = {"Karahawyana"}, ["xrq"] = {"Karranga"}, ["xss"] = {"Assan"}, ["xtz"] = {"Tasmanian"}, ["ybd"] = {"Yangbye"}, ["yds"] = {"Yiddish Sign Language"}, ["yen"] = {"Yendang"}, ["yiy"] = {"Yir Yoront"}, ["yma"] = {"Yamphe"}, ["ymt"] = {"Mator-Taygi-Karagas"}, ["ynh"] = {"Yangho"}, ["yol"] = {"Yola"}, ["yos"] = {"Yos"}, ["yri"] = {"Yarí"}, ["yuu"] = {"Yugh"}, ["zir"] = {"Ziriya"}, ["zkb"] = {"Koibal"}, ["zua"] = {"Zeem"} } return { active = active, deprecated = deprecated, } lvtjy4barx2qygel3xiiq0zt2bdqn5t Module:Lang/data/iana scripts 828 163187 746233 733556 2026-04-16T17:41:42Z en>Trappist the monk 0 update to 2026-04-09 data; 746233 Scribunto text/plain -- File-Date: 2026-04-09 return { ["Adlm"] = {"Adlam"}, ["Afak"] = {"Afaka"}, ["Aghb"] = {"Caucasian Albanian"}, ["Ahom"] = {"Ahom", "Tai Ahom"}, ["Arab"] = {"Arabic"}, ["Aran"] = {"Arabic (Nastaliq variant)"}, ["Armi"] = {"Imperial Aramaic"}, ["Armn"] = {"Armenian"}, ["Avst"] = {"Avestan"}, ["Bali"] = {"Balinese"}, ["Bamu"] = {"Bamum"}, ["Bass"] = {"Bassa Vah"}, ["Batk"] = {"Batak"}, ["Beng"] = {"Bengali", "Bangla"}, ["Berf"] = {"Beria Erfe"}, ["Bhks"] = {"Bhaiksuki"}, ["Blis"] = {"Blissymbols"}, ["Bopo"] = {"Bopomofo"}, ["Brah"] = {"Brahmi"}, ["Brai"] = {"Braille"}, ["Bugi"] = {"Buginese"}, ["Buhd"] = {"Buhid"}, ["Cakm"] = {"Chakma"}, ["Cans"] = {"Unified Canadian Aboriginal Syllabics"}, ["Cari"] = {"Carian"}, ["Cham"] = {"Cham"}, ["Cher"] = {"Cherokee"}, ["Chis"] = {"Chisoi"}, ["Chrs"] = {"Chorasmian"}, ["Cirt"] = {"Cirth"}, ["Copt"] = {"Coptic"}, ["Cpmn"] = {"Cypro-Minoan"}, ["Cprt"] = {"Cypriot syllabary"}, ["Cyrl"] = {"Cyrillic"}, ["Cyrs"] = {"Cyrillic (Old Church Slavonic variant)"}, ["Deva"] = {"Devanagari", "Nagari"}, ["Diak"] = {"Dives Akuru"}, ["Dogr"] = {"Dogra"}, ["Dsrt"] = {"Deseret", "Mormon"}, ["Dupl"] = {"Duployan shorthand", "Duployan stenography"}, ["Egyd"] = {"Egyptian demotic"}, ["Egyh"] = {"Egyptian hieratic"}, ["Egyp"] = {"Egyptian hieroglyphs"}, ["Elba"] = {"Elbasan"}, ["Elym"] = {"Elymaic"}, ["Ethi"] = {"Ethiopic", "Geʻez", "Ge'ez"}, ["Gara"] = {"Garay"}, ["Geok"] = {"Khutsuri (Asomtavruli and Nuskhuri)"}, ["Geor"] = {"Georgian (Mkhedruli and Mtavruli)"}, ["Glag"] = {"Glagolitic"}, ["Gong"] = {"Gunjala Gondi"}, ["Gonm"] = {"Masaram Gondi"}, ["Goth"] = {"Gothic"}, ["Gran"] = {"Grantha"}, ["Grek"] = {"Greek"}, ["Gujr"] = {"Gujarati"}, ["Gukh"] = {"Gurung Khema"}, ["Guru"] = {"Gurmukhi"}, ["Hanb"] = {"Han with Bopomofo (alias for Han + Bopomofo)"}, ["Hang"] = {"Hangul", "Hangŭl", "Hangeul"}, ["Hani"] = {"Han", "Hanzi", "Kanji", "Hanja"}, ["Hano"] = {"Hanunoo", "Hanunóo"}, ["Hans"] = {"Han (Simplified variant)"}, ["Hant"] = {"Han (Traditional variant)"}, ["Hatr"] = {"Hatran"}, ["Hebr"] = {"Hebrew"}, ["Hira"] = {"Hiragana"}, ["Hluw"] = {"Anatolian Hieroglyphs", "Luwian Hieroglyphs", "Hittite Hieroglyphs"}, ["Hmng"] = {"Pahawh Hmong"}, ["Hmnp"] = {"Nyiakeng Puachue Hmong"}, ["Hntl"] = {"Han (Traditional variant) with Latin (alias for Hant + Latn)"}, ["Hrkt"] = {"Japanese syllabaries (alias for Hiragana + Katakana)"}, ["Hung"] = {"Old Hungarian", "Hungarian Runic"}, ["Inds"] = {"Indus", "Harappan"}, ["Ital"] = {"Old Italic (Etruscan, Oscan, etc.)"}, ["Jamo"] = {"Jamo (alias for Jamo subset of Hangul)"}, ["Java"] = {"Javanese"}, ["Jpan"] = {"Japanese (alias for Han + Hiragana + Katakana)"}, ["Jurc"] = {"Jurchen"}, ["Kali"] = {"Kayah Li"}, ["Kana"] = {"Katakana"}, ["Kawi"] = {"Kawi"}, ["Khar"] = {"Kharoshthi"}, ["Khmr"] = {"Khmer"}, ["Khoj"] = {"Khojki"}, ["Kitl"] = {"Khitan large script"}, ["Kits"] = {"Khitan small script"}, ["Knda"] = {"Kannada"}, ["Kore"] = {"Korean (alias for Hangul + Han)"}, ["Kpel"] = {"Kpelle"}, ["Krai"] = {"Kirat Rai"}, ["Kthi"] = {"Kaithi"}, ["Lana"] = {"Tai Tham", "Lanna"}, ["Laoo"] = {"Lao"}, ["Latf"] = {"Latin (Fraktur variant)"}, ["Latg"] = {"Latin (Gaelic variant)"}, ["Latn"] = {"Latin"}, ["Leke"] = {"Leke"}, ["Lepc"] = {"Lepcha", "Róng"}, ["Limb"] = {"Limbu"}, ["Lina"] = {"Linear A"}, ["Linb"] = {"Linear B"}, ["Lisu"] = {"Lisu", "Fraser"}, ["Loma"] = {"Loma"}, ["Lyci"] = {"Lycian"}, ["Lydi"] = {"Lydian"}, ["Mahj"] = {"Mahajani"}, ["Maka"] = {"Makasar"}, ["Mand"] = {"Mandaic", "Mandaean"}, ["Mani"] = {"Manichaean"}, ["Marc"] = {"Marchen"}, ["Maya"] = {"Mayan hieroglyphs"}, ["Medf"] = {"Medefaidrin", "Oberi Okaime", "Oberi Ɔkaimɛ"}, ["Mend"] = {"Mende Kikakui"}, ["Merc"] = {"Meroitic Cursive"}, ["Mero"] = {"Meroitic Hieroglyphs"}, ["Mlym"] = {"Malayalam"}, ["Modi"] = {"Modi", "Moḍī"}, ["Mong"] = {"Mongolian"}, ["Moon"] = {"Moon", "Moon code", "Moon script", "Moon type"}, ["Mroo"] = {"Mro", "Mru"}, ["Mtei"] = {"Meitei Mayek", "Meithei", "Meetei"}, ["Mult"] = {"Multani"}, ["Mymr"] = {"Myanmar", "Burmese"}, ["Nagm"] = {"Nag Mundari"}, ["Nand"] = {"Nandinagari"}, ["Narb"] = {"Old North Arabian", "Ancient North Arabian"}, ["Nbat"] = {"Nabataean"}, ["Newa"] = {"Newa", "Newar", "Newari", "Nepāla lipi"}, ["Nkdb"] = {"Naxi Dongba", "na²¹ɕi³³ to³³ba²¹", "Nakhi Tomba"}, ["Nkgb"] = {"Naxi Geba", "na²¹ɕi³³ gʌ²¹ba²¹", "'Na-'Khi ²Ggŏ-¹baw", "Nakhi Geba"}, ["Nkoo"] = {"N’Ko", "N'Ko"}, ["Nshu"] = {"Nüshu"}, ["Ogam"] = {"Ogham"}, ["Olck"] = {"Ol Chiki", "Ol Cemet'", "Ol", "Santali"}, ["Onao"] = {"Ol Onal"}, ["Orkh"] = {"Old Turkic", "Orkhon Runic"}, ["Orya"] = {"Oriya", "Odia"}, ["Osge"] = {"Osage"}, ["Osma"] = {"Osmanya"}, ["Ougr"] = {"Old Uyghur"}, ["Palm"] = {"Palmyrene"}, ["Pauc"] = {"Pau Cin Hau"}, ["Pcun"] = {"Proto-Cuneiform"}, ["Pelm"] = {"Proto-Elamite"}, ["Perm"] = {"Old Permic"}, ["Phag"] = {"Phags-pa"}, ["Phli"] = {"Inscriptional Pahlavi"}, ["Phlp"] = {"Psalter Pahlavi"}, ["Phlv"] = {"Book Pahlavi"}, ["Phnx"] = {"Phoenician"}, ["Piqd"] = {"Klingon (KLI pIqaD)"}, ["Plrd"] = {"Miao", "Pollard"}, ["Prti"] = {"Inscriptional Parthian"}, ["Psin"] = {"Proto-Sinaitic"}, ["Ranj"] = {"Ranjana"}, ["Rjng"] = {"Rejang", "Redjang", "Kaganga"}, ["Rohg"] = {"Hanifi Rohingya"}, ["Roro"] = {"Rongorongo"}, ["Runr"] = {"Runic"}, ["Samr"] = {"Samaritan"}, ["Sara"] = {"Sarati"}, ["Sarb"] = {"Old South Arabian"}, ["Saur"] = {"Saurashtra"}, ["Seal"] = {"Seal", "Small Seal"}, ["Sgnw"] = {"SignWriting"}, ["Shaw"] = {"Shavian", "Shaw"}, ["Shrd"] = {"Sharada", "Śāradā"}, ["Shui"] = {"Shuishu"}, ["Sidd"] = {"Siddham", "Siddhaṃ", "Siddhamātṛkā"}, ["Sidt"] = {"Sidetic"}, ["Sind"] = {"Khudawadi", "Sindhi"}, ["Sinh"] = {"Sinhala"}, ["Sogd"] = {"Sogdian"}, ["Sogo"] = {"Old Sogdian"}, ["Sora"] = {"Sora Sompeng"}, ["Soyo"] = {"Soyombo"}, ["Sund"] = {"Sundanese"}, ["Sunu"] = {"Sunuwar"}, ["Sylo"] = {"Syloti Nagri"}, ["Syrc"] = {"Syriac"}, ["Syre"] = {"Syriac (Estrangelo variant)"}, ["Syrj"] = {"Syriac (Western variant)"}, ["Syrn"] = {"Syriac (Eastern variant)"}, ["Tagb"] = {"Tagbanwa"}, ["Takr"] = {"Takri", "Ṭākrī", "Ṭāṅkrī"}, ["Tale"] = {"Tai Le"}, ["Talu"] = {"New Tai Lue"}, ["Taml"] = {"Tamil"}, ["Tang"] = {"Tangut"}, ["Tavt"] = {"Tai Viet"}, ["Tayo"] = {"Tai Yo"}, ["Telu"] = {"Telugu"}, ["Teng"] = {"Tengwar"}, ["Tfng"] = {"Tifinagh", "Berber"}, ["Tglg"] = {"Tagalog", "Baybayin", "Alibata"}, ["Thaa"] = {"Thaana"}, ["Thai"] = {"Thai"}, ["Tibt"] = {"Tibetan"}, ["Tirh"] = {"Tirhuta"}, ["Tnsa"] = {"Tangsa"}, ["Todr"] = {"Todhri"}, ["Tols"] = {"Tolong Siki"}, ["Toto"] = {"Toto"}, ["Tutg"] = {"Tulu-Tigalari"}, ["Ugar"] = {"Ugaritic"}, ["Vaii"] = {"Vai"}, ["Visp"] = {"Visible Speech"}, ["Vith"] = {"Vithkuqi"}, ["Wara"] = {"Warang Citi", "Varang Kshiti"}, ["Wcho"] = {"Wancho"}, ["Wole"] = {"Woleai"}, ["Xpeo"] = {"Old Persian"}, ["Xsux"] = {"Sumero-Akkadian cuneiform"}, ["Yezi"] = {"Yezidi"}, ["Yiii"] = {"Yi"}, ["Zanb"] = {"Zanabazar Square", "Zanabazarin Dörböljin Useg", "Xewtee Dörböljin Bicig", "Horizontal Square Script"}, ["Zinh"] = {"Code for inherited script"}, ["Zmth"] = {"Mathematical notation"}, ["Zsye"] = {"Symbols (Emoji variant)"}, ["Zsym"] = {"Symbols"}, ["Zxxx"] = {"Code for unwritten documents"}, ["Zyyy"] = {"Code for undetermined script"}, ["Zzzz"] = {"Code for uncoded script"} } c7u9sv80kzrh5jzaij9fynoelyyehwq 746234 746233 2026-06-12T21:52:04Z Robertsky 51025 1 revision imported from [[:en:Module:Lang/data/iana_scripts]]: for workshop activity 746233 Scribunto text/plain -- File-Date: 2026-04-09 return { ["Adlm"] = {"Adlam"}, ["Afak"] = {"Afaka"}, ["Aghb"] = {"Caucasian Albanian"}, ["Ahom"] = {"Ahom", "Tai Ahom"}, ["Arab"] = {"Arabic"}, ["Aran"] = {"Arabic (Nastaliq variant)"}, ["Armi"] = {"Imperial Aramaic"}, ["Armn"] = {"Armenian"}, ["Avst"] = {"Avestan"}, ["Bali"] = {"Balinese"}, ["Bamu"] = {"Bamum"}, ["Bass"] = {"Bassa Vah"}, ["Batk"] = {"Batak"}, ["Beng"] = {"Bengali", "Bangla"}, ["Berf"] = {"Beria Erfe"}, ["Bhks"] = {"Bhaiksuki"}, ["Blis"] = {"Blissymbols"}, ["Bopo"] = {"Bopomofo"}, ["Brah"] = {"Brahmi"}, ["Brai"] = {"Braille"}, ["Bugi"] = {"Buginese"}, ["Buhd"] = {"Buhid"}, ["Cakm"] = {"Chakma"}, ["Cans"] = {"Unified Canadian Aboriginal Syllabics"}, ["Cari"] = {"Carian"}, ["Cham"] = {"Cham"}, ["Cher"] = {"Cherokee"}, ["Chis"] = {"Chisoi"}, ["Chrs"] = {"Chorasmian"}, ["Cirt"] = {"Cirth"}, ["Copt"] = {"Coptic"}, ["Cpmn"] = {"Cypro-Minoan"}, ["Cprt"] = {"Cypriot syllabary"}, ["Cyrl"] = {"Cyrillic"}, ["Cyrs"] = {"Cyrillic (Old Church Slavonic variant)"}, ["Deva"] = {"Devanagari", "Nagari"}, ["Diak"] = {"Dives Akuru"}, ["Dogr"] = {"Dogra"}, ["Dsrt"] = {"Deseret", "Mormon"}, ["Dupl"] = {"Duployan shorthand", "Duployan stenography"}, ["Egyd"] = {"Egyptian demotic"}, ["Egyh"] = {"Egyptian hieratic"}, ["Egyp"] = {"Egyptian hieroglyphs"}, ["Elba"] = {"Elbasan"}, ["Elym"] = {"Elymaic"}, ["Ethi"] = {"Ethiopic", "Geʻez", "Ge'ez"}, ["Gara"] = {"Garay"}, ["Geok"] = {"Khutsuri (Asomtavruli and Nuskhuri)"}, ["Geor"] = {"Georgian (Mkhedruli and Mtavruli)"}, ["Glag"] = {"Glagolitic"}, ["Gong"] = {"Gunjala Gondi"}, ["Gonm"] = {"Masaram Gondi"}, ["Goth"] = {"Gothic"}, ["Gran"] = {"Grantha"}, ["Grek"] = {"Greek"}, ["Gujr"] = {"Gujarati"}, ["Gukh"] = {"Gurung Khema"}, ["Guru"] = {"Gurmukhi"}, ["Hanb"] = {"Han with Bopomofo (alias for Han + Bopomofo)"}, ["Hang"] = {"Hangul", "Hangŭl", "Hangeul"}, ["Hani"] = {"Han", "Hanzi", "Kanji", "Hanja"}, ["Hano"] = {"Hanunoo", "Hanunóo"}, ["Hans"] = {"Han (Simplified variant)"}, ["Hant"] = {"Han (Traditional variant)"}, ["Hatr"] = {"Hatran"}, ["Hebr"] = {"Hebrew"}, ["Hira"] = {"Hiragana"}, ["Hluw"] = {"Anatolian Hieroglyphs", "Luwian Hieroglyphs", "Hittite Hieroglyphs"}, ["Hmng"] = {"Pahawh Hmong"}, ["Hmnp"] = {"Nyiakeng Puachue Hmong"}, ["Hntl"] = {"Han (Traditional variant) with Latin (alias for Hant + Latn)"}, ["Hrkt"] = {"Japanese syllabaries (alias for Hiragana + Katakana)"}, ["Hung"] = {"Old Hungarian", "Hungarian Runic"}, ["Inds"] = {"Indus", "Harappan"}, ["Ital"] = {"Old Italic (Etruscan, Oscan, etc.)"}, ["Jamo"] = {"Jamo (alias for Jamo subset of Hangul)"}, ["Java"] = {"Javanese"}, ["Jpan"] = {"Japanese (alias for Han + Hiragana + Katakana)"}, ["Jurc"] = {"Jurchen"}, ["Kali"] = {"Kayah Li"}, ["Kana"] = {"Katakana"}, ["Kawi"] = {"Kawi"}, ["Khar"] = {"Kharoshthi"}, ["Khmr"] = {"Khmer"}, ["Khoj"] = {"Khojki"}, ["Kitl"] = {"Khitan large script"}, ["Kits"] = {"Khitan small script"}, ["Knda"] = {"Kannada"}, ["Kore"] = {"Korean (alias for Hangul + Han)"}, ["Kpel"] = {"Kpelle"}, ["Krai"] = {"Kirat Rai"}, ["Kthi"] = {"Kaithi"}, ["Lana"] = {"Tai Tham", "Lanna"}, ["Laoo"] = {"Lao"}, ["Latf"] = {"Latin (Fraktur variant)"}, ["Latg"] = {"Latin (Gaelic variant)"}, ["Latn"] = {"Latin"}, ["Leke"] = {"Leke"}, ["Lepc"] = {"Lepcha", "Róng"}, ["Limb"] = {"Limbu"}, ["Lina"] = {"Linear A"}, ["Linb"] = {"Linear B"}, ["Lisu"] = {"Lisu", "Fraser"}, ["Loma"] = {"Loma"}, ["Lyci"] = {"Lycian"}, ["Lydi"] = {"Lydian"}, ["Mahj"] = {"Mahajani"}, ["Maka"] = {"Makasar"}, ["Mand"] = {"Mandaic", "Mandaean"}, ["Mani"] = {"Manichaean"}, ["Marc"] = {"Marchen"}, ["Maya"] = {"Mayan hieroglyphs"}, ["Medf"] = {"Medefaidrin", "Oberi Okaime", "Oberi Ɔkaimɛ"}, ["Mend"] = {"Mende Kikakui"}, ["Merc"] = {"Meroitic Cursive"}, ["Mero"] = {"Meroitic Hieroglyphs"}, ["Mlym"] = {"Malayalam"}, ["Modi"] = {"Modi", "Moḍī"}, ["Mong"] = {"Mongolian"}, ["Moon"] = {"Moon", "Moon code", "Moon script", "Moon type"}, ["Mroo"] = {"Mro", "Mru"}, ["Mtei"] = {"Meitei Mayek", "Meithei", "Meetei"}, ["Mult"] = {"Multani"}, ["Mymr"] = {"Myanmar", "Burmese"}, ["Nagm"] = {"Nag Mundari"}, ["Nand"] = {"Nandinagari"}, ["Narb"] = {"Old North Arabian", "Ancient North Arabian"}, ["Nbat"] = {"Nabataean"}, ["Newa"] = {"Newa", "Newar", "Newari", "Nepāla lipi"}, ["Nkdb"] = {"Naxi Dongba", "na²¹ɕi³³ to³³ba²¹", "Nakhi Tomba"}, ["Nkgb"] = {"Naxi Geba", "na²¹ɕi³³ gʌ²¹ba²¹", "'Na-'Khi ²Ggŏ-¹baw", "Nakhi Geba"}, ["Nkoo"] = {"N’Ko", "N'Ko"}, ["Nshu"] = {"Nüshu"}, ["Ogam"] = {"Ogham"}, ["Olck"] = {"Ol Chiki", "Ol Cemet'", "Ol", "Santali"}, ["Onao"] = {"Ol Onal"}, ["Orkh"] = {"Old Turkic", "Orkhon Runic"}, ["Orya"] = {"Oriya", "Odia"}, ["Osge"] = {"Osage"}, ["Osma"] = {"Osmanya"}, ["Ougr"] = {"Old Uyghur"}, ["Palm"] = {"Palmyrene"}, ["Pauc"] = {"Pau Cin Hau"}, ["Pcun"] = {"Proto-Cuneiform"}, ["Pelm"] = {"Proto-Elamite"}, ["Perm"] = {"Old Permic"}, ["Phag"] = {"Phags-pa"}, ["Phli"] = {"Inscriptional Pahlavi"}, ["Phlp"] = {"Psalter Pahlavi"}, ["Phlv"] = {"Book Pahlavi"}, ["Phnx"] = {"Phoenician"}, ["Piqd"] = {"Klingon (KLI pIqaD)"}, ["Plrd"] = {"Miao", "Pollard"}, ["Prti"] = {"Inscriptional Parthian"}, ["Psin"] = {"Proto-Sinaitic"}, ["Ranj"] = {"Ranjana"}, ["Rjng"] = {"Rejang", "Redjang", "Kaganga"}, ["Rohg"] = {"Hanifi Rohingya"}, ["Roro"] = {"Rongorongo"}, ["Runr"] = {"Runic"}, ["Samr"] = {"Samaritan"}, ["Sara"] = {"Sarati"}, ["Sarb"] = {"Old South Arabian"}, ["Saur"] = {"Saurashtra"}, ["Seal"] = {"Seal", "Small Seal"}, ["Sgnw"] = {"SignWriting"}, ["Shaw"] = {"Shavian", "Shaw"}, ["Shrd"] = {"Sharada", "Śāradā"}, ["Shui"] = {"Shuishu"}, ["Sidd"] = {"Siddham", "Siddhaṃ", "Siddhamātṛkā"}, ["Sidt"] = {"Sidetic"}, ["Sind"] = {"Khudawadi", "Sindhi"}, ["Sinh"] = {"Sinhala"}, ["Sogd"] = {"Sogdian"}, ["Sogo"] = {"Old Sogdian"}, ["Sora"] = {"Sora Sompeng"}, ["Soyo"] = {"Soyombo"}, ["Sund"] = {"Sundanese"}, ["Sunu"] = {"Sunuwar"}, ["Sylo"] = {"Syloti Nagri"}, ["Syrc"] = {"Syriac"}, ["Syre"] = {"Syriac (Estrangelo variant)"}, ["Syrj"] = {"Syriac (Western variant)"}, ["Syrn"] = {"Syriac (Eastern variant)"}, ["Tagb"] = {"Tagbanwa"}, ["Takr"] = {"Takri", "Ṭākrī", "Ṭāṅkrī"}, ["Tale"] = {"Tai Le"}, ["Talu"] = {"New Tai Lue"}, ["Taml"] = {"Tamil"}, ["Tang"] = {"Tangut"}, ["Tavt"] = {"Tai Viet"}, ["Tayo"] = {"Tai Yo"}, ["Telu"] = {"Telugu"}, ["Teng"] = {"Tengwar"}, ["Tfng"] = {"Tifinagh", "Berber"}, ["Tglg"] = {"Tagalog", "Baybayin", "Alibata"}, ["Thaa"] = {"Thaana"}, ["Thai"] = {"Thai"}, ["Tibt"] = {"Tibetan"}, ["Tirh"] = {"Tirhuta"}, ["Tnsa"] = {"Tangsa"}, ["Todr"] = {"Todhri"}, ["Tols"] = {"Tolong Siki"}, ["Toto"] = {"Toto"}, ["Tutg"] = {"Tulu-Tigalari"}, ["Ugar"] = {"Ugaritic"}, ["Vaii"] = {"Vai"}, ["Visp"] = {"Visible Speech"}, ["Vith"] = {"Vithkuqi"}, ["Wara"] = {"Warang Citi", "Varang Kshiti"}, ["Wcho"] = {"Wancho"}, ["Wole"] = {"Woleai"}, ["Xpeo"] = {"Old Persian"}, ["Xsux"] = {"Sumero-Akkadian cuneiform"}, ["Yezi"] = {"Yezidi"}, ["Yiii"] = {"Yi"}, ["Zanb"] = {"Zanabazar Square", "Zanabazarin Dörböljin Useg", "Xewtee Dörböljin Bicig", "Horizontal Square Script"}, ["Zinh"] = {"Code for inherited script"}, ["Zmth"] = {"Mathematical notation"}, ["Zsye"] = {"Symbols (Emoji variant)"}, ["Zsym"] = {"Symbols"}, ["Zxxx"] = {"Code for unwritten documents"}, ["Zyyy"] = {"Code for undetermined script"}, ["Zzzz"] = {"Code for uncoded script"} } c7u9sv80kzrh5jzaij9fynoelyyehwq Module:Lang/data/iana regions 828 163188 746235 733558 2026-04-16T17:41:45Z en>Trappist the monk 0 update to 2026-04-09 data; 746235 Scribunto text/plain -- File-Date: 2026-04-09 return { ["AC"] = {"Ascension Island"}, ["AD"] = {"Andorra"}, ["AE"] = {"United Arab Emirates"}, ["AF"] = {"Afghanistan"}, ["AG"] = {"Antigua and Barbuda"}, ["AI"] = {"Anguilla"}, ["AL"] = {"Albania"}, ["AM"] = {"Armenia"}, ["AO"] = {"Angola"}, ["AQ"] = {"Antarctica"}, ["AR"] = {"Argentina"}, ["AS"] = {"American Samoa"}, ["AT"] = {"Austria"}, ["AU"] = {"Australia"}, ["AW"] = {"Aruba"}, ["AX"] = {"Åland Islands"}, ["AZ"] = {"Azerbaijan"}, ["BA"] = {"Bosnia and Herzegovina"}, ["BB"] = {"Barbados"}, ["BD"] = {"Bangladesh"}, ["BE"] = {"Belgium"}, ["BF"] = {"Burkina Faso"}, ["BG"] = {"Bulgaria"}, ["BH"] = {"Bahrain"}, ["BI"] = {"Burundi"}, ["BJ"] = {"Benin"}, ["BL"] = {"Saint Barthélemy"}, ["BM"] = {"Bermuda"}, ["BN"] = {"Brunei Darussalam"}, ["BO"] = {"Bolivia"}, ["BQ"] = {"Bonaire, Sint Eustatius and Saba"}, ["BR"] = {"Brazil"}, ["BS"] = {"Bahamas"}, ["BT"] = {"Bhutan"}, ["BV"] = {"Bouvet Island"}, ["BW"] = {"Botswana"}, ["BY"] = {"Belarus"}, ["BZ"] = {"Belize"}, ["CA"] = {"Canada"}, ["CC"] = {"Cocos (Keeling) Islands"}, ["CD"] = {"The Democratic Republic of the Congo"}, ["CF"] = {"Central African Republic"}, ["CG"] = {"Congo"}, ["CH"] = {"Switzerland"}, ["CI"] = {"Côte d'Ivoire"}, ["CK"] = {"Cook Islands"}, ["CL"] = {"Chile"}, ["CM"] = {"Cameroon"}, ["CN"] = {"China"}, ["CO"] = {"Colombia"}, ["CP"] = {"Clipperton Island"}, ["CQ"] = {"Sark"}, ["CR"] = {"Costa Rica"}, ["CU"] = {"Cuba"}, ["CV"] = {"Cabo Verde", "Cape Verde"}, ["CW"] = {"Curaçao"}, ["CX"] = {"Christmas Island"}, ["CY"] = {"Cyprus"}, ["CZ"] = {"Czechia", "Czech Republic"}, ["DE"] = {"Germany"}, ["DG"] = {"Diego Garcia"}, ["DJ"] = {"Djibouti"}, ["DK"] = {"Denmark"}, ["DM"] = {"Dominica"}, ["DO"] = {"Dominican Republic"}, ["DZ"] = {"Algeria"}, ["EA"] = {"Ceuta, Melilla"}, ["EC"] = {"Ecuador"}, ["EE"] = {"Estonia"}, ["EG"] = {"Egypt"}, ["EH"] = {"Western Sahara"}, ["ER"] = {"Eritrea"}, ["ES"] = {"Spain"}, ["ET"] = {"Ethiopia"}, ["EU"] = {"European Union"}, ["EZ"] = {"Eurozone"}, ["FI"] = {"Finland"}, ["FJ"] = {"Fiji"}, ["FK"] = {"Falkland Islands (Malvinas)"}, ["FM"] = {"Federated States of Micronesia"}, ["FO"] = {"Faroe Islands"}, ["FR"] = {"France"}, ["GA"] = {"Gabon"}, ["GB"] = {"United Kingdom"}, ["GD"] = {"Grenada"}, ["GE"] = {"Georgia"}, ["GF"] = {"French Guiana"}, ["GG"] = {"Guernsey"}, ["GH"] = {"Ghana"}, ["GI"] = {"Gibraltar"}, ["GL"] = {"Greenland"}, ["GM"] = {"Gambia"}, ["GN"] = {"Guinea"}, ["GP"] = {"Guadeloupe"}, ["GQ"] = {"Equatorial Guinea"}, ["GR"] = {"Greece"}, ["GS"] = {"South Georgia and the South Sandwich Islands"}, ["GT"] = {"Guatemala"}, ["GU"] = {"Guam"}, ["GW"] = {"Guinea-Bissau"}, ["GY"] = {"Guyana"}, ["HK"] = {"Hong Kong"}, ["HM"] = {"Heard Island and McDonald Islands"}, ["HN"] = {"Honduras"}, ["HR"] = {"Croatia"}, ["HT"] = {"Haiti"}, ["HU"] = {"Hungary"}, ["IC"] = {"Canary Islands"}, ["ID"] = {"Indonesia"}, ["IE"] = {"Ireland"}, ["IL"] = {"Israel"}, ["IM"] = {"Isle of Man"}, ["IN"] = {"India"}, ["IO"] = {"British Indian Ocean Territory"}, ["IQ"] = {"Iraq"}, ["IR"] = {"Islamic Republic of Iran"}, ["IS"] = {"Iceland"}, ["IT"] = {"Italy"}, ["JE"] = {"Jersey"}, ["JM"] = {"Jamaica"}, ["JO"] = {"Jordan"}, ["JP"] = {"Japan"}, ["KE"] = {"Kenya"}, ["KG"] = {"Kyrgyzstan"}, ["KH"] = {"Cambodia"}, ["KI"] = {"Kiribati"}, ["KM"] = {"Comoros"}, ["KN"] = {"Saint Kitts and Nevis"}, ["KP"] = {"Democratic People's Republic of Korea"}, ["KR"] = {"Republic of Korea"}, ["KW"] = {"Kuwait"}, ["KY"] = {"Cayman Islands"}, ["KZ"] = {"Kazakhstan"}, ["LA"] = {"Lao People's Democratic Republic"}, ["LB"] = {"Lebanon"}, ["LC"] = {"Saint Lucia"}, ["LI"] = {"Liechtenstein"}, ["LK"] = {"Sri Lanka"}, ["LR"] = {"Liberia"}, ["LS"] = {"Lesotho"}, ["LT"] = {"Lithuania"}, ["LU"] = {"Luxembourg"}, ["LV"] = {"Latvia"}, ["LY"] = {"Libya"}, ["MA"] = {"Morocco"}, ["MC"] = {"Monaco"}, ["MD"] = {"Moldova"}, ["ME"] = {"Montenegro"}, ["MF"] = {"Saint Martin (French part)"}, ["MG"] = {"Madagascar"}, ["MH"] = {"Marshall Islands"}, ["MK"] = {"North Macedonia"}, ["ML"] = {"Mali"}, ["MM"] = {"Myanmar"}, ["MN"] = {"Mongolia"}, ["MO"] = {"Macao"}, ["MP"] = {"Northern Mariana Islands"}, ["MQ"] = {"Martinique"}, ["MR"] = {"Mauritania"}, ["MS"] = {"Montserrat"}, ["MT"] = {"Malta"}, ["MU"] = {"Mauritius"}, ["MV"] = {"Maldives"}, ["MW"] = {"Malawi"}, ["MX"] = {"Mexico"}, ["MY"] = {"Malaysia"}, ["MZ"] = {"Mozambique"}, ["NA"] = {"Namibia"}, ["NC"] = {"New Caledonia"}, ["NE"] = {"Niger"}, ["NF"] = {"Norfolk Island"}, ["NG"] = {"Nigeria"}, ["NI"] = {"Nicaragua"}, ["NL"] = {"Netherlands"}, ["NO"] = {"Norway"}, ["NP"] = {"Nepal"}, ["NR"] = {"Nauru"}, ["NU"] = {"Niue"}, ["NZ"] = {"New Zealand"}, ["OM"] = {"Oman"}, ["PA"] = {"Panama"}, ["PE"] = {"Peru"}, ["PF"] = {"French Polynesia"}, ["PG"] = {"Papua New Guinea"}, ["PH"] = {"Philippines"}, ["PK"] = {"Pakistan"}, ["PL"] = {"Poland"}, ["PM"] = {"Saint Pierre and Miquelon"}, ["PN"] = {"Pitcairn"}, ["PR"] = {"Puerto Rico"}, ["PS"] = {"State of Palestine"}, ["PT"] = {"Portugal"}, ["PW"] = {"Palau"}, ["PY"] = {"Paraguay"}, ["QA"] = {"Qatar"}, ["RE"] = {"Réunion"}, ["RO"] = {"Romania"}, ["RS"] = {"Serbia"}, ["RU"] = {"Russian Federation"}, ["RW"] = {"Rwanda"}, ["SA"] = {"Saudi Arabia"}, ["SB"] = {"Solomon Islands"}, ["SC"] = {"Seychelles"}, ["SD"] = {"Sudan"}, ["SE"] = {"Sweden"}, ["SG"] = {"Singapore"}, ["SH"] = {"Saint Helena, Ascension and Tristan da Cunha"}, ["SI"] = {"Slovenia"}, ["SJ"] = {"Svalbard and Jan Mayen"}, ["SK"] = {"Slovakia"}, ["SL"] = {"Sierra Leone"}, ["SM"] = {"San Marino"}, ["SN"] = {"Senegal"}, ["SO"] = {"Somalia"}, ["SR"] = {"Suriname"}, ["SS"] = {"South Sudan"}, ["ST"] = {"Sao Tome and Principe"}, ["SV"] = {"El Salvador"}, ["SX"] = {"Sint Maarten (Dutch part)"}, ["SY"] = {"Syrian Arab Republic"}, ["SZ"] = {"Eswatini", "eSwatini", "Swaziland"}, ["TA"] = {"Tristan da Cunha"}, ["TC"] = {"Turks and Caicos Islands"}, ["TD"] = {"Chad"}, ["TF"] = {"French Southern Territories"}, ["TG"] = {"Togo"}, ["TH"] = {"Thailand"}, ["TJ"] = {"Tajikistan"}, ["TK"] = {"Tokelau"}, ["TL"] = {"Timor-Leste"}, ["TM"] = {"Turkmenistan"}, ["TN"] = {"Tunisia"}, ["TO"] = {"Tonga"}, ["TR"] = {"Türkiye", "Turkey"}, ["TT"] = {"Trinidad and Tobago"}, ["TV"] = {"Tuvalu"}, ["TW"] = {"Taiwan, Province of China"}, ["TZ"] = {"United Republic of Tanzania"}, ["UA"] = {"Ukraine"}, ["UG"] = {"Uganda"}, ["UM"] = {"United States Minor Outlying Islands"}, ["UN"] = {"United Nations"}, ["US"] = {"United States"}, ["UY"] = {"Uruguay"}, ["UZ"] = {"Uzbekistan"}, ["VA"] = {"Holy See (Vatican City State)"}, ["VC"] = {"Saint Vincent and the Grenadines"}, ["VE"] = {"Venezuela"}, ["VG"] = {"British Virgin Islands"}, ["VI"] = {"U.S. Virgin Islands"}, ["VN"] = {"Viet Nam"}, ["VU"] = {"Vanuatu"}, ["WF"] = {"Wallis and Futuna"}, ["WS"] = {"Samoa"}, ["YE"] = {"Yemen"}, ["YT"] = {"Mayotte"}, ["ZA"] = {"South Africa"}, ["ZM"] = {"Zambia"}, ["ZW"] = {"Zimbabwe"}, ["001"] = {"World"}, ["002"] = {"Africa"}, ["003"] = {"North America"}, ["005"] = {"South America"}, ["009"] = {"Oceania"}, ["011"] = {"Western Africa"}, ["013"] = {"Central America"}, ["014"] = {"Eastern Africa"}, ["015"] = {"Northern Africa"}, ["017"] = {"Middle Africa"}, ["018"] = {"Southern Africa"}, ["019"] = {"Americas"}, ["021"] = {"Northern America"}, ["029"] = {"Caribbean"}, ["030"] = {"Eastern Asia"}, ["034"] = {"Southern Asia"}, ["035"] = {"South-Eastern Asia"}, ["039"] = {"Southern Europe"}, ["053"] = {"Australia and New Zealand"}, ["054"] = {"Melanesia"}, ["057"] = {"Micronesia"}, ["061"] = {"Polynesia"}, ["142"] = {"Asia"}, ["143"] = {"Central Asia"}, ["145"] = {"Western Asia"}, ["150"] = {"Europe"}, ["151"] = {"Eastern Europe"}, ["154"] = {"Northern Europe"}, ["155"] = {"Western Europe"}, ["202"] = {"Sub-Saharan Africa"}, ["419"] = {"Latin America and the Caribbean"} } g6yaur4e17eza63dfjndtg5xzrqcitv 746236 746235 2026-06-12T21:52:04Z Robertsky 51025 1 revision imported from [[:en:Module:Lang/data/iana_regions]]: for workshop activity 746235 Scribunto text/plain -- File-Date: 2026-04-09 return { ["AC"] = {"Ascension Island"}, ["AD"] = {"Andorra"}, ["AE"] = {"United Arab Emirates"}, ["AF"] = {"Afghanistan"}, ["AG"] = {"Antigua and Barbuda"}, ["AI"] = {"Anguilla"}, ["AL"] = {"Albania"}, ["AM"] = {"Armenia"}, ["AO"] = {"Angola"}, ["AQ"] = {"Antarctica"}, ["AR"] = {"Argentina"}, ["AS"] = {"American Samoa"}, ["AT"] = {"Austria"}, ["AU"] = {"Australia"}, ["AW"] = {"Aruba"}, ["AX"] = {"Åland Islands"}, ["AZ"] = {"Azerbaijan"}, ["BA"] = {"Bosnia and Herzegovina"}, ["BB"] = {"Barbados"}, ["BD"] = {"Bangladesh"}, ["BE"] = {"Belgium"}, ["BF"] = {"Burkina Faso"}, ["BG"] = {"Bulgaria"}, ["BH"] = {"Bahrain"}, ["BI"] = {"Burundi"}, ["BJ"] = {"Benin"}, ["BL"] = {"Saint Barthélemy"}, ["BM"] = {"Bermuda"}, ["BN"] = {"Brunei Darussalam"}, ["BO"] = {"Bolivia"}, ["BQ"] = {"Bonaire, Sint Eustatius and Saba"}, ["BR"] = {"Brazil"}, ["BS"] = {"Bahamas"}, ["BT"] = {"Bhutan"}, ["BV"] = {"Bouvet Island"}, ["BW"] = {"Botswana"}, ["BY"] = {"Belarus"}, ["BZ"] = {"Belize"}, ["CA"] = {"Canada"}, ["CC"] = {"Cocos (Keeling) Islands"}, ["CD"] = {"The Democratic Republic of the Congo"}, ["CF"] = {"Central African Republic"}, ["CG"] = {"Congo"}, ["CH"] = {"Switzerland"}, ["CI"] = {"Côte d'Ivoire"}, ["CK"] = {"Cook Islands"}, ["CL"] = {"Chile"}, ["CM"] = {"Cameroon"}, ["CN"] = {"China"}, ["CO"] = {"Colombia"}, ["CP"] = {"Clipperton Island"}, ["CQ"] = {"Sark"}, ["CR"] = {"Costa Rica"}, ["CU"] = {"Cuba"}, ["CV"] = {"Cabo Verde", "Cape Verde"}, ["CW"] = {"Curaçao"}, ["CX"] = {"Christmas Island"}, ["CY"] = {"Cyprus"}, ["CZ"] = {"Czechia", "Czech Republic"}, ["DE"] = {"Germany"}, ["DG"] = {"Diego Garcia"}, ["DJ"] = {"Djibouti"}, ["DK"] = {"Denmark"}, ["DM"] = {"Dominica"}, ["DO"] = {"Dominican Republic"}, ["DZ"] = {"Algeria"}, ["EA"] = {"Ceuta, Melilla"}, ["EC"] = {"Ecuador"}, ["EE"] = {"Estonia"}, ["EG"] = {"Egypt"}, ["EH"] = {"Western Sahara"}, ["ER"] = {"Eritrea"}, ["ES"] = {"Spain"}, ["ET"] = {"Ethiopia"}, ["EU"] = {"European Union"}, ["EZ"] = {"Eurozone"}, ["FI"] = {"Finland"}, ["FJ"] = {"Fiji"}, ["FK"] = {"Falkland Islands (Malvinas)"}, ["FM"] = {"Federated States of Micronesia"}, ["FO"] = {"Faroe Islands"}, ["FR"] = {"France"}, ["GA"] = {"Gabon"}, ["GB"] = {"United Kingdom"}, ["GD"] = {"Grenada"}, ["GE"] = {"Georgia"}, ["GF"] = {"French Guiana"}, ["GG"] = {"Guernsey"}, ["GH"] = {"Ghana"}, ["GI"] = {"Gibraltar"}, ["GL"] = {"Greenland"}, ["GM"] = {"Gambia"}, ["GN"] = {"Guinea"}, ["GP"] = {"Guadeloupe"}, ["GQ"] = {"Equatorial Guinea"}, ["GR"] = {"Greece"}, ["GS"] = {"South Georgia and the South Sandwich Islands"}, ["GT"] = {"Guatemala"}, ["GU"] = {"Guam"}, ["GW"] = {"Guinea-Bissau"}, ["GY"] = {"Guyana"}, ["HK"] = {"Hong Kong"}, ["HM"] = {"Heard Island and McDonald Islands"}, ["HN"] = {"Honduras"}, ["HR"] = {"Croatia"}, ["HT"] = {"Haiti"}, ["HU"] = {"Hungary"}, ["IC"] = {"Canary Islands"}, ["ID"] = {"Indonesia"}, ["IE"] = {"Ireland"}, ["IL"] = {"Israel"}, ["IM"] = {"Isle of Man"}, ["IN"] = {"India"}, ["IO"] = {"British Indian Ocean Territory"}, ["IQ"] = {"Iraq"}, ["IR"] = {"Islamic Republic of Iran"}, ["IS"] = {"Iceland"}, ["IT"] = {"Italy"}, ["JE"] = {"Jersey"}, ["JM"] = {"Jamaica"}, ["JO"] = {"Jordan"}, ["JP"] = {"Japan"}, ["KE"] = {"Kenya"}, ["KG"] = {"Kyrgyzstan"}, ["KH"] = {"Cambodia"}, ["KI"] = {"Kiribati"}, ["KM"] = {"Comoros"}, ["KN"] = {"Saint Kitts and Nevis"}, ["KP"] = {"Democratic People's Republic of Korea"}, ["KR"] = {"Republic of Korea"}, ["KW"] = {"Kuwait"}, ["KY"] = {"Cayman Islands"}, ["KZ"] = {"Kazakhstan"}, ["LA"] = {"Lao People's Democratic Republic"}, ["LB"] = {"Lebanon"}, ["LC"] = {"Saint Lucia"}, ["LI"] = {"Liechtenstein"}, ["LK"] = {"Sri Lanka"}, ["LR"] = {"Liberia"}, ["LS"] = {"Lesotho"}, ["LT"] = {"Lithuania"}, ["LU"] = {"Luxembourg"}, ["LV"] = {"Latvia"}, ["LY"] = {"Libya"}, ["MA"] = {"Morocco"}, ["MC"] = {"Monaco"}, ["MD"] = {"Moldova"}, ["ME"] = {"Montenegro"}, ["MF"] = {"Saint Martin (French part)"}, ["MG"] = {"Madagascar"}, ["MH"] = {"Marshall Islands"}, ["MK"] = {"North Macedonia"}, ["ML"] = {"Mali"}, ["MM"] = {"Myanmar"}, ["MN"] = {"Mongolia"}, ["MO"] = {"Macao"}, ["MP"] = {"Northern Mariana Islands"}, ["MQ"] = {"Martinique"}, ["MR"] = {"Mauritania"}, ["MS"] = {"Montserrat"}, ["MT"] = {"Malta"}, ["MU"] = {"Mauritius"}, ["MV"] = {"Maldives"}, ["MW"] = {"Malawi"}, ["MX"] = {"Mexico"}, ["MY"] = {"Malaysia"}, ["MZ"] = {"Mozambique"}, ["NA"] = {"Namibia"}, ["NC"] = {"New Caledonia"}, ["NE"] = {"Niger"}, ["NF"] = {"Norfolk Island"}, ["NG"] = {"Nigeria"}, ["NI"] = {"Nicaragua"}, ["NL"] = {"Netherlands"}, ["NO"] = {"Norway"}, ["NP"] = {"Nepal"}, ["NR"] = {"Nauru"}, ["NU"] = {"Niue"}, ["NZ"] = {"New Zealand"}, ["OM"] = {"Oman"}, ["PA"] = {"Panama"}, ["PE"] = {"Peru"}, ["PF"] = {"French Polynesia"}, ["PG"] = {"Papua New Guinea"}, ["PH"] = {"Philippines"}, ["PK"] = {"Pakistan"}, ["PL"] = {"Poland"}, ["PM"] = {"Saint Pierre and Miquelon"}, ["PN"] = {"Pitcairn"}, ["PR"] = {"Puerto Rico"}, ["PS"] = {"State of Palestine"}, ["PT"] = {"Portugal"}, ["PW"] = {"Palau"}, ["PY"] = {"Paraguay"}, ["QA"] = {"Qatar"}, ["RE"] = {"Réunion"}, ["RO"] = {"Romania"}, ["RS"] = {"Serbia"}, ["RU"] = {"Russian Federation"}, ["RW"] = {"Rwanda"}, ["SA"] = {"Saudi Arabia"}, ["SB"] = {"Solomon Islands"}, ["SC"] = {"Seychelles"}, ["SD"] = {"Sudan"}, ["SE"] = {"Sweden"}, ["SG"] = {"Singapore"}, ["SH"] = {"Saint Helena, Ascension and Tristan da Cunha"}, ["SI"] = {"Slovenia"}, ["SJ"] = {"Svalbard and Jan Mayen"}, ["SK"] = {"Slovakia"}, ["SL"] = {"Sierra Leone"}, ["SM"] = {"San Marino"}, ["SN"] = {"Senegal"}, ["SO"] = {"Somalia"}, ["SR"] = {"Suriname"}, ["SS"] = {"South Sudan"}, ["ST"] = {"Sao Tome and Principe"}, ["SV"] = {"El Salvador"}, ["SX"] = {"Sint Maarten (Dutch part)"}, ["SY"] = {"Syrian Arab Republic"}, ["SZ"] = {"Eswatini", "eSwatini", "Swaziland"}, ["TA"] = {"Tristan da Cunha"}, ["TC"] = {"Turks and Caicos Islands"}, ["TD"] = {"Chad"}, ["TF"] = {"French Southern Territories"}, ["TG"] = {"Togo"}, ["TH"] = {"Thailand"}, ["TJ"] = {"Tajikistan"}, ["TK"] = {"Tokelau"}, ["TL"] = {"Timor-Leste"}, ["TM"] = {"Turkmenistan"}, ["TN"] = {"Tunisia"}, ["TO"] = {"Tonga"}, ["TR"] = {"Türkiye", "Turkey"}, ["TT"] = {"Trinidad and Tobago"}, ["TV"] = {"Tuvalu"}, ["TW"] = {"Taiwan, Province of China"}, ["TZ"] = {"United Republic of Tanzania"}, ["UA"] = {"Ukraine"}, ["UG"] = {"Uganda"}, ["UM"] = {"United States Minor Outlying Islands"}, ["UN"] = {"United Nations"}, ["US"] = {"United States"}, ["UY"] = {"Uruguay"}, ["UZ"] = {"Uzbekistan"}, ["VA"] = {"Holy See (Vatican City State)"}, ["VC"] = {"Saint Vincent and the Grenadines"}, ["VE"] = {"Venezuela"}, ["VG"] = {"British Virgin Islands"}, ["VI"] = {"U.S. Virgin Islands"}, ["VN"] = {"Viet Nam"}, ["VU"] = {"Vanuatu"}, ["WF"] = {"Wallis and Futuna"}, ["WS"] = {"Samoa"}, ["YE"] = {"Yemen"}, ["YT"] = {"Mayotte"}, ["ZA"] = {"South Africa"}, ["ZM"] = {"Zambia"}, ["ZW"] = {"Zimbabwe"}, ["001"] = {"World"}, ["002"] = {"Africa"}, ["003"] = {"North America"}, ["005"] = {"South America"}, ["009"] = {"Oceania"}, ["011"] = {"Western Africa"}, ["013"] = {"Central America"}, ["014"] = {"Eastern Africa"}, ["015"] = {"Northern Africa"}, ["017"] = {"Middle Africa"}, ["018"] = {"Southern Africa"}, ["019"] = {"Americas"}, ["021"] = {"Northern America"}, ["029"] = {"Caribbean"}, ["030"] = {"Eastern Asia"}, ["034"] = {"Southern Asia"}, ["035"] = {"South-Eastern Asia"}, ["039"] = {"Southern Europe"}, ["053"] = {"Australia and New Zealand"}, ["054"] = {"Melanesia"}, ["057"] = {"Micronesia"}, ["061"] = {"Polynesia"}, ["142"] = {"Asia"}, ["143"] = {"Central Asia"}, ["145"] = {"Western Asia"}, ["150"] = {"Europe"}, ["151"] = {"Eastern Europe"}, ["154"] = {"Northern Europe"}, ["155"] = {"Western Europe"}, ["202"] = {"Sub-Saharan Africa"}, ["419"] = {"Latin America and the Caribbean"} } g6yaur4e17eza63dfjndtg5xzrqcitv Module:Lang/data/iana variants 828 163189 746237 733560 2026-04-16T17:41:55Z en>Trappist the monk 0 update to 2026-04-09 data; 746237 Scribunto text/plain -- File-Date: 2026-04-09 return { ["1606nict"] = { ["descriptions"] = {"Late Middle French (to 1606)"}, ["prefixes"] = {"frm"}, }, ["1694acad"] = { ["descriptions"] = {"Early Modern French"}, ["prefixes"] = {"fr"}, }, ["1901"] = { ["descriptions"] = {"Traditional German orthography"}, ["prefixes"] = {"de"}, }, ["1959acad"] = { ["descriptions"] = {"\"Academic\" (\"governmental\") variant of Belarusian as codified in 1959"}, ["prefixes"] = {"be"}, }, ["1994"] = { ["descriptions"] = {"Standardized Resian orthography"}, ["prefixes"] = {"sl-rozaj", "sl-rozaj-biske", "sl-rozaj-njiva", "sl-rozaj-osojs", "sl-rozaj-solba"}, }, ["1996"] = { ["descriptions"] = {"German orthography of 1996"}, ["prefixes"] = {"de"}, }, ["abl1943"] = { ["descriptions"] = {"Orthographic formulation of 1943 - Official in Brazil (Formulário Ortográfico de 1943 - Oficial no Brasil)"}, ["prefixes"] = {"pt-br"}, }, ["akhmimic"] = { ["descriptions"] = {"Akhmimic dialect of Coptic"}, ["prefixes"] = {"cop"}, }, ["akuapem"] = { ["descriptions"] = {"Akuapem Twi"}, ["prefixes"] = {"tw"}, }, ["alalc97"] = { ["descriptions"] = {"ALA-LC Romanization, 1997 edition"}, ["prefixes"] = {}, }, ["aluku"] = { ["descriptions"] = {"Aluku dialect", "Boni dialect"}, ["prefixes"] = {"djk"}, }, ["anpezo"] = { ["descriptions"] = {"Anpezo standard of Ladin"}, ["prefixes"] = {"lld"}, }, ["ao1990"] = { ["descriptions"] = {"Portuguese Language Orthographic Agreement of 1990 (Acordo Ortográfico da Língua Portuguesa de 1990)"}, ["prefixes"] = {"pt", "gl"}, }, ["aranes"] = { ["descriptions"] = {"Aranese"}, ["prefixes"] = {"oc"}, }, ["arkaika"] = { ["descriptions"] = {"Arcaicam Esperantom", "Arkaika Esperanto"}, ["prefixes"] = {"eo"}, }, ["asante"] = { ["descriptions"] = {"Asante Twi", "Ashanti Twi"}, ["prefixes"] = {"tw"}, }, ["auvern"] = { ["descriptions"] = {"Auvergnat"}, ["prefixes"] = {"oc"}, }, ["baku1926"] = { ["descriptions"] = {"Unified Turkic Latin Alphabet (Historical)"}, ["prefixes"] = {"az", "ba", "crh", "kk", "krc", "ky", "sah", "tk", "tt", "uz"}, }, ["balanka"] = { ["descriptions"] = {"The Balanka dialect of Anii"}, ["prefixes"] = {"blo"}, }, ["barla"] = { ["descriptions"] = {"The Barlavento dialect group of Kabuverdianu"}, ["prefixes"] = {"kea"}, }, ["basiceng"] = { ["descriptions"] = {"Basic English"}, ["prefixes"] = {"en"}, }, ["bauddha"] = { ["descriptions"] = {"Buddhist Hybrid Sanskrit"}, ["prefixes"] = {"sa"}, }, ["bciav"] = { ["descriptions"] = {"BCI Blissymbolics AV"}, ["prefixes"] = {"zbl"}, }, ["bcizbl"] = { ["descriptions"] = {"BCI Blissymbolics"}, ["prefixes"] = {"zbl"}, }, ["biscayan"] = { ["descriptions"] = {"Biscayan dialect of Basque"}, ["prefixes"] = {"eu"}, }, ["biske"] = { ["descriptions"] = {"The San Giorgio dialect of Resian", "The Bila dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["blasl"] = { ["descriptions"] = {"Black American Sign Language dialect"}, ["prefixes"] = {"ase", "sgn-ase"}, }, ["bohairic"] = { ["descriptions"] = {"Bohairic dialect of Coptic"}, ["prefixes"] = {"cop"}, }, ["bohoric"] = { ["descriptions"] = {"Slovene in Bohorič alphabet"}, ["prefixes"] = {"sl"}, }, ["boont"] = { ["descriptions"] = {"Boontling"}, ["prefixes"] = {"en"}, }, ["bornholm"] = { ["descriptions"] = {"Bornholmsk"}, ["prefixes"] = {"da"}, }, ["cisaup"] = { ["descriptions"] = {"Cisalpine"}, ["prefixes"] = {"oc"}, }, ["colb1945"] = { ["descriptions"] = {"Portuguese-Brazilian Orthographic Convention of 1945 (Convenção Ortográfica Luso-Brasileira de 1945)"}, ["prefixes"] = {"pt"}, }, ["cornu"] = { ["descriptions"] = {"Cornu-English", "Cornish English", "Anglo-Cornish"}, ["prefixes"] = {"en"}, }, ["creiss"] = { ["descriptions"] = {"Occitan variants of the Croissant area"}, ["prefixes"] = {"oc"}, }, ["dajnko"] = { ["descriptions"] = {"Slovene in Dajnko alphabet"}, ["prefixes"] = {"sl"}, }, ["ekavsk"] = { ["descriptions"] = {"Serbian with Ekavian pronunciation"}, ["prefixes"] = {"sr", "sr-latn", "sr-cyrl"}, }, ["emodeng"] = { ["descriptions"] = {"Early Modern English (1500-1700)"}, ["prefixes"] = {"en"}, }, ["fascia"] = { ["descriptions"] = {"Fascia standard of Ladin"}, ["prefixes"] = {"lld"}, }, ["fayyumic"] = { ["descriptions"] = {"Fayyumic dialect of Coptic"}, ["prefixes"] = {"cop"}, }, ["fodom"] = { ["descriptions"] = {"Fodom standard of Ladin"}, ["prefixes"] = {"lld"}, }, ["fonipa"] = { ["descriptions"] = {"International Phonetic Alphabet"}, ["prefixes"] = {}, }, ["fonkirsh"] = { ["descriptions"] = {"Kirshenbaum Phonetic Alphabet"}, ["prefixes"] = {}, }, ["fonnapa"] = { ["descriptions"] = {"North American Phonetic Alphabet", "Americanist Phonetic Notation"}, ["prefixes"] = {}, }, ["fonupa"] = { ["descriptions"] = {"Uralic Phonetic Alphabet"}, ["prefixes"] = {}, }, ["fonxsamp"] = { ["descriptions"] = {"X-SAMPA transcription"}, ["prefixes"] = {}, }, ["gallo"] = { ["descriptions"] = {"Gallo"}, ["prefixes"] = {"fr"}, }, ["gascon"] = { ["descriptions"] = {"Gascon"}, ["prefixes"] = {"oc"}, }, ["gherd"] = { ["descriptions"] = {"Gherdëina standard of Ladin"}, ["prefixes"] = {"lld"}, }, ["grclass"] = { ["descriptions"] = {"Classical Occitan orthography"}, ["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"}, }, ["grital"] = { ["descriptions"] = {"Italian-inspired Occitan orthography"}, ["prefixes"] = {"oc", "oc-cisaup", "oc-nicard", "oc-provenc"}, }, ["grmistr"] = { ["descriptions"] = {"Mistralian or Mistralian-inspired Occitan orthography"}, ["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"}, }, ["hanoi"] = { ["descriptions"] = {"The Hà Nội variant of Vietnamese"}, ["prefixes"] = {"vi"}, }, ["hepburn"] = { ["descriptions"] = {"Hepburn romanization"}, ["prefixes"] = {"ja-latn"}, }, ["hognorsk"] = { ["descriptions"] = {"Norwegian in Høgnorsk (High Norwegian) orthography"}, ["prefixes"] = {"nn"}, }, ["hsistemo"] = { ["descriptions"] = {"Standard H-system orthographic fallback for spelling Esperanto"}, ["prefixes"] = {"eo"}, }, ["huett"] = { ["descriptions"] = {"The Huế (province Thừa Thiên) variant of Vietnamese"}, ["prefixes"] = {"vi"}, }, ["ijekavsk"] = { ["descriptions"] = {"Serbian with Ijekavian pronunciation"}, ["prefixes"] = {"sr", "sr-latn", "sr-cyrl"}, }, ["itihasa"] = { ["descriptions"] = {"Epic Sanskrit"}, ["prefixes"] = {"sa"}, }, ["ivanchov"] = { ["descriptions"] = {"Bulgarian in 1899 orthography"}, ["prefixes"] = {"bg"}, }, ["jauer"] = { ["descriptions"] = {"Jauer dialect of Romansh"}, ["prefixes"] = {"rm"}, }, ["jyutping"] = { ["descriptions"] = {"Jyutping Cantonese Romanization"}, ["prefixes"] = {"yue"}, }, ["kkcor"] = { ["descriptions"] = {"Common Cornish orthography of Revived Cornish"}, ["prefixes"] = {"kw"}, }, ["kleinsch"] = { ["descriptions"] = {"Kleinschmidt orthography", "Allattaasitaamut"}, ["prefixes"] = {"kl", "kl-tunumiit"}, }, ["kociewie"] = { ["descriptions"] = {"The Kociewie dialect of Polish"}, ["prefixes"] = {"pl"}, }, ["kscor"] = { ["descriptions"] = {"Standard Cornish orthography of Revived Cornish", "Kernowek Standard"}, ["prefixes"] = {"kw"}, }, ["leidentr"] = { ["descriptions"] = {"Ancient Egyptian in Leiden Unified Transliteration"}, ["prefixes"] = {"egy"}, }, ["lemosin"] = { ["descriptions"] = {"Limousin"}, ["prefixes"] = {"oc"}, }, ["lengadoc"] = { ["descriptions"] = {"Languedocien"}, ["prefixes"] = {"oc"}, }, ["lipaw"] = { ["descriptions"] = {"The Lipovaz dialect of Resian", "The Lipovec dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["ltg1929"] = { ["descriptions"] = {"The Latgalian language orthography codified in 1929"}, ["prefixes"] = {"ltg"}, }, ["ltg2007"] = { ["descriptions"] = {"The Latgalian language orthography codified in the language law in 2007"}, ["prefixes"] = {"ltg"}, }, ["luna1918"] = { ["descriptions"] = {"Post-1917 Russian orthography"}, ["prefixes"] = {"ru"}, }, ["lycopol"] = { ["descriptions"] = {"Lycopolitan alias Subakhmimic dialect of Coptic"}, ["prefixes"] = {"cop"}, }, ["mdcegyp"] = { ["descriptions"] = {"Ancient Egyptian hieroglyphs encoded in Manuel de Codage"}, ["prefixes"] = {"egy"}, }, ["mdctrans"] = { ["descriptions"] = {"Ancient Egyptian transliteration encoded in Manuel de Codage"}, ["prefixes"] = {"egy"}, }, ["mesokem"] = { ["descriptions"] = {"Mesokemic alias Oxyrhynchite dialect of Coptic"}, ["prefixes"] = {"cop"}, }, ["metelko"] = { ["descriptions"] = {"Slovene in Metelko alphabet"}, ["prefixes"] = {"sl"}, }, ["monoton"] = { ["descriptions"] = {"Monotonic Greek"}, ["prefixes"] = {"el"}, }, ["ndyuka"] = { ["descriptions"] = {"Ndyuka dialect", "Aukan dialect"}, ["prefixes"] = {"djk"}, }, ["nedis"] = { ["descriptions"] = {"Natisone dialect", "Nadiza dialect"}, ["prefixes"] = {"sl"}, }, ["newfound"] = { ["descriptions"] = {"Newfoundland English"}, ["prefixes"] = {"en-ca"}, }, ["nicard"] = { ["descriptions"] = {"Niçard"}, ["prefixes"] = {"oc"}, }, ["njiva"] = { ["descriptions"] = {"The Gniva dialect of Resian", "The Njiva dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["nulik"] = { ["descriptions"] = {"Volapük nulik", "Volapük perevidöl", "Volapük nulädik", "de Jong's Volapük", "New Volapük", "Revised Volapük", "Modern Volapük"}, ["prefixes"] = {"vo"}, }, ["osojs"] = { ["descriptions"] = {"The Oseacco dialect of Resian", "The Osojane dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["oxendict"] = { ["descriptions"] = {"Oxford English Dictionary spelling"}, ["prefixes"] = {"en"}, }, ["pahawh2"] = { ["descriptions"] = {"Pahawh Hmong Second Stage Reduced orthography"}, ["prefixes"] = {"mww", "hnj"}, }, ["pahawh3"] = { ["descriptions"] = {"Pahawh Hmong Third Stage Reduced orthography"}, ["prefixes"] = {"mww", "hnj"}, }, ["pahawh4"] = { ["descriptions"] = {"Pahawh Hmong Final Version orthography"}, ["prefixes"] = {"mww", "hnj"}, }, ["pamaka"] = { ["descriptions"] = {"Pamaka dialect"}, ["prefixes"] = {"djk"}, }, ["peano"] = { ["descriptions"] = {"Latino Sine Flexione", "Interlingua de API", "Interlingua de Peano"}, ["prefixes"] = {"la"}, }, ["pehoeji"] = { ["descriptions"] = {"Hokkien Vernacular Romanization System", "Pe̍h-ōe-jī orthography/romanization"}, ["prefixes"] = {"nan-latn"}, }, ["petr1708"] = { ["descriptions"] = {"Petrine orthography"}, ["prefixes"] = {"ru"}, }, ["pinyin"] = { ["descriptions"] = {"Pinyin romanization"}, ["prefixes"] = {"zh-latn", "bo-latn"}, }, ["polyton"] = { ["descriptions"] = {"Polytonic Greek"}, ["prefixes"] = {"el"}, }, ["provenc"] = { ["descriptions"] = {"Provençal"}, ["prefixes"] = {"oc"}, }, ["puter"] = { ["descriptions"] = {"Puter idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["rigik"] = { ["descriptions"] = {"Volapük rigik", "Schleyer's Volapük", "Original Volapük", "Classic Volapük"}, ["prefixes"] = {"vo"}, }, ["rozaj"] = { ["descriptions"] = {"Resian", "Resianic", "Rezijan"}, ["prefixes"] = {"sl"}, }, ["rumgr"] = { ["descriptions"] = {"Rumantsch Grischun"}, ["prefixes"] = {"rm"}, }, ["sahidic"] = { ["descriptions"] = {"Sahidic dialect of Coptic"}, ["prefixes"] = {"cop"}, }, ["saigon"] = { ["descriptions"] = {"The Sài Gòn variant of Vietnamese"}, ["prefixes"] = {"vi"}, }, ["scotland"] = { ["descriptions"] = {"Scottish Standard English"}, ["prefixes"] = {"en"}, }, ["scouse"] = { ["descriptions"] = {"Scouse"}, ["prefixes"] = {"en"}, }, ["simple"] = { ["descriptions"] = {"Simplified form"}, ["prefixes"] = {}, }, ["slepe"] = { ["descriptions"] = {"Sorbian dialect of Schleife"}, ["prefixes"] = {"dsb"}, }, ["solba"] = { ["descriptions"] = {"The Stolvizza dialect of Resian", "The Solbica dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["sotav"] = { ["descriptions"] = {"The Sotavento dialect group of Kabuverdianu"}, ["prefixes"] = {"kea"}, }, ["spanglis"] = { ["descriptions"] = {"Spanglish"}, ["prefixes"] = {"en", "es"}, }, ["stadi"] = { ["descriptions"] = {"The \"Stadin slangi\" dialect of Finnish"}, ["prefixes"] = {"fi"}, }, ["surmiran"] = { ["descriptions"] = {"Surmiran idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["sursilv"] = { ["descriptions"] = {"Sursilvan idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["sutsilv"] = { ["descriptions"] = {"Sutsilvan idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["synnejyl"] = { ["descriptions"] = {"Synnejysk", "South Jutish"}, ["prefixes"] = {"da"}, }, ["taglish"] = { ["descriptions"] = {"Tagalog-English code-switching"}, ["prefixes"] = {"en", "tl", "fil"}, }, ["tailo"] = { ["descriptions"] = {"Taiwanese Hokkien Romanization System for Hokkien languages", "Tâi-lô orthography/romanization"}, ["prefixes"] = {"nan-latn"}, }, ["tarask"] = { ["descriptions"] = {"Belarusian in Taraskievica orthography"}, ["prefixes"] = {"be"}, }, ["tongyong"] = { ["descriptions"] = {"Tongyong Pinyin romanization"}, ["prefixes"] = {"zh-latn"}, }, ["tunumiit"] = { ["descriptions"] = {"Tunumiisiut", "East Greenlandic", "Østgrønlandsk"}, ["prefixes"] = {"kl"}, }, ["uccor"] = { ["descriptions"] = {"Unified Cornish orthography of Revived Cornish"}, ["prefixes"] = {"kw"}, }, ["ucrcor"] = { ["descriptions"] = {"Unified Cornish Revised orthography of Revived Cornish"}, ["prefixes"] = {"kw"}, }, ["ulster"] = { ["descriptions"] = {"Ulster dialect of Scots"}, ["prefixes"] = {"sco"}, }, ["unifon"] = { ["descriptions"] = {"Unifon phonetic alphabet"}, ["prefixes"] = {"en", "hup", "kyh", "tol", "yur"}, }, ["valbadia"] = { ["descriptions"] = {"Val Badia standard of Ladin"}, ["prefixes"] = {"lld"}, }, ["valencia"] = { ["descriptions"] = {"Valencian"}, ["prefixes"] = {"ca"}, }, ["vallader"] = { ["descriptions"] = {"Vallader idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["vecdruka"] = { ["descriptions"] = {"Latvian orthography used before 1920s (\"vecā druka\")"}, ["prefixes"] = {"lv"}, }, ["viennese"] = { ["descriptions"] = {"The Viennese dialect of German"}, ["prefixes"] = {"de"}, }, ["vivaraup"] = { ["descriptions"] = {"Vivaro-Alpine"}, ["prefixes"] = {"oc"}, }, ["wadegile"] = { ["descriptions"] = {"Wade-Giles romanization"}, ["prefixes"] = {"zh-latn"}, }, ["xsistemo"] = { ["descriptions"] = {"Standard X-system orthographic fallback for spelling Esperanto"}, ["prefixes"] = {"eo"}, } } hihn3g9afhb8a4id9j49c2eq9e038vk 746238 746237 2026-06-12T21:52:05Z Robertsky 51025 1 revision imported from [[:en:Module:Lang/data/iana_variants]]: for workshop activity 746237 Scribunto text/plain -- File-Date: 2026-04-09 return { ["1606nict"] = { ["descriptions"] = {"Late Middle French (to 1606)"}, ["prefixes"] = {"frm"}, }, ["1694acad"] = { ["descriptions"] = {"Early Modern French"}, ["prefixes"] = {"fr"}, }, ["1901"] = { ["descriptions"] = {"Traditional German orthography"}, ["prefixes"] = {"de"}, }, ["1959acad"] = { ["descriptions"] = {"\"Academic\" (\"governmental\") variant of Belarusian as codified in 1959"}, ["prefixes"] = {"be"}, }, ["1994"] = { ["descriptions"] = {"Standardized Resian orthography"}, ["prefixes"] = {"sl-rozaj", "sl-rozaj-biske", "sl-rozaj-njiva", "sl-rozaj-osojs", "sl-rozaj-solba"}, }, ["1996"] = { ["descriptions"] = {"German orthography of 1996"}, ["prefixes"] = {"de"}, }, ["abl1943"] = { ["descriptions"] = {"Orthographic formulation of 1943 - Official in Brazil (Formulário Ortográfico de 1943 - Oficial no Brasil)"}, ["prefixes"] = {"pt-br"}, }, ["akhmimic"] = { ["descriptions"] = {"Akhmimic dialect of Coptic"}, ["prefixes"] = {"cop"}, }, ["akuapem"] = { ["descriptions"] = {"Akuapem Twi"}, ["prefixes"] = {"tw"}, }, ["alalc97"] = { ["descriptions"] = {"ALA-LC Romanization, 1997 edition"}, ["prefixes"] = {}, }, ["aluku"] = { ["descriptions"] = {"Aluku dialect", "Boni dialect"}, ["prefixes"] = {"djk"}, }, ["anpezo"] = { ["descriptions"] = {"Anpezo standard of Ladin"}, ["prefixes"] = {"lld"}, }, ["ao1990"] = { ["descriptions"] = {"Portuguese Language Orthographic Agreement of 1990 (Acordo Ortográfico da Língua Portuguesa de 1990)"}, ["prefixes"] = {"pt", "gl"}, }, ["aranes"] = { ["descriptions"] = {"Aranese"}, ["prefixes"] = {"oc"}, }, ["arkaika"] = { ["descriptions"] = {"Arcaicam Esperantom", "Arkaika Esperanto"}, ["prefixes"] = {"eo"}, }, ["asante"] = { ["descriptions"] = {"Asante Twi", "Ashanti Twi"}, ["prefixes"] = {"tw"}, }, ["auvern"] = { ["descriptions"] = {"Auvergnat"}, ["prefixes"] = {"oc"}, }, ["baku1926"] = { ["descriptions"] = {"Unified Turkic Latin Alphabet (Historical)"}, ["prefixes"] = {"az", "ba", "crh", "kk", "krc", "ky", "sah", "tk", "tt", "uz"}, }, ["balanka"] = { ["descriptions"] = {"The Balanka dialect of Anii"}, ["prefixes"] = {"blo"}, }, ["barla"] = { ["descriptions"] = {"The Barlavento dialect group of Kabuverdianu"}, ["prefixes"] = {"kea"}, }, ["basiceng"] = { ["descriptions"] = {"Basic English"}, ["prefixes"] = {"en"}, }, ["bauddha"] = { ["descriptions"] = {"Buddhist Hybrid Sanskrit"}, ["prefixes"] = {"sa"}, }, ["bciav"] = { ["descriptions"] = {"BCI Blissymbolics AV"}, ["prefixes"] = {"zbl"}, }, ["bcizbl"] = { ["descriptions"] = {"BCI Blissymbolics"}, ["prefixes"] = {"zbl"}, }, ["biscayan"] = { ["descriptions"] = {"Biscayan dialect of Basque"}, ["prefixes"] = {"eu"}, }, ["biske"] = { ["descriptions"] = {"The San Giorgio dialect of Resian", "The Bila dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["blasl"] = { ["descriptions"] = {"Black American Sign Language dialect"}, ["prefixes"] = {"ase", "sgn-ase"}, }, ["bohairic"] = { ["descriptions"] = {"Bohairic dialect of Coptic"}, ["prefixes"] = {"cop"}, }, ["bohoric"] = { ["descriptions"] = {"Slovene in Bohorič alphabet"}, ["prefixes"] = {"sl"}, }, ["boont"] = { ["descriptions"] = {"Boontling"}, ["prefixes"] = {"en"}, }, ["bornholm"] = { ["descriptions"] = {"Bornholmsk"}, ["prefixes"] = {"da"}, }, ["cisaup"] = { ["descriptions"] = {"Cisalpine"}, ["prefixes"] = {"oc"}, }, ["colb1945"] = { ["descriptions"] = {"Portuguese-Brazilian Orthographic Convention of 1945 (Convenção Ortográfica Luso-Brasileira de 1945)"}, ["prefixes"] = {"pt"}, }, ["cornu"] = { ["descriptions"] = {"Cornu-English", "Cornish English", "Anglo-Cornish"}, ["prefixes"] = {"en"}, }, ["creiss"] = { ["descriptions"] = {"Occitan variants of the Croissant area"}, ["prefixes"] = {"oc"}, }, ["dajnko"] = { ["descriptions"] = {"Slovene in Dajnko alphabet"}, ["prefixes"] = {"sl"}, }, ["ekavsk"] = { ["descriptions"] = {"Serbian with Ekavian pronunciation"}, ["prefixes"] = {"sr", "sr-latn", "sr-cyrl"}, }, ["emodeng"] = { ["descriptions"] = {"Early Modern English (1500-1700)"}, ["prefixes"] = {"en"}, }, ["fascia"] = { ["descriptions"] = {"Fascia standard of Ladin"}, ["prefixes"] = {"lld"}, }, ["fayyumic"] = { ["descriptions"] = {"Fayyumic dialect of Coptic"}, ["prefixes"] = {"cop"}, }, ["fodom"] = { ["descriptions"] = {"Fodom standard of Ladin"}, ["prefixes"] = {"lld"}, }, ["fonipa"] = { ["descriptions"] = {"International Phonetic Alphabet"}, ["prefixes"] = {}, }, ["fonkirsh"] = { ["descriptions"] = {"Kirshenbaum Phonetic Alphabet"}, ["prefixes"] = {}, }, ["fonnapa"] = { ["descriptions"] = {"North American Phonetic Alphabet", "Americanist Phonetic Notation"}, ["prefixes"] = {}, }, ["fonupa"] = { ["descriptions"] = {"Uralic Phonetic Alphabet"}, ["prefixes"] = {}, }, ["fonxsamp"] = { ["descriptions"] = {"X-SAMPA transcription"}, ["prefixes"] = {}, }, ["gallo"] = { ["descriptions"] = {"Gallo"}, ["prefixes"] = {"fr"}, }, ["gascon"] = { ["descriptions"] = {"Gascon"}, ["prefixes"] = {"oc"}, }, ["gherd"] = { ["descriptions"] = {"Gherdëina standard of Ladin"}, ["prefixes"] = {"lld"}, }, ["grclass"] = { ["descriptions"] = {"Classical Occitan orthography"}, ["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"}, }, ["grital"] = { ["descriptions"] = {"Italian-inspired Occitan orthography"}, ["prefixes"] = {"oc", "oc-cisaup", "oc-nicard", "oc-provenc"}, }, ["grmistr"] = { ["descriptions"] = {"Mistralian or Mistralian-inspired Occitan orthography"}, ["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"}, }, ["hanoi"] = { ["descriptions"] = {"The Hà Nội variant of Vietnamese"}, ["prefixes"] = {"vi"}, }, ["hepburn"] = { ["descriptions"] = {"Hepburn romanization"}, ["prefixes"] = {"ja-latn"}, }, ["hognorsk"] = { ["descriptions"] = {"Norwegian in Høgnorsk (High Norwegian) orthography"}, ["prefixes"] = {"nn"}, }, ["hsistemo"] = { ["descriptions"] = {"Standard H-system orthographic fallback for spelling Esperanto"}, ["prefixes"] = {"eo"}, }, ["huett"] = { ["descriptions"] = {"The Huế (province Thừa Thiên) variant of Vietnamese"}, ["prefixes"] = {"vi"}, }, ["ijekavsk"] = { ["descriptions"] = {"Serbian with Ijekavian pronunciation"}, ["prefixes"] = {"sr", "sr-latn", "sr-cyrl"}, }, ["itihasa"] = { ["descriptions"] = {"Epic Sanskrit"}, ["prefixes"] = {"sa"}, }, ["ivanchov"] = { ["descriptions"] = {"Bulgarian in 1899 orthography"}, ["prefixes"] = {"bg"}, }, ["jauer"] = { ["descriptions"] = {"Jauer dialect of Romansh"}, ["prefixes"] = {"rm"}, }, ["jyutping"] = { ["descriptions"] = {"Jyutping Cantonese Romanization"}, ["prefixes"] = {"yue"}, }, ["kkcor"] = { ["descriptions"] = {"Common Cornish orthography of Revived Cornish"}, ["prefixes"] = {"kw"}, }, ["kleinsch"] = { ["descriptions"] = {"Kleinschmidt orthography", "Allattaasitaamut"}, ["prefixes"] = {"kl", "kl-tunumiit"}, }, ["kociewie"] = { ["descriptions"] = {"The Kociewie dialect of Polish"}, ["prefixes"] = {"pl"}, }, ["kscor"] = { ["descriptions"] = {"Standard Cornish orthography of Revived Cornish", "Kernowek Standard"}, ["prefixes"] = {"kw"}, }, ["leidentr"] = { ["descriptions"] = {"Ancient Egyptian in Leiden Unified Transliteration"}, ["prefixes"] = {"egy"}, }, ["lemosin"] = { ["descriptions"] = {"Limousin"}, ["prefixes"] = {"oc"}, }, ["lengadoc"] = { ["descriptions"] = {"Languedocien"}, ["prefixes"] = {"oc"}, }, ["lipaw"] = { ["descriptions"] = {"The Lipovaz dialect of Resian", "The Lipovec dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["ltg1929"] = { ["descriptions"] = {"The Latgalian language orthography codified in 1929"}, ["prefixes"] = {"ltg"}, }, ["ltg2007"] = { ["descriptions"] = {"The Latgalian language orthography codified in the language law in 2007"}, ["prefixes"] = {"ltg"}, }, ["luna1918"] = { ["descriptions"] = {"Post-1917 Russian orthography"}, ["prefixes"] = {"ru"}, }, ["lycopol"] = { ["descriptions"] = {"Lycopolitan alias Subakhmimic dialect of Coptic"}, ["prefixes"] = {"cop"}, }, ["mdcegyp"] = { ["descriptions"] = {"Ancient Egyptian hieroglyphs encoded in Manuel de Codage"}, ["prefixes"] = {"egy"}, }, ["mdctrans"] = { ["descriptions"] = {"Ancient Egyptian transliteration encoded in Manuel de Codage"}, ["prefixes"] = {"egy"}, }, ["mesokem"] = { ["descriptions"] = {"Mesokemic alias Oxyrhynchite dialect of Coptic"}, ["prefixes"] = {"cop"}, }, ["metelko"] = { ["descriptions"] = {"Slovene in Metelko alphabet"}, ["prefixes"] = {"sl"}, }, ["monoton"] = { ["descriptions"] = {"Monotonic Greek"}, ["prefixes"] = {"el"}, }, ["ndyuka"] = { ["descriptions"] = {"Ndyuka dialect", "Aukan dialect"}, ["prefixes"] = {"djk"}, }, ["nedis"] = { ["descriptions"] = {"Natisone dialect", "Nadiza dialect"}, ["prefixes"] = {"sl"}, }, ["newfound"] = { ["descriptions"] = {"Newfoundland English"}, ["prefixes"] = {"en-ca"}, }, ["nicard"] = { ["descriptions"] = {"Niçard"}, ["prefixes"] = {"oc"}, }, ["njiva"] = { ["descriptions"] = {"The Gniva dialect of Resian", "The Njiva dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["nulik"] = { ["descriptions"] = {"Volapük nulik", "Volapük perevidöl", "Volapük nulädik", "de Jong's Volapük", "New Volapük", "Revised Volapük", "Modern Volapük"}, ["prefixes"] = {"vo"}, }, ["osojs"] = { ["descriptions"] = {"The Oseacco dialect of Resian", "The Osojane dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["oxendict"] = { ["descriptions"] = {"Oxford English Dictionary spelling"}, ["prefixes"] = {"en"}, }, ["pahawh2"] = { ["descriptions"] = {"Pahawh Hmong Second Stage Reduced orthography"}, ["prefixes"] = {"mww", "hnj"}, }, ["pahawh3"] = { ["descriptions"] = {"Pahawh Hmong Third Stage Reduced orthography"}, ["prefixes"] = {"mww", "hnj"}, }, ["pahawh4"] = { ["descriptions"] = {"Pahawh Hmong Final Version orthography"}, ["prefixes"] = {"mww", "hnj"}, }, ["pamaka"] = { ["descriptions"] = {"Pamaka dialect"}, ["prefixes"] = {"djk"}, }, ["peano"] = { ["descriptions"] = {"Latino Sine Flexione", "Interlingua de API", "Interlingua de Peano"}, ["prefixes"] = {"la"}, }, ["pehoeji"] = { ["descriptions"] = {"Hokkien Vernacular Romanization System", "Pe̍h-ōe-jī orthography/romanization"}, ["prefixes"] = {"nan-latn"}, }, ["petr1708"] = { ["descriptions"] = {"Petrine orthography"}, ["prefixes"] = {"ru"}, }, ["pinyin"] = { ["descriptions"] = {"Pinyin romanization"}, ["prefixes"] = {"zh-latn", "bo-latn"}, }, ["polyton"] = { ["descriptions"] = {"Polytonic Greek"}, ["prefixes"] = {"el"}, }, ["provenc"] = { ["descriptions"] = {"Provençal"}, ["prefixes"] = {"oc"}, }, ["puter"] = { ["descriptions"] = {"Puter idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["rigik"] = { ["descriptions"] = {"Volapük rigik", "Schleyer's Volapük", "Original Volapük", "Classic Volapük"}, ["prefixes"] = {"vo"}, }, ["rozaj"] = { ["descriptions"] = {"Resian", "Resianic", "Rezijan"}, ["prefixes"] = {"sl"}, }, ["rumgr"] = { ["descriptions"] = {"Rumantsch Grischun"}, ["prefixes"] = {"rm"}, }, ["sahidic"] = { ["descriptions"] = {"Sahidic dialect of Coptic"}, ["prefixes"] = {"cop"}, }, ["saigon"] = { ["descriptions"] = {"The Sài Gòn variant of Vietnamese"}, ["prefixes"] = {"vi"}, }, ["scotland"] = { ["descriptions"] = {"Scottish Standard English"}, ["prefixes"] = {"en"}, }, ["scouse"] = { ["descriptions"] = {"Scouse"}, ["prefixes"] = {"en"}, }, ["simple"] = { ["descriptions"] = {"Simplified form"}, ["prefixes"] = {}, }, ["slepe"] = { ["descriptions"] = {"Sorbian dialect of Schleife"}, ["prefixes"] = {"dsb"}, }, ["solba"] = { ["descriptions"] = {"The Stolvizza dialect of Resian", "The Solbica dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["sotav"] = { ["descriptions"] = {"The Sotavento dialect group of Kabuverdianu"}, ["prefixes"] = {"kea"}, }, ["spanglis"] = { ["descriptions"] = {"Spanglish"}, ["prefixes"] = {"en", "es"}, }, ["stadi"] = { ["descriptions"] = {"The \"Stadin slangi\" dialect of Finnish"}, ["prefixes"] = {"fi"}, }, ["surmiran"] = { ["descriptions"] = {"Surmiran idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["sursilv"] = { ["descriptions"] = {"Sursilvan idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["sutsilv"] = { ["descriptions"] = {"Sutsilvan idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["synnejyl"] = { ["descriptions"] = {"Synnejysk", "South Jutish"}, ["prefixes"] = {"da"}, }, ["taglish"] = { ["descriptions"] = {"Tagalog-English code-switching"}, ["prefixes"] = {"en", "tl", "fil"}, }, ["tailo"] = { ["descriptions"] = {"Taiwanese Hokkien Romanization System for Hokkien languages", "Tâi-lô orthography/romanization"}, ["prefixes"] = {"nan-latn"}, }, ["tarask"] = { ["descriptions"] = {"Belarusian in Taraskievica orthography"}, ["prefixes"] = {"be"}, }, ["tongyong"] = { ["descriptions"] = {"Tongyong Pinyin romanization"}, ["prefixes"] = {"zh-latn"}, }, ["tunumiit"] = { ["descriptions"] = {"Tunumiisiut", "East Greenlandic", "Østgrønlandsk"}, ["prefixes"] = {"kl"}, }, ["uccor"] = { ["descriptions"] = {"Unified Cornish orthography of Revived Cornish"}, ["prefixes"] = {"kw"}, }, ["ucrcor"] = { ["descriptions"] = {"Unified Cornish Revised orthography of Revived Cornish"}, ["prefixes"] = {"kw"}, }, ["ulster"] = { ["descriptions"] = {"Ulster dialect of Scots"}, ["prefixes"] = {"sco"}, }, ["unifon"] = { ["descriptions"] = {"Unifon phonetic alphabet"}, ["prefixes"] = {"en", "hup", "kyh", "tol", "yur"}, }, ["valbadia"] = { ["descriptions"] = {"Val Badia standard of Ladin"}, ["prefixes"] = {"lld"}, }, ["valencia"] = { ["descriptions"] = {"Valencian"}, ["prefixes"] = {"ca"}, }, ["vallader"] = { ["descriptions"] = {"Vallader idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["vecdruka"] = { ["descriptions"] = {"Latvian orthography used before 1920s (\"vecā druka\")"}, ["prefixes"] = {"lv"}, }, ["viennese"] = { ["descriptions"] = {"The Viennese dialect of German"}, ["prefixes"] = {"de"}, }, ["vivaraup"] = { ["descriptions"] = {"Vivaro-Alpine"}, ["prefixes"] = {"oc"}, }, ["wadegile"] = { ["descriptions"] = {"Wade-Giles romanization"}, ["prefixes"] = {"zh-latn"}, }, ["xsistemo"] = { ["descriptions"] = {"Standard X-system orthographic fallback for spelling Esperanto"}, ["prefixes"] = {"eo"}, } } hihn3g9afhb8a4id9j49c2eq9e038vk Module:Lang/data/iana suppressed scripts 828 163190 746239 733562 2026-04-16T17:41:58Z en>Trappist the monk 0 update to 2026-04-09 data; 746239 Scribunto text/plain -- File-Date: 2026-04-09 return { ["Arab"] = {"ar", "fa", "ps", "ur"}, ["Armn"] = {"hy"}, ["Beng"] = {"as", "bn"}, ["Blis"] = {"zbl"}, ["Cyrl"] = {"ab", "be", "bg", "kk", "mk", "ru", "uk"}, ["Deva"] = {"hi", "mr", "ne", "kok", "mai"}, ["Ethi"] = {"am", "ti"}, ["Geor"] = {"ka"}, ["Grek"] = {"el"}, ["Gujr"] = {"gu"}, ["Guru"] = {"pa"}, ["Hebr"] = {"he", "iw", "yi"}, ["Jpan"] = {"ja"}, ["Khmr"] = {"km"}, ["Knda"] = {"kn"}, ["Kore"] = {"ko"}, ["Laoo"] = {"lo"}, ["Latn"] = {"af", "ay", "bs", "ca", "ch", "cs", "cy", "da", "de", "en", "eo", "es", "et", "eu", "fi", "fj", "fo", "fr", "fy", "ga", "gl", "gn", "gv", "hr", "ht", "hu", "id", "in", "is", "it", "kl", "la", "lb", "ln", "lt", "lv", "mg", "mh", "mo", "ms", "mt", "na", "nb", "nd", "nl", "nn", "no", "nr", "ny", "om", "pl", "pt", "qu", "rm", "rn", "ro", "rw", "sg", "sk", "sl", "sm", "so", "sq", "ss", "st", "sv", "sw", "tl", "tn", "to", "tr", "ts", "ve", "vi", "xh", "zu", "dsb", "frr", "frs", "gsw", "hsb", "men", "nds", "niu", "nso", "tem", "tkl", "tmh", "tpi", "tvl"}, ["Mlym"] = {"ml"}, ["Mymr"] = {"my"}, ["Nkoo"] = {"nqo"}, ["Orya"] = {"or"}, ["Sinh"] = {"si"}, ["Taml"] = {"ta"}, ["Telu"] = {"te"}, ["Thaa"] = {"dv"}, ["Thai"] = {"th"}, ["Tibt"] = {"dz"} } 279k6466bl7suzghdzqpj4bl8bc5wui 746240 746239 2026-06-12T21:52:05Z Robertsky 51025 1 revision imported from [[:en:Module:Lang/data/iana_suppressed_scripts]]: for workshop activity 746239 Scribunto text/plain -- File-Date: 2026-04-09 return { ["Arab"] = {"ar", "fa", "ps", "ur"}, ["Armn"] = {"hy"}, ["Beng"] = {"as", "bn"}, ["Blis"] = {"zbl"}, ["Cyrl"] = {"ab", "be", "bg", "kk", "mk", "ru", "uk"}, ["Deva"] = {"hi", "mr", "ne", "kok", "mai"}, ["Ethi"] = {"am", "ti"}, ["Geor"] = {"ka"}, ["Grek"] = {"el"}, ["Gujr"] = {"gu"}, ["Guru"] = {"pa"}, ["Hebr"] = {"he", "iw", "yi"}, ["Jpan"] = {"ja"}, ["Khmr"] = {"km"}, ["Knda"] = {"kn"}, ["Kore"] = {"ko"}, ["Laoo"] = {"lo"}, ["Latn"] = {"af", "ay", "bs", "ca", "ch", "cs", "cy", "da", "de", "en", "eo", "es", "et", "eu", "fi", "fj", "fo", "fr", "fy", "ga", "gl", "gn", "gv", "hr", "ht", "hu", "id", "in", "is", "it", "kl", "la", "lb", "ln", "lt", "lv", "mg", "mh", "mo", "ms", "mt", "na", "nb", "nd", "nl", "nn", "no", "nr", "ny", "om", "pl", "pt", "qu", "rm", "rn", "ro", "rw", "sg", "sk", "sl", "sm", "so", "sq", "ss", "st", "sv", "sw", "tl", "tn", "to", "tr", "ts", "ve", "vi", "xh", "zu", "dsb", "frr", "frs", "gsw", "hsb", "men", "nds", "niu", "nso", "tem", "tkl", "tmh", "tpi", "tvl"}, ["Mlym"] = {"ml"}, ["Mymr"] = {"my"}, ["Nkoo"] = {"nqo"}, ["Orya"] = {"or"}, ["Sinh"] = {"si"}, ["Taml"] = {"ta"}, ["Telu"] = {"te"}, ["Thaa"] = {"dv"}, ["Thai"] = {"th"}, ["Tibt"] = {"dz"} } 279k6466bl7suzghdzqpj4bl8bc5wui Module:Lang/data/is latn data 828 163193 746243 733584 2026-06-12T17:04:35Z en>Trappist the monk 0 update to unicode 17.0.0; 746243 Scribunto text/plain --[[--------------------------< S I N G L E S _ T >----------------------------------------------------------- list of Latn and Zyyy (common) codepoints that are not included in <ranges_t> taken from Module:Unicode data/scripts and a local copy of https://www.unicode.org/Public/17.0.0/ucd/ScriptExtensions.txt using Module:Lang/data/make is latn data ]] local singles_t = { [170] = true, -- 00AA [186] = true, -- 00BA [215] = true, -- 00D7 [247] = true, -- 00F7 [787] = true, -- 0313 [856] = true, -- 0358 [862] = true, -- 035E [884] = true, -- 0374 [894] = true, -- 037E [901] = true, -- 0385 [903] = true, -- 0387 [1541] = true, -- 0605 [1548] = true, -- 060C [1563] = true, -- 061B [1567] = true, -- 061F [1600] = true, -- 0640 [1757] = true, -- 06DD [2274] = true, -- 08E2 [3647] = true, -- 0E3F [4347] = true, -- 10FB [6149] = true, -- 1805 [7379] = true, -- 1CD3 [7393] = true, -- 1CE1 [7418] = true, -- 1CFA [7672] = true, -- 1DF8 [8305] = true, -- 2071 [8319] = true, -- 207F [8432] = true, -- 20F0 [8498] = true, -- 2132 [8526] = true, -- 214E [12294] = true, -- 3006 [12448] = true, -- 30A0 [12783] = true, -- 31EF [13055] = true, -- 32FF [43310] = true, -- A92E [43471] = true, -- A9CF [43867] = true, -- AB5B [65279] = true, -- FEFF [65392] = true, -- FF70 [119970] = true, -- 1D4A2 [119995] = true, -- 1D4BB [120134] = true, -- 1D546 [129008] = true, -- 1F7F0 [129736] = true, -- 1FAC8 [917505] = true, -- E0001 } --[[--------------------------< R A N G E S _ T >------------------------------------------------------------- list of Latn and Zyyy (common) codepoints taken from Module:Unicode data/scripts and a local copy of https://www.unicode.org/Public/16.0.0/ucd/ScriptExtensions.txt ]] local ranges_t = { {0, 169}, -- 0000..00A9 {171, 185}, -- 00AB..00B9 {187, 214}, -- 00BB..00D6 {216, 246}, -- 00D8..00F6 {248, 745}, -- 00F8..02E9 {748, 782}, -- 02EC..030E {784, 785}, -- 0310..0311 {803, 805}, -- 0323..0325 {813, 814}, -- 032D..032E {816, 817}, -- 0330..0331 {867, 879}, -- 0363..036F {1157, 1158}, -- 0485..0486 {2385, 2386}, -- 0951..0952 {2404, 2405}, -- 0964..0965 {4053, 4056}, -- 0FD5..0FD8 {5867, 5869}, -- 16EB..16ED {5941, 5942}, -- 1735..1736 {6146, 6147}, -- 1802..1803 {7401, 7404}, -- 1CE9..1CEC {7406, 7411}, -- 1CEE..1CF3 {7413, 7415}, -- 1CF5..1CF7 {7424, 7461}, -- 1D00..1D25 {7468, 7516}, -- 1D2C..1D5C {7522, 7525}, -- 1D62..1D65 {7531, 7543}, -- 1D6B..1D77 {7545, 7614}, -- 1D79..1DBE {7680, 7935}, -- 1E00..1EFF {8192, 8203}, -- 2000..200B {8206, 8292}, -- 200E..2064 {8294, 8304}, -- 2066..2070 {8308, 8318}, -- 2074..207E {8320, 8334}, -- 2080..208E {8336, 8348}, -- 2090..209C {8352, 8385}, -- 20A0..20C1 {8448, 8485}, -- 2100..2125 {8487, 8497}, -- 2127..2131 {8499, 8525}, -- 2133..214D {8527, 8587}, -- 214F..218B {8592, 9257}, -- 2190..2429 {9280, 9290}, -- 2440..244A {9312, 10239}, -- 2460..27FF {10496, 11123}, -- 2900..2B73 {11126, 11263}, -- 2B76..2BFF {11360, 11391}, -- 2C60..2C7F {11776, 11869}, -- 2E00..2E5D {12272, 12292}, -- 2FF0..3004 {12296, 12320}, -- 3008..3020 {12336, 12343}, -- 3030..3037 {12348, 12351}, -- 303C..303F {12443, 12444}, -- 309B..309C {12539, 12540}, -- 30FB..30FC {12688, 12703}, -- 3190..319F {12736, 12773}, -- 31C0..31E5 {12832, 12895}, -- 3220..325F {12927, 13007}, -- 327F..32CF {13144, 13311}, -- 3358..33FF {19904, 19967}, -- 4DC0..4DFF {42752, 42972}, -- A700..A7DC {42993, 43007}, -- A7F1..A7FF {43056, 43065}, -- A830..A839 {43824, 43866}, -- AB30..AB5A {43868, 43876}, -- AB5C..AB64 {43878, 43883}, -- AB66..AB6B {64256, 64262}, -- FB00..FB06 {64830, 64831}, -- FD3E..FD3F {65040, 65049}, -- FE10..FE19 {65072, 65106}, -- FE30..FE52 {65108, 65126}, -- FE54..FE66 {65128, 65131}, -- FE68..FE6B {65281, 65381}, -- FF01..FF65 {65438, 65439}, -- FF9E..FF9F {65504, 65510}, -- FFE0..FFE6 {65512, 65518}, -- FFE8..FFEE {65529, 65533}, -- FFF9..FFFD {65792, 65794}, -- 10100..10102 {65799, 65843}, -- 10107..10133 {65847, 65855}, -- 10137..1013F {65936, 65948}, -- 10190..1019C {66000, 66044}, -- 101D0..101FC {66273, 66299}, -- 102E1..102FB {67456, 67461}, -- 10780..10785 {67463, 67504}, -- 10787..107B0 {67506, 67514}, -- 107B2..107BA {113824, 113827}, -- 1BCA0..1BCA3 {117760, 118012}, -- 1CC00..1CCFC {118016, 118451}, -- 1CD00..1CEB3 {118458, 118480}, -- 1CEBA..1CED0 {118496, 118512}, -- 1CEE0..1CEF0 {118608, 118723}, -- 1CF50..1CFC3 {118784, 119029}, -- 1D000..1D0F5 {119040, 119078}, -- 1D100..1D126 {119081, 119142}, -- 1D129..1D166 {119146, 119162}, -- 1D16A..1D17A {119171, 119172}, -- 1D183..1D184 {119180, 119209}, -- 1D18C..1D1A9 {119214, 119274}, -- 1D1AE..1D1EA {119488, 119507}, -- 1D2C0..1D2D3 {119520, 119539}, -- 1D2E0..1D2F3 {119552, 119638}, -- 1D300..1D356 {119648, 119672}, -- 1D360..1D378 {119808, 119892}, -- 1D400..1D454 {119894, 119964}, -- 1D456..1D49C {119966, 119967}, -- 1D49E..1D49F {119973, 119974}, -- 1D4A5..1D4A6 {119977, 119980}, -- 1D4A9..1D4AC {119982, 119993}, -- 1D4AE..1D4B9 {119997, 120003}, -- 1D4BD..1D4C3 {120005, 120069}, -- 1D4C5..1D505 {120071, 120074}, -- 1D507..1D50A {120077, 120084}, -- 1D50D..1D514 {120086, 120092}, -- 1D516..1D51C {120094, 120121}, -- 1D51E..1D539 {120123, 120126}, -- 1D53B..1D53E {120128, 120132}, -- 1D540..1D544 {120138, 120144}, -- 1D54A..1D550 {120146, 120485}, -- 1D552..1D6A5 {120488, 120779}, -- 1D6A8..1D7CB {120782, 120831}, -- 1D7CE..1D7FF {122624, 122654}, -- 1DF00..1DF1E {122661, 122666}, -- 1DF25..1DF2A {126065, 126132}, -- 1EC71..1ECB4 {126209, 126269}, -- 1ED01..1ED3D {126976, 127019}, -- 1F000..1F02B {127024, 127123}, -- 1F030..1F093 {127136, 127150}, -- 1F0A0..1F0AE {127153, 127167}, -- 1F0B1..1F0BF {127169, 127183}, -- 1F0C1..1F0CF {127185, 127221}, -- 1F0D1..1F0F5 {127232, 127405}, -- 1F100..1F1AD {127462, 127487}, -- 1F1E6..1F1FF {127489, 127490}, -- 1F201..1F202 {127504, 127547}, -- 1F210..1F23B {127552, 127560}, -- 1F240..1F248 {127568, 127569}, -- 1F250..1F251 {127584, 127589}, -- 1F260..1F265 {127744, 128728}, -- 1F300..1F6D8 {128732, 128748}, -- 1F6DC..1F6EC {128752, 128764}, -- 1F6F0..1F6FC {128768, 128985}, -- 1F700..1F7D9 {128992, 129003}, -- 1F7E0..1F7EB {129024, 129035}, -- 1F800..1F80B {129040, 129095}, -- 1F810..1F847 {129104, 129113}, -- 1F850..1F859 {129120, 129159}, -- 1F860..1F887 {129168, 129197}, -- 1F890..1F8AD {129200, 129211}, -- 1F8B0..1F8BB {129216, 129217}, -- 1F8C0..1F8C1 {129232, 129240}, -- 1F8D0..1F8D8 {129280, 129623}, -- 1F900..1FA57 {129632, 129645}, -- 1FA60..1FA6D {129648, 129660}, -- 1FA70..1FA7C {129664, 129674}, -- 1FA80..1FA8A {129678, 129734}, -- 1FA8E..1FAC6 {129741, 129756}, -- 1FACD..1FADC {129759, 129770}, -- 1FADF..1FAEA {129775, 129784}, -- 1FAEF..1FAF8 {129792, 129938}, -- 1FB00..1FB92 {129940, 130042}, -- 1FB94..1FBFA {917536, 917631}, -- E0020..E007F } --[[--------------------------< S P E C I A L S _ T >--------------------------------------------------------- list of individual language-specific non-Latn and non-Zyyy codepoints; these codepoints commonly used in transliterations. This list is manually currated so is most likely incomplete. keys to <specials_t> are decimal codepoints; other keys are language tags (always lowercase) of language transliterations that use these non-Latn codepoints. ]] local specials_t = { [788] = { -- U+0314: COMBINING REVERSED COMMA ABOVE ["hy"] = true, -- Armenian }, [794] = { -- U+031A: COMBINING LEFT ANGLE ABOVE ["ltc"] = true, -- Middle Chinese; is this really IPA? }, [795] = { -- U+031B: COMBINING HORN ["th"] = true, -- Thai }, [806] = { -- U+0326: COMBINING COMMA BELOW ["ab"] = true, -- Abkhaz ["kca"] = true, -- Khanty ["xal"] = true, -- Kalmyk or Oirat }, [807] = { -- U+0327: COMBINING CEDILLA ["fa"] = true, -- Persian }, [809] = { -- U+0329: COMBINING VERTICAL LINE BELOW ["ab"] = true, -- Abkhaz ["sa"] = true, -- Sanskrit }, [815] = { -- U+032F: COMBINING INVERTED BREVE BELOW ["mong"] = true, -- Mongolian ["xsc"] = true, -- Scythian }, [818] = { -- U+0332: COMBINING LOW LINE ["ar"] = true, -- Arabic ["hbo"] = true, -- Ancient Hebrew ["he"] = true, -- Hebrew ["jpa"] = true, -- Jewish Palestinian Aramaic ["mdh"] = true, -- Maguindanaon ["otk"] = true, -- Old Turkish }, [831] = { -- U+033F: COMBINING DOUBLE OVERLINE ["mnp"] = true, -- Northern Min Chinese, Jian'ou dialect }, [855] = { -- U+0357: COMBINING RIGHT HALF RING ABOVE ["egy"] = true, -- Ancient Egyptian }, [863] = { -- U+035F: COMBINING DOUBLE MACRON BELOW ["am"] = true, -- Amharic ["ar"] = true, -- Arabic ["dv"] = true, -- Dhivehi, Divehi, or Maldivian ["fa"] = true, -- Persian ["hi"] = true, -- Hindi ["inc"] = true, -- Indic languages ["ur"] = true, -- Urdu }, [864] = { -- U+0360: COMBINING DOUBLE TILDE ["hi"] = true, -- Hindi }, [865] = { -- U+0361: COMBINING DOUBLE INVERTED BREVE ["be"] = true, -- Belarusian ["ltc"] = true, -- Middle Chinese; is this really IPA? ["ru"] = true, -- Russian ["rue"] = true, -- Rusyn ["sem"] = true, -- Semitic languages ["sit"] = true, -- Sino-Tibetan languages ["tt"] = true, -- Tatar }, [916] = { -- U+0394: GREEK CAPITAL LETTER DELTA ["xsc"] = true, -- Scythian ["xsc-x-pontic"] = true, -- Pontic Scythian }, [920] = { -- U+0398: GREEK CAPITAL LETTER THETA ["ae"] = true, -- Avestan }, [934] = { -- U+03A6: GREEK CAPITAL LETTER PHI ["xle"] = true, -- Lemnian }, [945] = { -- U+03B1: GREEK SMALL LETTER ALPHA ["apc"] = true, -- Levantine Arabic }, [946] = { -- U+03B2: GREEK SMALL LETTER BETA ["ae"] = true, -- Avestan ["gha"] = true, -- Ghadamès ["ougr"] = true, -- Old Uyghur ["sem"] = true, -- Semitic languages ["syc"] = true, -- Classical Syriac ["wuu"] = true, -- Shanghainese variety of Wu Chinese }, [947] = { -- U+03B3: GREEK SMALL LETTER GAMMA ["ae"] = true, -- Avestan ["ltc"] = true, -- Late Middle Chinese ["mn"] = true, -- Mongolian ["och"] = true, -- Old Chinese ["ougr"] = true, -- Old Uyghur ["pal"] = true, -- Middle Persian ["syc"] = true, -- Classical Syriac ["syr"] = true, -- Syriac ["xal"] = true, -- Kalmyk or Oirat ["xng"] = true, -- Middle Mongolian ["xsc"] = true, -- Scythian ["ydg"] = true, -- Yidgha ["mong"] = true, -- Mongolian }, [948] = { -- U+03B4: GREEK SMALL LETTER DELTA ["ae"] = true, -- Avestan ["ougr"] = true, -- Old Uyghur ["sog"] = true, -- Sogdian ["sogd"] = true, -- Sogdian ["syc"] = true, -- Classical Syriac ["xpr"] = true, -- Parthian ["xsc"] = true, -- Scythian ["xsc-x-pontic"] = true, -- Pontic Scythian }, [952] = { -- U+03B8: GREEK SMALL LETTER THETA ["ae"] = true, -- Avestan ["ba"] = true, -- Bashkir ["cms"] = true, -- Messapic ["ett"] = true, -- Etruscan ["hur"] = true, -- Halkomelem ["ira"] = true, -- Iranian languages ["my"] = true, -- Burmese ["pal"] = true, -- Middle Persian (Pahlavi) ["peo"] = true, -- Old Persian ["sa"] = true, -- Sanskrit ["sem"] = true, -- Semitic languages ["syc"] = true, -- Classical Syriac ["syr"] = true, -- Syriac ["xme"] = true, -- Median ["xpg"] = true, -- Phrygian ["xpr"] = true, -- Parthian ["xsc"] = true, -- Scythian }, [955] = { -- U+03BB: GREEK SMALL LETTER LAMDA ["xcr"] = true, -- Carian ["xld"] = true, -- Lydian }, [963] = { -- U+03C3: GREEK SMALL LETTER SIGMA ["ett"] = true, -- Etruscan }, [964] = { -- U+03C4: GREEK SMALL LETTER TAU ["xld"] = true, -- Lydian }, [966] = { -- U+03C6: GREEK SMALL LETTER PHI ["ett"] = true, -- Etruscan }, [967] = { -- U+03C7: GREEK SMALL LETTER CHI ["ett"] = true, -- Etruscan ["gem"] = true, -- Germanic languages ["hur"] = true, -- Halkomelem ["kbd"] = true, -- Kabardian ["ltc"] = true, -- Late Middle Chinese ["och"] = true, -- Old Chinese ["xlc"] = true, -- Lycian ["xle"] = true, -- Lemnian }, [968] = { -- U+03C8: GREEK SMALL LETTER PSI ["ett"] = true, -- Etruscan }, [977] = { -- U+03D1: GREEK THETA SYMBOL (cursive form) ["ae"] = true, -- Avestan ["ira"] = true, -- Iranian languages ["peo"] = true, -- Old Persian ["xme"] = true, -- Median ["xsc"] = true, -- Scythian ["xsc-x-pontic"] = true, -- Pontic Scythian }, [1098] = { -- U+044A: CYRILLIC SMALL LETTER HARD SIGN ["ady"] = true, -- Adyghe ["cu"] = true, -- Church Slavic ["zls"] = true, -- South Slavic languages }, [1100] = { -- U+044C: CYRILLIC SMALL LETTER SOFT SIGN ["az"] = true, -- Azerbaijani ["cu"] = true, -- Church Slavonic ["dng"] = true, -- Dungan ["ru"] = true, -- Russian ["tt"] = true, -- Tatar ["tyv"] = true, -- Tuvinian }, [1278] = { -- U+04FE: CYRILLIC CAPITAL LETTER HA WITH STROKE ["av"] = true, -- Avar }, [1279] = { -- U+04FF: CYRILLIC SMALL LETTER HA WITH STROKE ["av"] = true, -- Avar }, [8113] = { -- U+1FB1: GREEK SMALL LETTER ALPHA WITH MACRON ["apc"] = true, -- Levantine Arabic }, [8190] = { -- U+1FFE: GREEK DASIA ["ar"] = true, -- Arabic (Ayin) ["xcl"] = true, -- Classical Armenian }, [19978] = { -- U+4E0A: [CJK Unified Ideographs] ["wuu"] = true, -- Wu Chinese tone marker }, [20837] = { -- U+5165: [CJK Unified Ideographs] ["wuu"] = true, -- Wu Chinese tone marker }, [21435] = { -- U+53BB: [CJK Unified Ideographs] ["wuu"] = true, -- Wu Chinese tone marker }, [24179] = { -- U+5E73: [CJK Unified Ideographs] ["wuu"] = true, -- Wu Chinese tone marker }, [38451] = { -- U+9633: [CJK Unified Ideographs] (Yang) ["wuu"] = true, -- Suzhou dialect of Wu Chinese tone marker --[[Suzhou dialect#Tones]] }, [38452] = { -- U+9634: [CJK Unified Ideographs] (Yin) ["wuu"] = true, -- Suzhou dialect of Wu Chinese tone marker --[[Suzhou dialect#Tones]] }, [65056] = { -- U+FE20: COMBINING LIGATURE LEFT HALF ["ru"] = true, -- Russian }, [65057] = { -- U+FE21: COMBINING LIGATURE RIGHT HALF ["ru"] = true, -- Russian }, } --[[--------------------------< E X P O R T S >--------------------------------------------------------------- ]] return { ranges_t = ranges_t, singles_t = singles_t, specials_t = specials_t, sizeof_ranges_t = #ranges_t, } dc83p4l9k8mwwdqbirq3l5ieeolwkb8 746244 746243 2026-06-12T21:52:05Z Robertsky 51025 1 revision imported from [[:en:Module:Lang/data/is_latn_data]]: for workshop activity 746243 Scribunto text/plain --[[--------------------------< S I N G L E S _ T >----------------------------------------------------------- list of Latn and Zyyy (common) codepoints that are not included in <ranges_t> taken from Module:Unicode data/scripts and a local copy of https://www.unicode.org/Public/17.0.0/ucd/ScriptExtensions.txt using Module:Lang/data/make is latn data ]] local singles_t = { [170] = true, -- 00AA [186] = true, -- 00BA [215] = true, -- 00D7 [247] = true, -- 00F7 [787] = true, -- 0313 [856] = true, -- 0358 [862] = true, -- 035E [884] = true, -- 0374 [894] = true, -- 037E [901] = true, -- 0385 [903] = true, -- 0387 [1541] = true, -- 0605 [1548] = true, -- 060C [1563] = true, -- 061B [1567] = true, -- 061F [1600] = true, -- 0640 [1757] = true, -- 06DD [2274] = true, -- 08E2 [3647] = true, -- 0E3F [4347] = true, -- 10FB [6149] = true, -- 1805 [7379] = true, -- 1CD3 [7393] = true, -- 1CE1 [7418] = true, -- 1CFA [7672] = true, -- 1DF8 [8305] = true, -- 2071 [8319] = true, -- 207F [8432] = true, -- 20F0 [8498] = true, -- 2132 [8526] = true, -- 214E [12294] = true, -- 3006 [12448] = true, -- 30A0 [12783] = true, -- 31EF [13055] = true, -- 32FF [43310] = true, -- A92E [43471] = true, -- A9CF [43867] = true, -- AB5B [65279] = true, -- FEFF [65392] = true, -- FF70 [119970] = true, -- 1D4A2 [119995] = true, -- 1D4BB [120134] = true, -- 1D546 [129008] = true, -- 1F7F0 [129736] = true, -- 1FAC8 [917505] = true, -- E0001 } --[[--------------------------< R A N G E S _ T >------------------------------------------------------------- list of Latn and Zyyy (common) codepoints taken from Module:Unicode data/scripts and a local copy of https://www.unicode.org/Public/16.0.0/ucd/ScriptExtensions.txt ]] local ranges_t = { {0, 169}, -- 0000..00A9 {171, 185}, -- 00AB..00B9 {187, 214}, -- 00BB..00D6 {216, 246}, -- 00D8..00F6 {248, 745}, -- 00F8..02E9 {748, 782}, -- 02EC..030E {784, 785}, -- 0310..0311 {803, 805}, -- 0323..0325 {813, 814}, -- 032D..032E {816, 817}, -- 0330..0331 {867, 879}, -- 0363..036F {1157, 1158}, -- 0485..0486 {2385, 2386}, -- 0951..0952 {2404, 2405}, -- 0964..0965 {4053, 4056}, -- 0FD5..0FD8 {5867, 5869}, -- 16EB..16ED {5941, 5942}, -- 1735..1736 {6146, 6147}, -- 1802..1803 {7401, 7404}, -- 1CE9..1CEC {7406, 7411}, -- 1CEE..1CF3 {7413, 7415}, -- 1CF5..1CF7 {7424, 7461}, -- 1D00..1D25 {7468, 7516}, -- 1D2C..1D5C {7522, 7525}, -- 1D62..1D65 {7531, 7543}, -- 1D6B..1D77 {7545, 7614}, -- 1D79..1DBE {7680, 7935}, -- 1E00..1EFF {8192, 8203}, -- 2000..200B {8206, 8292}, -- 200E..2064 {8294, 8304}, -- 2066..2070 {8308, 8318}, -- 2074..207E {8320, 8334}, -- 2080..208E {8336, 8348}, -- 2090..209C {8352, 8385}, -- 20A0..20C1 {8448, 8485}, -- 2100..2125 {8487, 8497}, -- 2127..2131 {8499, 8525}, -- 2133..214D {8527, 8587}, -- 214F..218B {8592, 9257}, -- 2190..2429 {9280, 9290}, -- 2440..244A {9312, 10239}, -- 2460..27FF {10496, 11123}, -- 2900..2B73 {11126, 11263}, -- 2B76..2BFF {11360, 11391}, -- 2C60..2C7F {11776, 11869}, -- 2E00..2E5D {12272, 12292}, -- 2FF0..3004 {12296, 12320}, -- 3008..3020 {12336, 12343}, -- 3030..3037 {12348, 12351}, -- 303C..303F {12443, 12444}, -- 309B..309C {12539, 12540}, -- 30FB..30FC {12688, 12703}, -- 3190..319F {12736, 12773}, -- 31C0..31E5 {12832, 12895}, -- 3220..325F {12927, 13007}, -- 327F..32CF {13144, 13311}, -- 3358..33FF {19904, 19967}, -- 4DC0..4DFF {42752, 42972}, -- A700..A7DC {42993, 43007}, -- A7F1..A7FF {43056, 43065}, -- A830..A839 {43824, 43866}, -- AB30..AB5A {43868, 43876}, -- AB5C..AB64 {43878, 43883}, -- AB66..AB6B {64256, 64262}, -- FB00..FB06 {64830, 64831}, -- FD3E..FD3F {65040, 65049}, -- FE10..FE19 {65072, 65106}, -- FE30..FE52 {65108, 65126}, -- FE54..FE66 {65128, 65131}, -- FE68..FE6B {65281, 65381}, -- FF01..FF65 {65438, 65439}, -- FF9E..FF9F {65504, 65510}, -- FFE0..FFE6 {65512, 65518}, -- FFE8..FFEE {65529, 65533}, -- FFF9..FFFD {65792, 65794}, -- 10100..10102 {65799, 65843}, -- 10107..10133 {65847, 65855}, -- 10137..1013F {65936, 65948}, -- 10190..1019C {66000, 66044}, -- 101D0..101FC {66273, 66299}, -- 102E1..102FB {67456, 67461}, -- 10780..10785 {67463, 67504}, -- 10787..107B0 {67506, 67514}, -- 107B2..107BA {113824, 113827}, -- 1BCA0..1BCA3 {117760, 118012}, -- 1CC00..1CCFC {118016, 118451}, -- 1CD00..1CEB3 {118458, 118480}, -- 1CEBA..1CED0 {118496, 118512}, -- 1CEE0..1CEF0 {118608, 118723}, -- 1CF50..1CFC3 {118784, 119029}, -- 1D000..1D0F5 {119040, 119078}, -- 1D100..1D126 {119081, 119142}, -- 1D129..1D166 {119146, 119162}, -- 1D16A..1D17A {119171, 119172}, -- 1D183..1D184 {119180, 119209}, -- 1D18C..1D1A9 {119214, 119274}, -- 1D1AE..1D1EA {119488, 119507}, -- 1D2C0..1D2D3 {119520, 119539}, -- 1D2E0..1D2F3 {119552, 119638}, -- 1D300..1D356 {119648, 119672}, -- 1D360..1D378 {119808, 119892}, -- 1D400..1D454 {119894, 119964}, -- 1D456..1D49C {119966, 119967}, -- 1D49E..1D49F {119973, 119974}, -- 1D4A5..1D4A6 {119977, 119980}, -- 1D4A9..1D4AC {119982, 119993}, -- 1D4AE..1D4B9 {119997, 120003}, -- 1D4BD..1D4C3 {120005, 120069}, -- 1D4C5..1D505 {120071, 120074}, -- 1D507..1D50A {120077, 120084}, -- 1D50D..1D514 {120086, 120092}, -- 1D516..1D51C {120094, 120121}, -- 1D51E..1D539 {120123, 120126}, -- 1D53B..1D53E {120128, 120132}, -- 1D540..1D544 {120138, 120144}, -- 1D54A..1D550 {120146, 120485}, -- 1D552..1D6A5 {120488, 120779}, -- 1D6A8..1D7CB {120782, 120831}, -- 1D7CE..1D7FF {122624, 122654}, -- 1DF00..1DF1E {122661, 122666}, -- 1DF25..1DF2A {126065, 126132}, -- 1EC71..1ECB4 {126209, 126269}, -- 1ED01..1ED3D {126976, 127019}, -- 1F000..1F02B {127024, 127123}, -- 1F030..1F093 {127136, 127150}, -- 1F0A0..1F0AE {127153, 127167}, -- 1F0B1..1F0BF {127169, 127183}, -- 1F0C1..1F0CF {127185, 127221}, -- 1F0D1..1F0F5 {127232, 127405}, -- 1F100..1F1AD {127462, 127487}, -- 1F1E6..1F1FF {127489, 127490}, -- 1F201..1F202 {127504, 127547}, -- 1F210..1F23B {127552, 127560}, -- 1F240..1F248 {127568, 127569}, -- 1F250..1F251 {127584, 127589}, -- 1F260..1F265 {127744, 128728}, -- 1F300..1F6D8 {128732, 128748}, -- 1F6DC..1F6EC {128752, 128764}, -- 1F6F0..1F6FC {128768, 128985}, -- 1F700..1F7D9 {128992, 129003}, -- 1F7E0..1F7EB {129024, 129035}, -- 1F800..1F80B {129040, 129095}, -- 1F810..1F847 {129104, 129113}, -- 1F850..1F859 {129120, 129159}, -- 1F860..1F887 {129168, 129197}, -- 1F890..1F8AD {129200, 129211}, -- 1F8B0..1F8BB {129216, 129217}, -- 1F8C0..1F8C1 {129232, 129240}, -- 1F8D0..1F8D8 {129280, 129623}, -- 1F900..1FA57 {129632, 129645}, -- 1FA60..1FA6D {129648, 129660}, -- 1FA70..1FA7C {129664, 129674}, -- 1FA80..1FA8A {129678, 129734}, -- 1FA8E..1FAC6 {129741, 129756}, -- 1FACD..1FADC {129759, 129770}, -- 1FADF..1FAEA {129775, 129784}, -- 1FAEF..1FAF8 {129792, 129938}, -- 1FB00..1FB92 {129940, 130042}, -- 1FB94..1FBFA {917536, 917631}, -- E0020..E007F } --[[--------------------------< S P E C I A L S _ T >--------------------------------------------------------- list of individual language-specific non-Latn and non-Zyyy codepoints; these codepoints commonly used in transliterations. This list is manually currated so is most likely incomplete. keys to <specials_t> are decimal codepoints; other keys are language tags (always lowercase) of language transliterations that use these non-Latn codepoints. ]] local specials_t = { [788] = { -- U+0314: COMBINING REVERSED COMMA ABOVE ["hy"] = true, -- Armenian }, [794] = { -- U+031A: COMBINING LEFT ANGLE ABOVE ["ltc"] = true, -- Middle Chinese; is this really IPA? }, [795] = { -- U+031B: COMBINING HORN ["th"] = true, -- Thai }, [806] = { -- U+0326: COMBINING COMMA BELOW ["ab"] = true, -- Abkhaz ["kca"] = true, -- Khanty ["xal"] = true, -- Kalmyk or Oirat }, [807] = { -- U+0327: COMBINING CEDILLA ["fa"] = true, -- Persian }, [809] = { -- U+0329: COMBINING VERTICAL LINE BELOW ["ab"] = true, -- Abkhaz ["sa"] = true, -- Sanskrit }, [815] = { -- U+032F: COMBINING INVERTED BREVE BELOW ["mong"] = true, -- Mongolian ["xsc"] = true, -- Scythian }, [818] = { -- U+0332: COMBINING LOW LINE ["ar"] = true, -- Arabic ["hbo"] = true, -- Ancient Hebrew ["he"] = true, -- Hebrew ["jpa"] = true, -- Jewish Palestinian Aramaic ["mdh"] = true, -- Maguindanaon ["otk"] = true, -- Old Turkish }, [831] = { -- U+033F: COMBINING DOUBLE OVERLINE ["mnp"] = true, -- Northern Min Chinese, Jian'ou dialect }, [855] = { -- U+0357: COMBINING RIGHT HALF RING ABOVE ["egy"] = true, -- Ancient Egyptian }, [863] = { -- U+035F: COMBINING DOUBLE MACRON BELOW ["am"] = true, -- Amharic ["ar"] = true, -- Arabic ["dv"] = true, -- Dhivehi, Divehi, or Maldivian ["fa"] = true, -- Persian ["hi"] = true, -- Hindi ["inc"] = true, -- Indic languages ["ur"] = true, -- Urdu }, [864] = { -- U+0360: COMBINING DOUBLE TILDE ["hi"] = true, -- Hindi }, [865] = { -- U+0361: COMBINING DOUBLE INVERTED BREVE ["be"] = true, -- Belarusian ["ltc"] = true, -- Middle Chinese; is this really IPA? ["ru"] = true, -- Russian ["rue"] = true, -- Rusyn ["sem"] = true, -- Semitic languages ["sit"] = true, -- Sino-Tibetan languages ["tt"] = true, -- Tatar }, [916] = { -- U+0394: GREEK CAPITAL LETTER DELTA ["xsc"] = true, -- Scythian ["xsc-x-pontic"] = true, -- Pontic Scythian }, [920] = { -- U+0398: GREEK CAPITAL LETTER THETA ["ae"] = true, -- Avestan }, [934] = { -- U+03A6: GREEK CAPITAL LETTER PHI ["xle"] = true, -- Lemnian }, [945] = { -- U+03B1: GREEK SMALL LETTER ALPHA ["apc"] = true, -- Levantine Arabic }, [946] = { -- U+03B2: GREEK SMALL LETTER BETA ["ae"] = true, -- Avestan ["gha"] = true, -- Ghadamès ["ougr"] = true, -- Old Uyghur ["sem"] = true, -- Semitic languages ["syc"] = true, -- Classical Syriac ["wuu"] = true, -- Shanghainese variety of Wu Chinese }, [947] = { -- U+03B3: GREEK SMALL LETTER GAMMA ["ae"] = true, -- Avestan ["ltc"] = true, -- Late Middle Chinese ["mn"] = true, -- Mongolian ["och"] = true, -- Old Chinese ["ougr"] = true, -- Old Uyghur ["pal"] = true, -- Middle Persian ["syc"] = true, -- Classical Syriac ["syr"] = true, -- Syriac ["xal"] = true, -- Kalmyk or Oirat ["xng"] = true, -- Middle Mongolian ["xsc"] = true, -- Scythian ["ydg"] = true, -- Yidgha ["mong"] = true, -- Mongolian }, [948] = { -- U+03B4: GREEK SMALL LETTER DELTA ["ae"] = true, -- Avestan ["ougr"] = true, -- Old Uyghur ["sog"] = true, -- Sogdian ["sogd"] = true, -- Sogdian ["syc"] = true, -- Classical Syriac ["xpr"] = true, -- Parthian ["xsc"] = true, -- Scythian ["xsc-x-pontic"] = true, -- Pontic Scythian }, [952] = { -- U+03B8: GREEK SMALL LETTER THETA ["ae"] = true, -- Avestan ["ba"] = true, -- Bashkir ["cms"] = true, -- Messapic ["ett"] = true, -- Etruscan ["hur"] = true, -- Halkomelem ["ira"] = true, -- Iranian languages ["my"] = true, -- Burmese ["pal"] = true, -- Middle Persian (Pahlavi) ["peo"] = true, -- Old Persian ["sa"] = true, -- Sanskrit ["sem"] = true, -- Semitic languages ["syc"] = true, -- Classical Syriac ["syr"] = true, -- Syriac ["xme"] = true, -- Median ["xpg"] = true, -- Phrygian ["xpr"] = true, -- Parthian ["xsc"] = true, -- Scythian }, [955] = { -- U+03BB: GREEK SMALL LETTER LAMDA ["xcr"] = true, -- Carian ["xld"] = true, -- Lydian }, [963] = { -- U+03C3: GREEK SMALL LETTER SIGMA ["ett"] = true, -- Etruscan }, [964] = { -- U+03C4: GREEK SMALL LETTER TAU ["xld"] = true, -- Lydian }, [966] = { -- U+03C6: GREEK SMALL LETTER PHI ["ett"] = true, -- Etruscan }, [967] = { -- U+03C7: GREEK SMALL LETTER CHI ["ett"] = true, -- Etruscan ["gem"] = true, -- Germanic languages ["hur"] = true, -- Halkomelem ["kbd"] = true, -- Kabardian ["ltc"] = true, -- Late Middle Chinese ["och"] = true, -- Old Chinese ["xlc"] = true, -- Lycian ["xle"] = true, -- Lemnian }, [968] = { -- U+03C8: GREEK SMALL LETTER PSI ["ett"] = true, -- Etruscan }, [977] = { -- U+03D1: GREEK THETA SYMBOL (cursive form) ["ae"] = true, -- Avestan ["ira"] = true, -- Iranian languages ["peo"] = true, -- Old Persian ["xme"] = true, -- Median ["xsc"] = true, -- Scythian ["xsc-x-pontic"] = true, -- Pontic Scythian }, [1098] = { -- U+044A: CYRILLIC SMALL LETTER HARD SIGN ["ady"] = true, -- Adyghe ["cu"] = true, -- Church Slavic ["zls"] = true, -- South Slavic languages }, [1100] = { -- U+044C: CYRILLIC SMALL LETTER SOFT SIGN ["az"] = true, -- Azerbaijani ["cu"] = true, -- Church Slavonic ["dng"] = true, -- Dungan ["ru"] = true, -- Russian ["tt"] = true, -- Tatar ["tyv"] = true, -- Tuvinian }, [1278] = { -- U+04FE: CYRILLIC CAPITAL LETTER HA WITH STROKE ["av"] = true, -- Avar }, [1279] = { -- U+04FF: CYRILLIC SMALL LETTER HA WITH STROKE ["av"] = true, -- Avar }, [8113] = { -- U+1FB1: GREEK SMALL LETTER ALPHA WITH MACRON ["apc"] = true, -- Levantine Arabic }, [8190] = { -- U+1FFE: GREEK DASIA ["ar"] = true, -- Arabic (Ayin) ["xcl"] = true, -- Classical Armenian }, [19978] = { -- U+4E0A: [CJK Unified Ideographs] ["wuu"] = true, -- Wu Chinese tone marker }, [20837] = { -- U+5165: [CJK Unified Ideographs] ["wuu"] = true, -- Wu Chinese tone marker }, [21435] = { -- U+53BB: [CJK Unified Ideographs] ["wuu"] = true, -- Wu Chinese tone marker }, [24179] = { -- U+5E73: [CJK Unified Ideographs] ["wuu"] = true, -- Wu Chinese tone marker }, [38451] = { -- U+9633: [CJK Unified Ideographs] (Yang) ["wuu"] = true, -- Suzhou dialect of Wu Chinese tone marker --[[Suzhou dialect#Tones]] }, [38452] = { -- U+9634: [CJK Unified Ideographs] (Yin) ["wuu"] = true, -- Suzhou dialect of Wu Chinese tone marker --[[Suzhou dialect#Tones]] }, [65056] = { -- U+FE20: COMBINING LIGATURE LEFT HALF ["ru"] = true, -- Russian }, [65057] = { -- U+FE21: COMBINING LIGATURE RIGHT HALF ["ru"] = true, -- Russian }, } --[[--------------------------< E X P O R T S >--------------------------------------------------------------- ]] return { ranges_t = ranges_t, singles_t = singles_t, specials_t = specials_t, sizeof_ranges_t = #ranges_t, } dc83p4l9k8mwwdqbirq3l5ieeolwkb8 Wikipedia:Articles for deletion/András Rosztóczy 4 164857 746118 745966 2026-06-12T16:12:25Z Trialpears 43074 746118 wikitext text/x-wiki ===[[:András Rosztóczy]]=== <noinclude>{{AFD help}}</noinclude> :{{la|1=András Rosztóczy}} – (<includeonly>[[Wikipedia:Articles for deletion/András Rosztóczy|View AfD]]</includeonly><noinclude>[[Wikipedia:Articles for deletion/Log/2025 February 28#{{anchorencode:András Rosztóczy}}|View log]]</noinclude> | [[Special:Diff/1270092603/cur|edits since nomination]]) :({{Find sources AFD|title=András Rosztóczy}}) I don't think his citation record is enough for [[WP:PROF#C1]] in a high-citation field, and we have no other evidence of [[WP:PROF]] nor [[WP:GNG]] notability. Was prodded in 2012 but the only significant change since then has been to add an indiscriminate and too-long list of selected publications. The article creator was banned from Wikimedia in 2020 for terms-of-use violations. —[[User:David Eppstein|David Eppstein]] ([[User talk:David Eppstein|talk]]) 23:30, 28 February 2025 (UTC) *<small class="delsort-notice">Note: This discussion has been included in the [[Wikipedia:WikiProject Deletion sorting|deletion sorting]] lists for the following topics: [[Wikipedia:WikiProject Deletion sorting/Academics and educators|Academics and educators]] and [[Wikipedia:WikiProject Deletion sorting/Hungary|Hungary]]. [[User:Shellwood|Shellwood]] ([[User talk:Shellwood|talk]]) 23:32, 28 February 2025 (UTC)</small> *<small class="delsort-notice">Note: This discussion has been included in the [[Wikipedia:WikiProject Deletion sorting/Medicine|list of Medicine-related deletion discussions]]. '''[[User:Wcquidditch|<span style="color:red">WC</span>''<span style="color:#999933">Quidditch</span>'']]''' [[User talk:Wcquidditch|<span style="color:red">☎</span>]] [[Special:Contribs/Wcquidditch|<span style="color:#999933">✎</span>]] 02:24, 1 March 2025 (UTC)</small> *'''Delete''' - we almost never keep an assistant professor per [[WP:PROF]] and [[WP:OUTCOMES]]. I wish it were true, because I would have multiple family members who are notable. [[User:Bearian|Bearian]] ([[User talk:Bearian|talk]]) 13:16, 2 March 2025 (UTC) *'''Delete''' - This early-career subject is not notable enough to satisfy [[WP:NPROF]]. [[User:Qflib|Qflib]] ([[User talk:Qflib|talk]]) 19:11, 6 March 2025 (UTC) *'''Delete''' - fails NPROF. [[User:Herinalian|Herinalian]] ([[User talk:Herinalian|talk]]) 19:43, 7 March 2025 (UTC) rlh1vyuav6k281y01l3otf9vbs7gaes 746119 746118 2026-06-12T16:12:33Z Trialpears 43074 /* András Rosztóczy */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746119 wikitext text/x-wiki <div class="boilerplate afd vfd xfd-closed" style="background-color: #F3F9FF; margin: 2em 0 0 0; padding: 0 10px 0 10px; border: 1px solid #AAAAAA;"> :''The following discussion is an archived debate of the proposed deletion of the article below. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on the appropriate discussion page (such as the article's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this page.'' <!--Template:Afd top Note: If you are seeing this page as a result of an attempt to re-nominate an article for deletion, you must manually edit the AfD nomination links to create a new discussion page using the name format of [[Wikipedia:Articles for deletion/PAGENAME (2nd nomination)]]. When you create the new discussion page, please provide a link to this old discussion in your nomination. --> The result was '''no consensus'''. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:12, 12 June 2026 (UTC) ===[[:András Rosztóczy]]=== <noinclude>{{AFD help}}</noinclude> :{{la|1=András Rosztóczy}} – (<includeonly>[[Wikipedia:Articles for deletion/András Rosztóczy|View AfD]]</includeonly><noinclude>[[Wikipedia:Articles for deletion/Log/2025 February 28#{{anchorencode:András Rosztóczy}}|View log]]</noinclude> | [[Special:Diff/1270092603/cur|edits since nomination]]) :({{Find sources AFD|title=András Rosztóczy}}) I don't think his citation record is enough for [[WP:PROF#C1]] in a high-citation field, and we have no other evidence of [[WP:PROF]] nor [[WP:GNG]] notability. Was prodded in 2012 but the only significant change since then has been to add an indiscriminate and too-long list of selected publications. The article creator was banned from Wikimedia in 2020 for terms-of-use violations. —[[User:David Eppstein|David Eppstein]] ([[User talk:David Eppstein|talk]]) 23:30, 28 February 2025 (UTC) *<small class="delsort-notice">Note: This discussion has been included in the [[Wikipedia:WikiProject Deletion sorting|deletion sorting]] lists for the following topics: [[Wikipedia:WikiProject Deletion sorting/Academics and educators|Academics and educators]] and [[Wikipedia:WikiProject Deletion sorting/Hungary|Hungary]]. [[User:Shellwood|Shellwood]] ([[User talk:Shellwood|talk]]) 23:32, 28 February 2025 (UTC)</small> *<small class="delsort-notice">Note: This discussion has been included in the [[Wikipedia:WikiProject Deletion sorting/Medicine|list of Medicine-related deletion discussions]]. '''[[User:Wcquidditch|<span style="color:red">WC</span>''<span style="color:#999933">Quidditch</span>'']]''' [[User talk:Wcquidditch|<span style="color:red">☎</span>]] [[Special:Contribs/Wcquidditch|<span style="color:#999933">✎</span>]] 02:24, 1 March 2025 (UTC)</small> *'''Delete''' - we almost never keep an assistant professor per [[WP:PROF]] and [[WP:OUTCOMES]]. I wish it were true, because I would have multiple family members who are notable. [[User:Bearian|Bearian]] ([[User talk:Bearian|talk]]) 13:16, 2 March 2025 (UTC) *'''Delete''' - This early-career subject is not notable enough to satisfy [[WP:NPROF]]. [[User:Qflib|Qflib]] ([[User talk:Qflib|talk]]) 19:11, 6 March 2025 (UTC) *'''Delete''' - fails NPROF. [[User:Herinalian|Herinalian]] ([[User talk:Herinalian|talk]]) 19:43, 7 March 2025 (UTC) {{clear}} :''The above discussion is preserved as an archive of the debate. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on the appropriate discussion page (such as the article's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this page.''<!--Template:Afd bottom--></div> cerjp2vek0y74g3rbyg805lym6uboqk User:Unicodesnowman/DeleteMark 2 166403 746066 746054 2026-06-12T12:09:16Z Pywikibot-test 23124 pywikibot unit test. Do NOT actually delete. 746066 wikitext text/x-wiki {{delete|1=pywikibot unit test. Do NOT actually delete.}} Pywikibot deletion test. dcftqsyyicveaaxsx5yic8hvklv2iue 746067 746066 2026-06-12T12:09:26Z Pywikibot-test 23124 Pywikibot unit test 746067 wikitext text/x-wiki Pywikibot deletion test. l5a6iw696mbwr7beiudqo7xxpg7k54m User:Serhio Magpie/instantDiffs.css 2 167025 746366 745852 2026-06-13T06:21:12Z Serhio Magpie 37334 [98b3516] [v5.14.1]: Updated from repository. 746366 css text/css /** * Instant Diffs * * Version: 5.14.1 * Author: Serhio Magpie * Licenses: (MIT OR CC-BY-SA-4.0) * Documentation: https://www.mediawiki.org/wiki/Instant_Diffs * * For license information please see: https://www.mediawiki.org/wiki/User:Serhio_Magpie/instantDiffs.js.LEGAL.txt */ /* <nowiki> */ .instantDiffs-link:before{margin-inline-end:var(--instantDiffs-gap)}.instantDiffs-link:after{margin-inline-start:var(--instantDiffs-gap)}.instantDiffs-link.is-insertBefore:before{content:var(--instantDiffs-label)}.instantDiffs-link.is-insertAfter:after{content:var(--instantDiffs-label)}.instantDiffs-link.is-insertAfter[rel~="mw:ExtLink"].autonumber:empty:after{margin-inline:0;content:"[" counter(mw-numbered-ext-link) "] " var(--instantDiffs-label);counter-increment:mw-numbered-ext-link}.instantDiffs-link--diff{--instantDiffs-label: var(--instantDiffs-label-diff)}.instantDiffs-link--revision{--instantDiffs-label: var(--instantDiffs-label-revision)}.instantDiffs-link--pending{cursor:wait!important}.instantDiffs-link--styled{padding-inline:var(--instantDiffs-gap);-webkit-box-decoration-break:clone;box-decoration-break:clone;background:var(--instantDiffs-background-link);color:var(--instantDiffs-color-link);text-decoration:none}.instantDiffs-link--styled:is(:hover,:focus-visible){background:var(--instantDiffs-background-link--hover);color:var(--instantDiffs-color-link--hover);text-decoration:none}.instantDiffs-link--styled:is(:active,:focus){background:var(--instantDiffs-background-link--active);color:var(--instantDiffs-color-link--active);text-decoration:none}.instantDiffs-link--styled:where(:not(.cdx-button)){border-radius:1em}.instantDiffs-link--clear.is-insertBefore:before{display:inline-block}.instantDiffs-link--clear.is-insertAfter:after{display:inline-block}.instantDiffs-link--error{background:var(--instantDiffs-background-link-error);color:var(--instantDiffs-color-link-error)}.instantDiffs-link--error:is(:hover,:focus-visible){background:var(--instantDiffs-background-link-error--hover);color:var(--instantDiffs-color-link-error--hover)}.instantDiffs-link--error:is(:active,:focus){background:var(--instantDiffs-background-link-error--active);color:var(--instantDiffs-color-link-error--active)}.instantDiffs-panel{margin-inline:var(--instantDiffs-gap);font-weight:400;font-style:normal;color:#72777d;user-select:none}.instantDiffs-panel:is(:empty){display:none!important}span.instantDiffs-panel{display:inline}.instantDiffs-panel a{cursor:pointer;color:inherit}.instantDiffs-panel .item:not(:last-child){margin-inline-end:var(--instantDiffs-gap)}.instantDiffs-panel .error{font-size:inherit}.instantDiffs-panel .error-info{cursor:help}.cdx-dialog__footer__actions .instantDiffs-panel{align-self:center}.instantDiffs-panel-placeholder{padding-inline:var(--instantDiffs-gap)}.instantDiffs-panel-placeholder:after{margin-inline-start:var(--instantDiffs-gap);color:var(--color-placeholder, #72777d);content:var(--instantDiffs-label-placeholder)}.instantDiffs-panel-placeholder.has-link{padding:0}.instantDiffs-panel-placeholder--diff:after{content:var(--instantDiffs-label-diff)}.instantDiffs-panel-placeholder--revision:after{content:var(--instantDiffs-label-revision)}.instantDiffs-panel-placeholder--loader:after{color:var(--color-disabled, #a2a9b1);animation:instantDiffs-blink 1s infinite alternate}@keyframes instantDiffs-blink{0%{opacity:0}to{opacity:1}}.instantDiffs-navigation{margin:0 -16px 1em;padding:1em 16px;display:flex;gap:.5em;position:sticky;z-index:2;top:0;border-bottom:1px solid var(--instantDiffs-border-color);font-size:var(--instantDiffs-font-size-navigation);background:var(--instantDiffs-background-glass);background-clip:padding-box;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}@media(max-width:639px){.instantDiffs-navigation{padding:.5em}}.instantDiffs-navigation-group{display:flex;gap:var(--instantDiffs-gap)}.instantDiffs-navigation-group--left{justify-content:flex-start;flex:1}@media(max-width:639px){.instantDiffs-navigation-group--left .instantDiffs-button--pending,.instantDiffs-navigation-group--left .instantDiffs-button--back{display:none}}.instantDiffs-navigation-group--center{min-width:0;justify-content:center;flex:0 1 auto}.instantDiffs-navigation-group--center .oo-ui-buttonElement{min-width:0;flex:auto}.instantDiffs-navigation-group--center .oo-ui-buttonElement-button{display:block;overflow:hidden;text-overflow:ellipsis}@media(max-width:639px){.instantDiffs-navigation-group--center{flex:auto}.instantDiffs-navigation-group--center .instantDiffs-button--switch{display:none}}.instantDiffs-navigation-group--right{justify-content:flex-end;flex:1}@media(max-width:959px){.instantDiffs-navigation-group--right .instantDiffs-button--pin{display:none}}.instantDiffs-buttons-group{min-width:0;margin:0;display:flex}.instantDiffs-buttons-group:is(:empty){display:none}.instantDiffs-buttons-group--vertical{padding:0;flex-direction:column}.instantDiffs-buttons-group--vertical:is(:empty)+hr{display:none}.instantDiffs-buttons-group--vertical.has-icons{gap:var(--instantDiffs-gap)}@media(max-width:959px){.instantDiffs-buttons-group--pins-custom{display:none}}@media(min-width:640px){.instantDiffs-buttons-group--mobile.instantDiffs-buttons-group--mobile{display:none}.instantDiffs-buttons-group--mobile+hr{display:none}}.instantDiffs-buttons-separator{margin:0;flex:none;background-color:var(--instantDiffs-border-color)}.instantDiffs-buttons-popup .oo-ui-popupWidget-popup{padding:0}.instantDiffs-buttons-popup .oo-ui-popupWidget-body{display:flex;flex-direction:column}.instantDiffs-buttons-popup.has-icons .oo-ui-popupWidget-body{padding:var(--instantDiffs-gap);gap:var(--instantDiffs-gap)}.instantDiffs-button--link{display:block}.instantDiffs-button--link>.oo-ui-buttonElement-button{display:block}.instantDiffs-button--link.oo-ui-buttonElement-frameless.instantDiffs-button--link.oo-ui-buttonElement-frameless:first-child{margin:0}.instantDiffs-button--link.oo-ui-buttonElement-frameless>.oo-ui-buttonElement-button{margin:0;border-radius:var(--instantDiffs-button-radius)}.instantDiffs-button--link.oo-ui-widget-enabled>.oo-ui-buttonElement-button:is(:hover,:focus){background-color:var(--background-color-interactive, #eaecf0);color:var(--color-progressive--hover, var(--instantDiffs-color-link--hover))}.instantDiffs-button--link.oo-ui-widget-enabled>.oo-ui-buttonElement-button:active{border-color:var(--border-color-progressive--active, #2a4b8d);background-color:var(--background-color-progressive-subtle, #eaf3ff);color:var(--color-progressive--active, var(--instantDiffs-color-link--active))}.instantDiffs-button--link-id .oo-ui-labelElement-label{white-space:wrap}.instantDiffs-button--link-id .oo-ui-labelElement-label .name{white-space:nowrap}.instantDiffs-button--link-id .oo-ui-labelElement-label .version{white-space:nowrap;font-size:.8em;color:var(--color-placeholder, #72777d)}.instantDiffs-button--fake-watch{position:fixed;top:0;left:0;visibility:hidden}.instantDiffs-label{max-width:100%;display:inline-flex;gap:var(--instantDiffs-gap)}.instantDiffs-label i{flex:none}.instantDiffs-label span{min-width:0;flex:auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media(min-width:960px){.instantDiffs-label--short{display:none}}@media(max-width:959px){.instantDiffs-label--long{display:none}}.instantDiffs-page{width:auto;max-width:none;display:flow-root;margin:0;padding:0;overflow:visible;font-size:var(--instantDiffs-font-size);line-height:var(--instantDiffs-line-height)}.instantDiffs-page-tools{display:flex;justify-content:center}.instantDiffs-page-tools:is(:empty){display:none}.instantDiffs-page-body{display:flow-root;position:relative;z-index:1}.instantDiffs-page-body .cdx-message--block{margin-bottom:1em}.instantDiffs-page-body #mw-fr-diff-headeritems{margin-top:0}.instantDiffs-page-body #mw-fr-revisiontag-old{margin-bottom:1em}.instantDiffs-page-body .mw-diff-table-prefix{min-height:2rem;margin-top:0}.instantDiffs-page-body .mw-diffPage-inlineToggle-container .oo-ui-fieldLayout>.oo-ui-fieldLayout-body>.oo-ui-fieldLayout-field{width:auto}.instantDiffs-page-body table.diff .mw-rollback-link{display:initial}.instantDiffs-page-body table.diff .jquery-confirmable-wrapper{vertical-align:top}.instantDiffs-page-body .mw-parser-output{text-align:initial}.instantDiffs-page-body #toc,.instantDiffs-page-body .mw-diff-mobile-footer{display:none}.instantDiffs-page-body .wikibase-statementgroupview .wikibase-snakview-body{margin-right:0!important}.instantDiffs-page-body .wikibase-statementgroupview .wikibase-statementview-mainsnak{max-width:none!important;margin-right:0!important}.instantDiffs-page-body--foreign .wikibase-statementgroupview .wikibase-initially-collapsed{display:block!important}.instantDiffs-page-body--foreign .wikibase-entitytermsview .wikibase-toolbar-container{position:relative}.instantDiffs-page-mediaInfo .oo-ui-indexLayout-stackLayout>.oo-ui-tabPanelLayout-active{margin:1rem 0 0;padding:0}.oo-ui-windowManager-modal>.instantDiffs-view.oo-ui-window-active{top:var(--instantDiffs-view-top)}.instantDiffs-view .oo-ui-messageDialog-container{scroll-padding-top:var(--instantDiffs-view-scroll-padding-top)}.instantDiffs-view .oo-ui-messageDialog-message{transition:opacity .15s ease-in-out}.instantDiffs-view .oo-ui-messageDialog-message.is-transparent{opacity:0}.oo-ui-windowManager-modal:not(.oo-ui-windowManager-size-full) .instantDiffs-view .instantDiffs-navigation{border-radius:var(--instantDiffs-view-radius) var(--instantDiffs-view-radius) 0 0}.oo-ui-windowManager-modal:not(.oo-ui-windowManager-size-full) .instantDiffs-view .instantDiffs-view-loader{border-top-right-radius:max(var(--instantDiffs-view-radius),.28571429em) .28571429em;border-top-left-radius:max(var(--instantDiffs-view-radius),.28571429em) .28571429em}.instantDiffs-view-overlay{position:absolute;inset:0;z-index:-1}.instantDiffs-view-loader{max-width:none;position:absolute;inset:0 0 auto;z-index:3;border-radius:0;transition:opacity .15s ease-in-out}.instantDiffs-view-loader .oo-ui-progressBarWidget-bar{animation-duration:1s}.instantDiffs-view-loader.is-transparent{opacity:0}.oo-ui-windowManager-modal>.instantDiffs-settings.oo-ui-window-active{top:var(--instantDiffs-view-top)}.instantDiffs-settings-panel--empty,.instantDiffs-settings-panel--finish{min-height:100%;box-sizing:border-box;display:flex;justify-content:center;align-items:center}.instantDiffs-settings-panel--empty[hidden],.instantDiffs-settings-panel--finish[hidden]{display:none}.instantDiffs-settings-panel--empty .instantDiffs-notice-box,.instantDiffs-settings-panel--finish .instantDiffs-notice-box{transform:translateY(-50%)}ul.instantDiffs-list--settings{padding:0;margin-block:0;margin-inline:1.42857143em 0;list-style:disc;font-size:var(--instantDiffs-font-size-hint)}ul.instantDiffs-list--settings li{margin:0}ul.instantDiffs-list--settings i{direction:ltr;unicode-bidi:embed}:root{--instantDiffs-label-diff: "\2756";--instantDiffs-label-revision: "\272a";--instantDiffs-label-placeholder: "\25c7";--instantDiffs-color-link: var(--color-progressive, #36c);--instantDiffs-color-link--hover: var(--color-progressive--hover, #3056a9);--instantDiffs-color-link--active: var(--color-progressive--active, #233566);--instantDiffs-color-link-error: var(--color-error, #bf3c2c);--instantDiffs-color-link-error--hover: var(--color-error--hover, #9f3526);--instantDiffs-color-link-error--active: var(--color-error--active, #612419);--instantDiffs-background-link: var(--background-color-progressive-subtle, #f1f4fd);--instantDiffs-background-link--hover: var(--background-color-interactive-subtle--hover, #eaecf0);--instantDiffs-background-link--active: var(--background-color-interactive-subtle--active, #dadde3);--instantDiffs-background-link-error: var(--background-color-error-subtle, #ffe9e5);--instantDiffs-background-link-error--hover: var(--background-color-error-subtle--hover, #ffdad3);--instantDiffs-background-link-error--active: var(--background-color-error-subtle--active, #ffc8bd);--instantDiffs-background-line: color-mix(in srgb, var(--border-color-progressive, #cfe3ff) 30%, transparent);--instantDiffs-background-glass: color-mix(in srgb, var(--background-color-base, #ffffff) 70%, transparent);--instantDiffs-border-color: var(--border-color-base, #a2a9b1);--instantDiffs-line-height: var(--line-height-medium, 1.5714285);--instantDiffs-font-size: var(--font-size-medium, .875rem);--instantDiffs-font-size-navigation: var(--font-size-medium, .875rem);--instantDiffs-font-size-hint: .75rem;--instantDiffs-gap: .25rem;--instantDiffs-view-top: 0;--instantDiffs-view-radius: 0;--instantDiffs-view-scroll-padding-top: 0;--instantDiffs-button-radius: var(--border-radius-base, 2px)}.instantDiffs-hidden{display:none!important}.instantDiffs-invisibleIconElement.instantDiffs-invisibleIconElement.oo-ui-buttonElement-framed>.oo-ui-buttonElement-button{padding-inline:12px}.instantDiffs-invisibleIconElement.instantDiffs-invisibleIconElement.oo-ui-buttonElement-frameless>.oo-ui-buttonElement-button{padding-inline:6px}.instantDiffs-invisibleIconElement .oo-ui-iconElement-icon{display:none}.instantDiffs-notice-box{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:1rem;white-space:pre-wrap;text-align:center}.instantDiffs-notice-box img{width:64px;aspect-ratio:1/1;border:none;font-size:0}.instantDiffs-notice-box h5{padding:0;margin:0}.instantDiffs-notice-box--empty img{width:128px}.instantDiffs-notification-label{font-weight:700}li.instantDiffs-line,tr.instantDiffs-line td,table.instantDiffs-line td,.instantDiffs-line[data-instantdiffs-line]{transition:background-color 1s ease-in-out}li.instantDiffs-line--highlight,tr.instantDiffs-line--highlight td,table.instantDiffs-line--highlight td,.instantDiffs-line--highlight[data-instantdiffs-line]{transition-duration:.25s;background-color:var(--instantDiffs-background-line)!important}.instantDiffs-line--seen .mw-title{font-weight:400}.mw-fr-reviewlink .instantDiffs-panel,.mw-changeslist-links .instantDiffs-panel,.mw-changeslist-diff-cur+.instantDiffs-panel,.mw-changeslist-diff+.instantDiffs-panel{margin-inline-end:0}.mw-fr-reviewlink .instantDiffs-link{background:transparent}.instantDiffs-button--compare{font-weight:400}.instantDiffs-button--compare.mw-ui-button{min-width:0}.instantDiffs-enabled .mw-history-compareselectedversions :is(.mw-ui-button,.cdx-button){vertical-align:top}body:not(.skin-minerva) .instantDiffs-line--history .mw-history-histlinks{margin-inline-end:.5em}body:not(.skin-minerva) .instantDiffs-line--history .mw-changeslist-date{margin-inline-start:.5em}@media screen{.skin-monobook{--instantDiffs-border-color: #ccc;--instantDiffs-line-height: 1.5;--instantDiffs-font-size: .794rem;--instantDiffs-font-size-navigation: var(--instantDiffs-font-size);--instantDiffs-button-radius: var(--border-radius-base, 3px)}}.skin-monobook .instantDiffs-view .oo-ui-messageDialog-text{padding:1rem 1rem 1.25rem}.skin-monobook .instantDiffs-navigation{margin-inline:-1rem;margin-bottom:1rem;padding:1rem}@media(max-width:639px){.skin-monobook .instantDiffs-navigation{padding:.5rem 1rem}}@media(min-width:640px){.skin-minerva{--instantDiffs-line-height: 1.65;--instantDiffs-font-size: 1rem}}.skin-minerva .instantDiffs-page-body table.diff{margin:0}.skin-minerva .instantDiffs-page-body:is(.mw-heading1,h1,.mw-heading2,h2){font-family:Linux Libertine,Georgia,Times,"Source Serif Pro",serif}.skin-minerva .instantDiffs-page-body .mw-diff-timestamp:is(:empty){display:none}.skin-minerva .instantDiffs-page-body .diff-title .mw-userlink{float:none}.skin-minerva .instantDiffs-page-body .diff-title .mw-userlink:before{display:none}.skin-minerva .instantDiffs-page-body .diff-title .mw-usertoollinks{float:none}@media(max-width:639px){.skin-minerva .instantDiffs-page-body .mw-diff-mobile-footer{height:auto;display:block;margin:1em -16px -16px;position:sticky;inset:auto auto 0;background:var(--instantDiffs-background-glass);background-clip:padding-box;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.skin-minerva .instantDiffs-page-body .mw-diff-mobile-footer__header{display:flex;flex-wrap:wrap;align-items:center;gap:.5em;line-height:var(--line-height-small, 1.375rem);font-size:var(--font-size-medium, 1rem)}.skin-minerva .instantDiffs-page-body .mw-diff-mobile-footer__header .mw-userlink{max-width:80%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skin-minerva .instantDiffs-page-body .mw-diff-mobile-footer .ext-checkuser-userinfocard-button{display:inline-block;position:static}.skin-minerva .instantDiffs-page-body .mw-diff-mobile-footer .ext-checkuser-userinfocard-button__icon{vertical-align:text-bottom}.skin-minerva .instantDiffs-page-body .mw-diff-mobile-footer .mw-userlink{padding-top:0}.skin-minerva .instantDiffs-page-body .mw-diff-mobile-footer .mw-userlink:before{display:none}.skin-minerva .instantDiffs-page-body .mw-diff-mobile-footer .mw-rollback-link:last-child,.skin-minerva .instantDiffs-page-body .mw-diff-mobile-footer .mw-diff-undo:last-child{padding-bottom:0}.skin-minerva .instantDiffs-page-body .mw-diff-mobile-footer .mw-rollback-link>.cdx-button{margin:0}.skin-minerva .instantDiffs-page-body .mw-diff-mobile-footer .mw-thanks-thank-link{max-width:100%;margin:0}.skin-minerva .instantDiffs-page-body .mw-diff-mobile-footer .mw-thanks-thank-link+.jquery-confirmable-interface{width:100%!important}}.skin-minerva .instantDiffs-page-body #mw-fr-diff-headeritems .fr-diff-ratings{margin:0}@media(max-width:639px){.skin-minerva .instantDiffs-page-body #mw-fr-diff-headeritems .fr-diff-ratings td{width:100%!important;text-align:left!important}.skin-minerva .instantDiffs-page-body #mw-fr-diff-headeritems .fr-diff-ratings td:nth-child(2n-1){display:none}}.skin-minerva .instantDiffs-line .ext-checkuser-userinfocard-button+.mw-userlink:before{display:none!important}.skin-minerva .instantDiffs-line .minoredit{font-size:inherit}.skin-minerva .instantDiffs-line:not(.instantDiffs-line--history) .minoredit{margin-right:.5em;padding:0;background:transparent}.skin-minerva.mw-special-Watchlist .instantDiffs-line .ext-checkuser-userinfocard-button{display:inline-block;float:left;clear:left;padding-top:0}.skin-minerva.mw-special-Watchlist .instantDiffs-line .ext-checkuser-userinfocard-button-wrapper+.mw-usertoollinks{float:left;clear:right;padding-top:0}.skin-minerva.mw-special-Watchlist .instantDiffs-line .ext-checkuser-userinfocard-button__icon{vertical-align:text-bottom}.skin-minerva.mw-special-Watchlist .instantDiffs-line .ext-checkuser-userinfocard-button+.mw-userlink{float:left;clear:none;padding-top:0}.skin-minerva.mw-special-Watchlist .instantDiffs-line .ext-checkuser-userinfocard-button+.mw-userlink+.mw-usertoollinks{float:left;clear:right;padding-top:0}.skin-minerva.mw-special-Watchlist .instantDiffs-line .mw-changeslist-log-entry .ext-checkuser-userinfocard-button{float:none;clear:both}.skin-minerva.mw-special-Watchlist .instantDiffs-line .mw-changeslist-log-entry .ext-checkuser-userinfocard-button+.mw-userlink{float:none;clear:both}.skin-minerva.mw-special-Watchlist .instantDiffs-line .mw-changeslist-log-entry .ext-checkuser-userinfocard-button+.mw-userlink+.mw-usertoollinks{float:none;clear:both}.skin-minerva.mw-special-Recentchanges .instantDiffs-line .mw-userlink:before{width:100%;height:0;min-height:0;margin:0;display:table;content:""}.skin-minerva.mw-special-Recentchanges .instantDiffs-line .mw-usertoollinks{display:inline!important}.skin-minerva.mw-special-Recentchanges .instantDiffs-line .ext-checkuser-userinfocard-button{display:inline-block;float:left;clear:left;padding-top:0}.skin-minerva.mw-special-Recentchanges .instantDiffs-line .ext-checkuser-userinfocard-button-wrapper+.mw-usertoollinks{float:left;clear:right;padding-top:0}.skin-minerva.mw-special-Recentchanges .instantDiffs-line .ext-checkuser-userinfocard-button__icon{vertical-align:text-bottom}.skin-minerva.mw-special-Recentchanges .instantDiffs-line .ext-checkuser-userinfocard-button+.mw-userlink{float:left;clear:none;padding-top:0}.skin-minerva.mw-special-Recentchanges .instantDiffs-line .ext-checkuser-userinfocard-button+.mw-userlink+.mw-usertoollinks{float:left;clear:right;padding-top:0}.skin-minerva.mw-special-Recentchanges .instantDiffs-line .mw-changeslist-log-entry .ext-checkuser-userinfocard-button{float:none;clear:both}.skin-minerva.mw-special-Recentchanges .instantDiffs-line .mw-changeslist-log-entry .ext-checkuser-userinfocard-button+.mw-userlink{float:none;clear:both}.skin-minerva.mw-special-Recentchanges .instantDiffs-line .mw-changeslist-log-entry .ext-checkuser-userinfocard-button+.mw-userlink+.mw-usertoollinks{float:none;clear:both}.skin-minerva.mw-special-Recentchangeslinked .instantDiffs-line .mw-userlink:before{width:100%;height:0;min-height:0;margin:0;display:table;content:""}.skin-minerva.mw-special-Recentchangeslinked .instantDiffs-line .mw-userlink:before{width:0;min-width:0}.skin-minerva.mw-special-Recentchangeslinked .instantDiffs-line .mw-usertoollinks{display:inline!important}.skin-minerva.mw-special-Recentchangeslinked .instantDiffs-line .ext-checkuser-userinfocard-button{display:inline-block;float:left;clear:left;padding-top:0}.skin-minerva.mw-special-Recentchangeslinked .instantDiffs-line .ext-checkuser-userinfocard-button-wrapper+.mw-usertoollinks{float:left;clear:right;padding-top:0}.skin-minerva.mw-special-Recentchangeslinked .instantDiffs-line .ext-checkuser-userinfocard-button__icon{vertical-align:text-bottom}.skin-minerva.mw-special-Recentchangeslinked .instantDiffs-line .ext-checkuser-userinfocard-button+.mw-userlink{float:left;clear:none;padding-top:0}.skin-minerva.mw-special-Recentchangeslinked .instantDiffs-line .ext-checkuser-userinfocard-button+.mw-userlink+.mw-usertoollinks{float:left;clear:right;padding-top:0}.skin-minerva.mw-special-Recentchangeslinked .instantDiffs-line .mw-changeslist-log-entry .ext-checkuser-userinfocard-button{float:none;clear:both}.skin-minerva.mw-special-Recentchangeslinked .instantDiffs-line .mw-changeslist-log-entry .ext-checkuser-userinfocard-button+.mw-userlink{float:none;clear:both}.skin-minerva.mw-special-Recentchangeslinked .instantDiffs-line .mw-changeslist-log-entry .ext-checkuser-userinfocard-button+.mw-userlink+.mw-usertoollinks{float:none;clear:both}.skin-minerva:not(.mw-mf-amc-disabled) .instantDiffs-line .mw-userlink:before{width:100%;height:0;min-height:0;margin:0;display:table;content:""}.skin-minerva:not(.mw-mf-amc-disabled) .instantDiffs-line .mw-usertoollinks{display:inline!important}.skin-minerva:not(.mw-mf-amc-disabled) .instantDiffs-line .mw-changeslist-date{display:inline}.skin-minerva:not(.mw-mf-amc-disabled) .instantDiffs-line--history .mw-userlink:before{width:0;min-width:0}.skin-minerva.mw-mf-amc-disabled .instantDiffs-line a:is(.mw-history-histlinks-previous,.mw-changeslist-diff){position:relative;font-size:.85rem;color:var(--color-progressive, #36c)!important}.skin-minerva.mw-mf-amc-disabled .instantDiffs-line .instantDiffs-panel{display:inline-block;position:relative;z-index:10}.skin-minerva.instantDiffs-enabled .mw-history-compareselectedversions{margin:0;display:flex!important;flex-wrap:wrap;align-items:flex-start;gap:10px;flex:auto;padding:10px 0}.skin-minerva.instantDiffs-enabled .mw-history-compareselectedversions .mw-history-revisionactions{margin:0;display:flex!important;flex-wrap:wrap;align-items:flex-start;gap:10px;flex:auto}.skin-minerva.instantDiffs-enabled .mw-history-compareselectedversions :is(.mw-ui-button,.cdx-button){max-width:none;flex:auto;margin:0}.skin-minerva.instantDiffs-enabled .mw-history-compareselectedversions .mw-history-compareselectedversions-button{width:auto;flex:auto}.skin-minerva.instantDiffs-enabled .mw-history-compareselectedversions .instantDiffs-button--compare{flex:none}.skin-minerva.instantDiffs-enabled .mw-history-compareselectedversions .instantDiffs-spacer,.skin-minerva.mw-mf-amc-disabled .mw-history-compareselectedversions .instantDiffs-button--compare{display:none}.skin-minerva.mw-special-Newpages.instantDiffs-enabled .instantDiffs-line .mw-changeslist-date{display:inline}.skin-minerva.mw-special-Newpages.instantDiffs-enabled .instantDiffs-line .mw-changeslist-time{display:none}.skin-minerva.mw-special-Newpages.instantDiffs-enabled .instantDiffs-line .ext-checkuser-userinfocard-button{float:left}.skin-minerva.mw-special-Newpages.instantDiffs-enabled .instantDiffs-line .mw-userlink:before{display:none}.skin-minerva.mw-special-Newpages.instantDiffs-enabled .instantDiffs-page-body :is(.comment,.mw-userlink,.mw-usertoollinks){float:none;display:inline}.skin-minerva.instantDiffs-enabled .mw-diff-revision-history-links a{flex:none}.skin-minerva.instantDiffs-enabled .mw-diff-revision-history-link-previous+.instantDiffs-panel{margin-inline-end:auto}.skin-minerva.instantDiffs-enabled .instantDiffs-panel:has(+.mw-diff-revision-history-link-next){margin-inline-start:auto}@media screen{.skin-vector-legacy.theme-dark-grey{--instantDiffs-color-link: var(--link, #e6820f);--instantDiffs-color-link--hover: var(--link-vis, #b95500);--instantDiffs-color-link--active: var(--link-vis, #b95500);--instantDiffs-background-link: var(--btn-bg, #2d2d2d);--instantDiffs-background-link--hover: var(--btn-bg, #2d2d2d);--instantDiffs-background-link--active: var(--btn-bg, #2d2d2d);--instantDiffs-background-glass: color-mix(in srgb, var(--bg-main, #232323) 70%, transparent)}}@media screen{.skin-citizen{--instantDiffs-color-link: var(--color-link);--instantDiffs-color-link--hover: var(--color-link--hover);--instantDiffs-color-link--active: var(--color-link--active);--instantDiffs-background-glass: color-mix(in srgb, var(--color-surface-1, #ffffff) 70%, transparent);--instantDiffs-font-size: var(--font-size-medium, 1rem);--instantDiffs-font-size-navigation: var(--font-size-small, .875rem);--instantDiffs-line-height: var(--line-height, 1.6);--instantDiffs-view-radius: var(--border-radius-medium)}}.skin-citizen .instantDiffs-view .oo-ui-messageDialog-title{font-size:var(--font-size-large);line-height:var(--line-height-large);font-weight:var(--font-weight-semi-bold)}.skin-citizen #citizen-lastmod-relative.instantDiffs-link.is-insertBefore:before{margin-right:auto}.skin-citizen #citizen-lastmod-relative.instantDiffs-link.is-insertAfter:after{margin-left:auto}@media screen{.skin-fandomdesktop{--instantDiffs-background-glass: color-mix(in srgb, var(--theme-page-background-color--secondary, #ffffff) 70%, transparent);--instantDiffs-border-color: var(--theme-border-color, #4f4f51);--instantDiffs-line-height: 1.75;--instantDiffs-font-size: 1rem;--instantDiffs-view-top: 45px}}.skin-fandomdesktop .instantDiffs-navigation{margin-inline:-24px}@media(min-width:640px){.skin-fandomdesktop .instantDiffs-navigation{padding-inline:24px}}.skin-fandomdesktop .instantDiffs-buttons-group--vertical hr{border-color:var(--instantDiffs-border-color)}.skin-fandomdesktop .instantDiffs-view-loader{border:none}.skin-fandomdesktop .instantDiffs-view-loader .oo-ui-progressBarWidget-bar{height:.28571429em}@media screen{.skin-fandommobile{--instantDiffs-background-glass: color-mix(in srgb, var(--theme-page-background-color--secondary, #ffffff) 70%, transparent);--instantDiffs-border-color: var(--theme-border-color, #4f4f51);--instantDiffs-line-height: 1.75;--instantDiffs-font-size: 1rem;--instantDiffs-view-top: 55px}}.skin-fandommobile .instantDiffs-navigation{margin-inline:-24px}@media(min-width:640px){.skin-fandommobile .instantDiffs-navigation{padding-inline:24px}}.skin-fandommobile .instantDiffs-buttons-group--vertical hr{border-color:var(--instantDiffs-border-color)}.skin-fandommobile .instantDiffs-view-loader{border:none}.skin-fandommobile .instantDiffs-view-loader .oo-ui-progressBarWidget-bar{height:.28571429em}@media screen{.skin-overclocked{--instantDiffs-font-size: 1.3rem;--instantDiffs-font-size-navigation: var(--instantDiffs-font-size);--instantDiffs-font-size-hint: 1.2rem;--instantDiffs-view-top: 45px}}.skin-overclocked .mw-history-compareselectedversions{margin-top:10px;margin-bottom:10px}.skin-overclocked .mw-history-compareselectedversions-button{margin-top:0;margin-bottom:0}.skin-overclocked .instantDiffs-button--compare{padding:8px 12px}.skin-overclocked .instantDiffs-view-loader{border:none;box-shadow:none}.skin-overclocked .instantDiffs-view-loader .oo-ui-progressBarWidget-bar{height:.28571429em} /* </nowiki> */ jj0z0tkeoo5bfx1y9w8o1kuh4o7ddiq User:Serhio Magpie/instantDiffs.js 2 167026 746367 745853 2026-06-13T06:21:12Z Serhio Magpie 37334 [98b3516] [v5.14.1]: Updated from repository. 746367 javascript text/javascript /** * Instant Diffs * * Version: 5.14.1 * Author: Serhio Magpie * Licenses: (MIT OR CC-BY-SA-4.0) * Documentation: https://www.mediawiki.org/wiki/Instant_Diffs * * For license information please see: https://www.mediawiki.org/wiki/User:Serhio_Magpie/instantDiffs.js.LEGAL.txt */ /* <nowiki> */ (()=>{var co=Object.create;var Ue=Object.defineProperty,fo=Object.defineProperties,uo=Object.getOwnPropertyDescriptor,ho=Object.getOwnPropertyDescriptors,po=Object.getOwnPropertyNames,Os=Object.getOwnPropertySymbols,Ms=Object.getPrototypeOf,Is=Object.prototype.hasOwnProperty,go=Object.prototype.propertyIsEnumerable,mo=Reflect.get;var ni=(i,e,t)=>e in i?Ue(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,f=(i,e)=>{for(var t in e||(e={}))Is.call(e,t)&&ni(i,t,e[t]);if(Os)for(var t of Os(e))go.call(e,t)&&ni(i,t,e[t]);return i},j=(i,e)=>fo(i,ho(e));var Rs=i=>e=>{var t=i[e];if(t)return t();throw new Error("Module not found in bundle: "+e)};var v=(i,e,t)=>()=>{if(t)throw t[0];try{return i&&(e=i(i=0)),e}catch(s){throw t=[s],s}};var se=(i,e)=>()=>{try{return e||i((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},Q=(i,e)=>{for(var t in e)Ue(i,t,{get:e[t],enumerable:!0})},Ws=(i,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of po(e))!Is.call(i,n)&&n!==t&&Ue(i,n,{get:()=>e[n],enumerable:!(s=uo(e,n))||s.enumerable});return i};var wo=(i,e,t)=>(t=i!=null?co(Ms(i)):{},Ws(e||!i||!i.__esModule?Ue(t,"default",{value:i,enumerable:!0}):t,i)),Ie=i=>Ws(Ue({},"__esModule",{value:!0}),i);var a=(i,e,t)=>ni(i,typeof e!="symbol"?e+"":e,t);var Le=(i,e,t)=>mo(Ms(i),t,e);var m=(i,e,t)=>new Promise((s,n)=>{var r=h=>{try{u(t.next(h))}catch(b){n(b)}},c=h=>{try{u(t.throw(h))}catch(b){n(b)}},u=h=>h.done?s(h.value):Promise.resolve(h.value).then(r,c);u((t=t.apply(i,e)).next())});var bo,o,T=v(()=>{self.instantDiffs||(self.instantDiffs={});bo=self.instantDiffs,o=bo});var qs=se((Tr,Vs)=>{Vs.exports=(function(e){var t=String.prototype.split,s=/()??/.exec("")[1]===e,n;return n=function(r,p,u){if(Object.prototype.toString.call(p)!=="[object RegExp]")return t.call(r,p,u);var h=[],b=(p.ignoreCase?"i":"")+(p.multiline?"m":"")+(p.extended?"x":"")+(p.sticky?"y":""),D=0,p=new RegExp(p.source,b+"g"),L,E,he,Cs;for(r+="",s||(L=new RegExp("^"+p.source+"$(?!\\s)",b)),u=u===e?-1>>>0:u>>>0;(E=p.exec(r))&&(he=E.index+E[0].length,!(he>D&&(h.push(r.slice(D,E.index)),!s&&E.length>1&&E[0].replace(L,function(){for(var ht=1;ht<arguments.length-2;ht++)arguments[ht]===e&&(E[ht]=e)}),E.length>1&&E.index<r.length&&Array.prototype.push.apply(h,E.slice(1)),Cs=E[0].length,D=he,h.length>=u)));)p.lastIndex===E.index&&p.lastIndex++;return D===r.length?(Cs||!p.test(""))&&h.push(""):h.push(r.slice(D)),h.length>u?h.slice(0,u):h},n})()});var Bs=se((Cr,js)=>{var vo=[].indexOf;js.exports=function(i,e){if(vo)return i.indexOf(e);for(var t=0;t<i.length;++t)if(i[t]===e)return t;return-1}});var ri=se((Or,Us)=>{var oi=Bs();Us.exports=ko;function ko(i){var e=i.classList;if(e)return e;var t={add:s,remove:n,contains:r,toggle:c,toString:u,length:0,item:h};return t;function s(p){var L=b();oi(L,p)>-1||(L.push(p),D(L))}function n(p){var L=b(),E=oi(L,p);E!==-1&&(L.splice(E,1),D(L))}function r(p){return oi(b(),p)>-1}function c(p){return r(p)?(n(p),!1):(s(p),!0)}function u(){return i.className}function h(p){var L=b();return L[p]||null}function b(){var p=i.className;return yo(p.split(" "),xo)}function D(p){var L=p.length;i.className=p.join(" "),t.length=L;for(var E=0;E<p.length;E++)t[E]=p[E];delete p[L]}}function yo(i,e){for(var t=[],s=0;s<i.length;s++)e(i[s])&&t.push(i[s]);return t}function xo(i){return!!i}});var Hs=se((Mr,_s)=>{var Do={className:"class",htmlFor:"for"},Lo={accept:new Set(["form","input"]),"accept-charset":new Set(["form"]),accesskey:"GLOBAL",action:new Set(["form"]),align:new Set(["applet","caption","col","colgroup","hr","iframe","img","table","tbody","td","tfoot","th","thead","tr"]),alt:new Set(["applet","area","img","input"]),async:new Set(["script"]),autocomplete:new Set(["form","input"]),autofocus:new Set(["button","input","keygen","select","textarea"]),autoplay:new Set(["audio","video"]),autosave:new Set(["input"]),bgcolor:new Set(["body","col","colgroup","marquee","table","tbody","tfoot","td","th","tr"]),border:new Set(["img","object","table"]),buffered:new Set(["audio","video"]),challenge:new Set(["keygen"]),charset:new Set(["meta","script"]),checked:new Set(["command","input"]),cite:new Set(["blockquote","del","ins","q"]),class:"GLOBAL",code:new Set(["applet"]),codebase:new Set(["applet"]),color:new Set(["basefont","font","hr"]),cols:new Set(["textarea"]),colspan:new Set(["td","th"]),content:new Set(["meta"]),contenteditable:"GLOBAL",contextmenu:"GLOBAL",controls:new Set(["audio","video"]),coords:new Set(["area"]),data:new Set(["object"]),datetime:new Set(["del","ins","time"]),default:new Set(["track"]),defer:new Set(["script"]),dir:"GLOBAL",dirname:new Set(["input","textarea"]),disabled:new Set(["button","command","fieldset","input","keygen","optgroup","option","select","textarea"]),download:new Set(["a","area"]),draggable:"GLOBAL",dropzone:"GLOBAL",enctype:new Set(["form"]),for:new Set(["label","output"]),form:new Set(["button","fieldset","input","keygen","label","meter","object","output","progress","select","textarea"]),formaction:new Set(["input","button"]),headers:new Set(["td","th"]),height:new Set(["canvas","embed","iframe","img","input","object","video"]),hidden:"GLOBAL",high:new Set(["meter"]),href:new Set(["a","area","base","link"]),hreflang:new Set(["a","area","link"]),"http-equiv":new Set(["meta"]),icon:new Set(["command"]),id:"GLOBAL",ismap:new Set(["img"]),itemprop:"GLOBAL",keytype:new Set(["keygen"]),kind:new Set(["track"]),label:new Set(["track"]),lang:"GLOBAL",language:new Set(["script"]),list:new Set(["input"]),loop:new Set(["audio","bgsound","marquee","video"]),low:new Set(["meter"]),manifest:new Set(["html"]),max:new Set(["input","meter","progress"]),maxlength:new Set(["input","textarea"]),maxlength:new Set(["input","textarea"]),media:new Set(["a","area","link","source","style"]),method:new Set(["form"]),min:new Set(["input","meter"]),multiple:new Set(["input","select"]),muted:new Set(["video"]),name:new Set(["button","form","fieldset","iframe","input","keygen","object","output","select","textarea","map","meta","param"]),novalidate:new Set(["form"]),open:new Set(["details"]),optimum:new Set(["meter"]),pattern:new Set(["input"]),ping:new Set(["a","area"]),placeholder:new Set(["input","textarea"]),poster:new Set(["video"]),preload:new Set(["audio","video"]),radiogroup:new Set(["command"]),readonly:new Set(["input","textarea"]),rel:new Set(["a","area","link"]),required:new Set(["input","select","textarea"]),reversed:new Set(["ol"]),rows:new Set(["textarea"]),rowspan:new Set(["td","th"]),sandbox:new Set(["iframe"]),scope:new Set(["th"]),scoped:new Set(["style"]),seamless:new Set(["iframe"]),selected:new Set(["option"]),shape:new Set(["a","area"]),size:new Set(["input","select"]),sizes:new Set(["img","link","source"]),span:new Set(["col","colgroup"]),spellcheck:"GLOBAL",src:new Set(["audio","embed","iframe","img","input","script","source","track","video"]),srcdoc:new Set(["iframe"]),srclang:new Set(["track"]),srcset:new Set(["img"]),start:new Set(["ol"]),step:new Set(["input"]),style:"GLOBAL",summary:new Set(["table"]),tabindex:"GLOBAL",target:new Set(["a","area","base","form"]),title:"GLOBAL",type:new Set(["button","input","command","embed","object","script","source","style","menu"]),usemap:new Set(["img","input","object"]),value:new Set(["button","option","input","li","meter","progress","param"]),width:new Set(["canvas","embed","iframe","img","input","object","video"]),wrap:new Set(["textarea"])};function Po(i,e){e=e.toLowerCase();var t=Lo[i.toLowerCase()];return!!t&&(t==="GLOBAL"||t.has(e))}function So(i){return Do[i]||i}_s.exports={isStandardAttribute:Po,propToAttr:So}});var Zs=se((Ir,Js)=>{var Eo=ri(),Gs=Hs();function _e(i,e){this.type=i,this.target=null,Object.keys(e||{}).forEach(function(t){this[t]=e[t]},this)}_e.prototype.preventDefault=function(){};_e.prototype.stopPropagation=function(){};_e.prototype.stopImmediatePropagation=function(){};function Ks(i,e){this._eventListeners=this._eventListeners||{},this._eventListeners[i]=this._eventListeners[i]||[];var t=this._eventListeners[i];t.indexOf(e)===-1&&t.push(e)}function Qs(i,e){var t=this._eventListeners&&this._eventListeners[i];if(t){var s=t.indexOf(e);s!==-1&&t.splice(s,1)}}function Ys(i){i.target=this;var e=this._eventListeners&&this._eventListeners[i.type];return e&&e.forEach(function(t){t(i)}),!0}function pe(){}pe.prototype.createTextNode=function(i){var e=new U;return e.textContent=i,e.nodeName="#text",e.nodeType=3,e};pe.prototype.createElement=function(i){var e=new O;return e.nodeName=e.tagName=i,e};pe.prototype.createComment=function(i){var e=new Y;return e.data=i,e};pe.prototype.addEventListener=Ks;pe.prototype.removeEventListener=Qs;pe.prototype.dispatchEvent=Ys;function He(){}U.prototype=new He;O.prototype=new He;Y.prototype=new He;function Ge(i){this.el=i,this.styles=[]}Ge.prototype.setProperty=function(i,e){this.el._setProperty(this.styles,{name:i,value:e})};Ge.prototype.getProperty=function(i){return this.el._getProperty(this.styles,i)};Ge.prototype.__defineGetter__("cssText",function(){var i="";return this.styles.forEach(function(e){i+=e.name+":"+e.value+";"}),i});Ge.prototype.__defineSetter__("cssText",function(i){this.styles.length=0,i.split(";").forEach(function(e){var t=e.indexOf(":");if(t){var s=e.slice(0,t).trim(),n=e.slice(t+1).trim();this.setProperty(s,n)}},this)});function $o(i,e){i&&(this.name=i,this.value=e||"")}function O(){var i=this;this.style=new Ge(this),this.classList=Eo(this),this.childNodes=[],this.attributes=[],this.dataset={},this.className="",this._setProperty=function(e,t,s,n){var r=i._getProperty(e,s);if(r){r.value=String(n);return}e.push(typeof t=="function"?new t(s.toLowerCase(),String(n)):t)},this._getProperty=function(e,t){if(t){t=t.toLowerCase();for(var s=0;s<e.length;s++)if(t===e[s].name)return e[s]}}}O.prototype.nodeType=1;O.prototype.appendChild=function(i){return i.parentElement=this,this.childNodes.push(i),i};O.prototype.setAttribute=function(i,e){i==="style"?this.style.cssText=e:this._setProperty(this.attributes,$o,i,e)};O.prototype.getAttribute=function(i){if(i==="style")return this.style.cssText;var e=this._getProperty(this.attributes,i);return typeof e!="undefined"?e.value:null};O.prototype.removeAttribute=function(i){if(i==="class")delete this.className;else for(var e=0,t=this.attributes.length;e<t;e++)if(this.attributes[e].name===i){this.attributes.splice(e,1);break}};O.prototype.replaceChild=function(i,e){var t=this,s=!1;if(this.childNodes.forEach(function(n,r){n===e&&(t.childNodes[r]=i,i.parentElement=this,s=!0)}),s)return e};O.prototype.removeChild=function(i){var e=this,t=!0;if(this.childNodes.forEach(function(s,n){s===i&&(e.childNodes.splice(n,1),i.parentElement=null,t=!0)}),t)return i};O.prototype.insertBefore=function(i,e){var t=this.childNodes;if(e===null)t.push(i);else for(var s=0,n=t.length;s<n;s++){var r=t[s];if(r===e){s===0?t.unshift(i):t.splice(s,0,i);break}}return i.parentElement=this,i};O.prototype.addEventListener=Ks;O.prototype.removeEventListener=Qs;O.prototype.dispatchEvent=Ys;O.prototype.insertAdjacentHTML=function(i,e){};O.prototype.__defineGetter__("innerHTML",function(){var i=this.childNodes.html||"";return this.childNodes.forEach(function(e){i+=e.outerHTML||e.textContent}),i});O.prototype.__defineSetter__("innerHTML",function(i){this.childNodes.length=0,this.childNodes.html=i});O.prototype.__defineGetter__("outerHTML",function(){var i=[],e=this,t={AREA:!0,BASE:!0,BR:!0,COL:!0,EMBED:!0,HR:!0,IMG:!0,INPUT:!0,KEYGEN:!0,LINK:!0,META:!0,PARAM:!0,SOURCE:!0,TRACK:!0,WBR:!0};function s(h){var b=[],D;return h.forEach(function(p){D=p.name!="style"?p.value:e.style.cssText,b.push(p.name+'="'+zs(D)+'"')}),b.length?" "+b.join(" "):""}function n(h){var b=[],D;return Object.keys(h).forEach(function(p){b.push("data-"+p+'="'+zs(h[p])+'"')}),b.length?" "+b.join(" "):""}function r(){var h=[];for(var b in e){var D=Gs.propToAttr(b);e.hasOwnProperty(b)&&["string","boolean","number"].indexOf(typeof e[b])!==-1&&Gs.isStandardAttribute(D,e.nodeName)&&c(b,D)&&h.push({name:D,value:e[b]})}return h?s(h):""}function c(h,b){return e.getAttribute(b)?!1:!(h==="className"&&!e[h])}var u=this.style.cssText?this.attributes.concat([{name:"style"}]):this.attributes;return i.push("<"+this.nodeName+r()+s(u)+n(this.dataset)+">"),t[this.nodeName.toUpperCase()]||(i.push(this.innerHTML),i.push("</"+this.nodeName+">")),i.join("")});O.prototype.__defineGetter__("textContent",function(){var i="";return this.childNodes.forEach(function(e){i+=e.textContent}),i});O.prototype.__defineSetter__("textContent",function(i){var e=new U;return e.textContent=i,this.childNodes=[e],i});function ze(i){return String(i).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function zs(i){return ze(i).replace(/"/g,"&quot;")}O.prototype.nodeValue=null;function U(){}U.prototype.nodeType=3;U.prototype.nodeName="#text";U.prototype.__defineGetter__("textContent",function(){return ze(this.value||"")});U.prototype.__defineSetter__("textContent",function(i){this.value=i});U.prototype.__defineGetter__("nodeValue",function(){return ze(this.value||"")});U.prototype.__defineSetter__("nodeValue",function(i){this.value=i});U.prototype.__defineGetter__("length",function(){return(this.value||"").length});U.prototype.replaceData=function(i,e,t){this.value=this.value.slice(0,i)+t+this.value.slice(i+e)};function Y(){}Y.prototype.nodeType=8;Y.prototype.nodeName="#comment";Y.prototype.__defineGetter__("data",function(){return this.value});Y.prototype.__defineSetter__("data",function(i){this.value=i});Y.prototype.__defineGetter__("outerHTML",function(){return"<!--"+ze(this.value||"")+"-->"});Y.prototype.__defineGetter__("nodeValue",function(){return ze(this.value||"")});Y.prototype.__defineSetter__("nodeValue",function(i){this.value=i});function pt(i){i.__defineGetter__("parentNode",function(){return this.parentElement})}pt(O.prototype);pt(Y.prototype);pt(U.prototype);pt(He.prototype);Js.exports={Document:pe,Node:He,Element:O,Comment:Y,Text:U,document:new pe,Event:_e,CustomEvent:_e}});var nn=se((Rr,sn)=>{var Ao=qs(),To=ri(),en=typeof window=="undefined"?Zs():window,Ke=en.document,Co=en.Text;function tn(){var i=[];function e(){var t=[].slice.call(arguments),s=null;function n(r){var c;function u(p){var L=Ao(p,/([\.#]?[^\s#.]+)/);/^\.|#/.test(L[1])&&(s=Ke.createElement("div")),Xs(L,function(E){var he=E.substring(1,E.length);E&&(s?E[0]==="."?To(s).add(he):E[0]==="#"&&s.setAttribute("id",he):s=Ke.createElement(E))})}if(r!=null){if(typeof r=="string")s?s.appendChild(c=Ke.createTextNode(r)):u(r);else if(typeof r=="number"||typeof r=="boolean"||r instanceof Date||r instanceof RegExp)s.appendChild(c=Ke.createTextNode(r.toString()));else if(Mo(r))Xs(r,n);else if(ai(r))s.appendChild(c=r);else if(r instanceof Co)s.appendChild(c=r);else if(typeof r=="object")for(var h in r)if(typeof r[h]=="function")/^on\w+/.test(h)?(function(p,L){s.addEventListener?(s.addEventListener(p.substring(2),L[p],!1),i.push(function(){s.removeEventListener(p.substring(2),L[p],!1)})):(s.attachEvent(p,L[p]),i.push(function(){s.detachEvent(p,L[p])}))})(h,r):(s[h]=r[h](),i.push(r[h](function(p){s[h]=p})));else if(h==="style")if(typeof r[h]=="string")s.style.cssText=r[h];else for(var b in r[h])(function(p,L){if(typeof L=="function")s.style.setProperty(p,L()),i.push(L(function(he){s.style.setProperty(p,he)}));else var E=r[h][p].match(/(.*)\W+!important\W*$/);E?s.style.setProperty(p,E[1],"important"):s.style.setProperty(p,r[h][p])})(b,r[h][b]);else if(h==="attrs")for(var D in r[h])s.setAttribute(D,r[h][D]);else h.substr(0,5)==="data-"?s.setAttribute(h,r[h]):s[h]=r[h];else if(typeof r=="function"){var D=r();s.appendChild(c=ai(D)?D:Ke.createTextNode(D)),i.push(r(function(L){ai(L)&&c.parentElement?(c.parentElement.replaceChild(L,c),c=L):c.textContent=L}))}}return c}for(;t.length;)n(t.shift());return s}return e.cleanup=function(){for(var t=0;t<i.length;t++)i[t]();i.length=0},e}var Oo=sn.exports=tn();Oo.context=tn;function ai(i){return i&&i.nodeName&&i.nodeType}function Xs(i,e){if(i.forEach)return i.forEach(e);for(var t=0;t<i.length;t++)e(i[t],t)}function Mo(i){return Object.prototype.toString.call(i)=="[object Array]"}});var gt,V,ge=v(()=>{P();oe();M();_();gt=class{constructor(e,t){a(this,"options",{});a(this,"values",{type:null,typeVariant:null,hostname:location.hostname});a(this,"mw",{serverName:mw.config.get("wgServerName"),mobileServerName:mw.config.get("wgMobileServerName")});a(this,"isValid",!1);a(this,"isForeign",!1);a(this,"isHidden",!1);this.options=f({fixTenet:!0},t),N(e)||this.set(e)}set(e){this.values=f(f({},this.values),this.validateValues(e)),this.isValid=this.validate(),this.process()}setValue(e,t){this.values[e]=t}setValues(e){for(let[t,s]of Object.entries(e))this.setValue(t,s)}get(e){return this.values[e]}getValues(){return this.values}getMW(e){return this.mw[e]}validateValues(e){return!l(e.diff)&&F(e.diff)&&e.diff.indexOf("|")>-1&&(e.diff=e.diff.split("|").shift()),!l(e.oldid)&&F(e.oldid)&&e.oldid.indexOf("|")>-1&&(e.oldid=e.oldid.split("|").shift()),!l(e.curid)&&F(e.curid)&&e.curid.indexOf("|")>-1&&(e.curid=e.curid.split("|").shift()),[0,"0"].includes(e.oldid)&&delete e.oldid,[0,"0","current","latest"].includes(e.diff)&&(e.diff="cur"),R(e.direction)||(e.direction="prev"),l(e.hash)||(e.hash=mw.util.percentDecodeFragment(e.hash),e.hash&&(e.hash=e.hash.replace(/^#/,""))),l(e.section)||(e.section=e.section.replace(/^#/,"")),e}validate(){if(mt(this.values.title)==="Special:ComparePages"&&(!l(this.values.page1)||w(this.values.rev1))&&(!l(this.values.page2)||w(this.values.rev2)))return this.options.fixTenet=!1,this.values.type="diff",this.values.typeVariant="comparePages",!0;if(mt(this.values.title)==="Special:Undelete")return this.values.type="diff",this.values.typeVariant="undelete",!1;if(w(this.values.oldid)&&l(this.values.diff))return this.values.type="revision",!0;if(w(this.values.diff)||w(this.values.oldid)){if(this.values.type="diff",l(this.values.title)&&R(this.values.oldid)){let e=this.values.oldid;this.values.oldid=this.values.diff,this.values.diff=e}if(l(this.values.oldid)&&(this.values.oldid=this.values.diff,this.values.diff=this.values.direction),this.options.fixTenet&&w(this.values.oldid)&&w(this.values.diff)&&parseInt(this.values.oldid)>parseInt(this.values.diff)){let e=this.values.oldid;this.values.oldid=this.values.diff,this.values.diff=e}return!0}return!l(this.values.title)&&R(this.values.diff)?(this.values.type="diff",!0):w(this.values.curid)?(this.values.type="revision",this.values.typeVariant="page",!0):!1}process(){this.values.revid=li(this),l(this.values.hostname)||this.setHostname(),l(this.values.title)||this.setTitle(),(!l(this.values.page1)||!l(this.values.page2))&&this.setComparePages()}setHostname(){let{general:e}=x.siteInfoAliases[this.values.hostname]||{};N(e)?(this.mw.serverName=this.values.hostname,this.mw.mobileServerName=this.values.hostname):(this.values.hostname=Pe()&&!l(e.mobileservername)?e.mobileservername:e.servername,this.mw.serverName=e.servername,this.mw.mobileServerName=e.mobileservername),this.mw.endPoint=`https://${this.values.hostname}${mw.util.wikiScript("index")}`,this.mw.endPointUrl=new URL(this.mw.endPoint),this.isForeign=re(this.values.hostname)}setTitle(){l(this.values.origTitle)&&(this.values.origTitle=this.values.title);try{this.mw.title=new mw.Title(this.values.title),this.values.title=this.mw.title.getPrefixedDb(),this.values.titleText=this.mw.title.getPrefixedText()}catch(e){}d.get("linksHash")&&!l(this.values.section)&&(this.values.titleSection=[this.values.title,this.values.section].join("#"),this.values.titleTextSection=[this.values.titleText,this.values.section].join("#")),this.values.href=mw.util.getUrl(this.values.titleSection||this.values.title),this.isForeign&&(this.values.href=z(this,this.values.href))}setComparePages(){try{this.mw.page1=new mw.Title(this.values.page1),this.values.page1=this.mw.page1.getPrefixedDb(),this.values.page1Text=this.mw.page1.getPrefixedText()}catch(e){}try{this.mw.page2=new mw.Title(this.values.page2),this.values.page2=this.mw.page2.getPrefixedDb(),this.values.page2Text=this.mw.page2.getPrefixedText()}catch(e){}}};a(gt,"utils",wt);V=gt});var J,ci,x,_=v(()=>{T();P();me();M();ge();J=class J{static getApi(e){let t=e instanceof V?e.get("hostname"):e;if(!re(t))return this.api||(this.api=new mw.Api),this.api;if(!this.foreignApi[t]){let s=`https://${t}${mw.util.wikiScript("api")}`;this.foreignApi[t]=new mw.ForeignApi(s)}return this.foreignApi[t]}static get(e,t){return this.getApi(t).get(e)}static post(e,t){return this.getApi(t).post(e)}static postWithToken(e,t,s){return this.getApi(s).postWithToken(e,t)}static watch(e,t,s){return this.getApi(s).watch(e,t)}static unwatch(e,t){return this.getApi(t).unwatch(e)}static notifyError(e){C("error-api-generic",{tag:"api",message:(e==null?void 0:e.message)||e,silent:!0})}static getAuthToken(e){let t={action:"centralauthtoken",format:"json",formatversion:2,uselang:o.local.language};return this.get(t,e)}static loadMessage(e,t){return e=typeof e=="string"?[e]:e,e.filter(n=>!mw.message(n).exists()).length===0?$.Deferred().resolve().promise():this.getApi(t).loadMessagesIfMissing(e,{uselang:o.local.userLanguage})}static parseWikitext(e,t){return m(this,null,function*(){e=f({action:"parse",contentmodel:"wikitext",format:"json",formatversion:2,uselang:o.local.language},e);try{let{parse:s}=yield this.post(e,t);return s.text}catch(s){this.notifyError(s)}})}static getCompare(e,t,s){return m(this,null,function*(){e=f({action:"compare",prop:["title","ids","timestamp","comment"],format:"json",formatversion:2,uselang:o.local.userLanguage},e);let n=s||this;try{return(yield n.get(e,t)).compare}catch(r){this.notifyError(r)}})}static getPageInfo(e,t,s){return m(this,null,function*(){var c;let n=o.local.userLanguage;e=f({action:"query",prop:["info","pageprops","entityterms"],inprop:["watched","notificationtimestamp"],wbetterms:["label"],wbetlanguage:n,intestactions:["edit"],format:"json",formatversion:2,uselang:n},e);let r=s||this;try{let{query:u}=yield r.get(e,t),h=(c=u.pages)==null?void 0:c[0],b=di(u);return{page:h,error:b}}catch(u){this.notifyError(u)}})}static markAsSeen(e,t){return m(this,null,function*(){e=f({action:"setnotificationtimestamp",redirects:1,format:"json",formatversion:2,uselang:o.local.userLanguage},e);try{return(yield this.postWithToken("csrf",e,t)).setnotificationtimestamp[0].notificationtimestamp}catch(s){this.notifyError(s)}})}static getSiteInfo(){return m(this,arguments,function*(e=["general","skins"],t,s){let n=t instanceof V?t.get("hostname"):t;if(l(n)&&(n=mw.config.get("wgServerName")),!Qe()&&N(this.siteInfo)&&(this.siteInfo=mw.storage.getObject(`${o.config.prefix}-siteInfo`)||{},this.processSiteInfo()),this.checkSiteInfo(n,e))return this.siteInfoAliases[n]||this.siteInfo[n];let r={action:"query",meta:"siteinfo",siprop:e,format:"json",formatversion:2,uselang:o.local.userLanguage},c=s||this;try{let{query:u}=yield c.get(r,n);this.siteInfo[n]||(this.siteInfo[n]={});for(let[h,b]of Object.entries(u))this.siteInfo[n][h]=b;return mw.storage.setObject(`${o.config.prefix}-siteInfo`,this.siteInfo,d.get("storageExpiry")),this.processSiteInfoAliases(this.siteInfo[n]),this.siteInfo[n]}catch(u){this.notifyError(u)}})}static processSiteInfo(){if(!N(this.siteInfo))for(let e of Object.values(this.siteInfo))this.processSiteInfoAliases(e)}static processSiteInfoAliases(e){N(e==null?void 0:e.general)||(this.siteInfoAliases[e.general.servername]=e,l(e.general.mobileserver)||(e.general.mobileservername=te("hostname",e.general.mobileserver),this.siteInfoAliases[e.general.mobileservername]=e))}static checkSiteInfo(e,t=[]){return this.siteInfoAliases[e]?l(t)||t.every(s=>this.siteInfoAliases[e][s]):this.siteInfo[e]?l(t)||t.every(s=>this.siteInfo[e][s]):!1}static siteInfoHasSkin(e,t){return m(this,null,function*(){let{skins:s}=(yield J.getSiteInfo(["skins"],t))||{};return s==null?void 0:s.some(n=>n.code===e)})}static getSpecialPages(e){return m(this,null,function*(){if(N(this.specialPages)&&o.config.specialPages.forEach(s=>{this.specialPages[s]=s}),!Qe()&&N(this.specialPagesLocal)&&(this.specialPagesLocal=mw.storage.getObject(`${o.config.prefix}-specialPagesLocal`)||{}),!N(this.specialPagesLocal))return this.specialPagesLocal;for(let[s,n]of Object.entries(this.specialPages))this.specialPagesLocal[s]=n;let t={action:"query",titles:o.config.specialPages,format:"json",formatversion:2,uselang:mw.config.get("wgContentLanguage")};try{let{query:s}=yield this.get(t,e);return s.normalized&&s.normalized.forEach(n=>{this.specialPagesLocal[n.from]=n.to}),mw.storage.setObject(`${o.config.prefix}-specialPagesLocal`,this.specialPagesLocal,d.get("storageExpiry")),this.specialPagesLocal}catch(s){this.notifyError(s)}})}static getInterwikiMap(e){return m(this,null,function*(){if(!Qe()&&l(this.interwikiMap)&&(this.interwikiMap=mw.storage.getObject(`${o.config.prefix}-interwikiMap`)||[]),!l(this.interwikiMap))return this.interwikiMap;let t={action:"query",meta:"siteinfo",siprop:"interwikimap",format:"json",formatversion:2,uselang:o.local.userLanguage};try{let{query:s}=yield this.get(t,e);return this.interwikiMap=s.interwikimap,mw.storage.setObject(`${o.config.prefix}-interwikiMap`,this.interwikiMap,d.get("storageExpiry")),this.interwikiMap}catch(s){this.notifyError(s)}})}static getWBLabel(e,t,s){return m(this,null,function*(){if(!fi(e))return;let n=o.local.userLanguage,r={action:"wbgetentities",props:"labels",ids:e,languages:n,languagefallback:1,format:"json",formatversion:2,uselang:n},c=s||this;try{let{entities:u}=yield c.get(r,t),h=u[e];return h.type==="lexeme"?Object.values(h.lemmas).map(b=>b.value).join("/"):h.labels[n].value}catch(u){this.notifyError(u)}})}};a(J,"utils",ui),a(J,"api"),a(J,"foreignApi",{}),a(J,"siteInfo",{}),a(J,"siteInfoAliases",{}),a(J,"specialPages",{}),a(J,"specialPagesLocal",{}),a(J,"interwikiMap",[]);ci=J,x=ci});var ui={};Q(ui,{getEntitySchemaLabel:()=>pi,getNamespaceConfig:()=>hi,getQueryPageError:()=>di,getQueryRevisionError:()=>mi,getWikilambdaLabel:()=>gi,isEditableContentModel:()=>Ye,isProbablyWbTitle:()=>fi,isWbContentModel:()=>ae});function hi(i){let e=x.siteInfoAliases[i];if(!N(e))return{wgFormattedNamespaces:Object.values(e.namespaces).reduce((t,s)=>(t[s.id]=s.canonical||"",t),{}),wgNamespaceIds:f(f({},Object.values(e.namespaces).reduce((t,s)=>(t[bt(s.name.toLowerCase())]=s.id,s.canonical&&(t[bt(s.canonical.toLowerCase())]=s.id),t),{})),e.namespacealiases.reduce((t,s)=>(t[s.alias.toLowerCase()]=s.id,t),{})),wgCaseSensitiveNamespaces:Object.values(e.namespaces).filter(t=>t.case==="case-sensitive").map(t=>t.id),wgContentNamespaces:Object.values(e.namespaces).filter(t=>t.content).map(t=>t.id)}}function fi(i){return!l(i)&&/^[QPL][0-9]+$/.test(i)}function ae(i){return!l(i)&&i.includes("wikibase")}function Ye(i){return!o.config.nonEditableContentModels.includes(i)}function pi(i){return $(i).find(".entityschema-title-label").text()}function gi(i){return!N(i)&&(i[`wikilambda-label-${o.local.userLanguage}`]||i["wikilambda-label-en"])}function di(i){var s;let e=(s=i.pages)==null?void 0:s[0],t={type:"revision"};if(i.badrevids?t.code="badrevids":i.badpageids?t.code="badpageids":!e||e.missing?t.code="missing":e.invalid&&(t.code="invalid",t.info=e.invalidreason),!!t.code)return t}function mi(i){var n,r;let e=(n=i.pages)==null?void 0:n[0],t=(r=e==null?void 0:e.revisions)==null?void 0:r[0],s={type:"revision"};if(i.badrevids?s.code="badrevids":i.badpageids?s.code="badpageids":!e||e.missing||!t?s.code="missing":e.invalid&&(s.code="invalid",s.info=e.invalidreason),!!s.code)return s}var me=v(()=>{T();P();_()});var wt={};Q(wt,{addLinkTags:()=>yi,getDependencies:()=>wi,getForeignDependencies:()=>bi,getHref:()=>q,getHrefAbsolute:()=>z,getRevID:()=>li,getWikilink:()=>Di,loadForeignDependencies:()=>vi,loadForeignStylesDependencies:()=>ki,removeLinkTags:()=>xi});function li(i){let e=i.getValues();if(w(e.revid))return e.revid;if(e.type==="revision"&&w(e.oldid)&&(!R(e.direction)||e.direction==="prev"))return e.oldid;if(e.type==="diff"){if(w(e.oldid)&&w(e.diff))return Math.max(e.oldid,e.diff);if(w(e.oldid)){if(!R(e.diff)||e.diff==="prev")return e.oldid}else if(w(e.diff)&&(!R(e.oldid)||e.oldid==="prev"))return e.diff}return!1}function wi(i){let e=[],t=o.config.dependencies.page;t&&(e=e.concat(Re(i,t)));let s=o.config.dependencies[i.get("type")];s&&(e=e.concat(Re(i,s)));let n=o.config.dependencies.skins[mw.config.get("skin")];return n&&(e=e.concat(Re(i,n))),e}function Re(i,e){var n;let t=[];if(l(e))return t;Z(e["*"])&&(t=t.concat(e["*"]));let s=(n=i.getMW("title"))==null?void 0:n.getNamespaceId();return Z(e[s])&&(t=t.concat(e[s])),t}function bi(i){let e=[],t=[],s=[],n=o.config.foreignDependencies[i.get("type")];if(n){if(e=e.concat(Re(i,n)),t=t.concat(Re(i,n.styles)),ae(mw.config.get("wgPageContentModel"))){let r=n.wikibase;r&&(e=e.concat(Re(i,r)),t=t.concat(r.styles.all,Pe()?r.styles.mobile:r.styles.desktop))}s=s.concat(Io(i,n.links))}return{modules:e,styles:t,links:s}}function Io(i,e){var n;let t=[];if(l(e))return t;Z(e["*"])&&(t=t.concat(e["*"].map(r=>on(i,r))));let s=(n=i.getMW("title"))==null?void 0:n.getNamespaceId();return Z(e[s])&&(t=t.concat(e[s].map(r=>on(i,r)))),t}function vi(i,e){let t=vt(e),s=i.get("hostname"),n=mw.util.wikiScript("load"),r=$.param({modules:t.join("|"),skin:mw.config.get("skin")});mw.loader.load(`https://${s}${n}?${r}`)}function ki(i,e){let t=vt(e),s=i.get("hostname"),n=mw.util.wikiScript("load"),r=$.param({modules:t.join("|"),only:"styles",skin:mw.config.get("skin")});mw.loader.load(`https://${s}${n}?${r}`,"text/css")}function yi(i){if(!l(i))return i.map(e=>{var t,s;return(s=(t=mw.loader).addLinkTag)==null?void 0:s.call(t,e)})}function xi(i){l(i)||i.forEach(e=>e==null?void 0:e.remove())}function Di(i){return m(this,null,function*(){let e={relative:!1,hash:d.get("linksHash"),minify:d.get("linksFormat")==="minify",wikilink:!0,wikilinkPreset:d.get("wikilinksFormat")};if(i.isForeign){let t=yield x.getInterwikiMap();t&&(e.interwiki=t.filter(s=>s.url.includes(i.getMW("serverName"))).reduce((s,n)=>!s||s.prefix.length>n.prefix.length?n:s))}return q(i,{},e)})}function q(i,e,t){i instanceof V||(i=new V(i)),e=f({},e),t=f({type:null},t);let s=f({},i.getValues());return t.type||(s.type==="revision"&&s.typeVariant==="page"?t.type="page":t.type=s.type),t.type==="diff"&&(l(s.diff)&&R(s.direction)&&(s.diff=s.direction),w(s.oldid)&&w(s.diff)?(e.oldid=s.oldid,e.diff=s.diff):w(s.revid)?e.diff=s.revid:w(s.oldid)?R(s.diff)&&s.diff!=="prev"?(e.oldid=s.oldid,e.diff=s.diff):e.diff=s.oldid:w(s.diff)&&(R(s.oldid)&&s.oldid!=="prev"?(e.oldid=s.diff,e.diff=s.oldid):e.diff=s.diff)),t.type==="revision"&&(l(s.direction)&&R(s.diff)&&(s.direction=s.diff),w(s.revid)?e.oldid=s.revid:w(s.oldid)&&(e.oldid=s.oldid,R(s.direction)&&s.direction==="next"&&(e.direction=s.direction))),t.type==="page"&&(e.curid=s.curid),Ro(i,e,t)}function z(i,e){let t=(i==null?void 0:i.mw.endPointUrl)||o.local.mwEndPointUrl;try{return new URL(e,t.origin).toString()}catch(s){return e}}function Ro(i,e,t){e=f({},e),t=f({type:"diff",relative:!0,hash:!1,minify:!1,interwiki:null,wikilink:!1,wikilinkPreset:null},t),re(i.get("hostname"))&&(t.relative=!1);let s=i.getMW("endPointUrl")||o.local.mwEndPointUrl,n;if(l(i.get("title"))?(n=new URL(s),n.search=new URLSearchParams(e).toString()):n=new URL(mw.util.getUrl(i.get("title"),e),s.origin),t.hash&&!l(i.get("section"))){let r=mw.util.escapeIdForLink(i.get("section"));r&&(n.hash=`#${r}`)}return t.minify&&(n.pathname="",n.hash="",n.searchParams.delete("title")),t.href=decodeURIComponent(t.relative?n.pathname+n.search+n.hash:n.toString()),t.hash=decodeURIComponent(n.hash),t.wikilink?Wo(i,e,t):t.href}function Wo(i,e,t){var u;e=f({},e),t=f({href:null,hash:null,type:"diff",minify:!1,relative:!0,interwiki:null,wikilink:!0,wikilinkPreset:"special"},t);let s=null;!l(e.oldid)&&!l(e.diff)?s=`${e.oldid}/${e.diff}`:l(e.oldid)?l(e.diff)?l(e.curid)||(s=e.curid):s=e.diff:s=e.oldid,l(t.hash)||(s=`${s}${t.hash}`);let r=(o.config.wikilinkPresets[t.wikilinkPreset]||o.config.wikilinkPresets.special)[t.type],c=(u=t.interwiki)==null?void 0:u.prefix;return r.replace("$1",s).replace("$pref",c?`${c}:`:"").replace("$href",t.href).replace("$msg",g(`copy-wikilink-${t.type}`))}function on(i,e){let t=mw.util.getUrl(e,{action:"raw",ctype:"text/css"});return i.isForeign?z(i,t):t}var oe=v(()=>{T();P();me();_();ge();M()});function K(i){let e=Object.getPrototypeOf(i);return OO.initClass(e),i.static=Object.create(e.static),Object.keys(i).filter(t=>t!=="static").forEach(t=>{i.static[t]=i[t]}),i.parent=i.super=e,i}function Li(i){let e={prototype:{}};OO.mixinClass(e,OO.EventEmitter),Object.assign(i,e.prototype),OO.EventEmitter.call(i)}function kt(){S(OO.ui.RadioSelectWidget.prototype.findFirstSelectedItem)||(OO.ui.RadioSelectWidget.prototype.findFirstSelectedItem=function(){let i=this.findSelectedItems();return Array.isArray(i)?i[0]||null:i}),S(OO.ui.ButtonSelectWidget.prototype.findFirstSelectedItem)||(OO.ui.ButtonSelectWidget.prototype.findFirstSelectedItem=function(){let i=this.findSelectedItems();return Array.isArray(i)?i[0]||null:i}),S(OO.ui.getTeleportTarget)||(OO.ui.getTeleportTarget=function(){return document.body})}function rn(){$(["#mw-notification-area",".mw-notification-area-overlay",".ext-checkuser-userinfocard-popover",".translatorBuddy-popup"]).each((i,e)=>{$(e).removeAttr("aria-hidden").removeAttr("inert")})}function yt(){No();let i=new OO.ui.WindowManager;return $(OO.ui.getTeleportTarget()).append(i.$element),i}function No(i){i=i||d.get("viewWidth")||"standard",i!=="full"&&(OO.ui.WindowManager.static.sizes.instantDiffs=A.constructor.sizes[i]||A.constructor.sizes.standard),A.isOpen&&A.dialog.setSize(Pi(i))}function Pi(i){return i=i||d.get("viewWidth")||"standard",i==="full"?"full":"instantDiffs"}function xt(i,e){let t=mw.loader.moduleRegistry[i],s=e.match(/^((?:\.\.?\/)+)(.*)$/);return s&&(e=`resources/src/${i}/${s[2]}`),t==null?void 0:t.packageExports[e]}function an(i){let e=mw.loader.moduleRegistry[i];return e==null?void 0:e.script($,jQuery,null,null)}var H=v(()=>{P();le();M()});var $i={};Q($i,{getMWLine:()=>Si,getMWLineTitle:()=>Ei,getSplitSpecialUrl:()=>Dt,isMWLink:()=>ce});function Dt(i){let e=i.split("/"),t={};return o.local.specialPagesAliasesPrefixed["Special:PermanentLink"].includes(e[0])?(t.oldid=e[1],t):o.local.specialPagesAliasesPrefixed["Special:Redirect"].includes(e[0])?e[1]==="revision"?(t.oldid=e[2],t):(e[1]==="page"&&(t.curid=e[2]),t):(e.length>1&&(t.diff=e.pop()),e.length>1&&(t.oldid=e.pop()),t)}function ce(i,e){let t=!1;if(e=e||o.config.mwLink,e.id&&(t=e.id.includes(i.id),t)||e.hasClass&&(t=e.hasClass.some(s=>i.classList.contains(s)),t))return t;if(e.endsWith){let s=i.textContent.trim();if(t=e.endsWith.some(n=>s.endsWith(n)),t)return t}return e.hasChild&&(t=e.hasChild.some(s=>i.querySelector(s)),t)||e.closestTo&&(t=e.closestTo.some(s=>i.closest(s))),t}function Si(i){return i.closest(o.config.mwLine.selector.join(","))}function Ei(i){let e=i.dataset.title;if(!l(e))return decodeURIComponent(e);let t=o.config.mwLineTitle.selector.join(","),s=i.querySelector(t);if(s)return l(s.title)?s.innerText:s.title}var ln=v(()=>{T();P()});var Ai,we,Lt=v(()=>{P();Ai=class{constructor(e){a(this,"options",{});a(this,"node");var t;this.options=f({node:null,tag:"button",classes:[],label:null,title:null,href:null,target:"_self",handler:null,container:null,insertMethod:"appendTo",ariaHaspopup:!1,altTitle:null,useAltKey:!1},e),l(this.options.href)||(this.options.tag="a"),OO.EventEmitter.call(this),((t=this.options.node)==null?void 0:t.nodeType)===1?(this.node=this.options.node,this.process()):this.render()}render(){this.node=document.createElement(this.options.tag),this.node.innerText=this.options.label,this.node.classList.add(...this.options.classes),l(this.options.title)||(this.node.title=this.options.title),l(this.options.href)?(this.node.setAttribute("tabindex","0"),this.node.setAttribute("role","button")):(this.node.href=this.options.href,this.node.target=this.options.target),this.process(),this.embed(this.options.container,this.options.insertMethod)}process(){S(this.options.handler)&&(this.options.ariaHaspopup&&this.node.setAttribute("aria-haspopup","dialog"),l(this.options.altTitle)||(this.node.dataset.altTitle=this.options.altTitle),Je(this.node,this.options.handler.bind(this),this.options.useAltKey))}embed(e,t){W(this.node,e,t)}remove(){this.node.remove()}pending(e){this.node.classList.toggle("instantDiffs-link--pending",e)}getContainer(){return this.node}},we=Ai});var cn=v(()=>{});var fn,Fo,Se,Ti,I,Ne=v(()=>{T();P();ln();me();_();ge();Lt();le();M();cn();({h:fn,ht:Fo}=k),Se=class Se{constructor(e,t){a(this,"node");a(this,"options",{});a(this,"article");a(this,"href");a(this,"url");a(this,"error");a(this,"revision");a(this,"compare");a(this,"nodes",{});a(this,"mw",{hasLink:!1,hasLine:!1});a(this,"manual",{behavior:"basic",options:{}});a(this,"actions",{});a(this,"extensions",{});a(this,"isValid",!1);a(this,"isForeign",!1);a(this,"isLoading",!1);a(this,"isLoaded",!1);a(this,"isProcessed",!1);a(this,"isObserved",!1);a(this,"hasRequest",!1);a(this,"onRequestRevisionError",(e,t)=>{this.isLoading=!1,this.error={type:"revision",tag:"link",code:l(this.article.get("curid"))?"generic":"curid",article:this.article,silent:!0},t!=null&&t.error?(this.error.code=t.error.code,this.error.message=t.error.info):(this.error.message=e,C(`error-revision-${this.error.code}`,this.error)),this.renderError()});a(this,"onRequestRevisionDone",e=>{var c,u;this.isLoading=!1;let t=e==null?void 0:e.query;if(!t||!t.badrevids&&!t.badpageids&&!t.pages)return this.onRequestRevisionError(void 0,e);let s=(c=t.pages)==null?void 0:c[0],n=(u=s==null?void 0:s.revisions)==null?void 0:u[0],r=mi(t);if(r)return this.error=r,this.renderError();this.revision=n,this.article.set({title:s.title,section:Oi(this.revision)}),this.article.isHidden=Ci(this.revision),this.renderSuccess()});a(this,"onRequestDiffError",(e,t)=>{this.isLoading=!1,this.error={type:"diff",tag:"link",article:this.article,silent:!0},t!=null&&t.error?(this.error.code=t.error.code,this.error.message=t.error.info):(this.error.message=e,C("error-diff-generic",this.error)),this.renderError()});a(this,"onRequestDiffDone",e=>{if(this.isLoading=!1,this.compare=e==null?void 0:e.compare,!this.compare)return this.onRequestDiffError(null,e);this.article.set({title:be(this.compare),section:We(this.compare)}),this.article.isHidden=Pt(this.compare),this.renderSuccess()});a(this,"onRequestCompareError",(e,t)=>{this.isLoading=!1,this.error={type:"diff",tag:"link",article:this.article,silent:!0},t!=null&&t.error?(this.error.code=t.error.code,this.error.message=t.error.info):(this.error.message=e,C("error-diff-generic",this.error)),this.renderError()});a(this,"onRequestCompareDone",e=>{if(this.isLoading=!1,this.compare=e==null?void 0:e.compare,!this.compare)return this.onRequestCompareError(null,e);this.article.set({oldid:this.compare.fromrevid,diff:this.compare.torevid,page1:this.compare.fromtitle,page2:this.compare.totitle,title:be(this.compare),section:We(this.compare)}),this.article.isHidden=Pt(this.compare),this.renderSuccess()});this.node=e,this.options=f({behavior:"basic",insertMethod:"insertAfter",showLink:d.get("showLink"),showPageLink:d.get("showPageLink"),showAltTitle:!1,useAltKey:!0,setClasses:!0,initiatorLink:null,initiatorPage:null,initiatorView:null,onRequest:()=>{},onLoad:()=>{},onOpen:()=>{},onClose:()=>{}},t),A.isContains(this.node)&&(this.options.initiatorView=A,this.options.initiatorPage=A.getPage()),this.process(),Se.addLink(this.node,this),this.isValid&&this.render()}static findLinks(e){return typeof e=="undefined"&&(e=Fe()),e.find(o.local.linkSelector)}static addLink(e,t){this.stack.set(e,t.isValid?t:!1)}static getLink(e){return this.stack.get(e)}static hasLink(e){return this.stack.has(e)}static getLinks(){return this.stack.values()}process(){if(this.href=this.node.href,l(this.href))return;let e={};try{this.url=new URL(this.href)}catch(s){return}if(o.config.exclude.linkActions.includes(this.url.searchParams.get("action"))||ce(this.node,o.config.mwLinkExclude))return;try{let s=decodeURIComponent(this.url.pathname);if(o.local.articlePathRegExp.test(s)){let n=s.replace(new RegExp(o.local.mwArticlePath),"");e.pathname=new mw.Title(n).getPrefixedDb()}}catch(s){}try{let s=mw.util.getParamValue("title",this.href);e.title=new mw.Title(s).getPrefixedDb()}catch(s){}let t={hostname:this.url.hostname,hash:this.url.hash};o.local.specialPagesLinksRegExp.test(e.title)?t=f(f({},t),Dt(e.title)):o.local.specialPagesLinksRegExp.test(e.pathname)?t=f(f({},t),Dt(e.pathname)):(["title","curid","oldid","diff","direction","page1","rev1","page2","rev2"].forEach(s=>{t[s]=this.url.searchParams.get(s)}),l(t.title)&&!l(e.pathname)&&(t.title=e.pathname)),this.article=new V(t),this.isValid=this.article.isValid,this.isForeign=this.article.isForeign}render(){switch(this.processMWOptions(),this.processManualOptions(),this.postValidateOptions(),l(this.article.get("title"))&&this.mw.hasLine&&this.article.set({title:this.mw.title}),this.options.behavior){case"event":this.renderEvent();break;case"basic":this.renderBasic();break;case"request":this.renderRequest();break}}processMWOptions(){this.mw.isContent=ce(this.node,o.config.mwLinkContent),this.mw.isContent&&(this.options.behavior="request"),this.mw.hasLink=ce(this.node,o.config.mwLink),this.mw.hasLink&&(this.options.behavior="basic",this.mw.isDiffOnly=ce(this.node,o.config.mwLinkDiffOnly),this.mw.isPrepend=ce(this.node,o.config.mwLinkPrepend),this.mw.isPrepend&&(this.options.insertMethod="insertBefore"),this.mw.isAltTitle=ce(this.node,o.config.mwLinkAltTitle),this.mw.isAltTitle&&(this.options.showAltTitle=!0),this.mw.line=Si(this.node),this.mw.line&&(this.mw.hasLine=!0,this.mw.title=Ei(this.mw.line),this.mw.line.classList.add("instantDiffs-line")),this.mw.isContentInside=ce(this.node,o.config.mwLinkContentInside),this.mw.isContentInside&&(this.options.behavior="request"))}processManualOptions(){if(this.manual.options=this.node.dataset.instantdiffsOptions,!l(this.manual.options))try{this.manual.options=JSON.parse(this.manual.options),this.options=f(f({},this.options),this.manual.options)}catch(e){let t={type:"link",tag:"link",message:(e==null?void 0:e.message)||e,silent:!0};C("error-link-options",t)}this.manual.behavior=this.node.dataset.instantdiffsLink,l(this.manual.behavior)||(this.options.behavior=this.manual.behavior)}postValidateOptions(){var t,s,n,r;let e={link:"event",default:"request"};e[this.options.behavior]&&(this.options.behavior=e[this.options.behavior]),["request","basic","event","none"].includes(this.options.behavior)||(this.options.behavior="basic"),(t=this.options).showLink&&(t.showLink=this.options.behavior!=="event"),(s=this.options).showPageLink&&(s.showPageLink=this.options.behavior==="request"),(n=this.options).showAltTitle||(n.showAltTitle=this.options.behavior==="event"),["always","clear"].includes(this.options.setClasses)||(r=this.options).setClasses&&(r.setClasses=this.options.behavior!=="event")}observe(){this.isObserved||(this.isObserved=!0,o.local.interactionObserver.observe(this.node))}unobserve(){this.isObserved&&(this.isObserved=!1,o.local.interactionObserver.unobserve(this.node))}intersect(){this.isLoading||this.isLoaded||!this.isObserved||(this.unobserve(),this.request())}renderRequest(){this.hasRequest=this.isValid,this.hasRequest?(this.toggleSpinner(!0),this.observe()):(this.toggleSpinner(!1),this.isLoaded=!0,this.isProcessed=!1,this.unobserve())}request(){let e=this.article.get("type"),t=this.article.get("typeVariant");if(e==="revision")return this.requestRevision();if(e==="diff")return t==="comparePages"?this.requestCompare():this.requestDiff()}requestRevision(){if(this.isLoading)return;this.isLoading=!0,this.error=null;let e={action:"query",prop:"revisions",rvprop:["ids","timestamp","comment","content","user"],rvslots:"main",rvsection:0,format:"json",formatversion:2,uselang:o.local.userLanguage};return l(this.article.get("oldid"))?l(this.article.get("curid"))||(e.pageids=this.article.get("curid")):e.revids=this.article.get("oldid"),x.get(e,this.article).then(this.onRequestRevisionDone).fail(this.onRequestRevisionError)}requestDiff(){if(this.isLoading)return;this.isLoading=!0,this.error=null;let e={action:"compare",prop:["title","ids","timestamp","comment","user"],fromrev:w(this.article.get("oldid"))?this.article.get("oldid"):void 0,fromtitle:l(this.article.get("title"))?void 0:this.article.get("title"),torev:w(this.article.get("diff"))?this.article.get("diff"):void 0,torelative:R(this.article.get("diff"))?this.article.get("diff"):void 0,format:"json",formatversion:2,uselang:o.local.userLanguage};return x.get(e,this.article).then(this.onRequestDiffDone).fail(this.onRequestDiffError)}requestCompare(){if(this.isLoading)return;this.isLoading=!0,this.error=null;let e=this.article.getValues(),t={action:"compare",prop:["title","ids","timestamp","comment","user"],fromrev:w(e.rev1)?e.rev1:void 0,fromtitle:l(e.page1)?void 0:e.page1,torev:w(e.rev2)?e.rev2:void 0,totitle:l(e.page2)?void 0:e.page2,format:"json",formatversion:2,uselang:o.local.userLanguage};return x.get(t,this.article).then(this.onRequestCompareDone).fail(this.onRequestCompareError)}renderEvent(){this.isValid&&this.renderSuccess()}renderBasic(){!this.isValid||this.mw.isDiffOnly&&this.article.get("type")!=="diff"||this.renderSuccess()}renderError(){if(this.isLoaded=!0,this.isProcessed=!1,this.toggleSpinner(!1),this.options.behavior!=="event"){this.renderWrapper();let e;this.error.type&&(e=`error-${this.error.type}-${this.error.code||"generic"}`,Ze(e)||(e=`error-${this.error.type}-generic`)),this.nodes.error=fn("span",{class:["item","error","error-info"],title:fe(e,this.error,this.article)},Fo(Ee("error"))),this.nodes.inner.append(this.nodes.error),this.embed(this.node,this.options.insertMethod)}mw.hook(`${o.config.prefix}.link.renderError`).fire(this)}renderSuccess(){this.isLoaded=!0,this.isProcessed=!0,this.toggleSpinner(!1),this.options.behavior==="event"&&this.renderLinkAction(),this.options.behavior!=="event"&&(this.renderWrapper(),this.renderLinkAction(),this.options.showPageLink&&this.renderPageAction(),this.embed(this.node,this.options.insertMethod)),mw.hook(`${o.config.prefix}.link.renderSuccess`).fire(this)}renderWrapper(){this.nodes.container=this.nodes.inner=fn("span",{class:["instantDiffs-panel","nowrap","noprint"]})}renderAction(e){return e=f({tag:"a",label:null,title:null,href:null,target:Xe(this.options.initiatorView),handler:null,classes:[],modifiers:[],container:this.nodes.inner},e),e.classes=["item","text","instantDiffs-action",...e.classes],e.modifiers.forEach(t=>e.classes.push(`instantDiffs-action--${t}`)),new we(e)}getLinkTitle(e){return this.options.showAltTitle&&!l(this.node.title)?this.node.title:(this.article.isHidden&&(e=`${e}-hidden`),g(e))}renderLinkAction(){let e=this.article.get("typeVariant")==="comparePages"?"compare-pages":this.article.get("type"),t=this.getLinkTitle(`${e}-title`);if(!this.options.showLink)return this.mutateLinkAction(t);let s=[];this.article.isHidden&&s.push("error","error-admin"),this.actions.action=this.renderAction({label:Ee(this.article.get("type")),title:t,classes:s,modifiers:[this.article.get("type")],handler:this.openDialog.bind(this),ariaHaspopup:!0})}mutateLinkAction(e){if(this.node.dataset.instantdiffsLink=this.options.behavior,this.options.setClasses){let t=["instantDiffs-link",`instantDiffs-link--${this.article.get("type")}`,`is-${this.options.insertMethod}`];this.options.setClasses!=="clear"&&(t.push("instantDiffs-link--styled"),this.article.isHidden&&t.push("instantDiffs-link--error")),this.options.setClasses==="clear"&&t.push("instantDiffs-link--clear"),this.node.classList.remove("external"),this.node.classList.add(...t)}this.actions.action=new we({node:this.node,handler:this.openDialog.bind(this),ariaHaspopup:!0,altTitle:e,useAltKey:this.options.useAltKey})}renderPageAction(){this.actions.page=this.renderAction({label:Ee("page"),title:this.article.get("titleTextSection")||this.article.get("titleText"),href:this.article.get("href"),modifiers:["page"]})}openDialog(){let e={initiatorPage:this.options.initiatorPage,onOpen:()=>this.onDialogOpen(),onClose:()=>this.onDialogClose()};return A.setup(this,e)?(this.onDialogRequest(),$.when(A.load()).always(()=>this.onDialogLoad())):$.Deferred().resolve().promise()}onDialogRequest(){this.toggleLoader(!0),S(this.options.onRequest)&&this.options.onRequest(this)}onDialogLoad(){this.toggleLoader(!1),S(this.options.onLoad)&&this.options.onLoad(this)}onDialogOpen(){this.mw.hasLine&&d.get("highlightLine")&&this.mw.line.classList.add("instantDiffs-line--highlight"),S(this.options.onOpen)&&this.options.onOpen(this),this.options.initiatorLink instanceof Se&&this.options.initiatorLink.onDialogOpen()}onDialogClose(){this.mw.hasLine&&(d.get("highlightLine")&&this.mw.line.classList.remove("instantDiffs-line--highlight"),d.get("markWatchedLine")&&o.config.changeLists.includes(mw.config.get("wgCanonicalSpecialPageName"))&&(this.mw.line.classList.remove(...o.config.mwLine.unseen),this.mw.line.classList.add(...o.config.mwLine.seen)),d.get("markWatchedLine")&&o.local.mwCanonicalSpecialPageName==="GlobalWatchlist"&&this.mw.line.classList.add("instantDiffs-line--seen")),S(this.options.onClose)&&this.options.onClose(this),this.options.initiatorLink instanceof Se&&this.options.initiatorLink.onDialogClose()}toggleLoader(e){this.actions.action?this.actions.action.pending(e):this.node.classList.toggle("instantDiffs-link--pending",e)}toggleSpinner(e){let t=St(["loader",this.article.get("type")]);e?this.node.classList.add(...t):this.node.classList.remove(...t)}embed(e,t){W(this.nodes.container,e,t)}getContainer(){return this.nodes.container}getNode(){return this.node}getInitiatorLink(){return this.options.initiatorLink||this}getArticle(){return this.article}getMW(){return this.mw}};a(Se,"utils",$i),a(Se,"stack",new Map);Ti=Se,I=Ti});var Et,Mi,$e,Ii=v(()=>{P();Ne();Et=class Et{constructor(e){a(this,"options",{});a(this,"link");a(this,"links",[]);this.options=f({filterType:null,filterMWLine:!1},e),this.links=Array.from(I.findLinks())}static newInstance(e){this.instance=new Et(e)}setLink(e){this.link=e}hasLink(e){return e instanceof I&&this.links.includes(e.getNode())}isLinkValid(e){var c;if(!(e instanceof I)||!(e.isValid&&(e.isProcessed||e.hasRequest&&!e.isLoaded)))return!1;let n=l(this.options.filterType)?!0:e.getArticle().get("type")===this.options.filterType,r=this.options.filterMWLine===!0?(c=e.getMW())==null?void 0:c.hasLine:!0;return n&&r}getLength(){return this.links.length}getIndex(){return this.link instanceof I?this.links.indexOf(this.link.getNode()):-1}getPreviousLink(e){if(typeof e=="undefined"&&(e=this.getIndex()),e<=0)return;let t=e-1,s=I.getLink(this.links[t]);return this.isLinkValid(s)?s:this.getPreviousLink(t)}getNextLink(e){if(typeof e=="undefined"&&(e=this.getIndex()),e<0||e+1>=this.getLength())return;let t=e+1,s=I.getLink(this.links[t]);return this.isLinkValid(s)?s:this.getNextLink(t)}};a(Et,"instance");Mi=Et,$e=Mi});function dn(i){return i==="<unregistered>"?!1:!mw.util.isIPAddress(i)}function un(i){return"isTemporaryUser"in mw.util?mw.util.isTemporaryUser(i):!1}function et(i){if(F(i)&&(i=new Date(i)),!(i instanceof Date))return;let e=tt("mediawiki.DateFormatter");return e?e.forUser().formatTimeAndDate(i):i.toLocaleString()}var Ri=v(()=>{P()});var ot={};Q(ot,{isVisualDiffsAvailable:()=>Tt,processRevisionDiffTable:()=>nt,renderDiffEditLinks:()=>hn,renderDiffMobileFooter:()=>Fi,renderDiffTable:()=>Wi,renderDiffTableSide:()=>At,renderUserInfoCardButton:()=>pn,renderUserLink:()=>Ni,restoreFileMediaInfo:()=>Ui,restoreInlineFormatToggle:()=>Vi,restoreRollbackLink:()=>ji,restoreVisualDiffs:()=>qi,restoreWikiLambda:()=>Bi});function Wi(i){let e={};return e.container=y("table",{class:["diff","diff-type-table",`diff-contentalign-${mw.config.get("wgContentLanguageDir")==="rtl"?"right":"left"}`,`diff-editfont-${mw.user.options.get("editfont")}`]},y("colgroup",y("col",{class:"diff-marker"}),y("col",{class:"diff-content"}),y("col",{class:"diff-marker"}),y("col",{class:"diff-content"})),e.head=y("tbody",y("tr",{class:"diff-title",lang:o.local.userLanguage},e.deleted=y("td",{class:["diff-otitle","diff-side-deleted"],colSpan:2}),e.added=y("td",{class:["diff-ntitle","diff-side-added"],colSpan:2}))),e.body=y("tbody")),l(i)?i===""&&(e.notice=y("tr",y("td",{class:"diff-notice",colSpan:4},y("div",{class:"mw-diff-empty"},mw.msg("diff-empty")))),e.body.append(e.notice)):Hi(e.body,i),e}function At(i){i=f({prefix:"n",title:null,revid:null,previd:null,curRevid:null,hostname:null,timestamp:null,texthidden:!1,user:null,userhidden:!1,comment:null,commenthidden:!1},i);let e=`mw-diff-${i.prefix}title`,t=i.revid===i.curRevid?"currentrev-asof":"revisionasof",s=new V({type:"revision",title:i.title,oldid:i.revid,hostname:i.hostname});return st(y("div",{id:`${e}1`},y("strong",i.texthidden?y("span",{class:"history-deleted"},mw.msg(t,et(i.timestamp))):st(y("a",{href:q(s)},mw.msg(t,et(i.timestamp))),hn(s,i)))),y("div",{id:`${e}2`},i.userhidden?y("span",{class:["mw-userlink","history-deleted"]},mw.msg("rev-deleted-user")):Ni(s,i.user)),y("div",{id:`${e}3`},i.commenthidden?y("span",{class:["comment","history-deleted"]},mw.msg("rev-deleted-comment")):l(i.comment)?y("span",{class:["comment","mw-comment-none"]},mw.msg("changeslist-nocomment")):y("span",{class:["comment","comment--without-parentheses"],innerHTML:i.comment})))}function nt(i){d.get("showRevisionInfo")?(i.find("td:is(.diff-otitle, .diff-side-deleted)").addClass("instantDiffs-hidden"),i.find("td:is(.diff-ntitle, .diff-side-added)").attr("colspan","4"),i.find("tr:not([class])").addClass("instantDiffs-hidden")):i.addClass("instantDiffs-hidden")}function hn(i,e){let t=Ye(mw.config.get("wgPageContentModel")),s=ae(mw.config.get("wgPageContentModel")),n=mw.config.get("wgIsProbablyEditable"),r=st();return t&&r.append(it(" "),y("span",{class:"mw-diff-edit"},y("a",{href:q(i,{action:"edit"}),title:i.get("title")},mw.msg(n?"editold":"viewsourceold")))),n&&!t&&s&&e.revid!==e.curRevid&&r.append(it(" "),y("span",{class:"mw-diff-edit"},y("a",{href:q(i,{action:"edit",restore:e.revid}),title:i.get("title")},mw.msg("wikibase-restoreold")))),n&&w(e.previd)&&r.append(it(" "),y("span",{class:"mw-diff-edit"},y("a",{href:q(i,{action:"edit",undoafter:e.previd,undo:e.revid}),title:mw.msg("tooltip-undo")},mw.msg("editundo")))),r}function Ni(i,e){let t=new mw.Title(e,2).getPrefixedText(),s=new mw.Title(e,3).getPrefixedText(),n=new mw.Title(`Contributions/${e}`,-1).getPrefixedText(),r=st(y("a",{class:["mw-redirect","mw-usertoollinks-talk"],title:s,href:z(i,mw.util.getUrl(s))},mw.msg("talkpagelinktext")),it(mw.msg("pipe-separator")),y("a",{class:["mw-redirect","mw-usertoollinks-contribs"],title:n,href:z(i,mw.util.getUrl(n))},mw.msg("contribslink")));return st(pn(e),y("a",{class:"mw-userlink",title:t,href:z(i,mw.util.getUrl(t))},y("bdi",e)),it(mw.msg("word-separator")),y("span",{class:"mw-usertoollinks"},Vo(mw.message("parentheses",r).parseDom())))}function pn(i){if(!mw.user.options.get("checkuser-userinfocard-enable")||!dn(i))return;let e=["cdx-button__icon","ext-checkuser-userinfocard-button__icon",un(i)?"ext-checkuser-userinfocard-button__icon--userTemporary":"ext-checkuser-userinfocard-button__icon--userAvatar"],t=y("a",{class:"ext-checkuser-userinfocard-button cdx-button cdx-button--action-default cdx-button--weight-quiet cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--icon-only cd-comment-author-userInfoCard-button",role:"button",tabindex:0,href:"javascript:void(0)",ariaLabel:mw.msg("checkuser-userinfocard-toggle-button-aria-label"),"data-username":i},y("span",{class:e}));return t.setAttribute("aria-haspopover","dialog"),t}function Fi(i){i=f({title:null,revid:null,hostname:null,user:null,userhidden:!1},i);let e=new V({type:"revision",title:i.title,oldid:i.revid,hostname:i.hostname});return y("div",{class:["mw-diff-mobile-footer"]},y("h3",{class:["mw-diff-mobile-footer__header"]},i.userhidden?y("span",{class:["mw-userlink","history-deleted"]},mw.msg("rev-deleted-user")):Ni(e,i.user)))}function Vi(i){if(!i||i.length===0||mw.loader.getState("mediawiki.diff")!=="ready")return!1;let e=i.find("#mw-diffPage-inline-toggle-switch-layout"),t=xt("mediawiki.diff","./inlineFormatToggle.js");try{return t(e),!0}catch(s){}return!1}function qi(i){if(!i||i.length===0||!w(mw.config.get("wgDiffOldId"))||!w(mw.config.get("wgDiffNewId"))||!Tt(mw.config.get("wgPageContentModel"))||mw.loader.getState("ext.visualEditor.diffPage.init")!=="ready")return!1;let e=i.find(".ve-init-mw-diffPage-diffMode");if(e.length>0)return!0;e=$("<div>").addClass("ve-init-mw-diffPage-diffMode");let t=i.find(".mw-diffPage-inlineToggle-container");return t.length>0?t.before(e):i.append(e),!0}function Tt(i){let e=mw.config.get("wgVisualEditorConfig");return e&&Object.prototype.hasOwnProperty.call(e.contentModels,i)}function ji(i){if(!i||i.length===0)return!1;let e=['.mw-rollback-link a[data-mw="interface"]',".mw-rollback-link a[data-mw-interface]"];return i.confirmable({i18n:{confirm:mw.msg("rollback-confirmation-confirm"),yes:mw.msg("rollback-confirmation-yes"),no:mw.msg("rollback-confirmation-no")},delegate:e.join(","),handler:t=>{t.preventDefault(),qo(t.target)}}),!0}function qo(i){let e=$.createSpinner({size:"small",type:"inline"});$(i).css("display","none").after(e);let t={action:"rollback",title:_i(i.href),user:mw.util.getParamValue("from",i.href),token:mw.util.getParamValue("token",i.href),formatversion:2,uselang:o.local.userLanguage};x.post(t).then(s=>{var r;let n=$($t((r=s==null?void 0:s.rollback)==null?void 0:r.summary));ve(n),mw.notify(n,{tag:"rollback"}),$(i).closest(".mw-rollback-link").remove(),A.refresh()}).catch((s,n)=>{var c;let r=$($t((c=n==null?void 0:n.error)==null?void 0:c.info));ve(r),mw.notify(r,{type:"error",tag:"rollback"}),e.remove(),$(i).css("display","")})}function Bi(i){return!i||i.length===0?!1:(mw.loader.using(["@wikimedia/codex","ext.wikilambda.app"]).then(e=>{let{createMwApp:t}=e("vue"),{createPinia:s}=e("pinia"),{useMainStore:n,App:r}=e("ext.wikilambda.app");if(mw.config.get("wgWikiLambda")){let c=s(),u=n(c);window.vueInstance=t(Object.assign({provide:()=>({viewmode:u.getViewMode})},r)).use(c).mount(i.get(0))}}),!0)}function Ui(i){return m(this,null,function*(){if(!i||i.length===0)return;let e=["wikibasemediainfo-filepage-fileinfo-heading","wikibasemediainfo-filepage-structured-data-heading"];return yield x.loadMessage(e),jo(i)})}function jo(i){let e=new OO.ui.TabPanelLayout("captions",{expanded:!1,label:mw.msg("wikibasemediainfo-filepage-fileinfo-heading"),$content:i.find("mediainfoviewcaptions")}),t=new OO.ui.TabPanelLayout("statements",{expanded:!1,label:mw.msg("wikibasemediainfo-filepage-structured-data-heading"),$content:i.find("mediainfoviewstatements")}),s=new OO.ui.IndexLayout({expanded:!1,framed:!1});s.addTabPanels([e,t],0);let n=new OO.ui.PanelLayout({expanded:!1,framed:!1,content:[s]});return y("div",{class:"instantDiffs-page-mediaInfo"},n.$element.get(0))}var y,st,it,Vo,Ct=v(()=>{T();P();H();oe();Ri();me();_();ge();le();M();({h:y,hf:st,ht:it,hj:Vo}=k)});var Gi,zi,gn=v(()=>{P();Gi=class{constructor(e,t){a(this,"config",mw.config);a(this,"values",{});a(this,"backup",{});t&&(this.config=t),this.setValues(e)}set(e,t){Object.hasOwn(this.backup,e)||(this.backup[e]=this.config.get(e)),this.values[e]=t}setValues(e){for(let[t,s]of Object.entries(e))this.set(t,s)}setTitle(e){l(e)||(F(e)&&(e=new mw.Title(e)),this.setValues({wgTitle:e.getMainText(),wgPageName:e.getPrefixedDb(),wgNamespaceNumber:e.getNamespaceId(),wgRelevantPageName:e.getPrefixedDb()}))}get(e){return this.values[e]}getValues(){return this.values}apply(){for(let[e,t]of Object.entries(this.values))t!==void 0&&this.config.set(e,t)}restore(){for(let[e,t]of Object.entries(this.backup))t!==void 0&&this.config.set(e,t)}},zi=Gi});var Ki,mn,wn=v(()=>{_();Ki=class{constructor(e){a(this,"article");a(this,"items",new Map);this.article=e}get(e,t){t||(t=this.article);let s=x.get(e,t);return this.add(s),s}ajax(e){let t=$.ajax(e);return this.add(t),t}when(...e){return $.when(...e)}abort(){this.items.forEach((e,t)=>t.abort())}add(e){let t=e.always(()=>this.delete(e));return this.items.set(e,t),t}delete(e){this.items.delete(e)}},mn=Ki});var Zi={};Q(Zi,{getDaysLeftExpiry:()=>Qi,updateGlobalWatchlistStatus:()=>Ji,updateWatchButtonStatus:()=>Ot,updateWatchlistStatus:()=>Yi});function Qi(i){if(!i||mw.util.isInfinity(i))return null;let e=new Date(i);return Math.ceil((e-new Date)/(1e3*60*60*24))}function Ot(i,e){let t=i.get("watched"),s=t?"unwatch":"watch",n=i.get("expiry")||"infinity",r=Qi(n),c=`action-${s}`,u=mw.util.getUrl(i.get("title"),{action:s}),h,b;t?mw.util.isInfinity(n)?(h="unwatch",b="unStar"):(h=r>0?"unwatch-expiring":"unwatch-expiring-hours",b="halfStar"):(h="watch",b="star"),e.setLabel(g(c)),e.setTitle(mw.msg(`tooltip-ca-${h}`,r)),e.setHref(z(i,u)),e.setIcon(b)}function Yi(i,e,t){let s=i.get("titleText");e?vn(s,(n,r,c)=>{r.find(".mw-changelist-line-inner-unwatched").addBack(".mw-enhanced-rc-nested").removeClass("mw-changelist-line-inner-unwatched"),c.length>0&&c.text(mw.msg("watchlist-unwatch")).attr("title",mw.msg("tooltip-ca-unwatch")).attr("href",mw.util.getUrl(n,{action:"unwatch"})).removeClass("mw-watch-link loading").addClass("mw-unwatch-link"),bn(r,e,t)}):vn(s,(n,r,c)=>{r.find(".mw-changeslist-line-inner, .mw-enhanced-rc-nested").addBack(".mw-enhanced-rc-nested").addClass("mw-changelist-line-inner-unwatched"),c.length>0&&c.text(mw.msg("watchlist-unwatch-undo")).attr("title",mw.msg("tooltip-ca-watch")).attr("href",mw.util.getUrl(n,{action:"watch"})).removeClass("mw-unwatch-link loading").addClass("mw-watch-link"),bn(r,e,t)})}function bn(i,e,t){if(!e)return;let s=i.find(".mw-changesList-watchlistExpiry");if(mw.util.isInfinity(t))return Bo(i,s);let n=Qi(t),r=n>0?"days-full-text":"hours-full-text",c=mw.msg(`watchlist-expiring-${r}`,n);s.length>0?s.each((u,h)=>{h.title=c}):Uo(i,c)}function Bo(i,e){e.each((t,s)=>{let n=$(s);n.next(".mw-changeslist-separator").addClass("mw-changeslist-separator--semicolon").removeClass("mw-changeslist-separator"),s.previousSibling.nodeValue=s.previousSibling.nodeValue.trimEnd(),s.nextSibling.nodeValue=s.nextSibling.nodeValue.trimStart(),n.next(".mw-changeslist-links").before(" "),e.remove()}),i.find(".mw-changeslist-line-inner-historyLink").prepend(" ")}function Uo(i,e){i.find(".mw-title").each((t,s)=>{let n=$(s),r=n.next(".mw-fr-reviewlink"),c=new OO.ui.IconWidget({icon:"clock",title:e,classes:["mw-changesList-watchlistExpiry"]});(r.length>0?r:n).after(" ").after(c.$element).after(" "),c.$element.next(".mw-changeslist-separator--semicolon").addClass("mw-changeslist-separator").removeClass("mw-changeslist-separator--semicolon")})}function vn(i,e){let t=mw.Title.newFromText(i),n=(t.isTalkPage()?t.getSubjectPage():t.getTalkPage()).getPrefixedText();$(".mw-changeslist-line").each((r,c)=>{$(c).find("[data-target-page]").each((h,b)=>{let D=$(b),p=String(D.data("targetPage"));if(p===i||p===n){let L=D.closest("li, .mw-enhancedchanges-checkbox + table.mw-changeslist-log td[data-target-page], table"),E=L.find(".mw-unwatch-link, .mw-watch-link");e(p,L,E)}})})}function Ji(i,e,t){if(mw.globalwatchlist)try{let s=mw.globalwatchlist.watchedSites.siteList.find(n=>n.site===i.get("hostname"));if(!s)return;s.processUpdateWatched(i.get("origTitle"),!e)}catch(s){C("error-global-watchlist",{article:i,tag:"watch",message:(s==null?void 0:s.message)||s,silent:!0})}}var Xi=v(()=>{P();oe()});var _o,rt,Mt,es=v(()=>{T();P();Xi();H();M();_();({h:_o}=k),rt=class{constructor(e,t){a(this,"article");a(this,"options",{});a(this,"preferredExpiry");a(this,"isWatchlistExpiryEnabled",!1);a(this,"watchlistLabelsEnabled",!1);a(this,"isWatchListPopupEnabled",!1);a(this,"isWatched",!1);a(this,"$watchLink");a(this,"watchlistPopupWrapper");a(this,"watchlistPopup");a(this,"showError",(e,t)=>{let s=x.getApi().getErrorMessage(t);mw.notify(s,{tag:"watch-self",type:"error",id:this.constructor.notificationId})});a(this,"showNotice",e=>{if(!e)return this.showError(void 0,e);this.isWatched=e.watched===!0;let t=this.article.getMW("title"),s=e.expiry||"infinity",n=this.isWatched?"addedwatchtext":"removedwatchtext";t.isTalkPage()&&(n+="-talk");let r;this.isWatchListPopupEnabled?(this.isWatched&&(n=!this.preferredExpiry||mw.util.isInfinity(this.preferredExpiry)?"addedwatchindefinitelytext":"addedwatchexpirytext",t.isTalkPage()&&(n+="-talk")),r=this.showWatchlistNotice(t,n,s)):r=this.showBasicNotice(t,n),r.always(()=>{let c=this.isWatched?"unwatch":"watch";this.updateStatus(this.$watchLink,c,"idle",s,"infinity")})});a(this,"onWatchlistPopupWatch",e=>{var s,n;this.isWatched=!0;let t=(s=e.detail)!=null&&s.watchResponse?e.detail.watchResponse.expiry||((n=e.detail.watchResponse._rawValue)==null?void 0:n.expiry):"infinity";this.updateStatus(this.$watchLink,"unwatch","idle",t)});a(this,"onWatchlistPopupUnwatch",e=>{this.isWatched=!1,this.updateStatus(this.$watchLink,"watch","idle")});a(this,"updateStatus",(e,t,s,n="infinity",r="infinity")=>{let c=t==="unwatch";if(this.isWatched=c,this.article.setValues({watched:c,expiry:n,expirySelected:r}),this.options.onUpdate(s),!this.article.isForeign&&o.local.mwTitleText===this.article.get("titleText")){let{updatePageWatchStatus:u}=tt("mediawiki.page.watch.ajax")||{};u==null||u(c,n,r)}s!=="loading"&&(!this.article.isForeign&&o.local.mwCanonicalSpecialPageName==="Watchlist"&&Yi(this.article,c,n),o.local.mwCanonicalSpecialPageName==="GlobalWatchlist"&&Ji(this.article,c,n))});this.article=e,this.options=f({onUpdate:()=>{}},t),this.$watchLink=$('<a class="instantDiffs-button--fake-watch">'),W(this.$watchLink,document.body);let s=xt("mediawiki.page.watch.ajax","config.json")||{};this.isWatchlistExpiryEnabled=!this.article.isForeign&&(s.WatchlistExpiry||!1),this.watchlistLabelsEnabled=!this.article.isForeign&&(s.EnableWatchlistLabels||!1),this.isWatchListPopupEnabled=d.get("showWatchlistPopup")&&(this.isWatchlistExpiryEnabled||this.watchlistLabelsEnabled);let n=["mediawiki.notification"];(this.isWatchlistExpiryEnabled||this.watchlistLabelsEnabled)&&n.push("mediawiki.watchstar.widgets"),this.watchlistLabelsEnabled&&n.push("mediawiki.widgets.MenuTagMultiselectWidget"),mw.loader.load(n)}preloadMessages(){return m(this,null,function*(){yield x.loadMessage(["watchlist-expiring-days-full-text","watchlist-expiring-hours-full-text","tooltip-ca-watch","tooltip-ca-unwatch","tooltip-ca-unwatch-expiring","tooltip-ca-unwatch-expiring-hours"])})}request(){return m(this,null,function*(){return yield this.preloadMessages(),this.preferredExpiry=mw.user.options.get("watchstar-expiry","infinity"),this.isWatched=this.article.get("watched"),d.get("expEnableWatchlistPopup")&&this.isWatchListPopupEnabled?this.requestModules():this.requestWatchStatus()})}requestModules(){return mw.loader.using("mediawiki.watchstar.widgets").then(e=>{let t=e("mediawiki.watchstar.widgets");return Ve(t)?this.showWatchlistPopup():this.requestWatchStatus()})}requestWatchStatus(){let e=this.article.getMW("title").getPrefixedDb();return(this.isWatched?x.unwatch(e,this.article):x.watch(e,this.preferredExpiry,this.article)).then(this.showNotice).fail(this.showError)}getNoticeMessage(e,t){let s=this.article.get("hostname"),n=mw.message(t,e.getPrefixedText(),this.preferredExpiry).parseDom();return de(n,`https://${s}`),ve(n),n}showBasicNotice(e,t){let s=this.getNoticeMessage(e,t);return mw.notify(s,{tag:"watch-self",id:this.constructor.notificationId})}showWatchlistNotice(e,t,s){return mw.loader.using("mediawiki.watchstar.widgets").then(n=>{let r=n("mediawiki.watchstar.widgets");if(!r)return this.showBasicNotice(e,t);let c=this.getNoticeMessage(e,t),u=[this.isWatched?"watch":"unwatch",e.getPrefixedDb(),s,this.updateStatus,{expiryEnabled:this.isWatchlistExpiryEnabled,labelsEnabled:this.watchlistLabelsEnabled,$link:this.$watchLink,message:c}];ts(mw.config.get("wgVersion"),"1.45.0")<0&&u.splice(2,1);try{let h=new r(...u);mw.notify(h.$element,{tag:"watch-self",id:this.constructor.notificationId,autoHideSeconds:"short"})}catch(h){X("Watch","Falls back to basic watch/unwatch functionality.",h),this.showBasicNotice(e,t)}})}showWatchlistPopup(){return this.watchlistPopup?(this.watchlistPopup.isOpen?this.watchlistPopup.isOpen=!1:this.watchlistPopup.openPopup(this.$watchLink[0]),$.Deferred().resolve().promise()):mw.loader.using(["@wikimedia/codex","mediawiki.watchstar.widgets"]).then(e=>{let t=e("vue"),s=e("mediawiki.watchstar.widgets"),n=s.WatchlistPopup;this.watchlistPopupWrapper=_o("span.mw-watchlink-popup"),W(this.watchlistPopupWrapper,document.body),this.watchlistPopup=t.createMwApp(n,{initialAction:this.isWatched?"unwatch":"watch",expiryEnabled:this.isWatchlistExpiryEnabled,labelsEnabled:this.watchlistLabelsEnabled,title:this.article.getMW("title"),dataExpiryOptions:s.dataExpiryOptions,preferredExpiry:this.preferredExpiry,link:this.$watchLink[0]}).mount(this.watchlistPopupWrapper),window.addEventListener("WatchlistPopup.watch",this.onWatchlistPopupWatch),window.addEventListener("WatchlistPopup.unwatch",this.onWatchlistPopupUnwatch)})}getArticle(){return this.article}detach(){this.watchlistPopup&&(window.removeEventListener("WatchlistPopup.watch",this.onWatchlistPopupWatch),window.removeEventListener("WatchlistPopup.unwatch",this.onWatchlistPopupUnwatch),this.watchlistPopup.isOpen=!1,this.watchlistPopupWrapper.remove()),this.$watchLink.detach()}};a(rt,"utils",Zi),a(rt,"notificationId","mw-watchlink-notification");Mt=rt});var is={};Q(is,{default:()=>Ho});var It,Ho,ss=v(()=>{P();H();oe();Ne();M();It=class extends OO.ui.ButtonWidget{constructor(t){t=j(f({name:null,type:"default",classes:[],framed:!0,invisibleLabel:!1,invisibleIcon:!1,icon:"puzzle",href:null,target:Xe(!0),handler:null,useAltKey:!1,article:null,setLink:!1},t),{linkOptions:f({behavior:"event",useAltKey:!1},t.linkOptions)}),t.type==="navigation"&&(t.icon=null,t.classes=[...t.classes,"instantDiffs-button--navigation"]),t.type==="pin"&&(t.invisibleLabel=!0,t.classes=[...t.classes,"instantDiffs-button--pin"]),t.type==="menu"&&(t.classes=[...t.classes,"instantDiffs-button--link"],t.framed=!1,d.get("showMenuIcons")||(t.invisibleIcon=!0)),l(t.href)||(t.href=z(t.article,t.href));super(t);a(this,"options",{});a(this,"invisibleIcon",!1);a(this,"link");a(this,"handler");this.options=t,this.setInvisibleIcon(t.invisibleIcon),t.handler&&this.setHandler(t.handler,t.useAltKey),t.setLink&&this.setLink(t.linkOptions)}setInvisibleIcon(t){return t=!!t,this.invisibleIcon!==t&&(this.invisibleIcon=t,this.$element.toggleClass("instantDiffs-invisibleIconElement",!this.icon||this.invisibleIcon)),this}setLink(t){return this.link=new I(this.$button.get(0),t),this}setHandler(t,s){if(S(this.handler)&&ns(this.$button.get(0),this.handler),S(t)){let n=r=>t(this,r);this.handler=Je(this.$button.get(0),n,s)}return this}execHandler(){return this.$button.get(0).click(),this}getOption(t){return this.options[t]}getOptions(){return this.options}getArticle(){return this.getOption("article")}pending(t){return this.$button.toggleClass("instantDiffs-link--pending",t),this}};K(It);Ho=It});var os,kn,yn=v(()=>{P();M();os=class{constructor(e,t){a(this,"article");a(this,"options",{});a(this,"groups",{});a(this,"buttons",{});a(this,"MenuButton");this.article=e,this.options=f({},t),this.MenuButton=(ss(),Ie(is)).default}renderGroup(e){return e=f({name:null,group:null,widget:null,type:"vertical",classes:[],container:null},e),e.type==="vertical"&&e.classes.push("instantDiffs-buttons-group","instantDiffs-buttons-group--vertical",`instantDiffs-buttons-group--${e.name}`,d.get("showMenuIcons")?"has-icons":null),e.type==="horizontal"&&e.classes.push("instantDiffs-buttons-group","instantDiffs-buttons-group--horizontal",`instantDiffs-buttons-group--${e.name}`),e.widget=new OO.ui.ButtonGroupWidget(e),W(e.widget.$element,e.container),this.registerGroup(e)}registerGroup(e){if(e=f({name:null,group:null,widget:null},e),!this.groups[e.name])return this.groups[e.name]=e,e}getGroup(e){return this.groups[e]}getGroups(e){return Object.values(this.groups).filter(t=>!e||e===t.group)}getGroupsWidgets(e){return this.getGroups(e).map(t=>t.widget)}getGroupsElements(e){return this.getGroups(e).map(t=>t.widget.$element.get(0))}addGroupButtons(e,t){let s=this.getGroup(e);if(!s)return;t=Z(t)?t:[t];let n=t.map(r=>r.widget);s.widget.addItems(n)}getGroupButtons(e){return this.getButtons().filter(t=>Rt(e,t.group))}renderButton(e){if(e=f({article:this.article,name:null,group:null,canSystem:!1,systemType:"pin",systemGroup:"navigation",pin:void 0,canPin:!1,pinType:"pin",pinGroup:"pins",canMenu:!0,menuGroup:"menu",menuType:"menu",widget:null},e),this.buttons[e.name]){X("Menu:renderButton","Button not added: button with the same name already exists.",e);return}let t=this.buttons[e.name]=[];if(e.canSystem){let s=this.renderButtonHelper(j(f({},e),{type:e.systemType,group:e.systemGroup,isSystem:!0}));t.push(s)}if(e.canPin&&(qe(e.pin)?e.pin:Rt(d.get("pinnedActions"),e.name))){let n=this.renderButtonHelper(j(f({},e),{type:e.pinType,group:e.pinGroup,isPin:!0}));t.push(n)}if(e.canMenu){let s=this.renderButtonHelper(j(f({},e),{type:e.menuType,group:e.menuGroup,isMenu:!0}));t.push(s)}return t}renderButtonHelper(e){return e.widget=new this.MenuButton(e),this.addGroupButtons(e.group,e),e}registerButton(e){if(e=f({name:null,group:null,type:null,widget:null},e),!this.buttons[e.name])return this.buttons[e.name]=[e],this.addGroupButtons(e.group,e),e}getButton(e,t){if(this.buttons[e])return this.buttons[e].filter(n=>!t||F(t)&&n.group===t||Z(t)&&t.includes(n.group))}getButtonWidget(e,t){let s=this.getButton(e,t);if(s)return s.map(n=>n.widget)}getButtons(){return Object.values(this.buttons).flat()}eachButton(e,t,s){let n=this.getButton(e,t);n&&n.forEach(r=>s(r))}eachButtonWidget(e,t,s){let n=this.getButtonWidget(e,t);n&&n.forEach(r=>s(r))}focusButton(e,t){let s=!1;return this.eachButtonWidget(e,t,n=>{if(!n.isDisabled())return n.focus(),s=!0,!0}),s}pendingButton(e,t,s){this.eachButtonWidget(e,t,n=>{n.pending(s)})}},kn=os});var xn=v(()=>{});var Dn={};Q(Dn,{default:()=>Go});var Wt,Go,Ln=v(()=>{P();H();M();Wt=class extends OO.ui.PopupButtonWidget{constructor(e){e=ie({icon:"menu",label:g("goto-actions"),title:G("goto-actions","actions",d.get("enableHotkeys")),invisibleLabel:!0,popup:{classes:["instantDiffs-buttons-popup",d.get("showMenuIcons")?"has-icons":null],width:"auto",padded:!1,anchor:!1,align:"backwards",autoClose:!0}},e),super(e)}execHandler(){return this.$button.get(0).click(),this}togglePopup(e){return this.getPopup().toggle(e),this}pending(e){return this.$button.toggleClass("instantDiffs-link--pending",e),this}};K(Wt);Go=Wt});var Ae,zo,Ko,rs,Pn,Sn=v(()=>{T();P();me();oe();Xi();ge();Ii();es();yn();le();M();xn();({h:Ae,hf:zo,ht:Ko}=k),rs=class{constructor(e,t,s,n){a(this,"MenuActionsButton");a(this,"MenuButton");a(this,"page");a(this,"article");a(this,"articleParams",{});a(this,"options",{});a(this,"nodes",{});a(this,"actionRegister");a(this,"watch");a(this,"menu");a(this,"isDetached",!1);a(this,"GROUPS",{left:["snapshot"],center:["navigation"],right:["pins-custom","pins"]});a(this,"groups",[]);a(this,"ACTION_GROUPS",["mobile","menu-custom","menu","footer"]);a(this,"actionGroups",[]);a(this,"ACTION_COUNTERPARTS",{unpatrolled:"back","back-unpatrolled":"unpatrolled"});a(this,"ACTION_DISABLED_COUNTERPARTS",{next:"prev",prev:"next",snapshotNext:"snapshotPrev",snapshotPrev:"snapshotNext"});a(this,"ACTION_HOTKEYS",{none:{ArrowLeft:"prev",ArrowRight:"next"},ctrl:{ArrowLeft:"snapshotPrev",ArrowRight:"snapshotNext",ArrowUp:"switch",ArrowDown:"actions",KeyZ:"back",KeyP:"unpatrolled"},alt:{},shift:{}});a(this,"ACTION_HOTKEYS_RTL",{none:{ArrowRight:"prev",ArrowLeft:"next"},ctrl:{ArrowRight:"snapshotPrev",ArrowLeft:"snapshotNext"}});this.page=e,this.article=t,this.articleParams=f({},s),this.options=f({initiatorAction:null,links:{}},n),this.MenuActionsButton=(Ln(),Ie(Dn)).default,this.MenuButton=(ss(),Ie(is)).default,A.connect(this,{hotkey:"onHotkey"}),this.render()}render(){this.nodes.container=Ae("div",{class:["instantDiffs-navigation"]},this.nodes.left=Ae("div",{class:["instantDiffs-navigation-group","instantDiffs-navigation-group--left"]}),this.nodes.center=Ae("div",{class:["instantDiffs-navigation-group","instantDiffs-navigation-group--center"]}),this.nodes.right=Ae("div",{class:["instantDiffs-navigation-group","instantDiffs-navigation-group--right"]})),this.renderMenu(),this.renderSnapshotLinks(),this.renderNavigationLinks(),this.renderActionLinks(),mw.hook(`${o.config.prefix}.navigation.complete`).fire(this)}renderMenu(){this.menu=new kn(this.article);for(let[e,t]of Object.entries(this.GROUPS))t.forEach(s=>{this.groups.push(s),this.menu.renderGroup({name:s,group:e,type:"horizontal",container:this.nodes[e]})});this.ACTION_GROUPS.forEach(e=>{this.actionGroups.push(e),this.menu.renderGroup({name:e,group:"actions",type:"vertical"})})}renderSnapshotLinks(){let e={canSystem:!0,systemType:"pin",systemGroup:"snapshot",canPin:!1,canMenu:!1},t={canMenu:!0,menuGroup:"mobile"};this.renderSnapshotPrevLink(e),this.renderSnapshotNextLink(e),this.page.getInitiatorPage()&&this.renderBackLink(f(f({},e),t)),l(this.options.links.unpatrolled)||this.renderUnpatrolledLink(f(f({},e),t))}renderNavigationLinks(){let e={canSystem:!0,systemType:"navigation",systemGroup:"navigation",canPin:!1,canMenu:!1},t={canMenu:!0,menuGroup:"mobile"};this.renderPrevLink(e),["page"].includes(this.article.get("typeVariant"))||this.renderSwitchLink(f(f({},e),t)),this.renderNextLink(e)}renderActionLinks(){this.renderMenuLinks(),this.renderMenuFooterLinks(),this.renderMenuActions()}renderMenuLinks(){let e={canPin:!0,pinGroup:"pins",canMenu:!0,menuGroup:"menu"};this.renderCopyLink(e),this.renderCopyWikilink(e),this.renderTypeLink(e),l(this.article.get("title"))||(this.renderPageLink(e),this.article.getMW("title").canHaveTalkPage()&&this.renderTalkPageLink(e),Ye(mw.config.get("wgPageContentModel"))&&this.renderEditLink(e),this.renderHistoryLink(e),this.renderInfoLink(e),o.local.mwIsAnon||this.renderWatchLink(e)),this.renderSettingsLink(e)}renderMenuFooterLinks(){let e={canPin:!1,canMenu:!0,menuGroup:"footer"};this.renderIDLink(e)}renderMenuActions(){let e=as(this.menu.getGroupsElements("actions"),Ae("hr.instantDiffs-buttons-separator")),t=new this.MenuActionsButton({popup:{$content:$(e)}});this.menu.registerButton({name:"actions",group:"pins",type:"pin",widget:t})}renderSnapshotPrevLink(e){let t=$e.instance.getPreviousLink();e=f({name:"snapshotPrev",label:g("goto-snapshot-prev"),title:G("goto-snapshot-prev","snapshot-prev",d.get("enableHotkeys")),icon:"doubleChevronStart",href:t?t.href:null,disabled:!t,setLink:!!t,linkOptions:{initiatorLink:t,onRequest:()=>this.setActionRegister(e.name)}},e),this.menu.renderButton(e)}renderSnapshotNextLink(e){let t=$e.instance.getNextLink();e=f({name:"snapshotNext",label:g("goto-snapshot-next"),title:G("goto-snapshot-next","snapshot-next",d.get("enableHotkeys")),icon:"doubleChevronEnd",href:t?t.href:null,disabled:!t,setLink:!!t,linkOptions:{initiatorLink:t,onRequest:()=>this.setActionRegister(e.name)}},e),this.menu.renderButton(e)}renderPrevLink(e){let t;if(this.options.links.prev){let n=new V({title:this.article.get("title"),hostname:this.article.get("hostname"),oldid:mw.config.get("wgDiffOldId"),diff:this.article.get("type")==="diff"?"prev":null,direction:this.article.get("type")==="revision"?"prev":null});t=q(n)}let s=Nt({short:g("goto-prev"),long:g(`goto-prev-${this.article.get("type")}`),iconBefore:document.dir==="ltr"?"\u2190":"\u2192"});e=f({name:"prev",label:$(s),title:G(`goto-prev-${this.article.get("type")}`,"prev",d.get("enableHotkeys")),href:t,disabled:!t,setLink:!!t,linkOptions:{onRequest:()=>this.setActionRegister(e.name)}},e),this.menu.renderButton(e)}renderNextLink(e){let t;if(this.options.links.next){let n=new V({title:this.article.get("title"),hostname:this.article.get("hostname"),oldid:mw.config.get("wgDiffNewId"),diff:this.article.get("type")==="diff"?"next":null,direction:this.article.get("type")==="revision"?"next":null});t=q(n)}let s=Nt({short:g("goto-next"),long:g(`goto-next-${this.article.get("type")}`),iconAfter:document.dir==="ltr"?"\u2192":"\u2190"});e=f({name:"next",label:$(s),title:G(`goto-next-${this.article.get("type")}`,"next",d.get("enableHotkeys")),href:t,disabled:!t,setLink:!!t,linkOptions:{onRequest:()=>this.setActionRegister(e.name)}},e),this.menu.renderButton(e)}renderSwitchLink(e){let t=this.article.get("type")==="diff"?"revision":"diff",s={type:t};e=f({name:"switch",label:g(`goto-view-${t}`),title:G(`goto-view-${t}`,"switch",d.get("enableHotkeys")),icon:"specialPages",href:q(this.article,{},s),classes:["instantDiffs-button--switch"],setLink:!0,linkOptions:{onRequest:()=>this.setActionRegister(e.name)}},e),this.menu.renderButton(e)}renderUnpatrolledLink(e){e=f({name:"unpatrolled",label:g("goto-view-unpatrolled"),title:G("goto-view-unpatrolled","unpatrolled",d.get("enableHotkeys")),icon:"eyeClosed",href:this.options.links.unpatrolled,classes:["instantDiffs-button--pending"],setLink:!0,linkOptions:{initiatorPage:this.page,onRequest:()=>this.setActionRegister(e.name)}},e),this.menu.renderButton(e)}renderBackLink(e){let t=this.page.getInitiatorPage(),s=t.getArticle();e=f({name:"back",label:g(`goto-back-${s.get("type")}`),title:G(`goto-back-${s.get("type")}`,"back",d.get("enableHotkeys")),icon:"newline",href:q(s,t.getArticleParams()),classes:["instantDiffs-button--back"],setLink:!0,linkOptions:{onRequest:()=>{var c;let n=(c=t.getNavigation())==null?void 0:c.getActionRegister(),r=l(n)?e.name:`${e.name}-${n}`;this.setActionRegister(r)}}},e),this.menu.renderButton(e)}renderCopyLink(e){this.menu.renderButton(f({name:"copyLink",label:g("copy-link"),icon:"link",handler:this.actionCopyLink.bind(this)},e))}renderCopyWikilink(e){this.menu.renderButton(f({name:"copyWikilink",label:g("copy-wikilink"),icon:"wikiText",handler:this.actionCopyWikilink.bind(this)},e))}renderTypeLink(e){let t=this.article.get("type"),s={hash:d.get("linksHash")};this.menu.renderButton(f({name:"link",label:g(`goto-${t}`),icon:"articleRedirect",href:q(this.article,{},s)},e))}renderPageLink(e){let t=this.article.getMW("title").isTalkPage()?this.article.getMW("title").getSubjectPage().getUrl():this.article.get("href"),s={2:"userAvatar",3:"userAvatar",default:"article"};this.menu.renderButton(f({name:"page",label:g("goto-page"),icon:s[this.article.getMW("title").getNamespaceId()]||s.default,href:t},e))}renderTalkPageLink(e){let t=this.article.getMW("title").isTalkPage()?this.article.get("href"):this.article.getMW("title").getTalkPage().getUrl(),s={2:"userTalk",3:"userTalk",default:"speechBubbles"};this.menu.renderButton(f({name:"talkPage",label:g("goto-talkpage"),icon:s[this.article.getMW("title").getNamespaceId()]||s.default,href:t},e))}renderEditLink(e){let t=mw.config.get("wgIsProbablyEditable"),s=mw.util.getUrl(this.article.get("title"),{action:"edit"});this.menu.renderButton(f({name:"edit",label:g(t?"goto-edit":"goto-source"),icon:t?"edit":"editLock",href:s},e))}renderHistoryLink(e){let t=mw.util.getUrl(this.article.get("title"),{action:"history"});this.menu.renderButton(f({name:"history",label:g("goto-history"),icon:"history",href:t},e))}renderInfoLink(e){let t=mw.util.getUrl(this.article.get("title"),{action:"info"});this.menu.renderButton(f({name:"info",label:g("goto-info"),icon:"info",href:t},e))}renderWatchLink(e){this.menu.renderButton(f({name:"watch",label:g("action-watch"),handler:this.actionWatchPage.bind(this)},e)),this.menu.eachButtonWidget("watch",null,t=>{Ot(this.article,t)})}renderSettingsLink(e){this.menu.renderButton(f({name:"settings",label:g("goto-settings"),icon:"settings",handler:this.actionOpenSettings.bind(this)},e))}renderIDLink(e){let t=zo(Ae("span.name",g("script-name")),Ko(" "),Ae("span.version",`v.${o.config.version}`));this.menu.renderButton(f({name:"id",label:$(t),icon:null,href:Ft(`/wiki/${o.config.link}`),classes:["instantDiffs-button--link-id"]},e))}actionCopyLink(e){let t={relative:!1,hash:d.get("linksHash"),minify:d.get("linksFormat")==="minify"},s=q(this.article,{},t);at(s),this.focusAction(e)}actionCopyWikilink(e){this.pendingAction(e,!0),$.when(Di(this.article)).done(t=>{at(t)}).fail(()=>{at(!1)}).always(()=>{this.pendingAction(e,!1),this.focusAction(e)})}actionWatchPage(e){this.pendingAction(e,!0),this.watch||(this.watch=new Mt(this.article,{onUpdate:t=>{this.menu.eachButtonWidget("watch",null,s=>{s.pending(t==="loading"),Ot(this.article,s)})}})),$.when(this.watch.request()).always(()=>{this.pendingAction(e,!1),this.focusAction(e)})}actionOpenSettings(e){this.pendingAction(e,!0),d.once("opening",()=>this.toggleActions(!1)),d.once("closed",()=>this.focusAction(e)),$.when(d.load()).always(()=>{this.pendingAction(e,!1)})}focusAction(e){return this.toggleActions(!1),e instanceof this.MenuButton?this.focusActionByWidget(e):F(e)?this.focusActionByName(e):!1}focusActionByWidget(e){if(e.isDisabled())return!1;let t=e.getOption("group");return this.groups.includes(t)?(e.focus(),!0):this.focusActionByName("actions")}focusActionByName(e){return e=this.ACTION_COUNTERPARTS[e]||e,this.menu.focusButton(e,this.groups)?!0:(e=this.ACTION_DISABLED_COUNTERPARTS[e],e?this.menu.focusButton(e,this.groups):!1)}getActionName(e){if(e instanceof this.MenuButton)return e.getOption("name");if(F(e))return e}pendingAction(e,t){this.getActionName(e)&&this.menu.pendingButton(this.getActionName(e),null,t)}execAction(e){let t=this.getActionName(e);t&&(t!=="actions"&&this.toggleActions(!1),this.menu.eachButtonWidget(t,null,s=>{if(!s.isDisabled())return s.focus(),s.execHandler(),!0}))}toggleActions(e){this.menu.eachButtonWidget("actions",this.groups,t=>{t.togglePopup(e)})}setActionRegister(e){this.actionRegister=e}getActionRegister(){return this.actionRegister}getPinnableActions(){return this.menu.getButtons().filter(e=>e.canPin)}addCustomAction(e){if(e=j(f({},e),{canSystem:!1,canPin:!0,pinGroup:"pins-custom",canMenu:!0,menuGroup:"menu-custom"}),l(e.name)){X("Navigation:addCustomAction",'Button not added: empty "name" option.',e);return}e.name=`custom-${e.name}`,this.menu.renderButton(e)}getCustomAction(e){let t;return e instanceof this.MenuButton&&(t=e.getOption("name")),F(e)&&(t=`custom-${e}`),this.menu.getButton(t,["pins-custom","menu-custom"])}getCustomActionWidget(e){let t=this.getCustomAction(e);if(t)return t.map(s=>s.widget)}eachCustomAction(e,t){let s=this.getCustomAction(e);s&&s.forEach(n=>t(n))}eachCustomActionWidget(e,t){let s=this.getCustomActionWidget(e);s&&s.forEach(n=>t(n))}getActionHotkeyMap(){return document.dir==="rtl"?ie(this.ACTION_HOTKEYS,this.ACTION_HOTKEYS_RTL):this.ACTION_HOTKEYS}onHotkey(e){var r;if(!d.get("enableHotkeys"))return;let t=this.getActionHotkeyMap(),s=e.altKey?"alt":e.ctrlKey?"ctrl":e.shiftKey?"shift":"none",n=(r=t[s])==null?void 0:r[e.code];n&&(e.preventDefault(),e.stopPropagation(),this.execAction(n))}getOuterHeight(e=!1){return ls(this.nodes.container,e)}getArticle(){return this.article}getMenu(){return this.menu}fire(){this.focusAction(this.options.initiatorAction)}embed(e,t){W(this.nodes.container,e,t)}detach(){var e;(e=this.watch)==null||e.detach(),this.toggleActions(!1),A.disconnect(this,{hotkey:"onHotkey"}),this.nodes.container.remove(),this.isDetached=!0}},Pn=rs});var En=v(()=>{});var Vt,Te,qt=v(()=>{T();P();Ct();oe();me();_();gn();wn();Sn();M();En();Vt=class{constructor(e,t){a(this,"type","abstract");a(this,"article");a(this,"options",{});a(this,"articleParams",{});a(this,"data");a(this,"pageInfo");a(this,"pageParse");a(this,"error");a(this,"errorData");a(this,"nodes",{});a(this,"links",{});a(this,"configManager");a(this,"userOptionsManager");a(this,"requestManager");a(this,"loadPromise");a(this,"navigation");a(this,"isLoading",!1);a(this,"isLoaded",!1);a(this,"isConfigsChanged",!1);a(this,"isDetached",!1);a(this,"loadProcessSecondary",()=>{let e=this.getLoadSecondaryPromises();return Promise.allSettled(e)});a(this,"onLoadResponse",()=>m(this,null,function*(){var e;this.isLoading=!1,this.isLoaded=!0,!this.isDetached&&((e=this.error)==null?void 0:e.statusText)!=="abort"&&(l(this.data)?yield this.renderError():yield this.renderSuccess())}));a(this,"onRequestError",(e,t)=>{this.error=e,this.errorData=t==null?void 0:t.error});a(this,"onRequestDone",e=>{this.data=e});a(this,"onRequestCompareError",(e,t)=>{this.onRequestError(e,t)});a(this,"onRequestCompareDone",e=>{let t=e==null?void 0:e.compare;if(!t)return this.onRequestCompareError(null,e);this.article.set({oldid:t.fromrevid,diff:t.torevid,page1:t.fromtitle,page2:t.totitle,title:be(t),section:We(t)})});this.article=e,this.options=f({initiatorAction:null,initiatorPage:null,fireDiffHook:!0,fireContentHook:!0},t),this.articleParams={action:"render",diffonly:this.article.get("type")==="diff"?1:0,unhide:d.get("unHideDiffs")?1:0,uselang:o.local.userLanguage},this.configManager=new zi({wgTitle:!1,wgPageName:!1,wgRelevantPageName:!1,wgPageContentModel:"wikitext",wgNamespaceNumber:!1,wgArticleId:!1,wgRelevantArticleId:!1,wgCurRevisionId:!1,wgRevisionId:!1,wgDiffOldId:!1,wgDiffNewId:!1,wgCanonicalSpecialPageName:!1,wgIsProbablyEditable:!1,wgRelevantPageIsProbablyEditable:!1,wbEntityId:!1,"thanks-confirmation-required":!0}),this.userOptionsManager=new zi({},mw.user.options),this.requestManager=new mn(this.article),OO.EventEmitter.call(this)}load(){return this.isLoading?this.loadPromise:(this.isLoading=!0,this.isLoaded=!1,this.error=null,this.errorData=null,this.loadPromise=this.preloadProcess())}preloadProcess(){let e=this.getPreloadPromises();return Promise.allSettled(e).then(this.loadProcess.bind(this))}loadProcess(){let e=this.getLoadPromises();return Promise.allSettled(e).then(this.loadProcessSecondary).then(this.onLoadResponse)}getPreloadPromises(){return[this.requestCompare()]}getLoadPromises(){return[this.requestPageInfo(),this.request()]}getLoadSecondaryPromises(){return[this.requestWBLabel()]}request(){return this.requestProcess().done(this.onRequestDone).fail(this.onRequestError)}requestProcess(){return this.requestManager.when()}requestCompare(){let e=this.article.getValues();if(this.error||e.typeVariant!=="comparePages"||w(e.oldid)&&w(e.diff))return $.Deferred().resolve().promise();let t={action:"compare",prop:["title","ids","timestamp","comment"],fromrev:w(e.rev1)?e.rev1:void 0,fromtitle:l(e.page1)?void 0:e.page1,torev:w(e.rev2)?e.rev2:void 0,totitle:l(e.page2)?void 0:e.page2,format:"json",formatversion:2,uselang:o.local.userLanguage};return this.requestManager.get(t).then(this.onRequestCompareDone).fail(this.onRequestCompareError)}requestPageInfo(){return m(this,null,function*(){var u,h,b;let e=Math.max(this.article.get("revid"),this.article.get("oldid")),t=this.article.get("curid"),s=this.article.get("title"),n={};w(e)?n.revids=e:w(t)?n.pageids=t:l(s)||(n.titles=s);let{page:r,error:c}=this.pageInfo=yield x.getPageInfo(n,this.article,this.requestManager);if(!c&&r){let D=r.pageprops||{},p=r.entityterms||{};this.configManager.setValues({wgArticleId:r.pageid,wgRelevantArticleId:r.pageid,wgCurRevisionId:r.lastrevid,wgContentLanguage:r.pagelanguage,wgContentLanguageDir:r.pagelanguagedir,wgPageContentModel:r.contentmodel,wgIsProbablyEditable:(u=r.actions)==null?void 0:u.edit,wgRelevantPageIsProbablyEditable:(h=r.actions)==null?void 0:h.edit,wbEntityId:D.wikibase_item||ae(r.contentmodel)&&r.title||this.configManager.get("wbEntityId")}),this.article.setValues({title:r.title,curid:r.pageid,curRevid:r.lastrevid,watched:r.watched,expiry:r.watchlistexpiry,notificationtimestamp:r.notificationtimestamp,new:r.new,label:ae(r.contentmodel)&&((b=p.label)==null?void 0:b[0])||r.contentmodel==="EntitySchema"&&pi(D.displaytitle)||r.contentmodel==="zobject"&&gi(D)||this.article.get("label")}),this.setConfigs()}})}requestWBLabel(){return m(this,null,function*(){var s;if(this.error||!l(this.article.get("label"))||!ae(this.configManager.get("wgPageContentModel")))return $.Deferred().resolve().promise();let e=(s=this.article.getMW("title"))==null?void 0:s.getMain(),t=yield x.getWBLabel(e,this.article,this.requestManager);l(t)||(this.configManager.set("wbEntityId",e),this.article.setValue("label",t),this.setConfigs())})}markAsSeen(){if(this.error||!d.get("markWatchedLine")||!this.article.isForeign||l(this.article.get("timestamp"))||l(this.article.get("notificationtimestamp")))return;let e=new Date(this.article.get("notificationtimestamp")).getTime();if(new Date(this.article.get("timestamp")).getTime()<e)return;let s={titles:this.article.get("titleText"),newerthanrevid:this.article.get("revid")};x.markAsSeen(s,this.article)}abort(){this.isLoading&&this.requestManager.abort()}renderSuccess(){return m(this,null,function*(){yield this.render(),this.markAsSeen(),mw.hook(`${o.config.prefix}.page.renderSuccess`).fire(this),mw.hook(`${o.config.prefix}.page.renderComplete`).fire(this)})}renderError(){return m(this,null,function*(){var n,r,c,u;let e=this.article.get("type"),t=this.article.get("typeVariant"),s=t==="page"?"curid":t==="comparePages"?"compare-pages":"generic";this.error={type:e,code:s,tag:"page",status:(n=this.error)==null?void 0:n.status,statusText:(r=this.error)==null?void 0:r.statusText,message:((c=this.errorData)==null?void 0:c.info)||cs((u=this.error)==null?void 0:u.status),article:this.article,silent:!0},C(`error-${this.error.type}-${this.error.code}`,this.error),yield this.render(),mw.hook(`${o.config.prefix}.page.renderError`).fire(this),mw.hook(`${o.config.prefix}.page.renderComplete`).fire(this)})}render(){return m(this,null,function*(){let e=["instantDiffs-page",`instantDiffs-page--${this.type}`,`instantDiffs-page--${this.article.get("type")}`,"mw-body-content"],t=["instantDiffs-page-body",`instantDiffs-page-body--${this.type}`,`instantDiffs-page-body--${this.article.get("type")}`],s=o.config.skinBodyClasses[mw.config.get("skin")];s&&e.push(...s),this.nodes.$container=$("<div>").attr("dir",document.dir).addClass(e),this.nodes.$tools=$("<div>").addClass("instantDiffs-page-tools").appendTo(this.nodes.$container),this.nodes.$body=$("<div>").addClass(t).appendTo(this.nodes.$container),yield this.renderContent(),yield this.renderNavigation()})}renderContent(){return m(this,null,function*(){this.error?yield this.renderErrorContent():yield this.renderSuccessContent()})}renderErrorContent(){return m(this,null,function*(){let e=fe(`error-${this.error.type}-${this.error.code}`,this.error,this.article),t=$(`<p>${e}</p>`);this.renderWarning({$content:t})})}renderWarning({$content:e,type:t="warning",container:s=this.nodes.$body,insertMethod:n="prependTo"}){let r=ds({$content:e,type:t});return W(r,s,n),r}renderSuccessContent(){return m(this,null,function*(){yield this.restoreFunctionality(),this.requestDependencies()})}renderNavigation(){return m(this,null,function*(){this.navigation=new Pn(this,this.article,this.articleParams,{initiatorAction:this.options.initiatorAction,links:this.links}),this.navigation.embed(this.nodes.$container,"prependTo")})}requestDependencies(e={}){let{modulestyles:t=[],modulescripts:s=[],modules:n=[]}=e,r=[...wi(this.article),...t,...s,...n];return mw.loader.using(ke(r))}restoreFunctionality(){return m(this,null,function*(){if(!this.error&&(this.nodes.$mediaInfoView=this.nodes.$body.find("mediainfoview"),this.article.get("type")==="revision"&&this.nodes.$mediaInfoView.length>0)){let e=yield Ui(this.nodes.$mediaInfoView);e&&W(e,this.nodes.$diffTitle,"insertAfter")}})}getScrollableSection(){let e=this.article.get("hash");if(!l(e))return fs(e,this.nodes.$body)}getScrollableOffsetTop(){var e;return(e=this.getNavigation())==null?void 0:e.getOuterHeight(!0)}processCategories(){l(this.data)||l(this.pageParse)||l(this.pageParse.categorieshtml)||(this.nodes.$categories=$(this.pageParse.categorieshtml),this.nodes.$diffMobileFooter?W(this.nodes.$categories,this.nodes.$diffMobileFooter,"insertBefore"):W(this.nodes.$categories,this.nodes.$body,"appendTo"))}fire(){return m(this,null,function*(){var e;if(mw.hook(`${o.config.prefix}.page.ready`).fire(this),(e=this.getNavigation())==null||e.fire(),this.options.fireDiffHook){let t=this.getDiffTable();this.article.get("type")==="diff"&&(t==null?void 0:t.length)>0&&mw.hook("wikipage.diff").fire(t)}if(this.options.fireContentHook){let t=this.getContainer();(t==null?void 0:t.length)>0&&mw.hook("wikipage.content").fire(t)}ve(this.nodes.$container),mw.hook(`${o.config.prefix}.page.complete`).fire(this)})}focus(){this.emit("focus")}setConfigs(){this.isConfigsChanged=!0,this.configManager.apply(),this.userOptionsManager.apply()}restoreConfigs(){this.isConfigsChanged&&(this.isConfigsChanged=!1,this.configManager.restore(),this.userOptionsManager.restore())}getArticle(){return this.article}getArticleTitleText(){let e=this.article.getValues(),t;return!l(e.page1Text)&&!l(e.page2Text)?t=`${e.page1Text} \u2192 ${e.page2Text}`:l(e.titleText)?t=g(this.error?"dialog-title-not-found":"dialog-title-empty"):t=e.titleText,l(e.label)?t:`${e.label} (${t})`}getArticleParams(){return this.articleParams}getContainer(){return this.nodes.$container}getDiffTable(){return this.nodes.$table}getInitiatorPage(){return this.options.initiatorPage}getNavigation(){return this.navigation}close(){this.emit("close")}detach(){var e,t;this.isDetached||(mw.hook(`${o.config.prefix}.page.beforeDetach`).fire(this),this.abort(),this.restoreConfigs(),(e=this.getNavigation())==null||e.detach(),(t=this.getContainer())==null||t.detach(),this.isDetached=!0)}};a(Vt,"utils",ot);Te=Vt});var us,Bt,hs=v(()=>{T();P();Ct();H();qt();M();us=class i extends Te{constructor(){super(...arguments);a(this,"type","local");a(this,"isDependenciesLoaded",!1);a(this,"onRequestPageError",(t,s,n)=>{this.isDependenciesLoaded=!0;let r={message:t,type:"dependencies",tag:"page",article:this.article,silent:!0};s!=null&&s.error&&(r.code=s.error.code,r.message=s.error.info);let c=n.oldid?"revid":"curid";C(`error-dependencies-${c}`,r)});a(this,"onRequestPageDone",(t,s)=>{if(this.isDependenciesLoaded=!0,this.pageParse=t==null?void 0:t.parse,!this.pageParse)return this.onRequestPageError(null,t,s);this.configManager.setValues(f({wgArticleId:this.pageParse.pageid,wgRevisionId:Math.max(this.article.get("revid"),this.pageParse.revid)},this.pageParse.jsconfigvars)),this.article.setValues({curid:this.configManager.get("wgArticleId"),revid:this.configManager.get("wgRevisionId")}),this.setConfigs(),this.processCategories(),this.requestDependencies(this.pageParse)})}getLoadPromises(){let t=super.getLoadPromises();return this.article.get("type")==="revision"&&(this.article.get("typeVariant")!=="page"&&w(this.article.get("revid"))||this.article.get("typeVariant")==="page"&&w(this.article.get("curid")))&&t.push(this.requestPage()),t}requestPage(){if(this.error)return $.Deferred().resolve().promise();let t={action:"parse",prop:["revid","modules","jsconfigvars","categorieshtml"],disablelimitreport:1,redirects:1,format:"json",formatversion:2,uselang:o.local.userLanguage},s=this.configManager.get("wgDiffNewId")||Math.max(this.article.get("revid"),this.article.get("oldid")),n=this.configManager.get("wgArticleId")||this.article.get("curid");return w(s)?t.oldid=s:w(n)&&(t.pageid=n),this.requestManager.get(t).then(r=>this.onRequestPageDone(r,t)).fail((r,c)=>this.onRequestPageError(r,c,t))}requestProcess(){if(this.error)return $.Deferred().resolve().promise();let t=this.article.getValues(),s={title:l(t.title)?void 0:t.title,diff:l(t.diff)?t.direction:t.diff,oldid:l(t.oldid)?void 0:t.oldid,curid:l(t.curid)?void 0:t.curid},n={url:o.local.mwEndPoint,dataType:"html",data:$.extend(s,this.articleParams)};return this.requestManager.ajax(n)}renderSuccessContent(){return m(this,null,function*(){this.nodes.data=$.parseHTML(this.data),this.nodes.$data=$(this.nodes.data).appendTo(this.nodes.$body),this.collectData(),this.setConfigs(),this.processWarnings(),this.processDiffTable(),this.processFlaggedRevs(),this.article.get("type")==="revision"&&this.processRevision(),this.processMobileFooter(),yield Le(i.prototype,this,"renderSuccessContent").call(this)})}collectData(){let t={},s=this.nodes.$data.find("#mw-diff-otitle1 strong > a, #differences-prevlink"),n=this.nodes.$data.find("#mw-diff-ntitle1 strong > a, #differences-nextlink");if(s.length>0){let b=Number(je("oldid",s.prop("href")));w(b)&&this.configManager.set("wgDiffOldId",b);let D=je("title",s.prop("href"))||s.prop("title");l(D)||(t.page1=D,t.title=D)}if(n.length>0){let b=Number(je("oldid",n.prop("href")));w(b)&&(this.configManager.setValues({wgDiffNewId:b,wgRevisionId:b}),t.revid=b,this.article.get("diff")==="cur"&&(t.diff=b));let D=je("title",n.prop("href"))||n.prop("title");l(D)||(t.page2=D,t.title=D)}t.page1===t.page2&&(delete t.page1,delete t.page2);let r=this.nodes.$data.find("#mw-diff-ntitle2 .mw-userlink");r.length>0&&(t.userhidden=r.hasClass("history-deleted"),t.userhidden||(t.user=r.text()));let c=this.nodes.$data.find("#mw-diff-ntitle1 .mw-diff-timestamp");c.length>0&&(t.timestamp=c.attr("data-timestamp"));let u=this.nodes.$data.find("#mw-diff-ntitle3 .autocomment a");l(this.article.get("section"))&&u.length>0&&(t.section=te("hash",u.prop("href"))),this.nodes.$data.find(".mw-diff-undo a, .mw-rollback-link a").length>0&&this.configManager.set("wgIsProbablyEditable",!0),this.article.set(t),this.configManager.setTitle(this.article.getMW("title")),this.article.get("type")!=="diff"&&!Tt(this.configManager.get("wgPageContentModel"))&&this.userOptionsManager.set("visualeditor-diffmode-historical","source")}processWarnings(){var t;if(this.nodes.$data.filter(".cdx-message").prependTo(this.nodes.$body),this.nodes.$data.find(".cdx-message").prependTo(this.nodes.$body),(t=this.pageInfo)!=null&&t.error){let s=this.nodes.$data.filter("p");s.length>0&&this.renderWarning({$content:s})}}processDiffTable(){this.nodes.$diffTablePrefix=this.nodes.$data.filter(".mw-diff-table-prefix"),(this.article.get("type")!=="diff"||!d.get("showDiffTools"))&&this.nodes.$diffTablePrefix.addClass("instantDiffs-hidden"),this.nodes.$table=this.nodes.$data.filter("table.diff"),this.nodes.$prev=this.nodes.$table.find("#differences-prevlink").attr("data-instantdiffs-link","none").addClass("instantDiffs-hidden"),this.nodes.$next=this.nodes.$table.find("#differences-nextlink").attr("data-instantdiffs-link","none").addClass("instantDiffs-hidden");let t=this.nodes.$table.find("#mw-diff-otitle4");jt(t);let s=this.nodes.$table.find("#mw-diff-ntitle4");jt(s),this.nodes.$data.filter(".mw-revslider-container, .mw-diff-revision-history-links, #mw-oldid").addClass("instantDiffs-hidden"),this.links.prev=this.article.get("type")==="revision"?w(this.configManager.get("wgDiffOldId")):this.nodes.$prev.attr("href"),this.links.next=this.nodes.$next.attr("href")}processRevision(){this.nodes.$diffTitle=this.nodes.$data.filter(".diff-currentversion-title"),d.get("showRevisionInfo")||this.nodes.$diffMobileFooter.addClass("instantDiffs-hidden"),nt(this.nodes.$table),this.processCategories(),this.nodes.$data.find(".mw-diff-slot-header, .mw-slot-header").addClass("instantDiffs-hidden")}processFlaggedRevs(){this.nodes.$frDiffHeader=this.nodes.$data.filter("#mw-fr-diff-headeritems").insertBefore(this.nodes.$table),this.nodes.$unpatrolled=this.nodes.$frDiffHeader.find(".fr-diff-to-stable a").attr("data-instantdiffs-link","none").addClass("instantDiffs-hidden"),this.article.get("type")==="diff"&&(this.links.unpatrolled=this.nodes.$unpatrolled.attr("href")),this.article.get("type")==="revision"&&(d.get("showRevisionInfo")?this.nodes.$frDiffHeader.find(".fr-diff-ratings td:nth-child(2n-1)").addClass("instantDiffs-hidden"):this.nodes.$frDiffHeader.addClass("instantDiffs-hidden")),this.nodes.$data.find(".fr-diff-to-stable, #mw-fr-diff-dataform").addClass("instantDiffs-hidden")}processMobileFooter(){if(this.nodes.$diffMobileFooter=this.nodes.$data.filter(".mw-diff-mobile-footer"),this.nodes.$diffMobileFooter.length===0)return;this.nodes.$diffMobileFooter.appendTo(this.nodes.$body);let t="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--action-default",s=[".mw-diff-undo",".mw-rollback-link"],n=this.nodes.$diffMobileFooter.find(s.join(","));n.length!==0&&(mw.user.isAnon()?n.hide():n.children("a").addClass(t))}restoreFunctionalityEmbed(){var s;if(this.error)return;an("mediawiki.misc-authed-curate"),ji(this.nodes.$body);let t=[];if(this.article.get("type")==="diff"&&d.get("showDiffTools")){let n=Vi(this.nodes.$diffTablePrefix);n&&t.push(n);let r=qi(this.nodes.$diffTablePrefix);r&&t.push(r)}if(((s=this.nodes.$diffTablePrefix)==null?void 0:s.length)>0){let n=this.nodes.$diffTablePrefix.children(":visible").length>0;this.nodes.$diffTablePrefix.toggleClass("instantDiffs-hidden",!n||t.length===0)}if(this.nodes.$wikiLambdaApp=this.nodes.$body.find("#ext-wikilambda-app"),this.nodes.$wikiLambdaApp.length>0){let n=$(ye("dialog-notice-wikilambda"));this.renderWarning({$content:n,type:"notice",container:this.nodes.$wikiLambdaApp,insertMethod:"insertBefore"})}}restoreFunctionalityWithDependencies(){this.error||this.nodes.$wikiLambdaApp.length>0&&Bi(this.nodes.$wikiLambdaApp)}fire(){return m(this,null,function*(){this.restoreFunctionalityEmbed(),this.article.get("type")==="revision"&&!this.isDependenciesLoaded&&(yield this.requestPage()),this.restoreFunctionalityWithDependencies(),yield Le(i.prototype,this,"fire").call(this)})}},Bt=us});var Qo,ps,Ut,gs=v(()=>{T();P();Ct();oe();me();Ri();_();qt();le();({h:Qo}=k),ps=class i extends Te{constructor(t,s){super(t,j(f({},s),{fireDiffHook:!1}));a(this,"type","foreign");a(this,"linkTags",[]);a(this,"onRequestDone",t=>{this.data=t==null?void 0:t.compare});a(this,"MESSAGES",["revisionasof","currentrev-asof","word-separator","pipe-separator","parentheses","talkpagelinktext","contribslink","changeslist-nocomment","rev-deleted-no-diff","rev-deleted-user","rev-deleted-comment","editold","viewsourceold","editundo","tooltip-undo","wikibase-restoreold","diff-empty","checkuser-userinfocard-toggle-button-aria-label"]);a(this,"onRequestRevisionError",(t,s,n)=>{let r={message:t,type:"dependencies",tag:"page",article:this.article};s!=null&&s.error&&(r.code=s.error.code,r.message=s.error.info);let c=n.oldid?"revid":"curid";C(`error-dependencies-${c}`,r)});a(this,"onRequestRevisionDone",(t,s)=>m(this,null,function*(){if(this.pageParse=t==null?void 0:t.parse,!this.pageParse)return this.onRequestRevisionError(null,t,s);yield this.renderRevision()}))}getLoadPromises(){return[this.requestMessages(),this.requestSiteInfo(),...super.getLoadPromises()]}getLoadSecondaryPromises(){let t=super.getLoadSecondaryPromises();return this.article.get("type")==="revision"&&t.push(this.requestRevision()),t}requestProcess(){let t=this.article.getValues(),s={action:"compare",prop:["title","ids","rel","timestamp","user","diff","parsedcomment"],fromrev:w(t.oldid)?t.oldid:void 0,fromrelative:R(t.oldid)?t.oldid:void 0,torev:w(t.diff)?t.diff:void 0,difftype:Pe()?"inline":"table",format:"json",formatversion:2,uselang:o.local.userLanguage};return t.type==="diff"&&!w(t.diff)&&(s.torelative=R(t.diff)?t.diff:"prev"),t.type==="revision"&&!w(t.diff)&&(s.torelative=R(t.direction)?t.direction:"prev"),t.typeVariant==="page"&&w(t.curid)&&(s.fromid=t.curid,s.torelative="cur"),this.requestManager.get(s)}requestSiteInfo(){return m(this,null,function*(){let t=["general","namespaces","namespacealiases"],s=(yield x.getSiteInfo(t,this.article,this.requestManager))||{};if(!N(s)){let n=s.general;N(n)||(this.article.set({hostname:n.servername}),this.configManager.setValues({wgServer:n.server,wgServerName:n.servername,wgMobileServer:n.mobileserver,wgMobileServerName:n.mobileservername}));let r=hi(this.article.get("hostname"));this.configManager.setValues(r),this.setConfigs()}})}requestMessages(){return m(this,null,function*(){yield x.loadMessage(this.MESSAGES)})}renderContent(){return m(this,null,function*(){this.renderForeignWarning(),yield Le(i.prototype,this,"renderContent").call(this)})}renderSuccessContent(){return m(this,null,function*(){this.collectData(),this.setConfigs(),yield this.renderDiffTable(),this.article.get("type")==="revision"&&(yield this.processRevision()),this.renderMobileFooter(),de(this.nodes.$body,this.article.get("href")),yield Le(i.prototype,this,"renderSuccessContent").call(this)})}renderErrorContent(){return m(this,null,function*(){var r,c;((r=this.errorData)==null?void 0:r.code)==="missingcontent"?yield this.renderDeletedWarning():yield Le(i.prototype,this,"renderErrorContent").call(this);let t=this.article.getValues(),s=((c=this.errorData)==null?void 0:c.code)==="missingcontent"?this.errorData.info.replace(/\D/g,""):null,n=[t.oldid,t.diff,s].filter(u=>!isNaN(u)&&u>0);this.configManager.setValues({wgDiffOldId:Math.min(...n),wgDiffNewId:Math.max(...n)}),this.setConfigs(),this.configManager.get("wgDiffOldId")!==this.configManager.get("wgDiffNewId")&&(this.links.prev=w(this.configManager.get("wgDiffOldId")),this.links.next=w(this.configManager.get("wgDiffNewId"))),this.options.initiatorPage=A.getPreviousPage()})}collectData(){this.configManager.setValues({wgArticleId:this.data.toid,wgRevisionId:this.data.torevid,wgDiffOldId:this.data.fromrevid,wgDiffNewId:this.data.torevid});let t=$("<span>").html(this.data.fromparsedcomment).find(".autocomment a");t.length>0&&(this.data.fromsection=te("hash",t.prop("href")));let s=$("<span>").html(this.data.toparsedcomment).find(".autocomment a");s.length>0&&(this.data.tosection=te("hash",s.prop("href")));let n={previd:this.data.prev,nextid:this.data.next,curid:this.configManager.get("wgArticleId"),revid:this.configManager.get("wgRevisionId"),title:be(this.data),section:this.data.tosection,timestamp:this.data.totimestamp,user:this.data.touser,userhidden:this.data.touserhidden};this.data.fromid!==this.data.toid&&(n.page1=this.data.fromtitle,n.page2=this.data.totitle),this.article.set(n),this.configManager.setTitle(this.article.getMW("title")),this.links.prev=this.article.get("type")==="revision"?w(this.data.fromrevid):this.data.prev&&this.data.prev!==this.data.fromrevid,this.links.next=this.data.next&&this.data.next!==this.data.torevid}renderForeignWarning(){let t=$(ye(`dialog-notice-foreign-${this.article.get("type")}`,`https://${this.article.get("hostname")}`,this.article.get("hostname")));this.nodes.$foreignWarning=this.renderWarning({$content:t,type:"notice"})}renderDeletedWarning(){return m(this,null,function*(){let t=yield x.parseWikitext({title:this.article.get("title"),text:mw.msg("rev-deleted-no-diff")},this.article),s=$(t).find("p");this.nodes.$deleteWarning=this.renderWarning({$content:s,type:"warning",container:this.nodes.$foreignWarning,insertMethod:"insertAfter"})})}renderDiffTable(){return m(this,null,function*(){if(this.nodes.table=Wi(this.data.body),(this.data.fromtexthidden||this.data.totexthidden)&&(yield this.renderDeletedWarning()),this.data.fromid){let t=At({prefix:"o",title:this.data.fromtitle,revid:this.data.fromrevid,curRevid:this.article.get("curRevid"),hostname:this.article.get("hostname"),timestamp:this.data.fromtimestamp,texthidden:this.data.fromtexthidden,user:this.data.fromuser,userhidden:this.data.fromuserhidden,comment:this.data.fromparsedcomment,commenthidden:this.data.fromcommenthidden});W(t,this.nodes.table.deleted)}else this.nodes.table.added.colSpan=4,this.nodes.table.deleted.classList.add("instantDiffs-hidden");if(this.data.toid){let t=At({prefix:"n",title:this.data.totitle,revid:this.data.torevid,previd:this.data.fromrevid,curRevid:this.article.get("curRevid"),hostname:this.article.get("hostname"),timestamp:this.data.totimestamp,texthidden:this.data.totexthidden,user:this.data.touser,userhidden:this.data.touserhidden,comment:this.data.toparsedcomment,commenthidden:this.data.tocommenthidden});W(t,this.nodes.table.added)}else this.nodes.table.deleted.colSpan=4,this.nodes.table.added.classList.add("instantDiffs-hidden");this.nodes.$table=$(this.nodes.table.container).appendTo(this.nodes.$body),this.article.get("type")==="revision"&&nt(this.nodes.$table)})}renderMobileFooter(){var t;(t=this.data)!=null&&t.toid&&(this.nodes.diffMobileFooter=Fi({title:this.data.totitle,revid:this.data.torevid,hostname:this.article.get("hostname"),user:this.data.touser,userhidden:this.data.touserhidden}),this.nodes.$diffMobileFooter=$(this.nodes.diffMobileFooter).appendTo(this.nodes.$body))}requestRevision(){if(this.error)return $.Deferred().resolve().promise();let t={action:"parse",prop:["text","revid","modules","jsconfigvars","categorieshtml"],disablelimitreport:1,redirects:1,format:"json",formatversion:2,uselang:o.local.userLanguage},s=Math.max(this.article.get("revid"),this.article.get("oldid")),n=this.article.get("curid");return w(s)?t.oldid=s:w(n)&&(t.pageid=n),this.requestManager.get(t).then(r=>this.onRequestRevisionDone(r,t)).fail((r,c)=>this.onRequestRevisionError(r,c,t))}renderRevision(){return m(this,null,function*(){this.configManager.setValues(f({wgArticleId:this.pageParse.pageid,wgRevisionId:Math.max(this.article.get("revid"),this.pageParse.revid)},this.pageParse.jsconfigvars)),this.article.setValues({curid:this.configManager.get("wgArticleId"),revid:this.configManager.get("wgRevisionId")}),this.setConfigs();let t=this.article.get("revid")===this.article.get("curRevid")?"currentrev-asof":"revisionasof";this.nodes.diffTitle=Qo("h2",{class:"diff-currentversion-title"},mw.msg(t,et(this.data.totimestamp)))})}processRevision(){return m(this,null,function*(){if(this.nodes.$diffTitle=$(this.nodes.diffTitle).appendTo(this.nodes.$body),this.nodes.$revision=$(this.pageParse.text).appendTo(this.nodes.$body),this.nodes.$wikiLambdaApp=this.nodes.$body.find("#ext-wikilambda-app"),this.nodes.$wikiLambdaApp.length>0){let t=$(`<p>${g("dialog-notice-foreign-wikilambda")}</p>`);this.renderWarning({$content:t,type:"notice",container:this.nodes.$wikiLambdaApp,insertMethod:"insertBefore"})}this.processCategories(),this.nodes.$body.find("#ext-wikilambda-app, .ext-wikilambda-view-nojsfallback, .mw-diff-slot-header, .mw-slot-header").addClass("instantDiffs-hidden"),this.requestDependencies(this.pageParse),this.requestForeignDependencies()})}requestForeignDependencies(){let t=bi(this.article);vi(this.article,t.modules),ki(this.article,t.styles),this.linkTags=yi(t.links)}detach(){this.isDetached||(super.detach(),xi(this.linkTags))}},Ut=ps});var $n=v(()=>{});var lt,An,Tn=v(()=>{H();lt=class extends OO.ui.LabelWidget{constructor(){super({classes:["oo-ui-messageDialog-message","is-transparent"]})}toggleVisibility(e){this.$element.toggleClass("is-transparent",!e)}};a(lt,"tagName","div");K(lt);An=lt});var _t,Cn,On=v(()=>{P();H();_t=class extends OO.ui.ProgressBarWidget{constructor(t){super(f({classes:["instantDiffs-view-loader","is-transparent"],progress:!1,inline:!0},t));a(this,"toggleDelay");a(this,"toggleTime")}toggleVisibility(t,s){if(this.toggleDelay&&clearTimeout(this.toggleDelay),s&&(this.toggle(t),Ht(()=>this.$element.toggleClass("is-transparent",!t))),t===!0&&(this.toggleTime=Date.now(),this.toggle(!0),Ht(()=>this.$element.removeClass("is-transparent"))),t===!1){if(!this.isVisible())return;let n=this.calculateRemainingTime(this.toggleTime,1e3),r=Math.max(n-150,0);this.toggleDelay=setTimeout(()=>{this.$element.addClass("is-transparent"),this.toggleDelay=setTimeout(()=>this.toggle(!1),150)},r)}}calculateRemainingTime(t,s=1e3){let r=(Date.now()-t)%s;return s-r}};K(_t);Cn=_t});var Mn={};Q(Mn,{default:()=>Yo});var Ce,Yo,In=v(()=>{P();H();Tn();On();M();Ce=class extends OO.ui.MessageDialog{constructor(){super({classes:["instantDiffs-view"]})}initialize(){return super.initialize(),this.message.$element.remove(),this.message=new An,this.text.$element.append(this.message.$element),this.$content.removeAttr("tabindex"),this.container.$element.attr("tabindex","-1"),d.get("closeOutside")&&(this.$clickOverlay=$("<div>").on("click",()=>this.close()).addClass("instantDiffs-view-overlay").appendTo(this.$element)),this.progressBar=new Cn,this.$content.prepend(this.progressBar.$element),this}getSetupProcess(e){return super.getSetupProcess(e).next(()=>{rn(),this.scrollContentTop(0),this.focus()})}onDialogKeyDown(e){super.onDialogKeyDown(e),!ms()&&this.emit("hotkey",e)}getBodyHeight(){return"auto"}update(e){return this.getUpdateProcess(e).execute()}getUpdateProcess(e){return new OO.ui.Process().next(()=>{e=f({title:this.constructor.static.title,message:this.constructor.static.message,scrollTop:0},e),this.toggleProgress(!1),this.title.setLabel(e.title),this.message.setLabel(e.message),this.scrollContentTop(S(e.scrollTop)?e.scrollTop():e.scrollTop),this.toggleVisibility(!0),this.focus()})}getTeardownProcess(e){return super.getTeardownProcess(e).next(()=>{this.toggleProgress(!1),this.toggleVisibility(!1)})}focus(e){return e?super.focus(e):this.container.$element.trigger("focus"),this}toggleVisibility(e){return this.message.toggleVisibility(e),this}toggleProgress(...e){return this.progressBar.toggleVisibility(...e),this}getContentOffsetTop(e,t=0){var n;let s=0;if((ct(e)||e instanceof jQuery)&&(s=(n=Gt(e,this.container.$element))==null?void 0:n.top),typeof s=="number")return s+t}setScrollOffsetTop(e=0){return this.container.$element.css("--instantDiffs-view-scroll-padding-top",`${e}px`),this}scrollContentTop(e=0,t=0){var n;let s=0;return typeof e=="number"&&(s=e),(ct(e)||e instanceof jQuery)&&(s=(n=Gt(e,this.container.$element))==null?void 0:n.top),typeof s=="number"&&this.container.$element.scrollTop(s+t),this}};a(Ce,"name","Instant Diffs Window"),a(Ce,"size","instantDiffs"),a(Ce,"actions",[{action:"close",label:g("action-close"),title:G("action-close","close")}]);K(Ce);Yo=Ce});var zt,A,le=v(()=>{T();P();H();Ne();Ii();hs();gs();M();$n();zt=class{constructor(){a(this,"link");a(this,"page");a(this,"options",{});a(this,"opener",{link:null,options:{}});a(this,"initiator",{link:null,options:{}});a(this,"previousInitiator",{link:null,options:{}});a(this,"document",{});a(this,"loadPromise");a(this,"isDependenciesLoaded",!1);a(this,"isConstructed",!1);a(this,"isOpen",!1);a(this,"isLoading",!1);a(this,"isRequesting",!1);a(this,"isProcessing",!1)}static getSize(e){return this.sizes[e]}mixin(){OO.EventEmitter.call(this)}setup(e,t){var s,n;if(this.isRequesting||this.isProcessing)return!1;if(o.timers.dialogProcesStart=mw.now(),this.link=e,this.options=f({initiatorPage:null,onOpen:()=>{},onClose:()=>{}},t),!this.isOpen){this.opener.link=this.link,this.opener.options=f({},this.options);let r={};(n=(s=this.opener.link).getMW)!=null&&n.call(s).hasLine&&(r.filterType=this.opener.link.getArticle().get("type"),r.filterMWLine=!0),$e.newInstance(r)}if(this.link instanceof I){let r=this.link.getInitiatorLink();$e.instance.hasLink(r)&&(this.previousInitiator=f({},this.initiator),this.initiator.link=r,this.initiator.options=f({},this.options),$e.instance.setLink(this.initiator.link))}return!0}load(){return this.isLoading?this.loadPromise:this.isDependenciesLoaded?(this.open(),!0):(this.isLoading=!0,this.error=null,this.loadPromise=$.when(mw.loader.using(this.getDependencies())).then(this.onLoadSuccess.bind(this)).fail(this.onLoadError.bind(this)),this.loadPromise)}getDependencies(){return ke([...o.config.dependencies.window,...o.config.dependencies.content])}onLoadError(e){this.isLoading=!1,this.isDependenciesLoaded=!1,this.error={type:"dependencies",tag:"view",message:e&&e.message?e.message:null},C("error-dependencies-generic",this.error)}onLoadSuccess(){this.isLoading=!1,this.isDependenciesLoaded=!0,kt(),this.open()}construct(){this.isConstructed=!0;let e=(In(),Ie(Mn)).default;this.dialog=new e,this.dialog.connect(this,{hotkey:t=>this.emit("hotkey",t)}),this.manager=yt(),this.manager.addWindows([this.dialog])}open(){if(this.isConstructed||this.construct(),!this.isOpen){this.document.scrollableRoot=OO.ui.Element.static.getRootScrollableElement(document.body),this.document.scrollTop=this.document.scrollableRoot.scrollTop;let e=this.link.getArticle(),t={title:e.get("titleText")||e.get("title"),size:Pi()};this.windowInstance=this.manager.openWindow(this.dialog,t),this.windowInstance.opening.then(this.onOpening.bind(this)),this.windowInstance.opened.then(this.onOpen.bind(this)),this.windowInstance.closing.then(this.onClosing.bind(this)),this.windowInstance.closed.then(this.onClose.bind(this))}this.request()}onOpening(){this.emit("opening")}onOpen(){this.isOpen=!0,S(this.options.onOpen)&&this.options.onOpen(this),this.emit("opened")}onClosing(){this.emit("closing")}onClose(){this.isOpen=!1,this.isRequesting=!1,this.isProcessing=!1,this.previousPage&&(this.previousPage.detach(),this.previousPage=null),this.page&&(this.page.detach(),this.page=null),S(this.options.onClose)&&this.options.onClose(this),S(this.opener.options.onClose)&&this.opener.link!==this.link&&this.opener.options.onClose(this),S(this.initiator.options.onClose)&&this.initiator.link!==this.link&&this.initiator.options.onClose(this),this.opener={link:null,options:{}},this.initiator={link:null,options:{}},this.previousInitiator={link:null,options:{}},this.document.scrollableRoot.scrollTop=this.document.scrollTop,this.emit("closed")}onUpdate(){this.fire(),this.previousInitiator.link instanceof I&&this.opener.link!==this.previousInitiator.link&&S(this.previousInitiator.options.onClose)&&this.previousInitiator.options.onClose(this),this.initiator.link instanceof I&&this.opener.link!==this.initiator.link&&S(this.initiator.options.onOpen)&&this.initiator.options.onOpen(this),this.emit("updated")}request(){var r,c;this.isRequesting=!0,this.isProcessing=!0,this.error=null,this.previousPage=this.page,this.dialog.toggleProgress(!0),this.previousPage&&this.previousPage.restoreConfigs();let e=this.link.getArticle(),t={initiatorAction:(c=(r=this.previousPage)==null?void 0:r.getNavigation())==null?void 0:c.getActionRegister(),initiatorPage:this.options.initiatorPage},s=e.get("hostname"),n=re(s)?Ut:Bt;this.page=new n(e,t),this.page.connect(this,{focus:"focus",close:"close"}),$.when(this.page.load()).always(this.onRequestResponse.bind(this))}onRequestResponse(){if(this.isRequesting=!1,!this.page||this.page.isDetached)return;let e={title:this.page.getArticleTitleText(),message:this.page.getContainer(),scrollTop:this.getContentOffset.bind(this)};this.dialog.update(e).then(this.onUpdate.bind(this))}refresh(){return this.isRequesting||this.isProcessing?!1:(o.timers.dialogProcesStart=mw.now(),this.load())}fire(){this.previousPage&&this.previousPage.detach(),$.when(this.page.fire()).always(()=>{this.setContentOffset(),o.timers.dialogProcesEnd=mw.now(),d.get("logTimers")&&xe("dialog process time",o.timers.dialogProcesStart,o.timers.dialogProcesEnd),this.isProcessing=!1})}focus(){this.dialog.focus()}close(){this.dialog.close()}getContentOffset(){let e=this.page.getScrollableSection(),t=this.page.getScrollableOffsetTop();return this.dialog.getContentOffsetTop(e,-t)}setContentOffset(){let e=this.page.getArticle();e&&e.get("type")==="revision"&&(this.dialog.setScrollOffsetTop(this.page.getScrollableOffsetTop()),this.dialog.scrollContentTop(this.getContentOffset()))}getLink(){return this.link}getPage(){return this.page}getPreviousPage(){return this.previousPage}getDialog(){return this.dialog}isContains(e){var t;return(t=this.dialog)==null?void 0:t.$content.get(0).contains(e)}};a(zt,"sizes",{compact:{width:800,height:"auto"},standard:{width:1200,height:"auto"},wide:{width:1600,height:"auto"}});A=new zt});function Jo(){Rn.call(this,this.getField("linksFormat"))}function Rn(){let i=this.getFieldValue("linksHash"),e=this.getFieldValue("linksFormat"),s=Nn({relative:!1,hash:i,minify:e==="minify"});this.setFieldHelp("linksFormat",s),Wn.call(this,this.getField("wikilinksFormat"))}function Wn(){let i=this.getFieldValue("linksHash"),e=this.getFieldValue("linksFormat"),t=this.getFieldValue("wikilinksFormat"),n=Nn({relative:!1,hash:i,minify:e==="minify",wikilink:!0,wikilinkPreset:t});this.setFieldHelp("wikilinksFormat",n)}function Nn(i){let e=g("copy-wikilink-example-title"),t=q({title:e,diff:"12345",type:"diff",section:"Section"},{},i),s=q({title:e,oldid:"12345",type:"revision",section:"Section"},{},i),n=q({title:e,curid:"12345",type:"revision",typeVariant:"page",section:"Section"},{},i);return Oe("ul.instantDiffs-list--settings",Oe("li",Oe("i",t)),Oe("li",Oe("i",s)),Oe("li",Oe("i",n)))}function Zo(){var n,r;let i=(r=(n=A.getPage())==null?void 0:n.getNavigation())==null?void 0:r.getPinnableActions();if(!i)return{};let e=new Set,t=i.map(c=>(e.add(c.name),[c.name,{label:c.label,disabled:qe(c.pin)}]));return(d.get("pinnedActions")||[]).forEach(c=>{e.has(c)||t.push([c,{label:c,show:!1}])}),Object.fromEntries(t)}var Oe,ft,ws=v(()=>{P();oe();le();M();_();({h:Oe}=k),ft={general:{config:{labelMsg:"settings-fieldset-general"},fields:{enableMobile:{type:"checkbox",enabled:!0,enabledCondition:()=>m(null,null,function*(){return x.siteInfoHasSkin("minerva")}),default:!0,config:{labelMsg:"settings-enable-mobile",helpMsg:"settings-enable-mobile-help"}},notifyErrors:{type:"checkbox",enabled:!0,default:!0,config:{labelMsg:"settings-notify-errors"}}}},links:{config:{labelMsg:"settings-fieldset-links"},fields:{showLink:{type:"checkbox",enabled:!0,default:!1,config:{labelMsg:"settings-show-link",helpMsg:"settings-show-link-help"}},showPageLink:{type:"checkbox",enabled:!0,default:!0,config:{labelMsg:"settings-show-page-link",helpMsg:"settings-show-page-link-help"}},highlightLine:{type:"checkbox",enabled:!0,default:!0,config:{labelMsg:"settings-highlight-line"}},markWatchedLine:{type:"checkbox",enabled:!0,default:!0,config:{labelMsg:"settings-mark-watched-line"}}}},dialog:{config:{labelMsg:"settings-fieldset-dialog"},fields:{viewWidth:{type:"buttonSelect",enabled:!0,default:"standard",config:{labelMsg:"settings-view-width",helpMsg:"settings-view-width-help"},optionsType:"buttonOption",options:{compact:{labelMsg:"settings-view-width-compact",titleMsg:["settings-view-width-option-title",A.constructor.getSize("compact").width]},standard:{labelMsg:"settings-view-width-standard",titleMsg:["settings-view-width-option-title",A.constructor.getSize("standard").width]},wide:{labelMsg:"settings-view-width-wide",titleMsg:["settings-view-width-option-title",A.constructor.getSize("wide").width]},full:{labelMsg:"settings-view-width-full",titleMsg:"settings-view-width-full-title"}}},closeOutside:{type:"checkbox",enabled:!0,default:!0,config:{labelMsg:"settings-close-outside"}},enableHotkeys:{type:"checkbox",enabled:!0,default:!0,config:{labelMsg:"settings-enable-hotkeys"}},showDiffTools:{type:"checkbox",enabled:!0,default:!0,config:{labelMsg:"settings-show-diff-tools"}},showRevisionInfo:{type:"checkbox",enabled:!0,default:!0,config:{labelMsg:"settings-show-revision-info"}},unHideDiffs:{type:"checkbox",enabled:!0,default:!0,config:{labelMsg:"settings-unhide-diffs",helpMsg:["settings-unhide-diffs-help","suppressrevision"]}},openInNewTab:{type:"checkbox",enabled:!0,default:!0,config:{labelMsg:"settings-open-in-new-tab"}}}},menu:{config:{labelMsg:"settings-fieldset-menu"},fields:{showMenuIcons:{type:"checkbox",enabled:!0,default:!0,config:{labelMsg:"settings-show-menu-icons"}},showWatchlistPopup:{type:"checkbox",enabled:!0,default:!0,config:{labelMsg:"settings-show-watchlist-popup",helpMsg:"settings-show-watchlist-popup-help"}},linksHash:{type:"checkbox",enabled:!0,default:!1,config:{labelMsg:"settings-links-hash",helpMsg:"settings-links-hash-help"},onChange:Jo},linksFormat:{type:"radioSelect",enabled:!0,default:"full",config:{labelMsg:"settings-links-format",helpMsg:"placeholder"},optionsType:"radioOption",options:{full:{labelMsg:"settings-links-format-full"},minify:{labelMsg:"settings-links-format-minify"}},onSelect:Rn},wikilinksFormat:{type:"radioSelect",enabled:!0,default:"special",config:{labelMsg:"settings-wikilinks-format",helpMsg:"placeholder"},optionsType:"radioOption",options:{link:{labelMsg:"settings-wikilinks-format-link"},special:{labelMsg:"settings-wikilinks-format-special"}},onSelect:Wn}}},pinnedActions:{config:{labelMsg:"settings-fieldset-pinned-actions"},fields:{pinnedActions:{type:"checkboxMultiselect",enabled:!0,default:["copyLink"],config:{labelMsg:"settings-pinned-actions",helpMsg:"settings-pinned-actions-help"},optionsType:"checkboxMultioption",options:Zo}}}}});var xs={};Q(xs,{getQueryDefaults:()=>ys,getSchemaDefaults:()=>ks,getSchemaSettings:()=>vs,renderNoticeBox:()=>Kt});function vs(){let e=Object.values(ft).flatMap(t=>Object.entries(t.fields)).map(([t,s])=>[t,s.enabled]);return Object.fromEntries(e)}function ks(){let e=Object.values(ft).flatMap(t=>Object.entries(t.fields)).map(([t,s])=>[t,s.default]);return Object.fromEntries(e)}function ys(){var t,s;let i=((s=Ds((t=document.currentScript)==null?void 0:t.src))==null?void 0:s.instantdiffs)||{},e=Object.entries(i).map(([n,r])=>[n,r==="true"?!0:r==="false"?!1:r]);return Object.fromEntries(e)}function Kt(i){i=f({modifiers:[],content:null,image:null,alt:null},i);let e=["instantDiffs-notice-box"];return i.modifiers.forEach(t=>e.push(`instantDiffs-notice-box--${t}`)),bs("div",{class:e},bs("img",{src:`${o.config.commonsAssetsPath}${i.image}`,alt:i.alt}),bs("h5",i.content))}var bs,Qt=v(()=>{T();P();ws();({h:bs}=k)});var Fn=v(()=>{});var Vn={};Q(Vn,{default:()=>Xo});var Me,Xo,qn=v(()=>{T();P();H();Qt();ws();M();Me=class extends OO.ui.ProcessDialog{constructor(){super({classes:["instantDiffs-settings"]});a(this,"panels",{});a(this,"tabs",{});a(this,"visibleTabWidgets",[]);a(this,"fields",{});a(this,"onActionRequestError",(t,s)=>{let n={type:"settings",message:t};s!=null&&s.error&&(n.code=s.error.code,n.message=s.error.info);let r=new OO.ui.Error(fe("error-setting-request",n),{recoverable:!0});this.showErrors(r)});a(this,"onActionRequestSuccess",t=>{var n,r;if(o.local.mwIsAnon)return this.update();let s=(r=(n=t==null?void 0:t.query)==null?void 0:n.userinfo)==null?void 0:r.options;if(!s)return this.onActionRequestError(null,t);try{let c=JSON.parse(s[`${o.config.settingsPrefix}-settings`]);d.set(c,!0)}catch(c){}this.update()});a(this,"onActionSaveError",(t,s)=>{let n={type:"settings",message:t};s!=null&&s.error&&(n.code=s.error.code,n.message=s.error.info);let r=new OO.ui.Error(fe("error-setting-save",n),{recoverable:!0});this.showErrors(r)});a(this,"onActionSaveSuccess",()=>{this.setPanel("finish")})}initialize(...t){super.initialize(...t),this.panels.edit=this.renderEditPanel(),this.panels.finish=this.renderFinishPanel(),this.panels.empty=this.renderEmptyPanel(),this.stackLayout=new OO.ui.StackLayout({items:[this.panels.edit,this.panels.finish,this.panels.empty]}),this.$body.append(this.stackLayout.$element)}renderEditPanel(){return new OO.ui.PanelLayout({classes:["instantDiffs-settings-panel","instantDiffs-settings-panel--edit"],padded:!1,expanded:!0})}renderFinishPanel(){return new OO.ui.PanelLayout({classes:["instantDiffs-settings-panel","instantDiffs-settings-panel--finish"],padded:!0,expanded:!0})}renderEmptyPanel(){return new OO.ui.PanelLayout({classes:["instantDiffs-settings-panel","instantDiffs-settings-panel--empty"],padded:!0,expanded:!0})}setPanel(t){this.panels[t]&&(this.actions.setMode(t),this.stackLayout.setItem(this.panels[t]))}renderContents(){return m(this,null,function*(){yield this.renderEditContent(),this.renderFinishContent(),this.renderEmptyContent(),this.processLinksAttr(this.stackLayout.$element)})}renderEditContent(){return m(this,null,function*(){for(let[s,n]of Object.entries(ft))this.tabs[s]=yield this.renderTab(s,n);this.visibleTabWidgets=Object.values(this.tabs).map(s=>s.tab).filter(s=>s.isVisible());let t=new OO.ui.IndexLayout({expanded:!0,framed:!1});t.addTabPanels(this.visibleTabWidgets,0),this.panels.edit.$element.empty().append(t.$element)})}renderFinishContent(){let s=Kt({image:"/6/6f/Eo_circle_light-green_checkmark.svg",content:g("settings-saved"),alt:g("settings-saved-icon")});this.panels.finish.$element.empty().append(s)}renderEmptyContent(){let t=["/2/2f/Cappuccino.svg","/c/ca/Coffe.svg","/9/9a/Coffee_cup_icon.svg","/1/1a/Applications-ristretto.svg","/f/f7/Cup-o-coffee-simple.svg"],s=Math.floor(Math.random()*t.length),n=t[s]||t[0],r=Kt({image:n,content:g("settings-empty"),alt:g("settings-empty-icon"),modifiers:["empty"]});this.panels.empty.$element.empty().append(r)}renderTab(t,s){return m(this,null,function*(){s=ie({name:t,fields:{},fieldset:null,tab:null,config:{label:null}},s),s.config=this.validateFieldConfig(s.config);for(let[c,u]of Object.entries(s.fields))this.fields[c]=s.fields[c]=yield this.renderField(c,u);let n=Object.values(s.fields).map(c=>c.field);s.fieldset=new OO.ui.FieldsetLayout().addItems(n);let r=Object.keys(s.fields).some(c=>this.fields[c].enabled);return s.tab=new OO.ui.TabPanelLayout(s.name,j(f({},s.config),{content:[s.fieldset]})).toggle(r),s})}renderField(t,s){return m(this,null,function*(){s=ie({name:t,type:null,input:null,field:null,config:{label:null,align:"inline",help:null,helpInline:!0},optionsType:null,options:{},onSelect:()=>{},onChange:()=>{}},s),s.enabled=yield this.checkField(t,s),s.config=this.validateFieldConfig(s.config),S(s.options)&&(s.options=s.options.call(this,s));for(let[r,c]of Object.entries(s.options))s.options[r]=this.renderInputOption(r,c,s.optionsType);let n=Object.values(s.options).map(r=>r.option);switch(s.type){case"checkbox":s.input=new OO.ui.CheckboxInputWidget;break;case"radioSelect":s.input=new OO.ui.RadioSelectWidget({items:n});break;case"buttonSelect":s.input=new OO.ui.ButtonSelectWidget({items:n});break;case"checkboxMultiselect":s.input=new OO.ui.CheckboxMultiselectWidget({items:n});break}return S(s.onSelect)&&s.input.on("select",()=>s.onSelect.call(this,s)),S(s.onChange)&&s.input.on("change",()=>s.onChange.call(this,s)),s.field=new OO.ui.FieldLayout(s.input,s.config).toggle(s.enabled),s})}checkField(t,s){return m(this,null,function*(){return d.check(t)?S(s.enabledCondition)?yield s.enabledCondition(t,s):!0:!1})}renderInputOption(t,s,n){switch(s=ie({name:t,type:n,data:t,option:null,show:!0},s),s=this.validateFieldConfig(s),s.type){case"radioOption":s.option=new OO.ui.RadioOptionWidget(s);break;case"buttonOption":s.option=new OO.ui.ButtonOptionWidget(s);break;case"checkboxMultioption":s.option=new OO.ui.CheckboxMultioptionWidget(s);break}return s.option.toggle(s.show),s}validateFieldConfig(t){return[{key:"labelMsg",target:"label",useDom:!0},{key:"titleMsg",target:"title",useDom:!1},{key:"helpMsg",target:"help",useDom:!0}].forEach(({key:n,target:r,useDom:c})=>{let u=t[n];if(!u)return;let h=c?ye:g;t[r]=Array.isArray(u)?h(...u):h(u)}),t}getField(t){return this.fields[t]}getFields(){return this.fields}getFieldValue(t){var n;let s=this.getField(t);if(s){if(["checkbox"].includes(s.type))return s.input.isSelected();if(["radioSelect","buttonSelect"].includes(s.type))return(n=s.input.findFirstSelectedItem())==null?void 0:n.getData();if(["checkboxMultiselect"].includes(s.type))return s.input.findSelectedItemsData()}}getFieldValues(){let t={};for(let[s]of Object.entries(this.fields))t[s]=this.getFieldValue(s);return t}setFieldValue(t,s){let n=this.getField(t);if(n)return["checkbox"].includes(n.type)&&n.input.setSelected(s),["radioSelect","buttonSelect"].includes(n.type)&&n.input.selectItemByData(s),["checkboxMultiselect"].includes(n.type)&&n.input.selectItemsByData(s),this}setFieldHelp(t,s){let n=this.getField(t);if(n)return n.field.$help.empty().append(s),this}setFieldDisabled(t,s){let n=this.getField(t);if(n)return n.input.setDisabled(s),this}getSetupProcess(t){return super.getSetupProcess(t).next(()=>m(this,null,function*(){this.$body.scrollTop(0),yield this.processActionRequest()}))}getActionProcess(t){return t==="save"?new OO.ui.Process(()=>this.processActionSave()):t==="reload"?new OO.ui.Process(()=>this.processActionReload()):t==="close"?new OO.ui.Process(()=>this.close()):super.getActionProcess(t)}processLinksAttr(t){t.find("a:not(.jquery-confirmable-element)").each((n,r)=>r.setAttribute("target","_blank")),de(t,o.config.origin)}getBodyHeight(){return 500}processActionRequest(){return m(this,null,function*(){this.pushPending(),yield this.renderContents(),this.setPanel(this.visibleTabWidgets.length>0?"edit":"empty");for(let[t]of Object.entries(this.fields))this.setFieldDisabled(t,!0);d.request().then(this.onActionRequestSuccess).fail(this.onActionRequestError).always(()=>this.popPending())})}update(){return this.getUpdateProcess().execute()}getUpdateProcess(){return new OO.ui.Process(()=>{this.setPanel(this.visibleTabWidgets.length>0?"edit":"empty"),this.processActionUpdate(d.get())})}processActionUpdate(t){this.popPending();for(let[s]of Object.entries(this.fields)){this.setFieldDisabled(s,!1);let n=t[s];typeof n!="undefined"&&this.setFieldValue(s,n)}}processActionSave(){this.pushPending(),d.save(this.getFieldValues()).then(this.onActionSaveSuccess).fail(this.onActionSaveError).always(()=>this.popPending())}processActionReload(){this.pushPending(),window.location.reload()}};a(Me,"name","Instant Diffs Settings"),a(Me,"title",g("settings-title")),a(Me,"actions",[{action:"save",modes:"edit",label:g("action-save"),flags:["primary","progressive"]},{action:"reload",modes:"finish",label:g("action-reload"),flags:["primary","progressive"]},{action:"close",modes:"empty",label:g("action-close"),flags:["primary","progressive"]},{modes:["edit","finish","empty"],label:g("action-close"),title:g("action-close"),invisibleLabel:!0,icon:"close",flags:["safe","close"]}]);K(Me);Xo=Me});var Yt,d,M=v(()=>{T();P();Qt();H();_();Fn();Yt=class{constructor(){a(this,"loadPromise");a(this,"isDependenciesLoaded",!1);a(this,"isConstructed",!1);a(this,"isOpen",!1);a(this,"isLoading",!1);a(this,"isRequesting",!1);a(this,"isSaving",!1);a(this,"onLoadError",e=>{this.isLoading=!1,this.isDependenciesLoaded=!1,this.error={type:"dependencies",tag:"settings",message:e==null?void 0:e.message},C("error-dependencies-generic",this.error)});a(this,"onLoadSuccess",()=>{this.isLoading=!1,this.isDependenciesLoaded=!0,kt(),this.open()});a(this,"onOpening",()=>{this.emit("opening")});a(this,"onOpen",()=>{this.isOpen=!0,this.emit("opened")});a(this,"onClosing",()=>{this.emit("closing")});a(this,"onClose",()=>{this.isOpen=!1,this.emit("closed")});a(this,"onRequestResponse",()=>{this.isRequesting=!1});a(this,"onSaveResponse",()=>{this.isSaving=!1})}mixin(){OO.EventEmitter.call(this)}load(){return this.isLoading?this.loadPromise:this.isDependenciesLoaded?(this.open(),!0):(this.isLoading=!0,this.error=null,this.loadPromise=$.when(mw.loader.using(ke(o.config.dependencies.settings))).then(this.onLoadSuccess).fail(this.onLoadError),this.loadPromise)}construct(){this.isConstructed=!0;let e=(qn(),Ie(Vn)).default;this.dialog=new e,this.manager=yt(),this.manager.addWindows([this.dialog])}open(){this.isOpen||(this.isConstructed||this.construct(),this.windowInstance=this.manager.openWindow(this.dialog),this.windowInstance.opening.then(this.onOpening),this.windowInstance.opened.then(this.onOpen),this.windowInstance.closing.then(this.onClosing),this.windowInstance.closed.then(this.onClose))}request(){if(o.local.mwIsAnon)return $.Deferred().resolve().promise();this.isRequesting=!0;let e={action:"query",meta:"userinfo",uiprop:"options",format:"json",formatversion:2,uselang:o.local.userLanguage};return x.post(e).always(this.onRequestResponse)}save(e){return this.set(e,!0),o.local.mwIsAnon?$.Deferred().resolve().promise():(this.isSaving=!0,ke(["ext.GlobalPreferences.global"]).length>0?this.saveGlobal(e):this.saveLocal(e))}saveLocal(e){let t=[`${o.config.settingsPrefix}-settings`,JSON.stringify(e)],s=x.getApi();return s.saveOption.apply(s,t).always(this.onSaveResponse)}saveGlobal(e){let t={action:"globalpreferences",optionname:`${o.config.settingsPrefix}-settings`,optionvalue:JSON.stringify(e)};return x.getApi().postWithEditToken(t).always(this.onSaveResponse)}get(e,t=!1){if(t){let s=Object.entries(o.local.defaults).filter(([r])=>r in o.config.settings),n=Object.fromEntries(s);return e?n[e]:n}return e?o.local.defaults[e]:o.local.defaults}check(e){return e?o.local.settings[e]:o.local.settings}set(e,t){var n,r,c;o.local.defaults=f(f({},o.local.defaults),e);let s=this.get(void 0,!0);if(mw.storage.setObject(`${o.config.prefix}-settings`,s),t){let u=JSON.stringify(s);S((n=o.GM)==null?void 0:n.setValue)&&o.GM.setValue("settings",u),o.local.mwIsAnon||(c=(r=mw.user)==null?void 0:r.options)==null||c.set(o.config.settingsPrefix,u)}}processDefaults(){return m(this,null,function*(){var t;let e={};try{e=f(f({},e),mw.storage.getObject(`${o.config.prefix}-settings`))}catch(s){}if(S((t=o.GM)==null?void 0:t.getValue))try{e=f(f({},e),JSON.parse(yield o.GM.getValue("settings")))}catch(s){}if(!o.local.mwIsAnon)try{e=f(f({},e),JSON.parse(mw.user.options.get(`${o.config.settingsPrefix}-settings`)))}catch(s){}this.set(e,!1)})}};a(Yt,"utils",xs);d=new Yt});var k={};Q(k,{addBaseToLinks:()=>de,addClick:()=>Je,addTargetToLinks:()=>ve,arrayIntersperse:()=>as,arrayUnique:()=>ee,clearWhitespaces:()=>jt,clipboardWriteLink:()=>at,embed:()=>W,getBodyContentNode:()=>Fe,getCanonicalSpecialPage:()=>mt,getCompareSection:()=>We,getCompareTitle:()=>be,getComponentFromUrl:()=>te,getDependencies:()=>ke,getErrorMessage:()=>fe,getErrorStatusText:()=>cs,getHref:()=>ut,getLabel:()=>Ee,getMissingDependencies:()=>vt,getMobileServer:()=>Ps,getMsgKey:()=>dt,getMsgParams:()=>Xt,getOffsetRelativeToContainer:()=>Gt,getParamFromUrl:()=>je,getPlaceholderClasses:()=>St,getRevisionSection:()=>Oi,getSpecialPageAliases:()=>ti,getTarget:()=>Xe,getTargetFromFragment:()=>fs,getTitleFromUrl:()=>_i,getURL:()=>ei,h:()=>B,hf:()=>Ss,hint:()=>Ls,hj:()=>sr,hs:()=>ir,ht:()=>_n,inArray:()=>Rt,isActiveElement:()=>ms,isAllowed:()=>De,isArray:()=>Z,isBoolean:()=>qe,isBreakpoint:()=>er,isCompareHidden:()=>Pt,isElement:()=>ct,isEmpty:()=>l,isEmptyObject:()=>N,isForeign:()=>re,isFunction:()=>S,isMF:()=>Pe,isMessageExists:()=>Ze,isNew:()=>Qe,isObject:()=>Ve,isRevisionHidden:()=>Ci,isString:()=>F,isToggleKey:()=>Bn,isValidDir:()=>R,isValidID:()=>w,log:()=>ue,logException:()=>X,logTimer:()=>xe,moduleRequire:()=>tt,msg:()=>g,msgDom:()=>ye,msgHint:()=>G,msgParse:()=>tr,notifyError:()=>C,notifyMsg:()=>Un,onSchedule:()=>Ht,optionsMerge:()=>ie,origin:()=>Ft,outerHeight:()=>ls,parseQuery:()=>Ds,processMessages:()=>Zt,removeClick:()=>ns,renderLabel:()=>Nt,renderMessageBox:()=>ds,renderPlaceholder:()=>Be,semverCompare:()=>ts,server:()=>Jt,setHTML:()=>Hi,spacesToUnderlines:()=>bt,textDom:()=>$t});function l(i){return!i||i.length===0}function N(i){return!i||!Ve(i)||Object.keys(i).length===0}function F(i){return typeof i=="string"}function qe(i){return typeof i=="boolean"}function S(i){return typeof i=="function"}function Z(i){return Array.isArray(i)}function Ve(i){return i&&typeof i=="object"&&!Array.isArray(i)}function Bn(i){return i.type==="click"||i.type==="keypress"&&["Enter","Space"].includes(i.code)}function ct(i){return i instanceof Element||i instanceof HTMLElement}function ms(){let i=["button","submit","reset","file","checkbox","radio","range","color","image","hidden"],e=document.activeElement;return!e||e.contentEditable==="true"||e.tagName==="TEXTAREA"||e.tagName==="INPUT"&&!i.includes(e.type)}function Ft(i){return`${o.config.origin}${i}`}function Jt(i){return`${o.config.server}${i}`}function ke(i){return i.filter(e=>{let t=mw.loader.getState(e);return t&&!["error","missing"].includes(t)})}function vt(i){return i.filter(e=>{let t=mw.loader.getState(e);return!["ready","registered"].includes(t)})}function tt(i){return o.local.require(i)}function Qe(){return o.local.lastVersion!==o.config.version}function De(){return!d.get("standalone")&&o.config.include.pageActions.includes(mw.config.get("wgAction"))&&!o.config.exclude.pages.includes(mw.config.get("wgCanonicalSpecialPageName"))}function re(i){return!l(i)&&!o.local.mwServerNames.includes(i)}function Pe(){return document.readyState==="complete"?document.body.classList.contains("mw-mf"):!l(mw.config.get("wgMFMode"))}function er(i){return i=o.config.breakpoints[i],i?window.matchMedia(i):!1}function Ht(i){requestAnimationFrame(()=>{requestAnimationFrame(i)})}function ue(i,e,t){let s=console[i];if(!s)return;let n=Ze("script-name")?g("script-name"):"Instant Diffs";/\.$/.test(e)||(e=`${e}.`);let r=[`${n}: ${e}`];Z(t)?r.push(...t):l(t)||r.push(t),s(...r)}function X(i,e,t){let s=`Exception in "${i}"`;l(e)||(s=`${s}: ${e}`),ue("warn",s,t)}function xe(i,e,t){let s=t-e;s<1e3?s=`${Math.round(s)}ms`:s=`${(s/1e3).toFixed(2)}s`,ue("info",`${i}: ${s}`)}function bt(i){return i.replace(/ /g,"_")}function ts(i,e){return i=i.split("-").shift(),e=e.split("-").shift(),i.localeCompare(e,void 0,{numeric:!0,sensitivity:"case",caseFirst:"upper"})}function as(i,e){if(!Array.isArray(i)||i.length===0)return i;let t=ct(e);return i.flatMap((s,n)=>{if(n<i.length-1){let r=t?e.cloneNode(!0):e;return[s,r]}return[s]})}function Rt(i,e){return Z(i)?i.includes(e):F(i)&&F(e)?i===e:!1}function ee(i){return[...new Set(i)]}function ie(...i){return i.reduce((e,t)=>(Object.keys(t).forEach(s=>{let n=e[s],r=t[s];Ve(n)&&Ve(r)?e[s]=ie(n,r):e[s]=r}),e),{})}function g(){return mw.msg.apply(mw.msg,Xt(arguments))}function Ls(i){return i=`hint-${i}`,`[${g(i)}]`}function G(i,e,t=!0){return i=g(i),t&&(i=`${i} ${Ls(e)}`),i.trim()}function tr(){return mw.message.apply(mw.message,Xt(arguments)).parse()}function ye(){return mw.message.apply(mw.message,Xt(arguments)).parseDom()}function $t(i){return mw.messages.set({[dt("buffer")]:i}),ye("buffer")}function Ze(i){return l(i)?!1:mw.message(dt(i)).exists()}function Zt(){if(o.local.userLanguage=mw.config.get("wgUserLanguage"),o.local.userLanguage==="qqx"){o.local.language=o.local.userLanguage;return}o.local.language=o.i18n[o.local.userLanguage]?o.local.userLanguage:"en",o.local.messages=o.i18n[o.local.language]||{},o.local.language!=="en"&&(o.local.messages=f(f({},o.i18n.en),o.local.messages));let i={};for(let[e,t]of Object.entries(o.local.messages))i[dt(e)]=t;mw.messages.set(i)}function dt(i){return`${o.config.messagePrefix}-${i}`}function Xt(i){return l(i[0])||(i[0]=dt(i[0])),i}function cs(i){if(Number.isInteger(i)){if(i===0)return g("error-offline");if(i>=400&&i<500)return g("error-revision-missing");if(i>500)return g("error-server")}}function fe(i,e){var n;i=Ze(i)?i:"error-generic",e=f({},e);let t=f({},(n=e.article)==null?void 0:n.getValues()),s=g(i,t.oldid||t.curid||t.page1||t.rev1,t.diff||t.page2||t.rev2,t.titleText||t.title,e.message||g("error-wasted"));return/\.$/.test(s)||(s=`${s}.`),s}function C(i,e){if(e=f({article:null,silent:null},e),e.silent=qe(e.silent)?e.silent:!d.get("notifyErrors"),o.isUnloading)return;document.visibilityState==="hidden"&&(e.silent=!0);let t=fe(i,e);if(e.silent){ue("warn",t,e);return}if(typeof mw!="undefined"&&mw.notify){let s=B("div.instantDiffs-notification",B("div.instantDiffs-notification-label",B("a",{href:Ft(`/wiki/${o.config.link}`),target:"_blank"},g("script-name"))),_n(t));Un(s,e)}ue("error",t,e)}function Un(i,e){mw.notify(i,{type:"error",tag:`${o.config.prefix}-${e.tag}`})}function Ee(i){let e=o.config.labels[i];if(e)return typeof e=="object"?e[document.dir]:e}function Xe(i){return d.get("openInNewTab")&&i?"_blank":"_self"}function ut(i){return/^\/\//.test(i)&&(i=`https:${i}`),i}function ei(i){try{return new URL(ut(i))}catch(e){return null}}function je(i,e){let t=ei(e);if(t)return t.searchParams.get(i)}function te(i,e){let t=ei(e);if(t)return t[i]}function _i(i){var t;let e=mw.util.getParamValue("title",i);if(!e)try{let s=new URL(i,location.href),n=(t=mw.config.get("wgArticlePath"))==null?void 0:t.split("$1")[0];s.pathname.startsWith(n)&&(e=decodeURIComponent(s.pathname.substring(n.length)))}catch(s){return ue("error","Error parsing URL",s),null}return e}function Ds(i){let e=ei(i);if(!e)return;let t={};for(let[s,n]of e.searchParams){let r=s.match(/^([^[]+)\[([^\]]+)\]$/);if(r){let[,c,u]=r;t[c]=t[c]||{},t[c][u]=n}else t[s]=n}return t}function w(i){return!l(i)&&!isNaN(i)}function R(i){return!l(i)&&["next","prev","cur"].includes(i)}function Pt(i){return i&&(i.fromtexthidden||i.totexthidden)}function Ci(i){var e,t;return i&&((t=(e=i.slots)==null?void 0:e.main)==null?void 0:t.texthidden)}function be(i){return i.torevid?i.totitle:i.fromrevid?i.fromtitle:null}function We(i){let e;return i.torevid?(l(i.tocomment)||(e=i.tocomment.match(o.config.sectionRegExp)),e&&e[1]||null):i.fromrevid?(l(i.fromcomment)||(e=i.fromcomment.match(o.config.sectionRegExp)),e&&e[1]||null):null}function Oi(i){let e;return i&&!l(i.comment)&&(e=i.comment.match(o.config.sectionRegExp)),e&&e[1]||null}function Ps(){let i=mw.config.get("wgServer").replace(/^https?:/,""),e=new RegExp("^//www\\.").test(i)?"www.":"",t=mw.config.get("wgContentLanguage");if(!l(t)){let n=new RegExp(`^//${t}\\.`);if(n.test(i))return i.replace(n,`//${t}.m.`)}let s=mw.config.get("wgNoticeProject");if(!l(s)){let n=new RegExp(`^//${e}${s}\\.`);if(n.test(i))return i.replace(n,l(e)?`//${s}.m.`:`//m.${s}.`)}}function Fe(){let i=o.config.bodyContentSelector[mw.config.get("skin")]||o.config.bodyContentSelector.default,e=$(i);return(!e||e.length===0)&&(e=$(document.body)),e}function ti(i,e){let t="Special",s=mw.config.get("wgFormattedNamespaces")[-1],n=e.split(":"),r=i[e],c=r.split(":");n[0]=s,c[0]=t;let u=[e,r,n.join(":"),c.join(":")];return ee(u)}function mt(i){if(!l(i))try{let e=new mw.Title(i).getPrefixedDb();for(let[t,s]of Object.entries(o.local.specialPagesAliasesPrefixed))if(s.includes(e))return t}catch(e){}}function B(i,e={},...t){return Object.keys(e).forEach(s=>{let n=e[s];if(!l(n))switch(s){case"id":i=`${i}#${n.trim()}`,delete e[s];break;case"class":n=Array.isArray(n)?n.map(r=>r.trim()).join("."):n.trim().replace(/\s+/g,"."),i=`${i}.${n}`,delete e[s];break}}),(0,jn.default)(i,e,...t)}function _n(i){return document.createTextNode(i)}function ir(...i){return i.reduce((e,t)=>e+t.outerHTML,"")}function Ss(...i){let e=new DocumentFragment;for(let t of i)t&&e.append(t);return e}function sr(i){return Ss(...i.toArray())}function fs(i,e){if(l(i))return null;if(!e)return mw.util.getTargetFromFragment(i);let t=e instanceof jQuery?e[0]:e;if(!t)return null;let s=t.querySelector(`#${CSS.escape(i)}`);if(s)return s;let n=mw.util.percentDecodeFragment(i);return n?t.querySelector(`#${CSS.escape(n)}`):null}function Gt(i,e){if(i instanceof jQuery&&(i=i[0]),e instanceof jQuery&&(e=e[0]),!i||!e)return null;let t=0,s=0,n=i;for(;n&&n!==e&&(t+=n.offsetTop,s+=n.offsetLeft,n=n.offsetParent,!(n&&!e.contains(n))););return{top:t,left:s}}function ls(i,e=!1){if(i instanceof jQuery&&(i=i[0]),!i)return 0;let t=i.offsetHeight;if(e){let s=getComputedStyle(i);t+=parseFloat(s.marginTop)||0,t+=parseFloat(s.marginBottom)||0}return t}function jt(i){!i||i.length===0||i.contents().each((e,t)=>{t.nodeType===3&&t.remove()})}function at(i,e){var n;let t=()=>{mw.notify(g("copy-link-copied"),{tag:`${o.config.prefix}-copyLink`}),S(e)&&e(!0)},s=()=>{mw.notify(g("copy-link-error"),{tag:`${o.config.prefix}-copyLink`,type:"error"}),S(e)&&e(!1)};if(l(i)||!F(i))return s();if((n=navigator.clipboard)!=null&&n.writeText)navigator.clipboard.writeText(i).then(t).catch(s);else{let r=B("textarea",{value:i});document.body.append(r),r.select();let c=document.execCommand("copy");r.remove(),c?t():s()}}function Je(i,e,t=!0){let s=n=>{if(n){if(!Bn(n)||n.button||n.ctrlKey)return;if(n.preventDefault(),t&&n.altKey&&!l(i.href)){i.target==="_blank"?window.open(i.href,"_blank").focus():window.location.href=i.href;return}}e(n)};return t&&!l(i.href)&&(l(i.dataset.altTitle)&&(i.dataset.altTitle=i.title),i.dataset.altTitle=`${i.dataset.altTitle} ${Ls("alt-click")}`.trim(),i.dataset.origTitle=i.title,i.addEventListener("mouseenter",()=>i.title=i.dataset.altTitle),i.addEventListener("mouseleave",()=>i.title=i.dataset.origTitle),i.addEventListener("mousedown",n=>n.preventDefault())),i.addEventListener("click",s),i.addEventListener("keypress",s),s}function ns(i,e){i.removeEventListener("click",e),i.removeEventListener("keypress",e)}function W(i,e,t="appendTo"){if(!e)return;if(e instanceof jQuery){(i instanceof jQuery?i:$(i))[t](e);return}let s=i instanceof jQuery?i.get(0):i;switch(t){case"insertBefore":e.before(s);break;case"insertAfter":e.after(s);break;case"prependTo":e.prepend(s);break;default:e.append(s);break}}function Hi(i,e){if(i){if(i instanceof jQuery){i.html(e);return}i.innerHTML=e}}function de(i,e,t=!1){if(!i)return;let s;try{s=new URL(e,`https://${location.hostname}`)}catch(c){return}let n=(c,u)=>{$(u).attr("href","https://"+s.hostname+s.pathname+$(u).attr("href"))},r=(c,u)=>{$(u).attr("href","https://"+s.hostname+$(u).attr("href").replace(/special:mylanguage\//i,"")).attr("title",($(u).attr("title")||"").replace(/special:mylanguage\//i,""))};i.filter('a[href^="#"]').each(n),i.find('a[href^="#"]').each(n),t||(i.filter('a[href^="/"]:not([href^="//"])').each(r),i.find('a[href^="/"]:not([href^="//"])').each(r))}function ve(i){if(!d.get("openInNewTab"))return;let e=(t,s)=>{let n=s.getAttribute("href");l(n)||/^#/.test(n)||s.setAttribute("target","_blank")};i.filter("a:not(.mw-thanks-thank-link, .jquery-confirmable-element)").each(e),i.find("a:not(.mw-thanks-thank-link, .jquery-confirmable-element)").each(e)}function St(i=[]){let e=["instantDiffs-panel-placeholder"];return i.forEach(t=>e.push(`instantDiffs-panel-placeholder--${t}`)),d.get("showLink")&&e.push("has-link"),e}function Be(){return $("<span>").addClass(St())}function Nt(i){i=f({short:null,long:null,iconBefore:null,iconAfter:null},i),l(i.short)||(i.short=B("span",i.short)),l(i.long)||(i.long=B("span",i.long)),l(i.iconBefore)||(i.iconBefore=B("i",i.iconBefore)),l(i.iconAfter)||(i.iconAfter=B("i",i.iconAfter));let e=[i.iconBefore,i.short,i.iconAfter].filter(s=>!l(s)).map(s=>s.cloneNode(!0)),t=[i.iconBefore,i.long,i.iconAfter].filter(s=>!l(s)).map(s=>s.cloneNode(!0));return Ss(B("div.instantDiffs-label.instantDiffs-label--long",...t),B("div.instantDiffs-label.instantDiffs-label--short",...e))}function ds(i){i=f({$content:null,type:"notice"},i);let e=i.$content.toArray();return B("div",{class:["cdx-message","cdx-message--block",`cdx-message--${i.type}`,"plainlinks"]},B("span.cdx-message__icon"),B("div.cdx-message__content",...e))}var jn,P=v(()=>{jn=wo(nn());T();M()});var Es,ii,$s=v(()=>{ge();Lt();le();Es=class extends we{constructor(t){super(j(f({article:{}},t),{ariaHaspopup:!0,handler:()=>this.openDialog()}));a(this,"article");this.article=new V(this.options.article)}openDialog(){let t={onOpen:()=>this.onDialogOpen(),onClose:()=>this.onDialogClose()};return A.setup(this,t)?(this.onDialogRequest(),$.when(A.load()).always(()=>this.onDialogLoad())):$.Deferred().resolve().promise()}onDialogRequest(){this.pending(!0),this.emit("loading")}onDialogLoad(){this.pending(!1),this.emit("loaded")}onDialogOpen(){this.emit("opened")}onDialogClose(){this.emit("closed")}getArticle(){return this.article}},ii=Es});var As,si,Ts=v(()=>{T();$s();M();As=class extends ii{constructor(){super(...arguments);a(this,"nodes",{})}openDialog(){this.nodes.$oldid=$('#mw-history-compare input[name="oldid"]:checked'),this.nodes.$oldidLine=this.nodes.$oldid.closest("li"),this.nodes.$diff=$('#mw-history-compare input[name="diff"]:checked'),this.nodes.$diffLine=this.nodes.$diff.closest("li"),this.article.set({type:"diff",title:o.local.mwTitleText,oldid:this.nodes.$oldid.val(),diff:this.nodes.$diff.val()}),super.openDialog()}onDialogOpen(){d.get("highlightLine")&&(this.nodes.$oldidLine.addClass("instantDiffs-line--highlight"),this.nodes.$diffLine.addClass("instantDiffs-line--highlight")),super.onDialogOpen()}onDialogClose(){d.get("highlightLine")&&(this.nodes.$oldidLine.removeClass("instantDiffs-line--highlight"),this.nodes.$diffLine.removeClass("instantDiffs-line--highlight")),super.onDialogClose()}},si=As});var Hn=se(()=>{window.instantDiffs||(window.instantDiffs={});instantDiffs.i18n||(instantDiffs.i18n={});instantDiffs.i18n.en={"@metadata":{authors:["Serhio Magpie"]},"script-name":"Instant Diffs","script-name-short":"ID","diff-title":"Difference between revisions","diff-title-hidden":"Difference between revisions is hidden","revision-title":"Revision content","revision-title-hidden":"Revision content is hidden","compare-label":"$1","compare-title":"Compare selected revisions ($1)","compare-pages-title":"Difference between pages","compare-pages-title-hidden":"Difference between pages is hidden","page-title":"Go to page","comment-title":"Go to message","action-save":"Save","action-cancel":"Cancel","action-close":"Close","action-reload":"Reload","action-watch":"Watch","action-unwatch":"Unwatch","goto-snapshot-prev":"Previous link on a page","goto-snapshot-next":"Next link on a page","goto-view-diff":"Show changes","goto-view-revision":"Show revision","goto-view-unpatrolled":"Pending changes","goto-prev":"Older","goto-next":"Newer","goto-prev-diff":"Older edit","goto-next-diff":"Newer edit","goto-back-diff":"Back","goto-prev-revision":"Older revision","goto-next-revision":"Newer revision","goto-back-revision":"Back","goto-diff":"Go to edit","goto-revision":"Go to revision","goto-page":"Go to page","goto-comment":"Go to message","goto-edit":"Edit","goto-source":"View source","goto-history":"View history","goto-info":"View info","goto-talkpage":"Discussion","goto-settings":"Settings","goto-actions":"Actions","hint-close":"Esc","hint-alt-click":"Alt+Click: open the link","hint-snapshot-prev":"Ctrl+Arrow Left","hint-snapshot-next":"Ctrl+Arrow Right","hint-prev":"Arrow Left","hint-next":"Arrow Right","hint-switch":"Ctrl+Arrow Up","hint-unpatrolled":"Ctrl+P","hint-back":"Ctrl+Z","hint-actions":"Ctrl+Arrow Down","copy-link":"Copy link","copy-link-copied":"The link has been copied to the clipboard.","copy-link-error":"Couldn't copy the link.","copy-wikilink":"Copy wikilink","copy-wikilink-page":"page","copy-wikilink-diff":"diff","copy-wikilink-revision":"revision","copy-wikilink-example-title":"Main Page","dialog-title-empty":"[No title]","dialog-title-not-found":"[Not found]","dialog-notice-wikilambda":"WikiLambda app currently only shows the latest revision. See a [[phab:T397902|ticket]] on Phabricator.","dialog-notice-foreign-diff":"You are viewing a foreign diff from [$1 $2]. Some features can be limited.","dialog-notice-foreign-revision":"You are viewing a foreign revision from [$1 $2]. Some features can be limited.","dialog-notice-foreign-wikilambda":"WikiLambda app is not currently supported in the foreign revisions.","settings-title":"Instant Diffs Settings","settings-saved":`The settings have been saved successfully. Reload the page to apply them.`,"settings-saved-icon":"Checkmark icon","settings-empty":`Oops, looks like the admin disabled all settings. Time to relax and grab some coffee!`,"settings-empty-icon":"Coffee cup icon","settings-fieldset-links":"Links","settings-show-link":"Show action link","settings-show-link-help":"Displays an action button (\u2756) after the link to open the Instant Diffs dialog. Otherwise, the click action is added directly to the link. You can still open the link in the current tab by pressing Alt+Click.","settings-show-page-link":"Show page link","settings-show-page-link-help":"Displays an action button (\u2794) after the link to navigate to the page and section where the edit was made. If the [[mw:Special:MyLanguage/Convenient Discussions|Convenient Discussions]] script is installed, the button will also try to navigate to the corresponding comment.","settings-highlight-line":"Highlight lines in Watchlists and similar lists when the Instant Diffs dialog opens from the related link.","settings-mark-watched-line":"Mark changes as visited in Watchlists when the Instant Diffs dialog opens from the related link.","settings-fieldset-dialog":"Dialog","settings-view-width":"Set window dimensions:","settings-view-width-help":"Dimensions apply only to desktop view. Mobile view always uses full screen dimensions.","settings-view-width-option-title":"$1 pixels wide","settings-view-width-compact":"Compact","settings-view-width-standard":"Standard","settings-view-width-wide":"Wide","settings-view-width-full":"Full","settings-view-width-full-title":"All available screen space","settings-close-outside":"Close Instant Diffs dialog when clicking outside of it.","settings-enable-hotkeys":"Enable keyboard shortcuts in the Instant Diffs dialog.","settings-show-diff-tools":"Show additional diff tools, such as the Inline format toggle.","settings-show-revision-info":"Show change information when viewing a revision.","settings-unhide-diffs":"Display hidden revision content and diff info without additional steps.","settings-unhide-diffs-help":'The "$1" [[mw:Special:MyLanguage/Help:RevisionDelete|user right]] is required to view revision content.',"settings-open-in-new-tab":"Open links inside the Instant Diffs dialog in a new tab.","settings-fieldset-menu":"Menu","settings-show-menu-icons":"Show icons in the Instant Diffs dialog dropdown menu.","settings-show-watchlist-popup":"Show advanced options when adding or removing pages from the Watchlist.","settings-show-watchlist-popup-help":"When available, displays a popup with watchlist time period and label settings.","settings-links-hash":"Include section name (anchor) in the links","settings-links-hash-help":"The section name will also be appended as an anchor to the link URL when using copy actions with the selected non-minified format.","settings-links-format":"Link format for the copy action:","settings-links-format-full":"Full url with a page title","settings-links-format-minify":"Minified url","settings-wikilinks-format":"Wikilink format for the copy action:","settings-wikilinks-format-link":"Simple link in brackets","settings-wikilinks-format-special":"Internal wiki link","settings-fieldset-general":"General","settings-enable-mobile":"Enable Instant Diffs on the mobile skin (Minerva).","settings-enable-mobile-help":"To re-enable Instant Diffs, you will need to switch to a different skin.","settings-notify-errors":"Show popup alerts for critical errors.","settings-fieldset-pinned-actions":"Pinned Actions","settings-pinned-actions":"Pin selected actions in the quick access menu:","settings-pinned-actions-help":"This list shows only actions available for the current view. Pinned actions appear only in desktop view.","error-generic":"Something went wrong: $4","error-server":"Server error, please try again later","error-offline":"Please check your internet connection","error-wasted":"Unexpected error","error-prepare-generic":"Failed to prepare configuration: $4","error-prepare-version":"Another instance is already running: $4","error-prepare-replaced":"Standalone instance replaced successfully: $4","error-prepare-mobile":"The script is disabled in the settings for the mobile skin (Minerva)","error-link-options":'Failed to parse the "data-instantdiffs-options" link attribute: $4',"error-revision-generic":'Failed to load revision data "oldid=$1": $4',"error-revision-curid":'Failed to load revision data "curid=$1": $4',"error-revision-badrevids":"Revision not found","error-revision-badpageids":"Page not found","error-revision-missing":"Page not found","error-revision-invalid":"Page not found: $4","error-diff-generic":'Failed to load revision compare data "oldid=$1", "diff=$2": $4',"error-diff-compare-pages":'Failed to load page compare data "page1=$1", "page2=$2": $4',"error-diff-missingcontent":"Revision is hidden","error-diff-nosuchrevid":"Revision not found","error-diff-missingtitle":"Page not found","error-api-generic":"Failed to request api: $4","error-dependencies-generic":"Failed to load dependencies: $4","error-dependencies-revid":'Failed to load page dependencies "oldid=$1": $4',"error-dependencies-curid":'Failed to load page dependencies "curid=$1": $4',"error-global-watchlist":"Failed to execute Global Watchlist API: $4","error-setting-request":"Failed to load user options: $4","error-setting-save":"Failed to save user options: $4"}});var Gn=se(()=>{window.instantDiffs||(window.instantDiffs={});instantDiffs.i18n||(instantDiffs.i18n={});instantDiffs.i18n.uk={"@metadata":{authors:["Serhio Magpie"]},"script-name":"Instant Diffs","script-name-short":"ID","diff-title":"\u0420\u0456\u0437\u043D\u0438\u0446\u044F \u0432\u0435\u0440\u0441\u0456\u0439","diff-title-hidden":"\u0420\u0456\u0437\u043D\u0438\u0446\u044F \u0432\u0435\u0440\u0441\u0456\u0439 \u043F\u0440\u0438\u0445\u043E\u0432\u0430\u043D\u0430","revision-title":"\u0412\u043C\u0456\u0441\u0442 \u0432\u0435\u0440\u0441\u0456\u0457","revision-title-hidden":"\u0412\u043C\u0456\u0441\u0442 \u0432\u0435\u0440\u0441\u0456\u0457 \u043F\u0440\u0438\u0445\u043E\u0432\u0430\u043D\u043E","compare-label":"$1","compare-title":"\u041F\u043E\u0440\u0456\u0432\u043D\u044F\u0442\u0438 \u0432\u0438\u0431\u0440\u0430\u043D\u0456 \u0432\u0435\u0440\u0441\u0456\u0457 ($1)","compare-pages-title":"\u0420\u0456\u0437\u043D\u0438\u0446\u044F \u043C\u0456\u0436 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430\u043C\u0438","compare-pages-title-hidden":"\u0420\u0456\u0437\u043D\u0438\u0446\u044F \u043C\u0456\u0436 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430\u043C\u0438 \u043F\u0440\u0438\u0445\u043E\u0432\u0430\u043D\u0430","page-title":"\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043E \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438","comment-title":"\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043E \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F","action-save":"\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438","action-cancel":"\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438","action-close":"\u0417\u0430\u043A\u0440\u0438\u0442\u0438","action-reload":"\u041F\u0435\u0440\u0435\u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438","action-watch":"\u0421\u043B\u0456\u0434\u043A\u0443\u0432\u0430\u0442\u0438","action-unwatch":"\u041F\u0440\u0438\u043F\u0438\u043D\u0438\u0442\u0438 \u0441\u043B\u0456\u0434\u043A\u0443\u0432\u0430\u0442\u0438","goto-snapshot-prev":"\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0454 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u0446\u0456","goto-snapshot-next":"\u041D\u0430\u0441\u0442\u0443\u043F\u043D\u0435 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u0446\u0456","goto-view-diff":"\u0420\u0456\u0437\u043D\u0438\u0446\u044F \u0432\u0435\u0440\u0441\u0456\u0439","goto-view-revision":"\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u0432\u0435\u0440\u0441\u0456\u044E","goto-view-unpatrolled":"\u041D\u0435\u043F\u0435\u0440\u0435\u0432\u0456\u0440\u0435\u043D\u0456 \u0437\u043C\u0456\u043D\u0438","goto-prev":"\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044F","goto-next":"\u041D\u0430\u0441\u0442\u0443\u043F\u043D\u0430","goto-prev-diff":"\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0454 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043D\u043D\u044F","goto-next-diff":"\u041D\u0430\u0441\u0442\u0443\u043F\u043D\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043D\u043D\u044F","goto-back-diff":"\u041F\u043E\u0432\u0435\u0440\u043D\u0443\u0442\u0438\u0441\u044F","goto-prev-revision":"\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044F \u0432\u0435\u0440\u0441\u0456\u044F","goto-next-revision":"\u041D\u0430\u0441\u0442\u0443\u043F\u043D\u0430 \u0432\u0435\u0440\u0441\u0456\u044F","goto-back-revision":"\u041F\u043E\u0432\u0435\u0440\u043D\u0443\u0442\u0438\u0441\u044F","goto-diff":"\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043E \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043D\u043D\u044F","goto-revision":"\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043E \u0432\u0435\u0440\u0441\u0456\u0457","goto-page":"\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043E \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438","goto-comment":"\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043E \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F","goto-edit":"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438","goto-source":"\u041F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u043A\u043E\u0434","goto-history":"\u041F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u0456\u0441\u0442\u043E\u0440\u0456\u044E","goto-info":"\u041F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044E","goto-talkpage":"\u041E\u0431\u0433\u043E\u0432\u043E\u0440\u0435\u043D\u043D\u044F","goto-settings":"\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F","goto-actions":"\u0414\u0456\u0457","hint-close":"Esc","hint-alt-click":"Alt+Click: \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F","hint-snapshot-prev":"Ctrl+\u0421\u0442\u0440\u0456\u043B\u043A\u0430 \u0432\u043B\u0456\u0432\u043E","hint-snapshot-next":"Ctrl+\u0421\u0442\u0440\u0456\u043B\u043A\u0430 \u0432\u043F\u0440\u0430\u0432\u043E","hint-prev":"\u0421\u0442\u0440\u0456\u043B\u043A\u0430 \u0432\u043B\u0456\u0432\u043E","hint-next":"\u0421\u0442\u0440\u0456\u043B\u043A\u0430 \u0432\u043F\u0440\u0430\u0432\u043E","hint-switch":"Ctrl+\u0421\u0442\u0440\u0456\u043B\u043A\u0430 \u0432\u0433\u043E\u0440\u0443","hint-unpatrolled":"Ctrl+P","hint-back":"Ctrl+Z","hint-actions":"Ctrl+\u0421\u0442\u0440\u0456\u043B\u043A\u0430 \u0432\u043D\u0438\u0437","copy-link":"\u0421\u043A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F","copy-link-copied":"\u041F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0441\u043A\u043E\u043F\u0456\u0439\u043E\u0432\u0430\u043D\u043E \u0434\u043E \u0431\u0443\u0444\u0435\u0440\u0443 \u043E\u0431\u043C\u0456\u043D\u0443","copy-link-error":"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0441\u043A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F","copy-wikilink":"\u0421\u043A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u0432\u0456\u043A\u0456-\u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F","copy-wikilink-page":"\u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430","copy-wikilink-diff":"\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043D\u043D\u044F","copy-wikilink-revision":"\u0432\u0435\u0440\u0441\u0456\u044F","copy-wikilink-example-title":"\u0413\u043E\u043B\u043E\u0432\u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430","dialog-title-empty":"[\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0438]","dialog-title-not-found":"[\u041D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E]","dialog-notice-wikilambda":"\u0414\u043E\u0434\u0430\u0442\u043E\u043A WikiLambda \u0437\u0430\u0440\u0430\u0437 \u043F\u043E\u043A\u0430\u0437\u0443\u0454 \u043B\u0438\u0448\u0435 \u043E\u0441\u0442\u0430\u043D\u043D\u044E \u0432\u0435\u0440\u0441\u0456\u044E. \u0414\u0438\u0432. [[phab:T397902|\u0437\u0430\u0432\u0434\u0430\u043D\u043D\u044F]] \u043D\u0430 Phabricator.","dialog-notice-foreign-diff":"\u0412\u0438 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0430\u0454\u0442\u0435 \u0437\u043E\u0432\u043D\u0456\u0448\u043D\u044E \u0440\u0456\u0437\u043D\u0438\u0446\u044E \u0432\u0435\u0440\u0441\u0456\u0439 \u0437 [$1 $2]. \u0414\u0435\u044F\u043A\u0456 \u0444\u0443\u043D\u043A\u0446\u0456\u0457 \u043C\u043E\u0436\u0443\u0442\u044C \u0431\u0443\u0442\u0438 \u043E\u0431\u043C\u0435\u0436\u0435\u043D\u0456.","dialog-notice-foreign-revision":"\u0412\u0438 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0430\u0454\u0442\u0435 \u0437\u043E\u0432\u043D\u0456\u0448\u043D\u044E \u0432\u0435\u0440\u0441\u0456\u044E \u0437 [$1 $2]. \u0414\u0435\u044F\u043A\u0456 \u0444\u0443\u043D\u043A\u0446\u0456\u0457 \u043C\u043E\u0436\u0443\u0442\u044C \u0431\u0443\u0442\u0438 \u043E\u0431\u043C\u0435\u0436\u0435\u043D\u0456.","dialog-notice-foreign-wikilambda":"\u0414\u043E\u0434\u0430\u0442\u043E\u043A WikiLambda \u0437\u0430\u0440\u0430\u0437 \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F \u043F\u0440\u0438 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0456 \u0437\u043E\u0432\u043D\u0456\u0448\u043D\u044C\u043E\u0457 \u0432\u0435\u0440\u0441\u0456\u0457.","settings-title":"\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F Instant Diffs","settings-saved":`\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0443\u0441\u043F\u0456\u0448\u043D\u043E \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u043E. \u041F\u0435\u0440\u0435\u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0442\u0435 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443, \u0449\u043E\u0431 \u0437\u0430\u0441\u0442\u043E\u0441\u0443\u0432\u0430\u0442\u0438 \u0457\u0445.`,"settings-saved-icon":"\u0406\u043A\u043E\u043D\u043A\u0430 \u0433\u0430\u043B\u043E\u0447\u043A\u0438","settings-empty":`\u041E\u0439, \u0441\u0445\u043E\u0436\u0435, \u0430\u0434\u043C\u0456\u043D\u0456\u0441\u0442\u0440\u0430\u0442\u043E\u0440 \u0432\u0438\u043C\u043A\u043D\u0443\u0432 \u0443\u0441\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F. \u0421\u0430\u043C\u0435 \u0447\u0430\u0441 \u0432\u0456\u0434\u043F\u043E\u0447\u0438\u0442\u0438 \u0442\u0430 \u0432\u0438\u043F\u0438\u0442\u0438 \u043A\u0430\u0432\u0438!`,"settings-empty-icon":"\u0406\u043A\u043E\u043D\u0430 \u0447\u0430\u0448\u043A\u0438 \u043A\u0430\u0432\u0438","settings-fieldset-links":"\u041F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F","settings-show-link":"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043A\u043D\u043E\u043F\u043A\u0443 \u0434\u0456\u0457","settings-show-link-help":"\u041F\u043E\u043A\u0430\u0437\u0443\u0454 \u043A\u043D\u043E\u043F\u043A\u0443 \u0434\u0456\u0457 (\u2756) \u043F\u0456\u0441\u043B\u044F \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0434\u043B\u044F \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0442\u044F \u0432\u0456\u043A\u043D\u0430 Instant Diffs. \u0406\u043D\u0430\u043A\u0448\u0435 \u0434\u0456\u044F \u0434\u043E\u0434\u0430\u0454\u0442\u044C\u0441\u044F \u0431\u0435\u0437\u043F\u043E\u0441\u0435\u0440\u0435\u0434\u043D\u044C\u043E \u0434\u043E \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F, \u0430\u043B\u0435 \u0432\u0438 \u0437\u043C\u043E\u0436\u0435\u0442\u0435 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0432 \u043F\u043E\u0442\u043E\u0447\u043D\u0456\u0439 \u0432\u043A\u043B\u0430\u0434\u0446\u0456 \u0437\u0430 \u0434\u043E\u043F\u043E\u043C\u043E\u0433\u043E\u044E Alt+Click.","settings-show-page-link":"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043A\u043D\u043E\u043F\u043A\u0443 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443","settings-show-page-link-help":"\u041F\u043E\u043A\u0430\u0437\u0443\u0454 \u043A\u043D\u043E\u043F\u043A\u0443 (\u2794) \u043F\u0456\u0441\u043B\u044F \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0443 \u043D\u0430 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0442\u0430 \u0440\u043E\u0437\u0434\u0456\u043B, \u0434\u0435 \u0431\u0443\u043B\u043E \u0437\u0440\u043E\u0431\u043B\u0435\u043D\u043E \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043D\u043D\u044F. \u042F\u043A\u0449\u043E \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u0441\u043A\u0440\u0438\u043F\u0442 [[mw:Special:MyLanguage/Convenient Discussions|Convenient Discussions]], \u043A\u043D\u043E\u043F\u043A\u0430 \u0442\u0430\u043A\u043E\u0436 \u0441\u043F\u0440\u043E\u0431\u0443\u0454 \u043F\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043E \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u043D\u043E\u0433\u043E \u043A\u043E\u043C\u0435\u043D\u0442\u0430\u0440\u044F.","settings-highlight-line":"\u041F\u0456\u0434\u0441\u0432\u0456\u0447\u0443\u0432\u0430\u0442\u0438 \u0440\u044F\u0434\u043A\u0438 \u0443 \u0441\u043F\u0438\u0441\u043A\u0430\u0445 \u0441\u043F\u043E\u0441\u0442\u0435\u0440\u0435\u0436\u0435\u043D\u043D\u044F \u0442\u0430 \u043F\u043E\u0434\u0456\u0431\u043D\u0438\u0445 \u0441\u043F\u0438\u0441\u043A\u0430\u0445 \u043F\u0440\u0438 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0442\u0456 \u0432\u0456\u043A\u043D\u0430 Instant Diffs \u0447\u0435\u0440\u0435\u0437 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u043D\u0435 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F.","settings-mark-watched-line":"\u041F\u043E\u0437\u043D\u0430\u0447\u0430\u0442\u0438 \u0437\u043C\u0456\u043D\u0438 \u044F\u043A \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0456 \u0432 \u0441\u043F\u0438\u0441\u043A\u0430\u0445 \u0441\u043F\u043E\u0441\u0442\u0435\u0440\u0435\u0436\u0435\u043D\u043D\u044F \u043F\u0440\u0438 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0442\u0456 \u0432\u0456\u043A\u043D\u0430 Instant Diffs.","settings-fieldset-dialog":"\u0412\u0456\u043A\u043D\u043E","settings-view-width":"\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u0440\u043E\u0437\u043C\u0456\u0440\u0438 \u0432\u0456\u043A\u043D\u0430:","settings-view-width-help":"\u0420\u043E\u0437\u043C\u0456\u0440\u0438 \u0437\u0430\u0441\u0442\u043E\u0441\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u043B\u0438\u0448\u0435 \u0434\u043B\u044F \u0441\u0442\u0430\u0446\u0456\u043E\u043D\u0430\u0440\u043D\u043E\u0433\u043E \u0432\u0438\u0433\u043B\u044F\u0434\u0443. \u0414\u043B\u044F \u043C\u043E\u0431\u0456\u043B\u044C\u043D\u043E\u0433\u043E \u0432\u0438\u0433\u043B\u044F\u0434\u0443 \u0437\u0430\u0432\u0436\u0434\u0438 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u043F\u043E\u0432\u043D\u043E\u0435\u043A\u0440\u0430\u043D\u043D\u0456 \u0440\u043E\u0437\u043C\u0456\u0440\u0438.","settings-view-width-option-title":"$1 \u043F\u0456\u043A\u0441\u0435\u043B\u0456\u0432 \u0437\u0430\u0432\u0448\u0438\u0440\u0448\u043A\u0438","settings-view-width-compact":"\u041A\u043E\u043C\u043F\u0430\u043A\u0442\u043D\u0438\u0439","settings-view-width-standard":"\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438\u0439","settings-view-width-wide":"\u0428\u0438\u0440\u043E\u043A\u0438\u0439","settings-view-width-full":"\u041F\u043E\u0432\u043D\u043E\u0435\u043A\u0440\u0430\u043D\u043D\u0438\u0439","settings-view-width-full-title":"\u0412\u0435\u0441\u044C \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439 \u043F\u0440\u043E\u0441\u0442\u0456\u0440 \u0435\u043A\u0440\u0430\u043D\u0443","settings-close-outside":"\u0417\u0430\u043A\u0440\u0438\u0432\u0430\u0442\u0438 \u0432\u0456\u043A\u043D\u043E Instant Diffs \u043D\u0430\u0442\u0438\u0441\u043A\u0430\u044E\u0447\u0438 \u043F\u043E\u0437\u0430 \u0439\u043E\u0433\u043E \u043C\u0435\u0436\u0430\u043C\u0438.","settings-enable-hotkeys":"\u0423\u0432\u0456\u043C\u043A\u043D\u0443\u0442\u0438 \u0433\u0430\u0440\u044F\u0447\u0456 \u043A\u043B\u0430\u0432\u0456\u0448\u0456 \u0443 \u0432\u0456\u043A\u043D\u0456 Instant Diffs.","settings-show-diff-tools":"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0434\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u0456 \u0456\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0438 \u0434\u043B\u044F \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443 \u0437\u043C\u0456\u043D, \u0437\u043E\u043A\u0440\u0435\u043C\u0430 \u043F\u0435\u0440\u0435\u043C\u0438\u043A\u0430\u0447 \u0444\u043E\u0440\u043C\u0430\u0442\u0443 \xAB\u041B\u0456\u043D\u0456\u0439\u043D\u043E\xBB.","settings-show-revision-info":"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044E \u043F\u0440\u043E \u0437\u043C\u0456\u043D\u0438 \u043F\u0456\u0434 \u0447\u0430\u0441 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443 \u0432\u0435\u0440\u0441\u0456\u0457.","settings-unhide-diffs":"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0432\u043C\u0456\u0441\u0442 \u043F\u0440\u0438\u0445\u043E\u0432\u0430\u043D\u0438\u0445 \u0432\u0435\u0440\u0441\u0456\u0439 \u0431\u0435\u0437 \u0434\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u0438\u0445 \u0434\u0456\u0439.","settings-unhide-diffs-help":"\u0429\u043E\u0431 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u0432\u043C\u0456\u0441\u0442 \u0432\u0435\u0440\u0441\u0456\u0457 \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u0435 [[mw:Special:MyLanguage/Help:RevisionDelete|\u043F\u0440\u0430\u0432\u043E \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430]] \xAB$1\xBB.","settings-open-in-new-tab":"\u0412\u0456\u0434\u043A\u0440\u0438\u0432\u0430\u0442\u0438 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0443 \u0432\u0456\u043A\u043D\u0456 Instant Diffs \u0432 \u043D\u043E\u0432\u0456\u0439 \u0432\u043A\u043B\u0430\u0434\u0446\u0456.","settings-fieldset-menu":"\u041C\u0435\u043D\u044E","settings-show-menu-icons":"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0456\u043A\u043E\u043D\u043A\u0438 \u0443 \u0432\u0438\u043F\u0430\u0434\u0430\u044E\u0447\u043E\u043C\u0443 \u043C\u0435\u043D\u044E \u0432\u0456\u043A\u043D\u0430 Instant Diffs.","settings-show-watchlist-popup":"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0440\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u0456 \u043C\u043E\u0436\u043B\u0438\u0432\u043E\u0441\u0442\u0456 \u043F\u0440\u0438 \u0434\u043E\u0434\u0430\u0432\u0430\u043D\u043D\u0456 \u0430\u0431\u043E \u0432\u0438\u043B\u0443\u0447\u0435\u043D\u043D\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \u0437\u0456 \u0441\u043F\u0438\u0441\u043A\u0443 \u0441\u043F\u043E\u0441\u0442\u0435\u0440\u0435\u0436\u0435\u043D\u043D\u044F.","settings-show-watchlist-popup-help":"\u0417\u0430 \u043C\u043E\u0436\u043B\u0438\u0432\u043E\u0441\u0442\u0456 \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u0438\u043C\u0435\u0442\u044C\u0441\u044F \u0432\u0456\u043A\u043D\u043E \u0437 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F\u043C\u0438 \u0442\u0440\u0438\u0432\u0430\u043B\u043E\u0441\u0442\u0456 \u0441\u043F\u043E\u0441\u0442\u0435\u0440\u0435\u0436\u0435\u043D\u043D\u044F \u0442\u0430 \u043F\u043E\u0437\u043D\u0430\u0447\u043A\u0430\u043C\u0438.","settings-links-hash":"\u0414\u043E\u0434\u0430\u0432\u0430\u0442\u0438 \u043D\u0430\u0437\u0432\u0443 \u0440\u043E\u0437\u0434\u0456\u043B\u0443 (\u044F\u043A\u0456\u0440) \u0434\u043E \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u044C","settings-links-hash-help":"\u041D\u0430\u0437\u0432\u0430 \u0440\u043E\u0437\u0434\u0456\u043B\u0443 \u0442\u0430\u043A\u043E\u0436 \u0434\u043E\u0434\u0430\u0432\u0430\u0442\u0438\u043C\u0435\u0442\u044C\u0441\u044F \u044F\u043A \u044F\u043A\u0456\u0440 \u0434\u043E URL-\u0430\u0434\u0440\u0435\u0441\u0438 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u043F\u0440\u0438 \u043A\u043E\u043F\u0456\u044E\u0432\u0430\u043D\u043D\u0456 \u0443 \u043F\u043E\u0432\u043D\u043E\u043C\u0443 \u0444\u043E\u0440\u043C\u0430\u0442\u0456.","settings-links-format":"\u0424\u043E\u0440\u043C\u0430\u0442 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u044C \u0434\u043B\u044F \u043A\u043E\u043F\u0456\u044E\u0432\u0430\u043D\u043D\u044F:","settings-links-format-full":"\u041F\u043E\u0432\u043D\u0435 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0437 \u043D\u0430\u0437\u0432\u043E\u044E \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438","settings-links-format-minify":"\u0421\u043A\u043E\u0440\u043E\u0447\u0435\u043D\u0435 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F","settings-wikilinks-format":"\u0424\u043E\u0440\u043C\u0430\u0442 \u0432\u0456\u043A\u0456-\u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0434\u043B\u044F \u043A\u043E\u043F\u0456\u044E\u0432\u0430\u043D\u043D\u044F:","settings-wikilinks-format-link":"\u041F\u0440\u043E\u0441\u0442\u0435 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u0432 \u0434\u0443\u0436\u043A\u0430\u0445","settings-wikilinks-format-special":"\u0412\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0454 \u0432\u0456\u043A\u0456-\u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F","settings-fieldset-general":"\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0456","settings-enable-mobile":"\u0423\u0432\u0456\u043C\u043A\u043D\u0443\u0442\u0438 Instant Diffs \u0434\u043B\u044F \u043C\u043E\u0431\u0456\u043B\u044C\u043D\u043E\u0457 \u0442\u0435\u043C\u0438 (Minerva).","settings-enable-mobile-help":"\u0429\u043E\u0431 \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u0443\u0432\u0456\u043C\u043A\u043D\u0443\u0442\u0438 Instant Diffs, \u0432\u0430\u043C \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u043E \u0431\u0443\u0434\u0435 \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u0456\u043D\u0448\u0443 \u0442\u0435\u043C\u0443 \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u043D\u044F.","settings-notify-errors":"\u041F\u043E\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0441\u043F\u043B\u0438\u0432\u0430\u044E\u0447\u0456 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u043F\u0440\u0438 \u043A\u0440\u0438\u0442\u0438\u0447\u043D\u0438\u0445 \u043F\u043E\u043C\u0438\u043B\u043A\u0430\u0445.","settings-fieldset-pinned-actions":"\u0417\u0430\u043A\u0440\u0456\u043F\u043B\u0435\u043D\u0456 \u0434\u0456\u0457","settings-pinned-actions":"\u0417\u0430\u043A\u0440\u0456\u043F\u0438\u0442\u0438 \u0432\u0438\u0431\u0440\u0430\u043D\u0456 \u0434\u0456\u0457 \u0432 \u043C\u0435\u043D\u044E \u0448\u0432\u0438\u0434\u043A\u043E\u0433\u043E \u0434\u043E\u0441\u0442\u0443\u043F\u0443:","settings-pinned-actions-help":"\u0423 \u0446\u044C\u043E\u043C\u0443 \u0441\u043F\u0438\u0441\u043A\u0443 \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u044C\u0441\u044F \u043B\u0438\u0448\u0435 \u0434\u0456\u0457, \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0456 \u0434\u043B\u044F \u043F\u043E\u0442\u043E\u0447\u043D\u043E\u0433\u043E \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443. \u0417\u0430\u043A\u0440\u0456\u043F\u043B\u0435\u043D\u0456 \u0434\u0456\u0457 \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u044C\u0441\u044F \u043B\u0438\u0448\u0435 \u0443 \u0441\u0442\u0430\u0446\u0456\u043E\u043D\u0430\u0440\u043D\u043E\u043C\u0443 \u0432\u0438\u0433\u043B\u044F\u0434\u0456.","error-generic":"\u0429\u043E\u0441\u044C \u043F\u0456\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A: $4","error-server":"\u041F\u043E\u043C\u0438\u043B\u043A\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0441\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043F\u0456\u0437\u043D\u0456\u0448\u0435","error-offline":"\u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F \u0434\u043E \u0456\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0443","error-wasted":"\u041D\u0435\u0441\u043F\u043E\u0434\u0456\u0432\u0430\u043D\u0430 \u043F\u043E\u043C\u0438\u043B\u043A\u0430","error-prepare-generic":"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u043F\u0456\u0434\u0433\u043E\u0442\u0443\u0432\u0430\u0442\u0438 \u043A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044E: $4","error-prepare-version":"\u0421\u043A\u0440\u0438\u043F\u0442 \u0432\u0436\u0435 \u0437\u0430\u043F\u0443\u0449\u0435\u043D\u0438\u0439: $4","error-prepare-replaced":"\u0410\u0432\u0442\u043E\u043D\u043E\u043C\u043D\u0438\u0439 \u0435\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 \u0441\u043A\u0440\u0438\u043F\u0442\u0443 \u0443\u0441\u043F\u0456\u0448\u043D\u043E \u0437\u0430\u043C\u0456\u0449\u0435\u043D\u0438\u0439: $4","error-prepare-mobile":"\u0421\u043A\u0440\u0438\u043F\u0442 \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u043E \u0432 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F\u0445 \u0434\u043B\u044F \u043C\u043E\u0431\u0456\u043B\u044C\u043D\u043E\u0457 \u0442\u0435\u043C\u0438 (Minerva)","error-link-options":'\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0440\u043E\u0437\u043F\u0430\u0440\u0441\u0438\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F "data-instantdiffs-options": $4',"error-revision-generic":"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0434\u0430\u043D\u0456 \u0432\u0435\u0440\u0441\u0456\u0457 \xABoldid=$1\xBB: $4","error-revision-curid":"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0434\u0430\u043D\u0456 \u0432\u0435\u0440\u0441\u0456\u0457 \xABcurid=$1\xBB: $4","error-revision-badrevids":"\u0412\u0435\u0440\u0441\u0456\u044E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E","error-revision-badpageids":"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E","error-revision-missing":"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E","error-revision-invalid":"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E: $4","error-diff-generic":"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0434\u0430\u043D\u0456 \u0440\u0456\u0437\u043D\u0438\u0446\u0456 \u043C\u0456\u0436 \u0432\u0435\u0440\u0441\u0456\u044F\u043C\u0438 \xABoldid=$1\xBB, \xABdiff=$2\xBB: $4","error-diff-compare-pages":'\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0434\u0430\u043D\u0456 \u0440\u0456\u0437\u043D\u0438\u0446\u0456 \u043C\u0456\u0436 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430\u043C\u0438 "page1=$1", "page2=$2": $4',"error-diff-missingcontent":"\u0412\u0435\u0440\u0441\u0456\u044E \u043F\u0440\u0438\u0445\u043E\u0432\u0430\u043D\u043E","error-diff-nosuchrevid":"\u0412\u0435\u0440\u0441\u0456\u044E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E","error-diff-missingtitle":"\u0421\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E","error-api-generic":"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0432\u0438\u043A\u043E\u043D\u0430\u0442\u0438 \u0437\u0430\u043F\u0438\u0442 API: $4","error-dependencies-generic":"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0437\u0430\u043B\u0435\u0436\u043D\u043E\u0441\u0442\u0456: $4","error-dependencies-revid":"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0437\u0430\u043B\u0435\u0436\u043D\u043E\u0441\u0442\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \xABcurid=$1\xBB: $4","error-dependencies-curid":"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0437\u0430\u043B\u0435\u0436\u043D\u043E\u0441\u0442\u0456 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 \xABoldid=$1\xBB: $4","error-global-watchlist":"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0432\u0438\u043A\u043E\u043D\u0430\u0442\u0438 Global Watchlist API: $4","error-setting-request":"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430: $4","error-setting-save":"\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430: $4"}});var Kn=se(zn=>{zn.loaders={en:()=>Hn(),uk:()=>Gn()}});function nr(){let i=document.getElementById("ext-globalwatchlist-watchlistsfeed");o.local.mutationObserver.observe(i,{childList:!0})}var Qn=v(()=>{T();mw.hook(`${o.config.prefix}.applyPageAdjustments`).add(i=>{i.local.mwCanonicalSpecialPageName==="GlobalWatchlist"&&nr()})});function or(){$(".mw-contributions-list .mw-changeslist-links:not(.mw-pager-tools) > span:first-child").each((e,t)=>{let s=$(t);s.find("a").length===0&&s.wrapInner(Be())})}function rr(){$(".mw-contributions-list li").each((e,t)=>{let s=$(t),n=s.find("a.mw-changeslist-date, a.mw-changeslist-history");if(n.length!==0)try{let r=new URL(n.prop("href"));de(s,r.origin)}catch(r){}})}var Yn=v(()=>{T();P();mw.hook(`${o.config.prefix}.applyPageAdjustments`).add(i=>{i.config.contributionLists.includes(i.local.mwCanonicalSpecialPageName)&&or(),i.local.mwCanonicalSpecialPageName==="GlobalContributions"&&rr()})});function ar(){let i=$("#pagehistory > li, #pagehistory .mw-contributions-list > li").addClass("instantDiffs-line--history");if(i.length<=1)return;i.each((t,s)=>{let n=$(s),r=n.find(".mw-history-histlinks > span:first-child"),c=n.find(".mw-history-histlinks > span:last-child");r.find("a").length===0&&r.wrapInner(Be()),c.find("a").length===0&&c.wrapInner(Be())}),$(".mw-history-compareselectedversions").each((t,s)=>{let r=$(s).find(".mw-history-compareselectedversions-button");new si({label:g("compare-label",o.config.labels.diff),title:g("compare-title",g("script-name")),classes:["mw-ui-button","cdx-button","instantDiffs-button--compare"],insertMethod:"insertAfter",container:r}),$("<span>").text(" ").addClass("instantDiffs-spacer").insertAfter(r)})}var Jn=v(()=>{T();P();Ts();mw.hook(`${o.config.prefix}.applyPageAdjustments`).add(i=>{if(i.local.mwAction==="history")return ar()})});function lr(i,e){try{let t=new URL(i.href);l(t.searchParams.get("diff"))&&(t.searchParams.set("diff","cur"),i.href=t.href),i.dataset.instantdiffsLink="event",i.dataset.instantdiffsOptions=JSON.stringify({setClasses:"always"}),mw.hook(`${o.config.prefix}.process`).fire($(e))}catch(t){X("Skin-Citizen","Unable to append the link action.",t)}}var Zn=v(()=>{T();P();mw.hook("wikipage.content").add(()=>{if(!De()||mw.config.get("skin")!=="citizen")return;let i=document.querySelector("#citizen-lastmod-relative"),e=document.querySelector("#citizen-sidebar-lastmod");i&&e&&lr(i,e)})});var Xn=v(()=>{T();P();mw.hook("mw.translate.editor.showTranslationHelpers").add((i,e)=>{!e||!De()||mw.hook(`${o.config.prefix}.process`).fire(e)})});function eo(i){!i||!i.isValid||!i.isProcessed||i.isForeign||!i.options.showPageLink||i.actions.cd||(i.extensions.cd={},i.extensions.cd.href=cr(i),!l(i.extensions.cd.href)&&(i.actions.page&&i.actions.page.remove(),i.actions.cd=i.renderAction({label:Ee("page"),title:g("comment-title"),href:i.extensions.cd.href,modifiers:["page","comment"]})))}function cr(i){if(!i.compare&&!i.revision)return;let e=window.convenientDiscussions;if(!e)return;let t=i.getArticle().get("titleText"),s=e.api.pageRegistry.get(t);if(!s||!s.isProbablyTalkPage())return;if(i.revision?i.revision.revid&&(i.extensions.cd.date=new Date(i.revision.timestamp),i.extensions.cd.user=i.revision.user):i.compare&&(i.compare.torevid?(i.extensions.cd.date=new Date(i.compare.totimestamp),i.extensions.cd.user=i.compare.touser):i.compare.fromrevid&&(i.extensions.cd.date=new Date(i.compare.fromtimestamp),i.extensions.cd.user=i.compare.fromuser)),i.extensions.cd.date&&i.extensions.cd.user)try{i.extensions.cd.anchor=e.api.generateCommentId(i.extensions.cd.date,i.extensions.cd.user)}catch(r){X("Gadget-ConvenientDiscussions","Unable to generate comment anchor.",r)}if(!i.extensions.cd.anchor)return;let n=`#${i.extensions.cd.anchor}`;return t!==o.local.mwTitleText&&(n=mw.util.getUrl(`${t}${n}`)),n}var to=v(()=>{T();P();Ne();mw.hook("convenientDiscussions.preprocessed").add(i=>{if(i){if(o.isRunCompleted)for(let e of I.getLinks())eo(e);mw.hook(`${o.config.prefix}.link.renderSuccess`).add(e=>eo(e))}})});var io=v(()=>{T();mw.hook(`${o.config.prefix}.page.complete`).add(i=>{var t;if(!i)return;((t=i.getContainer())==null?void 0:t.find('[id^="tw-revert"] a')).each((s,n)=>{n.addEventListener("click",()=>i.close())})})});var so=v(()=>{T();mw.hook(`${o.config.prefix}.page.beforeDetach`).add(i=>{if(!i)return;let e=i.getDiffTable();typeof wikEd!="undefined"&&wikEd.diffTableLinkified&&(e==null?void 0:e.length)>0&&wikEd.diffTable===e.get(0)&&(wikEd.diffTableLinkified=!1)})});var fr={};var no=v(()=>{Qn();Yn();Jn();Zn();Xn();to();io();so()});T();var ne={version:"5.14.1",link:"Instant_Diffs",discussion:"Talk:Instant_Diffs",outname:"instantDiffs",outdir:"dist",origin:"https://www.mediawiki.org",server:"https://test.wikipedia.org",prefix:"instantDiffs",messagePrefix:"instant-diffs",settingsPrefix:"userjs-instantDiffs",dependencies:{styles:"/w/index.php?title=User:Serhio_Magpie/instantDiffs.css&action=raw&ctype=text/css",messages:"/w/index.php?title=User:Serhio_Magpie/instantDiffs-i18n/$lang.js&action=raw&ctype=text/javascript",main:["oojs","mediawiki.api","mediawiki.util","mediawiki.user","mediawiki.storage","mediawiki.notification","mediawiki.ForeignApi","mediawiki.Title"],settings:["oojs","oojs-ui-core","oojs-ui-widgets","oojs-ui-windows","oojs-ui.styles.icons-interactions"],window:["oojs","oojs-ui-core","oojs-ui-widgets","oojs-ui-windows","oojs-ui.styles.icons-accessibility","oojs-ui.styles.icons-movement","oojs-ui.styles.icons-content","oojs-ui.styles.icons-alerts","oojs-ui.styles.icons-interactions","oojs-ui.styles.icons-moderation","oojs-ui.styles.icons-editing-core","oojs-ui.styles.icons-editing-advanced","oojs-ui.styles.icons-user","oojs-ui.styles.icons-layout"],content:["jquery.confirmable","mediawiki.DateFormatter","mediawiki.codex.messagebox.styles","mediawiki.interface.helpers.styles","mediawiki.diff","mediawiki.diff.styles","mediawiki.misc-authed-curate","mediawiki.page.watch.ajax","ext.flaggedRevs.basic","ext.visualEditor.diffPage.init"],page:{"*":["ext.thanks.corethank","ext.checkUser.styles","ext.checkUser.userInfoCard"]},revision:{6:["filepage","wikibase.mediainfo.filepage.styles","wikibase.mediainfo.statements","wikibase.mediainfo.statements.styles"],14:["mediawiki.page.gallery.styles"],102:["ext.tmh.player","ext.tmh.timedtextpage.styles"],146:["wikibase.lexeme.styles"],460:["mediawiki.page.gallery.styles"],486:["ext.jsonConfig"]},skins:{minerva:{"*":["codex-styles","skins.minerva.categories.styles"]}}},foreignDependencies:{revision:{styles:{6:["wikibase.mediainfo.filepage.styles","wikibase.mediainfo.statements","wikibase.mediainfo.statements.styles"],146:["wikibase.lexeme.styles"]},links:{6:["MediaWiki:Filepage.css"]},wikibase:{styles:{all:["jquery.wikibase.toolbar.styles","wikibase.view.ControllerViewFactory","wikibase.alltargets"],desktop:["wikibase.desktop"],mobile:["wikibase.mobile"]}}}},settings:{},defaults:{debug:!1,GM:!1,standalone:!1,storageExpiry:86400,logTimers:!0,expEnableWatchlistPopup:!1},include:{pageActions:["view","history"]},exclude:{pages:[],linkActions:["edit","history"]},labels:{page:{ltr:"\u2794",rtl:"\u{1F870}"},diff:"\u2756",revision:"\u272A",error:"\u{1D4D4}"},breakpoints:{mobileUp:"(min-width: 640px)",mobileDown:"(max-width: 639px)"},wikilinkPresets:{link:{page:"[$href $msg]",diff:"[$href $msg]",revision:"[$href $msg]"},special:{page:"[[$prefSpecial:Redirect/page/$1|$msg]]",diff:"[[$prefSpecial:Diff/$1|$msg]]",revision:"[[$prefSpecial:PermanentLink/$1|$msg]]"}},commonsAssetsPath:"https://upload.wikimedia.org/wikipedia/commons",changeLists:["Watchlist","Recentchanges","Recentchangeslinked"],contributionLists:["Contributions","GlobalContributions"],otherLists:["Newpages","PendingChanges","GlobalWatchlist"],specialPages:["Special:Diff","Special:Permalink","Special:PermanentLink","Special:MobileDiff","Special:Redirect","Special:ComparePages","Special:Undelete"],nonEditableContentModels:["wikibase-item","wikibase-property","wikibase-lexeme"],skinBodyClasses:{"vector-2022":["mw-body","vector-body"],vector:["vector-body"],monobook:["monobook-body"],minerva:["content"],timeless:["mw-body"],fandomdesktop:["page-content"],fandommobile:["page-content"]},bodyContentSelector:{minerva:"#content",default:"#bodyContent"},contentSelector:"#mw-content-text",specialPagesLinks:["Special:Diff","Special:Permalink","Special:PermanentLink","Special:MobileDiff","Special:Redirect"],specialPagesLinksRegExp:"^($1)",specialPagesLinksSelector:'a[title^="$1"]',articlePathRegExp:"^($1)",sectionRegExp:/^\/\*\s*(.*?)\s*\*\/.*$/,linkSelector:["a[data-instantdiffs-link]",'a.external[href^="$1"]',"a.mw-changeslist-date","a.mw-changeslist-diff","a.mw-changeslist-diff-cur","a.mw-changeslist-groupdiff",".mw-changeslist-line a.extiw",".mw-fr-reviewlink a",".mw-enhanced-rc-time a",".mw-history-histlinks a",".mw-diff-bytes + a",".mw-contributions-list .comment a",".mw-fr-pending-changes-table a.cdx-docs-link","#mw-revision-nav a","table.diff #differences-prevlink","table.diff #differences-nextlink",".mw-diff-revision-history-links a",".mw-logevent-loglines a","[data-afl-log-id] a",'li[class^="mw-tag"] a',"a.ext-globalwatchlist-diff",".wikibase-statementview-references a","a.edit-summary-time","#mw-fr-revision-messages a","#mw-fr-revision-details a"],mwLine:{selector:["[data-instantdiffs-line]",".mw-changeslist-line",".mw-contributions-list li",".mw-fr-pending-changes-table tr",".mw-logevent-loglines li",".mw-special-AbuseLog [data-afl-log-id]",'.mw-special-EditTags li[class^="mw-tag"]',".ext-globalwatchlist-site li"],seen:["mw-changeslist-line-not-watched","mw-enhanced-not-watched","mw-changeslist-watchedseen"],unseen:["mw-changeslist-line-watched","mw-enhanced-watched","mw-changeslist-watchedunseen"]},mwLineTitle:{selector:[".mw-changeslist-title",".mw-contributions-title",".mw-newpages-pagename",".mw-fr-pending-changes-page-title"]},mwLink:{id:["differences-prevlink","differences-nextlink"],hasClass:["mw-diff-revision-history-link-prev","mw-diff-revision-history-link-next","mw-changeslist-date","mw-changeslist-diff","mw-changeslist-diff-cur","mw-changeslist-groupdiff","mw-newpages-time"],closestTo:["[data-instantdiffs-line]",".mw-changeslist-line",".mw-contributions-list",".mw-history-histlinks",".mw-pager-navigation-bar + ul",".mw-fr-hist-difflink","#mw-fr-reviewnotice","#mw-fr-revisiontag","#mw-fr-revisiontag-edit","#mw-fr-revision-tag-edit",".mw-specialpage-summary","#mw-revision-nav",".mw-fr-pending-changes-table",".mw-logevent-loglines",".mw-special-AbuseLog li[data-afl-log-id]",'.mw-special-EditTags li[class^="mw-tag"]',".wikibase-statementview-references",".ext-globalwatchlist-site",".tux-message-editor",".mw-pt-translate-header"]},mwLinkExclude:{hasClass:["mw-contributions-title"]},mwLinkDiffOnly:{id:["differences-prevlink","differences-nextlink"]},mwLinkPrepend:{id:["differences-nextlink"],hasClass:["mw-diff-revision-history-link-next"],endsWith:["\u2192","\u2190"]},mwLinkAltTitle:{closestTo:[".mw-fr-reviewlink",".mw-history-histlinks"]},mwLinkContent:{closestTo:[".mw-parser-output"]},mwLinkContentInside:{closestTo:[".comment"]}},Ns={messages:{},settings:{},defaults:{},require:null,language:null,linkSelector:null,mwIsAnon:!0,mwEndPoint:null,mwEndPointUrl:null,mwAction:null,mwArticlePath:null,mwCanonicalSpecialPageName:null,mwTitle:null,mwTitleText:null,mwServers:[],mwServerNames:[],specialPagesLocalPrefixed:{},specialPagesAliases:{},specialPagesAliasesFlat:[],specialPagesAliasesPrefixed:{},specialPagesAliasesPrefixedFlat:[],specialPagesLinksAliases:{},specialPagesLinksAliasesFlat:[],specialPagesLinksAliasesPrefixed:{},specialPagesLinksAliasesPrefixedFlat:[],specialPagesLinksRegExp:null,articlePathRegExp:null,mutationObserver:null,interactionObserver:null},Fs={};P();H();Qt();_();ge();Lt();Ne();qt();hs();gs();$s();Ts();es();le();M();var dr=Rs({"../dist/instantDiffs-i18n-bundle.js":()=>Kn()});function ur(i){var n,r,c;o.local.require=i,mw.util.addCSS(".instantDiffs-panel { display:none; }"),A.mixin(),d.mixin(),Li(A),Li(d),OO.mixinClass(we,OO.EventEmitter),OO.mixinClass(Te,OO.EventEmitter),o.local.mwIsAnon=(c=(r=(n=mw.user)==null?void 0:n.isAnon)==null?void 0:r.call(n))!=null?c:!0,o.local.mwEndPoint=`${location.origin}${mw.config.get("wgScript")}`,o.local.mwEndPointUrl=new URL(o.local.mwEndPoint),o.local.mwAction=mw.config.get("wgAction"),o.local.mwArticlePath=mw.config.get("wgArticlePath").replace("$1",""),o.local.mwCanonicalSpecialPageName=mw.config.get("wgCanonicalSpecialPageName"),o.local.mwTitle=new mw.Title(mw.config.get("wgRelevantPageName")),o.local.mwTitleText=o.local.mwTitle.getPrefixedText();let e=Ps();mw.config.set("wgMobileServer",e),mw.config.set("wgMobileServerName",te("hostname",e));let t=[mw.config.get("wgServer"),mw.config.get("wgMobileServer")].filter(u=>!l(u)).map(ut);o.local.mwServers=ee(t);let s=[mw.config.get("wgServerName"),mw.config.get("wgMobileServerName")].filter(u=>!l(u));return o.local.mwServerNames=ee(s),o.local.lastVersion=mw.storage.get(`${o.config.prefix}-version`),mw.storage.set(`${o.config.prefix}-version`,o.config.version),o.local.mutationObserver=new MutationObserver(Lr),o.local.interactionObserver=new IntersectionObserver(Dr,{threshold:0,rootMargin:d.get("debug")?"0px 0px 0px 0px":"33% 0px 33% 0px"}),window.addEventListener("pageshow",Pr),window.addEventListener("beforeunload",Sr),Promise.allSettled([x.getSpecialPages(),hr(),...pr()])}function hr(){return m(this,null,function*(){let{general:i}=(yield x.getSiteInfo())||{};if(!N(i)){l(i.mobileserver)||(mw.config.set("wgMobileServer",i.mobileserver),mw.config.set("wgMobileServerName",i.mobileservername));let e=[...o.local.mwServers,i.server,i.mobileserver].filter(s=>!l(s)).map(ut);o.local.mwServers=ee(e);let t=[...o.local.mwServerNames,i.servername,i.mobileservername].filter(s=>!l(s));o.local.mwServerNames=ee(t)}})}function pr(){return["en",mw.config.get("wgUserLanguage")].filter((e,t,s)=>s.indexOf(e)===t&&!o.i18n[e]).map(e=>{let t=o.config.dependencies.messages.replace("$lang",e);return mw.loader.getScript(Jt(t))})}function gr(){for(let[i,e]of Object.entries(x.specialPagesLocal))o.local.specialPagesLocalPrefixed[i]=new mw.Title(e).getPrefixedDb(),o.local.specialPagesAliases[i]=ti(x.specialPagesLocal,i),o.local.specialPagesAliasesPrefixed[i]=ti(o.local.specialPagesLocalPrefixed,i),o.config.specialPagesLinks.includes(i)&&(o.local.specialPagesLinksAliases[i]=o.local.specialPagesAliases[i],o.local.specialPagesLinksAliasesPrefixed[i]=o.local.specialPagesAliasesPrefixed[i]);o.local.specialPagesAliasesFlat=ee(Object.values(o.local.specialPagesAliases).flat()),o.local.specialPagesAliasesPrefixedFlat=ee(Object.values(o.local.specialPagesAliasesPrefixed).flat()),o.local.specialPagesLinksAliasesFlat=ee(Object.values(o.local.specialPagesLinksAliases).flat()),o.local.specialPagesLinksAliasesPrefixedFlat=ee(Object.values(o.local.specialPagesLinksAliasesPrefixed).flat())}function mr(){let i=o.config.articlePathRegExp.replaceAll("$1",o.local.mwArticlePath);o.local.articlePathRegExp=new RegExp(i);let e=o.local.specialPagesLinksAliasesPrefixedFlat.join("|"),t=o.config.specialPagesLinksRegExp.replaceAll("$1",e);o.local.specialPagesLinksRegExp=new RegExp(t,"i");let s=[];o.config.linkSelector.forEach(n=>{/\$1/.test(n)?o.local.mwServers.forEach(r=>{s.push(n.replaceAll("$1",r))}):s.push(n)}),o.local.specialPagesLinksAliasesFlat.forEach(n=>{s.push(o.config.specialPagesLinksSelector.replaceAll("$1",n))}),o.local.linkSelector=s.join(",")}function oo(){o.isPageAdjustmentsApplied||!De()||(o.isPageAdjustmentsApplied=!0,document.body.classList.add("instantDiffs-enabled"),mw.hook(`${o.config.prefix}.applyPageAdjustments`).fire(o))}function wr(){var t;if(o.isRunning){o.isReplaced=yr(),C(o.isReplaced?"error-prepare-replaced":"error-prepare-version",{tag:"app",message:`loaded: ${o.config.version}, concurrent: ${ne.version}`,silent:!0});return}o.isRunning=!0;let{settingOptions:i,defaultOptions:e}=ro();(t=o).i18n||(t.i18n={}),o.config=ne,o.local=Ns,o.local.settings=i,o.local.defaults=e,o.timers=Fs,o.utils=k,o.view=A,o.settings=d,o.modules={Api:x,Article:V,Link:I,Button:we,ViewButton:ii,HistoryCompareButton:si,Page:Te,LocalPage:Bt,GlobalPage:Ut,Watch:Mt,view:A,settings:d},o.timers.run=mw.now(),br(),Zt(),no(),vr()}function ro(i=!1){var s;ne.settings=f(f({},vs()),ne.settings),ne.defaults=f(f({},ks()),ne.defaults),(s=o).user||(s.user={}),i||(o.user.settings=o.settings||o.user.settings||{},o.user.defaults=o.defaults||o.user.defaults||{},delete o.settings,delete o.defaults);let e=f(f({},ne.settings),o.user.settings),t=f(f(f({},ne.defaults),o.user.defaults),ys());return{settingOptions:e,defaultOptions:t}}function br(){let{loaders:i}=dr(`../${o.config.outdir}/${o.config.outname}-i18n-bundle.js`);for(let e of Object.values(i))e()}function vr(){mw.loader.load(Jt(o.config.dependencies.styles),"text/css"),mw.loader.using(o.config.dependencies.main).then(ur).then(()=>$(kr)).fail(i=>{C("error-prepare-generic",{tag:"app",message:i==null?void 0:i.message})})}function kr(){return m(this,null,function*(){if(yield d.processDefaults(),Zt(),mw.config.get("skin")==="minerva"&&!d.get("enableMobile")){C("error-prepare-mobile",{tag:"app",silent:!0});return}o.isReady=!0,gr(),mr(),oo(),o.timers.ready=mw.now(),mw.hook(`${o.config.prefix}.ready`).fire(o),mw.hook("wikipage.content").add(ao),mw.hook(`${o.config.prefix}.process`).add(lo),mw.hook(`${o.config.prefix}.replace`).add(xr)})}function ao(i){!i||!De()||(o.isFirstRun=!o.isRunCompleted,o.isFirstRun&&(o.isRunCompleted=!0,i=Fe()),lo(i),d.get("logTimers")&&o.isFirstRun&&(xe("ready time",o.timers.run,o.timers.ready),xe("total time",o.timers.run,o.timers.processEnd)))}function lo(i){if(!i)return;o.timers.processStart=mw.now(),o.timers.findLinksStart=mw.now();let e=I.findLinks(i);o.timers.findLinksEnd=mw.now();let t=[],s=[];for(let n of e){if(I.hasLink(n))continue;let r=new I(n);t.push(r),r.isValid&&s.push(r)}o.timers.processEnd=mw.now(),d.get("logTimers")&&t.length>0&&(ue("info",`links found: ${t.length}`),ue("info",`links processed: ${s.length}`),xe("links selector time",o.timers.findLinksStart,o.timers.findLinksEnd),xe("links process time",o.timers.processStart,o.timers.processEnd)),mw.hook(`${o.config.prefix}.processed`).fire(s)}function yr(){let{settingOptions:i,defaultOptions:e}=ro(!0);return o.modules.settings.get("standalone")&&!e.standalone?(mw.hook(`${o.config.prefix}.replace`).fire(i,e),!0):!1}function xr(i,e){return m(this,null,function*(){!i||!e||(o.local.settings=i,o.local.defaults=e,o.isReady&&(yield d.processDefaults(),o.timers.run=mw.now(),o.timers.ready=mw.now(),oo(),ao(Fe())))})}function Dr(i){o.isUnloading||i.forEach(e=>{if(!e.isIntersecting)return;let t=I.getLink(e.target);t&&t.intersect()})}function Lr(i){o.isUnloading||i.forEach(e=>{e.addedNodes.length>0&&mw.hook(`${o.config.prefix}.process`).fire($(e.target))})}function Pr(i){i.persisted&&(o.isUnloading=!1)}function Sr(){o.isUnloading=!0}wr();})(); /* </nowiki> */ 1d830sazp9j8ur5ps6t3sp0mr7tx45s User:Serhio Magpie/instantDiffs-i18n/nl.js 2 169861 746368 746007 2026-06-13T06:21:21Z Serhio Magpie 37334 [98b3516] [v5.14.1]: Updated from repository. 746368 javascript text/javascript window.instantDiffs ||= {}; instantDiffs.i18n ||= {}; instantDiffs.i18n['nl'] = { "@metadata": { "authors": [ "ABPMAB", "McDutchie", "Serhio Magpie", "Siebrand" ] }, "script-name": "Instant Diffs", "script-name-short": "ID", "diff-title": "Verschil tussen versies", "diff-title-hidden": "Verschil tussen versies is verborgen", "revision-title": "Versie-inhoud", "revision-title-hidden": "Versie-inhoud is verborgen", "compare-label": "$1", "compare-title": "Geselecteerde versies vergelijken ($1)", "compare-pages-title": "Verschil tussen pagina’s", "compare-pages-title-hidden": "Verschil tussen pagina’s is verborgen", "page-title": "Ga naar pagina", "comment-title": "Ga naar bericht", "action-save": "Opslaan", "action-cancel": "Annuleren", "action-close": "Sluiten", "action-reload": "Vernieuwen", "action-watch": "Volgen", "action-unwatch": "Niet meer volgen", "goto-snapshot-prev": "Vorige koppeling op een pagina", "goto-snapshot-next": "Volgende koppeling op een pagina", "goto-view-diff": "Wijzigingen weergeven", "goto-view-revision": "Versie weergeven", "goto-view-unpatrolled": "Ongecontroleerde wijzigingen", "goto-prev": "Ouder", "goto-next": "Nieuwer", "goto-prev-diff": "Oudere bewerking", "goto-next-diff": "Nieuwere bewerking", "goto-back-diff": "Terug", "goto-prev-revision": "Oudere versie", "goto-next-revision": "Nieuwere versie", "goto-back-revision": "Terug", "goto-diff": "Ga naar bewerking", "goto-revision": "Ga naar versie", "goto-page": "Ga naar pagina", "goto-comment": "Ga naar bericht", "goto-edit": "Bewerken", "goto-source": "Brontekst bekijken", "goto-history": "Geschiedenis weergeven", "goto-info": "Gegevens bekijken", "goto-talkpage": "Overleg", "goto-settings": "Instellingen", "goto-actions": "Handelingen", "hint-close": "Esc", "hint-alt-click": "Alt+klikken: de koppeling openen", "hint-snapshot-prev": "Ctrl+pijl naar links", "hint-snapshot-next": "Ctrl+pijl naar rechts", "hint-prev": "Pijl naar links", "hint-next": "Pijl naar rechts", "hint-switch": "Ctrl+pijl omhoog", "hint-unpatrolled": "Ctrl+P", "hint-back": "Ctrl+Z", "hint-actions": "Ctrl+pijl omlaag", "copy-link": "Koppeling kopiëren", "copy-link-copied": "De koppeling is naar het klembord gekopieerd.", "copy-link-error": "De koppeling kon niet gekopieerd worden.", "copy-wikilink": "Wikikoppeling kopiëren", "copy-wikilink-page": "pagina", "copy-wikilink-diff": "wijz", "copy-wikilink-revision": "versie", "copy-wikilink-example-title": "Hoofdpagina", "dialog-title-empty": "[Geen titel]", "dialog-title-not-found": "[Niet gevonden]", "dialog-notice-wikilambda": "De WikiLambda-app laat momenteel alleen de laatste versie zien. Zie het [[phab:T397902|ticket]] op Phabricator.", "dialog-notice-foreign-diff": "U bekijkt externe wijzigingen van [$1 $2]. Sommige functies kunnen beperkt zijn.", "dialog-notice-foreign-revision": "U bekijkt een externe versie van [$1 $2]. Sommige functies kunnen beperkt zijn.", "dialog-notice-foreign-wikilambda": "De WikiLambda-app wordt nog niet ondersteund in de externe versies.", "settings-title": "Instant Diffs-instellingen", "settings-saved": "De instellingen zijn opgeslagen.\nLaad de pagina opnieuw om ze toe te passen.", "settings-saved-icon": "Vinkje-pictogram", "settings-empty": "Het lijkt erop dat de beheerder alle instellingen heeft uitgeschakeld! Tijd om te ontspannen en een kop koffie te pakken!", "settings-empty-icon": "Koffiekopje-pictogram", "settings-fieldset-links": "Koppelingen", "settings-show-link": "Handelingenkoppeling weergeven", "settings-show-link-help": "Geeft een handelingenknop (❖) weer na de koppeling om het dialoogvenster Instant Diffs te openen. Anders wordt de klikhandeling direct aan de koppeling toegevoegd. U kunt de koppeling nog steeds in het huidige tabblad openen door op Alt+Klikken te drukken.", "settings-show-page-link": "Paginakoppeling weergeven", "settings-show-page-link-help": "Een handelingenknop (➔) weergeven na de koppeling om naar de pagina en sectie te navigeren waar de bewerking is uitgevoerd. Als het script [[mw:Special:MyLanguage/Convenient Discussions|Handige Discussies]] is geïnstalleerd, probeert de knop ook naar de bijbehorende opmerking te navigeren.", "settings-highlight-line": "Regels in Volglijsten en vergelijkbare lijsten markeren wanneer het dialoogvenster Instant Diffs wordt geopend via de gerelateerde koppeling.", "settings-mark-watched-line": "Wijzigingen markeren als bezocht in Volglijsten wanneer het dialoogvenster Instant Diffs wordt geopend via de gerelateerde koppeling.", "settings-fieldset-dialog": "Dialoog", "settings-view-width": "Vensterafmetingen instellen:", "settings-view-width-help": "Afmetingen zijn alleen van toepassing op de desktopweergave. De mobiele weergave gebruikt altijd de afmetingen voor het volledige scherm.", "settings-view-width-option-title": "$1 pixels breed", "settings-view-width-compact": "Compact", "settings-view-width-standard": "Standaard", "settings-view-width-wide": "Breed", "settings-view-width-full": "Volledig", "settings-view-width-full-title": "Alle beschikbare schermruimte", "settings-close-outside": "Sluit het dialoogvenster Instant Diffs wanneer u buiten dit dialoogvenster klikt.", "settings-enable-hotkeys": "Sneltoetsen in het dialoogvenster Instant Diffs inschakelen.", "settings-show-diff-tools": "Extra diff-hulpmiddelen weergeven, zoals de schakelaar voor Inline-opmaak.", "settings-show-revision-info": "Wijzigingsinformatie weergeven wanneer u een versie bekijkt.", "settings-unhide-diffs": "Verborgen versie-inhoud en diff-info weergeven zonder extra stappen.", "settings-unhide-diffs-help": "Het [[mw:Special:MyLanguage/Help:RevisionDelete|gebruikersrecht]] \"$1\" is vereist om de versie-inhoud te bekijken.", "settings-open-in-new-tab": "Koppelingen in het dialoogvenster Instant Diffs openen in een nieuw tabblad.", "settings-fieldset-menu": "Menu", "settings-show-menu-icons": "Pictogrammen weergeven in het het dialoogvenster van Instant Diffs.", "settings-show-watchlist-popup": "Gevorderde opties weergeven bij het toevoegen of verwijderen van pagina's uit de volglijst.", "settings-show-watchlist-popup-help": "Indien beschikbaar, wordt een pop-upvenster weergegeven met instellingen voor de periode en labels van de volglijst.", "settings-links-hash": "Sectienaam (anker) toevoegen aan de koppelingen.", "settings-links-hash-help": "Bij gebruik van kopieerhandelingen met het geselecteerde niet-geminificeerde formaat wordt de sectienaam ook als anker aan de koppelings-URL toegevoegd.", "settings-links-format": "Koppelingopmaak voor kopiëren:", "settings-links-format-full": "Volledige URL met een paginatitel", "settings-links-format-minify": "Geminimaliseerde url", "settings-wikilinks-format": "Wikikoppelingopmaak voor kopiëren:", "settings-wikilinks-format-link": "Eenvoudige koppeling tussen haakjes", "settings-wikilinks-format-special": "Interwiki-koppeling", "settings-fieldset-general": "Algemeen", "settings-enable-mobile": "Instant Diffs inschakelen op de mobiele skin (Minerva).", "settings-enable-mobile-help": "Om Instant Diffs opnieuw in te schakelen, moet u overschakelen naar een andere skin.", "settings-notify-errors": "Pop-upwaarschuwingen weergeven voor kritieke fouten.", "settings-fieldset-pinned-actions": "Vastgepinde handelingen", "settings-pinned-actions": "Vastzetten van geselecteerde handelingen in het snelmenu:", "settings-pinned-actions-help": "In deze lijst worden alleen handelingen weergegeven die beschikbaar zijn voor de huidige weergave. Vastgezette handelingen worden alleen weergegeven in de desktopweergave.", "error-generic": "Er is iets misgegaan: $4", "error-server": "Serverfout. Probeer het later opnieuw", "error-offline": "Controleer uw internetverbinding", "error-wasted": "Onverwachte fout", "error-prepare-generic": "Configuratie voorbereiden mislukt: $4", "error-prepare-version": "Er wordt al een andere instantie uitgevoerd: $4", "error-prepare-replaced": "Zelfstandige instantie vervangen: $4", "error-prepare-mobile": "Het script is uitgeschakeld in de instellingen voor de mobiele skin (Minerva)", "error-link-options": "Het is niet gelukt om het koppelingskenmerk \"data-instantdiffs-options\" te verwerken: $4", "error-revision-generic": "Het laden van versiegegevens is mislukt \"oldid=$1\": $4", "error-revision-curid": "Het laden van versiegegevens \"curid=$1\" is mislukt: $4", "error-revision-badrevids": "Versie niet gevonden", "error-revision-badpageids": "Pagina niet gevonden", "error-revision-missing": "Pagina niet gevonden", "error-revision-invalid": "Pagina niet gevonden: $4", "error-diff-generic": "Het laden van de versievergelijkingsgegevens is mislukt \"oldid=$1\", \"diff=$2\": $4", "error-diff-compare-pages": "Het laden van de paginavergelijkingsgegevens is mislukt \"pagina1=$1\", \"pagina2=$2\": $4", "error-diff-missingcontent": "Versie is verborgen", "error-diff-nosuchrevid": "Versie niet gevonden", "error-diff-missingtitle": "Pagina niet gevonden", "error-api-generic": "API-aanvraag mislukt: $4", "error-dependencies-generic": "Afhankelijkheden konden niet worden geladen: $4", "error-dependencies-revid": "Het laden van pagina-afhankelijkheden is mislukt \"oldid=$1\": $4", "error-dependencies-curid": "Het laden van pagina-afhankelijkheden \"curid=$1\" is mislukt: $4", "error-global-watchlist": "Het uitvoeren van de Global Watchlist API is mislukt: $4", "error-setting-request": "Het laden van gebruikersopties is mislukt: $4", "error-setting-save": "Het opslaan van gebruikersopties is mislukt: $4" }; emtw7fikqe8z2bqezy2yf5tryy90uvw Template:Auto short description 10 174316 746221 2026-03-11T06:11:31Z en>Steven (Editor) 0 Added {{space}} before If the automatic... 746221 wikitext text/x-wiki {{Ombox | type = notice | text = This template {{#if:{{{sometimes|}}}|sometimes{{sp}}}}adds an automatically generated '''[[Wikipedia:Short description|short description]]'''{{#if:{{{category|}}}|{{sp}}({{{category}}})|}}{{#if:{{{indirect|}}}|{{sp}}via an embedded template}}{{#if:{{{conditions|}}}|{{space}}{{{conditions}}}}}.{{#if:{{{nooverride|}}}||{{space}}If the automatic short description is not optimal, override it by adding {{tl|Short description}} at the top of the article.}} }}<includeonly>{{Category handler |nocat={{{nocat|}}} |template={{Subpage other|<!-- do not categorise -->|[[Category:Templates that generate short descriptions{{#if:{{{category|}}}|{{sp}}for {{{category}}}|}}]]}} }}</includeonly><noinclude> {{Documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> g6s5wfdvgkew5dzrdfmnuycfbw5sxe5 746222 734377 2026-06-12T21:52:02Z Robertsky 51025 1 revision imported from [[:en:Template:Auto_short_description]]: for workshop activity 734377 wikitext text/x-wiki {{Ombox | type = notice | text = This template {{#if:{{{sometimes|}}}|sometimes{{sp}}}}adds an automatically generated '''[[Wikipedia:Short description|short description]]'''{{#if:{{{category|}}}|{{sp}}({{{category}}})|}}{{#if:{{{indirect|}}}|{{sp}}via an embedded template}}{{#if:{{{conditions|}}}|{{space}}{{{conditions}}}}}.{{#if:{{{nooverride|}}}||{{space}}If the automatic short description is not optimal, override it by adding {{tl|Short description}} at the top of the article.}} }}<includeonly>{{Category handler |nocat={{{nocat|}}} |template={{Subpage other|<!-- do not categorise -->|[[Category:Templates that generate short descriptions{{#if:{{{category|}}}|{{sp}}for {{{category}}}|}}]]}} }}</includeonly><noinclude> {{Documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> g6s5wfdvgkew5dzrdfmnuycfbw5sxe5 Template:Space 10 174317 746191 2023-02-14T01:26:39Z en>Xaosflux 0 shell params 746191 wikitext text/x-wiki #REDIRECT [[Template:Spaces]] {{Rcat shell| {{R from modification}} {{R with history}} {{R from template shortcut}} }} d521813tbyim2j2dsy9kxikkaoo0jnt 746192 734378 2026-06-12T21:51:58Z Robertsky 51025 1 revision imported from [[:en:Template:Space]]: for workshop activity 734378 wikitext text/x-wiki #REDIRECT [[Template:Spaces]] ox12ekkowioy7uiwg47qmdn6epzwzce Template:Uses Wikidata 10 174318 746215 2023-10-06T20:05:41Z en>SWinxy 0 Wrap catting in <includeonly> instead of an ifeq 746215 wikitext text/x-wiki {{Sister project | position = {{{position|}}} | project = data | text = This {{module other|module|template}} uses {{#if:{{{section|}}} | one or more [[Wikidata]] properties; see {{Section link||{{{section}}}}} for details. | the [[Wikidata]] propert{{#if:{{{2|}}}|ies|y}}: {{#invoke:Uses Wikidata|usesProperty}} }}}}<includeonly>{{#switch:{{SUBPAGENAME}} |sandbox |testcases |doc= <!--no category--> |#default={{module other |[[Category:Modules using data from Wikidata]] |{{template other |[[Category:Templates using data from Wikidata]]}} }} }}</includeonly><noinclude> {{Documentation}} <!-- Add categories to the /doc subpage --> </noinclude> ptftzgzv1nailmf6sz81senyn3mb5nu 746216 734379 2026-06-12T21:52:01Z Robertsky 51025 1 revision imported from [[:en:Template:Uses_Wikidata]]: for workshop activity 734379 wikitext text/x-wiki {{Sister project | position = {{{position|}}} | project = data | text = This {{module other|module|template}} uses {{#if:{{{section|}}} | one or more [[Wikidata]] properties; see {{Section link||{{{section}}}}} for details. | the [[Wikidata]] propert{{#if:{{{2|}}}|ies|y}}: {{#invoke:Uses Wikidata|usesProperty}} }}}}<includeonly>{{#switch:{{SUBPAGENAME}} |sandbox |testcases |doc= <!--no category--> |#default={{module other |[[Category:Modules using data from Wikidata]] |{{template other |[[Category:Templates using data from Wikidata]]}} }} }}</includeonly><noinclude> {{Documentation}} <!-- Add categories to the /doc subpage --> </noinclude> ptftzgzv1nailmf6sz81senyn3mb5nu Dacryodes excelsa 0 174536 746337 737445 2026-06-13T00:03:54Z InternetArchiveBot 34092 Rescuing 0 sources and tagging 1 as dead.) #IABot (v2.0.9.5 746337 wikitext text/x-wiki {{مختصر وضاحت|Species of tree}} {{خانہ معلومات نوع |image = Arbol de Tabonuco (Dacryodes excelsa), jpg format.jpg |image_caption = Tabonuco tree (''Dacryodes excelsa'') |genus = Dacryodes |species = excelsa |authority = Vahl }} '''''Dacryodes excelsa''''' is a [[درخت]] native to [[پورٹو ریکو]] with a habitat that extends into the [[انٹیلیز اصغر]] in the [[کیریبین]] region.<ref>[http://www.na.fs.fed.us/pubs/silvics_manual/volume_2/dacryodes/excelsa.htm ''Tabonuco: 'Dacryodes excelsa' (Vahl.)'']{{Dead link|date=June 2026 |bot=InternetArchiveBot |fix-attempted=yes }} USDA Forest Service. Retrieved 18 September 2013.</ref> Its English vernacular names include '''gommier''' and '''candlewood'''.<ref>[http://eol.org/pages/583026/overview ''Dacryodes excelsa, "Candlewood": Overview.''] Encyclopedia of Life. Retrieved 18 September 2013.</ref> Its [[ہسپانوی زبان]] common name is '''''tabonuco'''''.<ref>[http://www.fs.fed.us/global/iitf/Dacryodesexcelsa.pdf ''Dacryodes excelsa (Vahl) "Tabonuco": Burseraceae, Familia de las burseras.''] Ariel E. Lugo & [[Frank H. Wadsworth]]. USDA Forest Service. Retrieved 18 September 2013.</ref> According to Richards,<ref name="Richards">{{حوالہ کتاب|last1=Richards|first1=P.W.|title=The Tropical Rain Forest. An Ecological Study.|date=1996|publisher=Cambridge University Press|edition=2nd|location=Cambridge}}</ref> "it is the most conspicuous large emergent tree" in the [[Sierra de Luquillo|Luquillo mountains]] of Puerto Rico. It is also found in [[Toro Negro State Forest]], in Puerto Rico [[Cordillera Central (Puerto Rico)|Cordillera Central]].<ref>[http://www.drna.gobierno.pr/biblioteca/publicaciones/hojas-de-nuestro-ambiente/30-Toro%20Negro%20ultimo.pdf ''Bosques de Puerto Rico: Bosque Estatal de Toro Negro.''] {{webarchive |url=https://web.archive.org/web/20150807061645/http://www.drna.gobierno.pr/biblioteca/publicaciones/hojas-de-nuestro-ambiente/30-Toro%20Negro%20ultimo.pdf |date=August 7, 2015 }} Hojas de Nuestro Ambiente. July 2008. [Publication/Issue: P-030] Puerto Rico Department of Natural and Environmental Resources. Retrieved 13 September 2013.</ref> ''Dacryodes excelsa'' grows to around {{تحویل|115|ft}}, and grows best in soil with a PH of 4.5–5.5.<ref name=PLANTS>{{PLANTS | symbol = DAEX | taxon = Dacryodes excelsa | access-date = 22 August 2021}}</ref> == Description == The tree is distinguished by wide, low buttresses, a columnar trunk, smooth gray bark, and [[Pinnation|pinnate]] leaves composed of five to seven fragrant, dark-green leaflets. When wounded, the tree exudes a flammable, fragrant, and transparent resin that hardens and turns white upon exposure.<ref name="uno">{{حوالہ رسالہ|last=Lugo |first=Ariel E. |last2=Wadsworth |first2=Frank H. |title=Tabonuco |url=https://www.srs.fs.usda.gov/pubs/misc/ag_654/volume_2/dacryodes/excelsa.htm |journal=United States Department of Agriculture}}</ref> The trees tend to be concentrated on upper slopes and ridges, where they can form groups with roots are [[Grafting|grafted]] together, thus forming a unified group of trees that provides them with superior anchorage against [[hurricane-force winds]]. In Puerto Rico, the island's first inhabitants used resin from the tree to make candles and torches, to [[caulk]] boats, as [[اگر بتی]], and for medicinal purposes. The [[Puerto Rican amazon|Puerto Rican parrot]], an endangered species, feeds on the seeds of the ''Dacryodes excelsa''.<ref name="uno" /> ==References== {{حوالہ جات}} {{Taxonbar|from=Q2365825}} [[Category:Dacryodes|excelsa]] [[زمرہ:کیریبین کے درخت]] [[زمرہ:نباتاتیہ پورٹو ریکو]] [[Category:Flora without expected TNC conservation status]] {{Sapindales-stub}} mgr43pne24ykuwoxf08a36s27etnj94 Module:Sister project logo 828 174645 746251 736260 2026-05-11T10:07:57Z en>MSGJ 0 Changed protection settings for "[[Module:Sister project logo]]": used on [[Template:Wikipedia's sister projects]] which is fully protected ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite)) 736259 Scribunto text/plain require('strict') local p = {} -- Lazy-load logo file names and other metadata local data = mw.loadData('Module:Sister project logo/data') -- Convert table of arguments into wiki image markup local function imageMarkup(args) local x = {} -- positional arguments first for _, arg in ipairs(args) do table.insert(x,arg) end -- named arguments converted to foo=bar for k, v in pairs(args) do if not tonumber(k) then table.insert(x,k..'='..v) end end return '[['..table.concat(x,'|')..']]' end function p._main(args) local localArgs = {} -- map possibly verbose project argument into canonical project string local project = args.project and args.project:lower() project = data.projectMap[project] or project -- image=none means bail (for [[Template:Sister project]]) if args.image == 'none' then return '' -- if image specified, return it instead of stored logo (for [[Template:Sister project]]) elseif args.image then return args.image else local logoImage = data.logo[project] -- if project is unknown, use Wikimedia logo (for [[Template:Sister project]]) if not logoImage then project = 'wm' logoImage = data.logo['wm'] end table.insert(localArgs,'File:'..logoImage) end -- size=large means use sizes from [[Template:Wikipedia's sister projects]] -- size defaults to 40x40px (for [[Template:Sister project]]) table.insert(localArgs,args.size == 'large' and (data.largeSize[project] or '35px') or args.size or '40x40px') -- if logo is PD, blank link and alt (to suppress from screen readers) if data.PDicon[project] then localArgs.link = '' localArgs.alt = '' else localArgs.alt = data.logoAlt[project] end -- For dark mode, flip dark-on-light icons to be light-on-dark -- Also: use editor-specified classes (for [[Template:Sister-inline]]) localArgs.class = "noviewer"..(data.darkOnLight[project] and " skin-invert-image" or "") ..(args.class and " "..args.class or "") return imageMarkup(localArgs) end function p.main(frame) local args = require('Module:Arguments').getArgs(frame) return p._main(args) or '' end return p 0pipv4aule2ozdl2ed4e2r0imenbloz 746252 746251 2026-06-12T21:52:06Z Robertsky 51025 1 revision imported from [[:en:Module:Sister_project_logo]]: for workshop activity 736259 Scribunto text/plain require('strict') local p = {} -- Lazy-load logo file names and other metadata local data = mw.loadData('Module:Sister project logo/data') -- Convert table of arguments into wiki image markup local function imageMarkup(args) local x = {} -- positional arguments first for _, arg in ipairs(args) do table.insert(x,arg) end -- named arguments converted to foo=bar for k, v in pairs(args) do if not tonumber(k) then table.insert(x,k..'='..v) end end return '[['..table.concat(x,'|')..']]' end function p._main(args) local localArgs = {} -- map possibly verbose project argument into canonical project string local project = args.project and args.project:lower() project = data.projectMap[project] or project -- image=none means bail (for [[Template:Sister project]]) if args.image == 'none' then return '' -- if image specified, return it instead of stored logo (for [[Template:Sister project]]) elseif args.image then return args.image else local logoImage = data.logo[project] -- if project is unknown, use Wikimedia logo (for [[Template:Sister project]]) if not logoImage then project = 'wm' logoImage = data.logo['wm'] end table.insert(localArgs,'File:'..logoImage) end -- size=large means use sizes from [[Template:Wikipedia's sister projects]] -- size defaults to 40x40px (for [[Template:Sister project]]) table.insert(localArgs,args.size == 'large' and (data.largeSize[project] or '35px') or args.size or '40x40px') -- if logo is PD, blank link and alt (to suppress from screen readers) if data.PDicon[project] then localArgs.link = '' localArgs.alt = '' else localArgs.alt = data.logoAlt[project] end -- For dark mode, flip dark-on-light icons to be light-on-dark -- Also: use editor-specified classes (for [[Template:Sister-inline]]) localArgs.class = "noviewer"..(data.darkOnLight[project] and " skin-invert-image" or "") ..(args.class and " "..args.class or "") return imageMarkup(localArgs) end function p.main(frame) local args = require('Module:Arguments').getArgs(frame) return p._main(args) or '' end return p 0pipv4aule2ozdl2ed4e2r0imenbloz Module:Sister project logo/data 828 174646 746253 736262 2026-05-11T10:08:21Z en>MSGJ 0 Changed protection settings for "[[Module:Sister project logo/data]]": used on [[Template:Wikipedia's sister projects]] which is fully protected ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite)) 736261 Scribunto text/plain -- map of verbose project names to canonical ones local projectMap = { commons = 'c', commonscat = 'c', ["wikimedia commons"] = 'c', meta = 'm', metawiki = 'm', ["meta-wiki"] = 'm', wikibooks = 'b', wbk = 'b', wb = 'b', cookbook = 'b', wikijunior = 'b', wikidata = 'd', data = 'd', wikiquote = 'q', quote = 'q', wqt = 'q', wikipedia = 'iw', wp = 'iw', w = 'iw', iw1 = 'iw', iw2 = 'iw', wikisource = 's', source = 's', ws = 's', wikisource2 = 's', source2 = 's', ws2 = 's', s2 = 's', wiktionary = 'wikt', wkt = 'wikt', wdy = 'wikt', wikinews = 'n', news = 'n', wnw = 'n', wikispecies = 'species', wikiversity='v', wvy='v', wikivoyage = 'voy', voyage = 'voy', mediawiki = 'mw', outreachwiki = 'outreach', wikifunctions = 'f' } -- logos per project local logo = { c = "Commons-logo.svg", m = 'Wikimedia Community Logo.svg', b = 'Wikibooks-logo.svg', d = 'Wikidata-logo.svg', q = 'Wikiquote-logo.svg', iw = 'Wikipedia-logo-v2.svg', s = 'Wikisource-logo.svg', wikt = 'Wiktionary-logo-en-v2.svg', n = 'Wikinews-logo.svg', species = 'Wikispecies-logo.svg', v = 'Wikiversity logo 2017.svg', voy = 'Wikivoyage-Logo-v3-icon.svg', mw = 'MediaWiki-2020-icon.svg', outreach = 'Wikimedia Outreach.png', incubator = 'Incubator-notext.svg', f = 'Wikifunctions-logo.svg', wm = 'Wikimedia-logo.svg' } -- which logos are PD and don't need link/alt local PDicon = { m=true,q=true,d=true,outreach=true,wm=true } -- which logos are dark and light and should flip in dark mode local darkOnLight = {wikt=true} -- descriptive alt local logoAlt = { c = 'Wikimedia Commons logo', m = 'Meta-Wiki logo', b = 'Wikibooks logo', d = 'Wikidata logo', q = 'Wikiquote logo', iw = 'Wikipedia logo', s = 'Wikisource logo', wikt = 'Wiktionary logo', n = 'Wikinews logo', species = 'Wikispecies logo', v = 'Wikiversity logo', voy = 'Wikivoyage logo', mw = 'MediaWiki logo', outreach = 'Wikimedia Outreach logo', incubator = 'Wikimedia Incubator logo', f = 'Wikifunctions logo', wm = 'Wikimedia logo' } -- size for [[Template:Wikipedia's sister projects]], defaults to 35px local largeSize = { c = '31px', d = '47px', n = '51px', v = '41px' } return {projectMap=projectMap, logo=logo, PDicon=PDicon, darkOnLight=darkOnLight, logoAlt=logoAlt, largeSize=largeSize} dil9atzat8xhmn759cjoa7g4nzleawp 746254 746253 2026-06-12T21:52:06Z Robertsky 51025 1 revision imported from [[:en:Module:Sister_project_logo/data]]: for workshop activity 736261 Scribunto text/plain -- map of verbose project names to canonical ones local projectMap = { commons = 'c', commonscat = 'c', ["wikimedia commons"] = 'c', meta = 'm', metawiki = 'm', ["meta-wiki"] = 'm', wikibooks = 'b', wbk = 'b', wb = 'b', cookbook = 'b', wikijunior = 'b', wikidata = 'd', data = 'd', wikiquote = 'q', quote = 'q', wqt = 'q', wikipedia = 'iw', wp = 'iw', w = 'iw', iw1 = 'iw', iw2 = 'iw', wikisource = 's', source = 's', ws = 's', wikisource2 = 's', source2 = 's', ws2 = 's', s2 = 's', wiktionary = 'wikt', wkt = 'wikt', wdy = 'wikt', wikinews = 'n', news = 'n', wnw = 'n', wikispecies = 'species', wikiversity='v', wvy='v', wikivoyage = 'voy', voyage = 'voy', mediawiki = 'mw', outreachwiki = 'outreach', wikifunctions = 'f' } -- logos per project local logo = { c = "Commons-logo.svg", m = 'Wikimedia Community Logo.svg', b = 'Wikibooks-logo.svg', d = 'Wikidata-logo.svg', q = 'Wikiquote-logo.svg', iw = 'Wikipedia-logo-v2.svg', s = 'Wikisource-logo.svg', wikt = 'Wiktionary-logo-en-v2.svg', n = 'Wikinews-logo.svg', species = 'Wikispecies-logo.svg', v = 'Wikiversity logo 2017.svg', voy = 'Wikivoyage-Logo-v3-icon.svg', mw = 'MediaWiki-2020-icon.svg', outreach = 'Wikimedia Outreach.png', incubator = 'Incubator-notext.svg', f = 'Wikifunctions-logo.svg', wm = 'Wikimedia-logo.svg' } -- which logos are PD and don't need link/alt local PDicon = { m=true,q=true,d=true,outreach=true,wm=true } -- which logos are dark and light and should flip in dark mode local darkOnLight = {wikt=true} -- descriptive alt local logoAlt = { c = 'Wikimedia Commons logo', m = 'Meta-Wiki logo', b = 'Wikibooks logo', d = 'Wikidata logo', q = 'Wikiquote logo', iw = 'Wikipedia logo', s = 'Wikisource logo', wikt = 'Wiktionary logo', n = 'Wikinews logo', species = 'Wikispecies logo', v = 'Wikiversity logo', voy = 'Wikivoyage logo', mw = 'MediaWiki logo', outreach = 'Wikimedia Outreach logo', incubator = 'Wikimedia Incubator logo', f = 'Wikifunctions logo', wm = 'Wikimedia logo' } -- size for [[Template:Wikipedia's sister projects]], defaults to 35px local largeSize = { c = '31px', d = '47px', n = '51px', v = '41px' } return {projectMap=projectMap, logo=logo, PDicon=PDicon, darkOnLight=darkOnLight, logoAlt=logoAlt, largeSize=largeSize} dil9atzat8xhmn759cjoa7g4nzleawp User:Supertian8/common.js 2 175863 746351 745663 2026-06-13T04:22:13Z Supertian8 67751 Testage of new 746351 javascript text/javascript $(document).ready(function(){ $("input").keypress(function(e){ console.log(e); }); }); nshi4a8bjob3azm0527bt8oh741nuwh 746352 746351 2026-06-13T04:25:07Z Supertian8 67751 div instead of input 746352 javascript text/javascript $(document).ready(function(){ $("div").keypress(function(e){ console.log(e); }); }); 270aznygoaolxmd7zxjhxvgavoqn5pa 746353 746352 2026-06-13T04:26:44Z Supertian8 67751 log e.which 746353 javascript text/javascript $(document).ready(function(){ $("div").keypress(function(e){ console.log(e.which); }); }); 2oigfqapd6lplyimt8pjya48n9bmfj3 746354 746353 2026-06-13T04:30:28Z Supertian8 67751 e.ctrlKey 746354 javascript text/javascript $(document).ready(function(){ $("div").keypress(function(e){ if (e.ctrlKey) console.log('Ctrl down'); console.log(e.which); }); }); btm92g5nx7l1f5th7axd1fsskzilnv1 746355 746354 2026-06-13T04:35:23Z Supertian8 67751 From here https://stackoverflow.com/a/2445635 746355 javascript text/javascript $(document).ready(function(){ var ctrlPressed = false; $(window).keydown(function(e) { if (e.which == 17) { // ctrl ctrlPressed = true; } }).keyup(function(e) { if (e.which == 17) { // ctrl ctrlPressed = false; } }); $("div").keypress(function(e){ if (ctrlPressed) console.log('Ctrl down'); console.log(e.which); }); }); 7ypti44hf4trfkq6w73czo5bxgauhsj 746356 746355 2026-06-13T04:37:11Z Supertian8 67751 log inside keydown 746356 javascript text/javascript $(document).ready(function(){ var ctrlPressed = false; $(window).keydown(function(e) { if (e.which == 17) { // ctrl ctrlPressed = true; console.log("Ctrl inside") } }).keyup(function(e) { if (e.which == 17) { // ctrl ctrlPressed = false; } }); $("div").keypress(function(e){ if (ctrlPressed) console.log('Ctrl down'); console.log(e.which); }); }); mzxk1h4vpydywo4nh4gfzu158jvtqbb 746357 746356 2026-06-13T04:41:59Z Supertian8 67751 prevent default when ctrl + number 746357 javascript text/javascript $(document).ready(function(){ var ctrlPressed = false; $(window).keydown(function(e) { if (e.which == 17) { // ctrl ctrlPressed = true; //console.log("Ctrl inside") } }).keyup(function(e) { if (e.which == 17) { // ctrl ctrlPressed = false; } }); $("div").keypress(function(e){ if (ctrlPressed){ if(e.which >= 48 && e.which <= 57) e.preventDefault(); } }); }); 8x97sed4spnwrjdyy98md969zvwp80w 746358 746357 2026-06-13T04:44:05Z Supertian8 67751 log to debug 746358 javascript text/javascript $(document).ready(function(){ var ctrlPressed = false; $(window).keydown(function(e) { if (e.which == 17) { // ctrl ctrlPressed = true; //console.log("Ctrl inside") } }).keyup(function(e) { if (e.which == 17) { // ctrl ctrlPressed = false; } }); $("div").keypress(function(e){ if (ctrlPressed){ if(e.which >= 48 && e.which <= 57) { console.log("Shortcut") e.preventDefault(); } } }); }); 84xpsjbymcy6jqwfzq6axhjk2y4mxzs 746359 746358 2026-06-13T04:48:21Z Supertian8 67751 more debuggage 746359 javascript text/javascript $(document).ready(function(){ var ctrlPressed = false; $(window).keydown(function(e) { if (e.which == 17) { // ctrl ctrlPressed = true; //console.log("Ctrl inside") } }).keyup(function(e) { if (e.which == 17) { // ctrl ctrlPressed = false; } }); $("div").keypress(function(e){ console.log(e.which); console.log(ctrlPressed); if (ctrlPressed){ if(e.which >= 48 && e.which <= 57) { console.log("Shortcut"); e.preventDefault(); } } }); }); s1gun8ytjzjox6jg948bq9kjszhdhfu 746360 746359 2026-06-13T04:52:16Z Supertian8 67751 test with Q, log inside if (ctrlPressed) 746360 javascript text/javascript $(document).ready(function(){ var ctrlPressed = false; $(window).keydown(function(e) { if (e.which == 17) { // ctrl ctrlPressed = true; //console.log("Ctrl inside") } }).keyup(function(e) { if (e.which == 17) { // ctrl ctrlPressed = false; } }); $("div").keypress(function(e){ console.log(e.which); console.log(ctrlPressed); if (ctrlPressed){ console.log("press weapon"); if(e.which == 17) { console.log("Q"); //e.preventDefault(); } if(e.which >= 48 && e.which <= 57) { console.log("Shortcut"); e.preventDefault(); } } }); }); 76uod6cpv630ps3u5dbshzwbtuo3saa 746361 746360 2026-06-13T04:55:36Z Supertian8 67751 One line 746361 javascript text/javascript $(document).ready(function(){ var ctrlPressed = false; $(window).keydown(function(e) { if (e.which == 17) { // ctrl ctrlPressed = true; //console.log("Ctrl inside") } }).keyup(function(e) { if (e.which == 17) { // ctrl ctrlPressed = false; } }); $("div").keypress(function(e){ /*console.log(e.which); console.log(ctrlPressed); if (ctrlPressed){ console.log("press weapon"); if(e.which == 17) { console.log("Q"); //e.preventDefault(); } if(e.which >= 48 && e.which <= 57) { console.log("Shortcut"); e.preventDefault(); } }*/ if (ctrlPressed && e.which >= 48 && e.which <= 57) e.preventDefault(); }); }); 12gpbiis198h62vdueb0gv5fwynybae 746362 746361 2026-06-13T05:06:34Z Supertian8 67751 test without ctrlPressed 746362 javascript text/javascript $(document).ready(function(){ var ctrlPressed = false; $(window).keydown(function(e) { if (e.which == 17) { // ctrl ctrlPressed = true; //console.log("Ctrl inside") } }).keyup(function(e) { if (e.which == 17) { // ctrl ctrlPressed = false; } }); $("div").keypress(function(e){ /*console.log(e.which); console.log(ctrlPressed); if (ctrlPressed){ console.log("press weapon"); if(e.which == 17) { console.log("Q"); //e.preventDefault(); } if(e.which >= 48 && e.which <= 57) { console.log("Shortcut"); e.preventDefault(); } }*/ if (e.which >= 48 && e.which <= 57) e.preventDefault(); }); }); h56vx7opwdnl8ie3ukvgb0ob0hhg1kj User:Iiirxs/Main Page 2 175955 746077 745661 2026-06-12T12:25:04Z Iiirxs 49827 Updated Main Page via StarterKit tool 746077 wikitext text/x-wiki {{User:Iiirxs/Starter kit/Welcome banner00}} {{User:Iiirxs/Starter kit/Content categories00}} {{User:Iiirxs/Starter kit/Featured article00}} <div style="margin-top: 10px;">{{User:Iiirxs/Starter kit/Wikipedia's sister projects00}}</div> <div style="margin-top: 10px;">{{User:Iiirxs/Starter kit/Wikipedia languages00}}</div> __NOTOC__ q42bvqurz5isqyyswbh76g9owilcxo3 746083 746077 2026-06-12T12:31:10Z Iiirxs 49827 Updated Main Page via StarterKit tool 746083 wikitext text/x-wiki {{User:Iiirxs/Starter kit/Wb11}} {{User:Iiirxs/Starter kit/Cc11}} {{User:Iiirxs/Starter kit/Fa11}} <div style="margin-top: 10px;">{{User:Iiirxs/Starter kit/Wsp11}}</div> <div style="margin-top: 10px;">{{User:Iiirxs/Starter kit/Wl11}}</div> __NOTOC__ gmt3cf0vjhiwoyia9yhur8cti60eavo 746090 746083 2026-06-12T13:04:30Z Iiirxs 49827 Updated Main Page via StarterKit tool 746090 wikitext text/x-wiki {{User:Iiirxs/Starter kit/AA}} {{User:Iiirxs/Starter kit/CC}} {{User:Iiirxs/Starter kit/FA}} <div style="margin-top: 10px;">{{User:Iiirxs/Starter kit/Wsp}}</div> <div style="margin-top: 10px;">{{User:Iiirxs/Starter kit/Wl}}</div> __NOTOC__ 21s2chch09rym784466jm8zuh8t0wp3 Wikipedia:Templates for discussion/Log/2026 June 11 4 175999 746091 745971 2026-06-12T14:22:49Z Trialpears 43074 /* June 10 */ 746091 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} msza5ckm99ueia82ce4rlhia026bcsm 746092 746091 2026-06-12T14:27:50Z Trialpears 43074 /* Trialpears tests */ Closed as keep ([[WP:XFDC#4.0.16|XFDcloser]]) 746092 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} pdiovs8stt9ijixtgjx0gzapsekcbe7 746093 746092 2026-06-12T14:42:37Z Trialpears 43074 /* Trialpears tests */ Closed as xdfgc ([[WP:XFDC#4.0.16|XFDcloser]]) 746093 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} ms9zmazmkufua18p83te5ez8zqlcbcq 746094 746093 2026-06-12T15:06:27Z Trialpears 43074 /* Trialpears tests */ Closed as delete ([[WP:XFDC#4.0.16|XFDcloser]]) 746094 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} hxrfeuy02g2oz991fntgguj4r9prqzp 746095 746094 2026-06-12T15:07:38Z Trialpears 43074 /* Trialpears tests */ Closed as dvc ([[WP:XFDC#4.0.16|XFDcloser]]) 746095 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} tq02wdbfa3cdjpubitsqgblxbi2gx8u 746096 746095 2026-06-12T15:08:13Z Trialpears 43074 /* Trialpears tests */ Closed as keep ([[WP:XFDC#4.0.16|XFDcloser]]) 746096 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} 31zkr42amlfxszbq2fqqmrjggyvz121 746097 746096 2026-06-12T15:31:55Z Trialpears 43074 /* Trialpears tests */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746097 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} d6isp4v6ypbxb7t2lo2div886q2mitq 746098 746097 2026-06-12T15:39:23Z Trialpears 43074 /* Trialpears tests */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746098 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:39, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} 9pfgg7zjldhgnc4alflwdnsqumdkpru 746099 746098 2026-06-12T15:40:35Z Trialpears 43074 /* Trialpears tests */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746099 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:40, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:39, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} pspe02pat1b5175lxi73wss0sx1gho3 746100 746099 2026-06-12T15:41:07Z Trialpears 43074 /* Trialpears tests */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746100 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:41, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:40, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:39, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} olw9g2mod5uso6jbfeas42q5o6pru9w 746102 746100 2026-06-12T15:49:14Z Trialpears 43074 /* Trialpears tests */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746102 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:49, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:41, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:40, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:39, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} gj10jmwkwfr4saf089oy4ifjngm53dw 746104 746102 2026-06-12T15:51:09Z Trialpears 43074 /* Trialpears tests */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746104 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:49, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:41, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:40, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:39, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} 4aukk36zfevjyyu9tvf40sljbeifeun 746105 746104 2026-06-12T15:51:49Z Trialpears 43074 /* Trialpears tests */ Closed as delete ([[WP:XFDC#4.0.16|XFDcloser]]) 746105 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:49, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:41, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:40, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:39, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} blgnj5k2bhmej9bezegcxtod04pz7nd 746107 746105 2026-06-12T16:02:52Z Trialpears 43074 /* Trialpears tests */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746107 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:02, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:49, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:41, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:40, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:39, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} 4lk20o2vkidf3o7f64asodcehkswpod 746109 746107 2026-06-12T16:04:10Z Trialpears 43074 /* Trialpears tests */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746109 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:04, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:02, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:49, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:41, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:40, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:39, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} cgzza3ezj8gvglutd3sp363ulgqwitb 746110 746109 2026-06-12T16:07:40Z Trialpears 43074 /* Trialpears tests */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746110 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:07, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:04, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:02, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:49, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:41, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:40, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:39, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} 2dkw8cuj745dpcyy8eshbu3jhpb054a 746111 746110 2026-06-12T16:08:24Z Trialpears 43074 /* Trialpears tests */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746111 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:08, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:07, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:04, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:02, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:49, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:41, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:40, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:39, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} 4stpz4br1rzw4awptov0mfwhn503z5t 746112 746111 2026-06-12T16:08:56Z Trialpears 43074 /* Trialpears tests */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746112 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:08, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:08, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:07, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:04, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:02, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:49, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:41, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:40, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:39, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} pd1wakiuwskekf5ow5d6198k6klbhbc 746115 746112 2026-06-12T16:09:42Z Trialpears 43074 /* Trialpears tests */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746115 wikitext text/x-wiki <noinclude><div class="boilerplate metadata vfd" style="background-color: #F3F9FF; padding: 0 0.2em; border: 1px solid #AAA; font-size: 85%; display: flex; font-weight: bold; flex-wrap: wrap; box-sizing: border-box"> <div class="nowrap" style="padding-right: 0.5em"><span style="color: #727272">&lt;</span> [[Wikipedia:Templates for discussion/Log/2026 June 9|June 9]]</div> <div style="flex: 1"></div> <div class="nowrap" style="padding-left: 0.5em">[[Wikipedia:Templates for discussion/Log/2026 June 11|June 11]] <span style="color: #727272">&gt;</span></div> </div></noinclude> ===[[Wikipedia:Templates for discussion/Log/2026 June 10|June 10]]=== <!-- Add new listings at the top of the list with the following formats for deletion and merging respectively: {{subst:Tfd2|TemplateName|text=Why you think the template should be deleted. ~~~~}} {{subst:Tfm2|TemplateName|OtherTemplate|text=Why you think the template should be merged. ~~~~}} --> ==== Trialpears tests ==== {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:09, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:08, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:08, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:07, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:04, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:02, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:51, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:49, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:41, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:40, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:39, 12 June 2026 (UTC) {{subst:Tfd top|'''no consensus'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:31, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:08, 12 June 2026 (UTC) {{subst:Tfd top|'''dvc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:07, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:06, 12 June 2026 (UTC) {{subst:Tfd top|'''xdfgc'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:42, 12 June 2026 (UTC) {{subst:Tfd top|'''keep'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:27, 12 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 15:16, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 14:30, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:47, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:46, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:44, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:43, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:42, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:36, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:35, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:32, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:29, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:28, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:27, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:26, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 13:24, 11 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:07, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:05, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:03, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:58, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:56, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:47, 10 June 2026 (UTC) {{subst:Tfd top|'''delete'''}}. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 16:44, 10 June 2026 (UTC) * {{Tfd links|SAFF U-19 Championship}} * {{Tfd links|X20}} First tournament has only just started. In a few years time when there have been more tournaments this will be a useful aid to navigation but currently it is not. The two links in the navbox are already found in both the articles themselves. [[User:Fenix down|Fenix down]] ([[User talk:Fenix down|talk]]) 09:34, 21 August 2015 (UTC) *'''Keep''' - there is no harm to the encyclopedia by retaining this template especially it will be expanded in the future. It is encouraging to editors to continue writing articles they know they will be used in a template. Deleting it now will only mean that it will have to be recreated in the future. :<span style="font-family:Monotype Corsiva;background:#E6E6FA;border:solid 1px;border-radius:7px;box-shadow:darkgray 0px 3px 3px;">&nbsp;&nbsp;[[User:Bfpage|Bfpage]]&nbsp;&#124;[[User talk:Bfpage|leave a message]]&nbsp;</span> 10:14, 23 August 2015 (UTC) *'''Keep''' - Announcements for future host will be made soon, and a template will be remade if this is deleted. There is really no point in deleting it, other than pushing a deletionist ideology. [[User:Ayoopdog|Ayoopdog]] ([[User talk:Ayoopdog|talk]]) 13:01, 29 August 2015 (UTC) <div class="xfd_relist" style="border-top: 1px solid #AAA; border-bottom: 1px solid #AAA; padding: 0px 25px;"><span style="color: #FF6600;">'''{{resize|91%|[[Wikipedia:Deletion process#Relisting discussions|Relisted]] to generate a more thorough discussion and clearer consensus.}}'''</span><br /> <small>Please add new comments below this notice. Thanks, [[User:Alakzi|Alakzi]] ([[User talk:Alakzi|talk]]) 19:35, 3 September 2015 (UTC)</small><!-- from Template:Relist --></div><!-- Please add new comments below this line --> {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:XfD relist|1=|2=2}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} {{subst:Tfd bottom}} n1ombmop3fwx60ynnh6o2vkz2gphn66 User:John Vandenberg/createonly/1781266288.6598392 2 176022 746070 2026-06-12T12:11:38Z Pywikibot-test 23124 Pywikibot 11.4.0.dev0 746070 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 User:Iiirxs/Starter kit/Welcome banner00 2 176023 746072 2026-06-12T12:24:33Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746072 wikitext text/x-wiki <div style="text-align: center; font-family: 'Linux Libertine', Georgia, Times, serif; margin: 1.5em 0;"> <span style="font-size: 2.3em; line-height: 1.2;">Welcome to {{#language:{{PAGELANGUAGE}}}} Wikipedia</span><br/> <span style="font-size: 1.1em; color: #54595d;">The free encyclopedia that anyone can edit</span><br/> <span style="font-size: 0.95em; color: #72777d; margin-top: 0.5em; display: inline-block;">{{NUMBEROFACTIVEUSERS}} active editors • '''{{NUMBEROFARTICLES}}''' articles in this {{SITENAME}}</span> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> 2gaz0l1265uxned195lmw3a6r0oocxa User:Iiirxs/Starter kit/Content categories00 2 176024 746073 2026-06-12T12:24:33Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746073 wikitext text/x-wiki <div style="margin:10px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1);background:#fff;"> {| style="border-spacing:1px;border-collapse:separate;width:100%;text-align:center;font-size:0.9em;padding:2px 3px;" class="hp-portalen" | style="background:#F9F9F0;border-top:5px solid #999933;padding:3px 0.25em;width:50%;text-align:center;" | Countries & Geography | style="background:#F4F9F0;border-top:5px solid #669933;padding:3px 0.25em;width:50%;text-align:center;" | Arts & Literature |} </div> <noinclude>[[Category:Starter kit templates]]</noinclude> 88mr1560e6e53mjf5snqsnfobgm5qg0 User:Iiirxs/Starter kit/Featured article00 2 176025 746074 2026-06-12T12:24:39Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746074 wikitext text/x-wiki <div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;"> <div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Featured article'''</div> <!-- Add a short excerpt from any well-written article on your wiki. No need to update daily — refresh when a new article is ready. To add an image: [[File:Filename.jpg|112px|left|alt=description]] --> Add article title here – Add a short excerpt here (2–3 sentences). Introduce the topic clearly so readers want to learn more. <!-- Replace "Full article..." below with: [[Article name|Full article...]] --> <small>(Full article...)</small> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> 8f0hxcd6j5x931os1d5plbo2g7n8veu User:Iiirxs/Starter kit/Wikipedia's sister projects00 2 176026 746075 2026-06-12T12:24:40Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746075 wikitext text/x-wiki <div style="border:1px solid #CBD5E1;border-radius:4px;background:#ffffff;overflow:hidden;margin-bottom:16px;"> <div style="background:#F8FAFC;border-bottom:1px solid #CBD5E1;padding:8px 16px;font-weight:bold;">Wikipedia's sister projects</div> <div style="padding:16px;"> Wikipedia is written by volunteer editors and hosted by the [https://wikimediafoundation.org/ Wikimedia Foundation], a non-profit organization that also hosts a range of other volunteer [https://wikimediafoundation.org/our-work/wikimedia-projects/ projects]: <ul style="list-style:none;margin:8px 0 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;"> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Commons-logo.svg|31px|link=https://commons.wikimedia.org/|alt=Commons logo]]<span>[https://commons.wikimedia.org/ Commons]<br/><small style="color:#555;">Free media repository</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:MediaWiki-2020-icon.svg|35px|link=https://www.mediawiki.org/|alt=MediaWiki logo]]<span>[https://www.mediawiki.org/ MediaWiki]<br/><small style="color:#555;">Wiki software development</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikimedia Community Logo.svg|35px|link=https://meta.wikimedia.org/|alt=Meta-Wiki logo]]<span>[https://meta.wikimedia.org/ Meta-Wiki]<br/><small style="color:#555;">Wikimedia project coordination</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikibooks-logo.svg|35px|link=https://www.wikibooks.org/|alt=Wikibooks logo]]<span>[https://www.wikibooks.org/ Wikibooks]<br/><small style="color:#555;">Free textbooks and manuals</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikidata-logo.svg|47px|link=https://www.wikidata.org/|alt=Wikidata logo]]<span>[https://www.wikidata.org/ Wikidata]<br/><small style="color:#555;">Free knowledge base</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikinews-logo.svg|51px|link=https://www.wikinews.org/|alt=Wikinews logo]]<span>[https://www.wikinews.org/ Wikinews]<br/><small style="color:#555;">Free-content news</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikiquote-logo.svg|35px|link=https://www.wikiquote.org/|alt=Wikiquote logo]]<span>[https://www.wikiquote.org/ Wikiquote]<br/><small style="color:#555;">Collection of quotations</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikisource-logo.svg|35px|link=https://www.wikisource.org/|alt=Wikisource logo]]<span>[https://www.wikisource.org/ Wikisource]<br/><small style="color:#555;">Free-content library</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikispecies-logo.svg|35px|link=https://species.wikimedia.org/|alt=Wikispecies logo]]<span>[https://species.wikimedia.org/ Wikispecies]<br/><small style="color:#555;">Directory of species</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikiversity logo 2017.svg|41px|link=https://www.wikiversity.org/|alt=Wikiversity logo]]<span>[https://www.wikiversity.org/ Wikiversity]<br/><small style="color:#555;">Free learning tools</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikivoyage-Logo-v3-icon.svg|35px|link=https://www.wikivoyage.org/|alt=Wikivoyage logo]]<span>[https://www.wikivoyage.org/ Wikivoyage]<br/><small style="color:#555;">Free travel guide</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wiktionary-logo-v2.svg|35px|link=https://www.wiktionary.org/|alt=Wiktionary logo]]<span>[https://www.wiktionary.org/ Wiktionary]<br/><small style="color:#555;">Dictionary and thesaurus</small></span></li> </ul> </div> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> sqqnlmlgl2eejn6h1edrw231bhol386 User:Iiirxs/Starter kit/Wikipedia languages00 2 176027 746076 2026-06-12T12:24:41Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746076 wikitext text/x-wiki <div style="border:1px solid #CBD5E1;border-radius:4px;background:#ffffff;overflow:hidden;"> <div style="background:#F8FAFC;border-bottom:1px solid #CBD5E1;padding:8px 16px;font-weight:bold;">Wikipedia languages</div> <div style="padding:16px;"> Many [https://meta.wikimedia.org/wiki/List_of_Wikipedias other Wikipedias are available]; some of the largest are listed below. <ul style="list-style:none;margin:8px 0 0 0;padding:0;"> <li style="margin-bottom:12px;"> <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;"> <div style="flex:1;height:1px;background:#CBD5E1;"></div> <div style="font-weight:bold;white-space:nowrap;">1,000,000+ articles</div> <div style="flex:1;height:1px;background:#CBD5E1;"></div> </div> <div style="line-height:2;"> [https://ar.wikipedia.org/wiki/ العربية] &nbsp;·&nbsp; [https://de.wikipedia.org/wiki/ Deutsch] &nbsp;·&nbsp; [https://es.wikipedia.org/wiki/ Español] &nbsp;·&nbsp; [https://fa.wikipedia.org/wiki/ فارسی]&lrm; · [https://fr.wikipedia.org/wiki/ Français] &nbsp;·&nbsp; [https://it.wikipedia.org/wiki/ Italiano] &nbsp;·&nbsp; [https://nl.wikipedia.org/wiki/ Nederlands] &nbsp;·&nbsp; [https://ja.wikipedia.org/wiki/ 日本語] &nbsp;·&nbsp; [https://pl.wikipedia.org/wiki/ Polski] &nbsp;·&nbsp; [https://pt.wikipedia.org/wiki/ Português] &nbsp;·&nbsp; [https://ru.wikipedia.org/wiki/ Русский] &nbsp;·&nbsp; [https://sv.wikipedia.org/wiki/ Svenska] &nbsp;·&nbsp; [https://uk.wikipedia.org/wiki/ Українська] &nbsp;·&nbsp; [https://vi.wikipedia.org/wiki/ Tiếng Việt] &nbsp;·&nbsp; [https://zh.wikipedia.org/wiki/ 中文] </div> </li> <li style="margin-bottom:12px;"> <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;"> <div style="flex:1;height:1px;background:#CBD5E1;"></div> <div style="font-weight:bold;white-space:nowrap;">250,000+ articles</div> <div style="flex:1;height:1px;background:#CBD5E1;"></div> </div> <div style="line-height:2;"> [https://id.wikipedia.org/wiki/ Bahasa Indonesia] &nbsp;·&nbsp; [https://ms.wikipedia.org/wiki/ Bahasa Melayu] &nbsp;·&nbsp; [https://nan.wikipedia.org/wiki/ 閩南語] &nbsp;·&nbsp; [https://bg.wikipedia.org/wiki/ Български] ·&nbsp; [https://ca.wikipedia.org/wiki/ Català] &nbsp;·&nbsp; [https://cs.wikipedia.org/wiki/ Čeština] &nbsp;·&nbsp; [https://da.wikipedia.org/wiki/ Dansk] &nbsp;·&nbsp; [https://et.wikipedia.org/wiki/ Eesti] &nbsp;·&nbsp; [https://el.wikipedia.org/wiki/ Ελληνικά] &nbsp;·&nbsp; [https://eo.wikipedia.org/wiki/ Esperanto] &nbsp;·&nbsp; [https://eu.wikipedia.org/wiki/ Euskara] &nbsp;·&nbsp; [https://he.wikipedia.org/wiki/ עברית] &nbsp;·&nbsp; [https://hy.wikipedia.org/wiki/ Հայերեն] &nbsp;·&nbsp; [https://ko.wikipedia.org/wiki/ 한국어] &nbsp;·&nbsp; [https://hu.wikipedia.org/wiki/ Magyar] &nbsp;·&nbsp; [https://no.wikipedia.org/wiki/ Norsk] &nbsp;·&nbsp; [https://ro.wikipedia.org/wiki/ Română] &nbsp;·&nbsp; [https://simple.wikipedia.org/wiki/ Simple English] &nbsp;·&nbsp; [https://sk.wikipedia.org/wiki/ Slovenčina] &nbsp;·&nbsp; [https://sr.wikipedia.org/wiki/ Српски] &nbsp;·&nbsp; [https://sh.wikipedia.org/wiki/ Srpskohrvatski] &nbsp;·&nbsp; [https://fi.wikipedia.org/wiki/ Suomi] &nbsp;·&nbsp; [https://tr.wikipedia.org/wiki/ Türkçe] &nbsp;·&nbsp; [https://uz.wikipedia.org/wiki/ Oʻzbek] </div> </li> <li style="margin-bottom:4px;"> <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;"> <div style="flex:1;height:1px;background:#CBD5E1;"></div> <div style="font-weight:bold;white-space:nowrap;">50,000+ articles</div> <div style="flex:1;height:1px;background:#CBD5E1;"></div> </div> <div style="line-height:2;"> [https://ast.wikipedia.org/wiki/ Asturianu] &nbsp;·&nbsp; [https://az.wikipedia.org/wiki/ Azərbaycanca] &nbsp;·&nbsp; [https://bn.wikipedia.org/wiki/ বাংলা] &nbsp;·&nbsp; [https://bs.wikipedia.org/wiki/ Bosanski] &nbsp;·&nbsp; [https://ckb.wikipedia.org/wiki/ کوردی] &nbsp;·&nbsp; [https://fy.wikipedia.org/wiki/ Frysk] &nbsp;·&nbsp; [https://ga.wikipedia.org/wiki/ Gaeilge] &nbsp;·&nbsp; [https://gl.wikipedia.org/wiki/ Galego] &nbsp;·&nbsp; [https://hr.wikipedia.org/wiki/ Hrvatski] &nbsp;·&nbsp; [https://ka.wikipedia.org/wiki/ ქართული] &nbsp;·&nbsp; [https://ku.wikipedia.org/wiki/ Kurdî] &nbsp;·&nbsp; [https://lv.wikipedia.org/wiki/ Latviešu] &nbsp;·&nbsp; [https://lt.wikipedia.org/wiki/ Lietuvių] &nbsp;·&nbsp; [https://ml.wikipedia.org/wiki/ മലയാളം] &nbsp;·&nbsp; [https://mk.wikipedia.org/wiki/ Македонски] &nbsp;·&nbsp; [https://my.wikipedia.org/wiki/ မြန်မာဘာသာ] &nbsp;·&nbsp; [https://nn.wikipedia.org/wiki/ Norsk nynorsk] &nbsp;·&nbsp; [https://pa.wikipedia.org/wiki/ ਪੰਜਾਬੀ] &nbsp;·&nbsp; [https://sq.wikipedia.org/wiki/ Shqip] &nbsp;·&nbsp; [https://sl.wikipedia.org/wiki/ Slovenščina] &nbsp;·&nbsp; [https://th.wikipedia.org/wiki/ ไทย] &nbsp;·&nbsp; [https://te.wikipedia.org/wiki/ తెలుగు] &nbsp;·&nbsp; [https://ur.wikipedia.org/wiki/ اردو] </div> </li> </ul> </div> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> qfil1o4vm3tqidfgmg9xjryqel5ppoz User:Iiirxs/Starter kit/Wb11 2 176028 746078 2026-06-12T12:29:30Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746078 wikitext text/x-wiki <div style="text-align: center; font-family: 'Linux Libertine', Georgia, Times, serif; margin: 1.5em 0;"> <span style="font-size: 2.3em; line-height: 1.2;">Welcome to {{#language:{{PAGELANGUAGE}}}} Wikipedia</span><br/> <span style="font-size: 1.1em; color: #54595d;">The free encyclopedia that anyone can edit</span><br/> <span style="font-size: 0.95em; color: #72777d; margin-top: 0.5em; display: inline-block;">{{NUMBEROFACTIVEUSERS}} active editors • '''{{NUMBEROFARTICLES}}''' articles in this {{SITENAME}}</span> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> 2gaz0l1265uxned195lmw3a6r0oocxa User:Iiirxs/Starter kit/Cc11 2 176029 746079 2026-06-12T12:29:36Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746079 wikitext text/x-wiki <div style="margin:10px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1);background:#fff;"> {| style="border-spacing:1px;border-collapse:separate;width:100%;text-align:center;font-size:0.9em;padding:2px 3px;" class="hp-portalen" | style="background:#F9F9F0;border-top:5px solid #999933;padding:3px 0.25em;width:50%;text-align:center;" | Countries & Geography | style="background:#F4F9F0;border-top:5px solid #669933;padding:3px 0.25em;width:50%;text-align:center;" | Arts & Literature |} </div> <noinclude>[[Category:Starter kit templates]]</noinclude> 88mr1560e6e53mjf5snqsnfobgm5qg0 User:Iiirxs/Starter kit/Fa11 2 176030 746080 2026-06-12T12:29:45Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746080 wikitext text/x-wiki <div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;"> <div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Featured article'''</div> <!-- Add a short excerpt from any well-written article on your wiki. No need to update daily — refresh when a new article is ready. To add an image: [[File:Filename.jpg|112px|left|alt=description]] --> Add article title here – Add a short excerpt here (2–3 sentences). Introduce the topic clearly so readers want to learn more. <!-- Replace "Full article..." below with: [[Article name|Full article...]] --> <small>(Full article...)</small> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> 8f0hxcd6j5x931os1d5plbo2g7n8veu User:Iiirxs/Starter kit/Wsp11 2 176031 746081 2026-06-12T12:29:56Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746081 wikitext text/x-wiki <div style="border:1px solid #CBD5E1;border-radius:4px;background:#ffffff;overflow:hidden;margin-bottom:16px;"> <div style="background:#F8FAFC;border-bottom:1px solid #CBD5E1;padding:8px 16px;font-weight:bold;">Wikipedia's sister projects</div> <div style="padding:16px;"> Wikipedia is written by volunteer editors and hosted by the [https://wikimediafoundation.org/ Wikimedia Foundation], a non-profit organization that also hosts a range of other volunteer [https://wikimediafoundation.org/our-work/wikimedia-projects/ projects]: <ul style="list-style:none;margin:8px 0 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;"> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Commons-logo.svg|31px|link=https://commons.wikimedia.org/|alt=Commons logo]]<span>[https://commons.wikimedia.org/ Commons]<br/><small style="color:#555;">Free media repository</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:MediaWiki-2020-icon.svg|35px|link=https://www.mediawiki.org/|alt=MediaWiki logo]]<span>[https://www.mediawiki.org/ MediaWiki]<br/><small style="color:#555;">Wiki software development</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikimedia Community Logo.svg|35px|link=https://meta.wikimedia.org/|alt=Meta-Wiki logo]]<span>[https://meta.wikimedia.org/ Meta-Wiki]<br/><small style="color:#555;">Wikimedia project coordination</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikibooks-logo.svg|35px|link=https://www.wikibooks.org/|alt=Wikibooks logo]]<span>[https://www.wikibooks.org/ Wikibooks]<br/><small style="color:#555;">Free textbooks and manuals</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikidata-logo.svg|47px|link=https://www.wikidata.org/|alt=Wikidata logo]]<span>[https://www.wikidata.org/ Wikidata]<br/><small style="color:#555;">Free knowledge base</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikinews-logo.svg|51px|link=https://www.wikinews.org/|alt=Wikinews logo]]<span>[https://www.wikinews.org/ Wikinews]<br/><small style="color:#555;">Free-content news</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikiquote-logo.svg|35px|link=https://www.wikiquote.org/|alt=Wikiquote logo]]<span>[https://www.wikiquote.org/ Wikiquote]<br/><small style="color:#555;">Collection of quotations</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikisource-logo.svg|35px|link=https://www.wikisource.org/|alt=Wikisource logo]]<span>[https://www.wikisource.org/ Wikisource]<br/><small style="color:#555;">Free-content library</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikispecies-logo.svg|35px|link=https://species.wikimedia.org/|alt=Wikispecies logo]]<span>[https://species.wikimedia.org/ Wikispecies]<br/><small style="color:#555;">Directory of species</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikiversity logo 2017.svg|41px|link=https://www.wikiversity.org/|alt=Wikiversity logo]]<span>[https://www.wikiversity.org/ Wikiversity]<br/><small style="color:#555;">Free learning tools</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikivoyage-Logo-v3-icon.svg|35px|link=https://www.wikivoyage.org/|alt=Wikivoyage logo]]<span>[https://www.wikivoyage.org/ Wikivoyage]<br/><small style="color:#555;">Free travel guide</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wiktionary-logo-v2.svg|35px|link=https://www.wiktionary.org/|alt=Wiktionary logo]]<span>[https://www.wiktionary.org/ Wiktionary]<br/><small style="color:#555;">Dictionary and thesaurus</small></span></li> </ul> </div> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> sqqnlmlgl2eejn6h1edrw231bhol386 User:Iiirxs/Starter kit/Wl11 2 176032 746082 2026-06-12T12:30:59Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746082 wikitext text/x-wiki <div style="border:1px solid #CBD5E1;border-radius:4px;background:#ffffff;overflow:hidden;"> <div style="background:#F8FAFC;border-bottom:1px solid #CBD5E1;padding:8px 16px;font-weight:bold;">Wikipedia languages</div> <div style="padding:16px;"> Many [https://meta.wikimedia.org/wiki/List_of_Wikipedias other Wikipedias are available]; some of the largest are listed below. <ul style="list-style:none;margin:8px 0 0 0;padding:0;"> <li style="margin-bottom:12px;"> <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;"> <div style="flex:1;height:1px;background:#CBD5E1;"></div> <div style="font-weight:bold;white-space:nowrap;">1,000,000+ articles</div> <div style="flex:1;height:1px;background:#CBD5E1;"></div> </div> <div style="line-height:2;"> [https://ar.wikipedia.org/wiki/ العربية] &nbsp;·&nbsp; [https://de.wikipedia.org/wiki/ Deutsch] &nbsp;·&nbsp; [https://es.wikipedia.org/wiki/ Español] &nbsp;·&nbsp; [https://fa.wikipedia.org/wiki/ فارسی]&lrm; · [https://fr.wikipedia.org/wiki/ Français] &nbsp;·&nbsp; [https://it.wikipedia.org/wiki/ Italiano] &nbsp;·&nbsp; [https://nl.wikipedia.org/wiki/ Nederlands] &nbsp;·&nbsp; [https://ja.wikipedia.org/wiki/ 日本語] &nbsp;·&nbsp; [https://pl.wikipedia.org/wiki/ Polski] &nbsp;·&nbsp; [https://pt.wikipedia.org/wiki/ Português] &nbsp;·&nbsp; [https://ru.wikipedia.org/wiki/ Русский] &nbsp;·&nbsp; [https://sv.wikipedia.org/wiki/ Svenska] &nbsp;·&nbsp; [https://uk.wikipedia.org/wiki/ Українська] &nbsp;·&nbsp; [https://vi.wikipedia.org/wiki/ Tiếng Việt] &nbsp;·&nbsp; [https://zh.wikipedia.org/wiki/ 中文] </div> </li> <li style="margin-bottom:12px;"> <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;"> <div style="flex:1;height:1px;background:#CBD5E1;"></div> <div style="font-weight:bold;white-space:nowrap;">250,000+ articles</div> <div style="flex:1;height:1px;background:#CBD5E1;"></div> </div> <div style="line-height:2;"> [https://id.wikipedia.org/wiki/ Bahasa Indonesia] &nbsp;·&nbsp; [https://ms.wikipedia.org/wiki/ Bahasa Melayu] &nbsp;·&nbsp; [https://nan.wikipedia.org/wiki/ 閩南語] &nbsp;·&nbsp; [https://bg.wikipedia.org/wiki/ Български] ·&nbsp; [https://ca.wikipedia.org/wiki/ Català] &nbsp;·&nbsp; [https://cs.wikipedia.org/wiki/ Čeština] &nbsp;·&nbsp; [https://da.wikipedia.org/wiki/ Dansk] &nbsp;·&nbsp; [https://et.wikipedia.org/wiki/ Eesti] &nbsp;·&nbsp; [https://el.wikipedia.org/wiki/ Ελληνικά] &nbsp;·&nbsp; [https://eo.wikipedia.org/wiki/ Esperanto] &nbsp;·&nbsp; [https://eu.wikipedia.org/wiki/ Euskara] &nbsp;·&nbsp; [https://he.wikipedia.org/wiki/ עברית] &nbsp;·&nbsp; [https://hy.wikipedia.org/wiki/ Հայերեն] &nbsp;·&nbsp; [https://ko.wikipedia.org/wiki/ 한국어] &nbsp;·&nbsp; [https://hu.wikipedia.org/wiki/ Magyar] &nbsp;·&nbsp; [https://no.wikipedia.org/wiki/ Norsk] &nbsp;·&nbsp; [https://ro.wikipedia.org/wiki/ Română] &nbsp;·&nbsp; [https://simple.wikipedia.org/wiki/ Simple English] &nbsp;·&nbsp; [https://sk.wikipedia.org/wiki/ Slovenčina] &nbsp;·&nbsp; [https://sr.wikipedia.org/wiki/ Српски] &nbsp;·&nbsp; [https://sh.wikipedia.org/wiki/ Srpskohrvatski] &nbsp;·&nbsp; [https://fi.wikipedia.org/wiki/ Suomi] &nbsp;·&nbsp; [https://tr.wikipedia.org/wiki/ Türkçe] &nbsp;·&nbsp; [https://uz.wikipedia.org/wiki/ Oʻzbek] </div> </li> <li style="margin-bottom:4px;"> <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;"> <div style="flex:1;height:1px;background:#CBD5E1;"></div> <div style="font-weight:bold;white-space:nowrap;">50,000+ articles</div> <div style="flex:1;height:1px;background:#CBD5E1;"></div> </div> <div style="line-height:2;"> [https://ast.wikipedia.org/wiki/ Asturianu] &nbsp;·&nbsp; [https://az.wikipedia.org/wiki/ Azərbaycanca] &nbsp;·&nbsp; [https://bn.wikipedia.org/wiki/ বাংলা] &nbsp;·&nbsp; [https://bs.wikipedia.org/wiki/ Bosanski] &nbsp;·&nbsp; [https://ckb.wikipedia.org/wiki/ کوردی] &nbsp;·&nbsp; [https://fy.wikipedia.org/wiki/ Frysk] &nbsp;·&nbsp; [https://ga.wikipedia.org/wiki/ Gaeilge] &nbsp;·&nbsp; [https://gl.wikipedia.org/wiki/ Galego] &nbsp;·&nbsp; [https://hr.wikipedia.org/wiki/ Hrvatski] &nbsp;·&nbsp; [https://ka.wikipedia.org/wiki/ ქართული] &nbsp;·&nbsp; [https://ku.wikipedia.org/wiki/ Kurdî] &nbsp;·&nbsp; [https://lv.wikipedia.org/wiki/ Latviešu] &nbsp;·&nbsp; [https://lt.wikipedia.org/wiki/ Lietuvių] &nbsp;·&nbsp; [https://ml.wikipedia.org/wiki/ മലയാളം] &nbsp;·&nbsp; [https://mk.wikipedia.org/wiki/ Македонски] &nbsp;·&nbsp; [https://my.wikipedia.org/wiki/ မြန်မာဘာသာ] &nbsp;·&nbsp; [https://nn.wikipedia.org/wiki/ Norsk nynorsk] &nbsp;·&nbsp; [https://pa.wikipedia.org/wiki/ ਪੰਜਾਬੀ] &nbsp;·&nbsp; [https://sq.wikipedia.org/wiki/ Shqip] &nbsp;·&nbsp; [https://sl.wikipedia.org/wiki/ Slovenščina] &nbsp;·&nbsp; [https://th.wikipedia.org/wiki/ ไทย] &nbsp;·&nbsp; [https://te.wikipedia.org/wiki/ తెలుగు] &nbsp;·&nbsp; [https://ur.wikipedia.org/wiki/ اردو] </div> </li> </ul> </div> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> qfil1o4vm3tqidfgmg9xjryqel5ppoz User talk:Sebastian Berlin (WMSE) 3 176033 746084 2026-06-12T12:49:10Z Sebastian Berlin (WMSE) 33576 /* Hello from OAuth 2.0! */ Test edit via OAuth 2.0 746084 wikitext text/x-wiki == Hello from OAuth 2.0! == This message was posted using OAuth 2.0 Hello World application. ay4m2ekippi1y0p8jsgrewzlknfv663 User:Iiirxs/Starter kit/AA 2 176034 746085 2026-06-12T13:03:18Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746085 wikitext text/x-wiki <div style="text-align: center; font-family: 'Linux Libertine', Georgia, Times, serif; margin: 1.5em 0;"> <span style="font-size: 2.3em; line-height: 1.2;">Welcome to {{#language:{{PAGELANGUAGE}}}} Wikipedia</span><br/> <span style="font-size: 1.1em; color: #54595d;">The free encyclopedia that anyone can edit</span><br/> <span style="font-size: 0.95em; color: #72777d; margin-top: 0.5em; display: inline-block;">{{NUMBEROFACTIVEUSERS}} active editors • '''{{NUMBEROFARTICLES}}''' articles in this {{SITENAME}}</span> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> 2gaz0l1265uxned195lmw3a6r0oocxa User:Iiirxs/Starter kit/CC 2 176035 746086 2026-06-12T13:03:31Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746086 wikitext text/x-wiki <div style="margin:10px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1);background:#fff;"> {| style="border-spacing:1px;border-collapse:separate;width:100%;text-align:center;font-size:0.9em;padding:2px 3px;" class="hp-portalen" | style="background:#F9F9F0;border-top:5px solid #999933;padding:3px 0.25em;width:50%;text-align:center;" | Countries & Geography | style="background:#F4F9F0;border-top:5px solid #669933;padding:3px 0.25em;width:50%;text-align:center;" | Arts & Literature |} </div> <noinclude>[[Category:Starter kit templates]]</noinclude> 88mr1560e6e53mjf5snqsnfobgm5qg0 User:Iiirxs/Starter kit/FA 2 176036 746087 2026-06-12T13:03:41Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746087 wikitext text/x-wiki <div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;"> <div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Featured article'''</div> <!-- Add a short excerpt from any well-written article on your wiki. No need to update daily — refresh when a new article is ready. To add an image: [[File:Filename.jpg|112px|left|alt=description]] --> Add article title here – Add a short excerpt here (2–3 sentences). Introduce the topic clearly so readers want to learn more. <!-- Replace "Full article..." below with: [[Article name|Full article...]] --> <small>(Full article...)</small> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> 8f0hxcd6j5x931os1d5plbo2g7n8veu User:Iiirxs/Starter kit/Wsp 2 176037 746088 2026-06-12T13:03:48Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746088 wikitext text/x-wiki <div style="border:1px solid #CBD5E1;border-radius:4px;background:#ffffff;overflow:hidden;margin-bottom:16px;"> <div style="background:#F8FAFC;border-bottom:1px solid #CBD5E1;padding:8px 16px;font-weight:bold;">Wikipedia's sister projects</div> <div style="padding:16px;"> Wikipedia is written by volunteer editors and hosted by the [https://wikimediafoundation.org/ Wikimedia Foundation], a non-profit organization that also hosts a range of other volunteer [https://wikimediafoundation.org/our-work/wikimedia-projects/ projects]: <ul style="list-style:none;margin:8px 0 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;"> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Commons-logo.svg|31px|link=https://commons.wikimedia.org/|alt=Commons logo]]<span>[https://commons.wikimedia.org/ Commons]<br/><small style="color:#555;">Free media repository</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:MediaWiki-2020-icon.svg|35px|link=https://www.mediawiki.org/|alt=MediaWiki logo]]<span>[https://www.mediawiki.org/ MediaWiki]<br/><small style="color:#555;">Wiki software development</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikimedia Community Logo.svg|35px|link=https://meta.wikimedia.org/|alt=Meta-Wiki logo]]<span>[https://meta.wikimedia.org/ Meta-Wiki]<br/><small style="color:#555;">Wikimedia project coordination</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikibooks-logo.svg|35px|link=https://www.wikibooks.org/|alt=Wikibooks logo]]<span>[https://www.wikibooks.org/ Wikibooks]<br/><small style="color:#555;">Free textbooks and manuals</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikidata-logo.svg|47px|link=https://www.wikidata.org/|alt=Wikidata logo]]<span>[https://www.wikidata.org/ Wikidata]<br/><small style="color:#555;">Free knowledge base</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikinews-logo.svg|51px|link=https://www.wikinews.org/|alt=Wikinews logo]]<span>[https://www.wikinews.org/ Wikinews]<br/><small style="color:#555;">Free-content news</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikiquote-logo.svg|35px|link=https://www.wikiquote.org/|alt=Wikiquote logo]]<span>[https://www.wikiquote.org/ Wikiquote]<br/><small style="color:#555;">Collection of quotations</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikisource-logo.svg|35px|link=https://www.wikisource.org/|alt=Wikisource logo]]<span>[https://www.wikisource.org/ Wikisource]<br/><small style="color:#555;">Free-content library</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikispecies-logo.svg|35px|link=https://species.wikimedia.org/|alt=Wikispecies logo]]<span>[https://species.wikimedia.org/ Wikispecies]<br/><small style="color:#555;">Directory of species</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikiversity logo 2017.svg|41px|link=https://www.wikiversity.org/|alt=Wikiversity logo]]<span>[https://www.wikiversity.org/ Wikiversity]<br/><small style="color:#555;">Free learning tools</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikivoyage-Logo-v3-icon.svg|35px|link=https://www.wikivoyage.org/|alt=Wikivoyage logo]]<span>[https://www.wikivoyage.org/ Wikivoyage]<br/><small style="color:#555;">Free travel guide</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wiktionary-logo-v2.svg|35px|link=https://www.wiktionary.org/|alt=Wiktionary logo]]<span>[https://www.wiktionary.org/ Wiktionary]<br/><small style="color:#555;">Dictionary and thesaurus</small></span></li> </ul> </div> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> sqqnlmlgl2eejn6h1edrw231bhol386 User:Iiirxs/Starter kit/Wl 2 176038 746089 2026-06-12T13:04:04Z Iiirxs 49827 Initialised by StarterKit tool — ready for translation 746089 wikitext text/x-wiki <div style="border:1px solid #CBD5E1;border-radius:4px;background:#ffffff;overflow:hidden;"> <div style="background:#F8FAFC;border-bottom:1px solid #CBD5E1;padding:8px 16px;font-weight:bold;">Wikipedia languages</div> <div style="padding:16px;"> Many [https://meta.wikimedia.org/wiki/List_of_Wikipedias other Wikipedias are available]; some of the largest are listed below. <ul style="list-style:none;margin:8px 0 0 0;padding:0;"> <li style="margin-bottom:12px;"> <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;"> <div style="flex:1;height:1px;background:#CBD5E1;"></div> <div style="font-weight:bold;white-space:nowrap;">1,000,000+ articles</div> <div style="flex:1;height:1px;background:#CBD5E1;"></div> </div> <div style="line-height:2;"> [https://ar.wikipedia.org/wiki/ العربية] &nbsp;·&nbsp; [https://de.wikipedia.org/wiki/ Deutsch] &nbsp;·&nbsp; [https://es.wikipedia.org/wiki/ Español] &nbsp;·&nbsp; [https://fa.wikipedia.org/wiki/ فارسی]&lrm; · [https://fr.wikipedia.org/wiki/ Français] &nbsp;·&nbsp; [https://it.wikipedia.org/wiki/ Italiano] &nbsp;·&nbsp; [https://nl.wikipedia.org/wiki/ Nederlands] &nbsp;·&nbsp; [https://ja.wikipedia.org/wiki/ 日本語] &nbsp;·&nbsp; [https://pl.wikipedia.org/wiki/ Polski] &nbsp;·&nbsp; [https://pt.wikipedia.org/wiki/ Português] &nbsp;·&nbsp; [https://ru.wikipedia.org/wiki/ Русский] &nbsp;·&nbsp; [https://sv.wikipedia.org/wiki/ Svenska] &nbsp;·&nbsp; [https://uk.wikipedia.org/wiki/ Українська] &nbsp;·&nbsp; [https://vi.wikipedia.org/wiki/ Tiếng Việt] &nbsp;·&nbsp; [https://zh.wikipedia.org/wiki/ 中文] </div> </li> <li style="margin-bottom:12px;"> <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;"> <div style="flex:1;height:1px;background:#CBD5E1;"></div> <div style="font-weight:bold;white-space:nowrap;">250,000+ articles</div> <div style="flex:1;height:1px;background:#CBD5E1;"></div> </div> <div style="line-height:2;"> [https://id.wikipedia.org/wiki/ Bahasa Indonesia] &nbsp;·&nbsp; [https://ms.wikipedia.org/wiki/ Bahasa Melayu] &nbsp;·&nbsp; [https://nan.wikipedia.org/wiki/ 閩南語] &nbsp;·&nbsp; [https://bg.wikipedia.org/wiki/ Български] ·&nbsp; [https://ca.wikipedia.org/wiki/ Català] &nbsp;·&nbsp; [https://cs.wikipedia.org/wiki/ Čeština] &nbsp;·&nbsp; [https://da.wikipedia.org/wiki/ Dansk] &nbsp;·&nbsp; [https://et.wikipedia.org/wiki/ Eesti] &nbsp;·&nbsp; [https://el.wikipedia.org/wiki/ Ελληνικά] &nbsp;·&nbsp; [https://eo.wikipedia.org/wiki/ Esperanto] &nbsp;·&nbsp; [https://eu.wikipedia.org/wiki/ Euskara] &nbsp;·&nbsp; [https://he.wikipedia.org/wiki/ עברית] &nbsp;·&nbsp; [https://hy.wikipedia.org/wiki/ Հայերեն] &nbsp;·&nbsp; [https://ko.wikipedia.org/wiki/ 한국어] &nbsp;·&nbsp; [https://hu.wikipedia.org/wiki/ Magyar] &nbsp;·&nbsp; [https://no.wikipedia.org/wiki/ Norsk] &nbsp;·&nbsp; [https://ro.wikipedia.org/wiki/ Română] &nbsp;·&nbsp; [https://simple.wikipedia.org/wiki/ Simple English] &nbsp;·&nbsp; [https://sk.wikipedia.org/wiki/ Slovenčina] &nbsp;·&nbsp; [https://sr.wikipedia.org/wiki/ Српски] &nbsp;·&nbsp; [https://sh.wikipedia.org/wiki/ Srpskohrvatski] &nbsp;·&nbsp; [https://fi.wikipedia.org/wiki/ Suomi] &nbsp;·&nbsp; [https://tr.wikipedia.org/wiki/ Türkçe] &nbsp;·&nbsp; [https://uz.wikipedia.org/wiki/ Oʻzbek] </div> </li> <li style="margin-bottom:4px;"> <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;"> <div style="flex:1;height:1px;background:#CBD5E1;"></div> <div style="font-weight:bold;white-space:nowrap;">50,000+ articles</div> <div style="flex:1;height:1px;background:#CBD5E1;"></div> </div> <div style="line-height:2;"> [https://ast.wikipedia.org/wiki/ Asturianu] &nbsp;·&nbsp; [https://az.wikipedia.org/wiki/ Azərbaycanca] &nbsp;·&nbsp; [https://bn.wikipedia.org/wiki/ বাংলা] &nbsp;·&nbsp; [https://bs.wikipedia.org/wiki/ Bosanski] &nbsp;·&nbsp; [https://ckb.wikipedia.org/wiki/ کوردی] &nbsp;·&nbsp; [https://fy.wikipedia.org/wiki/ Frysk] &nbsp;·&nbsp; [https://ga.wikipedia.org/wiki/ Gaeilge] &nbsp;·&nbsp; [https://gl.wikipedia.org/wiki/ Galego] &nbsp;·&nbsp; [https://hr.wikipedia.org/wiki/ Hrvatski] &nbsp;·&nbsp; [https://ka.wikipedia.org/wiki/ ქართული] &nbsp;·&nbsp; [https://ku.wikipedia.org/wiki/ Kurdî] &nbsp;·&nbsp; [https://lv.wikipedia.org/wiki/ Latviešu] &nbsp;·&nbsp; [https://lt.wikipedia.org/wiki/ Lietuvių] &nbsp;·&nbsp; [https://ml.wikipedia.org/wiki/ മലയാളം] &nbsp;·&nbsp; [https://mk.wikipedia.org/wiki/ Македонски] &nbsp;·&nbsp; [https://my.wikipedia.org/wiki/ မြန်မာဘာသာ] &nbsp;·&nbsp; [https://nn.wikipedia.org/wiki/ Norsk nynorsk] &nbsp;·&nbsp; [https://pa.wikipedia.org/wiki/ ਪੰਜਾਬੀ] &nbsp;·&nbsp; [https://sq.wikipedia.org/wiki/ Shqip] &nbsp;·&nbsp; [https://sl.wikipedia.org/wiki/ Slovenščina] &nbsp;·&nbsp; [https://th.wikipedia.org/wiki/ ไทย] &nbsp;·&nbsp; [https://te.wikipedia.org/wiki/ తెలుగు] &nbsp;·&nbsp; [https://ur.wikipedia.org/wiki/ اردو] </div> </li> </ul> </div> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> qfil1o4vm3tqidfgmg9xjryqel5ppoz User:Trialpears/XFDcloser log 2 176041 746125 2026-06-12T16:18:31Z Trialpears 43074 Closed [[Wikipedia:Miscellany for deletion/Wikipedia:Sandbox/01]] as no consensus 746125 wikitext text/x-wiki This is a log of all XfD closes made by this user using [[WP:XFDcloser|XFDcloser]]. If you no longer wish to keep this log, you can turn it off using the preferences panel and nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]]. === June 2026 === #Closed [[Wikipedia:Miscellany for deletion/Wikipedia:Sandbox/01]] as no consensus 16:18, 12 June 2026 (UTC) 3o5auenkhmzugcjdazc0fmh9aw6b8dg 746133 746125 2026-06-12T17:54:03Z Trialpears 43074 Closed [[Wikipedia:Redirects for discussion/Log/2026 June 12#Test redirect]] as no consensus 746133 wikitext text/x-wiki This is a log of all XfD closes made by this user using [[WP:XFDcloser|XFDcloser]]. If you no longer wish to keep this log, you can turn it off using the preferences panel and nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]]. === June 2026 === #Closed [[Wikipedia:Miscellany for deletion/Wikipedia:Sandbox/01]] as no consensus 16:18, 12 June 2026 (UTC) #Closed [[Wikipedia:Redirects for discussion/Log/2026 June 12#Test redirect]] as no consensus 17:54, 12 June 2026 (UTC) qu2jxhzivlo7gahyxvi2uozit0nhfma 746137 746133 2026-06-12T18:06:43Z Trialpears 43074 Closed [[Wikipedia:Redirects for discussion/Log/2026 June 12#Test redirect]] as no consensus 746137 wikitext text/x-wiki This is a log of all XfD closes made by this user using [[WP:XFDcloser|XFDcloser]]. If you no longer wish to keep this log, you can turn it off using the preferences panel and nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]]. === June 2026 === #Closed [[Wikipedia:Miscellany for deletion/Wikipedia:Sandbox/01]] as no consensus 16:18, 12 June 2026 (UTC) #Closed [[Wikipedia:Redirects for discussion/Log/2026 June 12#Test redirect]] as no consensus 17:54, 12 June 2026 (UTC) #Closed [[Wikipedia:Redirects for discussion/Log/2026 June 12#Test redirect]] as no consensus 18:06, 12 June 2026 (UTC) fmmtpqfe6o8h47pmtcs07z9kez3s2ff Talk:Test redirect 1 176042 746126 2026-06-12T17:52:14Z Trialpears 43074 Redirected page to [[Talk:Foo]] 746126 wikitext text/x-wiki #REDIRECT [[Talk:Foo]] ad7cvhvk84ez9ztjssxo2rhxkus79pp 746149 746126 2026-06-12T18:32:00Z Trialpears 43074 Old RFD: [[Wikipedia:Redirects for discussion/Log/2026 June 12#Test redirect]] closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746149 wikitext text/x-wiki {{Old RfD |date=12 June 2026 |result='''no consensus''' |page=2026 June 12#Test redirect}} 7rs72hvu30gg2cy08dz0g5mhbpe1jxo 746150 746149 2026-06-12T18:32:25Z Trialpears 43074 Undid revision [[Special:Diff/746149|746149]] by [[Special:Contributions/Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 746150 wikitext text/x-wiki #REDIRECT [[Talk:Foo]] ad7cvhvk84ez9ztjssxo2rhxkus79pp Wikipedia:Redirects for discussion/Log/2026 June 12 4 176043 746127 2026-06-12T17:52:29Z Trialpears 43074 Adding [[:Test redirect]]. 746127 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) cgcsjhxzo30odf6muh19s4pdoe26a6q 746132 746127 2026-06-12T17:54:02Z Trialpears 43074 /* Test redirect */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746132 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:White equals sign on grey rounded square.svg|16px|link=|alt=No consensus]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2026 June 12#1781286842|full discussion]]. Result was: </includeonly><noinclude><span id="1781286842"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''no consensus'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:54, 12 June 2026 (UTC) *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> 0ybmlx1qox6c21v5rk7a2snhpuj0bed 746135 746132 2026-06-12T18:06:31Z Trialpears 43074 746135 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) cgcsjhxzo30odf6muh19s4pdoe26a6q 746136 746135 2026-06-12T18:06:42Z Trialpears 43074 /* Test redirect */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746136 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:White equals sign on grey rounded square.svg|16px|link=|alt=No consensus]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2026 June 12#1781287602|full discussion]]. Result was: </includeonly><noinclude><span id="1781287602"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''no consensus'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 18:06, 12 June 2026 (UTC) *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> atyetgxs7hqhmjhr9oc58tbwt5wzzke 746138 746136 2026-06-12T18:07:20Z Trialpears 43074 746138 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) cgcsjhxzo30odf6muh19s4pdoe26a6q 746139 746138 2026-06-12T18:07:30Z Trialpears 43074 /* Test redirect */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746139 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:White equals sign on grey rounded square.svg|16px|link=|alt=No consensus]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2026 June 12#1781287650|full discussion]]. Result was: </includeonly><noinclude><span id="1781287650"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''no consensus'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 18:07, 12 June 2026 (UTC) *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> 7jngzjrj7gkrin7bl6g8i20k1wf4c3r 746140 746139 2026-06-12T18:10:25Z Trialpears 43074 Undid revision [[Special:Diff/746139|746139]] by [[Special:Contributions/Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 746140 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) cgcsjhxzo30odf6muh19s4pdoe26a6q 746141 746140 2026-06-12T18:10:45Z Trialpears 43074 /* Test redirect */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746141 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:White equals sign on grey rounded square.svg|16px|link=|alt=No consensus]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2026 June 12#1781287845|full discussion]]. Result was: </includeonly><noinclude><span id="1781287845"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''no consensus'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 18:10, 12 June 2026 (UTC) *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> 17mkemeuxx53t4h3fo80ej80gypu9wm 746142 746141 2026-06-12T18:12:49Z Trialpears 43074 Undid revision [[Special:Diff/746141|746141]] by [[Special:Contributions/Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 746142 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) cgcsjhxzo30odf6muh19s4pdoe26a6q 746143 746142 2026-06-12T18:12:58Z Trialpears 43074 /* Test redirect */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746143 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:White equals sign on grey rounded square.svg|16px|link=|alt=No consensus]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2026 June 12#1781287978|full discussion]]. Result was: </includeonly><noinclude><span id="1781287978"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''no consensus'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 18:12, 12 June 2026 (UTC) *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> cw8g04nziwta57ao2dr828tq9v6vj7a 746145 746143 2026-06-12T18:30:50Z Trialpears 43074 Undid revision [[Special:Diff/746143|746143]] by [[Special:Contributions/Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 746145 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) cgcsjhxzo30odf6muh19s4pdoe26a6q 746146 746145 2026-06-12T18:30:58Z Trialpears 43074 /* Test redirect */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746146 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:White equals sign on grey rounded square.svg|16px|link=|alt=No consensus]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2026 June 12#1781289058|full discussion]]. Result was: </includeonly><noinclude><span id="1781289058"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''no consensus'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 18:30, 12 June 2026 (UTC) *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> 83empq2jqli4uqzhhpjzwli8gckn3ik 746147 746146 2026-06-12T18:31:48Z Trialpears 43074 Undid revision [[Special:Diff/746146|746146]] by [[Special:Contributions/Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 746147 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) cgcsjhxzo30odf6muh19s4pdoe26a6q 746148 746147 2026-06-12T18:31:55Z Trialpears 43074 /* Test redirect */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746148 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:White equals sign on grey rounded square.svg|16px|link=|alt=No consensus]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2026 June 12#1781289115|full discussion]]. Result was: </includeonly><noinclude><span id="1781289115"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''no consensus'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 18:31, 12 June 2026 (UTC) *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> 9iqlkra4tdkpsbt7viljo1tphb4aa1b 746151 746148 2026-06-12T18:32:56Z Trialpears 43074 746151 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) cgcsjhxzo30odf6muh19s4pdoe26a6q 746152 746151 2026-06-12T18:33:04Z Trialpears 43074 /* Test redirect */ Closed as no consensus ([[WP:XFDC#4.0.16|XFDcloser]]) 746152 wikitext text/x-wiki <noinclude>{{rfd log header|2026|June 11|2026|June 13}}</noinclude> ===[[Wikipedia:Redirects for discussion/Log/2026 June 12|June 12]]=== <noinclude>This is a list of redirects that have been proposed for deletion or other action on June 12, 2026.</noinclude> <!-- Use this format to add a new listing: {{subst:rfd2|redirect=RedirectName|target=CurrentTargetArticle|text=The action you would like to occur (deletion, re-targeting, etc.) and the rationale for that action.}} ~~~~ --> <!-- Add new entries directly below this line. --> ====Test redirect==== <div class="boilerplate rfd vfd xfd-closed mw-archivedtalk" style="background:#FFEEDD; margin-top:0.5em; padding:0 10px 0 10px; border:1px solid #888888;"> <includeonly>[[File:White equals sign on grey rounded square.svg|16px|link=|alt=No consensus]] '''Closed discussion''', see [[Wikipedia:Redirects for discussion/Log/2026 June 12#1781289184|full discussion]]. Result was: </includeonly><noinclude><span id="1781289184"></span> :''The following is an archived discussion concerning one or more redirects. <span style="color:red">'''Please do not modify it.'''</span> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]). No further edits should be made to this section.'' :The result of the discussion was </noinclude>'''no consensus'''<includeonly></div></includeonly><noinclude><!-- Template:Rfd top-->. [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 18:33, 12 June 2026 (UTC) *<span id="Test redirect">{{no redirect|1 = Test redirect }}</span> → [[:Foo#Bar]] <span>&nbsp;<span class="plainlinks lx">([[Talk:Test redirect|talk]] '''·''' [[Special:WhatLinksHere/Test redirect|links]] '''·''' [[Special:PageHistory/Test redirect|history]] '''·''' [[:toolforge:pageviews/?start=2026-05-13&end=2026-06-11&project=test.wikipedia.org&pages=Test_redirect|stats]])</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<small class="plainlinks"><nowiki>[</nowiki>&nbsp;Closure:&nbsp;''[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as keep}}}} keep]/[{{fullurl:Test redirect|action=edit&summary={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as retarget}}}} retarget]<span class="sysop-show">/[{{fullurl:Test redirect|action=delete&wpReason={{Urlencode:[[{{#invoke:TEMPLATENAME|main}}#Test redirect]] closed as delete}}&wpMovetalk=1}} delete]</span>''&nbsp;]</small>&nbsp; test [[User:Trialpears|Trialpears]] ([[User talk:Trialpears|talk]]) 17:52, 12 June 2026 (UTC) :''The above is preserved as an archive of the discussion. <b style="color:red">Please do not modify it.</b> Subsequent comments should be made on an appropriate discussion page (such as the redirect's [[Help:Using talk pages|talk page]] or in a [[Wikipedia:Deletion review|deletion review]]).''</noinclude><!-- Template:Rfd bottom --></div> 2bcvpj0mtnp42928owvk1786e4pvfgq Changi Airport 0 176044 746153 2026-06-11T15:07:41Z en>Hakuna Zar 0 /* Passenger */+ Shanghai Airlines to PVG 746153 wikitext text/x-wiki {{Short description|International airport in Singapore}} {{Redirect|Singapore Airport|other existing and previous airports in Singapore|List of airports in Singapore|the entertainment and retail complex|Jewel Changi Airport}} {{Use British English|date=January 2019}} {{Use dmy dates|date=March 2026}} {{Infobox airport | name = Changi Airport | nativename = {{small|{{nobold|{{lang|ms|Lapangan Terbang Changi}} }} }} | nativename-a = <!-- Asian Script -->{{small|{{nobold|{{lang|zh-hans|樟宜机场}}<br>{{lang|ta|சாங்கி விமான நிலையம்}} }} }} | nativename-r = <!-- Romanisation --> | ensign = | ensign_size = | ensign_alt = | image = Changi Airport logo.svg | image_size = 180px | image_alt = | image2 = Jewel Changi Airport 13-11-2023(1).jpg | caption = | IATA = SIN | ICAO = WSSS | FAA = | TC = | LID = | GPS = | WMO = 48698 | type = Public / Military | owner = [[Singapore Government]]<ref name="sg_mof_nov2025">{{cite web | title=Who manages the reserves? | url=https://www.mof.gov.sg/policies/reserves/who-manages-the-reserves/|work=Policies | agency=[[Ministry of Finance (Singapore)|Ministry of Finance (MOF)]] | publisher=[[Government of Singapore]] | date=12 November 2025|access-date=26 February 2026}}</ref> | operator = [[Changi Airport Group]]<ref>{{cite web|url=https://www.changiairport.com/corporate.html|title=Changi Airport Group|publisher=Changi Airport Group|agency=Ministry of Finance of Singapore|access-date=27 March 2021|archive-date=27 March 2021|archive-url=https://web.archive.org/web/20210327171915/https://www.changiairport.com/corporate.html|url-status=live}}</ref> | city-served = [[Singapore]] | location = [[Changi]], [[East Region, Singapore|East Region]], Singapore | opened = {{ubl|class=nowrap | {{start date|1981|07|01|df=yes}} (Soft launch) | {{start date|1981|12|29|df=yes}} (Officially) }} | closed = <!-- {{end date|YYYY|MM|DD}} --> | passenger_services_ceased = <!-- {{end date|YYYY|MM|DD}} --> | hub = {{ubl|class=nowrap | [[FedEx Express]]<ref name="Fedex"/> | [[Scoot]] | [[Singapore Airlines]]}} | operating_base = <!-- If more than one airline, use {{Unbulleted list|Airline1|Airline2}} --> | built = <!-- military airports --> | used = <!-- military airports --> | commander = <!-- military airports --> | occupants = <!-- military airports --> | timezone = [[Singapore Standard Time|SST]] | utc = [[UTC+08:00]] | summer = | utcs = | elevation-f = 22 | elevation-m = 6.65 | metric-elev = yes | coordinates = {{coord|1|21|33|N|103|59|22|E|region:SG|display=inline,title}} | website = {{URL|www.changiairport.com}} | image_map = | image_mapsize = | image_map_alt = | image_map_caption = | mapframe = yes | pushpin_map = Singapore#Southeast Asia#Asia | pushpin_mapsize = 300px | pushpin_map_alt = | pushpin_map_caption = Location in Singapore | pushpin_relief = | pushpin_image = | pushpin_label = SIN/WSSS | pushpin_label_position = | pushpin_mark = | pushpin_marksize = | r1-number = 02L/20R{{efn|Runway 02L is {{Convert|4000|m|abbr=off}} and 20R is {{Convert|3260|m|abbr=off}} with a [[displaced threshold]] of {{Convert|740|m|abbr=off}}. Thus aircraft landing on 20R will have to avoid touching down on the displaced threshold but may use it for departures.}} | r1-length-f = 13,123 | r1-length-m = 4,000 | r1-surface = [[Asphalt concrete]] | r2-number = 02C/20C{{efn|This AIP Supplement informs aircraft operators and pilots that Runway 02C/20C and new taxiways at Singapore Changi Airport will be open for flights effective from 30 November 2023, 2000UTC.<ref>{{cite web |title=SINGAPORE CHANGI AIRPORT – UPDATED INFORMATION AND DATA FOR RUNWAY 02C/20C AND NEW TAXIWAYS |url=https://www.caas.gov.sg/docs/default-source/docs---ats/singapore-airac-aip-sup-2023-128_singapore-changi-airport---updated-information-and-data-for-runway-02c20c-and-new-taxiways.pdf |website=caas.gov.sg |date=21 September 2023 |access-date=25 October 2023 |archive-date=29 October 2021 |archive-url=https://web.archive.org/web/20211029065958/https://www.caas.gov.sg/docs/default-source/docs---ats/singapore-airac-aip-sup-2021-119_singapore-changi-airport---closure-of-runway-02c_20c-and-taxiways-due-to-changi-east-development-works.pdf }}</ref>}} | r2-length-f = 13,123 | r2-length-m = 4,000 | r2-surface = Asphalt concrete | r3-number = 02R/20L{{efn|The runway is not open until the last quarter of 2027.}} | r3-length-f = 13,123 | r3-length-m = 4,000 | r3-surface = Asphalt concrete | metric-rwy = yes | h1-number = | h1-length-f = | h1-length-m = | h1-surface = <!-- up to h12 --> | stat1-header = Passenger movements | stat1-data = {{increase}} 69,980,000 | stat2-header = Cargo movements (tonnes) | stat2-data = {{increase}} 2,080,000 | stat3-header = Aircraft movements | stat3-data = {{increase}} 374,000 | stat4-header = Economic impact (2017) | stat4-data = US$13.3 billion<ref name="International Air Transport Association">{{cite web|url=https://www.iata.org/en/iata-repository/publications/economic-reports/singapore--value-of-aviation/|title=The importance of air transport to Singapore|work=[[International Air Transport Association]]|access-date=12 May 2020|archive-date=22 September 2020|archive-url=https://web.archive.org/web/20200922085400/https://www.iata.org/en/iata-repository/publications/economic-reports/singapore--value-of-aviation/|url-status=live}}</ref> | stat5-header = Social impact (2017) | stat5-data = 119,000<ref name="International Air Transport Association"/> | stat-year = 2025 unless indicated otherwise | footnotes = Sources: Changi Airport Group;<ref>{{cite web|url=https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html|title=Singapore Changi Airport Statistics (2025)|website=Changi Airport Group|access-date=22 January 2026|archive-date=7 January 2024 |archive-url=https://web.archive.org/web/20240107020244/https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html|url-status=live}}</ref> WAD<ref>{{cite web | url = https://worldaerodata.com/wad.cgi?id=SN90056 | title = Singapore Changi Intl | work = World Aero Data | publisher = WorldAeroData.com | access-date = 2 March 2020 | archive-date = 2 March 2020 | archive-url = https://web.archive.org/web/20200302180659/https://worldaerodata.com/wad.cgi%3Fid%3DSN90056 | url-status = usurped }}</ref> }} '''Changi Airport'''{{efn|Pronounced {{IPAc-en|ˈ|tʃ|ɑː|ŋ|.|i}} {{respell|CHAHNG|ee}}; {{zh|s=樟宜机场}}; {{langx|ms|Lapangan Terbang Changi}}; {{langx|ta|சாங்கி விமான நிலையம்}}.}} {{airport codes|SIN|WSSS}} is the main [[international airport]] of [[Singapore]], and functions as one of the most significant aviation gateways in the [[Asia-Pacific]] region. Situated within the [[Changi]] [[Planning areas of Singapore|planning area]] in the [[East Region, Singapore|eastern part]] of the country, the airport is approximately {{convert|24|km|abbr=off}} east from the [[Central Area, Singapore|Central Area]] and occupies a site spanning about {{convert|25|km2|sqmi|abbr=off}}.<ref>{{cite web|url=https://aim-sg.caas.gov.sg/aip/2021-05-04/final/2021-05-04/html/index-en-GB.html|title=Regulations|website=caas.gov.sg|access-date=3 March 2017|archive-url=https://web.archive.org/web/20150923195740/http://www.caas.gov.sg/caasWeb2010/export/sites/caas/en/Regulations/Aeronautical_Information/AIP/aerodrome/AD_WSSS/WSSS-AD2-1.pdf|archive-date=23 September 2015|url-status=dead}}</ref> The airport is a base for more than 100 international carriers with scheduled services linking Singapore to destinations across Asia, Oceania, Africa, Europe, the Middle East and North America.<ref>{{cite web|title=Airlines|url=https://www.changiairport.com/corporate/partnerships/airlines.html |publisher=Changi Airport Group |access-date=18 November 2021 |archive-date=18 November 2021 |archive-url=https://web.archive.org/web/20211118163210/https://www.changiairport.com/corporate/partnerships/airlines.html |url-status=live }}</ref> As of 2025, Changi Airport handled about 70 million passengers and ranked the [[List of busiest airports by passenger traffic|16th busiest airport by passenger traffic]]<ref name="Chelvan-2026">{{Cite web |last=Loi |first=Esther |date=5 January 2026 |title=Changi Airport handled about 70 million passengers in 2025, an all-time high |url=https://www.straitstimes.com/singapore/transport/changi-airport-handled-about-70m-passengers-in-2025-an-all-time-high |access-date=2 March 2026 |publisher=[[The Straits Times]] }}</ref> as well as the 4th busiest international airport by seat volume based on [[OAG (company)|OAG]]'s records.<ref name="Therese-2026">{{Cite web |last=Soh |first=Therese |date=15 January 2026 |title=Changi Airport handled about 70 million passengers in 2025, an all-time high |url=https://www.businesstimes.com.sg/international/global/changi-airport-ranks-4th-busiest-international-airport-2025-oag-report |access-date=2 March 2026 |location=Singapore |publisher=[[The Business Times (Singapore)|The Business Times]] }}</ref> Changi Airport serves as the headquarters for several aviation and ground handling entities. It is the home base of [[Singapore Airlines]], the nation's [[flag carrier]], along with its associated subsidiaries [[Singapore Airlines Cargo]] and [[Scoot]], a regional [[low-cost carrier]]. The airport also hosts the operations of [[BOC Aviation]], a major aircraft leasing firm. Ground and catering services are provided by [[SATS (company)|SATS]] and [[dnata Singapore]] (formerly CIAS), whose facilities are located within the airport precincts. Owing to Singapore's central geographical location and high volume of international transit traffic, the airport has also been designated a principal [[cargo hub]] by [[FedEx Express]], reinforcing its logistical and commercial importance within global air transport networks.<ref name="Fedex">{{cite web|url=http://www.aircargonews.net/news/single-view/news/fedex-opens-flagship-asia-hub.html|title=FedEx opens flagship Asia hub|work=Singapore's Changi Airport|publisher=Aircargonews.net|access-date=5 October 2012|archive-url=https://web.archive.org/web/20150801225059/http://www.aircargonews.net/news/single-view/news/fedex-opens-flagship-asia-hub.html|archive-date=1 August 2015|url-status=live}}</ref><ref>{{cite web|url=https://www.straitstimes.com/singapore/transport/sia-ana-ink-pact-paving-way-for-more-flights-japan-destinations-for-singapore|title=SIA-ANA pact will pave way for more flights, Japan destinations for Singapore consumers |date=31 January 2020|publisher=[[The Straits Times]]|access-date=31 January 2020|archive-date=31 January 2020|archive-url=https://web.archive.org/web/20200131144704/https://www.straitstimes.com/singapore/transport/sia-ana-ink-pact-paving-way-for-more-flights-japan-destinations-for-singapore|url-status=live}}</ref> The airport is managed by the Changi Airport Group, a corporate entity owned by the [[Singapore Government]] while solely maintained by the [[Ministry of Finance (Singapore)|Ministry of Finance]].<ref name="sg_mof_nov2025"/> The airfield infrastructure comprises three operational runways, each measuring {{convert|4|km|mi|adj=off}} in length. While the main airport code is WSSS, the third runway, designated 02R/20L, was formerly part of the adjacent [[Changi Air Base (East)]] and used by the [[Republic of Singapore Air Force]] (RSAF), carrying the ICAO code '''WSAC'''.<ref>{{Cite web |title=Singapore ICAO Location Finder |url=https://www.notams.faa.gov/common/icao/R32C2.html |archive-url=https://web.archive.org/web/20240811235149/https://www.notams.faa.gov/common/icao/R32C2.html |archive-date=11 August 2024 |access-date=1 February 2025 |website=www.notams.faa.gov |url-status=live }}</ref><ref>{{Cite web |title=Changi Air Base - Singapore |url=https://www.world-airport-codes.com/singapore/changi-air-base-84568.html |access-date=1 February 2025 |website=World Airport Codes |language=en |archive-date=18 September 2024 |archive-url=https://web.archive.org/web/20240918224947/https://www.world-airport-codes.com/singapore/changi-air-base-84568.html |url-status=live }}</ref><ref>{{Cite web |title=WSAC/Singapore/Changi Air Base East General Airport Information |url=https://acukwik.com/Airport-Info/WSAC |access-date=1 February 2025 |website=acukwik.com |archive-date=23 January 2025 |archive-url=https://web.archive.org/web/20250123141551/https://acukwik.com/Airport-Info/WSAC |url-status=live }}</ref> The terminal complex includes four passenger terminals, of which Terminals 1, 2 and 3 are directly connected to [[Jewel Changi Airport]], a mixed-use development featuring retail, dining and entertainment facilities integrated with airport infrastructure. A fifth terminal is currently under construction. ==Overview== {{see also|Infrastructure of Changi Airport}} [[File:Singapore_Airport.png|thumb|center|upright=1.5|Map of Changi Airport]] Changi Airport serves more than 100 airlines flying to 170 cities in around 100+ countries and territories worldwide. About 7,000 flights arrive or depart at Changi each week, or one every 80 seconds. For the 2025 full-year figures published by the airport, the airport handled 69,980,000 passengers (a 3.4% increase compared to 2024), the highest in its 44-year history.<ref name=":0" /> This made it the fourth busiest international airport in the world and the seventh busiest in Asia Pacific. In December 2025, Changi Airport registered a total of 6.3 million passenger movements, with 20 December marking the year’s busiest day at 223,000 passengers across its terminals. In addition to being an important passenger hub, the airport is also one of the busiest cargo airports in the world, handling 2.08 million tonnes of air freight in 2025.<ref name="Chelvan-2026" /> Aircraft movements, comprising both landings and take-offs, increased 2.2% year-on-year to 374,000 movements in 2025.<ref name=":0" /> The airport has won over 700 awards since its opening, including 28 "Best Airport" awards in 2025 alone.<ref name=":0">{{cite web | url=https://www.changiairport.com/en/corporate/our-media-hub/newsroom/press-releases.2025-operating-indicators.2026.all.html | title=Changi Airport handled record traffic of close to 70 million passengers in 2025 | publisher=Changi Airport Group | date=22 January 2026 | access-date= }}</ref> Changi Airport's efforts to mitigate the effects of ageing infrastructure include continual physical upgrades to its existing terminals and building new facilities to maintain its high standards in airport service quality.<ref name="changiairportgroup.com">{{cite web|url=http://www.changiairportgroup.com/export/sites/caas/assets/media_release_2013/Media_Release_-_A_record_51_million_passengers_for_Changi_Airport_in_2012_xwebx.pdf|title=A record 51 million passengers for Changi Airport in 2012|website=Changaiairportgroup.com|access-date=3 March 2017|archive-url=https://web.archive.org/web/20131104032212/http://www.changiairportgroup.com/export/sites/caas/assets/media_release_2013/Media_Release_-_A_record_51_million_passengers_for_Changi_Airport_in_2012_xwebx.pdf|archive-date=4 November 2013}}</ref> In 2026, Changi Airport also ranked fourth as one of the top 10 brands in Singapore in YouGov's Best Brands Rankings 2026 report.<ref>{{Cite web|title=CNA remains among top 10 brands in Singapore: YouGov report|url=https://www.channelnewsasia.com/singapore/cna-top-10-brands-singapore-yougov-survey-2026-5893596|website=CNA|access-date=30 January 2026|language=en}}</ref> ==History== {{see also|History of Changi Airport}} ===Conception=== [[File:Singapore Airlines Airbus A300 Green-1.jpg|thumb|250px|The [[Airbus A300]] (9V-STF) of [[Singapore Airlines]] staying at Changi Airport (1983)]] Prior to Changi, Singapore's main international airport was located at [[Paya Lebar Air Base|Paya Lebar]]. It had opened in 1955 with a single [[runway]] and a small passenger [[airport terminal|terminal]], having itself replaced the previous [[Kallang Airport]] that began operations in 1937. The decision to move the airport from Paya Lebar to Changi was based on a number of factors.<ref>{{Cite web |last=Redwan |first=Raiz |date=18 June 2023 |title=Paya Lebar Airport - The International Airport Before Changi That Only Operated For 26 Years |url=https://thesmartlocal.com/read/paya-lebar-airport/ |access-date=30 May 2024 |website=TheSmartLocal - Singapore's Leading Travel and Lifestyle Portal |language=en-GB}}</ref> With the growth in global aviation transport, the airport was facing congestion problems. Its inability to cope with the rising traffic became critical by the 1970s; annual passenger numbers rose dramatically from 300,000 in 1955 to 1.7&nbsp;million in 1970 and to 4&nbsp;million in 1975. As a result, there was a need to accommodate the growing demand for air travel, the desire to establish Singapore as a global aviation hub, and the need to modernise the country's air transport infrastructure.<ref name="CAH">{{cite web |title=Singapore Changi Airport turns 40 years old |url=https://www.airporthistory.org/blue-concourse/singapore-changi-airport-turns-40 |website=A Visual History of the World's Great Airports |access-date=12 February 2023 |language=en |date=1 July 2021 |archive-date=26 November 2022 |archive-url=https://web.archive.org/web/20221126071242/https://www.airporthistory.org/blue-concourse/singapore-changi-airport-turns-40 |url-status=live }}</ref> The Singaporean government had two options – expand the existing airport at Paya Lebar or build a new airport at another location. After extensive studies, a decision was made in 1972 to keep the airport at Paya Lebar, as recommended by aviation consultants. Plans were made for the building of a second runway and an extensive redevelopment and expansion to the passenger terminal building. A year later, however, the plans were reviewed again as the pressure to expand the airport eased because of the [[1973 oil crisis]].<ref name="CAH"/> Concerned that the existing airport was located in an area with potential for urban growth, which would physically hem it in on all sides, the government subsequently decided in 1975 to build a new airport at the eastern tip of the main island at Changi, at the existing site of [[Changi Air Base]]. However, as there was an increase in traffic, the airport still had to be expanded at that time. In addition, aircraft could fly over the sea, avoiding [[noise pollution]] issues within residential areas and avoid disastrous consequences on the ground in the event of an air mishap. Formerly known as the '''Singapore International Airport''', the airport in Paya Lebar was subsequently converted for military use and renamed as [[Paya Lebar Air Base]].<ref name="CAH"/> ===Construction=== The original master plan for Changi Airport involved constructing a dual-terminal and dual-runway configuration over two phases with provisions for another two passenger terminals in the future. Phase 1 included the construction for the first passenger terminal, the first runway reusing and upgrading the main runway of Changi Air Base, 45 aircraft parking bays, support facilities and structures, including a large maintenance hangar, a fire station, workshops and administrative offices, an airfreight complex, two cargo agents buildings, in-flight catering kitchens and an {{cvt|80|m}} [[control tower]]. Construction for the second phase would commence immediately after the completion of Phase 1 and include the second runway, 23 new aircraft parking bays in addition to the existing 45 bays, a second fire station and a third cargo agent building.<ref name="CAH"/><ref>{{cite web|title=Some Facts on Changi Airport |publisher=Singapore Changi Airport |url=http://www.changiairport.com/changi/en/about_us/fact_sheets/facts_changi_ap.html |access-date=3 November 2006 |archive-url=https://web.archive.org/web/20070101114643/http://www.changiairport.com/changi/en/about_us/fact_sheets/facts_changi_ap.html |archive-date=1 January 2007}}</ref> Changi Airport commenced commercial operations on 1 July 1981.<ref name="infopedia">{{cite web|last = Muliani Tan|first = Bonny|title = Changi International Airport|work = singaporeInfopedia|publisher = National Library Board Singapore|year = 2001|url = https://www.nlb.gov.sg/main/article-detail?cmsuuid=8ba0a92c-262a-441a-97e2-a65cee3c1788|access-date = 19 July 2024|archive-url = https://web.archive.org/web/20231124092803/https://www.nlb.gov.sg/main/article-detail?cmsuuid=8ba0a92c-262a-441a-97e2-a65cee3c1788|archive-date = 24 November 2023|df = dmy-all}}</ref> Its first flight, [[Singapore Airlines]] SQ101, touched down that day at 7:10:00am [[Singapore Time]] with 140 passengers from Kuala Lumpur.<ref name="infopedia" /> It officially opened five months later on 29 December 1981. The airport ended its first year of operations with 12.1&nbsp;million passengers, close to 200,000 tonnes of air freight handled and 63,100 aircraft movements. Subsequent phases opened progressively within the next few decades, with Terminal 2 opening for passenger traffic in 1990, Terminal 3 in 2008, and Terminal 4 in 2017. Terminal 5 is expected to open in mid-2030s.<ref name=":1">{{Cite web |title=New exhibition exploring innovations of Changi Airport's future Terminal 5 launched |url=https://www.channelnewsasia.com/singapore/changi-airport-terminal-5-t5-in-making-exhibition-opens-public-5806111 |access-date=2 March 2026 |website=CNA |language=en}}</ref> ==Terminals== ===Passenger terminals=== [[File:Center Plaza T1 Changi Airport.jpg|thumb|Terminal 1]] [[File:Singapore Changi Airport Terminal 2 06-08-2025(18).jpg|thumb|Terminal 2]] [[File:Changi Airport Wonderfall.jpg|alt=The Wonderfall at Changi Airport Terminal 2|thumb|The Wonderfall at Terminal 2]] [[File:Singapore Changi Airport Terminal 3 12-08-2025(1).jpg|thumb|Terminal 3]] [[File:Aerial view of Singapore Changi Airport and Changi Air Base - 20110523.jpg|thumb|Aerial view of Singapore Changi Airport in 2011. The forested area to the right of its airfield has since been cleared for Terminal 5]] Changi Airport has four main passenger terminals arranged with Jewel located in the centre of Terminals 1, 2 and 3. Currently, the airport has an operational capacity of 90 million passengers per annum (mppa) across four terminals. <ref>{{Cite web |date=30 May 2025 |title=Fact Sheet: Changi Airport |url=https://www.changiairport.com/en/corporate/our-media-hub/newsroom/press-releases.fact-sheet-changi-airport.2025.all.html |access-date=3 March 2026 |website=[[Changi Airport Group]]}}</ref> {| class="wikitable" |- !Terminal !Date of opening !Location |- |[[Singapore Changi Airport Terminal 1|Terminal 1]] |1 July 1981<ref>{{Cite web|title=Changi Airport Infopedia|url=https://eresources.nlb.gov.sg/infopedia/articles/SIP_574_2004-12-23.html|access-date=31 May 2020|website=eresources.nlb.gov.sg|archive-date=30 August 2020|archive-url=https://web.archive.org/web/20200830195358/https://eresources.nlb.gov.sg/infopedia/articles/SIP_574_2004-12-23.html|url-status=live}}</ref> |Northern end |- |[[Singapore Changi Airport Terminal 2|Terminal 2]] |22 November 1990<ref>{{Cite web|title=First 137 passengers take off from Terminal 2|url=https://eresources.nlb.gov.sg/newspapers/Digitised/Article/newpaper19901122-1.2.15.2|access-date=31 May 2020|website=eresources.nlb.gov.sg|archive-date=30 August 2020|archive-url=https://web.archive.org/web/20200830203955/https://eresources.nlb.gov.sg/newspapers/Digitised/Article/newpaper19901122-1.2.15.2|url-status=live}}</ref> |Eastern end |- |[[Singapore Changi Airport Terminal 3|Terminal 3]] |9 January 2008<ref>{{Cite web|title=T3 Takes Off |url=https://eresources.nlb.gov.sg/newspapers/Digitised/Article/straitstimes20080110-1.2.9.3|access-date=31 May 2020|website=eresources.nlb.gov.sg|archive-date=8 November 2019|archive-url=https://web.archive.org/web/20191108104645/http://eresources.nlb.gov.sg/newspapers/Digitised/Article/straitstimes20080110-1.2.9.3|url-status=live}}</ref><ref>{{Cite web|last=migration|date=25 July 2014|title=Flashback Friday: Changi Airport Terminal 3 officially opened on July 25, 2008|url=https://www.straitstimes.com/singapore/transport/flashback-friday-changi-airport-terminal-3-officially-opened-on-july-25-2008|access-date=31 May 2020|website=The Straits Times|language=en|archive-date=22 September 2020|archive-url=https://web.archive.org/web/20200922085225/https://www.straitstimes.com/singapore/transport/flashback-friday-changi-airport-terminal-3-officially-opened-on-july-25-2008|url-status=live}}</ref> |Western end |- |[[Singapore Changi Airport Terminal 4|Terminal 4]] |31 October 2017<ref>{{Cite web|title=Terminal 4 Breaks New Ground for Changi {{!}} Changi Airport Group|url=https://www.changiairport.com/corporate/media-centre/resources/publication/issue-24/terminal-4-breaks-new-ground-for-Changi.html|archive-url=https://web.archive.org/web/20191228094726/http://www.changiairport.com/corporate/media-centre/resources/publication/issue-24/terminal-4-breaks-new-ground-for-Changi.html|archive-date=28 December 2019|access-date=31 May 2020|website=www.changiairport.com|language=en}}</ref> |Southern end |- |[[Infrastructure of Changi Airport#Terminal 5|Terminal 5]] |Mid-2030s |Southeastern end |} There is also a privately Commercially-Important-Person (CIP) luxury terminal called the [[Singapore Changi Airport JetQuay CIP Terminal|JetQuay CIP Terminal]]. It is similar to the Lufthansa First Class Terminal at [[Frankfurt Airport]], but is open to all passengers travelling in all classes on all airlines with an access fee.<ref>{{Cite web|title=JetQuay|url=https://www.jetquay.com.sg/who_we_are.php|website=www.jetquay.com.sg|access-date=31 May 2020|archive-date=7 March 2021|archive-url=https://web.archive.org/web/20210307075403/https://www.jetquay.com.sg/who_we_are.php|url-status=live}}</ref> The short-lived Budget Terminal was opened on 26 March 2006 and closed on 25 September 2012 to make way for Terminal 4.<ref>{{Cite web |title=Changi abandoning budget terminal to lure more airlines, passengers |url=https://asia.nikkei.com/Business/Changi-abandoning-budget-terminal-to-lure-more-airlines-passengers |access-date=3 April 2025 |website=Nikkei Asia |language=en |archive-date=3 April 2025 |archive-url=https://web.archive.org/web/20250403082937/https://asia.nikkei.com/Business/Changi-abandoning-budget-terminal-to-lure-more-airlines-passengers |url-status=live }}</ref> Terminal 5 is currently under construction. The new terminal is expected to be completed by 2030.<ref> {{cite web|url=http://www.straitstimes.com/singapore/changi-airport-to-open-terminal-4-on-october-31-after-more-than-100-trials|title=Changi Airport to open Terminal 4 on Oct 31; 9 airlines to operate from new terminal|website=The Straits Times|date=6 September 2017|access-date=25 September 2017|archive-url=https://web.archive.org/web/20171008145025/http://www.straitstimes.com/singapore/changi-airport-to-open-terminal-4-on-october-31-after-more-than-100-trials|archive-date=8 October 2017|url-status=live}} </ref> ===Future terminals and projects=== Terminal 5 (T5) is currently under construction. [[Lawrence Wong]], the Prime Minister of Singapore and Minister of Finance, officiated the groundbreaking ceremony for Changi Airport T5 on 14 May 2025.<ref>{{Cite web |date=14 May 2025 |title=Changi Airport Terminal 5 breaks ground |url=https://www.changiairport.com/en/corporate/our-media-hub/newsroom/press-releases.changi-airport-terminal-5-breaks-ground.2025.all.html |access-date=3 March 2026 |website=[[Changi Airport Group]]}}</ref> The new terminal is expected to be ready by the mid-2030s.<ref name=":1" /> [[Infrastructure of Singapore Changi Airport#Terminal 5|Terminal 5]] is expected to handle 50&nbsp;million passenger movements per annum for Changi Airport.<ref> {{cite web|url=https://sg.news.yahoo.com/changi-airport-s-terminal-5-ready-in-mid-2020s-153333390.html|title=Changi Airport's Terminal 5 ready in mid-2020s|date=30 August 2013|work=Yahoo News Singapore|access-date=10 May 2015|archive-url=https://web.archive.org/web/20150714203216/https://sg.news.yahoo.com/changi-airport-s-terminal-5-ready-in-mid-2020s-153333390.html|archive-date=14 July 2015|url-status=live}} </ref> It will be built on reclaimed land to the east of the present terminals. It will be partially funded through an increased levy.<ref> {{cite web |url=https://www.channelnewsasia.com/news/singapore/changi-airport-new-fee-t5-terminal-5-passengers-9999526 |title=Changi Airport passengers to pay new levy to fund developments including T5 |publisher=Channel NewsAsia |date=28 February 2018 |access-date=29 July 2018 |archive-url=https://web.archive.org/web/20180729081458/https://www.channelnewsasia.com/news/singapore/changi-airport-new-fee-t5-terminal-5-passengers-9999526 |archive-date=29 July 2018 |url-status=live }} </ref> KPF Singapore with [[Heatherwick Studio]] and Architects 61 will provide architectural services. [[Arup Group|Arup Singapore]], [[Mott MacDonald|Mott MacDonald Singapore]] and [[Surbana Jurong|Surbana Jurong Consultants]] will provide engineering services while [[DP Architects]] will provide retail design services. The former Transport Minister [[Khaw Boon Wan]] said that the Changi Terminal 5 project was delayed by at least 2 years as a result of the [[COVID-19 pandemic]].<ref>{{Cite web|last=Toh|first=Ting Wei|date=16 June 2021|title=Coronavirus: Changi Airport T5 construction to be "paused" for at least 2 years, says Khaw|url=https://www.straitstimes.com/singapore/transport/coronavirus-changi-airport-t5-construction-to-be-paused-for-at-least-2-years|url-status=live|access-date=16 June 2021|website=The Straits Times|language=en|archive-url=https://web.archive.org/web/20200616075253/https://www.straitstimes.com/singapore/transport/coronavirus-changi-airport-t5-construction-to-be-paused-for-at-least-2-years |archive-date=16 June 2020 }}</ref> ===Mixed-use facilities=== {{further|Jewel Changi Airport}} [[File:JewelSingaporeVortex1.jpg|thumb|The Rain Vortex at [[Jewel Changi Airport]]]] [[Jewel Changi Airport]], which opened on 17 April 2019, is a nature-themed entertainment and retail complex interconnecting Terminals 1, 2 and 3.<ref>{{Cite news|url=https://www.straitstimes.com/singapore/transport/jewel-changi-airport-to-open-on-april-17|title=Jewel Changi Airport to open on April 17|date=6 March 2019|work=The Straits Times|access-date=31 May 2020|archive-url=https://web.archive.org/web/20190307153244/https://www.straitstimes.com/singapore/transport/jewel-changi-airport-to-open-on-april-17|archive-date=7 March 2019|url-status=live}}</ref> Announced in 2013, it is a new terminal-like structure that is intended to simultaneously be a mixed-use complex.<ref>{{cite web | url=http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/changi-airport-group-and-capitamalls-asia-to-jointly-develop-project-jewel-at-changi-airport-943581 | title=Changi Airport Group to develop iconic mixed-use complex | publisher=Changi Airport Group | date=19 August 2013 | access-date=31 May 2020 | archive-date=27 January 2016 | archive-url=https://web.archive.org/web/20160127105007/http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/changi-airport-group-and-capitamalls-asia-to-jointly-develop-project-jewel-at-changi-airport-943581 | url-status=live }}</ref> It is situated on a 3.5-hectare site where the Terminal 1 car park used to reside, which has since been moved underground. Jewel was developed by Jewel Changi Airport Trustee Pte Ltd, a joint venture between Changi Airport Group and [[CapitaLand]], through its wholly owned shopping mall business, CapitaLand Mall Asia.<ref>{{Cite news|url=http://www.straitstimes.com/singapore/project-jewel-at-changi-airport-to-cost-147b|title=Project Jewel at Changi Airport to cost $1.47b|last=migration|date=20 December 2013|work=The Straits Times|access-date=31 May 2020|archive-url=https://web.archive.org/web/20180117190536/http://www.straitstimes.com/singapore/project-jewel-at-changi-airport-to-cost-147b|archive-date=17 January 2018|url-status=live}}</ref> The project cost S$1.7 billion.<ref>{{Cite news|url=http://www.straitstimes.com/singapore/transport/work-on-changi-airports-jewel-project-and-t1-expansion-begins|title=Work on Changi Airport's Jewel project and T1 expansion begins|author=Karamjit Kaur |date=5 December 2014 |work=The Straits Times|access-date=9 January 2018|language=en|archive-url=https://web.archive.org/web/20180117190441/http://www.straitstimes.com/singapore/transport/work-on-changi-airports-jewel-project-and-t1-expansion-begins|archive-date=17 January 2018|url-status=live}}</ref> Part of this project was planned to help expand Terminal 1 to handle 24&nbsp;million passengers per year by 2018 with stand-alone check-in facilities and lounges. The indoor waterfall (named "Rain Vortex") in the structure holds the World Record for the tallest indoor waterfall in the world at 40m high, cascading down 7 storeys.<ref>{{Cite web |date=November 2020 |title=What goes on behind the world's tallest indoor waterfall? |url=https://www.changiairport.com/corporate/media-centre/changijourneys/the-airport-never-sleeps/behind-the-rain-vortex.html |website=changiairport.com}}</ref> ===Cargo terminal=== The Air Hub & Cargo Development department of the Changi Airport Group (CAG) manages the Changi Airfreight Centre,<ref>{{cite web|url=http://www.changiairportgroup.com.sg/cag/html/business-partners/air-cargo/facilities-and-infrastructures/changi_airfreight_centre/index.html |title=Changi Airfreight Centre |publisher=Changi Airport Group |archive-url=https://web.archive.org/web/20150930121343/http://www.changiairportgroup.com.sg/cag/html/business-partners/air-cargo/facilities-and-infrastructures/changi_airfreight_centre/index.html |archive-date=30 September 2015}}</ref> which is located to the north of the airport premises.<ref name="caasdivisions">{{cite web|title=Our Divisions |publisher=Civil Aviation Authority of Singapore (CAAS) |url=http://www.caas.gov.sg/caas/en/About_CAAS/Our_Divisions.html?__locale=en |access-date=3 November 2006 |archive-url=https://web.archive.org/web/20060926022454/http://www.caas.gov.sg/caas/en/About_CAAS/Our_Divisions.html?__locale=en |archive-date=26 September 2006 }}</ref> In 2025, Changi Airport handled 2,080,000 tonnes of air freight, achieving one of its strongest cargo performance on record. The top five air cargo markets in 2025 were China, the United States, Australia, Hong Kong, and India.<ref name=":0" /> Recent cargo volumes at Changi Airport have been heavily driven by global demand for semiconductors, artificial intelligence (AI) technology, electric vehicles, and cleantech.<ref name=":0" /> Changi Airport is consistently honoured at the Asian Freight Logistics and Supply Chain (AFLAS) Awards. Changi has an exceptional track record with this awarding body, having previously won "Best Airport in Asia" for over 27 consecutive years.<ref name=":2">{{Cite web |last=Reporter |first=Staff |date=10 May 2013 |title=Singapore Changi Airport still voted as Asia's best {{!}} Singapore Business Review |url=https://sbr.com.sg/aviation/in-focus/singapore-changi-airport-still-voted-asias-best |access-date=2 March 2026 |website=sbr.com.sg |language=en}}</ref> Changi Airport has been inducted into the Cargonews Asia Hall of Fame for its unprecedented, sustained excellence as a premier airfreight hub. <ref name=":2" />{{clear}} ==Operations== Changi Airport Group (Singapore) Pte Ltd (CAG) was formed on 16 June 2009 upon the corporatisation of Singapore Changi Airport by [[Civil Aviation Authority of Singapore]] as the licensee and operator of the airport.<ref>{{cite report|url=https://www.nas.gov.sg/archivesonline/data/pdfdoc/20081007996.pdf|title=CORPORATISATION OF CHANGI AIRPORT AND RESTRUCTURING OF CIVIL AVIATION AUTHORITY OF SINGAPORE (CAAS)|date=10 July 2008|author=Ministry of Transport,Singapore|archive-date=16 November 2024|access-date=14 August 2024|archive-url=https://web.archive.org/web/20241116084646/https://www.nas.gov.sg/archivesonline/data/pdfdoc/20081007996.pdf|url-status=live}}</ref><ref>{{cite web|url=https://www.nlb.gov.sg/main/article-detail?cmsuuid=2f697180-79c5-4f80-a59f-cbaa42b57bc9|title=Establishment of the Civil Aviation Authority of Singapore|publisher=National Library Board of Singapore}}</ref> ===Passenger operations=== As the airport only handles international passenger traffic, all terminals in operation are equipped with immigration-processing facilities for international travel. After recovering from a drop in passenger traffic as a result of the [[September 11 attacks]] in 2001 and the [[Severe Acute Respiratory Syndrome]] (SARS) epidemic in 2003, the airport saw rapid growth in traffic, which hit the 30-million mark for the first time in 2004. In March 2008, prior to the full effect of the [[2008 financial crisis]] on the global economy, the airport was predicted to handle 50&nbsp;million passengers by 2012<ref>{{cite web|url=http://www.channelnewsasia.com/stories/singaporebusinessnews/view/337878/1/.html|title=Changi poised to handle 50 million passengers a year by 2012|date=28 March 2008|publisher=Channel NewsAsia|access-date=8 November 2011|archive-url=https://web.archive.org/web/20111228202414/http://www.channelnewsasia.com/stories/singaporebusinessnews/view/337878/1/.html|archive-date=28 December 2011|url-status=live}}</ref> due to the opening of [[casino]]s in Singapore and the phased liberalisation of the [[ASEAN]] aviation sector. As predicted, the airport surpassed the 50-million mark in 2012.<ref name="changiairportgroup.com"/> On 18 December 2017, the airport surpassed the 60-million mark for the first time.<ref>{{cite press release|title=Flying higher, Changi Airport crosses 60-million milestone in 2017|url=http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/flying-higher-changi-airport-crosses-60-million-milestone-in-2017-2337980|publisher=Changi Airport Group|access-date=27 January 2016|archive-url=https://web.archive.org/web/20160127105007/http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/flying-higher-changi-airport-crosses-60-million-milestone-in-2017-2337980|archive-date=27 January 2016|url-status=live}}</ref><ref>{{cite web|title=Changi Airport hits record 60 million passengers in 2017|work=CNA |url=https://www.channelnewsasia.com/news/singapore/changi-airport-hits-record-60-million-passengers-in-2017-9507022|publisher=Channel NewsAsia|access-date=18 December 2017|archive-url=https://web.archive.org/web/20171221025632/http://www.channelnewsasia.com/news/singapore/changi-airport-hits-record-60-million-passengers-in-2017-9507022|archive-date=21 December 2017|url-status=live}}</ref> The airport saw a record 65.6 million passenger movements in 2018 – beating 2017's record of 60 million passengers with a 5.5 per cent increase.<ref>{{cite web|url=https://www.channelnewsasia.com/news/singapore/changi-airport-hits-record-65-million-passengers-in-2018-11178416|title=Changi Airport hits record 65 million passengers in 2018|website=Channel NewsAsia|language=en|access-date=2 February 2019|archive-url=https://web.archive.org/web/20190203030425/https://www.channelnewsasia.com/news/singapore/changi-airport-hits-record-65-million-passengers-in-2018-11178416|archive-date=3 February 2019|url-status=live}}</ref> In 2019, [[Firefly (airline)|Firefly]], the sole turboprop operator in Changi Airport, moved to [[Seletar Airport]] to make way for their jet operations.<ref>{{cite web|title=Seletar Airport Prepares for Turboprop Service|url=http://aviationweek.com/singapore-airshow-2018/seletar-airport-prepares-turboprop-service|website=Aviation Week & Space Technology|access-date=5 February 2018|archive-url=https://web.archive.org/web/20180205143311/http://aviationweek.com/singapore-airshow-2018/seletar-airport-prepares-turboprop-service|archive-date=5 February 2018|url-status=live}}</ref><ref>{{cite web|title=Singapore 2018: Seletar Airport set for turboprop move|url=http://www.aircosmosinternational.com/singapore-2018-seletar-airport-set-for-turboprop-move-106789|website=Air & Cosmos – International|access-date=6 February 2018|archive-url=https://web.archive.org/web/20180217202815/http://www.aircosmosinternational.com/singapore-2018-seletar-airport-set-for-turboprop-move-106789|archive-date=17 February 2018|url-status=live}}</ref><ref>{{cite news |title=Malaysian carrier Firefly resumes flights to Singapore as first plane lands at Seletar Airport |url=https://www.channelnewsasia.com/news/singapore/seletar-airport-malaysian-carrier-firefly-flights-singapore-11464544 |access-date=17 June 2019 |author=Staff writers |work=CNA |publisher=Mediacorp|language=en |archive-date=22 September 2020 |archive-url=https://web.archive.org/web/20200922085245/https://www.channelnewsasia.com/news/singapore/seletar-airport-malaysian-carrier-firefly-flights-singapore-11464544 |url-status=live }}</ref> Due to the [[COVID-19 pandemic in Singapore|COVID-19 pandemic]], passenger traffic fell in 2020 and 2021, resulting in Terminals 2 and 4 closing temporarily in May 2020.<ref>{{Cite web |url=https://www.changiairport.com/corporate/media-centre/newsroom/consolidation-of-terminal-operations.html#?tid=relocation |title=Consolidation of Terminal Operations {{pipe}} Singapore Changi Airport |access-date=5 May 2022 |archive-date=22 February 2022 |archive-url=https://web.archive.org/web/20220222235949/https://www.changiairport.com/corporate/media-centre/newsroom/consolidation-of-terminal-operations.html#?tid=relocation |url-status=live }}</ref> Terminals 1 and 3 remained open for passengers throughout, but were closed to the general public on 12 May 2021 along with Jewel, reopening on 1 September 2021.<ref>{{Cite news|date=27 August 2021|title=Changi Airport T1 & T3 to reopen to the public on 1 September 2021|last=Ming Wei|first=Toh|newspaper=The Straits Times|url=https://www.straitstimes.com/singapore/transport/changi-airport-terminal-1-and-3-to-reopen-to-the-public-from-sept-1|access-date=27 August 2021|archive-date=29 August 2021|archive-url=https://web.archive.org/web/20210829062807/https://www.straitstimes.com/singapore/transport/changi-airport-terminal-1-and-3-to-reopen-to-the-public-from-sept-1|url-status=live}}</ref> On 1 November 2023, Terminal 2 fully reopened after three and a half years of upgrading. The refurbished terminal features nature-themed decorations and a 14m-tall digital waterfall display called the Wonderfall.<ref>{{Cite web |title=Changi Airport's Terminal 2 fully reopens with lush greenery and digital waterfall display |url=https://www.channelnewsasia.com/singapore/changi-airport-terminal-2-t2-reopen-full-capacity-3886781 |access-date=6 July 2024 |website=CNA |language=en}}</ref> ===Safety and security=== [[File:Griffon 8000TD.jpg|thumb|Singapore Airport Emergency Services Griffon]] The Changi Airport Group (CAG) manages the overall safety and security of the airport. The Airport Management Division of the CAG manages the customer aspects of the airport's security, while the Aviation Security Unit oversees the airport's compliance with [[Airport security|aviation security]] (AVSEC) policies, and manages AVSEC-related projects.<ref name="caasdivisions"/> The airport's emergency and fire-fighting services are handled by the Airport Emergency Service Division.<ref> [http://www.changiairportgroup.com/export/sites/caas/assets/changi_connection/Changi_Airport_Group_AR_0910_Full.pdf Changi Airport Group Annual Report 2009/10] {{Webarchive|url=https://web.archive.org/web/20101028025538/http://changiairportgroup.com/export/sites/caas/assets/changi_connection/Changi_Airport_Group_AR_0910_Full.pdf |date=28 October 2010 }}. (PDF) Retrieved 15 August 2012. </ref> The Airport Emergency Services handle all instances of rescue and fire-fighting within the airport premises as well as in surrounding waters. It operates from three main fire stations (Station 1 by Runway 1 along West Perimeter Road and Station 2 by Runway 2 and Station 3 by Runway 3), one sub-station (Domestic Fire Station), and one sea rescue base near the airport.<ref>{{cite web|url=http://www.changiairportgroup.com/cag/html/our-services/airport-emergency-services/fire-stations/|title=Civil Fire Stations|publisher=Changi Airport Group|access-date=12 June 2011|archive-url=https://web.archive.org/web/20110518205523/http://changiairportgroup.com/cag/html/our-services/airport-emergency-services/fire-stations/|archive-date=18 May 2011}}</ref> The airport's security comes under the regulatory purview of the Airport Police Division of the [[Singapore Police Force]] (SPF). The day to day discharge of security functions at the airport is performed by [[auxiliary police]] forces including [[Aetos Security Management]], [[Certis Group|Certis (former CISCO)]] and [[SATS Security Services]]. Aetos and SATS Security Services are affiliated to the ground handling companies of dnata and SATS respectively.<ref>{{cite web |url=http://www.channelnewsasia.com/stories/singaporebusinessnews/view/1134158/1/.html |title=Changi Airport's third ground handling licence awarded to ASIG |publisher=Channel NewsAsia |date=9 June 2011 |access-date=8 November 2011 |archive-url=https://web.archive.org/web/20110810121121/http://www.channelnewsasia.com/stories/singaporebusinessnews/view/1134158/1/.html |archive-date=10 August 2011 |url-status=live}}</ref> On 29 April 2008, CAAS signed its then-biggest single security contract for all airport-related security services by engaging Certis CISCO to provide security services at Singapore Changi Airport, as well as [[Seletar Airport]], Changi Airfreight Centre, and the Singapore Air Traffic Control Centre.<ref>{{cite web |url=http://www.certissecurity.com/sg/News/news.php?art=20 |title=Certis CISCO awarded $360&nbsp;million Master Security Services Contract by CAAS |publisher=Certissecurity.com |date=28 April 2008 |access-date=8 November 2011 |archive-url=https://web.archive.org/web/20111002013915/http://www.certissecurity.com/sg/News/news.php?art=20 |archive-date=2 October 2011 }}</ref> It involves the deployment of about 2,600 Certis Cisco personnel, including armed Auxiliary Police Officers and unarmed aviation security officers to perform tasks such as screening checked baggage, controlling access to restricted areas, and screening passengers before they board their aircraft.<ref>[http://www.certissecurity.com/sg/Support/annualreports/0809/ar08_09.pdf 50 Years of Securing Your World] {{Webarchive|url=https://web.archive.org/web/20110708133521/http://www.certissecurity.com/sg/Support/annualreports/0809/ar08_09.pdf |date=8 July 2011 }} . Annual Review 2008/2009. certissecurity.com (PDF). Retrieved 15 August 2012.</ref> Since the [[September 11 attacks]] and the [[Singapore embassies attack plot|naming of the airport]] as a terrorist target by the [[Jemaah Islamiyah]], the airport's security was tightened.<ref>{{cite news |title=Counter Terrorism Efforts at Singapore's Changi Airport |url=http://www.southasiaanalysis.org/%5Cpapers36%5Cpaper3573.html |url-status=usurped |archive-url=https://web.archive.org/web/20100612192419/http://southasiaanalysis.org/papers36/paper3573.html |archive-date=12 June 2010 |access-date=12 June 2011 |publisher=South Asia Analysis Group }}</ref><ref name="The Straits Times (retrieved from NLB)-2002">{{cite web |date=10 January 2002 |title=Changi Airport to Impose Security Levy (Page 5) |url=https://eresources.nlb.gov.sg/newspapers/Digitised/Page/straitstimes20020110-1.1.5 |url-status=live |archive-url=https://web.archive.org/web/20200922085229/https://eresources.nlb.gov.sg/newspapers/Digitised/Page/straitstimes20020110-1.1.5 |archive-date=22 September 2020 |access-date=3 September 2019 |website=The Straits Times (retrieved from NLB)}}</ref> Prohibited items include sharp/blunt objects and liquids/gels/aerosols above 100ml. Devices larger than 7 inches are still needed to be removed for security screening. Duty-free shops that sells liquor are exempted from regulations.<ref name="The Straits Times (retrieved from NLB)-2002"/> ==Airlines and destinations== ===Key markets and destinations=== In 2025, China was the largest market for the airport, followed by Indonesia, Malaysia, Australia and India. Kuala Lumpur, Bangkok, Jakarta, Denpasar (Bali) and Hong Kong were the busiest routes for the year.<ref name=":0" /> ===Passenger=== {{Airport destination list <!-- --> <!-- Do not add Aeromexico without a citation. Aeromexico website does not show Changi as a destination --> | [[Aero Dili]] | [[Presidente Nicolau Lobato International Airport|Dili]]<ref>{{cite web|url=https://www.businesstraveller.com/business-travel/2024/03/04/aero-dili-launches-flights-to-singapores-changi-airport/|title=Aero Dili launches flights to Singapore's Changi airport|publisher=Business Traveller|date=4 March 2024|accessdate=6 May 2024|archive-date=13 July 2024|archive-url=https://web.archive.org/web/20240713085652/https://www.businesstraveller.com/business-travel/2024/03/04/aero-dili-launches-flights-to-singapores-changi-airport/|url-status=live}}</ref> <!-- --> | [[Air Canada]] | [[Vancouver International Airport|Vancouver]]<ref>{{OAGWorldJuly2025Ref|title=Vancouver, BC, Canada YVR|pages=1184-1188}}</ref><ref>{{cite web |title=Air Canada to launch Singapore route |url=https://www.businesstraveller.com/business-travel/2023/06/15/air-canada-to-launch-singapore-route/ |website=Business Traveller |date=15 June 2023 |access-date=15 June 2023 |archive-date=15 June 2023 |archive-url=https://web.archive.org/web/20230615045523/https://www.businesstraveller.com/business-travel/2023/06/15/air-canada-to-launch-singapore-route/ |url-status=live }}</ref> <!-- --> | [[Air China]] | [[Beijing Capital International Airport|Beijing–Capital]],<ref>{{Cite web|date=30 March 2016 |access-date=1 January 2026 |title=More flight options between Singapore and China|website=Travel Weekly Asia|url=https://www.travelweekly-asia.com/Travel-News/Airline-News/More-flight-options-between-Singapore-and-China}}</ref> [[Chengdu Tianfu International Airport|Chengdu–Tianfu]],<ref>{{Cite web |last=Qing |first=Ma |date=26 June 2024 |title=Air China to add more international flights for the summer rush |url=https://www.chinadaily.com.cn/a/202406/26/WS667bb118a31095c51c50af6e.html |access-date=17 January 2026 |website=China Daily}}</ref> [[Chongqing Jiangbei International Airport|Chongqing]],<ref>{{cite web |title=Air China to commence Chongqing-Singapore service in Jul-2023 |url=https://centreforaviation.com/news/air-china-to-commence-chongqing-singapore-service-in-jul-2023-1212533 |website=CAPA |publisher=Informa Markets |date=12 July 2023 |url-access=subscription |access-date=15 July 2023 |archive-date=15 July 2023 |archive-url=https://web.archive.org/web/20230715125755/https://centreforaviation.com/news/air-china-to-commence-chongqing-singapore-service-in-jul-2023-1212533 |url-status=live }}</ref><ref>{{cite web |title=Air China to resume Chongqing-Singapore service from Dec-2023 |url=https://centreforaviation.com/news/air-china-to-resume-chongqing-singapore-service-from-dec-2023-1240316 |website=CAPA |publisher=Informa Markets |date=19 December 2023 |url-access=subscription}}</ref> [[Shanghai Pudong International Airport|Shanghai–Pudong]]<ref> {{cite web|title=New route from Singapore to Chongqing and Shanghai |url=https://www.airchina.sg/SG/GB/promotion/Sinhuyu2023|website=Air China|publisher=|access-date=28 January 2026}}</ref> <!-- --> | [[Air France]] | [[Charles de Gaulle Airport|Paris–Charles de Gaulle]]<ref>{{cite web |title=Air France 777 with New La Première Debuts on Singapore Flights|url=https://aviationa2z.com/index.php/2025/07/18/air-france-new-la-premiere-debuts-on-singapore-flights/|website=aviationa2z.com|date=18 July 2025}}</ref> <!-- --> | [[Air India]] | [[Chennai International Airport|Chennai]] (resumes 2 September 2026),<ref name="airindiascoot">{{Cite web|date=14 December 2025 |access-date=1 January 2026 |title=Air India partners with Scott to expand connectivity across Asia and Australasia|website=Travel Radar|url=https://travelradar.aero/air-india-partners-with-scoot-to-expand-connectivity-across-asia-and-australasia/}}</ref> [[Indira Gandhi International Airport|Delhi]],<ref name="airindiascoot"/> [[Chhatrapati Shivaji Maharaj International Airport|Mumbai–Shivaji]]<ref name="airindiascoot"/> <!-- --> | [[Air India Express]] | [[Tiruchirappalli International Airport|Tiruchirappalli]]<ref>{{Cite web|date=16 November 2025 |access-date=1 January 2026 |title=Trichy adds four new flights to Singapore as demand surges|website=India Times|url=https://timesofindia.indiatimes.com/city/trichy/trichy-adds-four-more-flights-to-singapore-as-demand-surges/articleshow/125366764.cms}}</ref> <!-- --> | [[Air Macau]] | [[Macau International Airport|Macau]]<ref>{{Cite web|date=26 March 2023 |title=Singapore Changi Airport Terminal 2 welcomes Air Macau, Ethiopian and Firefly|website=Mainly Miles|url=https://mainlymiles.com/2023/03/26/singapore-changi-airport-terminal-2-welcomes-air-macau-ethiopian-and-firefly/}}</ref> <!-- --> | [[Air New Zealand]] | [[Auckland Airport|Auckland]],<ref>{{OAGWorldAug2025Ref|title=Auckland, New Zealand AKL|pages=91-93}}</ref> <br />'''Seasonal:''' [[Christchurch Airport|Christchurch]] (resumes 29 October 2026)<ref>{{cite news|title=Air New Zealand has announced three new non-stop international routes |url=https://www.airnewzealandnewsroom.com/press-release-2026-major-international-expansion-set-to-boost-christchurch-and-south-island-growth|access-date=20 May 2026 |work=Air New Zealand Media Releases |date=20 May 2026 |language=en}}</ref><ref>{{Cite web |date=20 May 2026 |title=Three new international destinations about to take off - @christchurch_airport - Instagram|url=https://www.instagram.com/p/DYiVoafoCEK/ |access-date=20 May 2026 |website=Instagram}}</ref> <!-- --> | [[Air Niugini]] | [[Jacksons International Airport|Port Moresby]]<ref>{{OAGWorldAug2025Ref|title=Pt. Moresby, Papua New Guinea POM|pages=1046-1047}}</ref> <!-- --> | [[AirAsia]] | [[Kota Kinabalu International Airport|Kota Kinabalu]],<ref name="malayasiaskyrocket">{{Cite web|date=15 December 2025 |access-date=1 January 2026 |title=Malaysia Airlines and AirAsia skyrocket in 2025! How Singapore,China, and India Are Driving Record Tourism - And What's Next for KLIA's Explosive Growth!|website=Travel and Tour World|url=https://www.travelandtourworld.com/news/article/malaysia-airlines-and-airasia-skyrocket-in-2025-discover-how-singapore-china-india-are-driving-record-tourism-and-whats-next-for-klias-explosive-growth/}}</ref> [[Kuala Lumpur International Airport|Kuala Lumpur–International]],<ref name="malayasiaskyrocket"/> [[Kuching International Airport|Kuching]],<ref name="malayasiaskyrocket"/> [[Langkawi International Airport|Langkawi]],<ref name="malayasiaskyrocket"/> [[Penang International Airport|Penang]]<ref name="malayasiaskyrocket"/> <!-- --> | [[Aircalin]] | [[La Tontouta International Airport|Nouméa]]<ref>{{cite web |title=Aircalin to fly to Singapore |url=https://worldairlinenews.com/2022/04/12/aircalin-to-fly-to-singapore/ |website=World Airline News |access-date=12 April 2022 |language=en |date=12 April 2022 |archive-date=12 April 2022 |archive-url=https://web.archive.org/web/20220412093021/https://worldairlinenews.com/2022/04/12/aircalin-to-fly-to-singapore/ |url-status=live}}</ref> <!-- --> | [[All Nippon Airways]] | [[Haneda International Airport|Tokyo–Haneda]],<ref name="ANASIA">{{Cite web|date=17 April 2025 |access-date=1 January 2026|title=Singapore Airlines and All Nippon Airways deepen joint venture|website=Business Traveler|url=https://www.businesstraveller.com/business-travel/singapore-airlines-and-all-nippon-airways-deepen-joint-venture/}}</ref> [[Narita International Airport|Tokyo–Narita]]<ref name="ANASIA"/> <!-- --> | [[Asiana Airlines]] | [[Incheon International Airport|Seoul–Incheon]]<ref name="OAG Flight Guide Worldwide-2025a">{{OAGWorldAug2025Ref|title=Seoul, Korea Republic Of SEL|pages=1186-1190}}</ref> <!-- --> | [[Bangkok Airways]] | [[Samui Airport|Koh Samui]]<ref>{{OAGWorldAug2025Ref|title=Ko Samui, Thailand USM|pages=638-638}}</ref><ref>{{cite news |author1=Megha Paul |title=Bangkok Airways to resume first international flight on Samui – Singapore route from 1 Aug |url=https://www.traveldailymedia.com/bangkok-airways-to-resume-first-international-flight-on-samui-singapore-route-from-1-aug/ |work=Travel Daily|location=London|date=26 July 2021 |access-date=27 July 2021 |archive-date=7 January 2022 |archive-url=https://web.archive.org/web/20220107180955/https://www.traveldailymedia.com/bangkok-airways-to-resume-first-international-flight-on-samui-singapore-route-from-1-aug/ |url-status=live }}</ref> <!-- --> | [[Batik Air]] | [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]],<ref name="batikairfocus">{{Cite web|date=23 August 2023 |access-date=1 January 2026 |title=Airline in Focus:Batik Air|website=Aviation Week|url=https://aviationweek.com/air-transport/airline-focus-batik-air}}</ref> [[Kualanamu International Airport|Medan]]<ref name="batikairfocus"/> <!-- --> | [[Batik Air Malaysia]] |[[Sultan Azlan Shah Airport|Ipoh]],<ref name="Batik Air Malaysia launches new flights to Penang, Ipoh and Subang">{{cite web |author1=Goh See Min |title=Batik Air Malaysia launches new flights to Penang, Ipoh and Subang |url=https://nowboarding.changiairport.com/discover-changi/batik-air-new-flights-to-ipoh-penang-subang.html |website=Changi Airport: Now Boarding |publisher=Changi Airport Singapore |date=22 September 2025}}</ref> [[Kota Kinabalu International Airport|Kota Kinabalu]],<ref>{{cite web|title=Batik Air flying to over 63 destinations across 20 countries, and counting!|url=https://www.batikair.com.my/new-routes}}</ref> [[Kuala Lumpur International Airport|Kuala Lumpur–International]],<ref name="Batik Air Malaysia launches new flights to Penang, Ipoh and Subang" /> [[Sultan Abdul Aziz Shah Airport|Kuala Lumpur–Subang]],<ref name="Batik Air Malaysia launches new flights to Penang, Ipoh and Subang" /> [[Penang International Airport|Penang]]<ref name="Batik Air Malaysia launches new flights to Penang, Ipoh and Subang" /> <!-- --> | [[Biman Bangladesh Airlines]] | [[Hazrat Shahjalal International Airport|Dhaka]]<ref>{{Cite web|date=27 June 2025 |access-date=1 January 2026|title=Singapore-bound Biman flight makes emergency landing shortly after takeoff in Dhaka|url=https://www.thestar.com.my/aseanplus/aseanplus-news/2025/06/27/singapore-bound-biman-flight-makes-emergency-landing-shortly-after-takeoff-from-dhaka}}</ref> <!-- --> | [[British Airways]] | [[Heathrow Airport|London–Heathrow]],<ref>{{cite web|url=https://www.airpaz.com/en/airlines/BA-British-Airways/airport-airport/singapore-changi-airport-sin-heathrow-airport-lhr|title=British Airways Flight from Singapore Changi Airport to Heathrow Airport|website=www.airpaz.com}}</ref> [[Sydney Airport|Sydney–Kingsford Smith]]<ref>{{cite web|title = British Airways celebrates 90 years of flying between Australia and London with special fares offering savings of up to AUD 900|url=https://mediacentre.britishairways.com/news/23042025/british-airways-celebrates-90-years-of-flying-between-australia-and-london-with-special-fares-offering-savings-of-up-to-aud-900}}</ref><ref>{{cite web|title = March routes roundup: British Airways to launch a second route to Australia|url=https://www.flightradar24.com/blog/aviation-news/airline-news/airline-routes/march-routes-roundup-british-airways-to-launch-a-second-route-to-australia/}}</ref> <!-- --> | [[Cambodia Airways]] | [[Sanya Phoenix International Airport|Sanya]]<ref>{{cite web |title=Cambodia Airways to commence Phnom Penh-Sanya-Singapore service in Dec-2023 |url=https://centreforaviation.com/news/cambodia-airways-to-commence-phnom-penh-sanya-singapore-service-in-dec-2023-1237211 |website=CAPA |publisher=Informa Markets |date=30 November 2023 |url-access=subscription |access-date=30 November 2023 |archive-date=1 December 2023 |archive-url=https://web.archive.org/web/20231201063341/https://centreforaviation.com/news/cambodia-airways-to-commence-phnom-penh-sanya-singapore-service-in-dec-2023-1237211 |url-status=live }}</ref> <!-- --> | [[Cathay Pacific]] | [[Hong Kong International Airport|Hong Kong]]<ref>{{OAGWorldAug2025Ref|title=Hong Kong (SAR) China HKG|pages=543-547}}</ref> <!-- --> | [[Cebu Pacific]] | [[Mactan–Cebu International Airport|Cebu]],<ref name="cebufare"/> [[Clark International Airport|Clark]],<ref>{{cite web|url=https://asianaviation.com/hk-express-expands-footprint-in-vietnam-cebu-pacific-increases-flights-from-singapore/|title=HK Express expands footprint in Vietnam; Cebu Pacific increases flights from Singapore|publisher=Asian Aviation|date=30 April 2023|accessdate=7 May 2024}}</ref> [[Iloilo International Airport|Iloilo]],<ref name="cebufare">{{Cite web|date=24 November 2025 |access-date=1 January 2026 |title=Cebu Pacific rolls out P338 promo fare to Singapore|website=GMA News|url=https://www.gmanetwork.com/news/money/companies/967213/cebu-pacific-rolls-out-p388-promo-fare-to-singapore/story/}}</ref> [[Ninoy Aquino International Airport|Manila]]<ref name="cebufare"/> <!-- --> | [[China Airlines]] | [[Kaohsiung International Airport|Kaohsiung]],<ref>{{OAGWorldAug2025Ref|title=Kaohsiung, Chinese Taipei KHH|pages=618-619}}</ref> [[Taoyuan International Airport|Taipei–Taoyuan]]<ref name="OAG Flight Guide Worldwide-2025b">{{OAGWorldAug2025Ref|title=Taipei, Chinese Taipei TPE|pages=1253-1255}}</ref> <!-- --> | [[China Eastern Airlines]] | [[Changsha Huanghua International Airport|Changsha]],<ref>name="ChinaSouthernfocus">{{Cite web|date=7 January 2025 |access-date=1 January 2026 |title=Airline in Focus:China Southern Airlines|website=Aviation Week|url=https://aviationweek.com/air-transport/airline-focus-china-southern-airlines}}</ref> [[Beijing Daxing International Airport|Beijing–Daxing]],<ref>{{cite web |title=China Eastern Airlines to resume Beijing Daxing-Singapore service from Dec-2023 |url=https://centreforaviation.com/news/china-eastern-airlines-to-resume-beijing-daxing-singapore-service-from-dec-2023-1237434 |website=CAPA |publisher=Informa Markets |date=1 December 2023 |url-access=subscription |access-date=6 December 2023 |archive-date=7 December 2023 |archive-url=https://web.archive.org/web/20231207180301/https://centreforaviation.com/news/china-eastern-airlines-to-resume-beijing-daxing-singapore-service-from-dec-2023-1237434 |url-status=live }}</ref> [[Hangzhou Xiaoshan International Airport|Hangzhou]],<ref>{{cite web |author1=David Casey |title=China Eastern Adds New Links To Australia, New Zealand, Singapore |url=https://aviationweek.com/air-transport/airports-networks/china-eastern-adds-new-links-australia-new-zealand-singapore |website=Aviation Week Network |publisher=Informa Markets |date=9 October 2023 |access-date=10 October 2023 |archive-date=13 October 2023 |archive-url=https://web.archive.org/web/20231013054921/https://aviationweek.com/air-transport/airports-networks/china-eastern-adds-new-links-australia-new-zealand-singapore |url-status=live }}</ref> [[Hefei Xinqiao International Airport|Hefei]],<ref>{{cite web|url=https://www.airpaz.com/en/airlines/MU-China-Eastern-Airlines/airport-airport/singapore-changi-airport-sin-hefei-xinqiao-international-airport-hfe|title=China Eastern Flight from Singapore Changi Airport to Hefei Xinqiao International Airport|website=www.airpaz.com}}</ref> [[Kunming Changshui International Airport|Kunming]],<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Kunming|url=https://www.flightsfrom.com/SIN-KMG}}</ref> [[Nanchang Changbei International Airport|Nanchang]],<ref>{{cite web|url=https://www.airpaz.com/en/airlines/MU-China-Eastern-Airlines/airport-airport/singapore-changi-airport-sin-nanchang-changbei-international-airport-khn|title=China Eastern Flight from Singapore Changi Airport to Nanchang Changbei International Airport|website=www.airpaz.com}}</ref> [[Nanjing Lukou International Airport|Nanjing]] (resumes 20 June 2026),<ref>{{cite web |title=China Eastern Airlines to resume Nanjing-Singapore service from Jun-2026 |url=https://centreforaviation.com/news/china-eastern-airlines-to-resume-nanjing-singapore-service-from-jun-2026-1356378 |website=CAPA |publisher=Informa Markets |date=23 April 2026 |url-access=subscription}}</ref> [[Ningbo Lishe International Airport|Ningbo]],<ref>{{cite web |title=Singapore's Changi Airport adds eight new destinations |date=3 April 2025 |url=https://www.businesstraveller.com/business-travel/2025/04/03/singapores-changi-airport-adds-eight-new-destinations/ |access-date=9 April 2025 |archive-date=4 April 2025 |archive-url=https://web.archive.org/web/20250404061459/https://www.businesstraveller.com/business-travel/2025/04/03/singapores-changi-airport-adds-eight-new-destinations/ |url-status=live }}</ref> [[Shanghai Pudong International Airport|Shanghai–Pudong]],<ref>{{Cite web|date=19 August 2025 |access-date=1 January 2026 |title=What led to Changi Airport runway incident involving 2 China Eastern planes in Aug 2024|url=https://www.straitstimes.com/singapore/transport/two-china-eastern-airlines-planes-involved-in-runway-incursion-at-changi-airport-in-august-2024}}</ref> [[Wuhan Tianhe International Airport|Wuhan]],<ref>{{Cite web |date=16 January 2026 |title=Changi Airport adds over 600 flights for Chinese New Year – extended check-ins, 24-hour lounge and longer Jewel's rain vortex hours |url=https://www.timeout.com/singapore/news/changi-airport-adds-over-600-flights-for-chinese-new-year-extended-check-ins-24-hour-lounge-and-longer-jewels-rain-vortex-hours-011626 |website=Time Out Singapore}}</ref> [[Xi'an Xianyang International Airport|Xi'an]]<ref>{{Cite web |title=新航季{{!}}2024年冬航季东上航陕西始发航班时刻表 |url=https://mp.weixin.qq.com/s/b1PKaeqP2G9J89rDVJaiKA |access-date=7 November 2024 |archive-date=12 November 2024 |archive-url=https://web.archive.org/web/20241112175135/https://mp.weixin.qq.com/s/b1PKaeqP2G9J89rDVJaiKA |url-status=live }}</ref> <!-- --> | {{nowrap|[[China Southern Airlines]]}} | [[Changsha Huanghua International Airport|Changsha]],<ref name="ChinaSouthernfocus">{{Cite web|date=7 January 2025 |access-date=1 January 2026 |title=Airline in Focus:China Southern Airlines|website=Aviation Week|url=https://aviationweek.com/air-transport/airline-focus-china-southern-airlines}}</ref> [[Guangzhou Baiyun International Airport|Guangzhou]],<ref name="ChinaSouthernfocus"/> [[Shenzhen Bao'an International Airport|Shenzhen]]<ref>{{cite web |title=China Southern Airlines to commence Shenzhen-Singapore service in Nov-2023 |url=https://centreforaviation.com/news/china-southern-airlines-to-commence-shenzhen-singapore-service-in-nov-2023-1229860 |website=CAPA |publisher=Informa Markets |date=20 October 2023 |url-access=subscription |access-date=20 October 2023 |archive-date=21 October 2023 |archive-url=https://web.archive.org/web/20231021120454/https://centreforaviation.com/news/china-southern-airlines-to-commence-shenzhen-singapore-service-in-nov-2023-1229860 |url-status=live }}</ref> <!-- --> | [[Chongqing Airlines]] | [[Chongqing Jiangbei International Airport|Chongqing]]<ref>{{cite web |title=Chongqing Airlines to resume Chongqing-Singapore service from late Feb-2023 |url=https://centreforaviation.com/news/chongqing-airlines-to-resume-chongqing-singapore-service-from-late-feb-2023-1184803 |website=CAPA |date=8 February 2023 |url-access=subscription |access-date=8 February 2023 |archive-date=8 February 2023 |archive-url=https://web.archive.org/web/20230208095825/https://centreforaviation.com/news/chongqing-airlines-to-resume-chongqing-singapore-service-from-late-feb-2023-1184803 |url-status=live }}</ref> <!-- --> | [[Citilink]] | [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]]<ref>{{cite news|url=https://centreforaviation.com/news/citilink-to-launch-jakarta-singapore-service-from-01-oct-2022-1162628|title=Citilink to launch Jakarta-Singapore service from 01-Oct-2022|work=CAPA|publisher=Informa Markets|location=London|date=30 September 2022|access-date=30 September 2022|url-access=subscription|archive-date=4 October 2022|archive-url=https://web.archive.org/web/20221004092843/https://centreforaviation.com/news/citilink-to-launch-jakarta-singapore-service-from-01-oct-2022-1162628|url-status=live}}</ref> <!-- --> | [[Drukair]] | [[Lokpriya Gopinath Bordoloi International Airport|Guwahati]],<ref name="drukguwahati">{{Cite web|date=13 August 2022 |access-date=1 January 2026 |title=Guwahati to resume international flight services with Drukair, first time since the Pandemic|website=India Times|url=https://timesofindia.indiatimes.com/travel/travel-news/guwahati-to-resume-international-flight-services-with-druk-air-first-since-the-pandemic/articleshow/93532496.cms}}</ref> [[Paro International Airport|Paro]]<ref name="drukguwahati"/> <!-- --> | [[Emirates (airline)|Emirates]] | [[Dubai International Airport|Dubai–International]],<ref>{{OAGWorldMay2025Ref|title=Dubai, United Arab Emirates DXB|pages=337-343}}</ref> [[Techo International Airport|Phnom Penh]]<ref>{{Cite news |date=6 May 2025 |title=Emirates opens first retail store in Singapore, with carrier expecting higher air traffic |url=https://www.straitstimes.com/business/emirates-opens-first-retail-store-in-singapore-with-carrier-expecting-higher-air-traffic |access-date=17 January 2026 |work=The Straits Times |language=en |issn=0585-3923}}</ref> <!-- --> | [[Ethiopian Airlines]] | [[Addis Ababa Bole International Airport|Addis Ababa]],<ref>{{OAGWorldMay2025Ref|title=Addis Ababa, Ethiopia ADD|pages=17-19}}</ref> [[Kuala Lumpur International Airport|Kuala Lumpur–International]]<ref>{{cite web|url=https://www.airpaz.com/en/airlines/ET-Ethiopian-Airlines/airport-airport/singapore-changi-airport-sin-kuala-lumpur-international-airport-kul|title=Ethiopian Airlines Flight from Singapore Changi Airport to Kuala Lumpur International Airport|website=www.airpaz.com}}</ref> <!-- --> | [[Etihad Airways]] | [[Zayed International Airport|Abu Dhabi]]<ref>{{OAGWorldAug2025Ref|title=Abu Dhabi, United Arab Emirates AUH|pages=14-16}}</ref> <!-- --> | [[EVA Air]] | [[Taoyuan International Airport|Taipei–Taoyuan]]<ref name="OAG Flight Guide Worldwide-2025b"/> <!-- --> | [[Fiji Airways]] | [[Nadi International Airport|Nadi]]<ref>{{Cite web|date=3 November 2017 |access-date=1 January 2026 |title=Fiji Airways increase Singapore flights to three per week in peak seasons|url=https://aviator.aero/press/fiji-airways-increases-singapore-flights-to-three-per-week-in-peak-seasons}}</ref> <!-- --> | [[Finnair]] | [[Helsinki International Airport|Helsinki]]<ref>{{Cite web|date=17 October 2016 |access-date=1 January 2026 |title=Finnair launches Singapore to Helsinki route, claiming fastest way to get to Europe|website=CNBC|url=https://www.cnbc.com/2016/10/17/finnair-launches-singapore-to-helsinki-route-claiming-fastest-way-to-get-to-europe}}</ref> <!-- --> | [[Firefly (airline)|Firefly]] | [[Kuala Lumpur International Airport|Kuala Lumpur–International]]<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Kuala Lumpur|url=https://www.flightsfrom.com/SIN-KUL}}</ref> <!-- --> | [[Garuda Indonesia]] | [[Ngurah Rai International Airport|Denpasar]],<ref>{{cite news|url=https://en.tempo.co/read/1608533/bali-opens-two-international-flights-from-philippines-singapore|title=Bali Opens Two International Flights from Philippines, Singapore|last=Christy Hosana|first=Francisca|work=Tempo.co|location=Jakarta|date=4 July 2022|access-date=4 July 2022|archive-date=5 November 2022|archive-url=https://web.archive.org/web/20221105172722/https://en.tempo.co/read/1608533/bali-opens-two-international-flights-from-philippines-singapore|url-status=live}}</ref> [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]]<ref>{{cite web|url=https://www.airpaz.com/en/flight/code/GA-8964|title=Check Garuda Indonesia GA8964 Flight Schedule|website=www.airpaz.com}}</ref> <!-- --> | [[Gulf Air]] | [[Bahrain International Airport|Bahrain]]<ref>{{OAGWorldMay2025Ref|title=Bahrain, Bahrain BAH|pages=88-90}}</ref><ref>{{cite press release |title=Gulf Air Is Back At Singapore Changi Airport |url=https://www.gulfair.com/media-centre/press-releases/gulf-air-is-back-at-singapore-changi-airport |publisher=Gulf Air |date=4 April 2021 |access-date=15 March 2022 |archive-date=22 May 2022 |archive-url=https://web.archive.org/web/20220522083134/https://www.gulfair.com/media-centre/press-releases/gulf-air-is-back-at-singapore-changi-airport |url-status=live }}</ref> <!-- --> | [[Hainan Airlines]] | [[Changchun Longjia International Airport|Changchun]],<ref>{{Cite web|date=23 September 2025 |access-date=1 January 2026 |title=Changchun Launches New International Flight Route|url=https://www.itiger.com/news/1163517043}}</ref> [[Haikou International Airport|Haikou]],<ref>{{Cite web|date=10 January 2025 |access-date=1 January 2026 |title=Hainan Airlines grows Singapore network|website=Business Insider|url=https://www.businesstraveller.com/business-travel/hainan-airlines-grows-singapore-network/}}</ref> [[Lanzhou Zhongchuan International Airport|Lanzhou]],<ref name="nowboarding.changiairport.com">{{cite web |title=Changi Airport expands reach to Lanzhou and Yichang in China with new Hainan Airlines flights |url=https://nowboarding.changiairport.com/discover-changi/changi-airport-expands-to-lanzhou-yichang-hainan-airlines.html |access-date=30 March 2025 |archive-date=30 March 2025 |archive-url=https://web.archive.org/web/20250330133229/https://nowboarding.changiairport.com/discover-changi/changi-airport-expands-to-lanzhou-yichang-hainan-airlines.html |url-status=live }}</ref> [[Yichang Sanxia International Airport|Yichang]]<ref name="nowboarding.changiairport.com" /> <!-- --> | [[IndiGo]] | [[Kempegowda International Airport|Bengaluru]],<ref name="indigoexpand">{{Cite web|date=4 August 2025 |access-date=1 January 2026|title=Singapore tourism board,IndiGo expand partnership to boost Indian travel to Singapore|website=TTG Asia|url=https://www.ttgasia.com/2025/08/04/singapore-tourism-board-indigo-expand-partnership-to-boost-indian-travel-to-singapore/}}</ref> [[Chennai International Airport|Chennai]],<ref name="indigoexpand"/> [[Coimbatore International Airport|Coimbatore]],<ref>{{cite web |title=IndiGo to commence Coimbatore-Singapore service in Oct-2024 |url=https://centreforaviation.com/news/indigo-to-commence-coimbatore-singapore-service-in-oct-2024-1275072 |website=CAPA |publisher=Informa Markets |date=5 August 2024 |url-access=subscription |access-date=7 August 2024 |archive-date=7 August 2024 |archive-url=https://web.archive.org/web/20240807211845/https://centreforaviation.com/news/indigo-to-commence-coimbatore-singapore-service-in-oct-2024-1275072 |url-status=live }}</ref> [[Indira Gandhi International Airport|Delhi]],<ref>{{cite web|url=https://www.zeebiz.com/economy-infra/aviation/news-indigo-adds-flights-to-singapore-bangkok-after-go-first-cancels-flights-interglobe-aviation-share-price-on-bse-nse-233237|title=IndiGo strengthens connectivity to Southeast Asia, adds flights connecting Singapore, Bangkok|work=Zee Business|date=3 May 2023|access-date=3 May 2023|archive-date=15 May 2023|archive-url=https://web.archive.org/web/20230515032500/https://www.zeebiz.com/economy-infra/aviation/news-indigo-adds-flights-to-singapore-bangkok-after-go-first-cancels-flights-interglobe-aviation-share-price-on-bse-nse-233237|url-status=live}}</ref> [[Rajiv Gandhi International Airport|Hyderabad]],<ref>{{cite news|title=IndiGo To Start Daily Direct Flights On Hyderabad-Singapore Route From October 29|url=https://travelbizmonitor.com/indigo-to-start-daily-direct-flights-on-hyderabad-singapore-routes-from-october-29/|work=Travel Biz Monitor|date=19 July 2023|access-date=19 July 2023|language=en}}</ref> [[Netaji Subhas Chandra Bose International Airport|Kolkata]],<ref name="indigoexpand"/> [[Chhatrapati Shivaji Maharaj International Airport|Mumbai–Shivaji]],<ref>{{cite web|url=https://centreforaviation.com/news/indigo-to-resume-mumbai-singapore-service-from-mar-2023-1186961|title=IndiGo to resume Mumbai-Singapore service from Mar-2023|work=CAPA|access-date=22 February 2023|url-access=subscription|archive-date=22 February 2023|archive-url=https://web.archive.org/web/20230222200038/https://centreforaviation.com/news/indigo-to-resume-mumbai-singapore-service-from-mar-2023-1186961|url-status=live}}</ref> [[Tiruchirappalli International Airport|Tiruchirappali]],<ref name="indigoexpand"/> [[Vijayawada Airport|Vijayawada]]<ref>{{cite web |title=IndiGo to Launch Direct Flights between Vijayawada and Singapore from November 15|url=https://traveltradejournal.com/indigo-to-launch-direct-flights-between-vijayawada-and-singapore-from-november-15/|website=traveltradejournal.com |date=12 October 2025 }}</ref> <!-- --> | [[Indonesia AirAsia]] | [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]]<ref>{{Cite news |title=Singapore knocks back AirAsia licence request three times |url=https://www.ch-aviation.com/news/145249-singapore-knocks-back-airasia-licence-request-three-times |archive-url=http://web.archive.org/web/20251118033535/https://www.ch-aviation.com/news/145249-singapore-knocks-back-airasia-licence-request-three-times |archive-date=18 November 2025 |access-date=17 January 2026 |work=ch-aviation |language=en-US}}</ref> <!-- --> | [[Japan Airlines]] | [[Haneda International Airport|Tokyo–Haneda]],<ref name="Japan65">{{Cite web|date=8 August 2023|access-date=2 January 2026|title=Japan Airlines:65 years of connecting Singapore and Japan|url=https://sms-bridges.com/japan-airlines-65-years-of-connecting-singapore-and-japan/}}</ref> [[Narita International Airport|Tokyo–Narita]]<ref name="Japan65"/> <!-- --> | [[Jeju Air]] | [[Gimhae International Airport|Busan]],<ref>{{cite news|title=Jeju Air to resume Busan-Singapore route next month|url=http://www.koreaherald.com/view.php?ud=20220509000227|location=[[Seoul]]|newspaper=[[The Korea Herald]]|agency=[[Yonhap News Agency]]|date=9 May 2022|language=en|access-date=19 May 2022|archive-date=19 May 2022|archive-url=https://web.archive.org/web/20220519123938/http://www.koreaherald.com/view.php?ud=20220509000227|url-status=live}}</ref> [[Incheon International Airport|Seoul–Incheon]]<ref>{{Cite news |last=Yohannan |first=Rachel |title=Jeju Air launches its first direct flights between Singapore and Seoul at budget fares from just $245 |url=https://www.timeout.com/singapore/news/korean-budget-airline-jeju-air-launches-its-first-direct-flights-between-singapore-and-seoul-031825 |archive-url=http://web.archive.org/web/20250414103040/https://www.timeout.com/singapore/news/korean-budget-airline-jeju-air-launches-its-first-direct-flights-between-singapore-and-seoul-031825 |archive-date=14 April 2025 |access-date=17 January 2026 |work=Time Out Singapore |language=en-GB}}</ref> <!-- --> | [[Jetstar]] | [[Ngurah Rai International Airport|Denpasar]],<ref>{{cite web|url=https://www.airpaz.com/en/airlines/JQ-Jetstar-Airways/airport-airport/singapore-changi-airport-sin-ngurah-rai-international-airport-dps|title=Jetstar Airways Flight from Singapore Changi Airport to Ngurah Rai International Airport|website=www.airpaz.com}}</ref> [[Melbourne Airport|Melbourne]],<ref>{{cite news |author1=Chew Hui Min |title=Jetstar Asia plans to resume flights between Singapore and Darwin in December, pending travel corridor opening |url=https://cna.asia/singapore/jetstar-travel-lane-darwin-australia-singapore-covid-19-vaccination-2206961 |work=CNA |publisher=Mediacorp |date=28 September 2021 |language=en |quote=The announcement follows the Qantas Group's international restart plan, which includes Jetstar Airways resuming services between Melbourne and Singapore from Dec 19, also pending government and regulatory approvals. |access-date=4 April 2022 |archive-date=22 May 2022 |archive-url=https://web.archive.org/web/20220522083133/https://www.channelnewsasia.com/ |url-status=live }}</ref> [[Newcastle Airport (New South Wales)|Newcastle]],<ref>{{cite web |title=Jetstar Boosts Global Connectivity from Newcastle with Singapore via Bali Service |url=https://www.aci-asiapac.aero/media-centre/news/jetstar-boosts-global-connectivity-from-newcastle-with-singapore-via-bali-service |website=ACI Asia-Pacific & Middle East |language=en |date=13 November 2025}}</ref> [[Perth Airport|Perth]],<ref>{{cite web |author1=Joshua Ng |title=Jetstar returns with Singapore-Perth flights |url=https://nowboarding.changiairport.com/discover-changi/jetstar-returns-to-perth-from-changi-airport.html |website=Changi Airport: Now Boarding |publisher=Changi Airport Singapore |date=1 August 2024}}</ref> [[Sunshine Coast Airport|Sunshine Coast]]<ref>{{cite news |title=Jetstar's Game-Changing New Route: Sunshine Coast to Bali & Singapore - Pulse Travel |url=https://www.pulsetravel.com.au/news/jetstars-game-changing-new-route-sunshine-coast-to-bali-singapore/ |access-date=20 November 2025 |date=13 November 2025}}</ref> <!-- --> | [[Juneyao Air]] | [[Shanghai Pudong International Airport|Shanghai–Pudong]],<ref>{{Cite news |title=China's Juneyao Air defers B787 delivery due to US tariffs |url=https://www.ch-aviation.com/news/152620-chinas-juneyao-air-defers-b787-delivery-due-to-us-tariffs |archive-url=http://web.archive.org/web/20251114220752/https://www.ch-aviation.com/news/152620-chinas-juneyao-air-defers-b787-delivery-due-to-us-tariffs |archive-date=14 November 2025 |access-date=17 January 2026 |work=ch-aviation |language=en-US}}</ref> [[Wuxi Shuofang Airport|Wuxi]]<ref>{{cite web |author1=Derryn Wong |title=China’s Juneyao Air takes over Jetstar Asia’s Singapore-Wuxi route in August |url=https://www.businesstimes.com.sg/international/chinas-juneyao-air-takes-over-jetstar-asias-singapore-wuxi-route-august |website=The Business Times |publisher=SPH Media Limited |language=en |date=21 July 2025}}</ref> <!-- --> | [[KLM]] | [[Amsterdam Airport Schiphol|Amsterdam]],<ref name="KLMcancelled">{{Cite web|date=26 November 2017 |access-date=1 January 2026|title=KLM flights Singapore-Denpasar-Singapore cancelled on 26 November after volcanic eruption in Indonesia|url=https://www.aviation24.be/airlines/air-france-klm-group/klm-royal-dutch-airlines/klm-flights-kl835-kl836-singapore-denpasar-singapore-cancelled-26-november-volcanic-eruption-indonesia/}}</ref> [[Ngurah Rai International Airport|Denpasar]]<ref name="KLMcancelled"/> | [[Korean Air]] | [[Incheon International Airport|Seoul–Incheon]]<ref name="OAG Flight Guide Worldwide-2025a" /> <!-- --> | [[Loong Air]] | [[Hangzhou Xiaoshan International Airport|Hangzhou]],<ref>{{cite web |title=Loong Air to commence Hangzhou-Zhangjiajie-Singapore service in Oct-2025 |url=https://centreforaviation.com/news/loong-air-to-commence-hangzhou-zhangjiajie-singapore-service-in-oct-2025-1330694 |website=CAPA |publisher=Informa Markets |date=4 September 2025 |url-access=subscription}}</ref> [[Wenzhou Longwan International Airport|Wenzhou]],<ref>{{Cite web|date=20 November 2024 |access-date=1 January 2026|title=Non-stop flights between Singapore and Wenzhou begins on Dec 24|website=The Straits Times|url=https://www.straitstimes.com/singapore/non-stop-flights-between-singapore-and-wenzhou-to-start-on-dec-24}}</ref> [[Zhangjiajie Hehua International Airport|Zhangjiajie]]<ref>{{cite web |title=Loong Air to commence Hangzhou-Zhangjiajie-Singapore service in Oct-2025 |url=https://centreforaviation.com/news/loong-air-to-commence-hangzhou-zhangjiajie-singapore-service-in-oct-2025-1330694 |website=CAPA |publisher=Informa Markets |date=4 September 2025 |url-access=subscription}}</ref> <!-- --> | [[Lufthansa]] | [[Frankfurt Airport|Frankfurt]],<ref>{{Cite web|date=28 October 2022|access-date=1 January 2026 |title=Lufthansa brings First Class back to Singapore|website=MainlyMiles|url=https://mainlymiles.com/2022/10/28/lufthansa-brings-first-class-back-to-singapore/}}</ref> [[Munich Airport|Munich]]<ref>{{Cite web|date=19 March 2018|access-date=1 January 2026 |title=Lufthansa launches Singapore to Munich A350 route next week|website=MainlyMiles|url=https://mainlymiles.com/2018/03/19/lufthansa-launch-singapore-to-munich-a350-route-next-week/}}</ref> <!-- --> | [[Malaysia Airlines]] | [[Kuala Lumpur International Airport|Kuala Lumpur–International]]<ref>{{cite web|url=https://www.airpaz.com/en/airlines/MH-Malaysia-Airlines/airport-airport/singapore-changi-airport-sin-kuala-lumpur-international-airport-kul|title=Malaysia Airlines Flight from Singapore Changi Airport to Kuala Lumpur International Airport|website=www.airpaz.com}}</ref> <!-- --> | [[MIAT Mongolian Airlines]] | [[Chinggis Khaan International Airport|Ulaanbaatar]]<ref>{{Cite web|title=Singapore now has non-stop flights to Mongolia|url=https://mainlymiles.com/2025/11/06/singapore-now-has-non-stop-flights-to-mongolia|date=6 November 2025}}</ref> <!-- --> | {{nowrap|[[Myanmar Airways International]]}} | [[Yangon International Airport|Yangon]]<ref>{{Cite web|date=21 January 2025 |access-date=1 January 2026 |title=MAI increases flights to Yangon|website=TTRWeekly|url=https://www.ttrweekly.com/site/2025/01/myanmar-airways-international-increases-flights-from-home-base/}}</ref> <!-- --> | {{nowrap|[[Myanmar National Airlines]]}} | [[Yangon International Airport|Yangon]]<ref>{{Cite web|date=6 July 2015 |access-date=1 January 2026 |title=Myanmar National Airlines faces challenges as bold international expansion begins with Singapore|url=https://centreforaviation.com/analysis/reports/myanmar-national-airlines-faces-challenges-as-bold-international-expansion-begins-with-singapore-233160}}</ref> <!-- --> | [[Oman Air]] | [[Muscat International Airport|Muscat]] (resumes 2 July 2026)<ref>{{cite web |title=Oman Air launches direct flights between Muscat and Singapore starting July 2026|url=https://www.zawya.com/en/economy/gcc/oman-air-launches-direct-flights-between-muscat-and-singapore-starting-july-2026-isvnd1p9|website=www.zawya.com|date=16 December 2025}}</ref> <!-- --> | [[Peach Aviation|Peach]] | [[Kansai International Airport|Osaka–Kansai]]<ref>{{cite news |author1=Sarah Stanley |title=Travel News: Peach Aviation to begin direct Singapore-Osaka flights, one-way fares from $164.20 |url=https://www.straitstimes.com/life/travel/travel-news-peach-aviation-to-begin-direct-singapore-osaka-flights-one-way-fares-from-16420 |work=The Straits Times |publisher=SPH Media Limited |date=29 August 2024 |language=en |archive-date=29 August 2024 |access-date=29 August 2024 |archive-url=https://web.archive.org/web/20240829073134/https://www.straitstimes.com/life/travel/travel-news-peach-aviation-to-begin-direct-singapore-osaka-flights-one-way-fares-from-16420 |url-status=live }}</ref> <!-- --> | [[Pelita Air]] | [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]]<ref>{{cite news |author1=Shikhar Gupta |title=Pelita Air to start flying between Jakarta, Singapore from Aug 18 |url=https://www.businesstimes.com.sg/companies-markets/transport-logistics/pelita-air-start-flying-between-jakarta-singapore-aug-18 |work=The Business Times |publisher=SPH Media Limited |date=31 July 2025 |language=en}}</ref> <!-- --> | [[Philippine Airlines]] | [[Ninoy Aquino International Airport|Manila]]<ref>{{Cite web|date=12 December 2024|access-date=1 January 2026 |title=Airline in Focus:Philippine Airlines|website=Aviation Week|url=https://aviationweek.com/air-transport/airline-focus-philippine-airlines?highlight=Philippine%20Airlines}}</ref> <!-- --> | [[Qantas]] | [[Brisbane Airport|Brisbane]],<ref name="qantas90">{{Cite web|date=17 April 2025 |access-date=1 January 2026 |title=Qantas marks 90 years in Singapore|website=Travel Daily Media|url=https://www.traveldailymedia.com/qantas-marks-90-years-in-singapore/}}</ref> [[Darwin International Airport|Darwin]],<ref name="qantas90"/> [[Heathrow Airport|London–Heathrow]],<ref name="qantas90"/> [[Melbourne Airport|Melbourne]],<ref name="qantas90"/> [[Charles de Gaulle Airport|Paris–Charles de Gaulle]],<ref>{{cite web |title=Qantas Group extends schedule changes across domestic and international network |url=https://centreforaviation.com/news/qantas-group-extends-schedule-changes-across-domestic-and-international-network-1357612 |website=Centre for Aviation |date=4 May 2026 }}</ref> [[Perth Airport|Perth]],<ref name="qantas90"/> [[Sydney Airport|Sydney–Kingsford Smith]]<ref name="qantas90"/> <!-- --> | [[Qatar Airways]] | [[Hamad International Airport|Doha]]<ref>{{Cite web|date=16 November 2025 |access-date=2 January 2026| title=Confirmed:Singapore to get year round Qatar Airways A380 Flights|website=Mainly Miles|url=https://mainlymiles.com/2025/11/16/confirmed-singapore-to-get-year-round-qatar-airways-a380-flights/}}</ref> <!-- --> | [[Royal Brunei Airlines]] | [[Brunei International Airport|Bandar Seri Begawan]]<ref>{{Cite web|title=Royal Brunei Operating Flights|url=https://www.flyroyalbrunei.com/wp-content/uploads/2025/12/17Dec2026-RB-Operating-Flights.pdf}}</ref> <!-- --> | [[Saudia]] | [[Ngurah Rai International Airport|Denpasar]],<ref>{{cite web|url=https://www.airpaz.com/en/airlines/SV-Saudia/airport-airport/singapore-changi-airport-sin-ngurah-rai-international-airport-dps|title=Saudia (Formerly Saudi Arabian Airlines) Flight from Singapore Changi Airport to Ngurah Rai International Airport|website=www.airpaz.com}}</ref> [[King Abdulaziz International Airport|Jeddah]]<ref>{{OAGWorldAug2025Ref|title=Jeddah, Saudi Arabia JED|pages=597-600}}</ref> <!-- --> | [[Scoot]] | [[Sri Guru Ram Dass Jee International Airport|Amritsar]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Athens International Airport|Athens]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Sultan Aji Muhammad Sulaiman Sepinggan Airport|Balikpapan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kertajati International Airport|Bandung–Kertajati]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite news |url=https://www.straitstimes.com/singapore/transport/scoot-to-launch-flights-to-kertajati-in-indonesia-and-melaka-in-malaysia-on-new-embraer-jets |title=Scoot to launch flights to Kertajati in Indonesia |work=straitstimes |date=6 August 2024 |accessdate=6 August 2024 |last1=Loi |first1=Esther |archive-date=7 August 2024 |archive-url=https://web.archive.org/web/20240807102923/https://www.straitstimes.com/singapore/transport/scoot-to-launch-flights-to-kertajati-in-indonesia-and-melaka-in-malaysia-on-new-embraer-jets |url-status=live }}</ref> [[Suvarnabhumi Airport|Bangkok–Suvarnabhumi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Mactan–Cebu International Airport|Cebu]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Changsha Huanghua International Airport|Changsha]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="SIA posts">{{cite news |author1=Ven Sreenivasan |title=SIA posts record $1.44 billion net profit for first half |url=https://www.straitstimes.com/business/sia-posts-record-144-billion-net-profit-for-h1 |work=The Straits Times |publisher=SPH Media Limited |date=7 November 2023 |language=en}}</ref> [[Chennai International Airport|Chennai]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite news|last=Yadav|first=Paras|title=Singapore Airlines to Restructure Bengaluru, Chennai, Hyderabad Flights from Oct 29|url=https://www.news18.com/auto/singapore-airlines-to-restructure-bengaluru-chennai-hyderabad-flights-from-oct-29-8444281.html|work=[[News18]]|date=27 July 2023|access-date=28 July 2023|language=en|archive-date=28 July 2023|archive-url=https://web.archive.org/web/20230728043728/https://www.news18.com/auto/singapore-airlines-to-restructure-bengaluru-chennai-hyderabad-flights-from-oct-29-8444281.html|url-status=live}}</ref> [[Chiang Mai International Airport|Chiang Mai]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Chiang Rai International Airport|Chiang Rai]],<ref name="Hazeeq Sukri-2025">{{cite news |author1=Hazeeq Sukri |title=Scoot launching flights to Okinawa, Tokyo Haneda and Chiang Rai as early as December this year |url=https://cnalifestyle.channelnewsasia.com/travel/scoot-okinawa-haneda-chiang-rai-flights-469631 |work=[[CNA (TV network)|CNA]]|publisher=[[Mediacorp]]|location=[[Singapore]] |language=en |date=12 August 2025}}</ref> [[Clark International Airport|Clark]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Coimbatore International Airport|Coimbatore]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Da Nang International Airport|Da Nang]],<ref name="BNB Diviyadhaarshini-2025">{{cite news |author1=BNB Diviyadhaarshini |title=Scoot launches flights to Da Nang, Kota Bharu and Nha Trang; boosts frequency to other destinations |url=https://www.straitstimes.com/singapore/scoot-launches-flights-to-da-nang-kota-bharu-and-nha-trang-boosts-frequency-to-other-destinations |newspaper=The Straits Times |location=Singapore|publisher=SPH Media Limited |date=3 July 2025 |language=en |archive-date=3 July 2025 |access-date=3 July 2025 |archive-url=https://web.archive.org/web/20250703075217/https://www.straitstimes.com/singapore/scoot-launches-flights-to-da-nang-kota-bharu-and-nha-trang-boosts-frequency-to-other-destinations |url-status=live }}</ref> [[Francisco Bangoy International Airport|Davao]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Ngurah Rai International Airport|Denpasar]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Fuzhou Changle International Airport|Fuzhou]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Guangzhou Baiyun International Airport|Guangzhou]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Haikou Meilan International Airport|Haikou]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Scoot plans more">{{cite news |author1=Chin Hui Shan |title=Scoot plans more flights to China, from 14 a week now to 57 by June |url=https://www.straitstimes.com/singapore/scoot-plans-more-flights-to-china-from-14-a-week-now-to-57-by-june |newspaper=[[The Straits Times]] |publisher=[[SPH Media Trust]]|location=[[Singapore]]|date=22 February 2023 |language=en |access-date=23 February 2023 |archive-date=23 February 2023 |archive-url=https://web.archive.org/web/20230223091208/https://www.straitstimes.com/singapore/scoot-plans-more-flights-to-china-from-14-a-week-now-to-57-by-june |url-status=live }}</ref> [[Hangzhou Xiaoshan International Airport|Hangzhou]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="CNA-2022">{{cite news |title=SIA Group adds Japan, Hong Kong, Taiwan flights to meet "buoyant demand" |url=https://www.channelnewsasia.com/singapore/singapore-airlines-scoot-more-flights-east-asia-japan-taiwan-hong-kong-china-travel-demand-2982736 |work=CNA |location=Singapore |publisher=Mediacorp |date=3 October 2022 |access-date=3 October 2022 |archive-date=3 October 2022 |archive-url=https://web.archive.org/web/20221003155433/https://www.channelnewsasia.com/singapore/singapore-airlines-scoot-more-flights-east-asia-japan-taiwan-hong-kong-china-travel-demand-2982736 |url-status=live }}</ref> [[Noi Bai International Airport|Hanoi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Hat Yai International Airport|Hat Yai]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Tan Son Nhat International Airport|Ho Chi Minh City]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Hong Kong International Airport|Hong Kong]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Iloilo International Airport|Iloilo]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{Cite web |last=Chelvan |first=Vanessa Paige |date=16 January 2025 |title=Scoot launches non-stop flights to Vienna, Iloilo City |url=https://www.straitstimes.com/singapore/transport/scoot-launches-non-stop-flights-to-vienna-and-iloilo-city |access-date=16 January 2025 |website=[[The Straits Times]] |archive-date=16 January 2025 |archive-url=https://web.archive.org/web/20250116064704/https://www.straitstimes.com/singapore/transport/scoot-launches-non-stop-flights-to-vienna-and-iloilo-city |url-status=live }}</ref> [[Sultan Azlan Shah Airport|Ipoh]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[King Abdulaziz International Airport|Jeddah]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Jeju International Airport|Jeju]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite web|last1=Jang-Jin |first1=Hwang |url=https://en.yna.co.kr/view/AEN20220615007100315|title=First direct flight service between Jeju, Singapore opens|work=Yonhap News Agency |date=15 June 2022|accessdate=7 May 2024}}</ref> [[Jieyang Chaoshan International Airport|Jieyang]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Mujibah-2024" /> [[Samui Airport|Koh Samui]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Tay Peck Gek-2024">{{cite web |author1=Tay Peck Gek |title=Scoot adds Koh Samui and Sibu to network with new Embraer planes |url=https://www.businesstimes.com.sg/companies-markets/transport-logistics/scoot-adds-koh-samui-and-sibu-to-network-with-new-embraer-planes |website=The Business Times |publisher=SPH Media Limited |language=en |date=5 March 2024}}</ref> [[Sultan Ismail Petra Airport|Kota Bharu]],<ref name="BNB Diviyadhaarshini-2025" /> [[Kota Kinabalu International Airport|Kota Kinabalu]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Krabi International Airport|Krabi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kuala Lumpur International Airport|Kuala Lumpur–International]],<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Kuala Lumpur|url=https://www.flightsfrom.com/SIN-KUL}}</ref> [[Sultan Abdul Aziz Shah Airport|Kuala Lumpur–Subang]],<ref>{{cite web |title=Scoot to launch Subang flights with A320 aircraft |url=https://www.businesstraveller.com/business-travel/2024/07/18/scoot-to-launch-subang-flights-with-a320-aircraft/ |website=Business Traveller |publisher=Business Traveller Media Limited |date=18 July 2024}}</ref> [[Sultan Haji Ahmad Shah Airport|Kuantan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="CAPA-2022">{{cite web |title=Scoot to resume services to Pekanbaru and Kuantan |url=https://centreforaviation.com/news/scoot-to-resume-services-to-pekanbaru-and-kuantan-1164864 |website=CAPA |date=13 October 2022 |url-access=subscription |access-date=15 October 2022 |archive-date=15 October 2022 |archive-url=https://web.archive.org/web/20221015032525/https://centreforaviation.com/news/scoot-to-resume-services-to-pekanbaru-and-kuantan-1164864 |url-status=live }}</ref> [[Kuching International Airport|Kuching]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kunming Changshui International Airport|Kunming]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="SIA posts" /> [[Komodo International Airport|Labuan Bajo]],<ref name="Sheryln-2025"/> [[Langkawi International Airport|Langkawi]],<ref name="scootmalaysia"/> [[Lombok International Airport|Lombok]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Yogyakarta">{{cite web |author1=Andrew |title=Scoot launching Lombok and Yogyakarta flights |url=https://mainlymiles.com/2022/09/21/scoot-launching-lombok-and-yogyakarta-flights/ |website=Mainly Miles |date=21 September 2022 |access-date=22 September 2022 |archive-date=22 September 2022 |archive-url=https://web.archive.org/web/20220922022929/https://mainlymiles.com/2022/09/21/scoot-launching-lombok-and-yogyakarta-flights/ |url-status=live }}</ref> [[Macau International Airport|Macau]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Sultan Hasanuddin International Airport|Makassar]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="CNA-2022" /> [[Malacca International Airport|Malacca]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite news |url=https://www.straitstimes.com/singapore/transport/scoot-to-launch-flights-to-kertajati-in-indonesia-and-melaka-in-malaysia-on-new-embraer-jets |title=Scoot to launch flights to Melaka in Malaysia on new Embraer jets |work=straitstimes |date=6 August 2024 |accessdate=6 August 2024 |last1=Loi |first1=Esther |archive-date=7 August 2024 |archive-url=https://web.archive.org/web/20240807102923/https://www.straitstimes.com/singapore/transport/scoot-to-launch-flights-to-kertajati-in-indonesia-and-melaka-in-malaysia-on-new-embraer-jets |url-status=live }}</ref> [[Sam Ratulangi International Airport|Manado]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Ninoy Aquino International Airport|Manila]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kualanamu International Airport|Medan]],<ref name="Sheryln-2025">{{Cite web |last=Sheryln |first=Sim |date=15 October 2025 |title=Scoot to fly to Indonesia's Labuan Bajo, Medan, Palembang and Semarang |url=https://www.straitstimes.com/singapore/scoot-to-fly-to-indonesias-labuan-bajo-medan-palembang-and-semarang |access-date=15 October 2025 |website=[[The Straits Times]]}}</ref> [[Melbourne Airport|Melbourne]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Miri Airport|Miri]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Naha Airport|Naha]],<ref name="Hazeeq Sukri-2025" /> [[Nanjing Lukou International Airport|Nanjing]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Nanning Wuxu International Airport|Nanning]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Scoot plans more" /> [[Cam Ranh International Airport|Nha Trang]],<ref name="BNB Diviyadhaarshini-2025" /> [[Kansai International Airport|Osaka–Kansai]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Minangkabau International Airport|Padang]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Mujibah-2024">{{Cite web |last=Mujibah |first=Fatimah |date=11 November 2024 |title=Scoot launches direct flights to Padang, Phu Quoc and Shantou |url=https://www.straitstimes.com/singapore/scoot-launches-direct-flights-to-padang-phu-quoc-and-shantou |url-status=live |archive-url=https://web.archive.org/web/20241111160913/https://www.straitstimes.com/singapore/scoot-launches-direct-flights-to-padang-phu-quoc-and-shantou |archive-date=11 November 2024 |access-date=11 November 2024 |website=[[The Straits Times]] }}</ref> [[Sultan Mahmud Badaruddin II International Airport|Palembang]],<ref name="Sheryln-2025"/> [[Sultan Syarif Kasim II International Airport|Pekanbaru]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="CNA-2022" /><ref name="CAPA-2022" /> [[Perth Airport|Perth]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Penang International Airport|Penang]],<ref name="scootmalaysia">{{Cite web|date=11 August 2025|access-date=2 January 2026|title=Scoot, Tourism Malaysia sign three-year deal to boost regional travel|website=TTGAsia|url=https://www.ttgasia.com/2025/08/11/scoot-tourism-malaysia-sign-three-year-deal-to-boost-regional-travel/}}</ref> [[Phu Quoc International Airport|Phu Quoc]],<ref name="Mujibah-2024" /> [[Phuket International Airport|Phuket]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Supadio International Airport|Pontianak]] (begins 29 June 2026),<ref>{{cite news|url=https://www.straitstimes.com/singapore/scoot-to-fly-to-indonesias-belitung-pontianak-ups-flights-to-other-destinations?ref=latest-headlines|title=Scoot to fly to Indonesia’s Belitung and Pontianak, ups flights to selected destinations|website=[[The Straits Times]]|date=9 April 2026}}</ref> [[Qingdao Jiaodong International Airport|Qingdao]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[New Chitose Airport|Sapporo–Chitose]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Jenderal Ahmad Yani International Airport|Semarang]],<ref name="Sheryln-2025"/> [[Incheon International Airport|Seoul–Incheon]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Shenyang Taoxian International Airport|Shenyang]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Scoot plans more" /> [[Sibu Airport|Sibu]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Tay Peck Gek-2024" /> [[Juanda International Airport|Surabaya]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Sydney Airport|Sydney–Kingsford Smith]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[H.A.S. Hanandjoeddin International Airport|Tanjung Pandan]],<ref>{{cite web|title=Maskapai Scoot akan Buka Rute Penerbangan Singapura-Belitung|url=https://m.jpnn.com/news/maskapai-scoot-akan-buka-rute-penerbangan-singapura-belitung|website=m.jpnn.com|access-date=7 February 2026}}</ref> [[Taoyuan International Airport|Taipei–Taoyuan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Thiruvananthapuram International Airport|Thiruvananthapuram]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Tianjin Binhai International Airport|Tianjin]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Tiruchirappalli International Airport|Tiruchirappalli]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Haneda Airport|Tokyo–Haneda]],<ref name="Hazeeq Sukri-2025" /> [[Narita International Airport|Tokyo–Narita]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Vienna International Airport|Vienna]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite web |author1=Andrew |title=Scoot launching non-stop Singapore – Vienna flights |url=https://mainlymiles.com/2025/01/16/scoot-launching-non-stop-singapore-vienna-flights/ |website=Mainly Miles |date=16 January 2025 |access-date=16 January 2025 |archive-date=16 January 2025 |archive-url=https://web.archive.org/web/20250116044515/https://mainlymiles.com/2025/01/16/scoot-launching-non-stop-singapore-vienna-flights/ |url-status=live }}</ref> [[Wattay International Airport|Vientiane]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Visakhapatnam Airport|Visakhapatnam]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Wuhan Tianhe International Airport|Wuhan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="CNA-2022" /> [[Xi'an Xianyang International Airport|Xi'an]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Scoot plans more" /> [[Yogyakarta International Airport|Yogyakarta–International]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Yogyakarta" /> [[Zhengzhou Xinzheng International Airport|Zhengzhou]]<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="CNA-2022" /> <!-- --> | [[Shandong Airlines]] | [[Jinan Yaoqiang International Airport|Jinan]]<ref>{{cite web |title=Shandong Airlines commences Jinan-Singapore service |url=https://centreforaviation.com/news/shandong-airlines-commences-jinan-singapore-service-1259012 |website=CAPA |publisher=Informa Markets |date=22 April 2024 |url-access=subscription}}</ref> <!-- --> | [[Shanghai Airlines]] | [[Shanghai Pudong International Airport|Shanghai–Pudong]]<ref>{{cite web|title=Direct flights from Singapore to Shanghai|url=https://www.flightconnections.com/flights-from-sin-to-pvg|website=www.flightconnections.com}}</ref> <!-- --> | [[Shenzhen Airlines]] | [[Harbin Taiping International Airport|Harbin]],<ref>{{cite web |title=Shenzhen Airlines commences Harbin-Shenzhen-Singapore service |url=https://centreforaviation.com/news/shenzhen-airlines-commences-harbin-shenzhen-singapore-service-1303712 |website=CAPA |publisher=Informa Markets |date=11 February 2025 |url-access=subscription |access-date=14 February 2025 |archive-date=14 February 2025 |archive-url=https://web.archive.org/web/20250214113416/https://centreforaviation.com/news/shenzhen-airlines-commences-harbin-shenzhen-singapore-service-1303712 |url-status=live }}</ref> [[Shenzhen Bao'an International Airport|Shenzhen]]<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Shenzhen|url=https://www.flightsfrom.com/SIN-SZX}}</ref> <!-- --> | [[Sichuan Airlines]] | [[Chengdu Tianfu International Airport|Chengdu–Tianfu]]<ref>{{cite web |title=Sichuan Airlines launches daily flight from Chengdu Tianfu to Changi on 26 March 2023 |url=https://kucinta-air.blogspot.com/2023/03/sichuan-airlines-launches-daily-flight.html |website=Sayacinta-Airpost |date=4 March 2023 |access-date=5 March 2023 |archive-date=5 March 2023 |archive-url=https://web.archive.org/web/20230305003759/https://kucinta-air.blogspot.com/2023/03/sichuan-airlines-launches-daily-flight.html |url-status=live }}</ref> <!-- --> | [[Singapore Airlines]] | [[Adelaide Airport|Adelaide]],<ref name="OAG_World_Aug2025_SIN_1214_1219">{{OAGWorldAug2025Ref|title=Singapore, Singapore SIN|pages=1214-1219}}</ref> [[Sardar Vallabhbhai Patel International Airport|Ahmedabad]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Amsterdam Airport Schiphol|Amsterdam]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Auckland Airport|Auckland]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Brunei International Airport|Bandar Seri Begawan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Suvarnabhumi Airport|Bangkok–Suvarnabhumi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Josep Tarradellas Barcelona–El Prat Airport|Barcelona]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Beijing Capital International Airport|Beijing–Capital]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Beijing Daxing International Airport|Beijing–Daxing]],<ref>{{cite news |title=SIA launches flights to Beijing Daxing International Airport in November |url=https://www.straitstimes.com/singapore/sia-launches-flights-to-beijing-daxing-international-airport-in-november |website=Straits Times |date=24 June 2024 |access-date=24 June 2024 |last1=Chin |first1=Hui Shan |archive-date=24 June 2024 |archive-url=https://web.archive.org/web/20240624025431/https://www.straitstimes.com/singapore/sia-launches-flights-to-beijing-daxing-international-airport-in-november |url-status=live }}</ref> [[Kempegowda International Airport|Bengaluru]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Brisbane Airport|Brisbane]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Brussels Airport|Brussels]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite press release|title=Singapore Airlines Launching Non-Stop Services To Brussels In April 2024|url=https://www.singaporeair.com/en_UK/us/media-centre/press-release/article/?q=en_UK/2023/July-September/ne0923-230912|work=[[Singapore Airlines]]|date=12 September 2023|access-date=12 September 2023|language=en}}</ref> [[Gimhae International Airport|Busan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Cairns Airport|Cairns]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Cape Town International Airport|Cape Town]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Mactan–Cebu International Airport|Cebu]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Chengdu Tianfu International Airport|Chengdu–Tianfu]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Chongqing">{{cite web |author1=Sarah Koh |title=SIA to suspend flights to Chengdu and Chongqing |url=https://tnp.straitstimes.com/news/singapore/sia-suspend-flights-chengdu-and-chongqing |website=The New Paper |publisher=SPH Media Limited |language=en |date=22 March 2024}}</ref><ref name="Xiamen">{{cite web |author1=Andrew |title=Singapore Airlines returning to Chengdu, Chongqing, Shenzhen and Xiamen |url=https://mainlymiles.com/2023/10/28/singapore-airlines-returning-to-chengdu-chongqing-shenzhen-and-xiamen/ |website=Mainly Miles |date=28 October 2023 |access-date=28 October 2023 |archive-date=28 October 2023 |archive-url=https://web.archive.org/web/20231028154300/https://mainlymiles.com/2023/10/28/singapore-airlines-returning-to-chengdu-chongqing-shenzhen-and-xiamen/ |url-status=live }}</ref> [[Chennai International Airport|Chennai]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Chongqing Jiangbei International Airport|Chongqing]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Chongqing" /><ref>{{cite web |title=Freighter AUG international flight information 17Aug |url=https://www.anacargo.jp/en/news/upload/2022/0817/Freighter%20AUG%20international%20flight%20information_17Aug.pdf |website=ANA Cargo |access-date=17 August 2022 |archive-date=5 November 2022 |archive-url=https://web.archive.org/web/20221105233648/https://www.anacargo.jp/en/news/upload/2022/0817/Freighter%20AUG%20international%20flight%20information_17Aug.pdf |url-status=live }}</ref> [[Christchurch Airport|Christchurch]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Bandaranaike International Airport|Colombo–Bandaranaike]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Copenhagen Airport|Copenhagen]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Da Nang International Airport|Da Nang]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Darwin International Airport|Darwin]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Indira Gandhi International Airport|Delhi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Ngurah Rai International Airport|Denpasar]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Hazrat Shahjalal International Airport|Dhaka]],<ref>{{cite web |title=Singapore Airlines Eyes Double Flights to One of the Most Populated Cities in the World|url=https://aviationa2z.com/index.php/2026/04/11/singapore-airlines-eyes-double-flights-to-dhaka/|website=aviationa2z.com|date=11 April 2026}}</ref> [[Dubai International Airport|Dubai–International]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Frankfurt Airport|Frankfurt]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Fukuoka Airport|Fukuoka]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Guangzhou Baiyun International Airport|Guangzhou]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Hangzhou Xiaoshan International Airport|Hangzhou]],<ref>{{cite web |title=Singapore Airlines To Launch Services To Hangzhou In June 2026 |url=https://www.singaporeair.com/en_UK/sg/corporate/newsroom/press-release/2026/january---march-2026/Sia_Hangzhou_June2026/ |website=Singapore Airlines |date=23 March 2026}}</ref> [[Noi Bai International Airport|Hanoi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Tan Son Nhat International Airport|Ho Chi Minh City]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Hong Kong International Airport|Hong Kong]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Rajiv Gandhi International Airport|Hyderabad]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Istanbul Airport|Istanbul]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite web|url=https://mainlymiles.com/2025/04/13/singapore-airlines-restores-full-9x-daily-schedule-to-jakarta/|title=Singapore Airlines restores full 9x daily schedule to Jakarta|work=mainlymiles|date=13 April 2025|accessdate=13 April 2025|archive-date=13 April 2025|archive-url=https://web.archive.org/web/20250413123430/https://mainlymiles.com/2025/04/13/singapore-airlines-restores-full-9x-daily-schedule-to-jakarta/|url-status=live}}</ref> [[O. R. Tambo International Airport|Johannesburg–O. R. Tambo]],<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Johannesburg|url=https://www.flightsfrom.com/SIN-JNB}}</ref> [[Tribhuvan International Airport|Kathmandu]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Cochin International Airport|Kochi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Netaji Subhas Chandra Bose International Airport|Kolkata]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kuala Lumpur International Airport|Kuala Lumpur–International]],<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Kuala Lumpur|url=https://www.flightsfrom.com/SIN-KUL}}</ref> [[Gatwick Airport|London–Gatwick]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite web |title=Singapore Airlines to launch London Gatwick service |url=https://www.businesstraveller.com/business-travel/2023/12/18/singapore-airlines-will-launch-london-gatwick-service/ |website=Business Traveller |date=18 December 2023 |access-date=18 December 2023 |archive-date=18 December 2023 |archive-url=https://web.archive.org/web/20231218123126/https://www.businesstraveller.com/business-travel/2023/12/18/singapore-airlines-will-launch-london-gatwick-service/ |url-status=live }}</ref> [[Heathrow Airport|London–Heathrow]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Los Angeles International Airport|Los Angeles]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Madrid–Barajas Airport|Madrid]] (resumes 26 October 2026),<ref>{{cite news |author1=Alfred Chua |title=Singapore Airlines launches Madrid flights as part of Europe ramp-up |url=https://www.flightglobal.com/archive/2026/05/singapore-airlines-launches-madrid-flights-as-part-of-europe-ramp-up/ |access-date=8 May 2026 |work=FlightGlobal |publisher=ProMedia Group UK Ltd |date=8 May 2026}}</ref> [[Velana International Airport|Malé]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Manchester Airport|Manchester]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Ninoy Aquino International Airport|Manila]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kualanamu International Airport|Medan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Melbourne Airport|Melbourne]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Milan Malpensa Airport|Milan–Malpensa]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Chhatrapati Shivaji Maharaj International Airport|Mumbai–Shivaji]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Munich Airport|Munich]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Chubu Centrair International Airport|Nagoya–Centrair]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[John F. Kennedy International Airport|New York–JFK]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Newark Liberty International Airport|Newark]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kansai International Airport|Osaka–Kansai]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Charles de Gaulle Airport|Paris–Charles de Gaulle]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Penang International Airport|Penang]],<ref>{{Cite web|date=2 March 2025|access-date=2 January 2026|title=Where is Singapore Airlines flying its Boeing 737-800s? (Nowhere,soon)|website=Mainly Miles|url=https://mainlymiles.com/2025/03/02/where-is-singapore-airlines-flying-its-737-800s/}}</ref> [[Perth Airport|Perth]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Techo International Airport|Phnom Penh]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite web |title=Relocation of Phnom Penh airport operations |url=https://www.singaporeair.com/en_UK/sg/corporate/newsroom/newsalert-listing/relocation-of-phnom-penh-airport-operations/ |website=Singapore Airlines}}</ref> [[Phuket International Airport|Phuket]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[King Khalid International Airport |Riyadh]] (resumes 1 September 2026),<ref>{{Cite web|date=3 April 2026|access-date=4 June 2026|title=Singapore Airlines pushes back Riyadh restart to September 2026|website=mainlymiles.com|url=https://mainlymiles.com/2026/04/03/singapore-airlines-pushes-back-riyadh-restart-to-september-2026/}}</ref> [[Rome Fiumicino Airport|Rome–Fiumicino]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[San Francisco International Airport|San Francisco]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Seattle–Tacoma International Airport|Seattle/Tacoma]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Incheon International Airport|Seoul–Incheon]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Shanghai Pudong International Airport|Shanghai–Pudong]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Shenzhen Bao'an International Airport|Shenzhen]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Xiamen" /> [[Siem Reap–Angkor International Airport|Siem Reap]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite web |title=Relocation of Siem Reap airport operations |url=https://www.singaporeair.com/en_UK/us/media-centre/news-alert/?id=lmydxjd0 |website=Singapore Airlines |date=25 September 2023 |access-date=25 September 2023 |archive-date=29 September 2023 |archive-url=https://web.archive.org/web/20230929025457/https://www.singaporeair.com/en_UK/sg/media-centre/news-alert/?id=lmydxjd0 |url-status=live }}</ref> [[Juanda International Airport|Surabaya]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Sydney Airport|Sydney–Kingsford Smith]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Western Sydney International Airport|Sydney–Western]] (begins 23 November 2026),<ref>{{cite news |author1=Shikhar Gupta |title=SIA to launch flights from new, curfew-free Western Sydney airport on Nov 23 |url=https://www.businesstimes.com.sg/companies-markets/transport-logistics/sia-launch-flights-new-curfew-free-western-sydney-airport-nov-23 |work=The Business Times |publisher=SPH Media Limited |date=24 March 2026 |language=en}}</ref> [[Taoyuan International Airport|Taipei–Taoyuan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Haneda Airport|Tokyo–Haneda]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Narita International Airport|Tokyo–Narita]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Xiamen Gaoqi International Airport|Xiamen]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Xiamen" /> [[Yangon International Airport|Yangon]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Zurich Airport|Zurich]]<ref name="OAG_World_Aug2025_SIN_1214_1219"/> <br />'''Seasonal:''' [[New Chitose Airport|Sapporo–Chitose]]<ref>{{Cite web |last=Andrew |date=2025-12-12 |title=Singapore Airlines hikes Sapporo flights for 2026/27 ski season |url=https://mainlymiles.com/2025/12/12/singapore-airlines-hikes-sapporo-flights-for-2026-27-ski-season/ |access-date=2026-05-06 |website=Mainly Miles |language=en-US}}</ref> <!-- --> | [[Spring Airlines]] | [[Guangzhou Baiyun International Airport|Guangzhou]],<ref>{{cite web|title=Spring Airlines Resumes Singapore Service Connecting Guangzhou Travelers To Beaches, Culture And Wildlife: What You Need To Know|url=https://www.travelandtourworld.com/news/article/spring-airlines-resumes-singapore-service-connecting-guangzhou-travelers-to-beaches-culture-and-wildlife/|website=Travel and Tour World|access-date=March 6, 2026}}</ref> [[Shanghai Pudong International Airport|Shanghai–Pudong]]<ref>{{cite web|url=https://www.airpaz.com/en/airlines/9C-Spring-Airlines/airport-airport/singapore-changi-airport-sin-shanghai-pudong-international-airport-pvg|title=Spring Airlines Flight from Singapore Changi Airport to Shanghai Pudong International Airport|website=www.airpaz.com}}</ref> <!-- --> | [[SriLankan Airlines]] | [[Bandaranaike International Airport|Colombo–Bandaranaike]]<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Colombo|url=https://www.flightsfrom.com/SIN-CMB}}</ref> <!-- --> | [[Starlux Airlines]] | [[Taoyuan International Airport|Taipei–Taoyuan]]<ref name="OAG Flight Guide Worldwide-2025b" /> <!-- --> | [[Sun PhuQuoc Airways]] | [[Phu Quoc International Airport|Phu Quoc]] (begins 25 July 2026)<ref>{{cite web |title=Sun PhuQuoc Airways to commence Phu Quoc-Singapore service in Jul-2026 |url=https://centreforaviation.com/news/sun-phuquoc-airways-to-commence-phu-quoc-singapore-service-in-jul-2026-1360148 |website=CAPA |publisher=Informa Markets |date=22 May 2026 |url-access=subscription}}</ref> <!-- --> | [[Swiss International Air Lines]] | [[Zurich Airport|Zurich]]<ref>{{cite web |title=SWISS starts its new non-stop Zurich-Singapore service |url=https://www.swiss.com/corporate/en/media/press-releases-archive/press-release-20130513 |website=www.swiss.com |language=en |date=13 May 2013}}</ref> <!-- --> | [[T'way Air]] | [[Jeju International Airport|Jeju]],<ref>{{cite web|title=It will be easier to travel from Jeju to Singapore in the future. T'way Airlines will launch new direct flights between Jeju and Singapore from August 15.|date=5 June 2025 |url=https://www.mk.co.kr/en/culture/11334842}}</ref> [[Incheon International Airport|Seoul–Incheon]]<ref>{{cite web|url=https://www.airpaz.com/en/airlines/TW-T-way-Air/airport-airport/singapore-changi-airport-sin-incheon-international-airport-icn|title=T'way Air Flight from Singapore Changi Airport to Incheon International Airport|website=www.airpaz.com}}</ref> <!-- --> | [[Thai AirAsia]] | [[Don Mueang International Airport|Bangkok–Don Mueang]]<ref name="OAG Flight Guide Worldwide-2025c">{{OAGWorldAug2025Ref|title=Bangkok, Thailand BKK|pages=109-113}}</ref> <!-- --> | {{nowrap|[[Thai Airways International]]}} | [[Suvarnabhumi Airport|Bangkok–Suvarnabhumi]]<ref name="OAG Flight Guide Worldwide-2025c"/> <!-- --> | [[Thai Lion Air]] | [[Don Mueang International Airport|Bangkok–Don Mueang]],<ref name="OAG Flight Guide Worldwide-2025c"/> [[Phuket International Airport|Phuket]]<ref>{{cite web |title=Thai Lion Air to commence Phuket-Singapore service in Jan-2026 |url=https://centreforaviation.com/news/thai-lion-air-to-commence-phuket-singapore-service-in-jan-2026-1343308 |website=CAPA |publisher=Informa Markets |date=23 December 2025 |url-access=subscription}}</ref> <!-- --> | [[Tianjin Airlines]] | [[Guiyang Longdongbao International Airport|Guiyang]]<ref>{{cite web |title=Tianjin Airlines commences Guiyang-Singapore service |url=https://centreforaviation.com/news/tianjin-airlines-commences-guiyang-singapore-service-1291505 |website=CAPA |publisher=Informa Markets |date=18 November 2024 |url-access=subscription}}</ref> <!-- --> | [[TransNusa]] | [[Ngurah Rai International Airport|Denpasar]],<ref>{{cite web |title=TransNusa to Launch Bali - Singapore Scheduled Flight on November 17|url=https://en.antaranews.com/news/386621/transnusa-to-launch-bali-singapore-scheduled-flight-on-november-17|website=[[Antara (news agency)|Antara]]|date=17 October 2025 |access-date=18 October 2025}}</ref> [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]]<ref>{{cite web |title=TransNusa Air Services to commence Jakarta services to Guangzhou and Singapore |url=https://centreforaviation.com/news/transnusa-air-services-to-commence-jakarta-services-to-guangzhou-and-singapore-1228664 |website=CAPA |publisher=Informa Markets |date=13 October 2023 |url-access=subscription |access-date=13 October 2023 |archive-date=13 November 2024 |archive-url=https://web.archive.org/web/20241113022310/https://centreforaviation.com/news/transnusa-air-services-to-commence-jakarta-services-to-guangzhou-and-singapore-1228664 |url-status=live }}</ref> <!-- --> | [[Turkish Airlines]] | [[Istanbul Airport|Istanbul]],<ref name="turkishairlineslaunch">{{Cite web|date=19 January 2024|access-date=2 January 2026|title=Turkish Airlines launching Melbourne-Singapore flights from March 2024|website=Mainly Miles|url=https://mainlymiles.com/2024/01/19/turkish-airlines-launching-singapore-melbourne-flights-from-march-2024/}}</ref> [[Melbourne Airport|Melbourne]]<ref name="turkishairlineslaunch"/> <!-- --> | [[United Airlines]] | [[San Francisco International Airport|San Francisco]]<ref>{{Cite web|access-date=1 January 2026|title=Five injured as United Airlines Boeing 787 hits turbulence over the Philippines|website=AeroTime|url=https://www.aerotime.aero/articles/united-airlines-turbulence-philippines-five-injured}}</ref> <!-- --> | [[US-Bangla Airlines]] | [[Hazrat Shahjalal International Airport|Dhaka]]<ref>{{Cite web|date=23 July 2023|access-date=1 January 2026|title=US-Bangla Airlines celebrates ninth anniversary|website=Dhaka Tribune|url=https://www.dhakatribune.com/bangladesh/319263/us-bangla-airlines-celebrates-ninth-anniversary}}</ref> <!-- --> | [[VietJet Air]] | [[Da Nang International Airport|Da Nang]],<ref>{{OAGWorldAug2025Ref|title=Da Nang, Viet Nam DAD|pages=356-356}}</ref><ref>{{cite web |title=VietJet Air to operate Da Nang-Singapore service from 16-Jun-2022 |url=https://centreforaviation.com/news/vietjet-air-to-operate-da-nang-singapore-service-from-16-jun-2022-1128076 |website=CAPA |date=30 March 2022 |access-date=5 April 2022 |archive-date=4 May 2022 |archive-url=https://web.archive.org/web/20220504101515/https://centreforaviation.com/news/vietjet-air-to-operate-da-nang-singapore-service-from-16-jun-2022-1128076 |url-status=live }}</ref> [[Noi Bai International Airport|Hanoi]],<ref name="OAG Flight Guide Worldwide-2025d">{{OAGWorldAug2025Ref|title=Hanoi, Viet Nam HAN|pages=522-524}}</ref><ref name="Vietjet Air-2022">{{cite web |title=Return to Thailand, Singapore and Malaysia shopping paradises with VND0 air tickets |url=https://www.vietjetair.com/en/news/news-1600227436778/return-to-thailand-singapore-and-malaysia-shopping-paradises-with-vnd0-air-tickets-1649142346951 |website=Vietjet Air |date=5 April 2022 |access-date=5 April 2022 |archive-date=12 April 2022 |archive-url=https://web.archive.org/web/20220412150945/https://www.vietjetair.com/en/news/news-1600227436778/return-to-thailand-singapore-and-malaysia-shopping-paradises-with-vnd0-air-tickets-1649142346951 |url-status=live }}</ref> [[Tan Son Nhat International Airport|Ho Chi Minh City]],<ref name="OAG Flight Guide Worldwide-2025e">{{OAGWorldAug2025Ref|title=Ho Chi Minh City, Viet Nam SGN|pages=538-541}}</ref><ref name="Vietjet Air-2022" /> [[Cam Ranh International Airport|Nha Trang]] (begins 11 December 2026),<ref>{{cite web |title= Vietjet to launch direct flights between Singapore and Nha Trang in Vietnam |url= https://www.straitstimes.com/singapore/vietjet-to-launch-direct-flights-between-singapore-and-nha-trang-in-vietnam | website=The Straits Times |publisher=SPH Media Limited |language=en |date=2 June 2026}}</ref> [[Phu Quoc International Airport|Phu Quoc]]<ref>{{cite web |last1=Sheo |first1=Chiong Teng |title=Vietjet to launch direct flights between S'pore and Phu Quoc in Vietnam from May 30 |url=https://www.straitstimes.com/singapore/vietjet-to-launch-direct-flights-between-spore-and-phu-quoc-in-vietnam-from-may-30 |website=The Straits Times |publisher=SPH Media Limited |language=en |date=11 March 2025 |access-date=11 March 2025 |archive-date=15 March 2025 |archive-url=https://web.archive.org/web/20250315034558/https://www.straitstimes.com/singapore/vietjet-to-launch-direct-flights-between-spore-and-phu-quoc-in-vietnam-from-may-30 |url-status=live }}</ref> <!-- --> | [[Vietnam Airlines]] | [[Noi Bai International Airport|Hanoi]],<ref name="OAG Flight Guide Worldwide-2025d" /> [[Tan Son Nhat International Airport|Ho Chi Minh City]]<ref name="OAG Flight Guide Worldwide-2025e" /> <!-- --> | [[West Air (China)|West Air]] | [[Chongqing Jiangbei International Airport|Chongqing]],<ref name="Yashita Vashishth-2024">{{cite web |author1=Yashita Vashishth |title=China's West Air Expands Network With New Lhasa-Chongqing-Singapore Route |url=https://www.travelandleisureasia.com/sg/news/singapore-china-flights-west-air-launches-new-route-starting-christmas/ |website=Travel and Leisure Asia |publisher=Burdaluxury |language=en |date=19 December 2024}}</ref> [[Lhasa Gonggar International Airport|Lhasa]]<ref name="Yashita Vashishth-2024"/> <!-- --> | [[XiamenAir]] | [[Fuzhou Changle International Airport|Fuzhou]],<ref>https://www.instagram.com/p/DPiG9SjkdfB/</ref> [[Hangzhou Xiaoshan International Airport|Hangzhou]],<ref>https://www.instagram.com/p/DPiG9SjkdfB/</ref> [[Quanzhou Jinjiang International Airport|Quanzhou]],<ref>{{cite web|url=https://www.airpaz.com/en/airlines/MF-Xiamen-Airlines/airport-airport/singapore-changi-airport-sin-quanzhou-jinjiang-international-airport-jjn|title=Xiamen Air Flight from Singapore Changi Airport to Quanzhou Jinjiang International Airport|website=www.airpaz.com}}</ref> [[Xiamen Gaoqi International Airport|Xiamen]]<ref>https://www.instagram.com/p/DPiG9SjkdfB/</ref> <!-- --> | [[Zipair Tokyo]] | [[Narita International Airport|Tokyo–Narita]]<ref>{{cite web |author1=Mark Caswell |title=Zipair to launch Tokyo Narita-Singapore route |url=https://www.businesstraveller.com/business-travel/zipair-to-launch-tokyo-narita-singapore-route/ |website=Business Traveller |publisher=Business Traveller Media Limited |date=30 July 2021}}</ref> }} ==Transport links== [[File:Changi Airport MRT Station entrance (230815).jpg|thumb|Entrance to [[Changi Airport MRT station]] from Terminal 3]] [[File:(SGP-Singapore) Go-Ahead Singapore SMB3073E 34 2024-05-04.jpg|thumb|A public bus at the Terminal 2 basement bus bay]] Terminals 1, 2 and 3 of the airport are linked by the free [[Changi Airport Skytrain|Skytrain]] service, operating daily from 05:00 to 02:00. During non-operational hours, travellers within the transit areas may transfer between terminals on foot via inter-terminal travelators, while those in the public areas can use the Mezzanine Level link bridges between T2 and T3, and the link bridge to travel on foot between T1 and T2/T3. Terminal 4 is accessible by a complimentary shuttle bus services at both public and transit areas. The shuttle bus journey between terminals at the public area takes about 10 minutes and the shuttle bus journey between terminals at the transit area takes between 10 and 18 minutes.<ref>{{Cite web |title=Transferring Between Terminals and Jewe |url=https://www.changiairport.com/en/at-changi/transport-and-directions/transferring-between-terminals-jewel.html |access-date=3 March 2026 |website=[[Changi Airport Group]]}}</ref> The airport is served by the [[Mass Rapid Transit (Singapore)|Mass Rapid Transit]] (MRT) via a branch of the [[East West MRT line]] (EWL) from [[Tanah Merah MRT station]] with stops at [[Expo MRT station|Expo]] and [[Changi Airport MRT station|Changi Airport]], which lies underground between Terminals 2 and 3. Under the [[Land Transport Authority]]'s (LTA) Masterplan, the [[Thomson-East Coast MRT line]] (TEL) will be extended to serve both [[Changi Terminal 5 MRT station|Terminal 5]] and the existing Changi Airport station, with the EWL branch set to be integrated into the TEL.<ref>{{Cite press release|title=Land Transport Master Plan: Bringing Singapore Together|url=https://www.lta.gov.sg/content/ltagov/en/newsroom/2021/5/2/land-transport-master-plan-2040-bringing-singapore-together.html|access-date=7 July 2021|publisher=Land Transport Authority (Singapore)}}{{dead link|date=August 2023|bot=medic}}{{cbignore|bot=medic}}</ref> On 25 July 2025, LTA announced a new Cross Island Line (CRL) interchange station CR1 Changi Terminal 5, which will directly connect the upcoming Changi Airport Terminal 5 to the city centre and other major hubs via the Thomson-East Coast Line extension (TELe) and the CRL.<ref>{{Cite web |date=25 July 2025 |title=Thomson-East Coast Line Extension and Cross Island Line: Connecting Changi Airport Directly to the City Centre and Major Hubs |url=https://www.lta.gov.sg/content/ltagov/en/newsroom/2025/7/news-releases/TELe_and_CRL_changi_airport_to_city_centre.html |access-date=3 March 2026 |website=[[Land Transport Authority]]}}</ref> Eight public bus services operated by [[SBS Transit]], [[SMRT Buses]], [[Tower Transit Singapore]] and [[Go-Ahead Singapore]] serve the airport in a loop through Terminals 1, 2 and 3, with Services 24, 34, 36, 44 (only during peak hours)<ref>{{Cite web |title=New bus service 44 direct from Punggol to Changi Airport during peak hours |url=https://mothership.sg/2025/11/direct-airport-bus-44-punggol-sun-xueling/ |access-date=2 March 2026 |website=mothership.sg}}</ref> and 110 continuing to Terminal 4. Bus stops are found at the basement bus bays of the main terminals, while Terminal 4's stop is located beside Car Park 4B. Taxis can be hired at designated stands in the arrival halls, with an airport surcharge applicable for all journeys originating there.<ref>{{cite web |title=Leaving the Airport {{!}} Taxi {{!}} Singapore Changi Airport |url=https://www.changiairport.com/en/airport-guide/transport/leaving-the-airport.html#anchorTaxi |website=Changi Airport |language=en |access-date=6 January 2021 |archive-date=9 January 2021 |archive-url=https://web.archive.org/web/20210109131458/https://www.changiairport.com/en/airport-guide/transport/leaving-the-airport.html#anchorTaxi |url-status=live }}</ref> Limousines and other transport options are available through the Ground Transport Concierge.<ref>{{cite web |title=Ground Transport Concierge {{!}} Singapore Changi Airport |url=https://www.changiairport.com/en/airport-guide/facilities-and-services/ground-transport-concierge.html |website=Changi Airport |language=en |access-date=6 January 2021 |archive-date=16 January 2021 |archive-url=https://web.archive.org/web/20210116002005/https://www.changiairport.com/en/airport-guide/facilities-and-services/ground-transport-concierge.html |url-status=live }}</ref> Private pick-ups occur at the terminals' arrival areas, and car rental counters are found in each arrival hall.<ref>{{cite web |title=Leaving the Airport {{!}} Car {{!}} Singapore Changi Airport |url=https://www.changiairport.com/en/airport-guide/transport/leaving-the-airport.html#anchorCar |website=Changi Airport |language=en |access-date=6 January 2021 |archive-date=9 January 2021 |archive-url=https://web.archive.org/web/20210109131458/https://www.changiairport.com/en/airport-guide/transport/leaving-the-airport.html#anchorCar |url-status=live }}</ref><ref>{{cite web |title=Pick-up Points {{!}} Singapore Changi Airport |url=https://www.changiairport.com/en/airport-guide/facilities-and-services/pick-up-points.html |website=Changi Airport |language=en |access-date=11 October 2020 |archive-date=1 October 2020 |archive-url=https://web.archive.org/web/20201001160420/https://www.changiairport.com/en/airport-guide/facilities-and-services/pick-up-points.html |url-status=live }}</ref><ref>{{cite web |title=Car Rental {{!}} Singapore Changi Airport |url=https://www.changiairport.com/en/airport-guide/facilities-and-services/car-rental.html |website=Changi Airport |language=en |access-date=6 January 2021 |archive-date=11 January 2021 |archive-url=https://web.archive.org/web/20210111094955/https://www.changiairport.com/en/airport-guide/facilities-and-services/car-rental.html |url-status=live }}</ref> The {{Convert|3.5|km|abbr=off}} long Changi Airport Connector, launched in October 2020, links the airport to [[East Coast Park]] and features the {{Convert|1|km|abbr=off}} Changi Jurassic Mile trail with life-sized dinosaur sculptures.<ref>{{cite news |last1=Lim |first1=Ming Zhang |title=New cycling track from East Coast Park to Changi Airport opens, with life-sized dinosaur models along the way |url=https://www.straitstimes.com/singapore/new-cycling-track-from-east-coast-park-to-changi-airport-opens-with-life-sized-dinosaur |newspaper=The Straits Times |language=en |date=11 October 2020 |access-date=11 October 2020 |archive-date=12 October 2020 |archive-url=https://web.archive.org/web/20201012024529/http://www.straitstimes.com/singapore/new-cycling-track-from-east-coast-park-to-changi-airport-opens-with-life-sized-dinosaur |url-status=live }}</ref><ref>{{cite news |last1=Phua |first1=Rachel |title=New 3.5km path linking Changi Airport and East Coast Park opens, featuring dinosaur exhibits |url=https://www.channelnewsasia.com/news/singapore/changi-jurassic-mile-airport-dinosaur-east-coast-park-connector-13253830 |work=CNA |publisher=Mediacorp |language=en |date=11 October 2020 |access-date=11 October 2020 |archive-date=14 October 2020 |archive-url=https://web.archive.org/web/20201014010737/https://www.channelnewsasia.com/news/singapore/changi-jurassic-mile-airport-dinosaur-east-coast-park-connector-13253830 |url-status=live }}</ref> The [[Tanah Merah Ferry Terminal]] is connected to the airport by shuttle buses.<ref>{{cite news|access-date=22 June 2025|title=Air-sea transfers via Changi Airport would be a win for tourists, regulars at Tanah Merah Ferry Terminal|url=https://www.straitstimes.com/singapore/transport/air-sea-transfers-between-changi-airport-would-be-a-win-for-tourists-and-regulars-at-tanah-merah|newspaper=The Straits Times|date=22 June 2025|location=Singapore|issn=0585-3923}}</ref> A direct link to Terminal 5 is currently being studied.<ref>{{cite news|access-date=22 June 2025|title=PM Wong breaks ground on Changi Airport T5; all SIA, Scoot flights to move there when it opens|url=https://www.straitstimes.com/singapore/transport/pm-wong-breaks-ground-on-changi-airport-t5-all-sia-scoot-flights-will-move-there-when-it-opens|newspaper=The Straits Times|date=14 May 2025|location=Singapore|issn=0585-3923|archive-date=16 May 2025|archive-url=https://web.archive.org/web/20250516201420/https://www.straitstimes.com/singapore/transport/pm-wong-breaks-ground-on-changi-airport-t5-all-sia-scoot-flights-will-move-there-when-it-opens|url-status=live}}</ref> {{clear}} ==Awards== As one of the world's busiest airports for international passenger and cargo traffic, the airport has earned widespread acclaim for its service standards and facilities. It has been named the "World's Best Airport" by [[Skytrax]] thirteen times, including an unprecedented eight consecutive wins from 2013 to 2020. The airport is also consistently recognised for cleanliness, efficiency and seamless transit experience, having ranked highly in categories such as cleanest airport, best transit airport, best airport staff and immigration services. In 2024, Changi placed second globally in all three of the latter categories.<ref>{{cite web|url=https://www.worldairportawards.com/the-worlds-best-airports-in-2020-are-announced/|title=World's Top 10 Airports 2020|date=11 May 2020|publisher=Skytrax|access-date=11 May 2020|archive-date=22 May 2020|archive-url=https://web.archive.org/web/20200522035337/https://www.worldairportawards.com/the-worlds-best-airports-in-2020-are-announced/|url-status=live}}</ref><ref>{{Cite web |title=The World's Cleanest Airports 2024 |url=https://www.worldairportawards.com/worlds-cleanest-airports-2024/#:~:text=Tokyo's%20Haneda%20Airport%20continues%20its%20success%20being%20named%20the%20World's%20Cleanest%20Airport |access-date=28 January 2025 |website=SKYTRAX |language=en |archive-date=24 February 2025 |archive-url=https://web.archive.org/web/20250224104024/https://www.worldairportawards.com/worlds-cleanest-airports-2024/#:~:text=Tokyo's%20Haneda%20Airport%20continues%20its%20success%20being%20named%20the%20World's%20Cleanest%20Airport |url-status=live }}</ref> In 2025, Changi once again topped the Skytrax global rankings, adding a thirteenth title to its previous wins in 2000, 2006, 2010, 2013 to 2020 and 2023.<ref>{{Cite web |title=Changi Airport Group "Awards" |url=https://www.changiairport.com/en/corporate/about-us/accolades.html |access-date=14 May 2025 |archive-date=14 May 2025 |archive-url=https://web.archive.org/web/20250514094651/https://www.changiairport.com/en/corporate/about-us/accolades.html |url-status=live }}</ref> Its reputation extends beyond the terminals, with the on-site [[Crowne Plaza]] voted the world's best airport hotel ten times, covering the years 2015 to 2020 and 2022 to 2025.<ref>{{Cite web |title=The World's Best Airport Hotels 2025 |url=https://www.worldairportawards.com/worlds-best-airport-hotels-2025/ |access-date=14 May 2025 |website=SKYTRAX |language=en |archive-date=14 May 2025 |archive-url=https://web.archive.org/web/20250514142439/https://www.worldairportawards.com/worlds-best-airport-hotels-2025/ |url-status=live }}</ref> == Operational statistics == {|class="wikitable" style="text-align:center;" ! colspan="8" style="background:lightgrey; colour:black; line-height:180%;" | Operational statistics (1980–1989) |- | style="text-align:center;" colspan="8"| |- style="background:lightgrey;" !Year !Passenger<br />movements !Passenger %<br />change over<br />previous year !Airfreight<br />movements<br />(tonnes) !Airfreight %<br />change over<br />previous year !Aircraft<br />movements !Aircraft %<br />change over<br />previous year !Notes |- | 1980 || 7,294,549 || {{nochange}} 0.0 || {{n/a}} || {{n/a}} || 75,971 || {{nochange}} 0.0 || |- | 1981 || 8,152,158 || {{increase}} 11.7% || {{n/a}} || {{n/a}} || 71,365 || {{decrease}} 6.1% || |- | 1982 || 8,611,812 || {{increase}} 5.6% || {{n/a}} || {{n/a}} || 68,159 || {{decrease}} 4.5% || |- | 1983 || 8,679,152 || {{increase}} 0.8% || {{n/a}} || {{n/a}} || 67,594 || {{decrease}} 0.8% || |- | 1984 || 9,465,651 || {{increase}} 9.1% || {{n/a}} || {{n/a}} || 70,674 || {{increase}} 4.5% || |- | 1985 || 9,856,830 || {{increase}} 4.1% || {{n/a}} || {{n/a}} || 73,223 || {{increase}} 3.6% || |- | 1986 || 10,067,719 || {{increase}} 2.1% || 352,806 || {{nochange}} 0.0 || 73,022 || {{decrease}} 0.3% || |- | 1987 || 11,203,793 || {{increase}} 11.3% || 419,099 || {{increase}} 18.8% || 76,276 || {{increase}} 4.5% || |- | 1988 || 12,595,286 || {{increase}} 12.4% || 512,509 || {{increase}} 22.3% || 82,930 || {{increase}} 8.7% || |- | 1989 || 14,136,367 || {{increase}} 12.3% || 577,610 || {{increase}} 12.7% || 87,421 || {{increase}} 5.4% || |- !colspan="11" |Sources:<ref>{{cite web|title=1980–1989 Singapore Changi Airport Passenger Movements|url=https://data.gov.sg/dataset/civil-aircraft-arrivals-departures-passengers-and-mail-changi-airport-monthly|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=22 June 2020|archive-url=https://web.archive.org/web/20200622090650/https://data.gov.sg/dataset/civil-aircraft-arrivals-departures-passengers-and-mail-changi-airport-monthly|url-status=live}}</ref><ref name="Department of Statistics, Singapore-2">{{cite web|title=1986–1989 Singapore Changi Airport Airfreight movements 1|url=https://data.gov.sg/dataset/air-cargo-discharged-by-region-country-of-origin-monthly|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=22 June 2020|archive-url=https://web.archive.org/web/20200622022421/https://data.gov.sg/dataset/air-cargo-discharged-by-region-country-of-origin-monthly|url-status=live}}</ref><ref name="Department of Statistics, Singapore">{{cite web|title=1986–1989 Singapore Changi Airport Airfreight movements 2|url=https://data.gov.sg/dataset/air-cargo-loaded-total-by-region-and-selected-country-of-destination?view_id=6b5563a0-dd96-42c3-9d57-d0c7d30780d9&resource_id=2a8dd954-d260-4018-9d6b-503bedf1f019|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=21 June 2020|archive-url=https://web.archive.org/web/20200621132014/https://data.gov.sg/dataset/air-cargo-loaded-total-by-region-and-selected-country-of-destination?view_id=6b5563a0-dd96-42c3-9d57-d0c7d30780d9&resource_id=2a8dd954-d260-4018-9d6b-503bedf1f019|url-status=live}}</ref> |} {|class="wikitable" style="text-align:center;" ! colspan="8" style="background:lightgrey; colour:black; line-height:180%;" | Operational statistics (1990–1999) |- | style="text-align:center;" colspan="8"| |- style="background:lightgrey;" !Year !Passenger<br />movements !Passenger %<br />change over<br />previous year !Airfreight<br />movements<br />(tonnes) !Airfreight %<br />change over<br />previous year !Aircraft<br />movements !Aircraft %<br />change over<br />previous year !Notes |- | 1990 || 15,620,758 || {{increase}} 10.5% || 623,841 || {{increase}} 8.0% || 97,675 || {{increase}} 11.7% || |- | 1991 || 16,285,039 || {{increase}} 4.3% || 643,209 || {{increase}} 3.1% || 108,728 || {{increase}} 11.3% || |- | 1992 || 18,100,155 || {{increase}} 11.1% || 719,004 || {{increase}} 11.7% || 125,526 || {{increase}} 15.4% || |- | 1993 || 19,987,214 || {{increase}} 10.4% || 838,416 || {{increase}} 16.6% || 136,762 || {{increase}} 8.9% || |- | 1994 || 21,644,677 || {{increase}} 8.3% || 1,009,764 || {{increase}} 20.4% || 145,334 || {{increase}} 6.3% || |- | 1995 || 23,196,240 || {{increase}} 7.2% || 1,105,773 || {{increase}} 9.5% || 156,334 || {{increase}} 7.6% || |- | 1996 || 24,514,248 || {{increase}} 5.7% || 1,190,457 || {{increase}} 7.6% || 166,749 || {{increase}} 6.7% || |- | 1997 || 25,174,344 || {{increase}} 2.7% || 1,336,254 || {{increase}} 12.2% || 172,672 || {{increase}} 3.5% || |- | 1998 || 23,803,180 || {{decrease}} 5.4% || 1,283,660 || {{decrease}} 4.0% || 165,242 || {{decrease}} 4.3% || [[1997 Asian financial crisis]] |- | 1999 || 26,064,645 || {{increase}} 9.5 || 1,500,393 || {{increase}} 16.8 || 165,961 || {{increase}} 0.4 || |- !colspan="11" |Sources:<ref>{{cite web|title=1990–1999 Singapore Changi Airport Passenger Movements|url=https://data.gov.sg/dataset/civil-aircraft-arrivals-departures-passengers-and-mail-changi-airport-monthly|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=22 June 2020|archive-url=https://web.archive.org/web/20200622090650/https://data.gov.sg/dataset/civil-aircraft-arrivals-departures-passengers-and-mail-changi-airport-monthly|url-status=live}}</ref><ref name="Department of Statistics, Singapore-2"/><ref name="Department of Statistics, Singapore"/> |} {|class="wikitable" style="text-align:center;" ! colspan="8" style="background:lightgrey; colour:black; line-height:180%;" | Operational statistics (2000–2009) |- | style="text-align:center;" colspan="8"| |- style="background:lightgrey;" !Year !Passenger<br />movements !Passenger %<br />change over<br />previous year !Airfreight<br />movements<br />(tonnes) !Airfreight %<br />change over<br />previous year !Aircraft<br />movements !Aircraft %<br />change over<br />previous year !Notes |- | 2000 || 28,618,200 || {{increase}} 9.8 || 1,682,489 || {{increase}} 12.1 || 173,947 || {{increase}} 4.8 || |- | 2001 || 28,093,759 || {{decrease}} 1.83 || 1,507,062 || {{decrease}} 11.6 || 179,359 || {{increase}} 3.1 || [[September 11 attacks]] |- | 2002 || 28,979,344 || {{increase}} 3.2 || 1,637,797 || {{increase}} 8.7 || 174,820 || {{decrease}} 2.5 || |- | 2003 || 24,664,137 || {{decrease}} 14.9 || 1,611,407 || {{decrease}} 1.6 || 154,346 || {{decrease}} 11.7 || [[2002–2004 SARS outbreak]] |- | 2004 || 30,353,565 || {{increase}} 23.0 || 1,775,092 || {{increase}} 10.1 || 184,932 || {{increase}} 19.8 || |- | 2005 || 32,430,856 || {{increase}} 6.8 || 1,833,721 || {{increase}} 3.3 || 204,138 || {{increase}} 10.3 || |- | 2006 || 35,033,083 || {{increase}} 8.0 || 1,931,881 || {{increase}} 5.4 || 214,000 || {{increase}} 4.8 || |- | 2007 || 36,701,556 || {{increase}} 4.8 || 1,918,159 || {{decrease}} 0.7 || 221,000 || {{increase}} 3.3 || |- | 2008 || 37,694,824 || {{increase}} 2.7 || 1,883,894 || {{decrease}} 1.8 || 232,000 || {{increase}} 5.0 || |- | 2009 || 37,203,978 || {{decrease}} 1.3 || 1,633,791 || {{decrease}} 15.3 || 240,360 || {{increase}} 3.6 || [[2008 financial crisis]] |- |- !colspan="11" |Sources:<ref>{{cite web|title=2000–2009 Singapore Changi Airport Passenger Movements|url=https://data.gov.sg/dataset/civil-aircraft-arrivals-departures-passengers-and-mail-changi-airport-monthly|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=22 June 2020|archive-url=https://web.archive.org/web/20200622090650/https://data.gov.sg/dataset/civil-aircraft-arrivals-departures-passengers-and-mail-changi-airport-monthly|url-status=live}}</ref><ref>{{cite web|title=2000–2009 Singapore Changi Airport Airfreight movements 1|url=https://data.gov.sg/dataset/air-cargo-discharged-by-region-country-of-origin-monthly|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=22 June 2020|archive-url=https://web.archive.org/web/20200622022421/https://data.gov.sg/dataset/air-cargo-discharged-by-region-country-of-origin-monthly|url-status=live}}</ref><ref>{{cite web|title=2000–2009 Singapore Changi Airport Airfreight movements 2|url=https://data.gov.sg/dataset/air-cargo-loaded-total-by-region-and-selected-country-of-destination?view_id=6b5563a0-dd96-42c3-9d57-d0c7d30780d9&resource_id=2a8dd954-d260-4018-9d6b-503bedf1f019|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=21 June 2020|archive-url=https://web.archive.org/web/20200621132014/https://data.gov.sg/dataset/air-cargo-loaded-total-by-region-and-selected-country-of-destination?view_id=6b5563a0-dd96-42c3-9d57-d0c7d30780d9&resource_id=2a8dd954-d260-4018-9d6b-503bedf1f019|url-status=live}}</ref> |} {|class="wikitable" style="text-align:center;" ! colspan="8" style="background:lightgrey; colour:black; line-height:180%;" | Operational statistics (2010–2019) |- | style="text-align:center;" colspan="8"| |- style="background:lightgrey;" !Year !Passenger<br />movements !Passenger %<br />change over<br />previous year !Airfreight<br />movements<br />(tonnes) !Airfreight %<br />change over<br />previous year !Aircraft<br />movements !Aircraft %<br />change over<br />previous year !Notes |- | 2010 || 42,038,777 || {{increase}} 13.0 || 1,813,809 || {{increase}} 11.0 || 263,593 || {{increase}} 9.7 || |- | 2011 || 46,543,845 || {{increase}} 10.7 || 1,865,252 || {{increase}} 2.8 || 301,711 || {{increase}} 14.5 || |- | 2012 || 51,181,804 || {{increase}} 10.0 || 1,806,225 || {{decrease}} 3.2 || 324,722 || {{increase}} 7.6 || |- | 2013 || 53,726,087 || {{increase}} 5.0 || 1,850,233 || {{increase}} 2.4 || 343,800 || {{increase}} 5.9 || |- | 2014 || 54,093,070 || {{increase}} 0.8 || 1,843,799 || {{decrease}} 0.3 || 341,386 || {{decrease}} 0.7 || |- | 2015 || 55,448,964 || {{increase}} 2.5 || 1,853,087 || {{increase}} 0.5 || 346,334 || {{increase}} 1.5 || |- | 2016 || 58,698,039 || {{increase}} 5.9 || 1,969,434 || {{increase}} 6.3 || 360,490 || {{increase}} 4.1 || |- | 2017 || 62,219,573 || {{increase}} 6.0 || 2,125,226 || {{increase}} 7.9 || 373,201 || {{increase}} 3.5 || |- | 2018 || 65,600,000 || {{increase}} 5.5 || 2,150,000 || {{increase}} 1.4 || 386,000 || {{increase}} 3.4 || |- | 2019 || 68,300,000 || {{increase}} 4.0 || 2,010,000 || {{decrease}} 6.5 || 382,000 || {{decrease}} 1.0 || |- !colspan="11" |Sources:<ref>{{cite web|title=2010 Singapore Changi Airport Statistics|url=https://media.changiairport.com/pressreleases/changi-airport-closes-2010-with-record-42-million-passengers-618168.pdf|publisher=Changi Airport Group|date=20 January 2011|access-date=20 June 2020|archive-date=20 June 2020|archive-url=https://web.archive.org/web/20200620181800/https://media.changiairport.com/pressreleases/changi-airport-closes-2010-with-record-42-million-passengers-618168.pdf|url-status=live}}</ref><ref>{{cite web|title=2011 Singapore Changi Airport Statistics|url=https://www.changiairportgroup.com/export/sites/caas/assets/media_release_2012/20_Jan_2012.pdf|publisher=Changi Airport Group|date=20 January 2012|access-date=30 March 2016|archive-url=https://web.archive.org/web/20160417072450/https://www.changiairportgroup.com/export/sites/caas/assets/media_release_2012/20_Jan_2012.pdf|archive-date=17 April 2016}}</ref><ref>{{cite web|title=2012 Singapore Changi Airport Statistics|url=https://www.changiairportgroup.com/export/sites/caas/assets/media_release_2013/Media_Release_-_A_record_51_million_passengers_for_Changi_Airport_in_2012_xwebx.pdf|publisher=Changi Airport Group|date=31 January 2013|access-date=30 March 2016|archive-url=https://web.archive.org/web/20160417103118/https://www.changiairportgroup.com/export/sites/caas/assets/media_release_2013/Media_Release_-_A_record_51_million_passengers_for_Changi_Airport_in_2012_xwebx.pdf|archive-date=17 April 2016}}</ref><ref>{{cite web|title=2013 Singapore Changi Airport Statistics|url=https://www.changiairportgroup.com/export/sites/caas/assets/media_release_2014/WEB-Media-Release-Another-record-breaking-year-for-Changi-Airport-in-2013.pdf|publisher=Changi Airport Group|date=28 January 2014|access-date=30 March 2016|archive-url=https://web.archive.org/web/20140701024027/http://www.changiairportgroup.com/export/sites/caas/assets/media_release_2014/WEB-Media-Release-Another-record-breaking-year-for-Changi-Airport-in-2013.pdf|archive-date=1 July 2014}}</ref><ref>{{cite web|title=2014 Singapore Changi Airport Statistics|url=http://www.changiairportgroup.com/export/sites/caas/assets/media_release_2015/WEB-Media-Release-Changi-Airport-crosses-54-million-passenger-mark-in-2014.pdf|publisher=Changi Airport Group|date=29 January 2015|access-date=30 March 2016|archive-url=https://web.archive.org/web/20150930140817/http://www.changiairportgroup.com/export/sites/caas/assets/media_release_2015/WEB-Media-Release-Changi-Airport-crosses-54-million-passenger-mark-in-2014.pdf|archive-date=30 September 2015}}</ref><ref> {{cite web|title=2015 Singapore Changi Airport Statistics|url=http://www.changiairport.com/corporate/media-centre/newsroom.html#/documents/annex-a-passenger-airfreight-aircraft-movements-statistics-for-2015-52522|publisher=Changi Airport Group|date=27 January 2016|access-date=30 March 2016|archive-url=https://web.archive.org/web/20160127105007/http://www.changiairport.com/corporate/media-centre/newsroom.html#/documents/annex-a-passenger-airfreight-aircraft-movements-statistics-for-2015-52522|archive-date=27 January 2016|url-status=live}} </ref><ref> {{cite web|title=2016 Singapore Changi Airport Statistics|url=http://www.changiairport.com/corporate/media-centre/newsroom.html#/documents/annex-a-passenger-airfreight-and-aircraft-movement-statistics-for-2016-63855|publisher=Changi Airport Group|date=30 January 2017|access-date=30 January 2017|archive-url=https://web.archive.org/web/20160127105007/http://www.changiairport.com/corporate/media-centre/newsroom.html#/documents/annex-a-passenger-airfreight-and-aircraft-movement-statistics-for-2016-63855|archive-date=27 January 2016|url-status=live}} </ref><ref> {{cite web|title=2017 Singapore Changi Airport Statistics|url=http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/a-record-62-dot-2-million-passengers-for-changi-airport-in-2017-2386732|publisher=Changi Airport Group|date=23 January 2018|access-date=23 January 2018|archive-url=https://web.archive.org/web/20160127105007/http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/a-record-62-dot-2-million-passengers-for-changi-airport-in-2017-2386732|archive-date=27 January 2016|url-status=live}} </ref><ref> {{cite web|url=http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/changi-airport-crosses-65-million-passenger-mark-in-2018-2829095|title=Changi Airport crosses 65 million passenger mark in 2018|website=changiairport.com|language=en-US|access-date=10 February 2019|archive-url=https://web.archive.org/web/20160127105007/http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/changi-airport-crosses-65-million-passenger-mark-in-2018-2829095|archive-date=27 January 2016|url-status=live}}</ref><ref name="Changi Airport">{{cite web|url=https://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/changi-airport-handled-68-dot-3-million-passengers-in-2019-2966486|title=Passenger, airfreight and aircraft movement statistics for 2019|publisher=Changi Airport Group|date=31 January 2020|access-date=8 February 2020|archive-date=4 February 2022|archive-url=https://web.archive.org/web/20220204023838/https://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/changi-airport-handled-68-dot-3-million-passengers-in-2019-2966486|url-status=live}}</ref> |} {|class="wikitable" style="text-align:center;" ! colspan="8" style="background:lightgrey; colour:black; line-height:180%;" | Operational statistics (2020–2025) |- | style="text-align:center;" colspan="8"| |- style="background:lightgrey;" !Year !Passenger<br />movements !Passenger %<br />change over<br />previous year !Airfreight<br />movements<br />(tonnes) !Airfreight %<br />change over<br />previous year !Aircraft<br />movements !Aircraft %<br />change over<br />previous year !Notes |- | 2020 || 11,800,000 || {{decrease}} 82.8 || 1,540,000 || {{decrease}} 23.3 || 125,000 || {{decrease}} 67.2 || [[COVID-19 pandemic]] |- | 2021 || 3,053,000 || {{decrease}} 74.1 || 1,947,000 || {{increase}} 26.1 || 109,000 || {{decrease}} 13.2 || [[COVID-19 pandemic]] |- | 2022 || 32,200,000 || {{increase}} 954.7 || 1,850,000 || {{decrease}} 5.0 || 219,000 || {{increase}} 100.9 || |- | 2023 || 58,900,000 || {{increase}} 82.9 || 1,740,000 || {{decrease}} 5.9 || 328,000 || {{increase}} 49.8 || |- | 2024 || 67,700,000 || {{increase}} 14.8 || 1,990,000 || {{increase}} 14.6 || 366,000 ||{{increase}} 11.6 || |- | 2025 || 69,980,000 || {{increase}} 3.38 || 2,080,000 || {{increase}} 4.52 || 374,000 ||{{increase}} 2.19 || |- ! colspan="11" | Sources:<ref>{{cite web|url=https://www.straitstimes.com/singapore/passenger-traffic-in-changi-airport-fell-828-per-cent-last-year-from-683m-in-2019-to-118m|title=2020 Singapore Changi Airport Statistics|website=The Straits Times|date=21 January 2021|access-date=21 January 2021|archive-date=20 January 2021|archive-url=https://web.archive.org/web/20210120103658/https://www.straitstimes.com/singapore/passenger-traffic-in-changi-airport-fell-828-per-cent-last-year-from-683m-in-2019-to-118m|url-status=live}}</ref><ref>{{cite web|url=https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html|title=2021 Singapore Changi Airport Statistics|website=Changi Airport Group|date=20 January 2022|access-date=20 January 2022|archive-date=20 January 2022|archive-url=https://web.archive.org/web/20220120074001/https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html|url-status=live}}</ref><ref>{{cite web|url=https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html|title=Singapore Changi Airport Statistics (2022)|website=Changi Airport Group|access-date=2 February 2023|archive-date=20 January 2022|archive-url=https://web.archive.org/web/20220120074001/https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html|url-status=live}}</ref><ref>{{cite web |title=2023 Singapore Changi Airport Statistics |url=https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html |website=Changi Airport Group |access-date=20 January 2022 |archive-date=20 January 2022 |archive-url=https://web.archive.org/web/20220120042036/http://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html |url-status=live }}</ref><ref>{{Cite web |last=Loi |first=Esther |date=22 January 2025 |title=Changi Airport's 2024 passenger traffic hit 99.1% of pre-pandemic levels |url=https://www.straitstimes.com/singapore/transport/changi-airport-handles-67-7m-passengers-in-2024-99-1-of-pre-pandemic-levels |access-date=29 January 2025 |website=The Straits Times |archive-date=30 January 2025 |archive-url=https://web.archive.org/web/20250130163615/https://www.straitstimes.com/singapore/transport/changi-airport-handles-67-7m-passengers-in-2024-99-1-of-pre-pandemic-levels |url-status=live }}</ref><ref>{{cite web|url=https://www.changiairport.com/en/corporate/about-us/traffic-statistics.html|title=Traffic Statistics|website=Changi Airport|access-date=20 December 2025|archive-url=https://web.archive.org/web/20251229122332/https://www.changiairport.com/en/corporate/about-us/traffic-statistics.html|archive-date=29 December 2025|url-status=live}}</ref> |} {{Airport-Statistics|iata=SIN}} ==Accidents and incidents== * 26 March 1991 – [[Singapore Airlines Flight 117]], operated by an [[Airbus A310]], was hijacked by four terrorists. The flight landed in Changi Airport at 22:15. The [[Special Operations Force (Singapore)|Singapore Special Operations Force]] stormed the aircraft, on the morning of 27 March. All four hijackers were killed, with only minor injuries among the surviving 123 passengers and crew, who were held hostage for more than eight hours.<ref>{{Cite web |last=Ranter |first=Harro |title=Unlawful Interference Airbus A310-324 9V-STP, Monday 25 March 1991 |url=https://asn.flightsafety.org/asndb/325798 |access-date=5 January 2025 |website=asn.flightsafety.org |archive-date=25 December 2024 |archive-url=https://web.archive.org/web/20241225120159/https://asn.flightsafety.org/asndb/325798 |url-status=live }}</ref> * 4 November 2010 – [[Qantas Flight 32]], operated by an [[Airbus A380-800]] with [[Rolls-Royce Trent 900]] engines, had an [[Turbine engine failure|uncontained engine failure]] and returned to Changi Airport. Upon landing, one of the engines could not be shut down due to ruptured control cables and had to be doused for three hours by airport firefighters to forcefully shut it down. There were no crew or passenger injuries, and all 469 people on board survived the accident.<ref name="ASNforflight32">{{Cite web |last=Ranter |first=Harro |title=Accident Airbus A380-842 VH-OQA, Thursday 4 November 2010 |url=https://asn.flightsafety.org/wikibase/321226 |access-date=5 January 2025 |website=asn.flightsafety.org |archive-date=21 January 2025 |archive-url=https://web.archive.org/web/20250121153231/https://asn.flightsafety.org/wikibase/321226 |url-status=live }}</ref> The aircraft was also repaired.<ref name="ASNforflight32"/> * 27 June 2016 – Singapore Airlines Flight 368, a scheduled service from Changi Airport to [[Milan Malpensa Airport|Milan, Italy]] carrying 222 passengers and 19 crew, caught fire shortly after it landed. Approximately three hours into the flight, the [[Boeing 777]] turned back after the pilot received an engine oil warning message. Shortly after landing, the right engine and wing were ablaze, with flames engulfing the right side of the jet. No one was injured. The aircraft was later repaired and placed back into service.<ref>{{Cite web |last=Auto |first=Hermes |date=27 June 2016 |title=Singapore Airlines plane catches fire on Changi Airport runway; no injuries reported {{!}} The Straits Times |url=https://www.straitstimes.com/singapore/singapore-airlines-plane-catches-fire-on-changi-airport-runway-no-injuries-reported |access-date=10 March 2023 |website=www.straitstimes.com |language=en |archive-date=10 March 2023 |archive-url=https://web.archive.org/web/20230310180903/https://www.straitstimes.com/singapore/singapore-airlines-plane-catches-fire-on-changi-airport-runway-no-injuries-reported |url-status=live }}</ref><ref>{{cite web|url=https://asn.flightsafety.org/wikibase/320054|title=Accident description for 9V-SWB at Aviation Safety Network|website=asn.flightsafety.org|accessdate=23 May 2025|archive-date=27 November 2024|archive-url=https://web.archive.org/web/20241127201309/https://asn.flightsafety.org/wikibase/320054|url-status=live}}</ref> * 16 May 2017 – a fire broke out at the departure hall in Terminal 2.<ref> {{cite web |url=http://www.channelnewsasia.com/news/singapore/small-fire-at-changi-airport-t2-sparks-evacuation-flight-delays-8854078 |title='Small fire' at Changi Airport T2 sparks evacuation, flight delays |publisher=Channel NewsAsia |access-date=16 May 2017 |archive-url=https://web.archive.org/web/20170519050018/http://www.channelnewsasia.com/news/singapore/small-fire-at-changi-airport-t2-sparks-evacuation-flight-delays-8854078 |archive-date=19 May 2017 |url-status=live }} </ref> The fire caused 40 flights at Terminal 2 to be delayed and diverted to Terminal 3.<ref>{{cite web |url=http://www.channelnewsasia.com/news/singapore/changi-airport-fire-about-40-flights-affected-by-terminal-2-8854800?cid=fbcna |title=Changi Airport fire: About 40 flights affected by Terminal 2 closure |publisher=Channel NewsAsia |access-date=17 May 2017 |archive-url=https://web.archive.org/web/20170519081305/http://www.channelnewsasia.com/news/singapore/changi-airport-fire-about-40-flights-affected-by-terminal-2-8854800?cid=FBcna |archive-date=19 May 2017 |url-status=live}}</ref> Terminal 2 was closed from 17:30 to 22:45. * 29 November 2017 – a tow tug towing a Singapore Airlines [[Boeing 777]]-200 caught fire. This fire was promptly put out by the airport's emergency services. A member of the towing crew was in the aircraft's cockpit when the fire occurred; the crew member evacuated through the aircraft's emergency slides. The aircraft was substantially damaged by the fire and written off.<ref>{{Cite news|url=https://www.straitstimes.com/singapore/transport/tow-tug-at-changi-airport-catches-fire-as-it-is-towing-a-singapore-airlines|title=Tow tug at Changi Airport catches fire while towing Singapore Airlines plane|work=The Straits Times|author=Karamjit Kaur|date=29 November 2017|access-date=22 September 2021|archive-date=22 September 2021|archive-url=https://web.archive.org/web/20210922043722/https://www.straitstimes.com/singapore/transport/tow-tug-at-changi-airport-catches-fire-as-it-is-towing-a-singapore-airlines|url-status=live}}</ref><ref>{{cite web|url=https://asn.flightsafety.org/asndb/319762|title=Accident description for 9V-SQK at aviation-safety.org|website=aviation-safety.org|access-date=10 July 2024}}</ref> * 6 February 2018 – a [[KAI T-50 Golden Eagle]], part of the [[Black Eagles aerobatic team]] taking part in [[Singapore Airshow|Singapore Airshow 2018]], veered off the runway during takeoff and crashed. The resulting fire was put out by emergency services and the pilot was treated for minor injuries. Runway 02L/20R was closed as a result and caused delays at the airport.<ref>{{Cite news|last1=Chin|first1=Nigel|url=https://www.channelnewsasia.com/news/singapore/korean-plane-crashes-catches-fire-changi-airport-9932322|title=Korean plane taking part in Singapore Airshow crashes, catches fire at Changi Airport; flight delays expected|date=6 February 2018|publisher=Channel NewsAsia|access-date=6 February 2018|archive-date=22 September 2020|archive-url=https://web.archive.org/web/20200922085234/https://www.channelnewsasia.com/news/singapore/korean-plane-singapore-airshow-crashes-changi-airport-9932322|url-status=live}}</ref> ==See also== {{Portal|Singapore|Aviation}} *[[Airport Logistics Park]] *[[History of Changi Airport]] *[[Infrastructure of Changi Airport]] *[[Jewel Changi Airport]] *[[Kinetic Rain]] *[[List of airports with triple takeoff/landing capability]] *[[List of busiest airports by passenger traffic]] ==Notes== {{notelist}} ==References== ===Citations=== {{reflist}} ===Bibliography=== * {{citation |chapter-url=http://www.wondersofworldaviation.com/singapore-airport.html |chapter=Singapore's great airport |title=Wonders of World Aviation |year=1938 |pages=128–130 |editor-first=Clarence |editor-last=Winchester }}, illustrated description of the newly opened Singapore Airport * {{Cite news |date=9 April 2024 |title=Leadership transition at Changi Airport Group |url=https://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/leadership-transition-at-changi-airport-group-3315372 |access-date=9 April 2024 |work=Changi Airport Group}} ==External links== {{Commons category}} {{Wikivoyage}} {{Library resources box |onlinebooks=no |by=no }} {{Commons category-inline|Singapore Changi Airport}} * [https://www.changiairport.com/ Singapore Changi Airport official site] * [https://jetquay.com.sg/ Singapore Changi Airport JetQuay CIP Terminal official website] * [https://web.archive.org/web/20100710082837/https://www.singaporevr.com/vrs/changi_airport/terminal3_inside.html Virtual reality view of Changi Airport Terminal 3] * [https://theta360.com/s/gMekgB0c1sxRRXMiOvZwfdVNU 360° image of Changi Airport Terminal 3] * [https://web.archive.org/web/20070926221328/http://aviation-safety.net/database/airport/airport.php?id=SIN Accident history for SIN] at [[Aviation Safety Network]] * {{NWS-current|WSSS}} {{Changi Airport}} {{Airports in Singapore}} {{Future developments in Singapore}} {{authority control}} [[Category:Changi Airport| ]] [[Category:Airports established in 1981]] [[Category:Airports in Singapore]] [[Category:1981 establishments in Singapore]] [[Category:20th-century architecture in Singapore]] 8lc3uezqkwp08mgx8bot9sn8p8zd3nn 746154 746153 2026-06-12T21:50:45Z Robertsky 51025 1 revision imported from [[:en:Changi_Airport]] 746153 wikitext text/x-wiki {{Short description|International airport in Singapore}} {{Redirect|Singapore Airport|other existing and previous airports in Singapore|List of airports in Singapore|the entertainment and retail complex|Jewel Changi Airport}} {{Use British English|date=January 2019}} {{Use dmy dates|date=March 2026}} {{Infobox airport | name = Changi Airport | nativename = {{small|{{nobold|{{lang|ms|Lapangan Terbang Changi}} }} }} | nativename-a = <!-- Asian Script -->{{small|{{nobold|{{lang|zh-hans|樟宜机场}}<br>{{lang|ta|சாங்கி விமான நிலையம்}} }} }} | nativename-r = <!-- Romanisation --> | ensign = | ensign_size = | ensign_alt = | image = Changi Airport logo.svg | image_size = 180px | image_alt = | image2 = Jewel Changi Airport 13-11-2023(1).jpg | caption = | IATA = SIN | ICAO = WSSS | FAA = | TC = | LID = | GPS = | WMO = 48698 | type = Public / Military | owner = [[Singapore Government]]<ref name="sg_mof_nov2025">{{cite web | title=Who manages the reserves? | url=https://www.mof.gov.sg/policies/reserves/who-manages-the-reserves/|work=Policies | agency=[[Ministry of Finance (Singapore)|Ministry of Finance (MOF)]] | publisher=[[Government of Singapore]] | date=12 November 2025|access-date=26 February 2026}}</ref> | operator = [[Changi Airport Group]]<ref>{{cite web|url=https://www.changiairport.com/corporate.html|title=Changi Airport Group|publisher=Changi Airport Group|agency=Ministry of Finance of Singapore|access-date=27 March 2021|archive-date=27 March 2021|archive-url=https://web.archive.org/web/20210327171915/https://www.changiairport.com/corporate.html|url-status=live}}</ref> | city-served = [[Singapore]] | location = [[Changi]], [[East Region, Singapore|East Region]], Singapore | opened = {{ubl|class=nowrap | {{start date|1981|07|01|df=yes}} (Soft launch) | {{start date|1981|12|29|df=yes}} (Officially) }} | closed = <!-- {{end date|YYYY|MM|DD}} --> | passenger_services_ceased = <!-- {{end date|YYYY|MM|DD}} --> | hub = {{ubl|class=nowrap | [[FedEx Express]]<ref name="Fedex"/> | [[Scoot]] | [[Singapore Airlines]]}} | operating_base = <!-- If more than one airline, use {{Unbulleted list|Airline1|Airline2}} --> | built = <!-- military airports --> | used = <!-- military airports --> | commander = <!-- military airports --> | occupants = <!-- military airports --> | timezone = [[Singapore Standard Time|SST]] | utc = [[UTC+08:00]] | summer = | utcs = | elevation-f = 22 | elevation-m = 6.65 | metric-elev = yes | coordinates = {{coord|1|21|33|N|103|59|22|E|region:SG|display=inline,title}} | website = {{URL|www.changiairport.com}} | image_map = | image_mapsize = | image_map_alt = | image_map_caption = | mapframe = yes | pushpin_map = Singapore#Southeast Asia#Asia | pushpin_mapsize = 300px | pushpin_map_alt = | pushpin_map_caption = Location in Singapore | pushpin_relief = | pushpin_image = | pushpin_label = SIN/WSSS | pushpin_label_position = | pushpin_mark = | pushpin_marksize = | r1-number = 02L/20R{{efn|Runway 02L is {{Convert|4000|m|abbr=off}} and 20R is {{Convert|3260|m|abbr=off}} with a [[displaced threshold]] of {{Convert|740|m|abbr=off}}. Thus aircraft landing on 20R will have to avoid touching down on the displaced threshold but may use it for departures.}} | r1-length-f = 13,123 | r1-length-m = 4,000 | r1-surface = [[Asphalt concrete]] | r2-number = 02C/20C{{efn|This AIP Supplement informs aircraft operators and pilots that Runway 02C/20C and new taxiways at Singapore Changi Airport will be open for flights effective from 30 November 2023, 2000UTC.<ref>{{cite web |title=SINGAPORE CHANGI AIRPORT – UPDATED INFORMATION AND DATA FOR RUNWAY 02C/20C AND NEW TAXIWAYS |url=https://www.caas.gov.sg/docs/default-source/docs---ats/singapore-airac-aip-sup-2023-128_singapore-changi-airport---updated-information-and-data-for-runway-02c20c-and-new-taxiways.pdf |website=caas.gov.sg |date=21 September 2023 |access-date=25 October 2023 |archive-date=29 October 2021 |archive-url=https://web.archive.org/web/20211029065958/https://www.caas.gov.sg/docs/default-source/docs---ats/singapore-airac-aip-sup-2021-119_singapore-changi-airport---closure-of-runway-02c_20c-and-taxiways-due-to-changi-east-development-works.pdf }}</ref>}} | r2-length-f = 13,123 | r2-length-m = 4,000 | r2-surface = Asphalt concrete | r3-number = 02R/20L{{efn|The runway is not open until the last quarter of 2027.}} | r3-length-f = 13,123 | r3-length-m = 4,000 | r3-surface = Asphalt concrete | metric-rwy = yes | h1-number = | h1-length-f = | h1-length-m = | h1-surface = <!-- up to h12 --> | stat1-header = Passenger movements | stat1-data = {{increase}} 69,980,000 | stat2-header = Cargo movements (tonnes) | stat2-data = {{increase}} 2,080,000 | stat3-header = Aircraft movements | stat3-data = {{increase}} 374,000 | stat4-header = Economic impact (2017) | stat4-data = US$13.3 billion<ref name="International Air Transport Association">{{cite web|url=https://www.iata.org/en/iata-repository/publications/economic-reports/singapore--value-of-aviation/|title=The importance of air transport to Singapore|work=[[International Air Transport Association]]|access-date=12 May 2020|archive-date=22 September 2020|archive-url=https://web.archive.org/web/20200922085400/https://www.iata.org/en/iata-repository/publications/economic-reports/singapore--value-of-aviation/|url-status=live}}</ref> | stat5-header = Social impact (2017) | stat5-data = 119,000<ref name="International Air Transport Association"/> | stat-year = 2025 unless indicated otherwise | footnotes = Sources: Changi Airport Group;<ref>{{cite web|url=https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html|title=Singapore Changi Airport Statistics (2025)|website=Changi Airport Group|access-date=22 January 2026|archive-date=7 January 2024 |archive-url=https://web.archive.org/web/20240107020244/https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html|url-status=live}}</ref> WAD<ref>{{cite web | url = https://worldaerodata.com/wad.cgi?id=SN90056 | title = Singapore Changi Intl | work = World Aero Data | publisher = WorldAeroData.com | access-date = 2 March 2020 | archive-date = 2 March 2020 | archive-url = https://web.archive.org/web/20200302180659/https://worldaerodata.com/wad.cgi%3Fid%3DSN90056 | url-status = usurped }}</ref> }} '''Changi Airport'''{{efn|Pronounced {{IPAc-en|ˈ|tʃ|ɑː|ŋ|.|i}} {{respell|CHAHNG|ee}}; {{zh|s=樟宜机场}}; {{langx|ms|Lapangan Terbang Changi}}; {{langx|ta|சாங்கி விமான நிலையம்}}.}} {{airport codes|SIN|WSSS}} is the main [[international airport]] of [[Singapore]], and functions as one of the most significant aviation gateways in the [[Asia-Pacific]] region. Situated within the [[Changi]] [[Planning areas of Singapore|planning area]] in the [[East Region, Singapore|eastern part]] of the country, the airport is approximately {{convert|24|km|abbr=off}} east from the [[Central Area, Singapore|Central Area]] and occupies a site spanning about {{convert|25|km2|sqmi|abbr=off}}.<ref>{{cite web|url=https://aim-sg.caas.gov.sg/aip/2021-05-04/final/2021-05-04/html/index-en-GB.html|title=Regulations|website=caas.gov.sg|access-date=3 March 2017|archive-url=https://web.archive.org/web/20150923195740/http://www.caas.gov.sg/caasWeb2010/export/sites/caas/en/Regulations/Aeronautical_Information/AIP/aerodrome/AD_WSSS/WSSS-AD2-1.pdf|archive-date=23 September 2015|url-status=dead}}</ref> The airport is a base for more than 100 international carriers with scheduled services linking Singapore to destinations across Asia, Oceania, Africa, Europe, the Middle East and North America.<ref>{{cite web|title=Airlines|url=https://www.changiairport.com/corporate/partnerships/airlines.html |publisher=Changi Airport Group |access-date=18 November 2021 |archive-date=18 November 2021 |archive-url=https://web.archive.org/web/20211118163210/https://www.changiairport.com/corporate/partnerships/airlines.html |url-status=live }}</ref> As of 2025, Changi Airport handled about 70 million passengers and ranked the [[List of busiest airports by passenger traffic|16th busiest airport by passenger traffic]]<ref name="Chelvan-2026">{{Cite web |last=Loi |first=Esther |date=5 January 2026 |title=Changi Airport handled about 70 million passengers in 2025, an all-time high |url=https://www.straitstimes.com/singapore/transport/changi-airport-handled-about-70m-passengers-in-2025-an-all-time-high |access-date=2 March 2026 |publisher=[[The Straits Times]] }}</ref> as well as the 4th busiest international airport by seat volume based on [[OAG (company)|OAG]]'s records.<ref name="Therese-2026">{{Cite web |last=Soh |first=Therese |date=15 January 2026 |title=Changi Airport handled about 70 million passengers in 2025, an all-time high |url=https://www.businesstimes.com.sg/international/global/changi-airport-ranks-4th-busiest-international-airport-2025-oag-report |access-date=2 March 2026 |location=Singapore |publisher=[[The Business Times (Singapore)|The Business Times]] }}</ref> Changi Airport serves as the headquarters for several aviation and ground handling entities. It is the home base of [[Singapore Airlines]], the nation's [[flag carrier]], along with its associated subsidiaries [[Singapore Airlines Cargo]] and [[Scoot]], a regional [[low-cost carrier]]. The airport also hosts the operations of [[BOC Aviation]], a major aircraft leasing firm. Ground and catering services are provided by [[SATS (company)|SATS]] and [[dnata Singapore]] (formerly CIAS), whose facilities are located within the airport precincts. Owing to Singapore's central geographical location and high volume of international transit traffic, the airport has also been designated a principal [[cargo hub]] by [[FedEx Express]], reinforcing its logistical and commercial importance within global air transport networks.<ref name="Fedex">{{cite web|url=http://www.aircargonews.net/news/single-view/news/fedex-opens-flagship-asia-hub.html|title=FedEx opens flagship Asia hub|work=Singapore's Changi Airport|publisher=Aircargonews.net|access-date=5 October 2012|archive-url=https://web.archive.org/web/20150801225059/http://www.aircargonews.net/news/single-view/news/fedex-opens-flagship-asia-hub.html|archive-date=1 August 2015|url-status=live}}</ref><ref>{{cite web|url=https://www.straitstimes.com/singapore/transport/sia-ana-ink-pact-paving-way-for-more-flights-japan-destinations-for-singapore|title=SIA-ANA pact will pave way for more flights, Japan destinations for Singapore consumers |date=31 January 2020|publisher=[[The Straits Times]]|access-date=31 January 2020|archive-date=31 January 2020|archive-url=https://web.archive.org/web/20200131144704/https://www.straitstimes.com/singapore/transport/sia-ana-ink-pact-paving-way-for-more-flights-japan-destinations-for-singapore|url-status=live}}</ref> The airport is managed by the Changi Airport Group, a corporate entity owned by the [[Singapore Government]] while solely maintained by the [[Ministry of Finance (Singapore)|Ministry of Finance]].<ref name="sg_mof_nov2025"/> The airfield infrastructure comprises three operational runways, each measuring {{convert|4|km|mi|adj=off}} in length. While the main airport code is WSSS, the third runway, designated 02R/20L, was formerly part of the adjacent [[Changi Air Base (East)]] and used by the [[Republic of Singapore Air Force]] (RSAF), carrying the ICAO code '''WSAC'''.<ref>{{Cite web |title=Singapore ICAO Location Finder |url=https://www.notams.faa.gov/common/icao/R32C2.html |archive-url=https://web.archive.org/web/20240811235149/https://www.notams.faa.gov/common/icao/R32C2.html |archive-date=11 August 2024 |access-date=1 February 2025 |website=www.notams.faa.gov |url-status=live }}</ref><ref>{{Cite web |title=Changi Air Base - Singapore |url=https://www.world-airport-codes.com/singapore/changi-air-base-84568.html |access-date=1 February 2025 |website=World Airport Codes |language=en |archive-date=18 September 2024 |archive-url=https://web.archive.org/web/20240918224947/https://www.world-airport-codes.com/singapore/changi-air-base-84568.html |url-status=live }}</ref><ref>{{Cite web |title=WSAC/Singapore/Changi Air Base East General Airport Information |url=https://acukwik.com/Airport-Info/WSAC |access-date=1 February 2025 |website=acukwik.com |archive-date=23 January 2025 |archive-url=https://web.archive.org/web/20250123141551/https://acukwik.com/Airport-Info/WSAC |url-status=live }}</ref> The terminal complex includes four passenger terminals, of which Terminals 1, 2 and 3 are directly connected to [[Jewel Changi Airport]], a mixed-use development featuring retail, dining and entertainment facilities integrated with airport infrastructure. A fifth terminal is currently under construction. ==Overview== {{see also|Infrastructure of Changi Airport}} [[File:Singapore_Airport.png|thumb|center|upright=1.5|Map of Changi Airport]] Changi Airport serves more than 100 airlines flying to 170 cities in around 100+ countries and territories worldwide. About 7,000 flights arrive or depart at Changi each week, or one every 80 seconds. For the 2025 full-year figures published by the airport, the airport handled 69,980,000 passengers (a 3.4% increase compared to 2024), the highest in its 44-year history.<ref name=":0" /> This made it the fourth busiest international airport in the world and the seventh busiest in Asia Pacific. In December 2025, Changi Airport registered a total of 6.3 million passenger movements, with 20 December marking the year’s busiest day at 223,000 passengers across its terminals. In addition to being an important passenger hub, the airport is also one of the busiest cargo airports in the world, handling 2.08 million tonnes of air freight in 2025.<ref name="Chelvan-2026" /> Aircraft movements, comprising both landings and take-offs, increased 2.2% year-on-year to 374,000 movements in 2025.<ref name=":0" /> The airport has won over 700 awards since its opening, including 28 "Best Airport" awards in 2025 alone.<ref name=":0">{{cite web | url=https://www.changiairport.com/en/corporate/our-media-hub/newsroom/press-releases.2025-operating-indicators.2026.all.html | title=Changi Airport handled record traffic of close to 70 million passengers in 2025 | publisher=Changi Airport Group | date=22 January 2026 | access-date= }}</ref> Changi Airport's efforts to mitigate the effects of ageing infrastructure include continual physical upgrades to its existing terminals and building new facilities to maintain its high standards in airport service quality.<ref name="changiairportgroup.com">{{cite web|url=http://www.changiairportgroup.com/export/sites/caas/assets/media_release_2013/Media_Release_-_A_record_51_million_passengers_for_Changi_Airport_in_2012_xwebx.pdf|title=A record 51 million passengers for Changi Airport in 2012|website=Changaiairportgroup.com|access-date=3 March 2017|archive-url=https://web.archive.org/web/20131104032212/http://www.changiairportgroup.com/export/sites/caas/assets/media_release_2013/Media_Release_-_A_record_51_million_passengers_for_Changi_Airport_in_2012_xwebx.pdf|archive-date=4 November 2013}}</ref> In 2026, Changi Airport also ranked fourth as one of the top 10 brands in Singapore in YouGov's Best Brands Rankings 2026 report.<ref>{{Cite web|title=CNA remains among top 10 brands in Singapore: YouGov report|url=https://www.channelnewsasia.com/singapore/cna-top-10-brands-singapore-yougov-survey-2026-5893596|website=CNA|access-date=30 January 2026|language=en}}</ref> ==History== {{see also|History of Changi Airport}} ===Conception=== [[File:Singapore Airlines Airbus A300 Green-1.jpg|thumb|250px|The [[Airbus A300]] (9V-STF) of [[Singapore Airlines]] staying at Changi Airport (1983)]] Prior to Changi, Singapore's main international airport was located at [[Paya Lebar Air Base|Paya Lebar]]. It had opened in 1955 with a single [[runway]] and a small passenger [[airport terminal|terminal]], having itself replaced the previous [[Kallang Airport]] that began operations in 1937. The decision to move the airport from Paya Lebar to Changi was based on a number of factors.<ref>{{Cite web |last=Redwan |first=Raiz |date=18 June 2023 |title=Paya Lebar Airport - The International Airport Before Changi That Only Operated For 26 Years |url=https://thesmartlocal.com/read/paya-lebar-airport/ |access-date=30 May 2024 |website=TheSmartLocal - Singapore's Leading Travel and Lifestyle Portal |language=en-GB}}</ref> With the growth in global aviation transport, the airport was facing congestion problems. Its inability to cope with the rising traffic became critical by the 1970s; annual passenger numbers rose dramatically from 300,000 in 1955 to 1.7&nbsp;million in 1970 and to 4&nbsp;million in 1975. As a result, there was a need to accommodate the growing demand for air travel, the desire to establish Singapore as a global aviation hub, and the need to modernise the country's air transport infrastructure.<ref name="CAH">{{cite web |title=Singapore Changi Airport turns 40 years old |url=https://www.airporthistory.org/blue-concourse/singapore-changi-airport-turns-40 |website=A Visual History of the World's Great Airports |access-date=12 February 2023 |language=en |date=1 July 2021 |archive-date=26 November 2022 |archive-url=https://web.archive.org/web/20221126071242/https://www.airporthistory.org/blue-concourse/singapore-changi-airport-turns-40 |url-status=live }}</ref> The Singaporean government had two options – expand the existing airport at Paya Lebar or build a new airport at another location. After extensive studies, a decision was made in 1972 to keep the airport at Paya Lebar, as recommended by aviation consultants. Plans were made for the building of a second runway and an extensive redevelopment and expansion to the passenger terminal building. A year later, however, the plans were reviewed again as the pressure to expand the airport eased because of the [[1973 oil crisis]].<ref name="CAH"/> Concerned that the existing airport was located in an area with potential for urban growth, which would physically hem it in on all sides, the government subsequently decided in 1975 to build a new airport at the eastern tip of the main island at Changi, at the existing site of [[Changi Air Base]]. However, as there was an increase in traffic, the airport still had to be expanded at that time. In addition, aircraft could fly over the sea, avoiding [[noise pollution]] issues within residential areas and avoid disastrous consequences on the ground in the event of an air mishap. Formerly known as the '''Singapore International Airport''', the airport in Paya Lebar was subsequently converted for military use and renamed as [[Paya Lebar Air Base]].<ref name="CAH"/> ===Construction=== The original master plan for Changi Airport involved constructing a dual-terminal and dual-runway configuration over two phases with provisions for another two passenger terminals in the future. Phase 1 included the construction for the first passenger terminal, the first runway reusing and upgrading the main runway of Changi Air Base, 45 aircraft parking bays, support facilities and structures, including a large maintenance hangar, a fire station, workshops and administrative offices, an airfreight complex, two cargo agents buildings, in-flight catering kitchens and an {{cvt|80|m}} [[control tower]]. Construction for the second phase would commence immediately after the completion of Phase 1 and include the second runway, 23 new aircraft parking bays in addition to the existing 45 bays, a second fire station and a third cargo agent building.<ref name="CAH"/><ref>{{cite web|title=Some Facts on Changi Airport |publisher=Singapore Changi Airport |url=http://www.changiairport.com/changi/en/about_us/fact_sheets/facts_changi_ap.html |access-date=3 November 2006 |archive-url=https://web.archive.org/web/20070101114643/http://www.changiairport.com/changi/en/about_us/fact_sheets/facts_changi_ap.html |archive-date=1 January 2007}}</ref> Changi Airport commenced commercial operations on 1 July 1981.<ref name="infopedia">{{cite web|last = Muliani Tan|first = Bonny|title = Changi International Airport|work = singaporeInfopedia|publisher = National Library Board Singapore|year = 2001|url = https://www.nlb.gov.sg/main/article-detail?cmsuuid=8ba0a92c-262a-441a-97e2-a65cee3c1788|access-date = 19 July 2024|archive-url = https://web.archive.org/web/20231124092803/https://www.nlb.gov.sg/main/article-detail?cmsuuid=8ba0a92c-262a-441a-97e2-a65cee3c1788|archive-date = 24 November 2023|df = dmy-all}}</ref> Its first flight, [[Singapore Airlines]] SQ101, touched down that day at 7:10:00am [[Singapore Time]] with 140 passengers from Kuala Lumpur.<ref name="infopedia" /> It officially opened five months later on 29 December 1981. The airport ended its first year of operations with 12.1&nbsp;million passengers, close to 200,000 tonnes of air freight handled and 63,100 aircraft movements. Subsequent phases opened progressively within the next few decades, with Terminal 2 opening for passenger traffic in 1990, Terminal 3 in 2008, and Terminal 4 in 2017. Terminal 5 is expected to open in mid-2030s.<ref name=":1">{{Cite web |title=New exhibition exploring innovations of Changi Airport's future Terminal 5 launched |url=https://www.channelnewsasia.com/singapore/changi-airport-terminal-5-t5-in-making-exhibition-opens-public-5806111 |access-date=2 March 2026 |website=CNA |language=en}}</ref> ==Terminals== ===Passenger terminals=== [[File:Center Plaza T1 Changi Airport.jpg|thumb|Terminal 1]] [[File:Singapore Changi Airport Terminal 2 06-08-2025(18).jpg|thumb|Terminal 2]] [[File:Changi Airport Wonderfall.jpg|alt=The Wonderfall at Changi Airport Terminal 2|thumb|The Wonderfall at Terminal 2]] [[File:Singapore Changi Airport Terminal 3 12-08-2025(1).jpg|thumb|Terminal 3]] [[File:Aerial view of Singapore Changi Airport and Changi Air Base - 20110523.jpg|thumb|Aerial view of Singapore Changi Airport in 2011. The forested area to the right of its airfield has since been cleared for Terminal 5]] Changi Airport has four main passenger terminals arranged with Jewel located in the centre of Terminals 1, 2 and 3. Currently, the airport has an operational capacity of 90 million passengers per annum (mppa) across four terminals. <ref>{{Cite web |date=30 May 2025 |title=Fact Sheet: Changi Airport |url=https://www.changiairport.com/en/corporate/our-media-hub/newsroom/press-releases.fact-sheet-changi-airport.2025.all.html |access-date=3 March 2026 |website=[[Changi Airport Group]]}}</ref> {| class="wikitable" |- !Terminal !Date of opening !Location |- |[[Singapore Changi Airport Terminal 1|Terminal 1]] |1 July 1981<ref>{{Cite web|title=Changi Airport Infopedia|url=https://eresources.nlb.gov.sg/infopedia/articles/SIP_574_2004-12-23.html|access-date=31 May 2020|website=eresources.nlb.gov.sg|archive-date=30 August 2020|archive-url=https://web.archive.org/web/20200830195358/https://eresources.nlb.gov.sg/infopedia/articles/SIP_574_2004-12-23.html|url-status=live}}</ref> |Northern end |- |[[Singapore Changi Airport Terminal 2|Terminal 2]] |22 November 1990<ref>{{Cite web|title=First 137 passengers take off from Terminal 2|url=https://eresources.nlb.gov.sg/newspapers/Digitised/Article/newpaper19901122-1.2.15.2|access-date=31 May 2020|website=eresources.nlb.gov.sg|archive-date=30 August 2020|archive-url=https://web.archive.org/web/20200830203955/https://eresources.nlb.gov.sg/newspapers/Digitised/Article/newpaper19901122-1.2.15.2|url-status=live}}</ref> |Eastern end |- |[[Singapore Changi Airport Terminal 3|Terminal 3]] |9 January 2008<ref>{{Cite web|title=T3 Takes Off |url=https://eresources.nlb.gov.sg/newspapers/Digitised/Article/straitstimes20080110-1.2.9.3|access-date=31 May 2020|website=eresources.nlb.gov.sg|archive-date=8 November 2019|archive-url=https://web.archive.org/web/20191108104645/http://eresources.nlb.gov.sg/newspapers/Digitised/Article/straitstimes20080110-1.2.9.3|url-status=live}}</ref><ref>{{Cite web|last=migration|date=25 July 2014|title=Flashback Friday: Changi Airport Terminal 3 officially opened on July 25, 2008|url=https://www.straitstimes.com/singapore/transport/flashback-friday-changi-airport-terminal-3-officially-opened-on-july-25-2008|access-date=31 May 2020|website=The Straits Times|language=en|archive-date=22 September 2020|archive-url=https://web.archive.org/web/20200922085225/https://www.straitstimes.com/singapore/transport/flashback-friday-changi-airport-terminal-3-officially-opened-on-july-25-2008|url-status=live}}</ref> |Western end |- |[[Singapore Changi Airport Terminal 4|Terminal 4]] |31 October 2017<ref>{{Cite web|title=Terminal 4 Breaks New Ground for Changi {{!}} Changi Airport Group|url=https://www.changiairport.com/corporate/media-centre/resources/publication/issue-24/terminal-4-breaks-new-ground-for-Changi.html|archive-url=https://web.archive.org/web/20191228094726/http://www.changiairport.com/corporate/media-centre/resources/publication/issue-24/terminal-4-breaks-new-ground-for-Changi.html|archive-date=28 December 2019|access-date=31 May 2020|website=www.changiairport.com|language=en}}</ref> |Southern end |- |[[Infrastructure of Changi Airport#Terminal 5|Terminal 5]] |Mid-2030s |Southeastern end |} There is also a privately Commercially-Important-Person (CIP) luxury terminal called the [[Singapore Changi Airport JetQuay CIP Terminal|JetQuay CIP Terminal]]. It is similar to the Lufthansa First Class Terminal at [[Frankfurt Airport]], but is open to all passengers travelling in all classes on all airlines with an access fee.<ref>{{Cite web|title=JetQuay|url=https://www.jetquay.com.sg/who_we_are.php|website=www.jetquay.com.sg|access-date=31 May 2020|archive-date=7 March 2021|archive-url=https://web.archive.org/web/20210307075403/https://www.jetquay.com.sg/who_we_are.php|url-status=live}}</ref> The short-lived Budget Terminal was opened on 26 March 2006 and closed on 25 September 2012 to make way for Terminal 4.<ref>{{Cite web |title=Changi abandoning budget terminal to lure more airlines, passengers |url=https://asia.nikkei.com/Business/Changi-abandoning-budget-terminal-to-lure-more-airlines-passengers |access-date=3 April 2025 |website=Nikkei Asia |language=en |archive-date=3 April 2025 |archive-url=https://web.archive.org/web/20250403082937/https://asia.nikkei.com/Business/Changi-abandoning-budget-terminal-to-lure-more-airlines-passengers |url-status=live }}</ref> Terminal 5 is currently under construction. The new terminal is expected to be completed by 2030.<ref> {{cite web|url=http://www.straitstimes.com/singapore/changi-airport-to-open-terminal-4-on-october-31-after-more-than-100-trials|title=Changi Airport to open Terminal 4 on Oct 31; 9 airlines to operate from new terminal|website=The Straits Times|date=6 September 2017|access-date=25 September 2017|archive-url=https://web.archive.org/web/20171008145025/http://www.straitstimes.com/singapore/changi-airport-to-open-terminal-4-on-october-31-after-more-than-100-trials|archive-date=8 October 2017|url-status=live}} </ref> ===Future terminals and projects=== Terminal 5 (T5) is currently under construction. [[Lawrence Wong]], the Prime Minister of Singapore and Minister of Finance, officiated the groundbreaking ceremony for Changi Airport T5 on 14 May 2025.<ref>{{Cite web |date=14 May 2025 |title=Changi Airport Terminal 5 breaks ground |url=https://www.changiairport.com/en/corporate/our-media-hub/newsroom/press-releases.changi-airport-terminal-5-breaks-ground.2025.all.html |access-date=3 March 2026 |website=[[Changi Airport Group]]}}</ref> The new terminal is expected to be ready by the mid-2030s.<ref name=":1" /> [[Infrastructure of Singapore Changi Airport#Terminal 5|Terminal 5]] is expected to handle 50&nbsp;million passenger movements per annum for Changi Airport.<ref> {{cite web|url=https://sg.news.yahoo.com/changi-airport-s-terminal-5-ready-in-mid-2020s-153333390.html|title=Changi Airport's Terminal 5 ready in mid-2020s|date=30 August 2013|work=Yahoo News Singapore|access-date=10 May 2015|archive-url=https://web.archive.org/web/20150714203216/https://sg.news.yahoo.com/changi-airport-s-terminal-5-ready-in-mid-2020s-153333390.html|archive-date=14 July 2015|url-status=live}} </ref> It will be built on reclaimed land to the east of the present terminals. It will be partially funded through an increased levy.<ref> {{cite web |url=https://www.channelnewsasia.com/news/singapore/changi-airport-new-fee-t5-terminal-5-passengers-9999526 |title=Changi Airport passengers to pay new levy to fund developments including T5 |publisher=Channel NewsAsia |date=28 February 2018 |access-date=29 July 2018 |archive-url=https://web.archive.org/web/20180729081458/https://www.channelnewsasia.com/news/singapore/changi-airport-new-fee-t5-terminal-5-passengers-9999526 |archive-date=29 July 2018 |url-status=live }} </ref> KPF Singapore with [[Heatherwick Studio]] and Architects 61 will provide architectural services. [[Arup Group|Arup Singapore]], [[Mott MacDonald|Mott MacDonald Singapore]] and [[Surbana Jurong|Surbana Jurong Consultants]] will provide engineering services while [[DP Architects]] will provide retail design services. The former Transport Minister [[Khaw Boon Wan]] said that the Changi Terminal 5 project was delayed by at least 2 years as a result of the [[COVID-19 pandemic]].<ref>{{Cite web|last=Toh|first=Ting Wei|date=16 June 2021|title=Coronavirus: Changi Airport T5 construction to be "paused" for at least 2 years, says Khaw|url=https://www.straitstimes.com/singapore/transport/coronavirus-changi-airport-t5-construction-to-be-paused-for-at-least-2-years|url-status=live|access-date=16 June 2021|website=The Straits Times|language=en|archive-url=https://web.archive.org/web/20200616075253/https://www.straitstimes.com/singapore/transport/coronavirus-changi-airport-t5-construction-to-be-paused-for-at-least-2-years |archive-date=16 June 2020 }}</ref> ===Mixed-use facilities=== {{further|Jewel Changi Airport}} [[File:JewelSingaporeVortex1.jpg|thumb|The Rain Vortex at [[Jewel Changi Airport]]]] [[Jewel Changi Airport]], which opened on 17 April 2019, is a nature-themed entertainment and retail complex interconnecting Terminals 1, 2 and 3.<ref>{{Cite news|url=https://www.straitstimes.com/singapore/transport/jewel-changi-airport-to-open-on-april-17|title=Jewel Changi Airport to open on April 17|date=6 March 2019|work=The Straits Times|access-date=31 May 2020|archive-url=https://web.archive.org/web/20190307153244/https://www.straitstimes.com/singapore/transport/jewel-changi-airport-to-open-on-april-17|archive-date=7 March 2019|url-status=live}}</ref> Announced in 2013, it is a new terminal-like structure that is intended to simultaneously be a mixed-use complex.<ref>{{cite web | url=http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/changi-airport-group-and-capitamalls-asia-to-jointly-develop-project-jewel-at-changi-airport-943581 | title=Changi Airport Group to develop iconic mixed-use complex | publisher=Changi Airport Group | date=19 August 2013 | access-date=31 May 2020 | archive-date=27 January 2016 | archive-url=https://web.archive.org/web/20160127105007/http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/changi-airport-group-and-capitamalls-asia-to-jointly-develop-project-jewel-at-changi-airport-943581 | url-status=live }}</ref> It is situated on a 3.5-hectare site where the Terminal 1 car park used to reside, which has since been moved underground. Jewel was developed by Jewel Changi Airport Trustee Pte Ltd, a joint venture between Changi Airport Group and [[CapitaLand]], through its wholly owned shopping mall business, CapitaLand Mall Asia.<ref>{{Cite news|url=http://www.straitstimes.com/singapore/project-jewel-at-changi-airport-to-cost-147b|title=Project Jewel at Changi Airport to cost $1.47b|last=migration|date=20 December 2013|work=The Straits Times|access-date=31 May 2020|archive-url=https://web.archive.org/web/20180117190536/http://www.straitstimes.com/singapore/project-jewel-at-changi-airport-to-cost-147b|archive-date=17 January 2018|url-status=live}}</ref> The project cost S$1.7 billion.<ref>{{Cite news|url=http://www.straitstimes.com/singapore/transport/work-on-changi-airports-jewel-project-and-t1-expansion-begins|title=Work on Changi Airport's Jewel project and T1 expansion begins|author=Karamjit Kaur |date=5 December 2014 |work=The Straits Times|access-date=9 January 2018|language=en|archive-url=https://web.archive.org/web/20180117190441/http://www.straitstimes.com/singapore/transport/work-on-changi-airports-jewel-project-and-t1-expansion-begins|archive-date=17 January 2018|url-status=live}}</ref> Part of this project was planned to help expand Terminal 1 to handle 24&nbsp;million passengers per year by 2018 with stand-alone check-in facilities and lounges. The indoor waterfall (named "Rain Vortex") in the structure holds the World Record for the tallest indoor waterfall in the world at 40m high, cascading down 7 storeys.<ref>{{Cite web |date=November 2020 |title=What goes on behind the world's tallest indoor waterfall? |url=https://www.changiairport.com/corporate/media-centre/changijourneys/the-airport-never-sleeps/behind-the-rain-vortex.html |website=changiairport.com}}</ref> ===Cargo terminal=== The Air Hub & Cargo Development department of the Changi Airport Group (CAG) manages the Changi Airfreight Centre,<ref>{{cite web|url=http://www.changiairportgroup.com.sg/cag/html/business-partners/air-cargo/facilities-and-infrastructures/changi_airfreight_centre/index.html |title=Changi Airfreight Centre |publisher=Changi Airport Group |archive-url=https://web.archive.org/web/20150930121343/http://www.changiairportgroup.com.sg/cag/html/business-partners/air-cargo/facilities-and-infrastructures/changi_airfreight_centre/index.html |archive-date=30 September 2015}}</ref> which is located to the north of the airport premises.<ref name="caasdivisions">{{cite web|title=Our Divisions |publisher=Civil Aviation Authority of Singapore (CAAS) |url=http://www.caas.gov.sg/caas/en/About_CAAS/Our_Divisions.html?__locale=en |access-date=3 November 2006 |archive-url=https://web.archive.org/web/20060926022454/http://www.caas.gov.sg/caas/en/About_CAAS/Our_Divisions.html?__locale=en |archive-date=26 September 2006 }}</ref> In 2025, Changi Airport handled 2,080,000 tonnes of air freight, achieving one of its strongest cargo performance on record. The top five air cargo markets in 2025 were China, the United States, Australia, Hong Kong, and India.<ref name=":0" /> Recent cargo volumes at Changi Airport have been heavily driven by global demand for semiconductors, artificial intelligence (AI) technology, electric vehicles, and cleantech.<ref name=":0" /> Changi Airport is consistently honoured at the Asian Freight Logistics and Supply Chain (AFLAS) Awards. Changi has an exceptional track record with this awarding body, having previously won "Best Airport in Asia" for over 27 consecutive years.<ref name=":2">{{Cite web |last=Reporter |first=Staff |date=10 May 2013 |title=Singapore Changi Airport still voted as Asia's best {{!}} Singapore Business Review |url=https://sbr.com.sg/aviation/in-focus/singapore-changi-airport-still-voted-asias-best |access-date=2 March 2026 |website=sbr.com.sg |language=en}}</ref> Changi Airport has been inducted into the Cargonews Asia Hall of Fame for its unprecedented, sustained excellence as a premier airfreight hub. <ref name=":2" />{{clear}} ==Operations== Changi Airport Group (Singapore) Pte Ltd (CAG) was formed on 16 June 2009 upon the corporatisation of Singapore Changi Airport by [[Civil Aviation Authority of Singapore]] as the licensee and operator of the airport.<ref>{{cite report|url=https://www.nas.gov.sg/archivesonline/data/pdfdoc/20081007996.pdf|title=CORPORATISATION OF CHANGI AIRPORT AND RESTRUCTURING OF CIVIL AVIATION AUTHORITY OF SINGAPORE (CAAS)|date=10 July 2008|author=Ministry of Transport,Singapore|archive-date=16 November 2024|access-date=14 August 2024|archive-url=https://web.archive.org/web/20241116084646/https://www.nas.gov.sg/archivesonline/data/pdfdoc/20081007996.pdf|url-status=live}}</ref><ref>{{cite web|url=https://www.nlb.gov.sg/main/article-detail?cmsuuid=2f697180-79c5-4f80-a59f-cbaa42b57bc9|title=Establishment of the Civil Aviation Authority of Singapore|publisher=National Library Board of Singapore}}</ref> ===Passenger operations=== As the airport only handles international passenger traffic, all terminals in operation are equipped with immigration-processing facilities for international travel. After recovering from a drop in passenger traffic as a result of the [[September 11 attacks]] in 2001 and the [[Severe Acute Respiratory Syndrome]] (SARS) epidemic in 2003, the airport saw rapid growth in traffic, which hit the 30-million mark for the first time in 2004. In March 2008, prior to the full effect of the [[2008 financial crisis]] on the global economy, the airport was predicted to handle 50&nbsp;million passengers by 2012<ref>{{cite web|url=http://www.channelnewsasia.com/stories/singaporebusinessnews/view/337878/1/.html|title=Changi poised to handle 50 million passengers a year by 2012|date=28 March 2008|publisher=Channel NewsAsia|access-date=8 November 2011|archive-url=https://web.archive.org/web/20111228202414/http://www.channelnewsasia.com/stories/singaporebusinessnews/view/337878/1/.html|archive-date=28 December 2011|url-status=live}}</ref> due to the opening of [[casino]]s in Singapore and the phased liberalisation of the [[ASEAN]] aviation sector. As predicted, the airport surpassed the 50-million mark in 2012.<ref name="changiairportgroup.com"/> On 18 December 2017, the airport surpassed the 60-million mark for the first time.<ref>{{cite press release|title=Flying higher, Changi Airport crosses 60-million milestone in 2017|url=http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/flying-higher-changi-airport-crosses-60-million-milestone-in-2017-2337980|publisher=Changi Airport Group|access-date=27 January 2016|archive-url=https://web.archive.org/web/20160127105007/http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/flying-higher-changi-airport-crosses-60-million-milestone-in-2017-2337980|archive-date=27 January 2016|url-status=live}}</ref><ref>{{cite web|title=Changi Airport hits record 60 million passengers in 2017|work=CNA |url=https://www.channelnewsasia.com/news/singapore/changi-airport-hits-record-60-million-passengers-in-2017-9507022|publisher=Channel NewsAsia|access-date=18 December 2017|archive-url=https://web.archive.org/web/20171221025632/http://www.channelnewsasia.com/news/singapore/changi-airport-hits-record-60-million-passengers-in-2017-9507022|archive-date=21 December 2017|url-status=live}}</ref> The airport saw a record 65.6 million passenger movements in 2018 – beating 2017's record of 60 million passengers with a 5.5 per cent increase.<ref>{{cite web|url=https://www.channelnewsasia.com/news/singapore/changi-airport-hits-record-65-million-passengers-in-2018-11178416|title=Changi Airport hits record 65 million passengers in 2018|website=Channel NewsAsia|language=en|access-date=2 February 2019|archive-url=https://web.archive.org/web/20190203030425/https://www.channelnewsasia.com/news/singapore/changi-airport-hits-record-65-million-passengers-in-2018-11178416|archive-date=3 February 2019|url-status=live}}</ref> In 2019, [[Firefly (airline)|Firefly]], the sole turboprop operator in Changi Airport, moved to [[Seletar Airport]] to make way for their jet operations.<ref>{{cite web|title=Seletar Airport Prepares for Turboprop Service|url=http://aviationweek.com/singapore-airshow-2018/seletar-airport-prepares-turboprop-service|website=Aviation Week & Space Technology|access-date=5 February 2018|archive-url=https://web.archive.org/web/20180205143311/http://aviationweek.com/singapore-airshow-2018/seletar-airport-prepares-turboprop-service|archive-date=5 February 2018|url-status=live}}</ref><ref>{{cite web|title=Singapore 2018: Seletar Airport set for turboprop move|url=http://www.aircosmosinternational.com/singapore-2018-seletar-airport-set-for-turboprop-move-106789|website=Air & Cosmos – International|access-date=6 February 2018|archive-url=https://web.archive.org/web/20180217202815/http://www.aircosmosinternational.com/singapore-2018-seletar-airport-set-for-turboprop-move-106789|archive-date=17 February 2018|url-status=live}}</ref><ref>{{cite news |title=Malaysian carrier Firefly resumes flights to Singapore as first plane lands at Seletar Airport |url=https://www.channelnewsasia.com/news/singapore/seletar-airport-malaysian-carrier-firefly-flights-singapore-11464544 |access-date=17 June 2019 |author=Staff writers |work=CNA |publisher=Mediacorp|language=en |archive-date=22 September 2020 |archive-url=https://web.archive.org/web/20200922085245/https://www.channelnewsasia.com/news/singapore/seletar-airport-malaysian-carrier-firefly-flights-singapore-11464544 |url-status=live }}</ref> Due to the [[COVID-19 pandemic in Singapore|COVID-19 pandemic]], passenger traffic fell in 2020 and 2021, resulting in Terminals 2 and 4 closing temporarily in May 2020.<ref>{{Cite web |url=https://www.changiairport.com/corporate/media-centre/newsroom/consolidation-of-terminal-operations.html#?tid=relocation |title=Consolidation of Terminal Operations {{pipe}} Singapore Changi Airport |access-date=5 May 2022 |archive-date=22 February 2022 |archive-url=https://web.archive.org/web/20220222235949/https://www.changiairport.com/corporate/media-centre/newsroom/consolidation-of-terminal-operations.html#?tid=relocation |url-status=live }}</ref> Terminals 1 and 3 remained open for passengers throughout, but were closed to the general public on 12 May 2021 along with Jewel, reopening on 1 September 2021.<ref>{{Cite news|date=27 August 2021|title=Changi Airport T1 & T3 to reopen to the public on 1 September 2021|last=Ming Wei|first=Toh|newspaper=The Straits Times|url=https://www.straitstimes.com/singapore/transport/changi-airport-terminal-1-and-3-to-reopen-to-the-public-from-sept-1|access-date=27 August 2021|archive-date=29 August 2021|archive-url=https://web.archive.org/web/20210829062807/https://www.straitstimes.com/singapore/transport/changi-airport-terminal-1-and-3-to-reopen-to-the-public-from-sept-1|url-status=live}}</ref> On 1 November 2023, Terminal 2 fully reopened after three and a half years of upgrading. The refurbished terminal features nature-themed decorations and a 14m-tall digital waterfall display called the Wonderfall.<ref>{{Cite web |title=Changi Airport's Terminal 2 fully reopens with lush greenery and digital waterfall display |url=https://www.channelnewsasia.com/singapore/changi-airport-terminal-2-t2-reopen-full-capacity-3886781 |access-date=6 July 2024 |website=CNA |language=en}}</ref> ===Safety and security=== [[File:Griffon 8000TD.jpg|thumb|Singapore Airport Emergency Services Griffon]] The Changi Airport Group (CAG) manages the overall safety and security of the airport. The Airport Management Division of the CAG manages the customer aspects of the airport's security, while the Aviation Security Unit oversees the airport's compliance with [[Airport security|aviation security]] (AVSEC) policies, and manages AVSEC-related projects.<ref name="caasdivisions"/> The airport's emergency and fire-fighting services are handled by the Airport Emergency Service Division.<ref> [http://www.changiairportgroup.com/export/sites/caas/assets/changi_connection/Changi_Airport_Group_AR_0910_Full.pdf Changi Airport Group Annual Report 2009/10] {{Webarchive|url=https://web.archive.org/web/20101028025538/http://changiairportgroup.com/export/sites/caas/assets/changi_connection/Changi_Airport_Group_AR_0910_Full.pdf |date=28 October 2010 }}. (PDF) Retrieved 15 August 2012. </ref> The Airport Emergency Services handle all instances of rescue and fire-fighting within the airport premises as well as in surrounding waters. It operates from three main fire stations (Station 1 by Runway 1 along West Perimeter Road and Station 2 by Runway 2 and Station 3 by Runway 3), one sub-station (Domestic Fire Station), and one sea rescue base near the airport.<ref>{{cite web|url=http://www.changiairportgroup.com/cag/html/our-services/airport-emergency-services/fire-stations/|title=Civil Fire Stations|publisher=Changi Airport Group|access-date=12 June 2011|archive-url=https://web.archive.org/web/20110518205523/http://changiairportgroup.com/cag/html/our-services/airport-emergency-services/fire-stations/|archive-date=18 May 2011}}</ref> The airport's security comes under the regulatory purview of the Airport Police Division of the [[Singapore Police Force]] (SPF). The day to day discharge of security functions at the airport is performed by [[auxiliary police]] forces including [[Aetos Security Management]], [[Certis Group|Certis (former CISCO)]] and [[SATS Security Services]]. Aetos and SATS Security Services are affiliated to the ground handling companies of dnata and SATS respectively.<ref>{{cite web |url=http://www.channelnewsasia.com/stories/singaporebusinessnews/view/1134158/1/.html |title=Changi Airport's third ground handling licence awarded to ASIG |publisher=Channel NewsAsia |date=9 June 2011 |access-date=8 November 2011 |archive-url=https://web.archive.org/web/20110810121121/http://www.channelnewsasia.com/stories/singaporebusinessnews/view/1134158/1/.html |archive-date=10 August 2011 |url-status=live}}</ref> On 29 April 2008, CAAS signed its then-biggest single security contract for all airport-related security services by engaging Certis CISCO to provide security services at Singapore Changi Airport, as well as [[Seletar Airport]], Changi Airfreight Centre, and the Singapore Air Traffic Control Centre.<ref>{{cite web |url=http://www.certissecurity.com/sg/News/news.php?art=20 |title=Certis CISCO awarded $360&nbsp;million Master Security Services Contract by CAAS |publisher=Certissecurity.com |date=28 April 2008 |access-date=8 November 2011 |archive-url=https://web.archive.org/web/20111002013915/http://www.certissecurity.com/sg/News/news.php?art=20 |archive-date=2 October 2011 }}</ref> It involves the deployment of about 2,600 Certis Cisco personnel, including armed Auxiliary Police Officers and unarmed aviation security officers to perform tasks such as screening checked baggage, controlling access to restricted areas, and screening passengers before they board their aircraft.<ref>[http://www.certissecurity.com/sg/Support/annualreports/0809/ar08_09.pdf 50 Years of Securing Your World] {{Webarchive|url=https://web.archive.org/web/20110708133521/http://www.certissecurity.com/sg/Support/annualreports/0809/ar08_09.pdf |date=8 July 2011 }} . Annual Review 2008/2009. certissecurity.com (PDF). Retrieved 15 August 2012.</ref> Since the [[September 11 attacks]] and the [[Singapore embassies attack plot|naming of the airport]] as a terrorist target by the [[Jemaah Islamiyah]], the airport's security was tightened.<ref>{{cite news |title=Counter Terrorism Efforts at Singapore's Changi Airport |url=http://www.southasiaanalysis.org/%5Cpapers36%5Cpaper3573.html |url-status=usurped |archive-url=https://web.archive.org/web/20100612192419/http://southasiaanalysis.org/papers36/paper3573.html |archive-date=12 June 2010 |access-date=12 June 2011 |publisher=South Asia Analysis Group }}</ref><ref name="The Straits Times (retrieved from NLB)-2002">{{cite web |date=10 January 2002 |title=Changi Airport to Impose Security Levy (Page 5) |url=https://eresources.nlb.gov.sg/newspapers/Digitised/Page/straitstimes20020110-1.1.5 |url-status=live |archive-url=https://web.archive.org/web/20200922085229/https://eresources.nlb.gov.sg/newspapers/Digitised/Page/straitstimes20020110-1.1.5 |archive-date=22 September 2020 |access-date=3 September 2019 |website=The Straits Times (retrieved from NLB)}}</ref> Prohibited items include sharp/blunt objects and liquids/gels/aerosols above 100ml. Devices larger than 7 inches are still needed to be removed for security screening. Duty-free shops that sells liquor are exempted from regulations.<ref name="The Straits Times (retrieved from NLB)-2002"/> ==Airlines and destinations== ===Key markets and destinations=== In 2025, China was the largest market for the airport, followed by Indonesia, Malaysia, Australia and India. Kuala Lumpur, Bangkok, Jakarta, Denpasar (Bali) and Hong Kong were the busiest routes for the year.<ref name=":0" /> ===Passenger=== {{Airport destination list <!-- --> <!-- Do not add Aeromexico without a citation. Aeromexico website does not show Changi as a destination --> | [[Aero Dili]] | [[Presidente Nicolau Lobato International Airport|Dili]]<ref>{{cite web|url=https://www.businesstraveller.com/business-travel/2024/03/04/aero-dili-launches-flights-to-singapores-changi-airport/|title=Aero Dili launches flights to Singapore's Changi airport|publisher=Business Traveller|date=4 March 2024|accessdate=6 May 2024|archive-date=13 July 2024|archive-url=https://web.archive.org/web/20240713085652/https://www.businesstraveller.com/business-travel/2024/03/04/aero-dili-launches-flights-to-singapores-changi-airport/|url-status=live}}</ref> <!-- --> | [[Air Canada]] | [[Vancouver International Airport|Vancouver]]<ref>{{OAGWorldJuly2025Ref|title=Vancouver, BC, Canada YVR|pages=1184-1188}}</ref><ref>{{cite web |title=Air Canada to launch Singapore route |url=https://www.businesstraveller.com/business-travel/2023/06/15/air-canada-to-launch-singapore-route/ |website=Business Traveller |date=15 June 2023 |access-date=15 June 2023 |archive-date=15 June 2023 |archive-url=https://web.archive.org/web/20230615045523/https://www.businesstraveller.com/business-travel/2023/06/15/air-canada-to-launch-singapore-route/ |url-status=live }}</ref> <!-- --> | [[Air China]] | [[Beijing Capital International Airport|Beijing–Capital]],<ref>{{Cite web|date=30 March 2016 |access-date=1 January 2026 |title=More flight options between Singapore and China|website=Travel Weekly Asia|url=https://www.travelweekly-asia.com/Travel-News/Airline-News/More-flight-options-between-Singapore-and-China}}</ref> [[Chengdu Tianfu International Airport|Chengdu–Tianfu]],<ref>{{Cite web |last=Qing |first=Ma |date=26 June 2024 |title=Air China to add more international flights for the summer rush |url=https://www.chinadaily.com.cn/a/202406/26/WS667bb118a31095c51c50af6e.html |access-date=17 January 2026 |website=China Daily}}</ref> [[Chongqing Jiangbei International Airport|Chongqing]],<ref>{{cite web |title=Air China to commence Chongqing-Singapore service in Jul-2023 |url=https://centreforaviation.com/news/air-china-to-commence-chongqing-singapore-service-in-jul-2023-1212533 |website=CAPA |publisher=Informa Markets |date=12 July 2023 |url-access=subscription |access-date=15 July 2023 |archive-date=15 July 2023 |archive-url=https://web.archive.org/web/20230715125755/https://centreforaviation.com/news/air-china-to-commence-chongqing-singapore-service-in-jul-2023-1212533 |url-status=live }}</ref><ref>{{cite web |title=Air China to resume Chongqing-Singapore service from Dec-2023 |url=https://centreforaviation.com/news/air-china-to-resume-chongqing-singapore-service-from-dec-2023-1240316 |website=CAPA |publisher=Informa Markets |date=19 December 2023 |url-access=subscription}}</ref> [[Shanghai Pudong International Airport|Shanghai–Pudong]]<ref> {{cite web|title=New route from Singapore to Chongqing and Shanghai |url=https://www.airchina.sg/SG/GB/promotion/Sinhuyu2023|website=Air China|publisher=|access-date=28 January 2026}}</ref> <!-- --> | [[Air France]] | [[Charles de Gaulle Airport|Paris–Charles de Gaulle]]<ref>{{cite web |title=Air France 777 with New La Première Debuts on Singapore Flights|url=https://aviationa2z.com/index.php/2025/07/18/air-france-new-la-premiere-debuts-on-singapore-flights/|website=aviationa2z.com|date=18 July 2025}}</ref> <!-- --> | [[Air India]] | [[Chennai International Airport|Chennai]] (resumes 2 September 2026),<ref name="airindiascoot">{{Cite web|date=14 December 2025 |access-date=1 January 2026 |title=Air India partners with Scott to expand connectivity across Asia and Australasia|website=Travel Radar|url=https://travelradar.aero/air-india-partners-with-scoot-to-expand-connectivity-across-asia-and-australasia/}}</ref> [[Indira Gandhi International Airport|Delhi]],<ref name="airindiascoot"/> [[Chhatrapati Shivaji Maharaj International Airport|Mumbai–Shivaji]]<ref name="airindiascoot"/> <!-- --> | [[Air India Express]] | [[Tiruchirappalli International Airport|Tiruchirappalli]]<ref>{{Cite web|date=16 November 2025 |access-date=1 January 2026 |title=Trichy adds four new flights to Singapore as demand surges|website=India Times|url=https://timesofindia.indiatimes.com/city/trichy/trichy-adds-four-more-flights-to-singapore-as-demand-surges/articleshow/125366764.cms}}</ref> <!-- --> | [[Air Macau]] | [[Macau International Airport|Macau]]<ref>{{Cite web|date=26 March 2023 |title=Singapore Changi Airport Terminal 2 welcomes Air Macau, Ethiopian and Firefly|website=Mainly Miles|url=https://mainlymiles.com/2023/03/26/singapore-changi-airport-terminal-2-welcomes-air-macau-ethiopian-and-firefly/}}</ref> <!-- --> | [[Air New Zealand]] | [[Auckland Airport|Auckland]],<ref>{{OAGWorldAug2025Ref|title=Auckland, New Zealand AKL|pages=91-93}}</ref> <br />'''Seasonal:''' [[Christchurch Airport|Christchurch]] (resumes 29 October 2026)<ref>{{cite news|title=Air New Zealand has announced three new non-stop international routes |url=https://www.airnewzealandnewsroom.com/press-release-2026-major-international-expansion-set-to-boost-christchurch-and-south-island-growth|access-date=20 May 2026 |work=Air New Zealand Media Releases |date=20 May 2026 |language=en}}</ref><ref>{{Cite web |date=20 May 2026 |title=Three new international destinations about to take off - @christchurch_airport - Instagram|url=https://www.instagram.com/p/DYiVoafoCEK/ |access-date=20 May 2026 |website=Instagram}}</ref> <!-- --> | [[Air Niugini]] | [[Jacksons International Airport|Port Moresby]]<ref>{{OAGWorldAug2025Ref|title=Pt. Moresby, Papua New Guinea POM|pages=1046-1047}}</ref> <!-- --> | [[AirAsia]] | [[Kota Kinabalu International Airport|Kota Kinabalu]],<ref name="malayasiaskyrocket">{{Cite web|date=15 December 2025 |access-date=1 January 2026 |title=Malaysia Airlines and AirAsia skyrocket in 2025! How Singapore,China, and India Are Driving Record Tourism - And What's Next for KLIA's Explosive Growth!|website=Travel and Tour World|url=https://www.travelandtourworld.com/news/article/malaysia-airlines-and-airasia-skyrocket-in-2025-discover-how-singapore-china-india-are-driving-record-tourism-and-whats-next-for-klias-explosive-growth/}}</ref> [[Kuala Lumpur International Airport|Kuala Lumpur–International]],<ref name="malayasiaskyrocket"/> [[Kuching International Airport|Kuching]],<ref name="malayasiaskyrocket"/> [[Langkawi International Airport|Langkawi]],<ref name="malayasiaskyrocket"/> [[Penang International Airport|Penang]]<ref name="malayasiaskyrocket"/> <!-- --> | [[Aircalin]] | [[La Tontouta International Airport|Nouméa]]<ref>{{cite web |title=Aircalin to fly to Singapore |url=https://worldairlinenews.com/2022/04/12/aircalin-to-fly-to-singapore/ |website=World Airline News |access-date=12 April 2022 |language=en |date=12 April 2022 |archive-date=12 April 2022 |archive-url=https://web.archive.org/web/20220412093021/https://worldairlinenews.com/2022/04/12/aircalin-to-fly-to-singapore/ |url-status=live}}</ref> <!-- --> | [[All Nippon Airways]] | [[Haneda International Airport|Tokyo–Haneda]],<ref name="ANASIA">{{Cite web|date=17 April 2025 |access-date=1 January 2026|title=Singapore Airlines and All Nippon Airways deepen joint venture|website=Business Traveler|url=https://www.businesstraveller.com/business-travel/singapore-airlines-and-all-nippon-airways-deepen-joint-venture/}}</ref> [[Narita International Airport|Tokyo–Narita]]<ref name="ANASIA"/> <!-- --> | [[Asiana Airlines]] | [[Incheon International Airport|Seoul–Incheon]]<ref name="OAG Flight Guide Worldwide-2025a">{{OAGWorldAug2025Ref|title=Seoul, Korea Republic Of SEL|pages=1186-1190}}</ref> <!-- --> | [[Bangkok Airways]] | [[Samui Airport|Koh Samui]]<ref>{{OAGWorldAug2025Ref|title=Ko Samui, Thailand USM|pages=638-638}}</ref><ref>{{cite news |author1=Megha Paul |title=Bangkok Airways to resume first international flight on Samui – Singapore route from 1 Aug |url=https://www.traveldailymedia.com/bangkok-airways-to-resume-first-international-flight-on-samui-singapore-route-from-1-aug/ |work=Travel Daily|location=London|date=26 July 2021 |access-date=27 July 2021 |archive-date=7 January 2022 |archive-url=https://web.archive.org/web/20220107180955/https://www.traveldailymedia.com/bangkok-airways-to-resume-first-international-flight-on-samui-singapore-route-from-1-aug/ |url-status=live }}</ref> <!-- --> | [[Batik Air]] | [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]],<ref name="batikairfocus">{{Cite web|date=23 August 2023 |access-date=1 January 2026 |title=Airline in Focus:Batik Air|website=Aviation Week|url=https://aviationweek.com/air-transport/airline-focus-batik-air}}</ref> [[Kualanamu International Airport|Medan]]<ref name="batikairfocus"/> <!-- --> | [[Batik Air Malaysia]] |[[Sultan Azlan Shah Airport|Ipoh]],<ref name="Batik Air Malaysia launches new flights to Penang, Ipoh and Subang">{{cite web |author1=Goh See Min |title=Batik Air Malaysia launches new flights to Penang, Ipoh and Subang |url=https://nowboarding.changiairport.com/discover-changi/batik-air-new-flights-to-ipoh-penang-subang.html |website=Changi Airport: Now Boarding |publisher=Changi Airport Singapore |date=22 September 2025}}</ref> [[Kota Kinabalu International Airport|Kota Kinabalu]],<ref>{{cite web|title=Batik Air flying to over 63 destinations across 20 countries, and counting!|url=https://www.batikair.com.my/new-routes}}</ref> [[Kuala Lumpur International Airport|Kuala Lumpur–International]],<ref name="Batik Air Malaysia launches new flights to Penang, Ipoh and Subang" /> [[Sultan Abdul Aziz Shah Airport|Kuala Lumpur–Subang]],<ref name="Batik Air Malaysia launches new flights to Penang, Ipoh and Subang" /> [[Penang International Airport|Penang]]<ref name="Batik Air Malaysia launches new flights to Penang, Ipoh and Subang" /> <!-- --> | [[Biman Bangladesh Airlines]] | [[Hazrat Shahjalal International Airport|Dhaka]]<ref>{{Cite web|date=27 June 2025 |access-date=1 January 2026|title=Singapore-bound Biman flight makes emergency landing shortly after takeoff in Dhaka|url=https://www.thestar.com.my/aseanplus/aseanplus-news/2025/06/27/singapore-bound-biman-flight-makes-emergency-landing-shortly-after-takeoff-from-dhaka}}</ref> <!-- --> | [[British Airways]] | [[Heathrow Airport|London–Heathrow]],<ref>{{cite web|url=https://www.airpaz.com/en/airlines/BA-British-Airways/airport-airport/singapore-changi-airport-sin-heathrow-airport-lhr|title=British Airways Flight from Singapore Changi Airport to Heathrow Airport|website=www.airpaz.com}}</ref> [[Sydney Airport|Sydney–Kingsford Smith]]<ref>{{cite web|title = British Airways celebrates 90 years of flying between Australia and London with special fares offering savings of up to AUD 900|url=https://mediacentre.britishairways.com/news/23042025/british-airways-celebrates-90-years-of-flying-between-australia-and-london-with-special-fares-offering-savings-of-up-to-aud-900}}</ref><ref>{{cite web|title = March routes roundup: British Airways to launch a second route to Australia|url=https://www.flightradar24.com/blog/aviation-news/airline-news/airline-routes/march-routes-roundup-british-airways-to-launch-a-second-route-to-australia/}}</ref> <!-- --> | [[Cambodia Airways]] | [[Sanya Phoenix International Airport|Sanya]]<ref>{{cite web |title=Cambodia Airways to commence Phnom Penh-Sanya-Singapore service in Dec-2023 |url=https://centreforaviation.com/news/cambodia-airways-to-commence-phnom-penh-sanya-singapore-service-in-dec-2023-1237211 |website=CAPA |publisher=Informa Markets |date=30 November 2023 |url-access=subscription |access-date=30 November 2023 |archive-date=1 December 2023 |archive-url=https://web.archive.org/web/20231201063341/https://centreforaviation.com/news/cambodia-airways-to-commence-phnom-penh-sanya-singapore-service-in-dec-2023-1237211 |url-status=live }}</ref> <!-- --> | [[Cathay Pacific]] | [[Hong Kong International Airport|Hong Kong]]<ref>{{OAGWorldAug2025Ref|title=Hong Kong (SAR) China HKG|pages=543-547}}</ref> <!-- --> | [[Cebu Pacific]] | [[Mactan–Cebu International Airport|Cebu]],<ref name="cebufare"/> [[Clark International Airport|Clark]],<ref>{{cite web|url=https://asianaviation.com/hk-express-expands-footprint-in-vietnam-cebu-pacific-increases-flights-from-singapore/|title=HK Express expands footprint in Vietnam; Cebu Pacific increases flights from Singapore|publisher=Asian Aviation|date=30 April 2023|accessdate=7 May 2024}}</ref> [[Iloilo International Airport|Iloilo]],<ref name="cebufare">{{Cite web|date=24 November 2025 |access-date=1 January 2026 |title=Cebu Pacific rolls out P338 promo fare to Singapore|website=GMA News|url=https://www.gmanetwork.com/news/money/companies/967213/cebu-pacific-rolls-out-p388-promo-fare-to-singapore/story/}}</ref> [[Ninoy Aquino International Airport|Manila]]<ref name="cebufare"/> <!-- --> | [[China Airlines]] | [[Kaohsiung International Airport|Kaohsiung]],<ref>{{OAGWorldAug2025Ref|title=Kaohsiung, Chinese Taipei KHH|pages=618-619}}</ref> [[Taoyuan International Airport|Taipei–Taoyuan]]<ref name="OAG Flight Guide Worldwide-2025b">{{OAGWorldAug2025Ref|title=Taipei, Chinese Taipei TPE|pages=1253-1255}}</ref> <!-- --> | [[China Eastern Airlines]] | [[Changsha Huanghua International Airport|Changsha]],<ref>name="ChinaSouthernfocus">{{Cite web|date=7 January 2025 |access-date=1 January 2026 |title=Airline in Focus:China Southern Airlines|website=Aviation Week|url=https://aviationweek.com/air-transport/airline-focus-china-southern-airlines}}</ref> [[Beijing Daxing International Airport|Beijing–Daxing]],<ref>{{cite web |title=China Eastern Airlines to resume Beijing Daxing-Singapore service from Dec-2023 |url=https://centreforaviation.com/news/china-eastern-airlines-to-resume-beijing-daxing-singapore-service-from-dec-2023-1237434 |website=CAPA |publisher=Informa Markets |date=1 December 2023 |url-access=subscription |access-date=6 December 2023 |archive-date=7 December 2023 |archive-url=https://web.archive.org/web/20231207180301/https://centreforaviation.com/news/china-eastern-airlines-to-resume-beijing-daxing-singapore-service-from-dec-2023-1237434 |url-status=live }}</ref> [[Hangzhou Xiaoshan International Airport|Hangzhou]],<ref>{{cite web |author1=David Casey |title=China Eastern Adds New Links To Australia, New Zealand, Singapore |url=https://aviationweek.com/air-transport/airports-networks/china-eastern-adds-new-links-australia-new-zealand-singapore |website=Aviation Week Network |publisher=Informa Markets |date=9 October 2023 |access-date=10 October 2023 |archive-date=13 October 2023 |archive-url=https://web.archive.org/web/20231013054921/https://aviationweek.com/air-transport/airports-networks/china-eastern-adds-new-links-australia-new-zealand-singapore |url-status=live }}</ref> [[Hefei Xinqiao International Airport|Hefei]],<ref>{{cite web|url=https://www.airpaz.com/en/airlines/MU-China-Eastern-Airlines/airport-airport/singapore-changi-airport-sin-hefei-xinqiao-international-airport-hfe|title=China Eastern Flight from Singapore Changi Airport to Hefei Xinqiao International Airport|website=www.airpaz.com}}</ref> [[Kunming Changshui International Airport|Kunming]],<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Kunming|url=https://www.flightsfrom.com/SIN-KMG}}</ref> [[Nanchang Changbei International Airport|Nanchang]],<ref>{{cite web|url=https://www.airpaz.com/en/airlines/MU-China-Eastern-Airlines/airport-airport/singapore-changi-airport-sin-nanchang-changbei-international-airport-khn|title=China Eastern Flight from Singapore Changi Airport to Nanchang Changbei International Airport|website=www.airpaz.com}}</ref> [[Nanjing Lukou International Airport|Nanjing]] (resumes 20 June 2026),<ref>{{cite web |title=China Eastern Airlines to resume Nanjing-Singapore service from Jun-2026 |url=https://centreforaviation.com/news/china-eastern-airlines-to-resume-nanjing-singapore-service-from-jun-2026-1356378 |website=CAPA |publisher=Informa Markets |date=23 April 2026 |url-access=subscription}}</ref> [[Ningbo Lishe International Airport|Ningbo]],<ref>{{cite web |title=Singapore's Changi Airport adds eight new destinations |date=3 April 2025 |url=https://www.businesstraveller.com/business-travel/2025/04/03/singapores-changi-airport-adds-eight-new-destinations/ |access-date=9 April 2025 |archive-date=4 April 2025 |archive-url=https://web.archive.org/web/20250404061459/https://www.businesstraveller.com/business-travel/2025/04/03/singapores-changi-airport-adds-eight-new-destinations/ |url-status=live }}</ref> [[Shanghai Pudong International Airport|Shanghai–Pudong]],<ref>{{Cite web|date=19 August 2025 |access-date=1 January 2026 |title=What led to Changi Airport runway incident involving 2 China Eastern planes in Aug 2024|url=https://www.straitstimes.com/singapore/transport/two-china-eastern-airlines-planes-involved-in-runway-incursion-at-changi-airport-in-august-2024}}</ref> [[Wuhan Tianhe International Airport|Wuhan]],<ref>{{Cite web |date=16 January 2026 |title=Changi Airport adds over 600 flights for Chinese New Year – extended check-ins, 24-hour lounge and longer Jewel's rain vortex hours |url=https://www.timeout.com/singapore/news/changi-airport-adds-over-600-flights-for-chinese-new-year-extended-check-ins-24-hour-lounge-and-longer-jewels-rain-vortex-hours-011626 |website=Time Out Singapore}}</ref> [[Xi'an Xianyang International Airport|Xi'an]]<ref>{{Cite web |title=新航季{{!}}2024年冬航季东上航陕西始发航班时刻表 |url=https://mp.weixin.qq.com/s/b1PKaeqP2G9J89rDVJaiKA |access-date=7 November 2024 |archive-date=12 November 2024 |archive-url=https://web.archive.org/web/20241112175135/https://mp.weixin.qq.com/s/b1PKaeqP2G9J89rDVJaiKA |url-status=live }}</ref> <!-- --> | {{nowrap|[[China Southern Airlines]]}} | [[Changsha Huanghua International Airport|Changsha]],<ref name="ChinaSouthernfocus">{{Cite web|date=7 January 2025 |access-date=1 January 2026 |title=Airline in Focus:China Southern Airlines|website=Aviation Week|url=https://aviationweek.com/air-transport/airline-focus-china-southern-airlines}}</ref> [[Guangzhou Baiyun International Airport|Guangzhou]],<ref name="ChinaSouthernfocus"/> [[Shenzhen Bao'an International Airport|Shenzhen]]<ref>{{cite web |title=China Southern Airlines to commence Shenzhen-Singapore service in Nov-2023 |url=https://centreforaviation.com/news/china-southern-airlines-to-commence-shenzhen-singapore-service-in-nov-2023-1229860 |website=CAPA |publisher=Informa Markets |date=20 October 2023 |url-access=subscription |access-date=20 October 2023 |archive-date=21 October 2023 |archive-url=https://web.archive.org/web/20231021120454/https://centreforaviation.com/news/china-southern-airlines-to-commence-shenzhen-singapore-service-in-nov-2023-1229860 |url-status=live }}</ref> <!-- --> | [[Chongqing Airlines]] | [[Chongqing Jiangbei International Airport|Chongqing]]<ref>{{cite web |title=Chongqing Airlines to resume Chongqing-Singapore service from late Feb-2023 |url=https://centreforaviation.com/news/chongqing-airlines-to-resume-chongqing-singapore-service-from-late-feb-2023-1184803 |website=CAPA |date=8 February 2023 |url-access=subscription |access-date=8 February 2023 |archive-date=8 February 2023 |archive-url=https://web.archive.org/web/20230208095825/https://centreforaviation.com/news/chongqing-airlines-to-resume-chongqing-singapore-service-from-late-feb-2023-1184803 |url-status=live }}</ref> <!-- --> | [[Citilink]] | [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]]<ref>{{cite news|url=https://centreforaviation.com/news/citilink-to-launch-jakarta-singapore-service-from-01-oct-2022-1162628|title=Citilink to launch Jakarta-Singapore service from 01-Oct-2022|work=CAPA|publisher=Informa Markets|location=London|date=30 September 2022|access-date=30 September 2022|url-access=subscription|archive-date=4 October 2022|archive-url=https://web.archive.org/web/20221004092843/https://centreforaviation.com/news/citilink-to-launch-jakarta-singapore-service-from-01-oct-2022-1162628|url-status=live}}</ref> <!-- --> | [[Drukair]] | [[Lokpriya Gopinath Bordoloi International Airport|Guwahati]],<ref name="drukguwahati">{{Cite web|date=13 August 2022 |access-date=1 January 2026 |title=Guwahati to resume international flight services with Drukair, first time since the Pandemic|website=India Times|url=https://timesofindia.indiatimes.com/travel/travel-news/guwahati-to-resume-international-flight-services-with-druk-air-first-since-the-pandemic/articleshow/93532496.cms}}</ref> [[Paro International Airport|Paro]]<ref name="drukguwahati"/> <!-- --> | [[Emirates (airline)|Emirates]] | [[Dubai International Airport|Dubai–International]],<ref>{{OAGWorldMay2025Ref|title=Dubai, United Arab Emirates DXB|pages=337-343}}</ref> [[Techo International Airport|Phnom Penh]]<ref>{{Cite news |date=6 May 2025 |title=Emirates opens first retail store in Singapore, with carrier expecting higher air traffic |url=https://www.straitstimes.com/business/emirates-opens-first-retail-store-in-singapore-with-carrier-expecting-higher-air-traffic |access-date=17 January 2026 |work=The Straits Times |language=en |issn=0585-3923}}</ref> <!-- --> | [[Ethiopian Airlines]] | [[Addis Ababa Bole International Airport|Addis Ababa]],<ref>{{OAGWorldMay2025Ref|title=Addis Ababa, Ethiopia ADD|pages=17-19}}</ref> [[Kuala Lumpur International Airport|Kuala Lumpur–International]]<ref>{{cite web|url=https://www.airpaz.com/en/airlines/ET-Ethiopian-Airlines/airport-airport/singapore-changi-airport-sin-kuala-lumpur-international-airport-kul|title=Ethiopian Airlines Flight from Singapore Changi Airport to Kuala Lumpur International Airport|website=www.airpaz.com}}</ref> <!-- --> | [[Etihad Airways]] | [[Zayed International Airport|Abu Dhabi]]<ref>{{OAGWorldAug2025Ref|title=Abu Dhabi, United Arab Emirates AUH|pages=14-16}}</ref> <!-- --> | [[EVA Air]] | [[Taoyuan International Airport|Taipei–Taoyuan]]<ref name="OAG Flight Guide Worldwide-2025b"/> <!-- --> | [[Fiji Airways]] | [[Nadi International Airport|Nadi]]<ref>{{Cite web|date=3 November 2017 |access-date=1 January 2026 |title=Fiji Airways increase Singapore flights to three per week in peak seasons|url=https://aviator.aero/press/fiji-airways-increases-singapore-flights-to-three-per-week-in-peak-seasons}}</ref> <!-- --> | [[Finnair]] | [[Helsinki International Airport|Helsinki]]<ref>{{Cite web|date=17 October 2016 |access-date=1 January 2026 |title=Finnair launches Singapore to Helsinki route, claiming fastest way to get to Europe|website=CNBC|url=https://www.cnbc.com/2016/10/17/finnair-launches-singapore-to-helsinki-route-claiming-fastest-way-to-get-to-europe}}</ref> <!-- --> | [[Firefly (airline)|Firefly]] | [[Kuala Lumpur International Airport|Kuala Lumpur–International]]<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Kuala Lumpur|url=https://www.flightsfrom.com/SIN-KUL}}</ref> <!-- --> | [[Garuda Indonesia]] | [[Ngurah Rai International Airport|Denpasar]],<ref>{{cite news|url=https://en.tempo.co/read/1608533/bali-opens-two-international-flights-from-philippines-singapore|title=Bali Opens Two International Flights from Philippines, Singapore|last=Christy Hosana|first=Francisca|work=Tempo.co|location=Jakarta|date=4 July 2022|access-date=4 July 2022|archive-date=5 November 2022|archive-url=https://web.archive.org/web/20221105172722/https://en.tempo.co/read/1608533/bali-opens-two-international-flights-from-philippines-singapore|url-status=live}}</ref> [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]]<ref>{{cite web|url=https://www.airpaz.com/en/flight/code/GA-8964|title=Check Garuda Indonesia GA8964 Flight Schedule|website=www.airpaz.com}}</ref> <!-- --> | [[Gulf Air]] | [[Bahrain International Airport|Bahrain]]<ref>{{OAGWorldMay2025Ref|title=Bahrain, Bahrain BAH|pages=88-90}}</ref><ref>{{cite press release |title=Gulf Air Is Back At Singapore Changi Airport |url=https://www.gulfair.com/media-centre/press-releases/gulf-air-is-back-at-singapore-changi-airport |publisher=Gulf Air |date=4 April 2021 |access-date=15 March 2022 |archive-date=22 May 2022 |archive-url=https://web.archive.org/web/20220522083134/https://www.gulfair.com/media-centre/press-releases/gulf-air-is-back-at-singapore-changi-airport |url-status=live }}</ref> <!-- --> | [[Hainan Airlines]] | [[Changchun Longjia International Airport|Changchun]],<ref>{{Cite web|date=23 September 2025 |access-date=1 January 2026 |title=Changchun Launches New International Flight Route|url=https://www.itiger.com/news/1163517043}}</ref> [[Haikou International Airport|Haikou]],<ref>{{Cite web|date=10 January 2025 |access-date=1 January 2026 |title=Hainan Airlines grows Singapore network|website=Business Insider|url=https://www.businesstraveller.com/business-travel/hainan-airlines-grows-singapore-network/}}</ref> [[Lanzhou Zhongchuan International Airport|Lanzhou]],<ref name="nowboarding.changiairport.com">{{cite web |title=Changi Airport expands reach to Lanzhou and Yichang in China with new Hainan Airlines flights |url=https://nowboarding.changiairport.com/discover-changi/changi-airport-expands-to-lanzhou-yichang-hainan-airlines.html |access-date=30 March 2025 |archive-date=30 March 2025 |archive-url=https://web.archive.org/web/20250330133229/https://nowboarding.changiairport.com/discover-changi/changi-airport-expands-to-lanzhou-yichang-hainan-airlines.html |url-status=live }}</ref> [[Yichang Sanxia International Airport|Yichang]]<ref name="nowboarding.changiairport.com" /> <!-- --> | [[IndiGo]] | [[Kempegowda International Airport|Bengaluru]],<ref name="indigoexpand">{{Cite web|date=4 August 2025 |access-date=1 January 2026|title=Singapore tourism board,IndiGo expand partnership to boost Indian travel to Singapore|website=TTG Asia|url=https://www.ttgasia.com/2025/08/04/singapore-tourism-board-indigo-expand-partnership-to-boost-indian-travel-to-singapore/}}</ref> [[Chennai International Airport|Chennai]],<ref name="indigoexpand"/> [[Coimbatore International Airport|Coimbatore]],<ref>{{cite web |title=IndiGo to commence Coimbatore-Singapore service in Oct-2024 |url=https://centreforaviation.com/news/indigo-to-commence-coimbatore-singapore-service-in-oct-2024-1275072 |website=CAPA |publisher=Informa Markets |date=5 August 2024 |url-access=subscription |access-date=7 August 2024 |archive-date=7 August 2024 |archive-url=https://web.archive.org/web/20240807211845/https://centreforaviation.com/news/indigo-to-commence-coimbatore-singapore-service-in-oct-2024-1275072 |url-status=live }}</ref> [[Indira Gandhi International Airport|Delhi]],<ref>{{cite web|url=https://www.zeebiz.com/economy-infra/aviation/news-indigo-adds-flights-to-singapore-bangkok-after-go-first-cancels-flights-interglobe-aviation-share-price-on-bse-nse-233237|title=IndiGo strengthens connectivity to Southeast Asia, adds flights connecting Singapore, Bangkok|work=Zee Business|date=3 May 2023|access-date=3 May 2023|archive-date=15 May 2023|archive-url=https://web.archive.org/web/20230515032500/https://www.zeebiz.com/economy-infra/aviation/news-indigo-adds-flights-to-singapore-bangkok-after-go-first-cancels-flights-interglobe-aviation-share-price-on-bse-nse-233237|url-status=live}}</ref> [[Rajiv Gandhi International Airport|Hyderabad]],<ref>{{cite news|title=IndiGo To Start Daily Direct Flights On Hyderabad-Singapore Route From October 29|url=https://travelbizmonitor.com/indigo-to-start-daily-direct-flights-on-hyderabad-singapore-routes-from-october-29/|work=Travel Biz Monitor|date=19 July 2023|access-date=19 July 2023|language=en}}</ref> [[Netaji Subhas Chandra Bose International Airport|Kolkata]],<ref name="indigoexpand"/> [[Chhatrapati Shivaji Maharaj International Airport|Mumbai–Shivaji]],<ref>{{cite web|url=https://centreforaviation.com/news/indigo-to-resume-mumbai-singapore-service-from-mar-2023-1186961|title=IndiGo to resume Mumbai-Singapore service from Mar-2023|work=CAPA|access-date=22 February 2023|url-access=subscription|archive-date=22 February 2023|archive-url=https://web.archive.org/web/20230222200038/https://centreforaviation.com/news/indigo-to-resume-mumbai-singapore-service-from-mar-2023-1186961|url-status=live}}</ref> [[Tiruchirappalli International Airport|Tiruchirappali]],<ref name="indigoexpand"/> [[Vijayawada Airport|Vijayawada]]<ref>{{cite web |title=IndiGo to Launch Direct Flights between Vijayawada and Singapore from November 15|url=https://traveltradejournal.com/indigo-to-launch-direct-flights-between-vijayawada-and-singapore-from-november-15/|website=traveltradejournal.com |date=12 October 2025 }}</ref> <!-- --> | [[Indonesia AirAsia]] | [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]]<ref>{{Cite news |title=Singapore knocks back AirAsia licence request three times |url=https://www.ch-aviation.com/news/145249-singapore-knocks-back-airasia-licence-request-three-times |archive-url=http://web.archive.org/web/20251118033535/https://www.ch-aviation.com/news/145249-singapore-knocks-back-airasia-licence-request-three-times |archive-date=18 November 2025 |access-date=17 January 2026 |work=ch-aviation |language=en-US}}</ref> <!-- --> | [[Japan Airlines]] | [[Haneda International Airport|Tokyo–Haneda]],<ref name="Japan65">{{Cite web|date=8 August 2023|access-date=2 January 2026|title=Japan Airlines:65 years of connecting Singapore and Japan|url=https://sms-bridges.com/japan-airlines-65-years-of-connecting-singapore-and-japan/}}</ref> [[Narita International Airport|Tokyo–Narita]]<ref name="Japan65"/> <!-- --> | [[Jeju Air]] | [[Gimhae International Airport|Busan]],<ref>{{cite news|title=Jeju Air to resume Busan-Singapore route next month|url=http://www.koreaherald.com/view.php?ud=20220509000227|location=[[Seoul]]|newspaper=[[The Korea Herald]]|agency=[[Yonhap News Agency]]|date=9 May 2022|language=en|access-date=19 May 2022|archive-date=19 May 2022|archive-url=https://web.archive.org/web/20220519123938/http://www.koreaherald.com/view.php?ud=20220509000227|url-status=live}}</ref> [[Incheon International Airport|Seoul–Incheon]]<ref>{{Cite news |last=Yohannan |first=Rachel |title=Jeju Air launches its first direct flights between Singapore and Seoul at budget fares from just $245 |url=https://www.timeout.com/singapore/news/korean-budget-airline-jeju-air-launches-its-first-direct-flights-between-singapore-and-seoul-031825 |archive-url=http://web.archive.org/web/20250414103040/https://www.timeout.com/singapore/news/korean-budget-airline-jeju-air-launches-its-first-direct-flights-between-singapore-and-seoul-031825 |archive-date=14 April 2025 |access-date=17 January 2026 |work=Time Out Singapore |language=en-GB}}</ref> <!-- --> | [[Jetstar]] | [[Ngurah Rai International Airport|Denpasar]],<ref>{{cite web|url=https://www.airpaz.com/en/airlines/JQ-Jetstar-Airways/airport-airport/singapore-changi-airport-sin-ngurah-rai-international-airport-dps|title=Jetstar Airways Flight from Singapore Changi Airport to Ngurah Rai International Airport|website=www.airpaz.com}}</ref> [[Melbourne Airport|Melbourne]],<ref>{{cite news |author1=Chew Hui Min |title=Jetstar Asia plans to resume flights between Singapore and Darwin in December, pending travel corridor opening |url=https://cna.asia/singapore/jetstar-travel-lane-darwin-australia-singapore-covid-19-vaccination-2206961 |work=CNA |publisher=Mediacorp |date=28 September 2021 |language=en |quote=The announcement follows the Qantas Group's international restart plan, which includes Jetstar Airways resuming services between Melbourne and Singapore from Dec 19, also pending government and regulatory approvals. |access-date=4 April 2022 |archive-date=22 May 2022 |archive-url=https://web.archive.org/web/20220522083133/https://www.channelnewsasia.com/ |url-status=live }}</ref> [[Newcastle Airport (New South Wales)|Newcastle]],<ref>{{cite web |title=Jetstar Boosts Global Connectivity from Newcastle with Singapore via Bali Service |url=https://www.aci-asiapac.aero/media-centre/news/jetstar-boosts-global-connectivity-from-newcastle-with-singapore-via-bali-service |website=ACI Asia-Pacific & Middle East |language=en |date=13 November 2025}}</ref> [[Perth Airport|Perth]],<ref>{{cite web |author1=Joshua Ng |title=Jetstar returns with Singapore-Perth flights |url=https://nowboarding.changiairport.com/discover-changi/jetstar-returns-to-perth-from-changi-airport.html |website=Changi Airport: Now Boarding |publisher=Changi Airport Singapore |date=1 August 2024}}</ref> [[Sunshine Coast Airport|Sunshine Coast]]<ref>{{cite news |title=Jetstar's Game-Changing New Route: Sunshine Coast to Bali & Singapore - Pulse Travel |url=https://www.pulsetravel.com.au/news/jetstars-game-changing-new-route-sunshine-coast-to-bali-singapore/ |access-date=20 November 2025 |date=13 November 2025}}</ref> <!-- --> | [[Juneyao Air]] | [[Shanghai Pudong International Airport|Shanghai–Pudong]],<ref>{{Cite news |title=China's Juneyao Air defers B787 delivery due to US tariffs |url=https://www.ch-aviation.com/news/152620-chinas-juneyao-air-defers-b787-delivery-due-to-us-tariffs |archive-url=http://web.archive.org/web/20251114220752/https://www.ch-aviation.com/news/152620-chinas-juneyao-air-defers-b787-delivery-due-to-us-tariffs |archive-date=14 November 2025 |access-date=17 January 2026 |work=ch-aviation |language=en-US}}</ref> [[Wuxi Shuofang Airport|Wuxi]]<ref>{{cite web |author1=Derryn Wong |title=China’s Juneyao Air takes over Jetstar Asia’s Singapore-Wuxi route in August |url=https://www.businesstimes.com.sg/international/chinas-juneyao-air-takes-over-jetstar-asias-singapore-wuxi-route-august |website=The Business Times |publisher=SPH Media Limited |language=en |date=21 July 2025}}</ref> <!-- --> | [[KLM]] | [[Amsterdam Airport Schiphol|Amsterdam]],<ref name="KLMcancelled">{{Cite web|date=26 November 2017 |access-date=1 January 2026|title=KLM flights Singapore-Denpasar-Singapore cancelled on 26 November after volcanic eruption in Indonesia|url=https://www.aviation24.be/airlines/air-france-klm-group/klm-royal-dutch-airlines/klm-flights-kl835-kl836-singapore-denpasar-singapore-cancelled-26-november-volcanic-eruption-indonesia/}}</ref> [[Ngurah Rai International Airport|Denpasar]]<ref name="KLMcancelled"/> | [[Korean Air]] | [[Incheon International Airport|Seoul–Incheon]]<ref name="OAG Flight Guide Worldwide-2025a" /> <!-- --> | [[Loong Air]] | [[Hangzhou Xiaoshan International Airport|Hangzhou]],<ref>{{cite web |title=Loong Air to commence Hangzhou-Zhangjiajie-Singapore service in Oct-2025 |url=https://centreforaviation.com/news/loong-air-to-commence-hangzhou-zhangjiajie-singapore-service-in-oct-2025-1330694 |website=CAPA |publisher=Informa Markets |date=4 September 2025 |url-access=subscription}}</ref> [[Wenzhou Longwan International Airport|Wenzhou]],<ref>{{Cite web|date=20 November 2024 |access-date=1 January 2026|title=Non-stop flights between Singapore and Wenzhou begins on Dec 24|website=The Straits Times|url=https://www.straitstimes.com/singapore/non-stop-flights-between-singapore-and-wenzhou-to-start-on-dec-24}}</ref> [[Zhangjiajie Hehua International Airport|Zhangjiajie]]<ref>{{cite web |title=Loong Air to commence Hangzhou-Zhangjiajie-Singapore service in Oct-2025 |url=https://centreforaviation.com/news/loong-air-to-commence-hangzhou-zhangjiajie-singapore-service-in-oct-2025-1330694 |website=CAPA |publisher=Informa Markets |date=4 September 2025 |url-access=subscription}}</ref> <!-- --> | [[Lufthansa]] | [[Frankfurt Airport|Frankfurt]],<ref>{{Cite web|date=28 October 2022|access-date=1 January 2026 |title=Lufthansa brings First Class back to Singapore|website=MainlyMiles|url=https://mainlymiles.com/2022/10/28/lufthansa-brings-first-class-back-to-singapore/}}</ref> [[Munich Airport|Munich]]<ref>{{Cite web|date=19 March 2018|access-date=1 January 2026 |title=Lufthansa launches Singapore to Munich A350 route next week|website=MainlyMiles|url=https://mainlymiles.com/2018/03/19/lufthansa-launch-singapore-to-munich-a350-route-next-week/}}</ref> <!-- --> | [[Malaysia Airlines]] | [[Kuala Lumpur International Airport|Kuala Lumpur–International]]<ref>{{cite web|url=https://www.airpaz.com/en/airlines/MH-Malaysia-Airlines/airport-airport/singapore-changi-airport-sin-kuala-lumpur-international-airport-kul|title=Malaysia Airlines Flight from Singapore Changi Airport to Kuala Lumpur International Airport|website=www.airpaz.com}}</ref> <!-- --> | [[MIAT Mongolian Airlines]] | [[Chinggis Khaan International Airport|Ulaanbaatar]]<ref>{{Cite web|title=Singapore now has non-stop flights to Mongolia|url=https://mainlymiles.com/2025/11/06/singapore-now-has-non-stop-flights-to-mongolia|date=6 November 2025}}</ref> <!-- --> | {{nowrap|[[Myanmar Airways International]]}} | [[Yangon International Airport|Yangon]]<ref>{{Cite web|date=21 January 2025 |access-date=1 January 2026 |title=MAI increases flights to Yangon|website=TTRWeekly|url=https://www.ttrweekly.com/site/2025/01/myanmar-airways-international-increases-flights-from-home-base/}}</ref> <!-- --> | {{nowrap|[[Myanmar National Airlines]]}} | [[Yangon International Airport|Yangon]]<ref>{{Cite web|date=6 July 2015 |access-date=1 January 2026 |title=Myanmar National Airlines faces challenges as bold international expansion begins with Singapore|url=https://centreforaviation.com/analysis/reports/myanmar-national-airlines-faces-challenges-as-bold-international-expansion-begins-with-singapore-233160}}</ref> <!-- --> | [[Oman Air]] | [[Muscat International Airport|Muscat]] (resumes 2 July 2026)<ref>{{cite web |title=Oman Air launches direct flights between Muscat and Singapore starting July 2026|url=https://www.zawya.com/en/economy/gcc/oman-air-launches-direct-flights-between-muscat-and-singapore-starting-july-2026-isvnd1p9|website=www.zawya.com|date=16 December 2025}}</ref> <!-- --> | [[Peach Aviation|Peach]] | [[Kansai International Airport|Osaka–Kansai]]<ref>{{cite news |author1=Sarah Stanley |title=Travel News: Peach Aviation to begin direct Singapore-Osaka flights, one-way fares from $164.20 |url=https://www.straitstimes.com/life/travel/travel-news-peach-aviation-to-begin-direct-singapore-osaka-flights-one-way-fares-from-16420 |work=The Straits Times |publisher=SPH Media Limited |date=29 August 2024 |language=en |archive-date=29 August 2024 |access-date=29 August 2024 |archive-url=https://web.archive.org/web/20240829073134/https://www.straitstimes.com/life/travel/travel-news-peach-aviation-to-begin-direct-singapore-osaka-flights-one-way-fares-from-16420 |url-status=live }}</ref> <!-- --> | [[Pelita Air]] | [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]]<ref>{{cite news |author1=Shikhar Gupta |title=Pelita Air to start flying between Jakarta, Singapore from Aug 18 |url=https://www.businesstimes.com.sg/companies-markets/transport-logistics/pelita-air-start-flying-between-jakarta-singapore-aug-18 |work=The Business Times |publisher=SPH Media Limited |date=31 July 2025 |language=en}}</ref> <!-- --> | [[Philippine Airlines]] | [[Ninoy Aquino International Airport|Manila]]<ref>{{Cite web|date=12 December 2024|access-date=1 January 2026 |title=Airline in Focus:Philippine Airlines|website=Aviation Week|url=https://aviationweek.com/air-transport/airline-focus-philippine-airlines?highlight=Philippine%20Airlines}}</ref> <!-- --> | [[Qantas]] | [[Brisbane Airport|Brisbane]],<ref name="qantas90">{{Cite web|date=17 April 2025 |access-date=1 January 2026 |title=Qantas marks 90 years in Singapore|website=Travel Daily Media|url=https://www.traveldailymedia.com/qantas-marks-90-years-in-singapore/}}</ref> [[Darwin International Airport|Darwin]],<ref name="qantas90"/> [[Heathrow Airport|London–Heathrow]],<ref name="qantas90"/> [[Melbourne Airport|Melbourne]],<ref name="qantas90"/> [[Charles de Gaulle Airport|Paris–Charles de Gaulle]],<ref>{{cite web |title=Qantas Group extends schedule changes across domestic and international network |url=https://centreforaviation.com/news/qantas-group-extends-schedule-changes-across-domestic-and-international-network-1357612 |website=Centre for Aviation |date=4 May 2026 }}</ref> [[Perth Airport|Perth]],<ref name="qantas90"/> [[Sydney Airport|Sydney–Kingsford Smith]]<ref name="qantas90"/> <!-- --> | [[Qatar Airways]] | [[Hamad International Airport|Doha]]<ref>{{Cite web|date=16 November 2025 |access-date=2 January 2026| title=Confirmed:Singapore to get year round Qatar Airways A380 Flights|website=Mainly Miles|url=https://mainlymiles.com/2025/11/16/confirmed-singapore-to-get-year-round-qatar-airways-a380-flights/}}</ref> <!-- --> | [[Royal Brunei Airlines]] | [[Brunei International Airport|Bandar Seri Begawan]]<ref>{{Cite web|title=Royal Brunei Operating Flights|url=https://www.flyroyalbrunei.com/wp-content/uploads/2025/12/17Dec2026-RB-Operating-Flights.pdf}}</ref> <!-- --> | [[Saudia]] | [[Ngurah Rai International Airport|Denpasar]],<ref>{{cite web|url=https://www.airpaz.com/en/airlines/SV-Saudia/airport-airport/singapore-changi-airport-sin-ngurah-rai-international-airport-dps|title=Saudia (Formerly Saudi Arabian Airlines) Flight from Singapore Changi Airport to Ngurah Rai International Airport|website=www.airpaz.com}}</ref> [[King Abdulaziz International Airport|Jeddah]]<ref>{{OAGWorldAug2025Ref|title=Jeddah, Saudi Arabia JED|pages=597-600}}</ref> <!-- --> | [[Scoot]] | [[Sri Guru Ram Dass Jee International Airport|Amritsar]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Athens International Airport|Athens]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Sultan Aji Muhammad Sulaiman Sepinggan Airport|Balikpapan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kertajati International Airport|Bandung–Kertajati]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite news |url=https://www.straitstimes.com/singapore/transport/scoot-to-launch-flights-to-kertajati-in-indonesia-and-melaka-in-malaysia-on-new-embraer-jets |title=Scoot to launch flights to Kertajati in Indonesia |work=straitstimes |date=6 August 2024 |accessdate=6 August 2024 |last1=Loi |first1=Esther |archive-date=7 August 2024 |archive-url=https://web.archive.org/web/20240807102923/https://www.straitstimes.com/singapore/transport/scoot-to-launch-flights-to-kertajati-in-indonesia-and-melaka-in-malaysia-on-new-embraer-jets |url-status=live }}</ref> [[Suvarnabhumi Airport|Bangkok–Suvarnabhumi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Mactan–Cebu International Airport|Cebu]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Changsha Huanghua International Airport|Changsha]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="SIA posts">{{cite news |author1=Ven Sreenivasan |title=SIA posts record $1.44 billion net profit for first half |url=https://www.straitstimes.com/business/sia-posts-record-144-billion-net-profit-for-h1 |work=The Straits Times |publisher=SPH Media Limited |date=7 November 2023 |language=en}}</ref> [[Chennai International Airport|Chennai]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite news|last=Yadav|first=Paras|title=Singapore Airlines to Restructure Bengaluru, Chennai, Hyderabad Flights from Oct 29|url=https://www.news18.com/auto/singapore-airlines-to-restructure-bengaluru-chennai-hyderabad-flights-from-oct-29-8444281.html|work=[[News18]]|date=27 July 2023|access-date=28 July 2023|language=en|archive-date=28 July 2023|archive-url=https://web.archive.org/web/20230728043728/https://www.news18.com/auto/singapore-airlines-to-restructure-bengaluru-chennai-hyderabad-flights-from-oct-29-8444281.html|url-status=live}}</ref> [[Chiang Mai International Airport|Chiang Mai]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Chiang Rai International Airport|Chiang Rai]],<ref name="Hazeeq Sukri-2025">{{cite news |author1=Hazeeq Sukri |title=Scoot launching flights to Okinawa, Tokyo Haneda and Chiang Rai as early as December this year |url=https://cnalifestyle.channelnewsasia.com/travel/scoot-okinawa-haneda-chiang-rai-flights-469631 |work=[[CNA (TV network)|CNA]]|publisher=[[Mediacorp]]|location=[[Singapore]] |language=en |date=12 August 2025}}</ref> [[Clark International Airport|Clark]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Coimbatore International Airport|Coimbatore]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Da Nang International Airport|Da Nang]],<ref name="BNB Diviyadhaarshini-2025">{{cite news |author1=BNB Diviyadhaarshini |title=Scoot launches flights to Da Nang, Kota Bharu and Nha Trang; boosts frequency to other destinations |url=https://www.straitstimes.com/singapore/scoot-launches-flights-to-da-nang-kota-bharu-and-nha-trang-boosts-frequency-to-other-destinations |newspaper=The Straits Times |location=Singapore|publisher=SPH Media Limited |date=3 July 2025 |language=en |archive-date=3 July 2025 |access-date=3 July 2025 |archive-url=https://web.archive.org/web/20250703075217/https://www.straitstimes.com/singapore/scoot-launches-flights-to-da-nang-kota-bharu-and-nha-trang-boosts-frequency-to-other-destinations |url-status=live }}</ref> [[Francisco Bangoy International Airport|Davao]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Ngurah Rai International Airport|Denpasar]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Fuzhou Changle International Airport|Fuzhou]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Guangzhou Baiyun International Airport|Guangzhou]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Haikou Meilan International Airport|Haikou]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Scoot plans more">{{cite news |author1=Chin Hui Shan |title=Scoot plans more flights to China, from 14 a week now to 57 by June |url=https://www.straitstimes.com/singapore/scoot-plans-more-flights-to-china-from-14-a-week-now-to-57-by-june |newspaper=[[The Straits Times]] |publisher=[[SPH Media Trust]]|location=[[Singapore]]|date=22 February 2023 |language=en |access-date=23 February 2023 |archive-date=23 February 2023 |archive-url=https://web.archive.org/web/20230223091208/https://www.straitstimes.com/singapore/scoot-plans-more-flights-to-china-from-14-a-week-now-to-57-by-june |url-status=live }}</ref> [[Hangzhou Xiaoshan International Airport|Hangzhou]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="CNA-2022">{{cite news |title=SIA Group adds Japan, Hong Kong, Taiwan flights to meet "buoyant demand" |url=https://www.channelnewsasia.com/singapore/singapore-airlines-scoot-more-flights-east-asia-japan-taiwan-hong-kong-china-travel-demand-2982736 |work=CNA |location=Singapore |publisher=Mediacorp |date=3 October 2022 |access-date=3 October 2022 |archive-date=3 October 2022 |archive-url=https://web.archive.org/web/20221003155433/https://www.channelnewsasia.com/singapore/singapore-airlines-scoot-more-flights-east-asia-japan-taiwan-hong-kong-china-travel-demand-2982736 |url-status=live }}</ref> [[Noi Bai International Airport|Hanoi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Hat Yai International Airport|Hat Yai]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Tan Son Nhat International Airport|Ho Chi Minh City]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Hong Kong International Airport|Hong Kong]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Iloilo International Airport|Iloilo]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{Cite web |last=Chelvan |first=Vanessa Paige |date=16 January 2025 |title=Scoot launches non-stop flights to Vienna, Iloilo City |url=https://www.straitstimes.com/singapore/transport/scoot-launches-non-stop-flights-to-vienna-and-iloilo-city |access-date=16 January 2025 |website=[[The Straits Times]] |archive-date=16 January 2025 |archive-url=https://web.archive.org/web/20250116064704/https://www.straitstimes.com/singapore/transport/scoot-launches-non-stop-flights-to-vienna-and-iloilo-city |url-status=live }}</ref> [[Sultan Azlan Shah Airport|Ipoh]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[King Abdulaziz International Airport|Jeddah]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Jeju International Airport|Jeju]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite web|last1=Jang-Jin |first1=Hwang |url=https://en.yna.co.kr/view/AEN20220615007100315|title=First direct flight service between Jeju, Singapore opens|work=Yonhap News Agency |date=15 June 2022|accessdate=7 May 2024}}</ref> [[Jieyang Chaoshan International Airport|Jieyang]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Mujibah-2024" /> [[Samui Airport|Koh Samui]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Tay Peck Gek-2024">{{cite web |author1=Tay Peck Gek |title=Scoot adds Koh Samui and Sibu to network with new Embraer planes |url=https://www.businesstimes.com.sg/companies-markets/transport-logistics/scoot-adds-koh-samui-and-sibu-to-network-with-new-embraer-planes |website=The Business Times |publisher=SPH Media Limited |language=en |date=5 March 2024}}</ref> [[Sultan Ismail Petra Airport|Kota Bharu]],<ref name="BNB Diviyadhaarshini-2025" /> [[Kota Kinabalu International Airport|Kota Kinabalu]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Krabi International Airport|Krabi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kuala Lumpur International Airport|Kuala Lumpur–International]],<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Kuala Lumpur|url=https://www.flightsfrom.com/SIN-KUL}}</ref> [[Sultan Abdul Aziz Shah Airport|Kuala Lumpur–Subang]],<ref>{{cite web |title=Scoot to launch Subang flights with A320 aircraft |url=https://www.businesstraveller.com/business-travel/2024/07/18/scoot-to-launch-subang-flights-with-a320-aircraft/ |website=Business Traveller |publisher=Business Traveller Media Limited |date=18 July 2024}}</ref> [[Sultan Haji Ahmad Shah Airport|Kuantan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="CAPA-2022">{{cite web |title=Scoot to resume services to Pekanbaru and Kuantan |url=https://centreforaviation.com/news/scoot-to-resume-services-to-pekanbaru-and-kuantan-1164864 |website=CAPA |date=13 October 2022 |url-access=subscription |access-date=15 October 2022 |archive-date=15 October 2022 |archive-url=https://web.archive.org/web/20221015032525/https://centreforaviation.com/news/scoot-to-resume-services-to-pekanbaru-and-kuantan-1164864 |url-status=live }}</ref> [[Kuching International Airport|Kuching]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kunming Changshui International Airport|Kunming]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="SIA posts" /> [[Komodo International Airport|Labuan Bajo]],<ref name="Sheryln-2025"/> [[Langkawi International Airport|Langkawi]],<ref name="scootmalaysia"/> [[Lombok International Airport|Lombok]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Yogyakarta">{{cite web |author1=Andrew |title=Scoot launching Lombok and Yogyakarta flights |url=https://mainlymiles.com/2022/09/21/scoot-launching-lombok-and-yogyakarta-flights/ |website=Mainly Miles |date=21 September 2022 |access-date=22 September 2022 |archive-date=22 September 2022 |archive-url=https://web.archive.org/web/20220922022929/https://mainlymiles.com/2022/09/21/scoot-launching-lombok-and-yogyakarta-flights/ |url-status=live }}</ref> [[Macau International Airport|Macau]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Sultan Hasanuddin International Airport|Makassar]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="CNA-2022" /> [[Malacca International Airport|Malacca]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite news |url=https://www.straitstimes.com/singapore/transport/scoot-to-launch-flights-to-kertajati-in-indonesia-and-melaka-in-malaysia-on-new-embraer-jets |title=Scoot to launch flights to Melaka in Malaysia on new Embraer jets |work=straitstimes |date=6 August 2024 |accessdate=6 August 2024 |last1=Loi |first1=Esther |archive-date=7 August 2024 |archive-url=https://web.archive.org/web/20240807102923/https://www.straitstimes.com/singapore/transport/scoot-to-launch-flights-to-kertajati-in-indonesia-and-melaka-in-malaysia-on-new-embraer-jets |url-status=live }}</ref> [[Sam Ratulangi International Airport|Manado]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Ninoy Aquino International Airport|Manila]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kualanamu International Airport|Medan]],<ref name="Sheryln-2025">{{Cite web |last=Sheryln |first=Sim |date=15 October 2025 |title=Scoot to fly to Indonesia's Labuan Bajo, Medan, Palembang and Semarang |url=https://www.straitstimes.com/singapore/scoot-to-fly-to-indonesias-labuan-bajo-medan-palembang-and-semarang |access-date=15 October 2025 |website=[[The Straits Times]]}}</ref> [[Melbourne Airport|Melbourne]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Miri Airport|Miri]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Naha Airport|Naha]],<ref name="Hazeeq Sukri-2025" /> [[Nanjing Lukou International Airport|Nanjing]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Nanning Wuxu International Airport|Nanning]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Scoot plans more" /> [[Cam Ranh International Airport|Nha Trang]],<ref name="BNB Diviyadhaarshini-2025" /> [[Kansai International Airport|Osaka–Kansai]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Minangkabau International Airport|Padang]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Mujibah-2024">{{Cite web |last=Mujibah |first=Fatimah |date=11 November 2024 |title=Scoot launches direct flights to Padang, Phu Quoc and Shantou |url=https://www.straitstimes.com/singapore/scoot-launches-direct-flights-to-padang-phu-quoc-and-shantou |url-status=live |archive-url=https://web.archive.org/web/20241111160913/https://www.straitstimes.com/singapore/scoot-launches-direct-flights-to-padang-phu-quoc-and-shantou |archive-date=11 November 2024 |access-date=11 November 2024 |website=[[The Straits Times]] }}</ref> [[Sultan Mahmud Badaruddin II International Airport|Palembang]],<ref name="Sheryln-2025"/> [[Sultan Syarif Kasim II International Airport|Pekanbaru]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="CNA-2022" /><ref name="CAPA-2022" /> [[Perth Airport|Perth]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Penang International Airport|Penang]],<ref name="scootmalaysia">{{Cite web|date=11 August 2025|access-date=2 January 2026|title=Scoot, Tourism Malaysia sign three-year deal to boost regional travel|website=TTGAsia|url=https://www.ttgasia.com/2025/08/11/scoot-tourism-malaysia-sign-three-year-deal-to-boost-regional-travel/}}</ref> [[Phu Quoc International Airport|Phu Quoc]],<ref name="Mujibah-2024" /> [[Phuket International Airport|Phuket]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Supadio International Airport|Pontianak]] (begins 29 June 2026),<ref>{{cite news|url=https://www.straitstimes.com/singapore/scoot-to-fly-to-indonesias-belitung-pontianak-ups-flights-to-other-destinations?ref=latest-headlines|title=Scoot to fly to Indonesia’s Belitung and Pontianak, ups flights to selected destinations|website=[[The Straits Times]]|date=9 April 2026}}</ref> [[Qingdao Jiaodong International Airport|Qingdao]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[New Chitose Airport|Sapporo–Chitose]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Jenderal Ahmad Yani International Airport|Semarang]],<ref name="Sheryln-2025"/> [[Incheon International Airport|Seoul–Incheon]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Shenyang Taoxian International Airport|Shenyang]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Scoot plans more" /> [[Sibu Airport|Sibu]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Tay Peck Gek-2024" /> [[Juanda International Airport|Surabaya]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Sydney Airport|Sydney–Kingsford Smith]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[H.A.S. Hanandjoeddin International Airport|Tanjung Pandan]],<ref>{{cite web|title=Maskapai Scoot akan Buka Rute Penerbangan Singapura-Belitung|url=https://m.jpnn.com/news/maskapai-scoot-akan-buka-rute-penerbangan-singapura-belitung|website=m.jpnn.com|access-date=7 February 2026}}</ref> [[Taoyuan International Airport|Taipei–Taoyuan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Thiruvananthapuram International Airport|Thiruvananthapuram]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Tianjin Binhai International Airport|Tianjin]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Tiruchirappalli International Airport|Tiruchirappalli]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Haneda Airport|Tokyo–Haneda]],<ref name="Hazeeq Sukri-2025" /> [[Narita International Airport|Tokyo–Narita]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Vienna International Airport|Vienna]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite web |author1=Andrew |title=Scoot launching non-stop Singapore – Vienna flights |url=https://mainlymiles.com/2025/01/16/scoot-launching-non-stop-singapore-vienna-flights/ |website=Mainly Miles |date=16 January 2025 |access-date=16 January 2025 |archive-date=16 January 2025 |archive-url=https://web.archive.org/web/20250116044515/https://mainlymiles.com/2025/01/16/scoot-launching-non-stop-singapore-vienna-flights/ |url-status=live }}</ref> [[Wattay International Airport|Vientiane]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Visakhapatnam Airport|Visakhapatnam]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Wuhan Tianhe International Airport|Wuhan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="CNA-2022" /> [[Xi'an Xianyang International Airport|Xi'an]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Scoot plans more" /> [[Yogyakarta International Airport|Yogyakarta–International]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Yogyakarta" /> [[Zhengzhou Xinzheng International Airport|Zhengzhou]]<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="CNA-2022" /> <!-- --> | [[Shandong Airlines]] | [[Jinan Yaoqiang International Airport|Jinan]]<ref>{{cite web |title=Shandong Airlines commences Jinan-Singapore service |url=https://centreforaviation.com/news/shandong-airlines-commences-jinan-singapore-service-1259012 |website=CAPA |publisher=Informa Markets |date=22 April 2024 |url-access=subscription}}</ref> <!-- --> | [[Shanghai Airlines]] | [[Shanghai Pudong International Airport|Shanghai–Pudong]]<ref>{{cite web|title=Direct flights from Singapore to Shanghai|url=https://www.flightconnections.com/flights-from-sin-to-pvg|website=www.flightconnections.com}}</ref> <!-- --> | [[Shenzhen Airlines]] | [[Harbin Taiping International Airport|Harbin]],<ref>{{cite web |title=Shenzhen Airlines commences Harbin-Shenzhen-Singapore service |url=https://centreforaviation.com/news/shenzhen-airlines-commences-harbin-shenzhen-singapore-service-1303712 |website=CAPA |publisher=Informa Markets |date=11 February 2025 |url-access=subscription |access-date=14 February 2025 |archive-date=14 February 2025 |archive-url=https://web.archive.org/web/20250214113416/https://centreforaviation.com/news/shenzhen-airlines-commences-harbin-shenzhen-singapore-service-1303712 |url-status=live }}</ref> [[Shenzhen Bao'an International Airport|Shenzhen]]<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Shenzhen|url=https://www.flightsfrom.com/SIN-SZX}}</ref> <!-- --> | [[Sichuan Airlines]] | [[Chengdu Tianfu International Airport|Chengdu–Tianfu]]<ref>{{cite web |title=Sichuan Airlines launches daily flight from Chengdu Tianfu to Changi on 26 March 2023 |url=https://kucinta-air.blogspot.com/2023/03/sichuan-airlines-launches-daily-flight.html |website=Sayacinta-Airpost |date=4 March 2023 |access-date=5 March 2023 |archive-date=5 March 2023 |archive-url=https://web.archive.org/web/20230305003759/https://kucinta-air.blogspot.com/2023/03/sichuan-airlines-launches-daily-flight.html |url-status=live }}</ref> <!-- --> | [[Singapore Airlines]] | [[Adelaide Airport|Adelaide]],<ref name="OAG_World_Aug2025_SIN_1214_1219">{{OAGWorldAug2025Ref|title=Singapore, Singapore SIN|pages=1214-1219}}</ref> [[Sardar Vallabhbhai Patel International Airport|Ahmedabad]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Amsterdam Airport Schiphol|Amsterdam]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Auckland Airport|Auckland]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Brunei International Airport|Bandar Seri Begawan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Suvarnabhumi Airport|Bangkok–Suvarnabhumi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Josep Tarradellas Barcelona–El Prat Airport|Barcelona]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Beijing Capital International Airport|Beijing–Capital]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Beijing Daxing International Airport|Beijing–Daxing]],<ref>{{cite news |title=SIA launches flights to Beijing Daxing International Airport in November |url=https://www.straitstimes.com/singapore/sia-launches-flights-to-beijing-daxing-international-airport-in-november |website=Straits Times |date=24 June 2024 |access-date=24 June 2024 |last1=Chin |first1=Hui Shan |archive-date=24 June 2024 |archive-url=https://web.archive.org/web/20240624025431/https://www.straitstimes.com/singapore/sia-launches-flights-to-beijing-daxing-international-airport-in-november |url-status=live }}</ref> [[Kempegowda International Airport|Bengaluru]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Brisbane Airport|Brisbane]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Brussels Airport|Brussels]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite press release|title=Singapore Airlines Launching Non-Stop Services To Brussels In April 2024|url=https://www.singaporeair.com/en_UK/us/media-centre/press-release/article/?q=en_UK/2023/July-September/ne0923-230912|work=[[Singapore Airlines]]|date=12 September 2023|access-date=12 September 2023|language=en}}</ref> [[Gimhae International Airport|Busan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Cairns Airport|Cairns]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Cape Town International Airport|Cape Town]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Mactan–Cebu International Airport|Cebu]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Chengdu Tianfu International Airport|Chengdu–Tianfu]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Chongqing">{{cite web |author1=Sarah Koh |title=SIA to suspend flights to Chengdu and Chongqing |url=https://tnp.straitstimes.com/news/singapore/sia-suspend-flights-chengdu-and-chongqing |website=The New Paper |publisher=SPH Media Limited |language=en |date=22 March 2024}}</ref><ref name="Xiamen">{{cite web |author1=Andrew |title=Singapore Airlines returning to Chengdu, Chongqing, Shenzhen and Xiamen |url=https://mainlymiles.com/2023/10/28/singapore-airlines-returning-to-chengdu-chongqing-shenzhen-and-xiamen/ |website=Mainly Miles |date=28 October 2023 |access-date=28 October 2023 |archive-date=28 October 2023 |archive-url=https://web.archive.org/web/20231028154300/https://mainlymiles.com/2023/10/28/singapore-airlines-returning-to-chengdu-chongqing-shenzhen-and-xiamen/ |url-status=live }}</ref> [[Chennai International Airport|Chennai]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Chongqing Jiangbei International Airport|Chongqing]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Chongqing" /><ref>{{cite web |title=Freighter AUG international flight information 17Aug |url=https://www.anacargo.jp/en/news/upload/2022/0817/Freighter%20AUG%20international%20flight%20information_17Aug.pdf |website=ANA Cargo |access-date=17 August 2022 |archive-date=5 November 2022 |archive-url=https://web.archive.org/web/20221105233648/https://www.anacargo.jp/en/news/upload/2022/0817/Freighter%20AUG%20international%20flight%20information_17Aug.pdf |url-status=live }}</ref> [[Christchurch Airport|Christchurch]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Bandaranaike International Airport|Colombo–Bandaranaike]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Copenhagen Airport|Copenhagen]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Da Nang International Airport|Da Nang]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Darwin International Airport|Darwin]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Indira Gandhi International Airport|Delhi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Ngurah Rai International Airport|Denpasar]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Hazrat Shahjalal International Airport|Dhaka]],<ref>{{cite web |title=Singapore Airlines Eyes Double Flights to One of the Most Populated Cities in the World|url=https://aviationa2z.com/index.php/2026/04/11/singapore-airlines-eyes-double-flights-to-dhaka/|website=aviationa2z.com|date=11 April 2026}}</ref> [[Dubai International Airport|Dubai–International]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Frankfurt Airport|Frankfurt]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Fukuoka Airport|Fukuoka]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Guangzhou Baiyun International Airport|Guangzhou]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Hangzhou Xiaoshan International Airport|Hangzhou]],<ref>{{cite web |title=Singapore Airlines To Launch Services To Hangzhou In June 2026 |url=https://www.singaporeair.com/en_UK/sg/corporate/newsroom/press-release/2026/january---march-2026/Sia_Hangzhou_June2026/ |website=Singapore Airlines |date=23 March 2026}}</ref> [[Noi Bai International Airport|Hanoi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Tan Son Nhat International Airport|Ho Chi Minh City]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Hong Kong International Airport|Hong Kong]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Rajiv Gandhi International Airport|Hyderabad]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Istanbul Airport|Istanbul]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite web|url=https://mainlymiles.com/2025/04/13/singapore-airlines-restores-full-9x-daily-schedule-to-jakarta/|title=Singapore Airlines restores full 9x daily schedule to Jakarta|work=mainlymiles|date=13 April 2025|accessdate=13 April 2025|archive-date=13 April 2025|archive-url=https://web.archive.org/web/20250413123430/https://mainlymiles.com/2025/04/13/singapore-airlines-restores-full-9x-daily-schedule-to-jakarta/|url-status=live}}</ref> [[O. R. Tambo International Airport|Johannesburg–O. R. Tambo]],<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Johannesburg|url=https://www.flightsfrom.com/SIN-JNB}}</ref> [[Tribhuvan International Airport|Kathmandu]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Cochin International Airport|Kochi]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Netaji Subhas Chandra Bose International Airport|Kolkata]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kuala Lumpur International Airport|Kuala Lumpur–International]],<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Kuala Lumpur|url=https://www.flightsfrom.com/SIN-KUL}}</ref> [[Gatwick Airport|London–Gatwick]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite web |title=Singapore Airlines to launch London Gatwick service |url=https://www.businesstraveller.com/business-travel/2023/12/18/singapore-airlines-will-launch-london-gatwick-service/ |website=Business Traveller |date=18 December 2023 |access-date=18 December 2023 |archive-date=18 December 2023 |archive-url=https://web.archive.org/web/20231218123126/https://www.businesstraveller.com/business-travel/2023/12/18/singapore-airlines-will-launch-london-gatwick-service/ |url-status=live }}</ref> [[Heathrow Airport|London–Heathrow]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Los Angeles International Airport|Los Angeles]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Madrid–Barajas Airport|Madrid]] (resumes 26 October 2026),<ref>{{cite news |author1=Alfred Chua |title=Singapore Airlines launches Madrid flights as part of Europe ramp-up |url=https://www.flightglobal.com/archive/2026/05/singapore-airlines-launches-madrid-flights-as-part-of-europe-ramp-up/ |access-date=8 May 2026 |work=FlightGlobal |publisher=ProMedia Group UK Ltd |date=8 May 2026}}</ref> [[Velana International Airport|Malé]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Manchester Airport|Manchester]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Ninoy Aquino International Airport|Manila]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kualanamu International Airport|Medan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Melbourne Airport|Melbourne]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Milan Malpensa Airport|Milan–Malpensa]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Chhatrapati Shivaji Maharaj International Airport|Mumbai–Shivaji]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Munich Airport|Munich]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Chubu Centrair International Airport|Nagoya–Centrair]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[John F. Kennedy International Airport|New York–JFK]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Newark Liberty International Airport|Newark]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Kansai International Airport|Osaka–Kansai]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Charles de Gaulle Airport|Paris–Charles de Gaulle]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Penang International Airport|Penang]],<ref>{{Cite web|date=2 March 2025|access-date=2 January 2026|title=Where is Singapore Airlines flying its Boeing 737-800s? (Nowhere,soon)|website=Mainly Miles|url=https://mainlymiles.com/2025/03/02/where-is-singapore-airlines-flying-its-737-800s/}}</ref> [[Perth Airport|Perth]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Techo International Airport|Phnom Penh]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite web |title=Relocation of Phnom Penh airport operations |url=https://www.singaporeair.com/en_UK/sg/corporate/newsroom/newsalert-listing/relocation-of-phnom-penh-airport-operations/ |website=Singapore Airlines}}</ref> [[Phuket International Airport|Phuket]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[King Khalid International Airport |Riyadh]] (resumes 1 September 2026),<ref>{{Cite web|date=3 April 2026|access-date=4 June 2026|title=Singapore Airlines pushes back Riyadh restart to September 2026|website=mainlymiles.com|url=https://mainlymiles.com/2026/04/03/singapore-airlines-pushes-back-riyadh-restart-to-september-2026/}}</ref> [[Rome Fiumicino Airport|Rome–Fiumicino]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[San Francisco International Airport|San Francisco]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Seattle–Tacoma International Airport|Seattle/Tacoma]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Incheon International Airport|Seoul–Incheon]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Shanghai Pudong International Airport|Shanghai–Pudong]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Shenzhen Bao'an International Airport|Shenzhen]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Xiamen" /> [[Siem Reap–Angkor International Airport|Siem Reap]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref>{{cite web |title=Relocation of Siem Reap airport operations |url=https://www.singaporeair.com/en_UK/us/media-centre/news-alert/?id=lmydxjd0 |website=Singapore Airlines |date=25 September 2023 |access-date=25 September 2023 |archive-date=29 September 2023 |archive-url=https://web.archive.org/web/20230929025457/https://www.singaporeair.com/en_UK/sg/media-centre/news-alert/?id=lmydxjd0 |url-status=live }}</ref> [[Juanda International Airport|Surabaya]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Sydney Airport|Sydney–Kingsford Smith]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Western Sydney International Airport|Sydney–Western]] (begins 23 November 2026),<ref>{{cite news |author1=Shikhar Gupta |title=SIA to launch flights from new, curfew-free Western Sydney airport on Nov 23 |url=https://www.businesstimes.com.sg/companies-markets/transport-logistics/sia-launch-flights-new-curfew-free-western-sydney-airport-nov-23 |work=The Business Times |publisher=SPH Media Limited |date=24 March 2026 |language=en}}</ref> [[Taoyuan International Airport|Taipei–Taoyuan]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Haneda Airport|Tokyo–Haneda]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Narita International Airport|Tokyo–Narita]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Xiamen Gaoqi International Airport|Xiamen]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/><ref name="Xiamen" /> [[Yangon International Airport|Yangon]],<ref name="OAG_World_Aug2025_SIN_1214_1219"/> [[Zurich Airport|Zurich]]<ref name="OAG_World_Aug2025_SIN_1214_1219"/> <br />'''Seasonal:''' [[New Chitose Airport|Sapporo–Chitose]]<ref>{{Cite web |last=Andrew |date=2025-12-12 |title=Singapore Airlines hikes Sapporo flights for 2026/27 ski season |url=https://mainlymiles.com/2025/12/12/singapore-airlines-hikes-sapporo-flights-for-2026-27-ski-season/ |access-date=2026-05-06 |website=Mainly Miles |language=en-US}}</ref> <!-- --> | [[Spring Airlines]] | [[Guangzhou Baiyun International Airport|Guangzhou]],<ref>{{cite web|title=Spring Airlines Resumes Singapore Service Connecting Guangzhou Travelers To Beaches, Culture And Wildlife: What You Need To Know|url=https://www.travelandtourworld.com/news/article/spring-airlines-resumes-singapore-service-connecting-guangzhou-travelers-to-beaches-culture-and-wildlife/|website=Travel and Tour World|access-date=March 6, 2026}}</ref> [[Shanghai Pudong International Airport|Shanghai–Pudong]]<ref>{{cite web|url=https://www.airpaz.com/en/airlines/9C-Spring-Airlines/airport-airport/singapore-changi-airport-sin-shanghai-pudong-international-airport-pvg|title=Spring Airlines Flight from Singapore Changi Airport to Shanghai Pudong International Airport|website=www.airpaz.com}}</ref> <!-- --> | [[SriLankan Airlines]] | [[Bandaranaike International Airport|Colombo–Bandaranaike]]<ref>{{cite web|title=Direct (non-stop) flights from Singapore to Colombo|url=https://www.flightsfrom.com/SIN-CMB}}</ref> <!-- --> | [[Starlux Airlines]] | [[Taoyuan International Airport|Taipei–Taoyuan]]<ref name="OAG Flight Guide Worldwide-2025b" /> <!-- --> | [[Sun PhuQuoc Airways]] | [[Phu Quoc International Airport|Phu Quoc]] (begins 25 July 2026)<ref>{{cite web |title=Sun PhuQuoc Airways to commence Phu Quoc-Singapore service in Jul-2026 |url=https://centreforaviation.com/news/sun-phuquoc-airways-to-commence-phu-quoc-singapore-service-in-jul-2026-1360148 |website=CAPA |publisher=Informa Markets |date=22 May 2026 |url-access=subscription}}</ref> <!-- --> | [[Swiss International Air Lines]] | [[Zurich Airport|Zurich]]<ref>{{cite web |title=SWISS starts its new non-stop Zurich-Singapore service |url=https://www.swiss.com/corporate/en/media/press-releases-archive/press-release-20130513 |website=www.swiss.com |language=en |date=13 May 2013}}</ref> <!-- --> | [[T'way Air]] | [[Jeju International Airport|Jeju]],<ref>{{cite web|title=It will be easier to travel from Jeju to Singapore in the future. T'way Airlines will launch new direct flights between Jeju and Singapore from August 15.|date=5 June 2025 |url=https://www.mk.co.kr/en/culture/11334842}}</ref> [[Incheon International Airport|Seoul–Incheon]]<ref>{{cite web|url=https://www.airpaz.com/en/airlines/TW-T-way-Air/airport-airport/singapore-changi-airport-sin-incheon-international-airport-icn|title=T'way Air Flight from Singapore Changi Airport to Incheon International Airport|website=www.airpaz.com}}</ref> <!-- --> | [[Thai AirAsia]] | [[Don Mueang International Airport|Bangkok–Don Mueang]]<ref name="OAG Flight Guide Worldwide-2025c">{{OAGWorldAug2025Ref|title=Bangkok, Thailand BKK|pages=109-113}}</ref> <!-- --> | {{nowrap|[[Thai Airways International]]}} | [[Suvarnabhumi Airport|Bangkok–Suvarnabhumi]]<ref name="OAG Flight Guide Worldwide-2025c"/> <!-- --> | [[Thai Lion Air]] | [[Don Mueang International Airport|Bangkok–Don Mueang]],<ref name="OAG Flight Guide Worldwide-2025c"/> [[Phuket International Airport|Phuket]]<ref>{{cite web |title=Thai Lion Air to commence Phuket-Singapore service in Jan-2026 |url=https://centreforaviation.com/news/thai-lion-air-to-commence-phuket-singapore-service-in-jan-2026-1343308 |website=CAPA |publisher=Informa Markets |date=23 December 2025 |url-access=subscription}}</ref> <!-- --> | [[Tianjin Airlines]] | [[Guiyang Longdongbao International Airport|Guiyang]]<ref>{{cite web |title=Tianjin Airlines commences Guiyang-Singapore service |url=https://centreforaviation.com/news/tianjin-airlines-commences-guiyang-singapore-service-1291505 |website=CAPA |publisher=Informa Markets |date=18 November 2024 |url-access=subscription}}</ref> <!-- --> | [[TransNusa]] | [[Ngurah Rai International Airport|Denpasar]],<ref>{{cite web |title=TransNusa to Launch Bali - Singapore Scheduled Flight on November 17|url=https://en.antaranews.com/news/386621/transnusa-to-launch-bali-singapore-scheduled-flight-on-november-17|website=[[Antara (news agency)|Antara]]|date=17 October 2025 |access-date=18 October 2025}}</ref> [[Soekarno–Hatta International Airport|Jakarta–Soekarno-Hatta]]<ref>{{cite web |title=TransNusa Air Services to commence Jakarta services to Guangzhou and Singapore |url=https://centreforaviation.com/news/transnusa-air-services-to-commence-jakarta-services-to-guangzhou-and-singapore-1228664 |website=CAPA |publisher=Informa Markets |date=13 October 2023 |url-access=subscription |access-date=13 October 2023 |archive-date=13 November 2024 |archive-url=https://web.archive.org/web/20241113022310/https://centreforaviation.com/news/transnusa-air-services-to-commence-jakarta-services-to-guangzhou-and-singapore-1228664 |url-status=live }}</ref> <!-- --> | [[Turkish Airlines]] | [[Istanbul Airport|Istanbul]],<ref name="turkishairlineslaunch">{{Cite web|date=19 January 2024|access-date=2 January 2026|title=Turkish Airlines launching Melbourne-Singapore flights from March 2024|website=Mainly Miles|url=https://mainlymiles.com/2024/01/19/turkish-airlines-launching-singapore-melbourne-flights-from-march-2024/}}</ref> [[Melbourne Airport|Melbourne]]<ref name="turkishairlineslaunch"/> <!-- --> | [[United Airlines]] | [[San Francisco International Airport|San Francisco]]<ref>{{Cite web|access-date=1 January 2026|title=Five injured as United Airlines Boeing 787 hits turbulence over the Philippines|website=AeroTime|url=https://www.aerotime.aero/articles/united-airlines-turbulence-philippines-five-injured}}</ref> <!-- --> | [[US-Bangla Airlines]] | [[Hazrat Shahjalal International Airport|Dhaka]]<ref>{{Cite web|date=23 July 2023|access-date=1 January 2026|title=US-Bangla Airlines celebrates ninth anniversary|website=Dhaka Tribune|url=https://www.dhakatribune.com/bangladesh/319263/us-bangla-airlines-celebrates-ninth-anniversary}}</ref> <!-- --> | [[VietJet Air]] | [[Da Nang International Airport|Da Nang]],<ref>{{OAGWorldAug2025Ref|title=Da Nang, Viet Nam DAD|pages=356-356}}</ref><ref>{{cite web |title=VietJet Air to operate Da Nang-Singapore service from 16-Jun-2022 |url=https://centreforaviation.com/news/vietjet-air-to-operate-da-nang-singapore-service-from-16-jun-2022-1128076 |website=CAPA |date=30 March 2022 |access-date=5 April 2022 |archive-date=4 May 2022 |archive-url=https://web.archive.org/web/20220504101515/https://centreforaviation.com/news/vietjet-air-to-operate-da-nang-singapore-service-from-16-jun-2022-1128076 |url-status=live }}</ref> [[Noi Bai International Airport|Hanoi]],<ref name="OAG Flight Guide Worldwide-2025d">{{OAGWorldAug2025Ref|title=Hanoi, Viet Nam HAN|pages=522-524}}</ref><ref name="Vietjet Air-2022">{{cite web |title=Return to Thailand, Singapore and Malaysia shopping paradises with VND0 air tickets |url=https://www.vietjetair.com/en/news/news-1600227436778/return-to-thailand-singapore-and-malaysia-shopping-paradises-with-vnd0-air-tickets-1649142346951 |website=Vietjet Air |date=5 April 2022 |access-date=5 April 2022 |archive-date=12 April 2022 |archive-url=https://web.archive.org/web/20220412150945/https://www.vietjetair.com/en/news/news-1600227436778/return-to-thailand-singapore-and-malaysia-shopping-paradises-with-vnd0-air-tickets-1649142346951 |url-status=live }}</ref> [[Tan Son Nhat International Airport|Ho Chi Minh City]],<ref name="OAG Flight Guide Worldwide-2025e">{{OAGWorldAug2025Ref|title=Ho Chi Minh City, Viet Nam SGN|pages=538-541}}</ref><ref name="Vietjet Air-2022" /> [[Cam Ranh International Airport|Nha Trang]] (begins 11 December 2026),<ref>{{cite web |title= Vietjet to launch direct flights between Singapore and Nha Trang in Vietnam |url= https://www.straitstimes.com/singapore/vietjet-to-launch-direct-flights-between-singapore-and-nha-trang-in-vietnam | website=The Straits Times |publisher=SPH Media Limited |language=en |date=2 June 2026}}</ref> [[Phu Quoc International Airport|Phu Quoc]]<ref>{{cite web |last1=Sheo |first1=Chiong Teng |title=Vietjet to launch direct flights between S'pore and Phu Quoc in Vietnam from May 30 |url=https://www.straitstimes.com/singapore/vietjet-to-launch-direct-flights-between-spore-and-phu-quoc-in-vietnam-from-may-30 |website=The Straits Times |publisher=SPH Media Limited |language=en |date=11 March 2025 |access-date=11 March 2025 |archive-date=15 March 2025 |archive-url=https://web.archive.org/web/20250315034558/https://www.straitstimes.com/singapore/vietjet-to-launch-direct-flights-between-spore-and-phu-quoc-in-vietnam-from-may-30 |url-status=live }}</ref> <!-- --> | [[Vietnam Airlines]] | [[Noi Bai International Airport|Hanoi]],<ref name="OAG Flight Guide Worldwide-2025d" /> [[Tan Son Nhat International Airport|Ho Chi Minh City]]<ref name="OAG Flight Guide Worldwide-2025e" /> <!-- --> | [[West Air (China)|West Air]] | [[Chongqing Jiangbei International Airport|Chongqing]],<ref name="Yashita Vashishth-2024">{{cite web |author1=Yashita Vashishth |title=China's West Air Expands Network With New Lhasa-Chongqing-Singapore Route |url=https://www.travelandleisureasia.com/sg/news/singapore-china-flights-west-air-launches-new-route-starting-christmas/ |website=Travel and Leisure Asia |publisher=Burdaluxury |language=en |date=19 December 2024}}</ref> [[Lhasa Gonggar International Airport|Lhasa]]<ref name="Yashita Vashishth-2024"/> <!-- --> | [[XiamenAir]] | [[Fuzhou Changle International Airport|Fuzhou]],<ref>https://www.instagram.com/p/DPiG9SjkdfB/</ref> [[Hangzhou Xiaoshan International Airport|Hangzhou]],<ref>https://www.instagram.com/p/DPiG9SjkdfB/</ref> [[Quanzhou Jinjiang International Airport|Quanzhou]],<ref>{{cite web|url=https://www.airpaz.com/en/airlines/MF-Xiamen-Airlines/airport-airport/singapore-changi-airport-sin-quanzhou-jinjiang-international-airport-jjn|title=Xiamen Air Flight from Singapore Changi Airport to Quanzhou Jinjiang International Airport|website=www.airpaz.com}}</ref> [[Xiamen Gaoqi International Airport|Xiamen]]<ref>https://www.instagram.com/p/DPiG9SjkdfB/</ref> <!-- --> | [[Zipair Tokyo]] | [[Narita International Airport|Tokyo–Narita]]<ref>{{cite web |author1=Mark Caswell |title=Zipair to launch Tokyo Narita-Singapore route |url=https://www.businesstraveller.com/business-travel/zipair-to-launch-tokyo-narita-singapore-route/ |website=Business Traveller |publisher=Business Traveller Media Limited |date=30 July 2021}}</ref> }} ==Transport links== [[File:Changi Airport MRT Station entrance (230815).jpg|thumb|Entrance to [[Changi Airport MRT station]] from Terminal 3]] [[File:(SGP-Singapore) Go-Ahead Singapore SMB3073E 34 2024-05-04.jpg|thumb|A public bus at the Terminal 2 basement bus bay]] Terminals 1, 2 and 3 of the airport are linked by the free [[Changi Airport Skytrain|Skytrain]] service, operating daily from 05:00 to 02:00. During non-operational hours, travellers within the transit areas may transfer between terminals on foot via inter-terminal travelators, while those in the public areas can use the Mezzanine Level link bridges between T2 and T3, and the link bridge to travel on foot between T1 and T2/T3. Terminal 4 is accessible by a complimentary shuttle bus services at both public and transit areas. The shuttle bus journey between terminals at the public area takes about 10 minutes and the shuttle bus journey between terminals at the transit area takes between 10 and 18 minutes.<ref>{{Cite web |title=Transferring Between Terminals and Jewe |url=https://www.changiairport.com/en/at-changi/transport-and-directions/transferring-between-terminals-jewel.html |access-date=3 March 2026 |website=[[Changi Airport Group]]}}</ref> The airport is served by the [[Mass Rapid Transit (Singapore)|Mass Rapid Transit]] (MRT) via a branch of the [[East West MRT line]] (EWL) from [[Tanah Merah MRT station]] with stops at [[Expo MRT station|Expo]] and [[Changi Airport MRT station|Changi Airport]], which lies underground between Terminals 2 and 3. Under the [[Land Transport Authority]]'s (LTA) Masterplan, the [[Thomson-East Coast MRT line]] (TEL) will be extended to serve both [[Changi Terminal 5 MRT station|Terminal 5]] and the existing Changi Airport station, with the EWL branch set to be integrated into the TEL.<ref>{{Cite press release|title=Land Transport Master Plan: Bringing Singapore Together|url=https://www.lta.gov.sg/content/ltagov/en/newsroom/2021/5/2/land-transport-master-plan-2040-bringing-singapore-together.html|access-date=7 July 2021|publisher=Land Transport Authority (Singapore)}}{{dead link|date=August 2023|bot=medic}}{{cbignore|bot=medic}}</ref> On 25 July 2025, LTA announced a new Cross Island Line (CRL) interchange station CR1 Changi Terminal 5, which will directly connect the upcoming Changi Airport Terminal 5 to the city centre and other major hubs via the Thomson-East Coast Line extension (TELe) and the CRL.<ref>{{Cite web |date=25 July 2025 |title=Thomson-East Coast Line Extension and Cross Island Line: Connecting Changi Airport Directly to the City Centre and Major Hubs |url=https://www.lta.gov.sg/content/ltagov/en/newsroom/2025/7/news-releases/TELe_and_CRL_changi_airport_to_city_centre.html |access-date=3 March 2026 |website=[[Land Transport Authority]]}}</ref> Eight public bus services operated by [[SBS Transit]], [[SMRT Buses]], [[Tower Transit Singapore]] and [[Go-Ahead Singapore]] serve the airport in a loop through Terminals 1, 2 and 3, with Services 24, 34, 36, 44 (only during peak hours)<ref>{{Cite web |title=New bus service 44 direct from Punggol to Changi Airport during peak hours |url=https://mothership.sg/2025/11/direct-airport-bus-44-punggol-sun-xueling/ |access-date=2 March 2026 |website=mothership.sg}}</ref> and 110 continuing to Terminal 4. Bus stops are found at the basement bus bays of the main terminals, while Terminal 4's stop is located beside Car Park 4B. Taxis can be hired at designated stands in the arrival halls, with an airport surcharge applicable for all journeys originating there.<ref>{{cite web |title=Leaving the Airport {{!}} Taxi {{!}} Singapore Changi Airport |url=https://www.changiairport.com/en/airport-guide/transport/leaving-the-airport.html#anchorTaxi |website=Changi Airport |language=en |access-date=6 January 2021 |archive-date=9 January 2021 |archive-url=https://web.archive.org/web/20210109131458/https://www.changiairport.com/en/airport-guide/transport/leaving-the-airport.html#anchorTaxi |url-status=live }}</ref> Limousines and other transport options are available through the Ground Transport Concierge.<ref>{{cite web |title=Ground Transport Concierge {{!}} Singapore Changi Airport |url=https://www.changiairport.com/en/airport-guide/facilities-and-services/ground-transport-concierge.html |website=Changi Airport |language=en |access-date=6 January 2021 |archive-date=16 January 2021 |archive-url=https://web.archive.org/web/20210116002005/https://www.changiairport.com/en/airport-guide/facilities-and-services/ground-transport-concierge.html |url-status=live }}</ref> Private pick-ups occur at the terminals' arrival areas, and car rental counters are found in each arrival hall.<ref>{{cite web |title=Leaving the Airport {{!}} Car {{!}} Singapore Changi Airport |url=https://www.changiairport.com/en/airport-guide/transport/leaving-the-airport.html#anchorCar |website=Changi Airport |language=en |access-date=6 January 2021 |archive-date=9 January 2021 |archive-url=https://web.archive.org/web/20210109131458/https://www.changiairport.com/en/airport-guide/transport/leaving-the-airport.html#anchorCar |url-status=live }}</ref><ref>{{cite web |title=Pick-up Points {{!}} Singapore Changi Airport |url=https://www.changiairport.com/en/airport-guide/facilities-and-services/pick-up-points.html |website=Changi Airport |language=en |access-date=11 October 2020 |archive-date=1 October 2020 |archive-url=https://web.archive.org/web/20201001160420/https://www.changiairport.com/en/airport-guide/facilities-and-services/pick-up-points.html |url-status=live }}</ref><ref>{{cite web |title=Car Rental {{!}} Singapore Changi Airport |url=https://www.changiairport.com/en/airport-guide/facilities-and-services/car-rental.html |website=Changi Airport |language=en |access-date=6 January 2021 |archive-date=11 January 2021 |archive-url=https://web.archive.org/web/20210111094955/https://www.changiairport.com/en/airport-guide/facilities-and-services/car-rental.html |url-status=live }}</ref> The {{Convert|3.5|km|abbr=off}} long Changi Airport Connector, launched in October 2020, links the airport to [[East Coast Park]] and features the {{Convert|1|km|abbr=off}} Changi Jurassic Mile trail with life-sized dinosaur sculptures.<ref>{{cite news |last1=Lim |first1=Ming Zhang |title=New cycling track from East Coast Park to Changi Airport opens, with life-sized dinosaur models along the way |url=https://www.straitstimes.com/singapore/new-cycling-track-from-east-coast-park-to-changi-airport-opens-with-life-sized-dinosaur |newspaper=The Straits Times |language=en |date=11 October 2020 |access-date=11 October 2020 |archive-date=12 October 2020 |archive-url=https://web.archive.org/web/20201012024529/http://www.straitstimes.com/singapore/new-cycling-track-from-east-coast-park-to-changi-airport-opens-with-life-sized-dinosaur |url-status=live }}</ref><ref>{{cite news |last1=Phua |first1=Rachel |title=New 3.5km path linking Changi Airport and East Coast Park opens, featuring dinosaur exhibits |url=https://www.channelnewsasia.com/news/singapore/changi-jurassic-mile-airport-dinosaur-east-coast-park-connector-13253830 |work=CNA |publisher=Mediacorp |language=en |date=11 October 2020 |access-date=11 October 2020 |archive-date=14 October 2020 |archive-url=https://web.archive.org/web/20201014010737/https://www.channelnewsasia.com/news/singapore/changi-jurassic-mile-airport-dinosaur-east-coast-park-connector-13253830 |url-status=live }}</ref> The [[Tanah Merah Ferry Terminal]] is connected to the airport by shuttle buses.<ref>{{cite news|access-date=22 June 2025|title=Air-sea transfers via Changi Airport would be a win for tourists, regulars at Tanah Merah Ferry Terminal|url=https://www.straitstimes.com/singapore/transport/air-sea-transfers-between-changi-airport-would-be-a-win-for-tourists-and-regulars-at-tanah-merah|newspaper=The Straits Times|date=22 June 2025|location=Singapore|issn=0585-3923}}</ref> A direct link to Terminal 5 is currently being studied.<ref>{{cite news|access-date=22 June 2025|title=PM Wong breaks ground on Changi Airport T5; all SIA, Scoot flights to move there when it opens|url=https://www.straitstimes.com/singapore/transport/pm-wong-breaks-ground-on-changi-airport-t5-all-sia-scoot-flights-will-move-there-when-it-opens|newspaper=The Straits Times|date=14 May 2025|location=Singapore|issn=0585-3923|archive-date=16 May 2025|archive-url=https://web.archive.org/web/20250516201420/https://www.straitstimes.com/singapore/transport/pm-wong-breaks-ground-on-changi-airport-t5-all-sia-scoot-flights-will-move-there-when-it-opens|url-status=live}}</ref> {{clear}} ==Awards== As one of the world's busiest airports for international passenger and cargo traffic, the airport has earned widespread acclaim for its service standards and facilities. It has been named the "World's Best Airport" by [[Skytrax]] thirteen times, including an unprecedented eight consecutive wins from 2013 to 2020. The airport is also consistently recognised for cleanliness, efficiency and seamless transit experience, having ranked highly in categories such as cleanest airport, best transit airport, best airport staff and immigration services. In 2024, Changi placed second globally in all three of the latter categories.<ref>{{cite web|url=https://www.worldairportawards.com/the-worlds-best-airports-in-2020-are-announced/|title=World's Top 10 Airports 2020|date=11 May 2020|publisher=Skytrax|access-date=11 May 2020|archive-date=22 May 2020|archive-url=https://web.archive.org/web/20200522035337/https://www.worldairportawards.com/the-worlds-best-airports-in-2020-are-announced/|url-status=live}}</ref><ref>{{Cite web |title=The World's Cleanest Airports 2024 |url=https://www.worldairportawards.com/worlds-cleanest-airports-2024/#:~:text=Tokyo's%20Haneda%20Airport%20continues%20its%20success%20being%20named%20the%20World's%20Cleanest%20Airport |access-date=28 January 2025 |website=SKYTRAX |language=en |archive-date=24 February 2025 |archive-url=https://web.archive.org/web/20250224104024/https://www.worldairportawards.com/worlds-cleanest-airports-2024/#:~:text=Tokyo's%20Haneda%20Airport%20continues%20its%20success%20being%20named%20the%20World's%20Cleanest%20Airport |url-status=live }}</ref> In 2025, Changi once again topped the Skytrax global rankings, adding a thirteenth title to its previous wins in 2000, 2006, 2010, 2013 to 2020 and 2023.<ref>{{Cite web |title=Changi Airport Group "Awards" |url=https://www.changiairport.com/en/corporate/about-us/accolades.html |access-date=14 May 2025 |archive-date=14 May 2025 |archive-url=https://web.archive.org/web/20250514094651/https://www.changiairport.com/en/corporate/about-us/accolades.html |url-status=live }}</ref> Its reputation extends beyond the terminals, with the on-site [[Crowne Plaza]] voted the world's best airport hotel ten times, covering the years 2015 to 2020 and 2022 to 2025.<ref>{{Cite web |title=The World's Best Airport Hotels 2025 |url=https://www.worldairportawards.com/worlds-best-airport-hotels-2025/ |access-date=14 May 2025 |website=SKYTRAX |language=en |archive-date=14 May 2025 |archive-url=https://web.archive.org/web/20250514142439/https://www.worldairportawards.com/worlds-best-airport-hotels-2025/ |url-status=live }}</ref> == Operational statistics == {|class="wikitable" style="text-align:center;" ! colspan="8" style="background:lightgrey; colour:black; line-height:180%;" | Operational statistics (1980–1989) |- | style="text-align:center;" colspan="8"| |- style="background:lightgrey;" !Year !Passenger<br />movements !Passenger %<br />change over<br />previous year !Airfreight<br />movements<br />(tonnes) !Airfreight %<br />change over<br />previous year !Aircraft<br />movements !Aircraft %<br />change over<br />previous year !Notes |- | 1980 || 7,294,549 || {{nochange}} 0.0 || {{n/a}} || {{n/a}} || 75,971 || {{nochange}} 0.0 || |- | 1981 || 8,152,158 || {{increase}} 11.7% || {{n/a}} || {{n/a}} || 71,365 || {{decrease}} 6.1% || |- | 1982 || 8,611,812 || {{increase}} 5.6% || {{n/a}} || {{n/a}} || 68,159 || {{decrease}} 4.5% || |- | 1983 || 8,679,152 || {{increase}} 0.8% || {{n/a}} || {{n/a}} || 67,594 || {{decrease}} 0.8% || |- | 1984 || 9,465,651 || {{increase}} 9.1% || {{n/a}} || {{n/a}} || 70,674 || {{increase}} 4.5% || |- | 1985 || 9,856,830 || {{increase}} 4.1% || {{n/a}} || {{n/a}} || 73,223 || {{increase}} 3.6% || |- | 1986 || 10,067,719 || {{increase}} 2.1% || 352,806 || {{nochange}} 0.0 || 73,022 || {{decrease}} 0.3% || |- | 1987 || 11,203,793 || {{increase}} 11.3% || 419,099 || {{increase}} 18.8% || 76,276 || {{increase}} 4.5% || |- | 1988 || 12,595,286 || {{increase}} 12.4% || 512,509 || {{increase}} 22.3% || 82,930 || {{increase}} 8.7% || |- | 1989 || 14,136,367 || {{increase}} 12.3% || 577,610 || {{increase}} 12.7% || 87,421 || {{increase}} 5.4% || |- !colspan="11" |Sources:<ref>{{cite web|title=1980–1989 Singapore Changi Airport Passenger Movements|url=https://data.gov.sg/dataset/civil-aircraft-arrivals-departures-passengers-and-mail-changi-airport-monthly|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=22 June 2020|archive-url=https://web.archive.org/web/20200622090650/https://data.gov.sg/dataset/civil-aircraft-arrivals-departures-passengers-and-mail-changi-airport-monthly|url-status=live}}</ref><ref name="Department of Statistics, Singapore-2">{{cite web|title=1986–1989 Singapore Changi Airport Airfreight movements 1|url=https://data.gov.sg/dataset/air-cargo-discharged-by-region-country-of-origin-monthly|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=22 June 2020|archive-url=https://web.archive.org/web/20200622022421/https://data.gov.sg/dataset/air-cargo-discharged-by-region-country-of-origin-monthly|url-status=live}}</ref><ref name="Department of Statistics, Singapore">{{cite web|title=1986–1989 Singapore Changi Airport Airfreight movements 2|url=https://data.gov.sg/dataset/air-cargo-loaded-total-by-region-and-selected-country-of-destination?view_id=6b5563a0-dd96-42c3-9d57-d0c7d30780d9&resource_id=2a8dd954-d260-4018-9d6b-503bedf1f019|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=21 June 2020|archive-url=https://web.archive.org/web/20200621132014/https://data.gov.sg/dataset/air-cargo-loaded-total-by-region-and-selected-country-of-destination?view_id=6b5563a0-dd96-42c3-9d57-d0c7d30780d9&resource_id=2a8dd954-d260-4018-9d6b-503bedf1f019|url-status=live}}</ref> |} {|class="wikitable" style="text-align:center;" ! colspan="8" style="background:lightgrey; colour:black; line-height:180%;" | Operational statistics (1990–1999) |- | style="text-align:center;" colspan="8"| |- style="background:lightgrey;" !Year !Passenger<br />movements !Passenger %<br />change over<br />previous year !Airfreight<br />movements<br />(tonnes) !Airfreight %<br />change over<br />previous year !Aircraft<br />movements !Aircraft %<br />change over<br />previous year !Notes |- | 1990 || 15,620,758 || {{increase}} 10.5% || 623,841 || {{increase}} 8.0% || 97,675 || {{increase}} 11.7% || |- | 1991 || 16,285,039 || {{increase}} 4.3% || 643,209 || {{increase}} 3.1% || 108,728 || {{increase}} 11.3% || |- | 1992 || 18,100,155 || {{increase}} 11.1% || 719,004 || {{increase}} 11.7% || 125,526 || {{increase}} 15.4% || |- | 1993 || 19,987,214 || {{increase}} 10.4% || 838,416 || {{increase}} 16.6% || 136,762 || {{increase}} 8.9% || |- | 1994 || 21,644,677 || {{increase}} 8.3% || 1,009,764 || {{increase}} 20.4% || 145,334 || {{increase}} 6.3% || |- | 1995 || 23,196,240 || {{increase}} 7.2% || 1,105,773 || {{increase}} 9.5% || 156,334 || {{increase}} 7.6% || |- | 1996 || 24,514,248 || {{increase}} 5.7% || 1,190,457 || {{increase}} 7.6% || 166,749 || {{increase}} 6.7% || |- | 1997 || 25,174,344 || {{increase}} 2.7% || 1,336,254 || {{increase}} 12.2% || 172,672 || {{increase}} 3.5% || |- | 1998 || 23,803,180 || {{decrease}} 5.4% || 1,283,660 || {{decrease}} 4.0% || 165,242 || {{decrease}} 4.3% || [[1997 Asian financial crisis]] |- | 1999 || 26,064,645 || {{increase}} 9.5 || 1,500,393 || {{increase}} 16.8 || 165,961 || {{increase}} 0.4 || |- !colspan="11" |Sources:<ref>{{cite web|title=1990–1999 Singapore Changi Airport Passenger Movements|url=https://data.gov.sg/dataset/civil-aircraft-arrivals-departures-passengers-and-mail-changi-airport-monthly|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=22 June 2020|archive-url=https://web.archive.org/web/20200622090650/https://data.gov.sg/dataset/civil-aircraft-arrivals-departures-passengers-and-mail-changi-airport-monthly|url-status=live}}</ref><ref name="Department of Statistics, Singapore-2"/><ref name="Department of Statistics, Singapore"/> |} {|class="wikitable" style="text-align:center;" ! colspan="8" style="background:lightgrey; colour:black; line-height:180%;" | Operational statistics (2000–2009) |- | style="text-align:center;" colspan="8"| |- style="background:lightgrey;" !Year !Passenger<br />movements !Passenger %<br />change over<br />previous year !Airfreight<br />movements<br />(tonnes) !Airfreight %<br />change over<br />previous year !Aircraft<br />movements !Aircraft %<br />change over<br />previous year !Notes |- | 2000 || 28,618,200 || {{increase}} 9.8 || 1,682,489 || {{increase}} 12.1 || 173,947 || {{increase}} 4.8 || |- | 2001 || 28,093,759 || {{decrease}} 1.83 || 1,507,062 || {{decrease}} 11.6 || 179,359 || {{increase}} 3.1 || [[September 11 attacks]] |- | 2002 || 28,979,344 || {{increase}} 3.2 || 1,637,797 || {{increase}} 8.7 || 174,820 || {{decrease}} 2.5 || |- | 2003 || 24,664,137 || {{decrease}} 14.9 || 1,611,407 || {{decrease}} 1.6 || 154,346 || {{decrease}} 11.7 || [[2002–2004 SARS outbreak]] |- | 2004 || 30,353,565 || {{increase}} 23.0 || 1,775,092 || {{increase}} 10.1 || 184,932 || {{increase}} 19.8 || |- | 2005 || 32,430,856 || {{increase}} 6.8 || 1,833,721 || {{increase}} 3.3 || 204,138 || {{increase}} 10.3 || |- | 2006 || 35,033,083 || {{increase}} 8.0 || 1,931,881 || {{increase}} 5.4 || 214,000 || {{increase}} 4.8 || |- | 2007 || 36,701,556 || {{increase}} 4.8 || 1,918,159 || {{decrease}} 0.7 || 221,000 || {{increase}} 3.3 || |- | 2008 || 37,694,824 || {{increase}} 2.7 || 1,883,894 || {{decrease}} 1.8 || 232,000 || {{increase}} 5.0 || |- | 2009 || 37,203,978 || {{decrease}} 1.3 || 1,633,791 || {{decrease}} 15.3 || 240,360 || {{increase}} 3.6 || [[2008 financial crisis]] |- |- !colspan="11" |Sources:<ref>{{cite web|title=2000–2009 Singapore Changi Airport Passenger Movements|url=https://data.gov.sg/dataset/civil-aircraft-arrivals-departures-passengers-and-mail-changi-airport-monthly|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=22 June 2020|archive-url=https://web.archive.org/web/20200622090650/https://data.gov.sg/dataset/civil-aircraft-arrivals-departures-passengers-and-mail-changi-airport-monthly|url-status=live}}</ref><ref>{{cite web|title=2000–2009 Singapore Changi Airport Airfreight movements 1|url=https://data.gov.sg/dataset/air-cargo-discharged-by-region-country-of-origin-monthly|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=22 June 2020|archive-url=https://web.archive.org/web/20200622022421/https://data.gov.sg/dataset/air-cargo-discharged-by-region-country-of-origin-monthly|url-status=live}}</ref><ref>{{cite web|title=2000–2009 Singapore Changi Airport Airfreight movements 2|url=https://data.gov.sg/dataset/air-cargo-loaded-total-by-region-and-selected-country-of-destination?view_id=6b5563a0-dd96-42c3-9d57-d0c7d30780d9&resource_id=2a8dd954-d260-4018-9d6b-503bedf1f019|publisher=Department of Statistics, Singapore|access-date=20 June 2020|archive-date=21 June 2020|archive-url=https://web.archive.org/web/20200621132014/https://data.gov.sg/dataset/air-cargo-loaded-total-by-region-and-selected-country-of-destination?view_id=6b5563a0-dd96-42c3-9d57-d0c7d30780d9&resource_id=2a8dd954-d260-4018-9d6b-503bedf1f019|url-status=live}}</ref> |} {|class="wikitable" style="text-align:center;" ! colspan="8" style="background:lightgrey; colour:black; line-height:180%;" | Operational statistics (2010–2019) |- | style="text-align:center;" colspan="8"| |- style="background:lightgrey;" !Year !Passenger<br />movements !Passenger %<br />change over<br />previous year !Airfreight<br />movements<br />(tonnes) !Airfreight %<br />change over<br />previous year !Aircraft<br />movements !Aircraft %<br />change over<br />previous year !Notes |- | 2010 || 42,038,777 || {{increase}} 13.0 || 1,813,809 || {{increase}} 11.0 || 263,593 || {{increase}} 9.7 || |- | 2011 || 46,543,845 || {{increase}} 10.7 || 1,865,252 || {{increase}} 2.8 || 301,711 || {{increase}} 14.5 || |- | 2012 || 51,181,804 || {{increase}} 10.0 || 1,806,225 || {{decrease}} 3.2 || 324,722 || {{increase}} 7.6 || |- | 2013 || 53,726,087 || {{increase}} 5.0 || 1,850,233 || {{increase}} 2.4 || 343,800 || {{increase}} 5.9 || |- | 2014 || 54,093,070 || {{increase}} 0.8 || 1,843,799 || {{decrease}} 0.3 || 341,386 || {{decrease}} 0.7 || |- | 2015 || 55,448,964 || {{increase}} 2.5 || 1,853,087 || {{increase}} 0.5 || 346,334 || {{increase}} 1.5 || |- | 2016 || 58,698,039 || {{increase}} 5.9 || 1,969,434 || {{increase}} 6.3 || 360,490 || {{increase}} 4.1 || |- | 2017 || 62,219,573 || {{increase}} 6.0 || 2,125,226 || {{increase}} 7.9 || 373,201 || {{increase}} 3.5 || |- | 2018 || 65,600,000 || {{increase}} 5.5 || 2,150,000 || {{increase}} 1.4 || 386,000 || {{increase}} 3.4 || |- | 2019 || 68,300,000 || {{increase}} 4.0 || 2,010,000 || {{decrease}} 6.5 || 382,000 || {{decrease}} 1.0 || |- !colspan="11" |Sources:<ref>{{cite web|title=2010 Singapore Changi Airport Statistics|url=https://media.changiairport.com/pressreleases/changi-airport-closes-2010-with-record-42-million-passengers-618168.pdf|publisher=Changi Airport Group|date=20 January 2011|access-date=20 June 2020|archive-date=20 June 2020|archive-url=https://web.archive.org/web/20200620181800/https://media.changiairport.com/pressreleases/changi-airport-closes-2010-with-record-42-million-passengers-618168.pdf|url-status=live}}</ref><ref>{{cite web|title=2011 Singapore Changi Airport Statistics|url=https://www.changiairportgroup.com/export/sites/caas/assets/media_release_2012/20_Jan_2012.pdf|publisher=Changi Airport Group|date=20 January 2012|access-date=30 March 2016|archive-url=https://web.archive.org/web/20160417072450/https://www.changiairportgroup.com/export/sites/caas/assets/media_release_2012/20_Jan_2012.pdf|archive-date=17 April 2016}}</ref><ref>{{cite web|title=2012 Singapore Changi Airport Statistics|url=https://www.changiairportgroup.com/export/sites/caas/assets/media_release_2013/Media_Release_-_A_record_51_million_passengers_for_Changi_Airport_in_2012_xwebx.pdf|publisher=Changi Airport Group|date=31 January 2013|access-date=30 March 2016|archive-url=https://web.archive.org/web/20160417103118/https://www.changiairportgroup.com/export/sites/caas/assets/media_release_2013/Media_Release_-_A_record_51_million_passengers_for_Changi_Airport_in_2012_xwebx.pdf|archive-date=17 April 2016}}</ref><ref>{{cite web|title=2013 Singapore Changi Airport Statistics|url=https://www.changiairportgroup.com/export/sites/caas/assets/media_release_2014/WEB-Media-Release-Another-record-breaking-year-for-Changi-Airport-in-2013.pdf|publisher=Changi Airport Group|date=28 January 2014|access-date=30 March 2016|archive-url=https://web.archive.org/web/20140701024027/http://www.changiairportgroup.com/export/sites/caas/assets/media_release_2014/WEB-Media-Release-Another-record-breaking-year-for-Changi-Airport-in-2013.pdf|archive-date=1 July 2014}}</ref><ref>{{cite web|title=2014 Singapore Changi Airport Statistics|url=http://www.changiairportgroup.com/export/sites/caas/assets/media_release_2015/WEB-Media-Release-Changi-Airport-crosses-54-million-passenger-mark-in-2014.pdf|publisher=Changi Airport Group|date=29 January 2015|access-date=30 March 2016|archive-url=https://web.archive.org/web/20150930140817/http://www.changiairportgroup.com/export/sites/caas/assets/media_release_2015/WEB-Media-Release-Changi-Airport-crosses-54-million-passenger-mark-in-2014.pdf|archive-date=30 September 2015}}</ref><ref> {{cite web|title=2015 Singapore Changi Airport Statistics|url=http://www.changiairport.com/corporate/media-centre/newsroom.html#/documents/annex-a-passenger-airfreight-aircraft-movements-statistics-for-2015-52522|publisher=Changi Airport Group|date=27 January 2016|access-date=30 March 2016|archive-url=https://web.archive.org/web/20160127105007/http://www.changiairport.com/corporate/media-centre/newsroom.html#/documents/annex-a-passenger-airfreight-aircraft-movements-statistics-for-2015-52522|archive-date=27 January 2016|url-status=live}} </ref><ref> {{cite web|title=2016 Singapore Changi Airport Statistics|url=http://www.changiairport.com/corporate/media-centre/newsroom.html#/documents/annex-a-passenger-airfreight-and-aircraft-movement-statistics-for-2016-63855|publisher=Changi Airport Group|date=30 January 2017|access-date=30 January 2017|archive-url=https://web.archive.org/web/20160127105007/http://www.changiairport.com/corporate/media-centre/newsroom.html#/documents/annex-a-passenger-airfreight-and-aircraft-movement-statistics-for-2016-63855|archive-date=27 January 2016|url-status=live}} </ref><ref> {{cite web|title=2017 Singapore Changi Airport Statistics|url=http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/a-record-62-dot-2-million-passengers-for-changi-airport-in-2017-2386732|publisher=Changi Airport Group|date=23 January 2018|access-date=23 January 2018|archive-url=https://web.archive.org/web/20160127105007/http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/a-record-62-dot-2-million-passengers-for-changi-airport-in-2017-2386732|archive-date=27 January 2016|url-status=live}} </ref><ref> {{cite web|url=http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/changi-airport-crosses-65-million-passenger-mark-in-2018-2829095|title=Changi Airport crosses 65 million passenger mark in 2018|website=changiairport.com|language=en-US|access-date=10 February 2019|archive-url=https://web.archive.org/web/20160127105007/http://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/changi-airport-crosses-65-million-passenger-mark-in-2018-2829095|archive-date=27 January 2016|url-status=live}}</ref><ref name="Changi Airport">{{cite web|url=https://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/changi-airport-handled-68-dot-3-million-passengers-in-2019-2966486|title=Passenger, airfreight and aircraft movement statistics for 2019|publisher=Changi Airport Group|date=31 January 2020|access-date=8 February 2020|archive-date=4 February 2022|archive-url=https://web.archive.org/web/20220204023838/https://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/changi-airport-handled-68-dot-3-million-passengers-in-2019-2966486|url-status=live}}</ref> |} {|class="wikitable" style="text-align:center;" ! colspan="8" style="background:lightgrey; colour:black; line-height:180%;" | Operational statistics (2020–2025) |- | style="text-align:center;" colspan="8"| |- style="background:lightgrey;" !Year !Passenger<br />movements !Passenger %<br />change over<br />previous year !Airfreight<br />movements<br />(tonnes) !Airfreight %<br />change over<br />previous year !Aircraft<br />movements !Aircraft %<br />change over<br />previous year !Notes |- | 2020 || 11,800,000 || {{decrease}} 82.8 || 1,540,000 || {{decrease}} 23.3 || 125,000 || {{decrease}} 67.2 || [[COVID-19 pandemic]] |- | 2021 || 3,053,000 || {{decrease}} 74.1 || 1,947,000 || {{increase}} 26.1 || 109,000 || {{decrease}} 13.2 || [[COVID-19 pandemic]] |- | 2022 || 32,200,000 || {{increase}} 954.7 || 1,850,000 || {{decrease}} 5.0 || 219,000 || {{increase}} 100.9 || |- | 2023 || 58,900,000 || {{increase}} 82.9 || 1,740,000 || {{decrease}} 5.9 || 328,000 || {{increase}} 49.8 || |- | 2024 || 67,700,000 || {{increase}} 14.8 || 1,990,000 || {{increase}} 14.6 || 366,000 ||{{increase}} 11.6 || |- | 2025 || 69,980,000 || {{increase}} 3.38 || 2,080,000 || {{increase}} 4.52 || 374,000 ||{{increase}} 2.19 || |- ! colspan="11" | Sources:<ref>{{cite web|url=https://www.straitstimes.com/singapore/passenger-traffic-in-changi-airport-fell-828-per-cent-last-year-from-683m-in-2019-to-118m|title=2020 Singapore Changi Airport Statistics|website=The Straits Times|date=21 January 2021|access-date=21 January 2021|archive-date=20 January 2021|archive-url=https://web.archive.org/web/20210120103658/https://www.straitstimes.com/singapore/passenger-traffic-in-changi-airport-fell-828-per-cent-last-year-from-683m-in-2019-to-118m|url-status=live}}</ref><ref>{{cite web|url=https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html|title=2021 Singapore Changi Airport Statistics|website=Changi Airport Group|date=20 January 2022|access-date=20 January 2022|archive-date=20 January 2022|archive-url=https://web.archive.org/web/20220120074001/https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html|url-status=live}}</ref><ref>{{cite web|url=https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html|title=Singapore Changi Airport Statistics (2022)|website=Changi Airport Group|access-date=2 February 2023|archive-date=20 January 2022|archive-url=https://web.archive.org/web/20220120074001/https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html|url-status=live}}</ref><ref>{{cite web |title=2023 Singapore Changi Airport Statistics |url=https://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html |website=Changi Airport Group |access-date=20 January 2022 |archive-date=20 January 2022 |archive-url=https://web.archive.org/web/20220120042036/http://www.changiairport.com/corporate/our-expertise/air-hub/traffic-statistics.html |url-status=live }}</ref><ref>{{Cite web |last=Loi |first=Esther |date=22 January 2025 |title=Changi Airport's 2024 passenger traffic hit 99.1% of pre-pandemic levels |url=https://www.straitstimes.com/singapore/transport/changi-airport-handles-67-7m-passengers-in-2024-99-1-of-pre-pandemic-levels |access-date=29 January 2025 |website=The Straits Times |archive-date=30 January 2025 |archive-url=https://web.archive.org/web/20250130163615/https://www.straitstimes.com/singapore/transport/changi-airport-handles-67-7m-passengers-in-2024-99-1-of-pre-pandemic-levels |url-status=live }}</ref><ref>{{cite web|url=https://www.changiairport.com/en/corporate/about-us/traffic-statistics.html|title=Traffic Statistics|website=Changi Airport|access-date=20 December 2025|archive-url=https://web.archive.org/web/20251229122332/https://www.changiairport.com/en/corporate/about-us/traffic-statistics.html|archive-date=29 December 2025|url-status=live}}</ref> |} {{Airport-Statistics|iata=SIN}} ==Accidents and incidents== * 26 March 1991 – [[Singapore Airlines Flight 117]], operated by an [[Airbus A310]], was hijacked by four terrorists. The flight landed in Changi Airport at 22:15. The [[Special Operations Force (Singapore)|Singapore Special Operations Force]] stormed the aircraft, on the morning of 27 March. All four hijackers were killed, with only minor injuries among the surviving 123 passengers and crew, who were held hostage for more than eight hours.<ref>{{Cite web |last=Ranter |first=Harro |title=Unlawful Interference Airbus A310-324 9V-STP, Monday 25 March 1991 |url=https://asn.flightsafety.org/asndb/325798 |access-date=5 January 2025 |website=asn.flightsafety.org |archive-date=25 December 2024 |archive-url=https://web.archive.org/web/20241225120159/https://asn.flightsafety.org/asndb/325798 |url-status=live }}</ref> * 4 November 2010 – [[Qantas Flight 32]], operated by an [[Airbus A380-800]] with [[Rolls-Royce Trent 900]] engines, had an [[Turbine engine failure|uncontained engine failure]] and returned to Changi Airport. Upon landing, one of the engines could not be shut down due to ruptured control cables and had to be doused for three hours by airport firefighters to forcefully shut it down. There were no crew or passenger injuries, and all 469 people on board survived the accident.<ref name="ASNforflight32">{{Cite web |last=Ranter |first=Harro |title=Accident Airbus A380-842 VH-OQA, Thursday 4 November 2010 |url=https://asn.flightsafety.org/wikibase/321226 |access-date=5 January 2025 |website=asn.flightsafety.org |archive-date=21 January 2025 |archive-url=https://web.archive.org/web/20250121153231/https://asn.flightsafety.org/wikibase/321226 |url-status=live }}</ref> The aircraft was also repaired.<ref name="ASNforflight32"/> * 27 June 2016 – Singapore Airlines Flight 368, a scheduled service from Changi Airport to [[Milan Malpensa Airport|Milan, Italy]] carrying 222 passengers and 19 crew, caught fire shortly after it landed. Approximately three hours into the flight, the [[Boeing 777]] turned back after the pilot received an engine oil warning message. Shortly after landing, the right engine and wing were ablaze, with flames engulfing the right side of the jet. No one was injured. The aircraft was later repaired and placed back into service.<ref>{{Cite web |last=Auto |first=Hermes |date=27 June 2016 |title=Singapore Airlines plane catches fire on Changi Airport runway; no injuries reported {{!}} The Straits Times |url=https://www.straitstimes.com/singapore/singapore-airlines-plane-catches-fire-on-changi-airport-runway-no-injuries-reported |access-date=10 March 2023 |website=www.straitstimes.com |language=en |archive-date=10 March 2023 |archive-url=https://web.archive.org/web/20230310180903/https://www.straitstimes.com/singapore/singapore-airlines-plane-catches-fire-on-changi-airport-runway-no-injuries-reported |url-status=live }}</ref><ref>{{cite web|url=https://asn.flightsafety.org/wikibase/320054|title=Accident description for 9V-SWB at Aviation Safety Network|website=asn.flightsafety.org|accessdate=23 May 2025|archive-date=27 November 2024|archive-url=https://web.archive.org/web/20241127201309/https://asn.flightsafety.org/wikibase/320054|url-status=live}}</ref> * 16 May 2017 – a fire broke out at the departure hall in Terminal 2.<ref> {{cite web |url=http://www.channelnewsasia.com/news/singapore/small-fire-at-changi-airport-t2-sparks-evacuation-flight-delays-8854078 |title='Small fire' at Changi Airport T2 sparks evacuation, flight delays |publisher=Channel NewsAsia |access-date=16 May 2017 |archive-url=https://web.archive.org/web/20170519050018/http://www.channelnewsasia.com/news/singapore/small-fire-at-changi-airport-t2-sparks-evacuation-flight-delays-8854078 |archive-date=19 May 2017 |url-status=live }} </ref> The fire caused 40 flights at Terminal 2 to be delayed and diverted to Terminal 3.<ref>{{cite web |url=http://www.channelnewsasia.com/news/singapore/changi-airport-fire-about-40-flights-affected-by-terminal-2-8854800?cid=fbcna |title=Changi Airport fire: About 40 flights affected by Terminal 2 closure |publisher=Channel NewsAsia |access-date=17 May 2017 |archive-url=https://web.archive.org/web/20170519081305/http://www.channelnewsasia.com/news/singapore/changi-airport-fire-about-40-flights-affected-by-terminal-2-8854800?cid=FBcna |archive-date=19 May 2017 |url-status=live}}</ref> Terminal 2 was closed from 17:30 to 22:45. * 29 November 2017 – a tow tug towing a Singapore Airlines [[Boeing 777]]-200 caught fire. This fire was promptly put out by the airport's emergency services. A member of the towing crew was in the aircraft's cockpit when the fire occurred; the crew member evacuated through the aircraft's emergency slides. The aircraft was substantially damaged by the fire and written off.<ref>{{Cite news|url=https://www.straitstimes.com/singapore/transport/tow-tug-at-changi-airport-catches-fire-as-it-is-towing-a-singapore-airlines|title=Tow tug at Changi Airport catches fire while towing Singapore Airlines plane|work=The Straits Times|author=Karamjit Kaur|date=29 November 2017|access-date=22 September 2021|archive-date=22 September 2021|archive-url=https://web.archive.org/web/20210922043722/https://www.straitstimes.com/singapore/transport/tow-tug-at-changi-airport-catches-fire-as-it-is-towing-a-singapore-airlines|url-status=live}}</ref><ref>{{cite web|url=https://asn.flightsafety.org/asndb/319762|title=Accident description for 9V-SQK at aviation-safety.org|website=aviation-safety.org|access-date=10 July 2024}}</ref> * 6 February 2018 – a [[KAI T-50 Golden Eagle]], part of the [[Black Eagles aerobatic team]] taking part in [[Singapore Airshow|Singapore Airshow 2018]], veered off the runway during takeoff and crashed. The resulting fire was put out by emergency services and the pilot was treated for minor injuries. Runway 02L/20R was closed as a result and caused delays at the airport.<ref>{{Cite news|last1=Chin|first1=Nigel|url=https://www.channelnewsasia.com/news/singapore/korean-plane-crashes-catches-fire-changi-airport-9932322|title=Korean plane taking part in Singapore Airshow crashes, catches fire at Changi Airport; flight delays expected|date=6 February 2018|publisher=Channel NewsAsia|access-date=6 February 2018|archive-date=22 September 2020|archive-url=https://web.archive.org/web/20200922085234/https://www.channelnewsasia.com/news/singapore/korean-plane-singapore-airshow-crashes-changi-airport-9932322|url-status=live}}</ref> ==See also== {{Portal|Singapore|Aviation}} *[[Airport Logistics Park]] *[[History of Changi Airport]] *[[Infrastructure of Changi Airport]] *[[Jewel Changi Airport]] *[[Kinetic Rain]] *[[List of airports with triple takeoff/landing capability]] *[[List of busiest airports by passenger traffic]] ==Notes== {{notelist}} ==References== ===Citations=== {{reflist}} ===Bibliography=== * {{citation |chapter-url=http://www.wondersofworldaviation.com/singapore-airport.html |chapter=Singapore's great airport |title=Wonders of World Aviation |year=1938 |pages=128–130 |editor-first=Clarence |editor-last=Winchester }}, illustrated description of the newly opened Singapore Airport * {{Cite news |date=9 April 2024 |title=Leadership transition at Changi Airport Group |url=https://www.changiairport.com/corporate/media-centre/newsroom.html#/pressreleases/leadership-transition-at-changi-airport-group-3315372 |access-date=9 April 2024 |work=Changi Airport Group}} ==External links== {{Commons category}} {{Wikivoyage}} {{Library resources box |onlinebooks=no |by=no }} {{Commons category-inline|Singapore Changi Airport}} * [https://www.changiairport.com/ Singapore Changi Airport official site] * [https://jetquay.com.sg/ Singapore Changi Airport JetQuay CIP Terminal official website] * [https://web.archive.org/web/20100710082837/https://www.singaporevr.com/vrs/changi_airport/terminal3_inside.html Virtual reality view of Changi Airport Terminal 3] * [https://theta360.com/s/gMekgB0c1sxRRXMiOvZwfdVNU 360° image of Changi Airport Terminal 3] * [https://web.archive.org/web/20070926221328/http://aviation-safety.net/database/airport/airport.php?id=SIN Accident history for SIN] at [[Aviation Safety Network]] * {{NWS-current|WSSS}} {{Changi Airport}} {{Airports in Singapore}} {{Future developments in Singapore}} {{authority control}} [[Category:Changi Airport| ]] [[Category:Airports established in 1981]] [[Category:Airports in Singapore]] [[Category:1981 establishments in Singapore]] [[Category:20th-century architecture in Singapore]] 8lc3uezqkwp08mgx8bot9sn8p8zd3nn Template:Infobox airport 10 176045 746155 2026-06-09T01:42:38Z en>Zackmann08 0 Initiating deprecated parameters cleanup per talk page discussion. 746155 wikitext text/x-wiki {{#if:{{Has short description}} |<!--Do nothing--> |{{main other|{{#invoke:Type in location|main|Airport|{{{location|}}}}}}}}}{{infobox | bodyclass = ib-airport vcard | templatestyles = Infobox airport/styles.css | above = <includeonly><div class="fn org">{{#invoke:string|replace|{{if empty|{{{name|}}}|{{BASEPAGENAME}}}}| |<br />|plain=false}}</div></includeonly><!-- -->{{#if:{{{ensign|}}}|{{#invoke:InfoboxImage|InfoboxImage|image={{{ensign|}}}|size={{{ensign_size|}}}|sizedefault=90px|alt={{{ensign_alt|}}}}}}}<!-- -->{{#if:{{{nativename|}}}|<div class="nickname">{{{nativename}}}</div>}}<!-- -->{{#if:{{{native_name|}}}|<div class="nickname">{{{native_name}}}</div>}}<!-- -->{{#if:{{{nativename-a|}}}|<div class="nickname">{{{nativename-a}}}</div>}}<!-- -->{{#if:{{{nativename-r|}}}|<div class="nickname">{{{nativename-r}}}</div>}} | image = {{#invoke:InfoboxImage|InfoboxImage|image={{if empty|{{{image|}}}|{{{logo|}}}}}|size={{if empty|{{{image_size|}}}|{{{image-width|}}}}}|sizedefault=250px|upright=1|alt={{{image_alt|}}}}} | caption = {{{caption|}}} | image2 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image2|}}}|size={{if empty|{{{image2_size|}}}|{{{image2-width|}}}}}|sizedefault=250px|upright=1|alt={{{image2_alt|}}}}} | caption2 = {{{caption2|}}} | rowclass1 = ib-airport-codes | data1 = <includeonly>{{hlist |1=<span class="nowrap">[[IATA airport code|IATA]]: {{#if:{{{IATA|}}}|<span class="nickname">{{{IATA}}}</span>|''none''}}</span> |2=<span class="nowrap">[[ICAO airport code|ICAO]]: {{#if:{{{ICAO|}}}|<span class="nickname">{{{ICAO}}}</span>|''none''}}</span> |3={{#if:{{{FAA|}}}|<span class="nowrap">[[Federal Aviation Administration|FAA]] [[Location identifier#FAA identifier|LID]]: <span class="nickname">{{{FAA}}}</span></span>}} |4={{#if:{{{TC|}}} |<span class="nowrap">[[Transport Canada|TC]] [[Location identifier#Transport Canada identifier|LID]]: <span class="nickname">{{{TC}}}</span></span>}} |5={{#if:{{{LID|}}}|<span class="nowrap">[[Location identifier|LID]]: <span class="nickname">{{{LID}}}</span></span>}} |6={{#if:{{{GPS|}}}|<span class="nowrap">[[Global Positioning System|GPS]]: <span class="nickname">{{{GPS}}}</span></span>}} |7={{#if:{{{WMO|}}}|<span class="nowrap">[[Location identifier#WMO station identifiers|WMO]]: <span class="nickname">{{{WMO}}}</span></span>}} }}</includeonly> | header2 = <includeonly>Summary</includeonly> | label3 = Airport type | class3 = category | data3 = {{{type|}}} | rowclass4 = note | label4 = {{#if:{{{owner-oper|}}}{{{owner_oper|}}}|Owner/Operator|Owner}} | data4 = {{if empty|{{{owner-oper|}}}|{{{owner_oper|}}}|{{{owner|}}}}} | rowclass5 = note | label5 = {{#if:{{{owner-oper|}}}{{{owner_oper|}}}| |Operator}} | data5 = {{#if:{{{owner-oper|}}}{{{owner_oper|}}}| |{{{operator|}}}}} | label6 = Serves | data6 = {{if empty|{{{city-served|}}}|{{{area-served|}}}|{{{area_served|}}}}} | label7 = Location | class7 = label | data7 = {{{location|}}} | label8 = Opened | data8 = {{{opened|}}} | label9 = Closed | data9 = {{{closed|}}} | label10 = Passenger services ceased | data10 = {{{passenger_services_ceased|}}} | label11 = [[Airline hub|Hub]] for | data11 = {{{hub|}}} | label12 = [[Focus city]] for | data12 = {{{focus_city|}}} | label13 = Operating base for | data13 = {{{operating_base|}}} | label14 = Built | data14 = {{{built|}}} | label15 = In use | data15 = {{{used|}}} | label16 = Commander | data16 = {{{commander|}}} | label17 = Occupants | data17 = {{{occupants|}}} | label18 = [[Time zone]] | data18 = {{#if: {{{timezone|}}} {{{utc|}}}| {{{timezone}}} ({{{utc}}}) }} | label19 = &nbsp;•&nbsp;Summer ([[Daylight saving time|DST]]) | data19 = {{#if: {{{summer|}}} {{{utcs|}}}| {{{summer}}} ({{{utcs}}}) }} | label20 = Elevation&nbsp;[[Height above sea level|AMSL]] | data20 = {{#if:{{{elevation-f|{{{elevation_f|}}}}}} {{{elevation-m|{{{elevation_m|}}}}}}{{{elevation_f|}}} {{{elevation_m|}}} |{{#if:{{{metric-elev|}}}{{{metric_elev|}}} | {{#if:{{{elevation-m|{{{elevation_m|}}}}}}| {{formatnum: {{replace|{{{elevation-m|{{{elevation_m|}}}}}}|,|}} }}&nbsp;m| {{convert|{{{elevation-f|{{{elevation_f|}}}}}}|ft|m|0|disp=output only}} }} / {{#if: {{{elevation-f|{{{elevation_f|}}}}}} | {{formatnum: {{replace|{{{elevation-f|{{{elevation_f|}}}}}}|,|}} }}&nbsp;ft |{{convert|{{{elevation-m|{{{elevation_m|}}}}}}|m|ft|0|disp=output only}} }} | {{#if:{{{elevation-f|{{{elevation_f|}}}}}}| {{formatnum: {{replace|{{{elevation-f|{{{elevation_f|}}}}}}|,|}} }}&nbsp;ft| {{convert|{{{elevation-m|{{{elevation_m|}}}}}}|m|ft|0|disp=output only}} }} / {{#if: {{{elevation-m|{{{elevation_m|}}}}}} | {{formatnum: {{replace|{{{elevation-m|{{{elevation_m|}}}}}}|,|}} }}&nbsp;m |{{convert|{{{elevation-f|{{{elevation_f|}}}}}}|ft|m|0|disp=output only}} }} }} }} | label21 = [[Geographic coordinate system|Coordinates]] | data21 = {{#if: {{{coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates}}}|type:airport}}}} | label30 = Public transit access | data30 = {{if empty|{{{publictransit|}}}|{{{public_transit|}}}}} | label31 = Website | class31 = plainlinksneverexpand | data31 = {{{website|}}} | header32 = {{#switch:{{#if:{{{pushpin_map|}}}|1}}{{#if:{{{image_map|}}}|1}}{{yesno|{{{mapframe|}}}|yes=1|def=}} |1=Map |11|111=Maps}} | data33 = {{#if:{{{image_map|}}}| {{#invoke:InfoboxImage|InfoboxImage|image={{{image_map|}}}|size={{{image_mapsize|}}}|sizedefault=250px|upright=1|alt={{{image_map_alt|}}}|title={{{image_map_caption|Location of {{if empty|{{{name|}}}|{{BASEPAGENAME}}}}}}}}}{{#if:{{{image_map_caption|}}}|<br />{{{image_map_caption}}}}} }} | data34 = {{#if:{{{pushpin_map|}}}|{{Location map|{{{pushpin_map|}}} |label = {{#ifeq: {{lc: {{{pushpin_label_position|}}} }} | none | | {{#if:{{{pushpin_label|}}}|{{{pushpin_label}}}|{{if empty|{{{name|}}}|{{BASEPAGENAME}}}}}} }} |alt = {{{pushpin_map_alt|}}} |mark = {{if empty|{{{pushpin_mark|}}}|Airplane silhouette.svg }} |marksize = {{if empty|{{{pushpin_marksize|}}}|10 }} |coordinates = {{{coordinates|}}} |float = center |caption = {{{pushpin_map_caption|}}} |border = infobox |outside = {{{pushpin_outside|}}}<!-- pin is outside the map --> |position = {{{pushpin_label_position|}}} |width = {{{pushpin_mapsize|}}} |default_width = 250 |relief = {{{pushpin_relief|}}} |AlternativeMap = {{{pushpin_image|}}} }} }} | data35 = {{#invoke:Infobox mapframe | autoWithCaption | onByDefault = {{#if:{{{pushpin_map|}}}{{{image_map|}}}|no|yes}} | mapframe-marker = airport | mapframe-wikidata = yes | mapframe-width = 250 | mapframe-caption = Interactive map of {{if empty|{{{name|}}}|{{BASEPAGENAME}}}} }} | header37 = {{#if: {{{r1-number|}}} {{{r1-length-f|}}} {{{r1-length-m|}}} {{{r1-surface|}}} {{{r1_number|}}} {{{r1_length_f|}}} {{{r1_length_m|}}} {{{r1_surface|}}}|[[Runway|Runways]]}} | data38 = {{#if: {{{r1-number|}}} {{{r1-length-f|}}} {{{r1-length-m|}}} {{{r1-surface|}}} {{{r1_number|}}} {{{r1_length_f|}}} {{{r1_length_m|}}} {{{r1_surface|}}} |{{Infobox airport/datatable | nlabel = [[Runway#Naming|Direction]] | metric = {{if empty|{{{metric-rwy|}}}| {{{metric_rwy|}}} }} | n1 = {{{r1-number|{{{r1_number|}}}}}} | l1-m = {{{r1-length-m|{{{r1_length_m|}}}}}} | l1-f = {{{r1-length-f|{{{r1_length_f|}}}}}} | s1 = {{{r1-surface|{{{r1_surface|}}}}}} | n2 = {{{r2-number|{{{r2_number|}}}}}} | l2-m = {{{r2-length-m|{{{r2_length_m|}}}}}} | l2-f = {{{r2-length-f|{{{r2_length_f|}}}}}} | s2 = {{{r2-surface|{{{r2_surface|}}}}}} | n3 = {{{r3-number|{{{r3_number|}}}}}} | l3-m = {{{r3-length-m|{{{r3_length_m|}}}}}} | l3-f = {{{r3-length-f|{{{r3_length_f|}}}}}} | s3 = {{{r3-surface|{{{r3_surface|}}}}}} | n4 = {{{r4-number|{{{r4_number|}}}}}} | l4-m = {{{r4-length-m|{{{r4_length_m|}}}}}} | l4-f = {{{r4-length-f|{{{r4_length_f|}}}}}} | s4 = {{{r4-surface|{{{r4_surface|}}}}}} | n5 = {{{r5-number|{{{r5_number|}}}}}} | l5-m = {{{r5-length-m|{{{r5_length_m|}}}}}} | l5-f = {{{r5-length-f|{{{r5_length_f|}}}}}} | s5 = {{{r5-surface|{{{r5_surface|}}}}}} | n6 = {{{r6-number|{{{r6_number|}}}}}} | l6-m = {{{r6-length-m|{{{r6_length_m|}}}}}} | l6-f = {{{r6-length-f|{{{r6_length_f|}}}}}} | s6 = {{{r6-surface|{{{r6_surface|}}}}}} | n7 = {{{r7-number|{{{r7_number|}}}}}} | l7-m = {{{r7-length-m|{{{r7_length_m|}}}}}} | l7-f = {{{r7-length-f|{{{r7_length_f|}}}}}} | s7 = {{{r7-surface|{{{r7_surface|}}}}}} | n8 = {{{r8-number|{{{r8_number|}}}}}} | l8-m = {{{r8-length-m|{{{r8_length_m|}}}}}} | l8-f = {{{r8-length-f|{{{r8_length_f|}}}}}} | s8 = {{{r8-surface|{{{r8_surface|}}}}}} | n9 = {{{r9-number|{{{r9_number|}}}}}} | l9-m = {{{r9-length-m|{{{r9_length_m|}}}}}} | l9-f = {{{r9-length-f|{{{r9_length_f|}}}}}} | s9 = {{{r9-surface|{{{r9_surface|}}}}}} | n10 = {{{r10-number|{{{r10_number|}}}}}} | l10-m = {{{r10-length-m|{{{r10_length_m|}}}}}} | l10-f = {{{r10-length-f|{{{r10_length_f|}}}}}} | s10 = {{{r10-surface|{{{r10_surface|}}}}}} | n11 = {{{r11-number|{{{r11_number|}}}}}} | l11-m = {{{r11-length-m|{{{r11_length_m|}}}}}} | l11-f = {{{r11-length-f|{{{r11_length_f|}}}}}} | s11 = {{{r11-surface|{{{r11_surface|}}}}}} | n12 = {{{r12-number|{{{r12_number|}}}}}} | l12-m = {{{r12-length-m|{{{r12_length_m|}}}}}} | l12-f = {{{r12-length-f|{{{r12_length_f|}}}}}} | s12 = {{{r12-surface|{{{r12_surface|}}}}}} }}}} | header39 = {{#if: {{{h1-number|{{{h1_number|}}}}}} {{{h1-length-f|{{{h1_length_f|}}}}}} {{{h1-length-m|{{{h1_length_m|}}}}}} {{{h1-surface|{{{h1_surface|}}}}}}|[[Helipad|Helipads]]}} | data40 = {{#if: {{{h1-number|{{{h1_number|}}}}}} {{{h1-length-f|{{{h1_length_f|}}}}}} {{{h1-length-m|{{{h1_length_m|}}}}}} {{{h1-surface|{{{h1_surface|}}}}}} |{{Infobox airport/datatable | nlabel = Number | metric = {{{metric-rwy|{{{metric_rwy|}}}}}} | n1 = {{{h1-number|{{{h1_number|}}}}}} | l1-m = {{{h1-length-m|{{{h1_length_m|}}}}}} | l1-f = {{{h1-length-f|{{{h1_length_f|}}}}}} | s1 = {{{h1-surface|{{{h1_surface|}}}}}} | n2 = {{{h2-number|{{{h2_number|}}}}}} | l2-m = {{{h2-length-m|{{{h2_length_m|}}}}}} | l2-f = {{{h2-length-f|{{{h2_length_f|}}}}}} | s2 = {{{h2-surface|{{{h2_surface|}}}}}} | n3 = {{{h3-number|{{{h3_number|}}}}}} | l3-m = {{{h3-length-m|{{{h3_length_m|}}}}}} | l3-f = {{{h3-length-f|{{{h3_length_f|}}}}}} | s3 = {{{h3-surface|{{{h3_surface|}}}}}} | n4 = {{{h4-number|{{{h4_number|}}}}}} | l4-m = {{{h4-length-m|{{{h4_length_m|}}}}}} | l4-f = {{{h4-length-f|{{{h4_length_f|}}}}}} | s4 = {{{h4-surface|{{{h4_surface|}}}}}} | n5 = {{{h5-number|{{{h5_number|}}}}}} | l5-m = {{{h5-length-m|{{{h5_length_m|}}}}}} | l5-f = {{{h5-length-f|{{{h5_length_f|}}}}}} | s5 = {{{h5-surface|{{{h5_surface|}}}}}} | n6 = {{{h6-number|{{{h6_number|}}}}}} | l6-m = {{{h6-length-m|{{{h6_length_m|}}}}}} | l6-f = {{{h6-length-f|{{{h6_length_f|}}}}}} | s6 = {{{h6-surface|{{{h6_surface|}}}}}} | n7 = {{{h7-number|{{{h7_number|}}}}}} | l7-m = {{{h7-length-m|{{{h7_length_m|}}}}}} | l7-f = {{{h7-length-f|{{{h7_length_f|}}}}}} | s7 = {{{h7-surface|{{{h7_surface|}}}}}} | n8 = {{{h8-number|{{{h8_number|}}}}}} | l8-m = {{{h8-length-m|{{{h8_length_m|}}}}}} | l8-f = {{{h8-length-f|{{{h8_length_f|}}}}}} | s8 = {{{h8-surface|{{{h8_surface|}}}}}} | n9 = {{{h9-number|{{{h9_number|}}}}}} | l9-m = {{{h9-length-m|{{{h9_length_m|}}}}}} | l9-f = {{{h9-length-f|{{{h9_length_f|}}}}}} | s9 = {{{h9-surface|{{{h9_surface|}}}}}} | n10 = {{{h10-number|{{{h10_number|}}}}}} | l10-m = {{{h10-length-m|{{{h10_length_m|}}}}}} | l10-f = {{{h10-length-f|{{{h10_length_f|}}}}}} | s10 = {{{h10-surface|{{{h10_surface|}}}}}} | n11 = {{{h11-number|{{{h11_number|}}}}}} | l11-m = {{{h11-length-m|{{{h11_length_m|}}}}}} | l11-f = {{{h11-length-f|{{{h11_length_f|}}}}}} | s11 = {{{h11-surface|{{{h11_surface|}}}}}} | n12 = {{{h12-number|{{{h12_number|}}}}}} | l12-m = {{{h12-length-m|{{{h12_length_m|}}}}}} | l12-f = {{{h12-length-f|{{{h12_length_f|}}}}}} | s12 = {{{h12-surface|{{{h12_surface|}}}}}} }}}} | header41 = {{#if:{{{stat1-data|{{{stat1_data|}}}}}}{{{stat2-data|{{{stat2_data|}}}}}}{{{stat3-data|{{{stat3_data|}}}}}}{{{stat4-data|{{{stat4_data|}}}}}}{{{stat5-data|{{{stat5_data|}}}}}}{{{stat6-data|{{{stat6_data|}}}}}}{{{stat7-data|{{{stat7_data|}}}}}}{{{stat8-data|{{{stat8_data|}}}}}} | Statistics {{#if:{{{stat-year|{{{stat_year|}}}}}}|({{{stat-year|{{{stat_year|}}}}}})}} }} | data50 = {{#if:{{{stat1-data|{{{stat1_data|}}}}}}{{{stat2-data|{{{stat2_data|}}}}}}{{{stat3-data|{{{stat3_data|}}}}}}{{{stat4-data|{{{stat4_data|}}}}}}{{{stat5-data|{{{stat5_data|}}}}}}{{{stat6-data|{{{stat6_data|}}}}}}{{{stat7-data|{{{stat7_data|}}}}}}{{{stat8-data|{{{stat8_data|}}}}}} | {{Infobox | subbox = yes | label1 = {{{stat1-header|{{{stat1_header|}}}}}} | data1 = {{{stat1-data|{{{stat1_data|}}}}}} | label2 = {{{stat2-header|{{{stat2_header|}}}}}} | data2 = {{{stat2-data|{{{stat2_data|}}}}}} | label3 = {{{stat3-header|{{{stat3_header|}}}}}} | data3 = {{{stat3-data|{{{stat3_data|}}}}}} | label4 = {{{stat4-header|{{{stat4_header|}}}}}} | data4 = {{{stat4-data|{{{stat4_data|}}}}}} | label5 = {{{stat5-header|{{{stat5_header|}}}}}} | data5 = {{{stat5-data|{{{stat5_data|}}}}}} | label6 = {{{stat6-header|{{{stat6_header|}}}}}} | data6 = {{{stat6-data|{{{stat6_data|}}}}}} | label7 = {{{stat7-header|{{{stat7_header|}}}}}} | data7 = {{{stat7-data|{{{stat7_data|}}}}}} | label8 = {{{stat8-header|{{{stat8_header|}}}}}} | data8 = {{{stat8-data|{{{stat8_data|}}}}}} }} }} | rowclass51 = ib-airport-footnotes | data51 = {{#if:{{{footnotes|}}}|{{{footnotes}}}}} | data52 = {{if empty|{{{embed|}}}|{{{module|}}}}} }}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox airport with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox airport]] with unknown parameter "_VALUE_"|ignoreblank=y|mapframe_args=y| area_served | area-served | built | caption | caption2 | city-served | closed | commander | coordinates | elevation_f | elevation_m | elevation-f | elevation-m | embed | ensign | ensign_alt | ensign_size | FAA | focus_city | footnotes | GPS | h1_length_f | h1_length_m | h1_number | h1_surface | h1-length-f | h1-length-m | h1-number | h1-surface | h2_length_f | h2_length_m | h2_number | h2_surface | h2-length-f | h2-length-m | h2-number | h2-surface | h3_length_f | h3_length_m | h3_number | h3_surface | h3-length-f | h3-length-m | h3-number | h3-surface | h4_length_f | h4_length_m | h4_number | h4_surface | h4-length-f | h4-length-m | h4-number | h4-surface | h5_length_f | h5_length_m | h5_number | h5_surface | h5-length-f | h5-length-m | h5-number | h5-surface | h6_length_f | h6_length_m | h6_number | h6_surface | h6-length-f | h6-length-m | h6-number | h6-surface | h7_length_f | h7_length_m | h7_number | h7_surface | h7-length-f | h7-length-m | h7-number | h7-surface | h8_length_f | h8_length_m | h8_number | h8_surface | h8-length-f | h8-length-m | h8-number | h8-surface | h9_length_f | h9_length_m | h9_number | h9_surface | h9-length-f | h9-length-m | h9-number | h9-surface | h10_length_f | h10_length_m | h10_number | h10_surface | h10-length-f | h10-length-m | h10-number | h10-surface | h11_length_f | h11_length_m | h11_number | h11_surface | h11-length-f | h11-length-m | h11-number | h11-surface | h12_length_f | h12_length_m | h12_number | h12_surface | h12-length-f | h12-length-m | h12-number | h12-surface | hub | IATA | ICAO | image | image_alt | image_map | image_map_alt | image_map_caption | image_mapsize | image_size | image-width | image2 | image2_alt | image2_size | image2-width | LID | location | logo | metric_rwy | metric-elev | metric-rwy | module | name | nativename | nativename-a | nativename-r | occupants | opened | operating_base | operator | owner | owner_oper | owner-oper | passenger_services_ceased | publictransit | pushpin_image | pushpin_label | pushpin_label_position | pushpin_map | pushpin_map_alt | pushpin_map_caption | pushpin_mapsize | pushpin_mark | pushpin_marksize | pushpin_outside | pushpin_relief | r1_length_f | r1_length_m | r1_number | r1_surface | r1-length-f | r1-length-m | r1-number | r1-surface | r2_length_f | r2_length_m | r2_number | r2_surface | r2-length-f | r2-length-m | r2-number | r2-surface | r3_length_f | r3_length_m | r3_number | r3_surface | r3-length-f | r3-length-m | r3-number | r3-surface | r4_length_f | r4_length_m | r4_number | r4_surface | r4-length-f | r4-length-m | r4-number | r4-surface | r5_length_f | r5_length_m | r5_number | r5_surface | r5-length-f | r5-length-m | r5-number | r5-surface | r6_length_f | r6_length_m | r6_number | r6_surface | r6-length-f | r6-length-m | r6-number | r6-surface | r7_length_f | r7_length_m | r7_number | r7_surface | r7-length-f | r7-length-m | r7-number | r7-surface | r8_length_f | r8_length_m | r8_number | r8_surface | r8-length-f | r8-length-m | r8-number | r8-surface | r9_length_f | r9_length_m | r9_number | r9_surface | r9-length-f | r9-length-m | r9-number | r9-surface | r10_length_f | r10_length_m | r10_number | r10_surface | r10-length-f | r10-length-m | r10-number | r10-surface | r11_length_f | r11_length_m | r11_number | r11_surface | r11-length-f | r11-length-m | r11-number | r11-surface | r12_length_f | r12_length_m | r12_number | r12_surface | r12-length-f | r12-length-m | r12-number | r12-surface | stat_year | stat-year | stat1_data | stat1_header | stat1-data | stat1-header | stat2_data | stat2_header | stat2-data | stat2-header | stat3_data | stat3_header | stat3-data | stat3-header | stat4_data | stat4_header | stat4-data | stat4-header | stat5_data | stat5_header | stat5-data | stat5-header | stat6_data | stat6_header | stat6-data | stat6-header | stat7_data | stat7_header | stat7-data | stat7-header | stat8_data | stat8_header | stat8-data | stat8-header | summer | TC | timezone | type | used | utc | utcs | website | WMO | public_transit | metric_elev | native_name}}{{#invoke:Check for deprecated parameters|check | _category = {{main other|[[Category:Pages using infobox airport with deprecated parameters|_VALUE_]]}} | nativename = native_name | nativename-a = native_name | nativename-r = native_name | logo = image | image-width = image_size | image2-width = image2_size | owner-oper = owner_oper | city-served = area_served | area-served = area_served | metric-rwy = metric_rwy | metric-elev = metric_elev | r1-number = r1_number | r1-length-m = r1_length_m | r1-length-f = r1_length_f | r1-surface = r1_surface | r2-number = r2_number | r2-length-m = r2_length_m | r2-length-f = r2_length_f | r2-surface = r2_surface | r3-number = r3_number | r3-length-m = r3_length_m | r3-length-f = r3_length_f | r3-surface = r3_surface | r4-number = r4_number | r4-length-m = r4_length_m | r4-length-f = r4_length_f | r4-surface = r4_surface | r5-number = r5_number | r5-length-m = r5_length_m | r5-length-f = r5_length_f | r5-surface = r5_surface | r6-number = r6_number | r6-length-m = r6_length_m | r6-length-f = r6_length_f | r6-surface = r6_surface | r7-number = r7_number | r7-length-m = r7_length_m | r7-length-f = r7_length_f | r7-surface = r7_surface | r8-number = r8_number | r8-length-m = r8_length_m | r8-length-f = r8_length_f | r8-surface = r8_surface | r9-number = r9_number | r9-length-m = r9_length_m | r9-length-f = r9_length_f | r9-surface = r9_surface | r10-number = r10_number | r10-length-m = r10_length_m | r10-length-f = r10_length_f | r10-surface = r10_surface | r11-number = r11_number | r11-length-m = r11_length_m | r11-length-f = r11_length_f | r11-surface = r11_surface | r12-number = r12_number | r12-length-m = r12_length_m | r12-length-f = r12_length_f | r12-surface = r12_surface | h1-number = h1_number | h1-length-m = h1_length_m | h1-length-f = h1_length_f | h1-surface = h1_surface | h2-number = h2_number | h2-length-m = h2_length_m | h2-length-f = h2_length_f | h2-surface = h2_surface | h3-number = h3_number | h3-length-m = h3_length_m | h3-length-f = h3_length_f | h3-surface = h3_surface | h4-number = h4_number | h4-length-m = h4_length_m | h4-length-f = h4_length_f | h4-surface = h4_surface | h5-number = h5_number | h5-length-m = h5_length_m | h5-length-f = h5_length_f | h5-surface = h5_surface | h6-number = h6_number | h6-length-m = h6_length_m | h6-length-f = h6_length_f | h6-surface = h6_surface | h7-number = h7_number | h7-length-m = h7_length_m | h7-length-f = h7_length_f | h7-surface = h7_surface | h8-number = h8_number | h8-length-m = h8_length_m | h8-length-f = h8_length_f | h8-surface = h8_surface | h9-number = h9_number | h9-length-m = h9_length_m | h9-length-f = h9_length_f | h9-surface = h9_surface | h10-number = h10_number | h10-length-m = h10_length_m | h10-length-f = h10_length_f | h10-surface = h10_surface | h11-number = h11_number | h11-length-m = h11_length_m | h11-length-f = h11_length_f | h11-surface = h11_surface | h12-number = h12_number | h12-length-m = h12_length_m | h12-length-f = h12_length_f | h12-surface = h12_surface | stat-year = stat_year | stat1-header = stat1_header | stat1-data = stat1_data | stat2-header = stat2_header | stat2-data = stat2_data | stat3-header = stat3_header | stat3-data = stat3_data | stat4-header = stat4_header | stat4-data = stat4_data | stat5-header = stat5_header | stat5-data = stat5_data | stat6-header = stat6_header | stat6-data = stat6_data | stat7-header = stat7_header | stat7-data = stat7_data | stat8-header = stat8_header | stat8-data = stat8_data }}<noinclude>{{documentation}}<!-- Please add categories and interwikis to the /doc subpage, not here. --></noinclude> f4fodxp1j1a5wl0tulqul9f6g1mdllh 746156 746155 2026-06-12T21:51:51Z Robertsky 51025 1 revision imported from [[:en:Template:Infobox_airport]]: for workshop activity 746155 wikitext text/x-wiki {{#if:{{Has short description}} |<!--Do nothing--> |{{main other|{{#invoke:Type in location|main|Airport|{{{location|}}}}}}}}}{{infobox | bodyclass = ib-airport vcard | templatestyles = Infobox airport/styles.css | above = <includeonly><div class="fn org">{{#invoke:string|replace|{{if empty|{{{name|}}}|{{BASEPAGENAME}}}}| |<br />|plain=false}}</div></includeonly><!-- -->{{#if:{{{ensign|}}}|{{#invoke:InfoboxImage|InfoboxImage|image={{{ensign|}}}|size={{{ensign_size|}}}|sizedefault=90px|alt={{{ensign_alt|}}}}}}}<!-- -->{{#if:{{{nativename|}}}|<div class="nickname">{{{nativename}}}</div>}}<!-- -->{{#if:{{{native_name|}}}|<div class="nickname">{{{native_name}}}</div>}}<!-- -->{{#if:{{{nativename-a|}}}|<div class="nickname">{{{nativename-a}}}</div>}}<!-- -->{{#if:{{{nativename-r|}}}|<div class="nickname">{{{nativename-r}}}</div>}} | image = {{#invoke:InfoboxImage|InfoboxImage|image={{if empty|{{{image|}}}|{{{logo|}}}}}|size={{if empty|{{{image_size|}}}|{{{image-width|}}}}}|sizedefault=250px|upright=1|alt={{{image_alt|}}}}} | caption = {{{caption|}}} | image2 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image2|}}}|size={{if empty|{{{image2_size|}}}|{{{image2-width|}}}}}|sizedefault=250px|upright=1|alt={{{image2_alt|}}}}} | caption2 = {{{caption2|}}} | rowclass1 = ib-airport-codes | data1 = <includeonly>{{hlist |1=<span class="nowrap">[[IATA airport code|IATA]]: {{#if:{{{IATA|}}}|<span class="nickname">{{{IATA}}}</span>|''none''}}</span> |2=<span class="nowrap">[[ICAO airport code|ICAO]]: {{#if:{{{ICAO|}}}|<span class="nickname">{{{ICAO}}}</span>|''none''}}</span> |3={{#if:{{{FAA|}}}|<span class="nowrap">[[Federal Aviation Administration|FAA]] [[Location identifier#FAA identifier|LID]]: <span class="nickname">{{{FAA}}}</span></span>}} |4={{#if:{{{TC|}}} |<span class="nowrap">[[Transport Canada|TC]] [[Location identifier#Transport Canada identifier|LID]]: <span class="nickname">{{{TC}}}</span></span>}} |5={{#if:{{{LID|}}}|<span class="nowrap">[[Location identifier|LID]]: <span class="nickname">{{{LID}}}</span></span>}} |6={{#if:{{{GPS|}}}|<span class="nowrap">[[Global Positioning System|GPS]]: <span class="nickname">{{{GPS}}}</span></span>}} |7={{#if:{{{WMO|}}}|<span class="nowrap">[[Location identifier#WMO station identifiers|WMO]]: <span class="nickname">{{{WMO}}}</span></span>}} }}</includeonly> | header2 = <includeonly>Summary</includeonly> | label3 = Airport type | class3 = category | data3 = {{{type|}}} | rowclass4 = note | label4 = {{#if:{{{owner-oper|}}}{{{owner_oper|}}}|Owner/Operator|Owner}} | data4 = {{if empty|{{{owner-oper|}}}|{{{owner_oper|}}}|{{{owner|}}}}} | rowclass5 = note | label5 = {{#if:{{{owner-oper|}}}{{{owner_oper|}}}| |Operator}} | data5 = {{#if:{{{owner-oper|}}}{{{owner_oper|}}}| |{{{operator|}}}}} | label6 = Serves | data6 = {{if empty|{{{city-served|}}}|{{{area-served|}}}|{{{area_served|}}}}} | label7 = Location | class7 = label | data7 = {{{location|}}} | label8 = Opened | data8 = {{{opened|}}} | label9 = Closed | data9 = {{{closed|}}} | label10 = Passenger services ceased | data10 = {{{passenger_services_ceased|}}} | label11 = [[Airline hub|Hub]] for | data11 = {{{hub|}}} | label12 = [[Focus city]] for | data12 = {{{focus_city|}}} | label13 = Operating base for | data13 = {{{operating_base|}}} | label14 = Built | data14 = {{{built|}}} | label15 = In use | data15 = {{{used|}}} | label16 = Commander | data16 = {{{commander|}}} | label17 = Occupants | data17 = {{{occupants|}}} | label18 = [[Time zone]] | data18 = {{#if: {{{timezone|}}} {{{utc|}}}| {{{timezone}}} ({{{utc}}}) }} | label19 = &nbsp;•&nbsp;Summer ([[Daylight saving time|DST]]) | data19 = {{#if: {{{summer|}}} {{{utcs|}}}| {{{summer}}} ({{{utcs}}}) }} | label20 = Elevation&nbsp;[[Height above sea level|AMSL]] | data20 = {{#if:{{{elevation-f|{{{elevation_f|}}}}}} {{{elevation-m|{{{elevation_m|}}}}}}{{{elevation_f|}}} {{{elevation_m|}}} |{{#if:{{{metric-elev|}}}{{{metric_elev|}}} | {{#if:{{{elevation-m|{{{elevation_m|}}}}}}| {{formatnum: {{replace|{{{elevation-m|{{{elevation_m|}}}}}}|,|}} }}&nbsp;m| {{convert|{{{elevation-f|{{{elevation_f|}}}}}}|ft|m|0|disp=output only}} }} / {{#if: {{{elevation-f|{{{elevation_f|}}}}}} | {{formatnum: {{replace|{{{elevation-f|{{{elevation_f|}}}}}}|,|}} }}&nbsp;ft |{{convert|{{{elevation-m|{{{elevation_m|}}}}}}|m|ft|0|disp=output only}} }} | {{#if:{{{elevation-f|{{{elevation_f|}}}}}}| {{formatnum: {{replace|{{{elevation-f|{{{elevation_f|}}}}}}|,|}} }}&nbsp;ft| {{convert|{{{elevation-m|{{{elevation_m|}}}}}}|m|ft|0|disp=output only}} }} / {{#if: {{{elevation-m|{{{elevation_m|}}}}}} | {{formatnum: {{replace|{{{elevation-m|{{{elevation_m|}}}}}}|,|}} }}&nbsp;m |{{convert|{{{elevation-f|{{{elevation_f|}}}}}}|ft|m|0|disp=output only}} }} }} }} | label21 = [[Geographic coordinate system|Coordinates]] | data21 = {{#if: {{{coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates}}}|type:airport}}}} | label30 = Public transit access | data30 = {{if empty|{{{publictransit|}}}|{{{public_transit|}}}}} | label31 = Website | class31 = plainlinksneverexpand | data31 = {{{website|}}} | header32 = {{#switch:{{#if:{{{pushpin_map|}}}|1}}{{#if:{{{image_map|}}}|1}}{{yesno|{{{mapframe|}}}|yes=1|def=}} |1=Map |11|111=Maps}} | data33 = {{#if:{{{image_map|}}}| {{#invoke:InfoboxImage|InfoboxImage|image={{{image_map|}}}|size={{{image_mapsize|}}}|sizedefault=250px|upright=1|alt={{{image_map_alt|}}}|title={{{image_map_caption|Location of {{if empty|{{{name|}}}|{{BASEPAGENAME}}}}}}}}}{{#if:{{{image_map_caption|}}}|<br />{{{image_map_caption}}}}} }} | data34 = {{#if:{{{pushpin_map|}}}|{{Location map|{{{pushpin_map|}}} |label = {{#ifeq: {{lc: {{{pushpin_label_position|}}} }} | none | | {{#if:{{{pushpin_label|}}}|{{{pushpin_label}}}|{{if empty|{{{name|}}}|{{BASEPAGENAME}}}}}} }} |alt = {{{pushpin_map_alt|}}} |mark = {{if empty|{{{pushpin_mark|}}}|Airplane silhouette.svg }} |marksize = {{if empty|{{{pushpin_marksize|}}}|10 }} |coordinates = {{{coordinates|}}} |float = center |caption = {{{pushpin_map_caption|}}} |border = infobox |outside = {{{pushpin_outside|}}}<!-- pin is outside the map --> |position = {{{pushpin_label_position|}}} |width = {{{pushpin_mapsize|}}} |default_width = 250 |relief = {{{pushpin_relief|}}} |AlternativeMap = {{{pushpin_image|}}} }} }} | data35 = {{#invoke:Infobox mapframe | autoWithCaption | onByDefault = {{#if:{{{pushpin_map|}}}{{{image_map|}}}|no|yes}} | mapframe-marker = airport | mapframe-wikidata = yes | mapframe-width = 250 | mapframe-caption = Interactive map of {{if empty|{{{name|}}}|{{BASEPAGENAME}}}} }} | header37 = {{#if: {{{r1-number|}}} {{{r1-length-f|}}} {{{r1-length-m|}}} {{{r1-surface|}}} {{{r1_number|}}} {{{r1_length_f|}}} {{{r1_length_m|}}} {{{r1_surface|}}}|[[Runway|Runways]]}} | data38 = {{#if: {{{r1-number|}}} {{{r1-length-f|}}} {{{r1-length-m|}}} {{{r1-surface|}}} {{{r1_number|}}} {{{r1_length_f|}}} {{{r1_length_m|}}} {{{r1_surface|}}} |{{Infobox airport/datatable | nlabel = [[Runway#Naming|Direction]] | metric = {{if empty|{{{metric-rwy|}}}| {{{metric_rwy|}}} }} | n1 = {{{r1-number|{{{r1_number|}}}}}} | l1-m = {{{r1-length-m|{{{r1_length_m|}}}}}} | l1-f = {{{r1-length-f|{{{r1_length_f|}}}}}} | s1 = {{{r1-surface|{{{r1_surface|}}}}}} | n2 = {{{r2-number|{{{r2_number|}}}}}} | l2-m = {{{r2-length-m|{{{r2_length_m|}}}}}} | l2-f = {{{r2-length-f|{{{r2_length_f|}}}}}} | s2 = {{{r2-surface|{{{r2_surface|}}}}}} | n3 = {{{r3-number|{{{r3_number|}}}}}} | l3-m = {{{r3-length-m|{{{r3_length_m|}}}}}} | l3-f = {{{r3-length-f|{{{r3_length_f|}}}}}} | s3 = {{{r3-surface|{{{r3_surface|}}}}}} | n4 = {{{r4-number|{{{r4_number|}}}}}} | l4-m = {{{r4-length-m|{{{r4_length_m|}}}}}} | l4-f = {{{r4-length-f|{{{r4_length_f|}}}}}} | s4 = {{{r4-surface|{{{r4_surface|}}}}}} | n5 = {{{r5-number|{{{r5_number|}}}}}} | l5-m = {{{r5-length-m|{{{r5_length_m|}}}}}} | l5-f = {{{r5-length-f|{{{r5_length_f|}}}}}} | s5 = {{{r5-surface|{{{r5_surface|}}}}}} | n6 = {{{r6-number|{{{r6_number|}}}}}} | l6-m = {{{r6-length-m|{{{r6_length_m|}}}}}} | l6-f = {{{r6-length-f|{{{r6_length_f|}}}}}} | s6 = {{{r6-surface|{{{r6_surface|}}}}}} | n7 = {{{r7-number|{{{r7_number|}}}}}} | l7-m = {{{r7-length-m|{{{r7_length_m|}}}}}} | l7-f = {{{r7-length-f|{{{r7_length_f|}}}}}} | s7 = {{{r7-surface|{{{r7_surface|}}}}}} | n8 = {{{r8-number|{{{r8_number|}}}}}} | l8-m = {{{r8-length-m|{{{r8_length_m|}}}}}} | l8-f = {{{r8-length-f|{{{r8_length_f|}}}}}} | s8 = {{{r8-surface|{{{r8_surface|}}}}}} | n9 = {{{r9-number|{{{r9_number|}}}}}} | l9-m = {{{r9-length-m|{{{r9_length_m|}}}}}} | l9-f = {{{r9-length-f|{{{r9_length_f|}}}}}} | s9 = {{{r9-surface|{{{r9_surface|}}}}}} | n10 = {{{r10-number|{{{r10_number|}}}}}} | l10-m = {{{r10-length-m|{{{r10_length_m|}}}}}} | l10-f = {{{r10-length-f|{{{r10_length_f|}}}}}} | s10 = {{{r10-surface|{{{r10_surface|}}}}}} | n11 = {{{r11-number|{{{r11_number|}}}}}} | l11-m = {{{r11-length-m|{{{r11_length_m|}}}}}} | l11-f = {{{r11-length-f|{{{r11_length_f|}}}}}} | s11 = {{{r11-surface|{{{r11_surface|}}}}}} | n12 = {{{r12-number|{{{r12_number|}}}}}} | l12-m = {{{r12-length-m|{{{r12_length_m|}}}}}} | l12-f = {{{r12-length-f|{{{r12_length_f|}}}}}} | s12 = {{{r12-surface|{{{r12_surface|}}}}}} }}}} | header39 = {{#if: {{{h1-number|{{{h1_number|}}}}}} {{{h1-length-f|{{{h1_length_f|}}}}}} {{{h1-length-m|{{{h1_length_m|}}}}}} {{{h1-surface|{{{h1_surface|}}}}}}|[[Helipad|Helipads]]}} | data40 = {{#if: {{{h1-number|{{{h1_number|}}}}}} {{{h1-length-f|{{{h1_length_f|}}}}}} {{{h1-length-m|{{{h1_length_m|}}}}}} {{{h1-surface|{{{h1_surface|}}}}}} |{{Infobox airport/datatable | nlabel = Number | metric = {{{metric-rwy|{{{metric_rwy|}}}}}} | n1 = {{{h1-number|{{{h1_number|}}}}}} | l1-m = {{{h1-length-m|{{{h1_length_m|}}}}}} | l1-f = {{{h1-length-f|{{{h1_length_f|}}}}}} | s1 = {{{h1-surface|{{{h1_surface|}}}}}} | n2 = {{{h2-number|{{{h2_number|}}}}}} | l2-m = {{{h2-length-m|{{{h2_length_m|}}}}}} | l2-f = {{{h2-length-f|{{{h2_length_f|}}}}}} | s2 = {{{h2-surface|{{{h2_surface|}}}}}} | n3 = {{{h3-number|{{{h3_number|}}}}}} | l3-m = {{{h3-length-m|{{{h3_length_m|}}}}}} | l3-f = {{{h3-length-f|{{{h3_length_f|}}}}}} | s3 = {{{h3-surface|{{{h3_surface|}}}}}} | n4 = {{{h4-number|{{{h4_number|}}}}}} | l4-m = {{{h4-length-m|{{{h4_length_m|}}}}}} | l4-f = {{{h4-length-f|{{{h4_length_f|}}}}}} | s4 = {{{h4-surface|{{{h4_surface|}}}}}} | n5 = {{{h5-number|{{{h5_number|}}}}}} | l5-m = {{{h5-length-m|{{{h5_length_m|}}}}}} | l5-f = {{{h5-length-f|{{{h5_length_f|}}}}}} | s5 = {{{h5-surface|{{{h5_surface|}}}}}} | n6 = {{{h6-number|{{{h6_number|}}}}}} | l6-m = {{{h6-length-m|{{{h6_length_m|}}}}}} | l6-f = {{{h6-length-f|{{{h6_length_f|}}}}}} | s6 = {{{h6-surface|{{{h6_surface|}}}}}} | n7 = {{{h7-number|{{{h7_number|}}}}}} | l7-m = {{{h7-length-m|{{{h7_length_m|}}}}}} | l7-f = {{{h7-length-f|{{{h7_length_f|}}}}}} | s7 = {{{h7-surface|{{{h7_surface|}}}}}} | n8 = {{{h8-number|{{{h8_number|}}}}}} | l8-m = {{{h8-length-m|{{{h8_length_m|}}}}}} | l8-f = {{{h8-length-f|{{{h8_length_f|}}}}}} | s8 = {{{h8-surface|{{{h8_surface|}}}}}} | n9 = {{{h9-number|{{{h9_number|}}}}}} | l9-m = {{{h9-length-m|{{{h9_length_m|}}}}}} | l9-f = {{{h9-length-f|{{{h9_length_f|}}}}}} | s9 = {{{h9-surface|{{{h9_surface|}}}}}} | n10 = {{{h10-number|{{{h10_number|}}}}}} | l10-m = {{{h10-length-m|{{{h10_length_m|}}}}}} | l10-f = {{{h10-length-f|{{{h10_length_f|}}}}}} | s10 = {{{h10-surface|{{{h10_surface|}}}}}} | n11 = {{{h11-number|{{{h11_number|}}}}}} | l11-m = {{{h11-length-m|{{{h11_length_m|}}}}}} | l11-f = {{{h11-length-f|{{{h11_length_f|}}}}}} | s11 = {{{h11-surface|{{{h11_surface|}}}}}} | n12 = {{{h12-number|{{{h12_number|}}}}}} | l12-m = {{{h12-length-m|{{{h12_length_m|}}}}}} | l12-f = {{{h12-length-f|{{{h12_length_f|}}}}}} | s12 = {{{h12-surface|{{{h12_surface|}}}}}} }}}} | header41 = {{#if:{{{stat1-data|{{{stat1_data|}}}}}}{{{stat2-data|{{{stat2_data|}}}}}}{{{stat3-data|{{{stat3_data|}}}}}}{{{stat4-data|{{{stat4_data|}}}}}}{{{stat5-data|{{{stat5_data|}}}}}}{{{stat6-data|{{{stat6_data|}}}}}}{{{stat7-data|{{{stat7_data|}}}}}}{{{stat8-data|{{{stat8_data|}}}}}} | Statistics {{#if:{{{stat-year|{{{stat_year|}}}}}}|({{{stat-year|{{{stat_year|}}}}}})}} }} | data50 = {{#if:{{{stat1-data|{{{stat1_data|}}}}}}{{{stat2-data|{{{stat2_data|}}}}}}{{{stat3-data|{{{stat3_data|}}}}}}{{{stat4-data|{{{stat4_data|}}}}}}{{{stat5-data|{{{stat5_data|}}}}}}{{{stat6-data|{{{stat6_data|}}}}}}{{{stat7-data|{{{stat7_data|}}}}}}{{{stat8-data|{{{stat8_data|}}}}}} | {{Infobox | subbox = yes | label1 = {{{stat1-header|{{{stat1_header|}}}}}} | data1 = {{{stat1-data|{{{stat1_data|}}}}}} | label2 = {{{stat2-header|{{{stat2_header|}}}}}} | data2 = {{{stat2-data|{{{stat2_data|}}}}}} | label3 = {{{stat3-header|{{{stat3_header|}}}}}} | data3 = {{{stat3-data|{{{stat3_data|}}}}}} | label4 = {{{stat4-header|{{{stat4_header|}}}}}} | data4 = {{{stat4-data|{{{stat4_data|}}}}}} | label5 = {{{stat5-header|{{{stat5_header|}}}}}} | data5 = {{{stat5-data|{{{stat5_data|}}}}}} | label6 = {{{stat6-header|{{{stat6_header|}}}}}} | data6 = {{{stat6-data|{{{stat6_data|}}}}}} | label7 = {{{stat7-header|{{{stat7_header|}}}}}} | data7 = {{{stat7-data|{{{stat7_data|}}}}}} | label8 = {{{stat8-header|{{{stat8_header|}}}}}} | data8 = {{{stat8-data|{{{stat8_data|}}}}}} }} }} | rowclass51 = ib-airport-footnotes | data51 = {{#if:{{{footnotes|}}}|{{{footnotes}}}}} | data52 = {{if empty|{{{embed|}}}|{{{module|}}}}} }}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox airport with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox airport]] with unknown parameter "_VALUE_"|ignoreblank=y|mapframe_args=y| area_served | area-served | built | caption | caption2 | city-served | closed | commander | coordinates | elevation_f | elevation_m | elevation-f | elevation-m | embed | ensign | ensign_alt | ensign_size | FAA | focus_city | footnotes | GPS | h1_length_f | h1_length_m | h1_number | h1_surface | h1-length-f | h1-length-m | h1-number | h1-surface | h2_length_f | h2_length_m | h2_number | h2_surface | h2-length-f | h2-length-m | h2-number | h2-surface | h3_length_f | h3_length_m | h3_number | h3_surface | h3-length-f | h3-length-m | h3-number | h3-surface | h4_length_f | h4_length_m | h4_number | h4_surface | h4-length-f | h4-length-m | h4-number | h4-surface | h5_length_f | h5_length_m | h5_number | h5_surface | h5-length-f | h5-length-m | h5-number | h5-surface | h6_length_f | h6_length_m | h6_number | h6_surface | h6-length-f | h6-length-m | h6-number | h6-surface | h7_length_f | h7_length_m | h7_number | h7_surface | h7-length-f | h7-length-m | h7-number | h7-surface | h8_length_f | h8_length_m | h8_number | h8_surface | h8-length-f | h8-length-m | h8-number | h8-surface | h9_length_f | h9_length_m | h9_number | h9_surface | h9-length-f | h9-length-m | h9-number | h9-surface | h10_length_f | h10_length_m | h10_number | h10_surface | h10-length-f | h10-length-m | h10-number | h10-surface | h11_length_f | h11_length_m | h11_number | h11_surface | h11-length-f | h11-length-m | h11-number | h11-surface | h12_length_f | h12_length_m | h12_number | h12_surface | h12-length-f | h12-length-m | h12-number | h12-surface | hub | IATA | ICAO | image | image_alt | image_map | image_map_alt | image_map_caption | image_mapsize | image_size | image-width | image2 | image2_alt | image2_size | image2-width | LID | location | logo | metric_rwy | metric-elev | metric-rwy | module | name | nativename | nativename-a | nativename-r | occupants | opened | operating_base | operator | owner | owner_oper | owner-oper | passenger_services_ceased | publictransit | pushpin_image | pushpin_label | pushpin_label_position | pushpin_map | pushpin_map_alt | pushpin_map_caption | pushpin_mapsize | pushpin_mark | pushpin_marksize | pushpin_outside | pushpin_relief | r1_length_f | r1_length_m | r1_number | r1_surface | r1-length-f | r1-length-m | r1-number | r1-surface | r2_length_f | r2_length_m | r2_number | r2_surface | r2-length-f | r2-length-m | r2-number | r2-surface | r3_length_f | r3_length_m | r3_number | r3_surface | r3-length-f | r3-length-m | r3-number | r3-surface | r4_length_f | r4_length_m | r4_number | r4_surface | r4-length-f | r4-length-m | r4-number | r4-surface | r5_length_f | r5_length_m | r5_number | r5_surface | r5-length-f | r5-length-m | r5-number | r5-surface | r6_length_f | r6_length_m | r6_number | r6_surface | r6-length-f | r6-length-m | r6-number | r6-surface | r7_length_f | r7_length_m | r7_number | r7_surface | r7-length-f | r7-length-m | r7-number | r7-surface | r8_length_f | r8_length_m | r8_number | r8_surface | r8-length-f | r8-length-m | r8-number | r8-surface | r9_length_f | r9_length_m | r9_number | r9_surface | r9-length-f | r9-length-m | r9-number | r9-surface | r10_length_f | r10_length_m | r10_number | r10_surface | r10-length-f | r10-length-m | r10-number | r10-surface | r11_length_f | r11_length_m | r11_number | r11_surface | r11-length-f | r11-length-m | r11-number | r11-surface | r12_length_f | r12_length_m | r12_number | r12_surface | r12-length-f | r12-length-m | r12-number | r12-surface | stat_year | stat-year | stat1_data | stat1_header | stat1-data | stat1-header | stat2_data | stat2_header | stat2-data | stat2-header | stat3_data | stat3_header | stat3-data | stat3-header | stat4_data | stat4_header | stat4-data | stat4-header | stat5_data | stat5_header | stat5-data | stat5-header | stat6_data | stat6_header | stat6-data | stat6-header | stat7_data | stat7_header | stat7-data | stat7-header | stat8_data | stat8_header | stat8-data | stat8-header | summer | TC | timezone | type | used | utc | utcs | website | WMO | public_transit | metric_elev | native_name}}{{#invoke:Check for deprecated parameters|check | _category = {{main other|[[Category:Pages using infobox airport with deprecated parameters|_VALUE_]]}} | nativename = native_name | nativename-a = native_name | nativename-r = native_name | logo = image | image-width = image_size | image2-width = image2_size | owner-oper = owner_oper | city-served = area_served | area-served = area_served | metric-rwy = metric_rwy | metric-elev = metric_elev | r1-number = r1_number | r1-length-m = r1_length_m | r1-length-f = r1_length_f | r1-surface = r1_surface | r2-number = r2_number | r2-length-m = r2_length_m | r2-length-f = r2_length_f | r2-surface = r2_surface | r3-number = r3_number | r3-length-m = r3_length_m | r3-length-f = r3_length_f | r3-surface = r3_surface | r4-number = r4_number | r4-length-m = r4_length_m | r4-length-f = r4_length_f | r4-surface = r4_surface | r5-number = r5_number | r5-length-m = r5_length_m | r5-length-f = r5_length_f | r5-surface = r5_surface | r6-number = r6_number | r6-length-m = r6_length_m | r6-length-f = r6_length_f | r6-surface = r6_surface | r7-number = r7_number | r7-length-m = r7_length_m | r7-length-f = r7_length_f | r7-surface = r7_surface | r8-number = r8_number | r8-length-m = r8_length_m | r8-length-f = r8_length_f | r8-surface = r8_surface | r9-number = r9_number | r9-length-m = r9_length_m | r9-length-f = r9_length_f | r9-surface = r9_surface | r10-number = r10_number | r10-length-m = r10_length_m | r10-length-f = r10_length_f | r10-surface = r10_surface | r11-number = r11_number | r11-length-m = r11_length_m | r11-length-f = r11_length_f | r11-surface = r11_surface | r12-number = r12_number | r12-length-m = r12_length_m | r12-length-f = r12_length_f | r12-surface = r12_surface | h1-number = h1_number | h1-length-m = h1_length_m | h1-length-f = h1_length_f | h1-surface = h1_surface | h2-number = h2_number | h2-length-m = h2_length_m | h2-length-f = h2_length_f | h2-surface = h2_surface | h3-number = h3_number | h3-length-m = h3_length_m | h3-length-f = h3_length_f | h3-surface = h3_surface | h4-number = h4_number | h4-length-m = h4_length_m | h4-length-f = h4_length_f | h4-surface = h4_surface | h5-number = h5_number | h5-length-m = h5_length_m | h5-length-f = h5_length_f | h5-surface = h5_surface | h6-number = h6_number | h6-length-m = h6_length_m | h6-length-f = h6_length_f | h6-surface = h6_surface | h7-number = h7_number | h7-length-m = h7_length_m | h7-length-f = h7_length_f | h7-surface = h7_surface | h8-number = h8_number | h8-length-m = h8_length_m | h8-length-f = h8_length_f | h8-surface = h8_surface | h9-number = h9_number | h9-length-m = h9_length_m | h9-length-f = h9_length_f | h9-surface = h9_surface | h10-number = h10_number | h10-length-m = h10_length_m | h10-length-f = h10_length_f | h10-surface = h10_surface | h11-number = h11_number | h11-length-m = h11_length_m | h11-length-f = h11_length_f | h11-surface = h11_surface | h12-number = h12_number | h12-length-m = h12_length_m | h12-length-f = h12_length_f | h12-surface = h12_surface | stat-year = stat_year | stat1-header = stat1_header | stat1-data = stat1_data | stat2-header = stat2_header | stat2-data = stat2_data | stat3-header = stat3_header | stat3-data = stat3_data | stat4-header = stat4_header | stat4-data = stat4_data | stat5-header = stat5_header | stat5-data = stat5_data | stat6-header = stat6_header | stat6-data = stat6_data | stat7-header = stat7_header | stat7-data = stat7_data | stat8-header = stat8_header | stat8-data = stat8_data }}<noinclude>{{documentation}}<!-- Please add categories and interwikis to the /doc subpage, not here. --></noinclude> f4fodxp1j1a5wl0tulqul9f6g1mdllh Module:Infobox mapframe 828 176046 746165 2025-11-24T04:39:55Z en>Hike395 0 rm controversial warning message 746165 Scribunto text/plain local mf = require('Module:Mapframe') local getArgs = require('Module:Arguments').getArgs local yesno = require('Module:Yesno') local infoboxImage = require('Module:InfoboxImage').InfoboxImage -- Defaults local DEFAULT_FRAME_WIDTH = "270" local DEFAULT_FRAME_HEIGHT = "200" local DEFAULT_ZOOM = 10 local DEFAULT_GEOMASK_STROKE_WIDTH = "1" local DEFAULT_GEOMASK_STROKE_COLOR = "#777777" local DEFAULT_GEOMASK_FILL = "#888888" local DEFAULT_GEOMASK_FILL_OPACITY = "0.25" local DEFAULT_SHAPE_STROKE_WIDTH = "2" local DEFAULT_SHAPE_STROKE_COLOR = "#FF0000" local DEFAULT_SHAPE_FILL = "#606060" local DEFAULT_SHAPE_FILL_OPACITY = "0.1" local DEFAULT_LINE_STROKE_WIDTH = "5" local DEFAULT_LINE_STROKE_COLOR = "#FF0000" local DEFAULT_MARKER_COLOR = "#5E74F3" local util = {} function util.noop(info) local DEFAULT_NOOP_OUTPUT = "" -- uncomment this when debugging -- DEFAULT_NOOP_OUTPUT = "debug: mapframe no-op: " .. info -- mw.log(DEFAULT_NOOP_OUTPUT) return DEFAULT_NOOP_OUTPUT end -- Trim whitespace from args, and remove empty args function util.trimArgs(argsTable) local cleanArgs = {} for key, val in pairs(argsTable) do if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val ~= '' then cleanArgs[key] = val end else cleanArgs[key] = val end end return cleanArgs end function util.getBestStatement(item_id, property_id) if not(item_id) or not(mw.wikibase.isValidEntityId(item_id)) or not(mw.wikibase.entityExists(item_id)) then return false end local statements = mw.wikibase.getBestStatements(item_id, property_id) if not statements or #statements == 0 then return false end local hasNoValue = ( statements[1].mainsnak and statements[1].mainsnak.snaktype == 'novalue' ) if hasNoValue then return false end return statements[1] end function util.hasWikidataProperty(item_id, property_id) return util.getBestStatement(item_id, property_id) and true or false end function util.getStatementValue(statement) return statement and statement.mainsnak and statement.mainsnak.datavalue and statement.mainsnak.datavalue.value or nil end function util.relatedEntity(item_id, property_id) local value = util.getStatementValue( util.getBestStatement(item_id, property_id) ) return value and value.id or false end function util.idType(id) if not id then return nil elseif mw.ustring.match(id, "[Pp]%d+") then return "property" elseif mw.ustring.match(id, "[Qq]%d+") then return "item" else return nil end end function util.shouldAutoRun(frame) -- Check if should be running local pargs = frame.getParent(frame).args local explicitlyOn = yesno(mw.text.trim(pargs.mapframe or "")) -- true of false or nil if pargs.coordinates == "&#123;&#123;&#123;coordinates&#125;&#125;&#125;" then explicitlyOn = false end local onByDefault = (explicitlyOn == nil) and yesno(mw.text.trim(frame.args.onByDefault or ""), false) -- true or false return explicitlyOn or onByDefault end function util.argsFromAuto(frame) -- Get args from the frame (invoke call) and the parent (template call). -- Frame arguments are default values which are overridden by parent values -- when both are present local args = getArgs(frame, {parentFirst = true}) -- Discard args not prefixed with "mapframe-", remove that prefix from those that remain local fixedArgs = {} for name, val in pairs(args) do local fixedName = string.match(name, "^mapframe%-(.+)$" ) if fixedName then fixedArgs[fixedName] = val -- allow coord, coordinates, etc to be unprefixed elseif name == "coordinates" or name == "coord" or name == "coordinate" and not fixedArgs.coord then fixedArgs.coord = val -- allow id, qid to be unprefixed, map to id (if not already present) elseif name == "id" or name == "qid" and not fixedArgs.id then fixedArgs.id = val -- allow captionstyle to be unprefixed, for compatibility with [[Module:Infobox]] elseif name == "captionstyle" and not fixedArgs.captionstyle then fixedArgs.captionstyle = val end end return fixedArgs end function util.parseCustomWikitext(customWikitext) -- infoboxImage will format an image if given wikitext containing an -- image, or else pass through the wikitext unmodified return infoboxImage({ args = { image = customWikitext } }) end function util.trackAndWarn(trackingCat, warning) local title = mw.title.getCurrentTitle() local results = title and title.namespace == 0 and trackingCat and '[[Category:'..trackingCat..']]' or '' if warning then local warn = require('Module:If preview')._warning results = results..warn({warning}) end return results end function util.ternary(flag, other) other = other or 'other' flag = flag == 'none' and 'no' or flag local yesNoOut = yesno(flag,other) local yes = (yesNoOut == true) local no = (yesNoOut == false) return yes, no end local p = {} p._caption = function(args) if args.caption then return args.caption elseif args.switcher then return util.noop("no caption or switcher") end local maskItem local maskType = util.idType(args.geomask) if maskType == 'item' then maskItem = args.geomask elseif maskType == "property" then maskItem = util.relatedEntity(args.id or mw.wikibase.getEntityIdForCurrentPage(), args.geomask) end local maskItemLabel = maskItem and mw.wikibase.getLabel( maskItem ) return maskItemLabel and "Location in "..maskItemLabel or util.noop("missing maskItemLabel with type " .. (maskType or "nil") .. " and item " .. (maskItem or "nil")) end --A list of types for objects that are too small to allow Kartographer to take over zoom local tinyType = { landmark=true, railwaystation=true, edu=true, pass=true, camera=true } p._main = function(_config) -- accumulate tracking cats local tracking = '' -- `config` is the args passed to this module local config = util.trimArgs(_config) -- allow alias for config.coord config.coord = config.coord or config.coordinates -- Require wikidata item, or specified coords local wikidataId = config.id or mw.wikibase.getEntityIdForCurrentPage() if not(wikidataId) and not(config.coord) then return false, util.trackAndWarn('Pages using infobox mapframe with missing coordinates') end -- Require coords (specified or from wikidata), so that map will be centred somewhere -- (P625 = coordinate location) local wdCoordinates = util.getStatementValue(util.getBestStatement(wikidataId, 'P625')) if not (config.coord or wdCoordinates) then return false, util.trackAndWarn('Pages using infobox mapframe with missing coordinates') end -- `args` is the arguments which will be passed to the mapframe module local args = {} -- Some defaults/overrides for infobox presentation args.display = "inline" args.frame = "yes" args.plain = "yes" args["frame-width"] = config["frame-width"] or config.width or DEFAULT_FRAME_WIDTH args["frame-height"] = config["frame-height"] or config.height or DEFAULT_FRAME_HEIGHT args["frame-align"] = "center" args["frame-coord"] = config["frame-coordinates"] or config["frame-coord"] -- Note: config["coordinates"] or config["coord"] should not be used for the alignment of the frame; -- see talk page ( https://en.wikipedia.org/wiki/Special:Diff/876492931 ) -- deprecated lat and long parameters args["frame-lat"] = config["frame-lat"] or config["frame-latitude"] args["frame-long"] = config["frame-long"] or config["frame-longitude"] -- if zoom isn't specified from config, first check wikidata local zoom = config.zoom or util.getStatementValue(util.getBestStatement(wikidataId, 'P6592')) if not zoom then -- Calculate zoom from length or area (converted to km or km2) -- Zoom so that length or area is completely included in mapframe local getZoom = require('Module:Infobox dim')._zoom zoom = getZoom({length_km=config.length_km, length_mi=config.length_mi, width_km=config.width_km, width_mi=config.width_mi, area_km2=config.area_km2, area_mi2=config.area_mi2, area_ha=config.area_ha, area_acre=config.area_acre, type=config.type, population=config.population, viewport_px=math.min(args["frame-width"],args["frame-height"]), latitude=wdCoordinates and wdCoordinates.latitude}) end args.zoom = zoom or DEFAULT_ZOOM -- Use OSM relation ID if available; otherwise use geoshape if that is available -- (geoshape is required for defunct entities, which are outside OSM's scope) local hasOsmRelationId = util.hasWikidataProperty(wikidataId, 'P402') -- P402 is OSM relation ID local hasGeoshape = util.hasWikidataProperty(wikidataId, 'P3896') -- P3896 is geoshape local wikidataProvidesGeo = hasOsmRelationId or hasGeoshape -- determine marker argument value, determine whether to show marker local forcePoint, suppressPoint = util.ternary(config.point) local forceMarker, suppressMarker = util.ternary(config.marker,true) forcePoint = forcePoint or forceMarker suppressPoint = suppressPoint or suppressMarker local showMarker = not suppressPoint and (forcePoint or not wikidataProvidesGeo or config.coord) -- wikidata = "yes" turns on both shape and line -- wikidata = "no" turns off both shape and line -- otherwise show both if wikidata provides geo local forceWikidata, suppressWikidata = util.ternary(config.wikidata) local showShape = not suppressWikidata and (forceWikidata or wikidataProvidesGeo or not config.coord) local showLine = showShape -- determine shape parameter value, determine whether to show or suppress shape -- also determine whether to invert shape local forceShape, suppressShape = util.ternary(config.shape) showShape = wikidataId and not suppressShape and (forceShape or showShape) local shapeType = config.shape == 'inverse' and 'shape-inverse' or 'shape' -- determine line parameter value, determine whether to show or suppress line local forceLine, suppressLine = util.ternary(config.line) showLine = wikidataId and not suppressLine and (forceLine or showLine) local maskItem -- Switcher if config.switcher == "zooms" then -- switching between zoom levels local maxZoom = math.max(tonumber(args.zoom), 3) -- what zoom would have otherwise been (if 3 or more, otherwise 3) local minZoom = 1 -- completely zoomed out local midZoom = math.floor((maxZoom + minZoom)/2) -- midway between maxn and min args.switch = "zoomed in, zoomed midway, zoomed out" args.zoom = string.format("SWITCH:%d,%d,%d", maxZoom, midZoom, minZoom) elseif config.switcher == "auto" then -- switching between P276 and P131 areas with recursive lookup, e.g. item's city, -- that city's state, and that state's country args.zoom = nil -- let kartographer determine the zoom local maskLabels = {} local maskItems = {} local maskItemId = util.relatedEntity(wikidataId, "P276") or util.relatedEntity(wikidataId, "P131") local maskLabel = mw.wikibase.getLabel(maskItemId) while maskItemId and maskLabel and mw.text.trim(maskLabel) ~= "" do table.insert(maskLabels, maskLabel) table.insert(maskItems, maskItemId) maskItemId = maskItemId and util.relatedEntity(maskItemId, "P131") maskLabel = maskItemId and mw.wikibase.getLabel(maskItemId) end if #maskLabels > 1 then args.switch = table.concat(maskLabels, "###") maskItem = "SWITCH:" .. table.concat(maskItems, ",") elseif #maskLabels == 1 then maskItem = maskItemId[1] end elseif config.switcher == "geomasks" and config.geomask then -- switching between items in geomask parameter args.zoom = nil -- let kartographer determine the zoom local separator = (mw.ustring.find(config.geomask, "###", 0, true ) and "###") or (mw.ustring.find(config.geomask, ";", 0, true ) and ";") or "," local pattern = "%s*"..separator.."%s*" local maskItems = mw.text.split(mw.ustring.gsub(config.geomask, "SWITCH:", ""), pattern) local maskLabels = {} if #maskItems > 1 then for i, item in ipairs(maskItems) do table.insert(maskLabels, mw.wikibase.getLabel(item)) end args.switch = table.concat(maskLabels, "###") maskItem = "SWITCH:" .. table.concat(maskItems, ",") end end -- resolve geomask item id (if not using geomask switcher) if not maskItem then -- local maskType = util.idType(config.geomask) if maskType == 'item' then maskItem = config.geomask elseif maskType == "property" then maskItem = util.relatedEntity(wikidataId, config.geomask) end end -- if asking for shape or line from Wikidata -- and if Wikidata actually has shape/line data (wikidataProvidesGeo=true) -- and if no geomask -- and if zoom not explicitly set -- and if the object size inferred from its type is not too small -- then let Kartographer "take over" zoom if (showLine or showShape) and wikidataProvidesGeo and not maskItem and not config.zoom and not (config.type and tinyType[config.type]) then args.zoom = nil end if not maskItem and not showShape and not showLine and not showMarker then return false, util.trackAndWarn('Pages using infobox mapframe with no geometry','No geometry specified for mapframe') end -- Keep track of arg numbering local argNumber = '' local function incrementArgNumber() if argNumber == '' then argNumber = 2 else argNumber = argNumber + 1 end end -- Geomask if maskItem then args["type"..argNumber] = "shape-inverse" args["id"..argNumber] = maskItem args["stroke-width"..argNumber] = config["geomask-stroke-width"] or DEFAULT_GEOMASK_STROKE_WIDTH args["stroke-color"..argNumber] = config["geomask-stroke-color"] or config["geomask-stroke-colour"] or DEFAULT_GEOMASK_STROKE_COLOR args["fill"..argNumber] = config["geomask-fill"] or DEFAULT_GEOMASK_FILL args["fill-opacity"..argNumber] = config["geomask-fill-opacity"] or DEFAULT_SHAPE_FILL_OPACITY -- Let kartographer determine zoom and position, unless it is explicitly set in config if not config.zoom and not config.switcher then args.zoom = nil args["frame-coord"] = nil args["frame-lat"] = nil args["frame-long"] = nil local maskArea = util.getStatementValue( util.getBestStatement(maskItem, 'P2046') ) end incrementArgNumber() -- Hack to fix phab:T255932 if not args.zoom then args["type"..argNumber] = "line" args["id"..argNumber] = maskItem args["stroke-width"..argNumber] = 0 incrementArgNumber() end end -- Shape (or shape-inverse) if showShape then args["type"..argNumber] = shapeType if hasGeoshape and not hasOsmRelationId then args["from"..argNumber] = string.sub( util.getStatementValue( util.getBestStatement(wikidataId, 'P3896') ), 6) elseif config.id then args["id"..argNumber] = config.id end args["stroke-width"..argNumber] = config["shape-stroke-width"] or config["stroke-width"] or DEFAULT_SHAPE_STROKE_WIDTH args["stroke-color"..argNumber] = config["shape-stroke-color"] or config["shape-stroke-colour"] or config["stroke-color"] or config["stroke-colour"] or DEFAULT_SHAPE_STROKE_COLOR args["fill"..argNumber] = config["shape-fill"] or DEFAULT_SHAPE_FILL args["fill-opacity"..argNumber] = config["shape-fill-opacity"] or DEFAULT_SHAPE_FILL_OPACITY incrementArgNumber() end -- Line if showLine then args["type"..argNumber] = "line" if hasGeoshape and not hasOsmRelationId then args["from"..argNumber] = string.sub( util.getStatementValue( util.getBestStatement(wikidataId, 'P3896') ), 6) elseif config.id then args["id"..argNumber] = config.id end args["stroke-width"..argNumber] = config["line-stroke-width"] or config["stroke-width"] or DEFAULT_LINE_STROKE_WIDTH args["stroke-color"..argNumber] = config["line-stroke-color"] or config["line-stroke-colour"] or config["stroke-color"] or config["stroke-colour"] or DEFAULT_LINE_STROKE_COLOR incrementArgNumber() end -- Point marker if showMarker then args["type"..argNumber] = "point" if config.id then args["id"..argNumber] = config.id end if config.coord then args["coord"..argNumber] = config.coord end if config.marker then args["marker"..argNumber] = config.marker end args["marker-color"..argNumber] = config["marker-color"] or config["marker-colour"] or DEFAULT_MARKER_COLOR incrementArgNumber() end -- if Wikidata doesn't link to OSM and the map has no mask or point, -- then center the map on the coordinates either from the infobox or from wikidata if not maskItem and not showMarker and not wikidataProvidesGeo then if config.coord then args["frame-coord"] = args["frame-coord"] or config.coord else args["frame-lat"] = args["frame-lat"] or wdCoordinates.latitude args["frame-long"] = args["frame-long"] or wdCoordinates.longitude end tracking = tracking..util.trackAndWarn('Pages using infobox mapframe with forced centering') end -- protect against nil frame arguments args["frame-coord"] = args["frame-coord"] or "" args["frame-lat"] = args["frame-lat"] or "" args["frame-long"] = args["frame-long"] or "" local mapframe = args.switch and mf.multi(args) or mf._main(args) tracking = tracking..((showLine or showShape) and not wikidataProvidesGeo and util.trackAndWarn('Pages using infobox mapframe without shape links in Wikidata') or '') return true, mapframe.. tracking end -- Entry points p.main = function(frame) local parent = frame.getParent(frame) local parentArgs = parent.args local _, mapframe = p._main(parentArgs) return frame:preprocess(mapframe) end p.auto = function(frame) if not util.shouldAutoRun(frame) then return util.noop("auto should not autorun") end local args = util.argsFromAuto(frame) if args.custom then return frame:preprocess(util.parseCustomWikitext(args.custom)) end local _, mapframe = p._main(args) return frame:preprocess(mapframe) end p.autocaption = function(frame) if not util.shouldAutoRun(frame) then return util.noop("autocaption should not autorun") end local args = util.argsFromAuto(frame) local caption = p._caption(args) return caption end p.autoWithCaption = function(frame) if not util.shouldAutoRun(frame) then return util.noop("autoWithCaption should not autorun") end local args = util.argsFromAuto(frame) local wikitext local caption local ok if args.custom then ok = true wikitext = util.parseCustomWikitext(args.custom) else ok, wikitext = p._main(args) end if not ok then return wikitext end wikitext = frame:preprocess(wikitext) caption = p._caption(args) local data = mw.html.create():wikitext(wikitext) data:tag('div') :addClass('infobox-caption') :cssText(args.captionstyle) :wikitext(caption) return tostring(data) end return p 106wy7cnyb31y4vmayxbfey5ym8wtux 746166 746165 2026-06-12T21:51:53Z Robertsky 51025 1 revision imported from [[:en:Module:Infobox_mapframe]]: for workshop activity 746165 Scribunto text/plain local mf = require('Module:Mapframe') local getArgs = require('Module:Arguments').getArgs local yesno = require('Module:Yesno') local infoboxImage = require('Module:InfoboxImage').InfoboxImage -- Defaults local DEFAULT_FRAME_WIDTH = "270" local DEFAULT_FRAME_HEIGHT = "200" local DEFAULT_ZOOM = 10 local DEFAULT_GEOMASK_STROKE_WIDTH = "1" local DEFAULT_GEOMASK_STROKE_COLOR = "#777777" local DEFAULT_GEOMASK_FILL = "#888888" local DEFAULT_GEOMASK_FILL_OPACITY = "0.25" local DEFAULT_SHAPE_STROKE_WIDTH = "2" local DEFAULT_SHAPE_STROKE_COLOR = "#FF0000" local DEFAULT_SHAPE_FILL = "#606060" local DEFAULT_SHAPE_FILL_OPACITY = "0.1" local DEFAULT_LINE_STROKE_WIDTH = "5" local DEFAULT_LINE_STROKE_COLOR = "#FF0000" local DEFAULT_MARKER_COLOR = "#5E74F3" local util = {} function util.noop(info) local DEFAULT_NOOP_OUTPUT = "" -- uncomment this when debugging -- DEFAULT_NOOP_OUTPUT = "debug: mapframe no-op: " .. info -- mw.log(DEFAULT_NOOP_OUTPUT) return DEFAULT_NOOP_OUTPUT end -- Trim whitespace from args, and remove empty args function util.trimArgs(argsTable) local cleanArgs = {} for key, val in pairs(argsTable) do if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val ~= '' then cleanArgs[key] = val end else cleanArgs[key] = val end end return cleanArgs end function util.getBestStatement(item_id, property_id) if not(item_id) or not(mw.wikibase.isValidEntityId(item_id)) or not(mw.wikibase.entityExists(item_id)) then return false end local statements = mw.wikibase.getBestStatements(item_id, property_id) if not statements or #statements == 0 then return false end local hasNoValue = ( statements[1].mainsnak and statements[1].mainsnak.snaktype == 'novalue' ) if hasNoValue then return false end return statements[1] end function util.hasWikidataProperty(item_id, property_id) return util.getBestStatement(item_id, property_id) and true or false end function util.getStatementValue(statement) return statement and statement.mainsnak and statement.mainsnak.datavalue and statement.mainsnak.datavalue.value or nil end function util.relatedEntity(item_id, property_id) local value = util.getStatementValue( util.getBestStatement(item_id, property_id) ) return value and value.id or false end function util.idType(id) if not id then return nil elseif mw.ustring.match(id, "[Pp]%d+") then return "property" elseif mw.ustring.match(id, "[Qq]%d+") then return "item" else return nil end end function util.shouldAutoRun(frame) -- Check if should be running local pargs = frame.getParent(frame).args local explicitlyOn = yesno(mw.text.trim(pargs.mapframe or "")) -- true of false or nil if pargs.coordinates == "&#123;&#123;&#123;coordinates&#125;&#125;&#125;" then explicitlyOn = false end local onByDefault = (explicitlyOn == nil) and yesno(mw.text.trim(frame.args.onByDefault or ""), false) -- true or false return explicitlyOn or onByDefault end function util.argsFromAuto(frame) -- Get args from the frame (invoke call) and the parent (template call). -- Frame arguments are default values which are overridden by parent values -- when both are present local args = getArgs(frame, {parentFirst = true}) -- Discard args not prefixed with "mapframe-", remove that prefix from those that remain local fixedArgs = {} for name, val in pairs(args) do local fixedName = string.match(name, "^mapframe%-(.+)$" ) if fixedName then fixedArgs[fixedName] = val -- allow coord, coordinates, etc to be unprefixed elseif name == "coordinates" or name == "coord" or name == "coordinate" and not fixedArgs.coord then fixedArgs.coord = val -- allow id, qid to be unprefixed, map to id (if not already present) elseif name == "id" or name == "qid" and not fixedArgs.id then fixedArgs.id = val -- allow captionstyle to be unprefixed, for compatibility with [[Module:Infobox]] elseif name == "captionstyle" and not fixedArgs.captionstyle then fixedArgs.captionstyle = val end end return fixedArgs end function util.parseCustomWikitext(customWikitext) -- infoboxImage will format an image if given wikitext containing an -- image, or else pass through the wikitext unmodified return infoboxImage({ args = { image = customWikitext } }) end function util.trackAndWarn(trackingCat, warning) local title = mw.title.getCurrentTitle() local results = title and title.namespace == 0 and trackingCat and '[[Category:'..trackingCat..']]' or '' if warning then local warn = require('Module:If preview')._warning results = results..warn({warning}) end return results end function util.ternary(flag, other) other = other or 'other' flag = flag == 'none' and 'no' or flag local yesNoOut = yesno(flag,other) local yes = (yesNoOut == true) local no = (yesNoOut == false) return yes, no end local p = {} p._caption = function(args) if args.caption then return args.caption elseif args.switcher then return util.noop("no caption or switcher") end local maskItem local maskType = util.idType(args.geomask) if maskType == 'item' then maskItem = args.geomask elseif maskType == "property" then maskItem = util.relatedEntity(args.id or mw.wikibase.getEntityIdForCurrentPage(), args.geomask) end local maskItemLabel = maskItem and mw.wikibase.getLabel( maskItem ) return maskItemLabel and "Location in "..maskItemLabel or util.noop("missing maskItemLabel with type " .. (maskType or "nil") .. " and item " .. (maskItem or "nil")) end --A list of types for objects that are too small to allow Kartographer to take over zoom local tinyType = { landmark=true, railwaystation=true, edu=true, pass=true, camera=true } p._main = function(_config) -- accumulate tracking cats local tracking = '' -- `config` is the args passed to this module local config = util.trimArgs(_config) -- allow alias for config.coord config.coord = config.coord or config.coordinates -- Require wikidata item, or specified coords local wikidataId = config.id or mw.wikibase.getEntityIdForCurrentPage() if not(wikidataId) and not(config.coord) then return false, util.trackAndWarn('Pages using infobox mapframe with missing coordinates') end -- Require coords (specified or from wikidata), so that map will be centred somewhere -- (P625 = coordinate location) local wdCoordinates = util.getStatementValue(util.getBestStatement(wikidataId, 'P625')) if not (config.coord or wdCoordinates) then return false, util.trackAndWarn('Pages using infobox mapframe with missing coordinates') end -- `args` is the arguments which will be passed to the mapframe module local args = {} -- Some defaults/overrides for infobox presentation args.display = "inline" args.frame = "yes" args.plain = "yes" args["frame-width"] = config["frame-width"] or config.width or DEFAULT_FRAME_WIDTH args["frame-height"] = config["frame-height"] or config.height or DEFAULT_FRAME_HEIGHT args["frame-align"] = "center" args["frame-coord"] = config["frame-coordinates"] or config["frame-coord"] -- Note: config["coordinates"] or config["coord"] should not be used for the alignment of the frame; -- see talk page ( https://en.wikipedia.org/wiki/Special:Diff/876492931 ) -- deprecated lat and long parameters args["frame-lat"] = config["frame-lat"] or config["frame-latitude"] args["frame-long"] = config["frame-long"] or config["frame-longitude"] -- if zoom isn't specified from config, first check wikidata local zoom = config.zoom or util.getStatementValue(util.getBestStatement(wikidataId, 'P6592')) if not zoom then -- Calculate zoom from length or area (converted to km or km2) -- Zoom so that length or area is completely included in mapframe local getZoom = require('Module:Infobox dim')._zoom zoom = getZoom({length_km=config.length_km, length_mi=config.length_mi, width_km=config.width_km, width_mi=config.width_mi, area_km2=config.area_km2, area_mi2=config.area_mi2, area_ha=config.area_ha, area_acre=config.area_acre, type=config.type, population=config.population, viewport_px=math.min(args["frame-width"],args["frame-height"]), latitude=wdCoordinates and wdCoordinates.latitude}) end args.zoom = zoom or DEFAULT_ZOOM -- Use OSM relation ID if available; otherwise use geoshape if that is available -- (geoshape is required for defunct entities, which are outside OSM's scope) local hasOsmRelationId = util.hasWikidataProperty(wikidataId, 'P402') -- P402 is OSM relation ID local hasGeoshape = util.hasWikidataProperty(wikidataId, 'P3896') -- P3896 is geoshape local wikidataProvidesGeo = hasOsmRelationId or hasGeoshape -- determine marker argument value, determine whether to show marker local forcePoint, suppressPoint = util.ternary(config.point) local forceMarker, suppressMarker = util.ternary(config.marker,true) forcePoint = forcePoint or forceMarker suppressPoint = suppressPoint or suppressMarker local showMarker = not suppressPoint and (forcePoint or not wikidataProvidesGeo or config.coord) -- wikidata = "yes" turns on both shape and line -- wikidata = "no" turns off both shape and line -- otherwise show both if wikidata provides geo local forceWikidata, suppressWikidata = util.ternary(config.wikidata) local showShape = not suppressWikidata and (forceWikidata or wikidataProvidesGeo or not config.coord) local showLine = showShape -- determine shape parameter value, determine whether to show or suppress shape -- also determine whether to invert shape local forceShape, suppressShape = util.ternary(config.shape) showShape = wikidataId and not suppressShape and (forceShape or showShape) local shapeType = config.shape == 'inverse' and 'shape-inverse' or 'shape' -- determine line parameter value, determine whether to show or suppress line local forceLine, suppressLine = util.ternary(config.line) showLine = wikidataId and not suppressLine and (forceLine or showLine) local maskItem -- Switcher if config.switcher == "zooms" then -- switching between zoom levels local maxZoom = math.max(tonumber(args.zoom), 3) -- what zoom would have otherwise been (if 3 or more, otherwise 3) local minZoom = 1 -- completely zoomed out local midZoom = math.floor((maxZoom + minZoom)/2) -- midway between maxn and min args.switch = "zoomed in, zoomed midway, zoomed out" args.zoom = string.format("SWITCH:%d,%d,%d", maxZoom, midZoom, minZoom) elseif config.switcher == "auto" then -- switching between P276 and P131 areas with recursive lookup, e.g. item's city, -- that city's state, and that state's country args.zoom = nil -- let kartographer determine the zoom local maskLabels = {} local maskItems = {} local maskItemId = util.relatedEntity(wikidataId, "P276") or util.relatedEntity(wikidataId, "P131") local maskLabel = mw.wikibase.getLabel(maskItemId) while maskItemId and maskLabel and mw.text.trim(maskLabel) ~= "" do table.insert(maskLabels, maskLabel) table.insert(maskItems, maskItemId) maskItemId = maskItemId and util.relatedEntity(maskItemId, "P131") maskLabel = maskItemId and mw.wikibase.getLabel(maskItemId) end if #maskLabels > 1 then args.switch = table.concat(maskLabels, "###") maskItem = "SWITCH:" .. table.concat(maskItems, ",") elseif #maskLabels == 1 then maskItem = maskItemId[1] end elseif config.switcher == "geomasks" and config.geomask then -- switching between items in geomask parameter args.zoom = nil -- let kartographer determine the zoom local separator = (mw.ustring.find(config.geomask, "###", 0, true ) and "###") or (mw.ustring.find(config.geomask, ";", 0, true ) and ";") or "," local pattern = "%s*"..separator.."%s*" local maskItems = mw.text.split(mw.ustring.gsub(config.geomask, "SWITCH:", ""), pattern) local maskLabels = {} if #maskItems > 1 then for i, item in ipairs(maskItems) do table.insert(maskLabels, mw.wikibase.getLabel(item)) end args.switch = table.concat(maskLabels, "###") maskItem = "SWITCH:" .. table.concat(maskItems, ",") end end -- resolve geomask item id (if not using geomask switcher) if not maskItem then -- local maskType = util.idType(config.geomask) if maskType == 'item' then maskItem = config.geomask elseif maskType == "property" then maskItem = util.relatedEntity(wikidataId, config.geomask) end end -- if asking for shape or line from Wikidata -- and if Wikidata actually has shape/line data (wikidataProvidesGeo=true) -- and if no geomask -- and if zoom not explicitly set -- and if the object size inferred from its type is not too small -- then let Kartographer "take over" zoom if (showLine or showShape) and wikidataProvidesGeo and not maskItem and not config.zoom and not (config.type and tinyType[config.type]) then args.zoom = nil end if not maskItem and not showShape and not showLine and not showMarker then return false, util.trackAndWarn('Pages using infobox mapframe with no geometry','No geometry specified for mapframe') end -- Keep track of arg numbering local argNumber = '' local function incrementArgNumber() if argNumber == '' then argNumber = 2 else argNumber = argNumber + 1 end end -- Geomask if maskItem then args["type"..argNumber] = "shape-inverse" args["id"..argNumber] = maskItem args["stroke-width"..argNumber] = config["geomask-stroke-width"] or DEFAULT_GEOMASK_STROKE_WIDTH args["stroke-color"..argNumber] = config["geomask-stroke-color"] or config["geomask-stroke-colour"] or DEFAULT_GEOMASK_STROKE_COLOR args["fill"..argNumber] = config["geomask-fill"] or DEFAULT_GEOMASK_FILL args["fill-opacity"..argNumber] = config["geomask-fill-opacity"] or DEFAULT_SHAPE_FILL_OPACITY -- Let kartographer determine zoom and position, unless it is explicitly set in config if not config.zoom and not config.switcher then args.zoom = nil args["frame-coord"] = nil args["frame-lat"] = nil args["frame-long"] = nil local maskArea = util.getStatementValue( util.getBestStatement(maskItem, 'P2046') ) end incrementArgNumber() -- Hack to fix phab:T255932 if not args.zoom then args["type"..argNumber] = "line" args["id"..argNumber] = maskItem args["stroke-width"..argNumber] = 0 incrementArgNumber() end end -- Shape (or shape-inverse) if showShape then args["type"..argNumber] = shapeType if hasGeoshape and not hasOsmRelationId then args["from"..argNumber] = string.sub( util.getStatementValue( util.getBestStatement(wikidataId, 'P3896') ), 6) elseif config.id then args["id"..argNumber] = config.id end args["stroke-width"..argNumber] = config["shape-stroke-width"] or config["stroke-width"] or DEFAULT_SHAPE_STROKE_WIDTH args["stroke-color"..argNumber] = config["shape-stroke-color"] or config["shape-stroke-colour"] or config["stroke-color"] or config["stroke-colour"] or DEFAULT_SHAPE_STROKE_COLOR args["fill"..argNumber] = config["shape-fill"] or DEFAULT_SHAPE_FILL args["fill-opacity"..argNumber] = config["shape-fill-opacity"] or DEFAULT_SHAPE_FILL_OPACITY incrementArgNumber() end -- Line if showLine then args["type"..argNumber] = "line" if hasGeoshape and not hasOsmRelationId then args["from"..argNumber] = string.sub( util.getStatementValue( util.getBestStatement(wikidataId, 'P3896') ), 6) elseif config.id then args["id"..argNumber] = config.id end args["stroke-width"..argNumber] = config["line-stroke-width"] or config["stroke-width"] or DEFAULT_LINE_STROKE_WIDTH args["stroke-color"..argNumber] = config["line-stroke-color"] or config["line-stroke-colour"] or config["stroke-color"] or config["stroke-colour"] or DEFAULT_LINE_STROKE_COLOR incrementArgNumber() end -- Point marker if showMarker then args["type"..argNumber] = "point" if config.id then args["id"..argNumber] = config.id end if config.coord then args["coord"..argNumber] = config.coord end if config.marker then args["marker"..argNumber] = config.marker end args["marker-color"..argNumber] = config["marker-color"] or config["marker-colour"] or DEFAULT_MARKER_COLOR incrementArgNumber() end -- if Wikidata doesn't link to OSM and the map has no mask or point, -- then center the map on the coordinates either from the infobox or from wikidata if not maskItem and not showMarker and not wikidataProvidesGeo then if config.coord then args["frame-coord"] = args["frame-coord"] or config.coord else args["frame-lat"] = args["frame-lat"] or wdCoordinates.latitude args["frame-long"] = args["frame-long"] or wdCoordinates.longitude end tracking = tracking..util.trackAndWarn('Pages using infobox mapframe with forced centering') end -- protect against nil frame arguments args["frame-coord"] = args["frame-coord"] or "" args["frame-lat"] = args["frame-lat"] or "" args["frame-long"] = args["frame-long"] or "" local mapframe = args.switch and mf.multi(args) or mf._main(args) tracking = tracking..((showLine or showShape) and not wikidataProvidesGeo and util.trackAndWarn('Pages using infobox mapframe without shape links in Wikidata') or '') return true, mapframe.. tracking end -- Entry points p.main = function(frame) local parent = frame.getParent(frame) local parentArgs = parent.args local _, mapframe = p._main(parentArgs) return frame:preprocess(mapframe) end p.auto = function(frame) if not util.shouldAutoRun(frame) then return util.noop("auto should not autorun") end local args = util.argsFromAuto(frame) if args.custom then return frame:preprocess(util.parseCustomWikitext(args.custom)) end local _, mapframe = p._main(args) return frame:preprocess(mapframe) end p.autocaption = function(frame) if not util.shouldAutoRun(frame) then return util.noop("autocaption should not autorun") end local args = util.argsFromAuto(frame) local caption = p._caption(args) return caption end p.autoWithCaption = function(frame) if not util.shouldAutoRun(frame) then return util.noop("autoWithCaption should not autorun") end local args = util.argsFromAuto(frame) local wikitext local caption local ok if args.custom then ok = true wikitext = util.parseCustomWikitext(args.custom) else ok, wikitext = p._main(args) end if not ok then return wikitext end wikitext = frame:preprocess(wikitext) caption = p._caption(args) local data = mw.html.create():wikitext(wikitext) data:tag('div') :addClass('infobox-caption') :cssText(args.captionstyle) :wikitext(caption) return tostring(data) end return p 106wy7cnyb31y4vmayxbfey5ym8wtux Module:Mapframe 828 176047 746167 2026-06-01T15:40:49Z en>Jonesey95 0 Update tright and tleft per Tech news; see talk for links 746167 Scribunto text/plain -- Note: Originally written on English Wikipedia at https://en.wikipedia.org/wiki/Module:Mapframe --[[---------------------------------------------------------------------------- ##### Localisation (L10n) settings ##### Replace values in quotes ("") with localised values ----------------------------------------------------------------------------]]-- local L10n = {} local wb = mw.wikibase -- Modue dependencies local parser -- local copy of https://www.mediawiki.org/wiki/Module:WikitextParser loaded lazily -- "strict" should not be used, at least until all other modules which require this module are not using globals. -- Template parameter names (unnumbered versions only) -- Specify each as either a single string, or a table of strings (aliases) -- Aliases are checked left-to-right, i.e. `{ "one", "two" }` is equivalent to using `{{{one| {{{two|}}} }}}` in a template L10n.para = { display = "display", type = "type", id = { "id", "ids" }, from = "from", raw = "raw", title = "title", description = "description", strokeColor = { "stroke-color", "stroke-colour" }, strokeWidth = "stroke-width", strokeOpacity = "stroke-opacity", fill = "fill", fillOpacity = "fill-opacity", coord = "coord", marker = "marker", markerColor = { "marker-color", "marker-colour" }, markerSize = "marker-size", radius = { "radius", "radius_m" }, radiusKm = "radius_km", radiusFt = "radius_ft", radiusMi = "radius_mi", edges = "edges", text = "text", icon = "icon", zoom = "zoom", frame = "frame", plain = "plain", frameWidth = "frame-width", frameHeight = "frame-height", frameCoordinates= { "frame-coordinates", "frame-coord" }, frameLatitude = { "frame-lat", "frame-latitude" }, frameLongitude = { "frame-long", "frame-longitude" }, frameAlign = "frame-align", switch = "switch", overlay = "overlay", overlayBorder = "overlay-border", overlayHorizontalAlignment = "overlay-horizontal-alignment", overlayVerticalAlignment = "overlay-vertical-alignment", overlayHorizontalOffset = "overlay-horizontal-offset", overlayVerticalOffset = "overlay-vertical-offset" } -- Names of other templates this module can extract coordinates from L10n.template = { templates = { -- The coord template, as well as templates with output that contains {{coord}} "Coord", "Coord/sandbox", "NRHP row", "NRHP row/sandbox", "WikidataCoord", "WikidataCoord/sandbox", "Wikidatacoord", "Wikidata coord" }, modules = { -- The coordinates module, as well as modules with output that contains {{coord}} "Coordinates", "Coordinates/sandbox", "WikidataCoord", "WikidataCoord/sandbox" } } -- Error messages L10n.error = { badDisplayPara = "Invalid display parameter", noCoords = "Coordinates must be specified on Wikidata or in |" .. ( type(L10n.para.coord)== 'table' and L10n.para.coord[1] or L10n.para.coord ) .. "=", wikidataCoords = "Coordinates not found on Wikidata", noCircleCoords = "Circle centre coordinates must be specified, or available via Wikidata", negativeRadius = "Circle radius must be a positive number", noRadius = "Circle radius must be specified", negativeEdges = "Circle edges must be a positive number", noSwitchPara = "Found only one switch value in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", oneSwitchLabel = "Found only one label in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", noSwitchLists = "At least one parameter must have a SWITCH: list", switchMismatches = "All SWITCH: lists must have the same number of values", -- "%s" and "%d" tokens will be replaced with strings and numbers when used oneSwitchValue = "Found only one switch value in |%s=", fewerSwitchLabels = "Found %d switch values but only %d labels in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", noNamedCoords = "No named coordinates found in %s" } -- Other strings L10n.str = { -- valid values for display parameter, e.g. (|display=inline) or (|display=title) or (|display=inline,title) or (|display=title,inline) inline = "inline", title = "title", dsep = ",", -- separator between inline and title (comma in the example above) -- valid values for type parameter line = "line", -- geoline feature (e.g. a road) shape = "shape", -- geoshape feature (e.g. a state or province) shapeInverse = "shape-inverse", -- geomask feature (the inverse of a geoshape) data = "data", -- geoJSON data page on Commons point = "point", -- single point feature (coordinates) circle = "circle", -- circular area around a point named = "named", -- all named coordinates in an article or section -- Keyword to indicate a switch list. Must NOT use the special characters ^$()%.[]*+-? switch = "SWITCH", -- valid values for icon, frame, and plain parameters affirmedWords = ' '..table.concat({ "add", "added", "affirm", "affirmed", "include", "included", "on", "true", "yes", "y" }, ' ')..' ', declinedWords = ' '..table.concat({ "decline", "declined", "exclude", "excluded", "false", "none", "not", "no", "n", "off", "omit", "omitted", "remove", "removed" }, ' ')..' ' } -- Default values for parameters L10n.defaults = { display = L10n.str.inline, text = "Map", frameWidth = "300", frameHeight = "200", frameAlign = "right", markerColor = "5E74F3", markerSize = nil, strokeColor = "#ff0000", strokeWidth = 6, edges = 32, -- number of edges used to approximate a circle overlayBorder = "1px solid white", overlayHorizontalAlignment = "right", overlayHorizontalOffset = "0", overlayVerticalAlignment = "bottom", overlayVerticalOffset = "0" } -- #### End of L10n settings #### --[[---------------------------------------------------------------------------- Utility methods ----------------------------------------------------------------------------]]-- local util = {} --[[ Looks up a parameter value based on the id (a key from the L10n.para table) and optionally a suffix, for parameters that can be suffixed (e.g. type2 is type with suffix 2). @param {table} args key-value pairs of parameter names and their values @param {string} param_id id for parameter name (key from the L10n.para table) @param {string} [suffix] suffix for parameter name @returns {string|nil} parameter value if found, or nil if not found ]]-- function util.getParameterValue(args, param_id, suffix) suffix = suffix or '' if type( L10n.para[param_id] ) ~= 'table' then return args[L10n.para[param_id]..suffix] end for _i, paramAlias in ipairs(L10n.para[param_id]) do if args[paramAlias..suffix] then return args[paramAlias..suffix] end end return nil end --[[ Trim whitespace from args, and remove empty args. Also fix control characters. @param {table} argsTable @returns {table} trimmed args table ]]-- function util.trimArgs(argsTable) local cleanArgs = {} for key, val in pairs(argsTable) do if type(key) == 'string' and type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val ~= '' then -- control characters inside json need to be escaped, but stripping them is simpler -- See also T214984 -- However, *don't* strip control characters from wikitext (text or description parameters) or you'll break strip markers -- Alternatively it might be better to only strip control char from raw parameter content if util.matchesParam('text', key) or util.matchesParam('description', key, key:gsub('^%D+(%d+)$', '%1') ) then cleanArgs[key] = val else cleanArgs[key] = val:gsub('%c',' ') end end else cleanArgs[key] = val end end return cleanArgs end --[[ Check if a parameter name matches an unlocalized parameter key @param {string} key - the unlocalized parameter name to search through @param {string} name - the localized parameter name to check @param {string|nil} - an optional suffix to apply to the value(s) from the localization key @returns {boolean} true if the name matches the parameter, false otherwise ]]-- function util.matchesParam(key, name, suffix) local param = L10n.para[key] suffix = suffix or '' if type(param) == 'table' then for _, v in pairs(param) do if (v .. suffix) == name then return true end end return false end return ((param .. suffix) == name) end --[[ Check if a value is affirmed (one of the values in L10n.str.affirmedWords) @param {string} val Value to be checked @returns {boolean} true if affirmed, false otherwise ]]-- function util.isAffirmed(val) if not(val) then return false end return string.find(L10n.str.affirmedWords, ' '..val..' ', 1, true ) and true or false end --[[ Check if a value is declined (one of the values in L10n.str.declinedWords) @param {string} val Value to be checked @returns {boolean} true if declined, false otherwise ]]-- function util.isDeclined(val) if not(val) then return false end return string.find(L10n.str.declinedWords , ' '..val..' ', 1, true ) and true or false end --[[ Check if the name of a template matches the known coord templates or wrappers (in L10n.template.templates and L10n.template.modules). The name is normalised when checked, so e.g. the names "Coord", "coord", and " Coord" all return true. @param {string} name @returns {boolean} true if it is a coord template or wrapper, false otherwise ]]-- function util.isCoordTemplateOrWrapper(name) name = mw.text.trim(name) local modName = mw.ustring.gsub(name, '#invoke:', '') local inputTitle = mw.title.new(modName, (name ~= modName) and 'Module' or 'Template') if not inputTitle then return false end -- Create (or reuse) mw.title objects for each known coord template/wrapper. -- Stored in L10n.template.title so that they don't need to be recreated -- each time this function is called if not L10n.template.titles then L10n.template.titles = {} for _, v in pairs(L10n.template.templates) do table.insert(L10n.template.titles, mw.title.new(v, 'Template')) end for _, v in pairs(L10n.template.modules) do table.insert(L10n.template.titles, mw.title.new(v, 'Module')) end end for _, templateTitle in pairs(L10n.template.titles) do if mw.title.equals(inputTitle, templateTitle) then return true end end return false end --[[ Recursively extract coord templates which have a name parameter. @param {string} wikitext @returns {table} table sequence of coord templates ]]-- function util.extractCoordTemplates(wikitext) local output = {} local templates = mw.ustring.gmatch(wikitext, '{%b{}}') for template in templates do local templateName = mw.ustring.match(template, '{{([^}|]+)') local nameParam = mw.ustring.match(template, "|%s*name%s*=%s*[^}|]+") if util.isCoordTemplateOrWrapper(templateName) then if nameParam then table.insert(output, template) end elseif mw.ustring.find(mw.ustring.sub(template, 2), "{{") then local subOutput = util.extractCoordTemplates(mw.ustring.sub(template, 2)) for _, t in pairs(subOutput) do table.insert(output, t) end end end -- ensure coords are not using title display for k, v in pairs(output) do output[k] = mw.ustring.gsub(v, "|%s*display%s*=[^|}]+", "|display=inline") end return output end --[[ Gets all named coordiates from a page or a section of a page. @param {string|nil} page Page name, or name#section, to get named coordinates from. If the name is omitted, i.e. #section or nil or empty string, then the current page will be used. @returns {table} sequence of {coord, name, description} tables where coord is the coordinates in a format suitable for #util.parseCoords, name is a string, and description is a string (coordinates in a format suitable for displaying to the reader). If for some reason the name can't be found, the description is nil and the name contains display-format coordinates. @throws {L10n.error.noNamedCoords} if no named coordinates are found. ]]-- function util.getNamedCoords(page) local parts = mw.text.split(page or "", "#", true) local name = parts[1] == "" and mw.title.getCurrentTitle().prefixedText or parts[1] local section = parts[2] local title = mw.title.new(name) if title.isRedirect then title = title.redirectTarget end local pageWikitext = title:getContent() if section then if parser == nil then -- load [[Module:WikitextParser]] lazily so it is only transcluded on pages that use it parser = require("Module:WikitextParser") end pageWikitext = parser.getSection(pageWikitext, section) or '' end local coordTemplates = util.extractCoordTemplates(pageWikitext) if #coordTemplates == 0 then error(string.format(L10n.error.noNamedCoords, page or name), 0) end local frame = mw.getCurrentFrame() local sep = "________" local expandedContent = frame:preprocess(table.concat(coordTemplates, sep)) local expandedTemplates = mw.text.split(expandedContent, sep) local namedCoords = {} for _, expandedTemplate in pairs(expandedTemplates) do local coord = mw.ustring.match(expandedTemplate, "<span class=\"geo%-dec\".->(.-)</span>") if coord then local coordname = ( -- name specified by a wrapper template, e.g [[Article|Name]] mw.ustring.match(expandedTemplate, "<span class=\"mapframe%-coord%-name\">(.-)</span>") or -- name passed into coord template mw.ustring.match(expandedTemplate, "<span class=\"fn org\">(.-)</span>") or -- default to the coordinates if the name can't be retrieved coord ) local description = coordname ~= coord and coord table.insert(namedCoords, { coord=mw.ustring.gsub(coord, "[° ]", "_"), name=coordname, description=description }) end end if #namedCoords == 0 then error(string.format(L10n.error.noNamedCoords, page or name), 0) end return namedCoords end --[[ Parse coordinate values from the params passed in a GeoHack url (such as //tools.wmflabs.org/geohack/geohack.php?pagename=Example&params=1_2_N_3_4_W_ or //tools.wmflabs.org/geohack/geohack.php?pagename=Example&params=1.23_S_4.56_E_ ) or non-url string in the same format (such as `1_2_N_3_4_W_` or `1.23_S_4.56_E_`) @param {string} coords string containing coordinates @returns {number, number} latitude, longitude ]]-- function util.parseCoords(coords) local coordsPatt if mw.ustring.find(coords, "params=", 1, true) then -- prevent false matches from page name, e.g. ?pagename=Lorem_S._Ipsum coordsPatt = 'params=([_%.%d]+[NS][_%.%d]+[EW])' else -- not actually a geohack url, just the same format coordsPatt = '[_%.%d]+[NS][_%.%d]+[EW]' end local parts = mw.text.split((mw.ustring.match(coords, coordsPatt) or ''), '_') local lat_d = tonumber(parts[1]) assert(lat_d, "Unable to get latitude from input '"..coords.."'.") local lat_m = tonumber(parts[2]) -- nil if coords are in decimal format local lat_s = lat_m and tonumber(parts[3]) -- nil if coords are either in decimal format or degrees and minutes only local lat = lat_d + (lat_m or 0)/60 + (lat_s or 0)/3600 if parts[#parts/2] == 'S' then lat = lat * -1 end local long_d = tonumber(parts[1+#parts/2]) assert(long_d, "Unable to get longitude from input '"..coords.."'.") local long_m = tonumber(parts[2+#parts/2]) -- nil if coords are in decimal format local long_s = long_m and tonumber(parts[3+#parts/2]) -- nil if coords are either in decimal format or degrees and minutes only local long = long_d + (long_m or 0)/60 + (long_s or 0)/3600 if parts[#parts] == 'W' then long = long * -1 end return lat, long end --[[ Get coordinates from a Wikidata item @param {string} item_id Wikidata item id (Q number) @returns {number, number} latitude, longitude @throws {L10n.error.noCoords} if item_id is invalid or the item does not exist @throws {L10n.error.wikidataCoords} if the the item does not have a P625 statement (coordinates), or it is set to "no value" ]]-- function util.wikidataCoords(item_id) if not (item_id and wb.isValidEntityId(item_id) and wb.entityExists(item_id)) then error(L10n.error.noCoords, 0) end local coordStatements = wb.getBestStatements(item_id, 'P625') if not coordStatements or #coordStatements == 0 then error(L10n.error.wikidataCoords, 0) end local hasNoValue = ( coordStatements[1].mainsnak and (coordStatements[1].mainsnak.snaktype == 'novalue' or coordStatements[1].mainsnak.snaktype == 'somevalue') ) if hasNoValue then error(L10n.error.wikidataCoords, 0) end local wdCoords = coordStatements[1]['mainsnak']['datavalue']['value'] return tonumber(wdCoords['latitude']), tonumber(wdCoords['longitude']) end --[[ Creates a polygon that approximates a circle @param {number} lat Latitude @param {number} long Longitude @param {number} radius Radius in metres @param {number} n Number of edges for the polygon @returns {table} sequence of {latitude, longitude} table sequences, where latitude and longitude are both numbers ]]-- function util.circleToPolygon(lat, long, radius, n) -- n is number of edges -- Based on https://github.com/gabzim/circle-to-polygon, ISC licence local function offset(cLat, cLon, distance, bearing) local lat1 = math.rad(cLat) local lon1 = math.rad(cLon) local dByR = distance / 6378137 -- distance divided by 6378137 (radius of the earth) wgs84 local offet_lat = math.asin( math.sin(lat1) * math.cos(dByR) + math.cos(lat1) * math.sin(dByR) * math.cos(bearing) ) local offet_lon = lon1 + math.atan2( math.sin(bearing) * math.sin(dByR) * math.cos(lat1), math.cos(dByR) - math.sin(lat1) * math.sin(offet_lat) ) return {math.deg(offet_lon), math.deg(offet_lat)} end local coordinates = {}; local i = 0; while i < n do table.insert(coordinates, offset(lat, long, radius, (2*math.pi*i*-1)/n) ) i = i + 1 end table.insert(coordinates, offset(lat, long, radius, 0)) return coordinates end --[[ Get the number of key-value pairs in a table, which might not be a sequence. @param {table} t @returns {number} count of key-value pairs ]]-- function util.tableCount(t) local count = 0 for k, v in pairs(t) do count = count + 1 end return count end --[[ For a table where the values are all tables, returns either the util.tableCount of the subtables if they are all the same, or nil if they are not all the same. @param {table} t @returns {number|nil} count of key-value pairs of subtable, or nil if subtables have different counts ]]-- function util.subTablesCount(t) local count = nil for k, v in pairs(t) do if count == nil then count = util.tableCount(v) elseif count ~= util.tableCount(v) then return nil end end return count end --[[ Splits a list into a table sequence. The items in the list may be separated by commas, or by semicolons (if items may contain commas), or by "###" (if items may contain semicolons). @param {string} listString @returns {table} sequence of list items ]]-- function util.tableFromList(listString) if type(listString) ~= "string" or listString == "" then return nil end local separator = (mw.ustring.find(listString, "###", 0, true ) and "###") or (mw.ustring.find(listString, ";", 0, true ) and ";") or "," local pattern = "%s*"..separator.."%s*" return mw.text.split(listString, pattern) end -- Boolean in outer scope indicating if Kartographer should be able to -- automatically calculate coordinates (see phab:T227402) local coordsDerivedFromFeatures = false; --[[---------------------------------------------------------------------------- Make methods: These take in a table of arguments, and return either a string or a table to be used in the eventual output. ----------------------------------------------------------------------------]]-- local make = {} --[[ Makes content to go inside the maplink or mapframe tag. @param {table} args @returns {string} tag content ]]-- function make.content(args) if util.getParameterValue(args, 'raw') then coordsDerivedFromFeatures = true -- Kartographer should be able to automatically calculate coords from raw geoJSON return util.getParameterValue(args, 'raw') end local content = {} local argsExpanded = {} for k, v in pairs(args) do local index = string.match( k, '^[^0-9]+([0-9]*)$' ) if index ~= nil then local indexNumber if index ~= '' then indexNumber = tonumber(index) else indexNumber = 1 end if argsExpanded[indexNumber] == nil then argsExpanded[indexNumber] = {} end argsExpanded[indexNumber][ string.gsub(k, index, '') ] = v end end for contentIndex, contentArgs in pairs(argsExpanded) do local argType = util.getParameterValue(contentArgs, "type") -- Kartographer automatically calculates coords if geolines/shapes are used (T227402) if not coordsDerivedFromFeatures then coordsDerivedFromFeatures = ( argType == L10n.str.line or argType == L10n.str.shape ) and true or false end if argType == L10n.str.named then local namedCoords = util.getNamedCoords(util.getParameterValue(contentArgs, "from")) local typeKey = type(L10n.para.type) == "table" and L10n.para.type[1] or L10n.para.type local coordKey = type(L10n.para.coord) == "table" and L10n.para.coord[1] or L10n.para.coord local titleKey = type(L10n.para.title) == "table" and L10n.para.title[1] or L10n.para.title local descKey = type(L10n.para.description) == "table" and L10n.para.description[1] or L10n.para.description for _, namedCoord in pairs(namedCoords) do contentArgs[typeKey] = "point" contentArgs[coordKey] = namedCoord.coord contentArgs[titleKey] = namedCoord.name contentArgs[descKey] = namedCoord.description content[#content+1] = make.contentJson(contentArgs) end else content[#content + 1] = make.contentJson(contentArgs) end end --Single item, no array needed if #content==1 then return content[1] end --Multiple items get placed in a FeatureCollection local contentArray = '[\n' .. table.concat( content, ',\n') .. '\n]' return contentArray end --[[ Make coordinates from the coord arg, or the id arg, or the current page's Wikidata item. @param {table} args @param {boolean} [plainOutput] @returns {Mixed} Either: {number, number} latitude, longitude if plainOutput is true; or {table} table sequence of longitude, then latitude (gives the required format for GeoJSON when encoded) ]]-- function make.coords(args, plainOutput) local coords, lat, long local frame = mw.getCurrentFrame() if util.getParameterValue(args, 'coord') then coords = frame:preprocess( util.getParameterValue(args, 'coord') ) lat, long = util.parseCoords(coords) else lat, long = util.wikidataCoords(util.getParameterValue(args, 'id') or wb.getEntityIdForCurrentPage()) end if plainOutput then return lat, long end return {[0] = long, [1] = lat} end --[[ Makes a table of coordinates that approximate a circle. @param {table} args @returns {table} sequence of {latitude, longitude} table sequences, where latitude and longitude are both numbers @throws {L10n.error.noCircleCoords} if centre coordinates are not specified @throws {L10n.error.noRadius} if radius is not specified @throws {L10n.error.negativeRadius} if radius is negative or zero @throws {L10n.error.negativeEdges} if edges is negative or zero ]]-- function make.circleCoords(args) local lat, long = make.coords(args, true) local radius = util.getParameterValue(args, 'radius') if not radius then radius = util.getParameterValue(args, 'radiusKm') and tonumber(util.getParameterValue(args, 'radiusKm'))*1000 if not radius then radius = util.getParameterValue(args, 'radiusMi') and tonumber(util.getParameterValue(args, 'radiusMi'))*1609.344 if not radius then radius = util.getParameterValue(args, 'radiusFt') and tonumber(util.getParameterValue(args, 'radiusFt'))*0.3048 end end end local edges = util.getParameterValue(args, 'edges') or L10n.defaults.edges if not lat or not long then error(L10n.error.noCircleCoords, 0) elseif not radius then error(L10n.error.noRadius, 0) elseif tonumber(radius) <= 0 then error(L10n.error.negativeRadius, 0) elseif tonumber(edges) <= 0 then error(L10n.error.negativeEdges, 0) end return util.circleToPolygon(lat, long, radius, tonumber(edges)) end --[[ Makes JSON data for a feature @param contentArgs args for this feature. Keys must be the non-suffixed version of the parameter names, i.e. use type, stroke, fill,... rather than type3, stroke3, fill3,... @returns {string} JSON encoded data ]]-- function make.contentJson(contentArgs) local data = {} if util.getParameterValue(contentArgs, 'type') == L10n.str.point or util.getParameterValue(contentArgs, 'type') == L10n.str.circle then local isCircle = util.getParameterValue(contentArgs, 'type') == L10n.str.circle data.type = "Feature" data.geometry = { type = isCircle and "LineString" or "Point", coordinates = isCircle and make.circleCoords(contentArgs) or make.coords(contentArgs) } data.properties = { title = util.getParameterValue(contentArgs, 'title') or mw.getCurrentFrame():getParent():getTitle() } if isCircle then -- TODO: This is very similar to below, should be extracted into a function data.properties.stroke = util.getParameterValue(contentArgs, 'strokeColor') or L10n.defaults.strokeColor data.properties["stroke-width"] = tonumber(util.getParameterValue(contentArgs, 'strokeWidth')) or L10n.defaults.strokeWidth local strokeOpacity = util.getParameterValue(contentArgs, 'strokeOpacity') if strokeOpacity then data.properties['stroke-opacity'] = tonumber(strokeOpacity) end local fill = util.getParameterValue(contentArgs, 'fill') if fill then data.properties.fill = fill local fillOpacity = util.getParameterValue(contentArgs, 'fillOpacity') data.properties['fill-opacity'] = fillOpacity and tonumber(fillOpacity) or 0.6 end else -- is a point local markerSymbol = util.getParameterValue(contentArgs, 'marker') or L10n.defaults.marker -- allow blank to be explicitly specified, for overriding infoboxes or other templates with a default value if markerSymbol ~= "blank" then data.properties["marker-symbol"] = markerSymbol end data.properties["marker-color"] = util.getParameterValue(contentArgs, 'markerColor') or L10n.defaults.markerColor data.properties["marker-size"] = util.getParameterValue(contentArgs, 'markerSize') or L10n.defaults.markerSize end else data.type = "ExternalData" if util.getParameterValue(contentArgs, 'type') == L10n.str.data or util.getParameterValue(contentArgs, 'from') then data.service = "page" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.line then data.service = "geoline" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.shape then data.service = "geoshape" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.shapeInverse then data.service = "geomask" end if util.getParameterValue(contentArgs, 'id') or (not (util.getParameterValue(contentArgs, 'from')) and wb.getEntityIdForCurrentPage()) then data.ids = util.getParameterValue(contentArgs, 'id') or wb.getEntityIdForCurrentPage() else data.title = util.getParameterValue(contentArgs, 'from') end data.properties = { stroke = util.getParameterValue(contentArgs, 'strokeColor') or L10n.defaults.strokeColor, ["stroke-width"] = tonumber(util.getParameterValue(contentArgs, 'strokeWidth')) or L10n.defaults.strokeWidth } local strokeOpacity = util.getParameterValue(contentArgs, 'strokeOpacity') if strokeOpacity then data.properties['stroke-opacity'] = tonumber(strokeOpacity) end local fill = util.getParameterValue(contentArgs, 'fill') if fill and (data.service == "geoshape" or data.service == "geomask") then data.properties.fill = fill local fillOpacity = util.getParameterValue(contentArgs, 'fillOpacity') if fillOpacity then data.properties['fill-opacity'] = tonumber(fillOpacity) end end end data.properties.title = util.getParameterValue(contentArgs, 'title') or mw.title.getCurrentTitle().text if util.getParameterValue(contentArgs, 'description') then data.properties.description = util.getParameterValue(contentArgs, 'description') end return mw.text.jsonEncode(data) end --[[ Makes attributes for the maplink or mapframe tag. @param {table} args @param {boolean} [isTitle] Tag is to be displayed in the title of page rather than inline @returns {table<string,string>} key-value pairs of attribute names and values ]]-- function make.tagAttribs(args, isTitle) local attribs = {} if util.getParameterValue(args, 'zoom') then attribs.zoom = util.getParameterValue(args, 'zoom') end if util.isDeclined(util.getParameterValue(args, 'icon')) then attribs.class = "no-icon" end if util.getParameterValue(args, 'type') == L10n.str.point and not coordsDerivedFromFeatures then local lat, long = make.coords(args, 'plainOutput') attribs.latitude = tostring(lat) attribs.longitude = tostring(long) end if util.isAffirmed(util.getParameterValue(args, 'frame')) and not(isTitle) then attribs.width = util.getParameterValue(args, 'frameWidth') or L10n.defaults.frameWidth attribs.height = util.getParameterValue(args, 'frameHeight') or L10n.defaults.frameHeight if util.getParameterValue(args, 'frameCoordinates') then local frameLat, frameLong = util.parseCoords(util.getParameterValue(args, 'frameCoordinates')) attribs.latitude = frameLat attribs.longitude = frameLong else if util.getParameterValue(args, 'frameLatitude') then attribs.latitude = util.getParameterValue(args, 'frameLatitude') end if util.getParameterValue(args, 'frameLongitude') then attribs.longitude = util.getParameterValue(args, 'frameLongitude') end end if not attribs.latitude and not attribs.longitude and not coordsDerivedFromFeatures then local success, lat, long = pcall(util.wikidataCoords, util.getParameterValue(args, 'id') or wb.getEntityIdForCurrentPage()) if success then attribs.latitude = tostring(lat) attribs.longitude = tostring(long) end end if util.getParameterValue(args, 'frameAlign') then attribs.align = util.getParameterValue(args, 'frameAlign') end if util.isAffirmed(util.getParameterValue(args, 'plain')) then attribs.frameless = "1" else attribs.text = util.getParameterValue(args, 'text') or L10n.defaults.text end else attribs.text = util.getParameterValue(args, 'text') or L10n.defaults.text end return attribs end --[[ Makes maplink wikitext that will be located in the top-right of the title of the page (the same place where coords with |display=title are positioned). @param {table} args @param {string} tagContent Content for the maplink tag @returns {string} ]]-- function make.titleOutput(args, tagContent) local titleTag = mw.text.tag('maplink', make.tagAttribs(args, true), tagContent) local spanAttribs = { style = "font-size: small;", id = "mapframe-coordinates" } local indicatorContent = mw.text.tag('span', spanAttribs, titleTag) return mw.getCurrentFrame():extensionTag { name = "indicator", content = indicatorContent, args = { name = "zzz-mapframe" --zzz: show as last indicator } } end --[[ Makes maplink or mapframe wikitext that will be located inline. @param {table} args @param {string} tagContent Content for the maplink tag @returns {string} ]]-- function make.inlineOutput(args, tagContent) local tagName = 'maplink' if util.getParameterValue(args, 'frame') then tagName = 'mapframe' end return mw.text.tag(tagName, make.tagAttribs(args), tagContent) end --[[ Makes the HTML required for the swicther to work, including the templatestyles tag. @param {table} params table sequence of {map, label} tables @param {string} params{}.map Wikitext for mapframe map @param {string} params{}.label Label text for swicther option @param {table} options @param {string} options.alignment "left" or "center" or "right" @param {boolean} options.isThumbnail Display in a thumbnail @param {string} options.width Width of frame, e.g. "200" @param {string} [options.caption] Caption wikitext for thumnail @retruns {string} swicther HTML ]]-- function make.switcherHtml(params, options) options = options or {} local frame = mw.getCurrentFrame() local styles = frame:extensionTag{ name = "templatestyles", args = {src = "Template:Maplink/styles-multi.css"} } local container = mw.html.create("div") :addClass("switcher-container") :addClass("mapframe-multi-container") if options.alignment == "left" or options.alignment == "right" then container:addClass("float"..options.alignment) else -- alignment is "center" container:addClass("center") end for i = 1, #params do container :tag("div") :wikitext(params[i].map) :tag("span") :addClass("switcher-label") :css("display", "none") :wikitext(mw.text.trim(params[i].label)) end if not options.isThumbnail then return styles .. tostring(container) end local classlist = container:getAttr("class") classlist = mw.ustring.gsub(classlist, "%a*"..options.alignment, "") container:attr("class", classlist) local outerCountainer = mw.html.create("div") :addClass("mapframe-multi-outer-container") :addClass("mw-kartographer-container") :addClass("thumb") if options.alignment == "left" or options.alignment == "right" then outerCountainer:addClass("float"..options.alignment) else -- alignment is "center" outerCountainer :addClass("tnone") :addClass("center") end outerCountainer :tag("div") :addClass("thumbinner") :css("width", options.width.."px") :node(container) :node(options.caption and mw.html.create("div") :addClass("thumbcaption") :wikitext(options.caption) ) return styles .. tostring(outerCountainer) end --[[ Makes the HTML required for an overlay map to work tag. @param {string} overlayMap wikitext for the overlay map @param {string} baseMap wikitext for the base map @param {table} options various styling/display options @param {string} options.align "left" or "center" or "right" @param {string|number} options.width Width of the base map, e.g. "300" @param {string|number} options.width Height of the base map, e.g. "200" @param {string} options.border Border style for the overlayed map, e.g. "1px solid white" @param {string} options.horizontalAlignment Horizontal alignment for overlay map, "left" or "right" @param {string|number} options.horizontalOffset Horizontal offset in pixels from the alignment edge, e.g "10" @param {string} options.verticalAlignment Vertical alignment for overlay map, "top" or "bottom" @param {string|number} options.verticalOffset Vertical offset in pixels from the alignment edge, e.g. is "10" @param {boolean} options.isThumbnail Display in a thumbnail @param {string} [options.caption] Caption wikitext for thumnail @retruns {string} HTML for basemap with overlay ]]-- function make.overlayHtml(overlayMap, baseMap, options) options = options or {} local containerFloatClass = "float"..(options.align or "none") if options.align == "center" then containerFloatClass = "center" end local containerStyle = { position = "relative", width = options.width .. "px", height = options.height .. "px", overflow = "hidden" -- mobile/minerva tends to add scrollbars for a couple of pixels } if options.align == "center" then containerStyle["margin-left"] = "auto" containerStyle["margin-right"] = "auto" end local container = mw.html.create("div") :addClass("mapframe-withOverlay-container") :addClass(containerFloatClass) :addClass("noresize") :css(containerStyle) local overlayStyle = { position = "absolute", ["z-index"] = "1", border = options.border or "1px solid white" } if options.horizontalAlignment == "right" then overlayStyle.right = options.horizontalOffset .. "px" else overlayStyle.left = options.horizontalOffset .. "px" end if options.verticalAlignment == "bottom" then overlayStyle.bottom = options.verticalOffset .. "px" else overlayStyle.top = options.verticalOffset .. "px" end local overlayDiv = mw.html.create("div") :css(overlayStyle) :wikitext(overlayMap) container :node(overlayDiv) :wikitext(baseMap) if not options.isThumbnail then return tostring(container) end local classlist = container:getAttr("class") classlist = mw.ustring.gsub(classlist, "%a*"..options.align, "") container:attr("class", classlist) local outerCountainer = mw.html.create("div") :addClass("mapframe-withOverlay-outerContainer") :addClass("mw-kartographer-container") :addClass("thumb") if options.align == "left" or options.align == "right" then outerCountainer:addClass("t"..options.align) else -- alignment is "center" outerCountainer :addClass("tnone") :addClass("center") end outerCountainer :tag("div") :addClass("thumbinner") :css("width", options.width.."px") :node(container) :node(options.caption and mw.html.create("div") :addClass("thumbcaption") :wikitext(options.caption) ) return tostring(outerCountainer) end --[[---------------------------------------------------------------------------- Package to be exported, i.e. methods which will available to templates and other modules. ----------------------------------------------------------------------------]]-- local p = {} -- Entry point for templates function p.main(frame) local parent = frame.getParent(frame) -- Check for overlay option local overlay = util.getParameterValue(parent.args, 'overlay') local hasOverlay = overlay and mw.text.trim(overlay) ~= "" -- Check for switch option local switch = util.getParameterValue(parent.args, 'switch') local isMulti = switch and mw.text.trim(switch) ~= "" -- Create output by choosing method to suit options local output if hasOverlay then output = p.withOverlay(parent.args) elseif isMulti then output = p.multi(parent.args) else output = p._main(parent.args) end -- Preprocess output before returning it return frame:preprocess(output) end -- Entry points for modules function p._main(_args) local args = util.trimArgs(_args) local tagContent = make.content(args) local display = mw.text.split(util.getParameterValue(args, 'display') or L10n.defaults.display, '%s*' .. L10n.str.dsep .. '%s*') local displayInTitle = display[1] == L10n.str.title or display[2] == L10n.str.title local displayInline = display[1] == L10n.str.inline or display[2] == L10n.str.inline local output if displayInTitle and displayInline then output = make.titleOutput(args, tagContent) .. make.inlineOutput(args, tagContent) elseif displayInTitle then output = make.titleOutput(args, tagContent) elseif displayInline then output = make.inlineOutput(args, tagContent) else error(L10n.error.badDisplayPara) end return output end function p.multi(_args) local args = util.trimArgs(_args) if not args[L10n.para.switch] then error(L10n.error.noSwitchPara, 0) end local switchParamValue = util.getParameterValue(args, 'switch') local switchLabels = util.tableFromList(switchParamValue) if #switchLabels == 1 then error(L10n.error.oneSwitchLabel, 0) end local mapframeArgs = {} local switchParams = {} for name, val in pairs(args) do -- Copy to mapframeArgs, if not the switch labels or a switch parameter if val ~= switchParamValue and not string.match(val, "^"..L10n.str.switch..":") then mapframeArgs[name] = val end -- Check if this is a param to switch. If so, store the name and switch -- values in switchParams table. local switchList = string.match(val, "^"..L10n.str.switch..":(.+)") if switchList ~= nil then local values = util.tableFromList(switchList) if #values == 1 then error(string.format(L10n.error.oneSwitchValue, name), 0) end switchParams[name] = values end end if util.tableCount(switchParams) == 0 then error(L10n.error.noSwitchLists, 0) end local switchCount = util.subTablesCount(switchParams) if not switchCount then error(L10n.error.switchMismatches, 0) elseif switchCount > #switchLabels then error(string.format(L10n.error.fewerSwitchLabels, switchCount, #switchLabels), 0) end -- Ensure a plain frame will be used (thumbnail will be built by the -- make.switcherHtml function if required, so that switcher options are -- inside the thumnail) mapframeArgs.plain = "yes" local switcher = {} for i = 1, switchCount do local label = switchLabels[i] for name, values in pairs(switchParams) do mapframeArgs[name] = values[i] end table.insert(switcher, { map = p._main(mapframeArgs), label = "Show "..label }) end return make.switcherHtml(switcher, { alignment = args["frame-align"] or "right", isThumbnail = (args.frame and not args.plain) and true or false, width = args["frame-width"] or L10n.defaults.frameWidth, caption = args.text }) end function p.withOverlay(_args) -- Get and trim wikitext for overlay map local overlayMap = _args.overlay if type(overlayMap) == 'string' then overlayMap = overlayMap:match('^%s*(.-)%s*$') end local isThumbnail = (util.getParameterValue(_args, "frame") and not util.getParameterValue(_args, "plain")) and true or false -- Get base map using the _main function, as a plain map local args = util.trimArgs(_args) args.plain = "yes" local basemap = p._main(args) -- Extract overlay options from args local overlayOptions = { width = util.getParameterValue(args, "frameWidth") or L10n.defaults.frameWidth, height = util.getParameterValue(args, "frameHeight") or L10n.defaults.frameHeight, align = util.getParameterValue(args, "frameAlign") or L10n.defaults.frameAlign, border = util.getParameterValue(args, "overlayBorder") or L10n.defaults.overlayBorder, horizontalAlignment = util.getParameterValue(args, "overlayHorizontalAlignment") or L10n.defaults.overlayHorizontalAlignment, horizontalOffset = util.getParameterValue(args, "overlayHorizontalOffset") or L10n.defaults.overlayHorizontalOffset, verticalAlignment = util.getParameterValue(args, "overlayVerticalAlignment") or L10n.defaults.overlayVerticalAlignment, verticalOffset = util.getParameterValue(args, "overlayVerticalOffset") or L10n.defaults.overlayVerticalOffset, isThumbnail = isThumbnail, caption = util.getParameterValue(args, "text") or L10n.defaults.text } -- Make the HTML for the overlaying maps return make.overlayHtml(overlayMap, basemap, overlayOptions) end -- Entry point for testcase tests p.test = util return p ctsgv4ln5giysy1bit377346v8nejri 746168 746167 2026-06-12T21:51:54Z Robertsky 51025 1 revision imported from [[:en:Module:Mapframe]]: for workshop activity 746167 Scribunto text/plain -- Note: Originally written on English Wikipedia at https://en.wikipedia.org/wiki/Module:Mapframe --[[---------------------------------------------------------------------------- ##### Localisation (L10n) settings ##### Replace values in quotes ("") with localised values ----------------------------------------------------------------------------]]-- local L10n = {} local wb = mw.wikibase -- Modue dependencies local parser -- local copy of https://www.mediawiki.org/wiki/Module:WikitextParser loaded lazily -- "strict" should not be used, at least until all other modules which require this module are not using globals. -- Template parameter names (unnumbered versions only) -- Specify each as either a single string, or a table of strings (aliases) -- Aliases are checked left-to-right, i.e. `{ "one", "two" }` is equivalent to using `{{{one| {{{two|}}} }}}` in a template L10n.para = { display = "display", type = "type", id = { "id", "ids" }, from = "from", raw = "raw", title = "title", description = "description", strokeColor = { "stroke-color", "stroke-colour" }, strokeWidth = "stroke-width", strokeOpacity = "stroke-opacity", fill = "fill", fillOpacity = "fill-opacity", coord = "coord", marker = "marker", markerColor = { "marker-color", "marker-colour" }, markerSize = "marker-size", radius = { "radius", "radius_m" }, radiusKm = "radius_km", radiusFt = "radius_ft", radiusMi = "radius_mi", edges = "edges", text = "text", icon = "icon", zoom = "zoom", frame = "frame", plain = "plain", frameWidth = "frame-width", frameHeight = "frame-height", frameCoordinates= { "frame-coordinates", "frame-coord" }, frameLatitude = { "frame-lat", "frame-latitude" }, frameLongitude = { "frame-long", "frame-longitude" }, frameAlign = "frame-align", switch = "switch", overlay = "overlay", overlayBorder = "overlay-border", overlayHorizontalAlignment = "overlay-horizontal-alignment", overlayVerticalAlignment = "overlay-vertical-alignment", overlayHorizontalOffset = "overlay-horizontal-offset", overlayVerticalOffset = "overlay-vertical-offset" } -- Names of other templates this module can extract coordinates from L10n.template = { templates = { -- The coord template, as well as templates with output that contains {{coord}} "Coord", "Coord/sandbox", "NRHP row", "NRHP row/sandbox", "WikidataCoord", "WikidataCoord/sandbox", "Wikidatacoord", "Wikidata coord" }, modules = { -- The coordinates module, as well as modules with output that contains {{coord}} "Coordinates", "Coordinates/sandbox", "WikidataCoord", "WikidataCoord/sandbox" } } -- Error messages L10n.error = { badDisplayPara = "Invalid display parameter", noCoords = "Coordinates must be specified on Wikidata or in |" .. ( type(L10n.para.coord)== 'table' and L10n.para.coord[1] or L10n.para.coord ) .. "=", wikidataCoords = "Coordinates not found on Wikidata", noCircleCoords = "Circle centre coordinates must be specified, or available via Wikidata", negativeRadius = "Circle radius must be a positive number", noRadius = "Circle radius must be specified", negativeEdges = "Circle edges must be a positive number", noSwitchPara = "Found only one switch value in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", oneSwitchLabel = "Found only one label in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", noSwitchLists = "At least one parameter must have a SWITCH: list", switchMismatches = "All SWITCH: lists must have the same number of values", -- "%s" and "%d" tokens will be replaced with strings and numbers when used oneSwitchValue = "Found only one switch value in |%s=", fewerSwitchLabels = "Found %d switch values but only %d labels in |" .. ( type(L10n.para.switch)== 'table' and L10n.para.switch[1] or L10n.para.switch ) .. "=", noNamedCoords = "No named coordinates found in %s" } -- Other strings L10n.str = { -- valid values for display parameter, e.g. (|display=inline) or (|display=title) or (|display=inline,title) or (|display=title,inline) inline = "inline", title = "title", dsep = ",", -- separator between inline and title (comma in the example above) -- valid values for type parameter line = "line", -- geoline feature (e.g. a road) shape = "shape", -- geoshape feature (e.g. a state or province) shapeInverse = "shape-inverse", -- geomask feature (the inverse of a geoshape) data = "data", -- geoJSON data page on Commons point = "point", -- single point feature (coordinates) circle = "circle", -- circular area around a point named = "named", -- all named coordinates in an article or section -- Keyword to indicate a switch list. Must NOT use the special characters ^$()%.[]*+-? switch = "SWITCH", -- valid values for icon, frame, and plain parameters affirmedWords = ' '..table.concat({ "add", "added", "affirm", "affirmed", "include", "included", "on", "true", "yes", "y" }, ' ')..' ', declinedWords = ' '..table.concat({ "decline", "declined", "exclude", "excluded", "false", "none", "not", "no", "n", "off", "omit", "omitted", "remove", "removed" }, ' ')..' ' } -- Default values for parameters L10n.defaults = { display = L10n.str.inline, text = "Map", frameWidth = "300", frameHeight = "200", frameAlign = "right", markerColor = "5E74F3", markerSize = nil, strokeColor = "#ff0000", strokeWidth = 6, edges = 32, -- number of edges used to approximate a circle overlayBorder = "1px solid white", overlayHorizontalAlignment = "right", overlayHorizontalOffset = "0", overlayVerticalAlignment = "bottom", overlayVerticalOffset = "0" } -- #### End of L10n settings #### --[[---------------------------------------------------------------------------- Utility methods ----------------------------------------------------------------------------]]-- local util = {} --[[ Looks up a parameter value based on the id (a key from the L10n.para table) and optionally a suffix, for parameters that can be suffixed (e.g. type2 is type with suffix 2). @param {table} args key-value pairs of parameter names and their values @param {string} param_id id for parameter name (key from the L10n.para table) @param {string} [suffix] suffix for parameter name @returns {string|nil} parameter value if found, or nil if not found ]]-- function util.getParameterValue(args, param_id, suffix) suffix = suffix or '' if type( L10n.para[param_id] ) ~= 'table' then return args[L10n.para[param_id]..suffix] end for _i, paramAlias in ipairs(L10n.para[param_id]) do if args[paramAlias..suffix] then return args[paramAlias..suffix] end end return nil end --[[ Trim whitespace from args, and remove empty args. Also fix control characters. @param {table} argsTable @returns {table} trimmed args table ]]-- function util.trimArgs(argsTable) local cleanArgs = {} for key, val in pairs(argsTable) do if type(key) == 'string' and type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val ~= '' then -- control characters inside json need to be escaped, but stripping them is simpler -- See also T214984 -- However, *don't* strip control characters from wikitext (text or description parameters) or you'll break strip markers -- Alternatively it might be better to only strip control char from raw parameter content if util.matchesParam('text', key) or util.matchesParam('description', key, key:gsub('^%D+(%d+)$', '%1') ) then cleanArgs[key] = val else cleanArgs[key] = val:gsub('%c',' ') end end else cleanArgs[key] = val end end return cleanArgs end --[[ Check if a parameter name matches an unlocalized parameter key @param {string} key - the unlocalized parameter name to search through @param {string} name - the localized parameter name to check @param {string|nil} - an optional suffix to apply to the value(s) from the localization key @returns {boolean} true if the name matches the parameter, false otherwise ]]-- function util.matchesParam(key, name, suffix) local param = L10n.para[key] suffix = suffix or '' if type(param) == 'table' then for _, v in pairs(param) do if (v .. suffix) == name then return true end end return false end return ((param .. suffix) == name) end --[[ Check if a value is affirmed (one of the values in L10n.str.affirmedWords) @param {string} val Value to be checked @returns {boolean} true if affirmed, false otherwise ]]-- function util.isAffirmed(val) if not(val) then return false end return string.find(L10n.str.affirmedWords, ' '..val..' ', 1, true ) and true or false end --[[ Check if a value is declined (one of the values in L10n.str.declinedWords) @param {string} val Value to be checked @returns {boolean} true if declined, false otherwise ]]-- function util.isDeclined(val) if not(val) then return false end return string.find(L10n.str.declinedWords , ' '..val..' ', 1, true ) and true or false end --[[ Check if the name of a template matches the known coord templates or wrappers (in L10n.template.templates and L10n.template.modules). The name is normalised when checked, so e.g. the names "Coord", "coord", and " Coord" all return true. @param {string} name @returns {boolean} true if it is a coord template or wrapper, false otherwise ]]-- function util.isCoordTemplateOrWrapper(name) name = mw.text.trim(name) local modName = mw.ustring.gsub(name, '#invoke:', '') local inputTitle = mw.title.new(modName, (name ~= modName) and 'Module' or 'Template') if not inputTitle then return false end -- Create (or reuse) mw.title objects for each known coord template/wrapper. -- Stored in L10n.template.title so that they don't need to be recreated -- each time this function is called if not L10n.template.titles then L10n.template.titles = {} for _, v in pairs(L10n.template.templates) do table.insert(L10n.template.titles, mw.title.new(v, 'Template')) end for _, v in pairs(L10n.template.modules) do table.insert(L10n.template.titles, mw.title.new(v, 'Module')) end end for _, templateTitle in pairs(L10n.template.titles) do if mw.title.equals(inputTitle, templateTitle) then return true end end return false end --[[ Recursively extract coord templates which have a name parameter. @param {string} wikitext @returns {table} table sequence of coord templates ]]-- function util.extractCoordTemplates(wikitext) local output = {} local templates = mw.ustring.gmatch(wikitext, '{%b{}}') for template in templates do local templateName = mw.ustring.match(template, '{{([^}|]+)') local nameParam = mw.ustring.match(template, "|%s*name%s*=%s*[^}|]+") if util.isCoordTemplateOrWrapper(templateName) then if nameParam then table.insert(output, template) end elseif mw.ustring.find(mw.ustring.sub(template, 2), "{{") then local subOutput = util.extractCoordTemplates(mw.ustring.sub(template, 2)) for _, t in pairs(subOutput) do table.insert(output, t) end end end -- ensure coords are not using title display for k, v in pairs(output) do output[k] = mw.ustring.gsub(v, "|%s*display%s*=[^|}]+", "|display=inline") end return output end --[[ Gets all named coordiates from a page or a section of a page. @param {string|nil} page Page name, or name#section, to get named coordinates from. If the name is omitted, i.e. #section or nil or empty string, then the current page will be used. @returns {table} sequence of {coord, name, description} tables where coord is the coordinates in a format suitable for #util.parseCoords, name is a string, and description is a string (coordinates in a format suitable for displaying to the reader). If for some reason the name can't be found, the description is nil and the name contains display-format coordinates. @throws {L10n.error.noNamedCoords} if no named coordinates are found. ]]-- function util.getNamedCoords(page) local parts = mw.text.split(page or "", "#", true) local name = parts[1] == "" and mw.title.getCurrentTitle().prefixedText or parts[1] local section = parts[2] local title = mw.title.new(name) if title.isRedirect then title = title.redirectTarget end local pageWikitext = title:getContent() if section then if parser == nil then -- load [[Module:WikitextParser]] lazily so it is only transcluded on pages that use it parser = require("Module:WikitextParser") end pageWikitext = parser.getSection(pageWikitext, section) or '' end local coordTemplates = util.extractCoordTemplates(pageWikitext) if #coordTemplates == 0 then error(string.format(L10n.error.noNamedCoords, page or name), 0) end local frame = mw.getCurrentFrame() local sep = "________" local expandedContent = frame:preprocess(table.concat(coordTemplates, sep)) local expandedTemplates = mw.text.split(expandedContent, sep) local namedCoords = {} for _, expandedTemplate in pairs(expandedTemplates) do local coord = mw.ustring.match(expandedTemplate, "<span class=\"geo%-dec\".->(.-)</span>") if coord then local coordname = ( -- name specified by a wrapper template, e.g [[Article|Name]] mw.ustring.match(expandedTemplate, "<span class=\"mapframe%-coord%-name\">(.-)</span>") or -- name passed into coord template mw.ustring.match(expandedTemplate, "<span class=\"fn org\">(.-)</span>") or -- default to the coordinates if the name can't be retrieved coord ) local description = coordname ~= coord and coord table.insert(namedCoords, { coord=mw.ustring.gsub(coord, "[° ]", "_"), name=coordname, description=description }) end end if #namedCoords == 0 then error(string.format(L10n.error.noNamedCoords, page or name), 0) end return namedCoords end --[[ Parse coordinate values from the params passed in a GeoHack url (such as //tools.wmflabs.org/geohack/geohack.php?pagename=Example&params=1_2_N_3_4_W_ or //tools.wmflabs.org/geohack/geohack.php?pagename=Example&params=1.23_S_4.56_E_ ) or non-url string in the same format (such as `1_2_N_3_4_W_` or `1.23_S_4.56_E_`) @param {string} coords string containing coordinates @returns {number, number} latitude, longitude ]]-- function util.parseCoords(coords) local coordsPatt if mw.ustring.find(coords, "params=", 1, true) then -- prevent false matches from page name, e.g. ?pagename=Lorem_S._Ipsum coordsPatt = 'params=([_%.%d]+[NS][_%.%d]+[EW])' else -- not actually a geohack url, just the same format coordsPatt = '[_%.%d]+[NS][_%.%d]+[EW]' end local parts = mw.text.split((mw.ustring.match(coords, coordsPatt) or ''), '_') local lat_d = tonumber(parts[1]) assert(lat_d, "Unable to get latitude from input '"..coords.."'.") local lat_m = tonumber(parts[2]) -- nil if coords are in decimal format local lat_s = lat_m and tonumber(parts[3]) -- nil if coords are either in decimal format or degrees and minutes only local lat = lat_d + (lat_m or 0)/60 + (lat_s or 0)/3600 if parts[#parts/2] == 'S' then lat = lat * -1 end local long_d = tonumber(parts[1+#parts/2]) assert(long_d, "Unable to get longitude from input '"..coords.."'.") local long_m = tonumber(parts[2+#parts/2]) -- nil if coords are in decimal format local long_s = long_m and tonumber(parts[3+#parts/2]) -- nil if coords are either in decimal format or degrees and minutes only local long = long_d + (long_m or 0)/60 + (long_s or 0)/3600 if parts[#parts] == 'W' then long = long * -1 end return lat, long end --[[ Get coordinates from a Wikidata item @param {string} item_id Wikidata item id (Q number) @returns {number, number} latitude, longitude @throws {L10n.error.noCoords} if item_id is invalid or the item does not exist @throws {L10n.error.wikidataCoords} if the the item does not have a P625 statement (coordinates), or it is set to "no value" ]]-- function util.wikidataCoords(item_id) if not (item_id and wb.isValidEntityId(item_id) and wb.entityExists(item_id)) then error(L10n.error.noCoords, 0) end local coordStatements = wb.getBestStatements(item_id, 'P625') if not coordStatements or #coordStatements == 0 then error(L10n.error.wikidataCoords, 0) end local hasNoValue = ( coordStatements[1].mainsnak and (coordStatements[1].mainsnak.snaktype == 'novalue' or coordStatements[1].mainsnak.snaktype == 'somevalue') ) if hasNoValue then error(L10n.error.wikidataCoords, 0) end local wdCoords = coordStatements[1]['mainsnak']['datavalue']['value'] return tonumber(wdCoords['latitude']), tonumber(wdCoords['longitude']) end --[[ Creates a polygon that approximates a circle @param {number} lat Latitude @param {number} long Longitude @param {number} radius Radius in metres @param {number} n Number of edges for the polygon @returns {table} sequence of {latitude, longitude} table sequences, where latitude and longitude are both numbers ]]-- function util.circleToPolygon(lat, long, radius, n) -- n is number of edges -- Based on https://github.com/gabzim/circle-to-polygon, ISC licence local function offset(cLat, cLon, distance, bearing) local lat1 = math.rad(cLat) local lon1 = math.rad(cLon) local dByR = distance / 6378137 -- distance divided by 6378137 (radius of the earth) wgs84 local offet_lat = math.asin( math.sin(lat1) * math.cos(dByR) + math.cos(lat1) * math.sin(dByR) * math.cos(bearing) ) local offet_lon = lon1 + math.atan2( math.sin(bearing) * math.sin(dByR) * math.cos(lat1), math.cos(dByR) - math.sin(lat1) * math.sin(offet_lat) ) return {math.deg(offet_lon), math.deg(offet_lat)} end local coordinates = {}; local i = 0; while i < n do table.insert(coordinates, offset(lat, long, radius, (2*math.pi*i*-1)/n) ) i = i + 1 end table.insert(coordinates, offset(lat, long, radius, 0)) return coordinates end --[[ Get the number of key-value pairs in a table, which might not be a sequence. @param {table} t @returns {number} count of key-value pairs ]]-- function util.tableCount(t) local count = 0 for k, v in pairs(t) do count = count + 1 end return count end --[[ For a table where the values are all tables, returns either the util.tableCount of the subtables if they are all the same, or nil if they are not all the same. @param {table} t @returns {number|nil} count of key-value pairs of subtable, or nil if subtables have different counts ]]-- function util.subTablesCount(t) local count = nil for k, v in pairs(t) do if count == nil then count = util.tableCount(v) elseif count ~= util.tableCount(v) then return nil end end return count end --[[ Splits a list into a table sequence. The items in the list may be separated by commas, or by semicolons (if items may contain commas), or by "###" (if items may contain semicolons). @param {string} listString @returns {table} sequence of list items ]]-- function util.tableFromList(listString) if type(listString) ~= "string" or listString == "" then return nil end local separator = (mw.ustring.find(listString, "###", 0, true ) and "###") or (mw.ustring.find(listString, ";", 0, true ) and ";") or "," local pattern = "%s*"..separator.."%s*" return mw.text.split(listString, pattern) end -- Boolean in outer scope indicating if Kartographer should be able to -- automatically calculate coordinates (see phab:T227402) local coordsDerivedFromFeatures = false; --[[---------------------------------------------------------------------------- Make methods: These take in a table of arguments, and return either a string or a table to be used in the eventual output. ----------------------------------------------------------------------------]]-- local make = {} --[[ Makes content to go inside the maplink or mapframe tag. @param {table} args @returns {string} tag content ]]-- function make.content(args) if util.getParameterValue(args, 'raw') then coordsDerivedFromFeatures = true -- Kartographer should be able to automatically calculate coords from raw geoJSON return util.getParameterValue(args, 'raw') end local content = {} local argsExpanded = {} for k, v in pairs(args) do local index = string.match( k, '^[^0-9]+([0-9]*)$' ) if index ~= nil then local indexNumber if index ~= '' then indexNumber = tonumber(index) else indexNumber = 1 end if argsExpanded[indexNumber] == nil then argsExpanded[indexNumber] = {} end argsExpanded[indexNumber][ string.gsub(k, index, '') ] = v end end for contentIndex, contentArgs in pairs(argsExpanded) do local argType = util.getParameterValue(contentArgs, "type") -- Kartographer automatically calculates coords if geolines/shapes are used (T227402) if not coordsDerivedFromFeatures then coordsDerivedFromFeatures = ( argType == L10n.str.line or argType == L10n.str.shape ) and true or false end if argType == L10n.str.named then local namedCoords = util.getNamedCoords(util.getParameterValue(contentArgs, "from")) local typeKey = type(L10n.para.type) == "table" and L10n.para.type[1] or L10n.para.type local coordKey = type(L10n.para.coord) == "table" and L10n.para.coord[1] or L10n.para.coord local titleKey = type(L10n.para.title) == "table" and L10n.para.title[1] or L10n.para.title local descKey = type(L10n.para.description) == "table" and L10n.para.description[1] or L10n.para.description for _, namedCoord in pairs(namedCoords) do contentArgs[typeKey] = "point" contentArgs[coordKey] = namedCoord.coord contentArgs[titleKey] = namedCoord.name contentArgs[descKey] = namedCoord.description content[#content+1] = make.contentJson(contentArgs) end else content[#content + 1] = make.contentJson(contentArgs) end end --Single item, no array needed if #content==1 then return content[1] end --Multiple items get placed in a FeatureCollection local contentArray = '[\n' .. table.concat( content, ',\n') .. '\n]' return contentArray end --[[ Make coordinates from the coord arg, or the id arg, or the current page's Wikidata item. @param {table} args @param {boolean} [plainOutput] @returns {Mixed} Either: {number, number} latitude, longitude if plainOutput is true; or {table} table sequence of longitude, then latitude (gives the required format for GeoJSON when encoded) ]]-- function make.coords(args, plainOutput) local coords, lat, long local frame = mw.getCurrentFrame() if util.getParameterValue(args, 'coord') then coords = frame:preprocess( util.getParameterValue(args, 'coord') ) lat, long = util.parseCoords(coords) else lat, long = util.wikidataCoords(util.getParameterValue(args, 'id') or wb.getEntityIdForCurrentPage()) end if plainOutput then return lat, long end return {[0] = long, [1] = lat} end --[[ Makes a table of coordinates that approximate a circle. @param {table} args @returns {table} sequence of {latitude, longitude} table sequences, where latitude and longitude are both numbers @throws {L10n.error.noCircleCoords} if centre coordinates are not specified @throws {L10n.error.noRadius} if radius is not specified @throws {L10n.error.negativeRadius} if radius is negative or zero @throws {L10n.error.negativeEdges} if edges is negative or zero ]]-- function make.circleCoords(args) local lat, long = make.coords(args, true) local radius = util.getParameterValue(args, 'radius') if not radius then radius = util.getParameterValue(args, 'radiusKm') and tonumber(util.getParameterValue(args, 'radiusKm'))*1000 if not radius then radius = util.getParameterValue(args, 'radiusMi') and tonumber(util.getParameterValue(args, 'radiusMi'))*1609.344 if not radius then radius = util.getParameterValue(args, 'radiusFt') and tonumber(util.getParameterValue(args, 'radiusFt'))*0.3048 end end end local edges = util.getParameterValue(args, 'edges') or L10n.defaults.edges if not lat or not long then error(L10n.error.noCircleCoords, 0) elseif not radius then error(L10n.error.noRadius, 0) elseif tonumber(radius) <= 0 then error(L10n.error.negativeRadius, 0) elseif tonumber(edges) <= 0 then error(L10n.error.negativeEdges, 0) end return util.circleToPolygon(lat, long, radius, tonumber(edges)) end --[[ Makes JSON data for a feature @param contentArgs args for this feature. Keys must be the non-suffixed version of the parameter names, i.e. use type, stroke, fill,... rather than type3, stroke3, fill3,... @returns {string} JSON encoded data ]]-- function make.contentJson(contentArgs) local data = {} if util.getParameterValue(contentArgs, 'type') == L10n.str.point or util.getParameterValue(contentArgs, 'type') == L10n.str.circle then local isCircle = util.getParameterValue(contentArgs, 'type') == L10n.str.circle data.type = "Feature" data.geometry = { type = isCircle and "LineString" or "Point", coordinates = isCircle and make.circleCoords(contentArgs) or make.coords(contentArgs) } data.properties = { title = util.getParameterValue(contentArgs, 'title') or mw.getCurrentFrame():getParent():getTitle() } if isCircle then -- TODO: This is very similar to below, should be extracted into a function data.properties.stroke = util.getParameterValue(contentArgs, 'strokeColor') or L10n.defaults.strokeColor data.properties["stroke-width"] = tonumber(util.getParameterValue(contentArgs, 'strokeWidth')) or L10n.defaults.strokeWidth local strokeOpacity = util.getParameterValue(contentArgs, 'strokeOpacity') if strokeOpacity then data.properties['stroke-opacity'] = tonumber(strokeOpacity) end local fill = util.getParameterValue(contentArgs, 'fill') if fill then data.properties.fill = fill local fillOpacity = util.getParameterValue(contentArgs, 'fillOpacity') data.properties['fill-opacity'] = fillOpacity and tonumber(fillOpacity) or 0.6 end else -- is a point local markerSymbol = util.getParameterValue(contentArgs, 'marker') or L10n.defaults.marker -- allow blank to be explicitly specified, for overriding infoboxes or other templates with a default value if markerSymbol ~= "blank" then data.properties["marker-symbol"] = markerSymbol end data.properties["marker-color"] = util.getParameterValue(contentArgs, 'markerColor') or L10n.defaults.markerColor data.properties["marker-size"] = util.getParameterValue(contentArgs, 'markerSize') or L10n.defaults.markerSize end else data.type = "ExternalData" if util.getParameterValue(contentArgs, 'type') == L10n.str.data or util.getParameterValue(contentArgs, 'from') then data.service = "page" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.line then data.service = "geoline" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.shape then data.service = "geoshape" elseif util.getParameterValue(contentArgs, 'type') == L10n.str.shapeInverse then data.service = "geomask" end if util.getParameterValue(contentArgs, 'id') or (not (util.getParameterValue(contentArgs, 'from')) and wb.getEntityIdForCurrentPage()) then data.ids = util.getParameterValue(contentArgs, 'id') or wb.getEntityIdForCurrentPage() else data.title = util.getParameterValue(contentArgs, 'from') end data.properties = { stroke = util.getParameterValue(contentArgs, 'strokeColor') or L10n.defaults.strokeColor, ["stroke-width"] = tonumber(util.getParameterValue(contentArgs, 'strokeWidth')) or L10n.defaults.strokeWidth } local strokeOpacity = util.getParameterValue(contentArgs, 'strokeOpacity') if strokeOpacity then data.properties['stroke-opacity'] = tonumber(strokeOpacity) end local fill = util.getParameterValue(contentArgs, 'fill') if fill and (data.service == "geoshape" or data.service == "geomask") then data.properties.fill = fill local fillOpacity = util.getParameterValue(contentArgs, 'fillOpacity') if fillOpacity then data.properties['fill-opacity'] = tonumber(fillOpacity) end end end data.properties.title = util.getParameterValue(contentArgs, 'title') or mw.title.getCurrentTitle().text if util.getParameterValue(contentArgs, 'description') then data.properties.description = util.getParameterValue(contentArgs, 'description') end return mw.text.jsonEncode(data) end --[[ Makes attributes for the maplink or mapframe tag. @param {table} args @param {boolean} [isTitle] Tag is to be displayed in the title of page rather than inline @returns {table<string,string>} key-value pairs of attribute names and values ]]-- function make.tagAttribs(args, isTitle) local attribs = {} if util.getParameterValue(args, 'zoom') then attribs.zoom = util.getParameterValue(args, 'zoom') end if util.isDeclined(util.getParameterValue(args, 'icon')) then attribs.class = "no-icon" end if util.getParameterValue(args, 'type') == L10n.str.point and not coordsDerivedFromFeatures then local lat, long = make.coords(args, 'plainOutput') attribs.latitude = tostring(lat) attribs.longitude = tostring(long) end if util.isAffirmed(util.getParameterValue(args, 'frame')) and not(isTitle) then attribs.width = util.getParameterValue(args, 'frameWidth') or L10n.defaults.frameWidth attribs.height = util.getParameterValue(args, 'frameHeight') or L10n.defaults.frameHeight if util.getParameterValue(args, 'frameCoordinates') then local frameLat, frameLong = util.parseCoords(util.getParameterValue(args, 'frameCoordinates')) attribs.latitude = frameLat attribs.longitude = frameLong else if util.getParameterValue(args, 'frameLatitude') then attribs.latitude = util.getParameterValue(args, 'frameLatitude') end if util.getParameterValue(args, 'frameLongitude') then attribs.longitude = util.getParameterValue(args, 'frameLongitude') end end if not attribs.latitude and not attribs.longitude and not coordsDerivedFromFeatures then local success, lat, long = pcall(util.wikidataCoords, util.getParameterValue(args, 'id') or wb.getEntityIdForCurrentPage()) if success then attribs.latitude = tostring(lat) attribs.longitude = tostring(long) end end if util.getParameterValue(args, 'frameAlign') then attribs.align = util.getParameterValue(args, 'frameAlign') end if util.isAffirmed(util.getParameterValue(args, 'plain')) then attribs.frameless = "1" else attribs.text = util.getParameterValue(args, 'text') or L10n.defaults.text end else attribs.text = util.getParameterValue(args, 'text') or L10n.defaults.text end return attribs end --[[ Makes maplink wikitext that will be located in the top-right of the title of the page (the same place where coords with |display=title are positioned). @param {table} args @param {string} tagContent Content for the maplink tag @returns {string} ]]-- function make.titleOutput(args, tagContent) local titleTag = mw.text.tag('maplink', make.tagAttribs(args, true), tagContent) local spanAttribs = { style = "font-size: small;", id = "mapframe-coordinates" } local indicatorContent = mw.text.tag('span', spanAttribs, titleTag) return mw.getCurrentFrame():extensionTag { name = "indicator", content = indicatorContent, args = { name = "zzz-mapframe" --zzz: show as last indicator } } end --[[ Makes maplink or mapframe wikitext that will be located inline. @param {table} args @param {string} tagContent Content for the maplink tag @returns {string} ]]-- function make.inlineOutput(args, tagContent) local tagName = 'maplink' if util.getParameterValue(args, 'frame') then tagName = 'mapframe' end return mw.text.tag(tagName, make.tagAttribs(args), tagContent) end --[[ Makes the HTML required for the swicther to work, including the templatestyles tag. @param {table} params table sequence of {map, label} tables @param {string} params{}.map Wikitext for mapframe map @param {string} params{}.label Label text for swicther option @param {table} options @param {string} options.alignment "left" or "center" or "right" @param {boolean} options.isThumbnail Display in a thumbnail @param {string} options.width Width of frame, e.g. "200" @param {string} [options.caption] Caption wikitext for thumnail @retruns {string} swicther HTML ]]-- function make.switcherHtml(params, options) options = options or {} local frame = mw.getCurrentFrame() local styles = frame:extensionTag{ name = "templatestyles", args = {src = "Template:Maplink/styles-multi.css"} } local container = mw.html.create("div") :addClass("switcher-container") :addClass("mapframe-multi-container") if options.alignment == "left" or options.alignment == "right" then container:addClass("float"..options.alignment) else -- alignment is "center" container:addClass("center") end for i = 1, #params do container :tag("div") :wikitext(params[i].map) :tag("span") :addClass("switcher-label") :css("display", "none") :wikitext(mw.text.trim(params[i].label)) end if not options.isThumbnail then return styles .. tostring(container) end local classlist = container:getAttr("class") classlist = mw.ustring.gsub(classlist, "%a*"..options.alignment, "") container:attr("class", classlist) local outerCountainer = mw.html.create("div") :addClass("mapframe-multi-outer-container") :addClass("mw-kartographer-container") :addClass("thumb") if options.alignment == "left" or options.alignment == "right" then outerCountainer:addClass("float"..options.alignment) else -- alignment is "center" outerCountainer :addClass("tnone") :addClass("center") end outerCountainer :tag("div") :addClass("thumbinner") :css("width", options.width.."px") :node(container) :node(options.caption and mw.html.create("div") :addClass("thumbcaption") :wikitext(options.caption) ) return styles .. tostring(outerCountainer) end --[[ Makes the HTML required for an overlay map to work tag. @param {string} overlayMap wikitext for the overlay map @param {string} baseMap wikitext for the base map @param {table} options various styling/display options @param {string} options.align "left" or "center" or "right" @param {string|number} options.width Width of the base map, e.g. "300" @param {string|number} options.width Height of the base map, e.g. "200" @param {string} options.border Border style for the overlayed map, e.g. "1px solid white" @param {string} options.horizontalAlignment Horizontal alignment for overlay map, "left" or "right" @param {string|number} options.horizontalOffset Horizontal offset in pixels from the alignment edge, e.g "10" @param {string} options.verticalAlignment Vertical alignment for overlay map, "top" or "bottom" @param {string|number} options.verticalOffset Vertical offset in pixels from the alignment edge, e.g. is "10" @param {boolean} options.isThumbnail Display in a thumbnail @param {string} [options.caption] Caption wikitext for thumnail @retruns {string} HTML for basemap with overlay ]]-- function make.overlayHtml(overlayMap, baseMap, options) options = options or {} local containerFloatClass = "float"..(options.align or "none") if options.align == "center" then containerFloatClass = "center" end local containerStyle = { position = "relative", width = options.width .. "px", height = options.height .. "px", overflow = "hidden" -- mobile/minerva tends to add scrollbars for a couple of pixels } if options.align == "center" then containerStyle["margin-left"] = "auto" containerStyle["margin-right"] = "auto" end local container = mw.html.create("div") :addClass("mapframe-withOverlay-container") :addClass(containerFloatClass) :addClass("noresize") :css(containerStyle) local overlayStyle = { position = "absolute", ["z-index"] = "1", border = options.border or "1px solid white" } if options.horizontalAlignment == "right" then overlayStyle.right = options.horizontalOffset .. "px" else overlayStyle.left = options.horizontalOffset .. "px" end if options.verticalAlignment == "bottom" then overlayStyle.bottom = options.verticalOffset .. "px" else overlayStyle.top = options.verticalOffset .. "px" end local overlayDiv = mw.html.create("div") :css(overlayStyle) :wikitext(overlayMap) container :node(overlayDiv) :wikitext(baseMap) if not options.isThumbnail then return tostring(container) end local classlist = container:getAttr("class") classlist = mw.ustring.gsub(classlist, "%a*"..options.align, "") container:attr("class", classlist) local outerCountainer = mw.html.create("div") :addClass("mapframe-withOverlay-outerContainer") :addClass("mw-kartographer-container") :addClass("thumb") if options.align == "left" or options.align == "right" then outerCountainer:addClass("t"..options.align) else -- alignment is "center" outerCountainer :addClass("tnone") :addClass("center") end outerCountainer :tag("div") :addClass("thumbinner") :css("width", options.width.."px") :node(container) :node(options.caption and mw.html.create("div") :addClass("thumbcaption") :wikitext(options.caption) ) return tostring(outerCountainer) end --[[---------------------------------------------------------------------------- Package to be exported, i.e. methods which will available to templates and other modules. ----------------------------------------------------------------------------]]-- local p = {} -- Entry point for templates function p.main(frame) local parent = frame.getParent(frame) -- Check for overlay option local overlay = util.getParameterValue(parent.args, 'overlay') local hasOverlay = overlay and mw.text.trim(overlay) ~= "" -- Check for switch option local switch = util.getParameterValue(parent.args, 'switch') local isMulti = switch and mw.text.trim(switch) ~= "" -- Create output by choosing method to suit options local output if hasOverlay then output = p.withOverlay(parent.args) elseif isMulti then output = p.multi(parent.args) else output = p._main(parent.args) end -- Preprocess output before returning it return frame:preprocess(output) end -- Entry points for modules function p._main(_args) local args = util.trimArgs(_args) local tagContent = make.content(args) local display = mw.text.split(util.getParameterValue(args, 'display') or L10n.defaults.display, '%s*' .. L10n.str.dsep .. '%s*') local displayInTitle = display[1] == L10n.str.title or display[2] == L10n.str.title local displayInline = display[1] == L10n.str.inline or display[2] == L10n.str.inline local output if displayInTitle and displayInline then output = make.titleOutput(args, tagContent) .. make.inlineOutput(args, tagContent) elseif displayInTitle then output = make.titleOutput(args, tagContent) elseif displayInline then output = make.inlineOutput(args, tagContent) else error(L10n.error.badDisplayPara) end return output end function p.multi(_args) local args = util.trimArgs(_args) if not args[L10n.para.switch] then error(L10n.error.noSwitchPara, 0) end local switchParamValue = util.getParameterValue(args, 'switch') local switchLabels = util.tableFromList(switchParamValue) if #switchLabels == 1 then error(L10n.error.oneSwitchLabel, 0) end local mapframeArgs = {} local switchParams = {} for name, val in pairs(args) do -- Copy to mapframeArgs, if not the switch labels or a switch parameter if val ~= switchParamValue and not string.match(val, "^"..L10n.str.switch..":") then mapframeArgs[name] = val end -- Check if this is a param to switch. If so, store the name and switch -- values in switchParams table. local switchList = string.match(val, "^"..L10n.str.switch..":(.+)") if switchList ~= nil then local values = util.tableFromList(switchList) if #values == 1 then error(string.format(L10n.error.oneSwitchValue, name), 0) end switchParams[name] = values end end if util.tableCount(switchParams) == 0 then error(L10n.error.noSwitchLists, 0) end local switchCount = util.subTablesCount(switchParams) if not switchCount then error(L10n.error.switchMismatches, 0) elseif switchCount > #switchLabels then error(string.format(L10n.error.fewerSwitchLabels, switchCount, #switchLabels), 0) end -- Ensure a plain frame will be used (thumbnail will be built by the -- make.switcherHtml function if required, so that switcher options are -- inside the thumnail) mapframeArgs.plain = "yes" local switcher = {} for i = 1, switchCount do local label = switchLabels[i] for name, values in pairs(switchParams) do mapframeArgs[name] = values[i] end table.insert(switcher, { map = p._main(mapframeArgs), label = "Show "..label }) end return make.switcherHtml(switcher, { alignment = args["frame-align"] or "right", isThumbnail = (args.frame and not args.plain) and true or false, width = args["frame-width"] or L10n.defaults.frameWidth, caption = args.text }) end function p.withOverlay(_args) -- Get and trim wikitext for overlay map local overlayMap = _args.overlay if type(overlayMap) == 'string' then overlayMap = overlayMap:match('^%s*(.-)%s*$') end local isThumbnail = (util.getParameterValue(_args, "frame") and not util.getParameterValue(_args, "plain")) and true or false -- Get base map using the _main function, as a plain map local args = util.trimArgs(_args) args.plain = "yes" local basemap = p._main(args) -- Extract overlay options from args local overlayOptions = { width = util.getParameterValue(args, "frameWidth") or L10n.defaults.frameWidth, height = util.getParameterValue(args, "frameHeight") or L10n.defaults.frameHeight, align = util.getParameterValue(args, "frameAlign") or L10n.defaults.frameAlign, border = util.getParameterValue(args, "overlayBorder") or L10n.defaults.overlayBorder, horizontalAlignment = util.getParameterValue(args, "overlayHorizontalAlignment") or L10n.defaults.overlayHorizontalAlignment, horizontalOffset = util.getParameterValue(args, "overlayHorizontalOffset") or L10n.defaults.overlayHorizontalOffset, verticalAlignment = util.getParameterValue(args, "overlayVerticalAlignment") or L10n.defaults.overlayVerticalAlignment, verticalOffset = util.getParameterValue(args, "overlayVerticalOffset") or L10n.defaults.overlayVerticalOffset, isThumbnail = isThumbnail, caption = util.getParameterValue(args, "text") or L10n.defaults.text } -- Make the HTML for the overlaying maps return make.overlayHtml(overlayMap, basemap, overlayOptions) end -- Entry point for testcase tests p.test = util return p ctsgv4ln5giysy1bit377346v8nejri Module:Location map/data/USA Texas 828 176048 746197 2018-03-03T19:37:22Z en>Plastikspork 0 Protected "[[Module:Location map/data/USA Texas]]": [[WP:High-risk templates|High-risk Lua module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 746197 Scribunto text/plain return { name = 'Texas', top = 36.8, bottom = 25.5, left = -106.9, right = -93.2, image = 'USA Texas location map.svg', image1 = 'Relief map of Texas.png' } 2nr7h0t8flfhhqq3420rdng6770mkcq 746198 746197 2026-06-12T21:51:59Z Robertsky 51025 1 revision imported from [[:en:Module:Location_map/data/USA_Texas]]: for workshop activity 746197 Scribunto text/plain return { name = 'Texas', top = 36.8, bottom = 25.5, left = -106.9, right = -93.2, image = 'USA Texas location map.svg', image1 = 'Relief map of Texas.png' } 2nr7h0t8flfhhqq3420rdng6770mkcq Template:FAA-airport 10 176049 746201 2021-09-02T05:19:55Z en>Izno 0 rm class 746201 wikitext text/x-wiki [https://www.gcr1.com/5010ReportRouter/default.aspx?airportID={{{ID|{{{id}}}}}} FAA Airport Form 5010 for {{{ID|{{{id}}}}}}{{#if:{{{name|}}}|&nbsp;– {{{name}}}}}] <small>[[Portable Document Format|PDF]]</small><noinclude> {{Documentation}} <!-- Categories and interwikis can be found in the /doc subpage, don't add them here. --> </noinclude> lfn7g6eubylof1kxz7lhcyle2f6frhw 746202 746201 2026-06-12T21:51:59Z Robertsky 51025 1 revision imported from [[:en:Template:FAA-airport]]: for workshop activity 746201 wikitext text/x-wiki [https://www.gcr1.com/5010ReportRouter/default.aspx?airportID={{{ID|{{{id}}}}}} FAA Airport Form 5010 for {{{ID|{{{id}}}}}}{{#if:{{{name|}}}|&nbsp;– {{{name}}}}}] <small>[[Portable Document Format|PDF]]</small><noinclude> {{Documentation}} <!-- Categories and interwikis can be found in the /doc subpage, don't add them here. --> </noinclude> lfn7g6eubylof1kxz7lhcyle2f6frhw Module:Location map/data/Poland 828 176050 746205 2016-07-19T19:53:15Z en>MSGJ 0 update location map, per request 746205 Scribunto text/plain return { name = 'Poland', top = 55.2, bottom = 48.7, left = 13.8, right = 24.5, image = 'Poland adm location map.svg', image1 = 'Relief Map of Poland.svg', } 7iy3687gxb0m4fsygxbf4fbm8x9x6c5 746206 746205 2026-06-12T21:52:00Z Robertsky 51025 1 revision imported from [[:en:Module:Location_map/data/Poland]]: for workshop activity 746205 Scribunto text/plain return { name = 'Poland', top = 55.2, bottom = 48.7, left = 13.8, right = 24.5, image = 'Poland adm location map.svg', image1 = 'Relief Map of Poland.svg', } 7iy3687gxb0m4fsygxbf4fbm8x9x6c5 Template:Infobox airport/datatable 10 176051 746207 2025-09-27T02:27:11Z en>Izno 0 move to templatestyles 746207 wikitext text/x-wiki {| class="ib-airport-datatable" |- ! class="ib-airport-datatable-w15" scope="col" rowspan="2" | {{{nlabel|Number}}} ! class="ib-airport-datatable-w50" scope="colgroup" colspan="2" | Length ! class="ib-airport-datatable-w35" scope="col" rowspan="2" | Surface |- ! class="ib-airport-datatable-w20" scope="col" | {{#if:{{{metric|}}}|m|ft}} ! class="ib-airport-datatable-w20" scope="col" | {{#if:{{{metric|}}}|ft|m}} |- {{#if:{{{l1-f|}}} {{{l1-m|}}} {{{s1|}}}| {{!}} {{{n1|}}} {{!}} {{formatnum: {{replace|{{{l1-{{#if:{{{metric|}}}|m|f}}|}}}|,|}} }} {{!}} {{#if:{{{l1-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l1-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l1-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l1-m}}}|m|ft|0|disp=output number only}} | {{convert|{{{l1-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s1|}}} |{{#if: {{{n1|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n1|}}} }}}} |- {{#if:{{{l2-f|}}} {{{l2-m|}}} {{{s2|}}}| {{!}} {{{n2|}}} {{!}} {{formatnum: {{replace|{{{l2-{{#if:{{{metric|}}}|m|f}}|}}}|,|}} }} {{!}} {{#if:{{{l2-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l2-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l2-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l2-m}}}|m|ft|0|disp=output number only}} | {{convert|{{{l2-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s2|}}} |{{#if: {{{n2|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n2|}}} }}}} |- {{#if:{{{l3-f|}}} {{{l3-m|}}} {{{s3|}}}| {{!}} {{{n3|}}} {{!}} {{formatnum: {{replace|{{{l3-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l3-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l3-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l3-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l3-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l3-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s3|}}} |{{#if: {{{n3|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n3|}}} }}}} |- {{#if:{{{l4-f|}}} {{{l4-m|}}} {{{s4|}}}| {{!}} {{{n4|}}} {{!}} {{formatnum: {{replace|{{{l4-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l4-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l4-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l4-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l4-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l4-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s4|}}} |{{#if: {{{n4|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n4|}}} }}}} |- {{#if:{{{l5-f|}}} {{{l5-m|}}} {{{s5|}}}| {{!}} {{{n5|}}} {{!}} {{formatnum: {{replace|{{{l5-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l5-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l5-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l5-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l5-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l5-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s5|}}} |{{#if: {{{n5|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n5|}}} }}}} |- {{#if:{{{l6-f|}}} {{{l6-m|}}} {{{s6|}}}| {{!}} {{{n6|}}} {{!}} {{formatnum: {{replace|{{{l6-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l6-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l6-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l6-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l6-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l6-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s6|}}} |{{#if: {{{n6|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n6|}}} }}}} |- {{#if:{{{l7-f|}}} {{{l7-m|}}} {{{s7|}}}| {{!}} {{{n7|}}} {{!}} {{formatnum: {{replace|{{{l7-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l7-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l7-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l7-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l7-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l7-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s7|}}} |{{#if: {{{n7|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n7|}}} }}}} |- {{#if:{{{l8-f|}}} {{{l8-m|}}} {{{s8|}}}| {{!}} {{{n8|}}} {{!}} {{formatnum: {{replace|{{{l8-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l8-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l8-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l8-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l8-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l8-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s8|}}} |{{#if: {{{n8|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n8|}}} }}}} |- {{#if:{{{l9-f|}}} {{{l9-m|}}} {{{s9|}}}| {{!}} {{{n9|}}} {{!}} {{formatnum: {{replace|{{{l9-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l9-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l9-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l9-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l9-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l9-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s9|}}} |{{#if: {{{n9|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n9|}}} }}}} |- {{#if:{{{l10-f|}}} {{{l10-m|}}} {{{s10|}}}| {{!}} {{{n10|}}} {{!}} {{formatnum: {{replace|{{{l10-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l10-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l10-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l10-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l10-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l10-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s10|}}} |{{#if: {{{n10|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n10|}}} }}}} |- {{#if:{{{l11-f|}}} {{{l11-m|}}} {{{s11|}}}| {{!}} {{{n11|}}} {{!}} {{formatnum: {{replace|{{{l11-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l11-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l11-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l11-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l11-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l11-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s11|}}} |{{#if: {{{n11|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n11|}}} }}}} |- {{#if:{{{l12-f|}}} {{{l12-m|}}} {{{s12|}}}| {{!}} {{{n12|}}} {{!}} {{formatnum: {{replace|{{{l12-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l12-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l12-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l12-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l12-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l12-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s12|}}} |{{#if: {{{n12|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n12|}}} }}}} |}<noinclude> {{documentation|content= This subtemplate is used by {{tl|{{BASEPAGENAME}}}}, it should not be used directly.}} </noinclude> gc82xotqx9bn3z1w6r4ybg90fzd6lso 746208 746207 2026-06-12T21:52:00Z Robertsky 51025 1 revision imported from [[:en:Template:Infobox_airport/datatable]]: for workshop activity 746207 wikitext text/x-wiki {| class="ib-airport-datatable" |- ! class="ib-airport-datatable-w15" scope="col" rowspan="2" | {{{nlabel|Number}}} ! class="ib-airport-datatable-w50" scope="colgroup" colspan="2" | Length ! class="ib-airport-datatable-w35" scope="col" rowspan="2" | Surface |- ! class="ib-airport-datatable-w20" scope="col" | {{#if:{{{metric|}}}|m|ft}} ! class="ib-airport-datatable-w20" scope="col" | {{#if:{{{metric|}}}|ft|m}} |- {{#if:{{{l1-f|}}} {{{l1-m|}}} {{{s1|}}}| {{!}} {{{n1|}}} {{!}} {{formatnum: {{replace|{{{l1-{{#if:{{{metric|}}}|m|f}}|}}}|,|}} }} {{!}} {{#if:{{{l1-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l1-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l1-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l1-m}}}|m|ft|0|disp=output number only}} | {{convert|{{{l1-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s1|}}} |{{#if: {{{n1|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n1|}}} }}}} |- {{#if:{{{l2-f|}}} {{{l2-m|}}} {{{s2|}}}| {{!}} {{{n2|}}} {{!}} {{formatnum: {{replace|{{{l2-{{#if:{{{metric|}}}|m|f}}|}}}|,|}} }} {{!}} {{#if:{{{l2-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l2-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l2-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l2-m}}}|m|ft|0|disp=output number only}} | {{convert|{{{l2-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s2|}}} |{{#if: {{{n2|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n2|}}} }}}} |- {{#if:{{{l3-f|}}} {{{l3-m|}}} {{{s3|}}}| {{!}} {{{n3|}}} {{!}} {{formatnum: {{replace|{{{l3-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l3-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l3-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l3-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l3-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l3-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s3|}}} |{{#if: {{{n3|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n3|}}} }}}} |- {{#if:{{{l4-f|}}} {{{l4-m|}}} {{{s4|}}}| {{!}} {{{n4|}}} {{!}} {{formatnum: {{replace|{{{l4-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l4-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l4-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l4-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l4-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l4-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s4|}}} |{{#if: {{{n4|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n4|}}} }}}} |- {{#if:{{{l5-f|}}} {{{l5-m|}}} {{{s5|}}}| {{!}} {{{n5|}}} {{!}} {{formatnum: {{replace|{{{l5-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l5-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l5-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l5-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l5-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l5-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s5|}}} |{{#if: {{{n5|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n5|}}} }}}} |- {{#if:{{{l6-f|}}} {{{l6-m|}}} {{{s6|}}}| {{!}} {{{n6|}}} {{!}} {{formatnum: {{replace|{{{l6-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l6-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l6-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l6-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l6-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l6-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s6|}}} |{{#if: {{{n6|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n6|}}} }}}} |- {{#if:{{{l7-f|}}} {{{l7-m|}}} {{{s7|}}}| {{!}} {{{n7|}}} {{!}} {{formatnum: {{replace|{{{l7-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l7-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l7-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l7-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l7-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l7-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s7|}}} |{{#if: {{{n7|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n7|}}} }}}} |- {{#if:{{{l8-f|}}} {{{l8-m|}}} {{{s8|}}}| {{!}} {{{n8|}}} {{!}} {{formatnum: {{replace|{{{l8-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l8-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l8-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l8-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l8-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l8-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s8|}}} |{{#if: {{{n8|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n8|}}} }}}} |- {{#if:{{{l9-f|}}} {{{l9-m|}}} {{{s9|}}}| {{!}} {{{n9|}}} {{!}} {{formatnum: {{replace|{{{l9-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l9-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l9-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l9-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l9-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l9-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s9|}}} |{{#if: {{{n9|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n9|}}} }}}} |- {{#if:{{{l10-f|}}} {{{l10-m|}}} {{{s10|}}}| {{!}} {{{n10|}}} {{!}} {{formatnum: {{replace|{{{l10-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l10-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l10-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l10-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l10-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l10-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s10|}}} |{{#if: {{{n10|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n10|}}} }}}} |- {{#if:{{{l11-f|}}} {{{l11-m|}}} {{{s11|}}}| {{!}} {{{n11|}}} {{!}} {{formatnum: {{replace|{{{l11-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l11-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l11-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l11-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l11-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l11-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s11|}}} |{{#if: {{{n11|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n11|}}} }}}} |- {{#if:{{{l12-f|}}} {{{l12-m|}}} {{{s12|}}}| {{!}} {{{n12|}}} {{!}} {{formatnum: {{replace|{{{l12-{{#if:{{{metric|}}}|m|f}}}}}|,|}} }} {{!}} {{#if:{{{l12-{{#if:{{{metric|}}}|f|m}}|}}}| {{formatnum: {{replace|{{{l12-{{#if:{{{metric|}}}|f|m}} }}}|,|}} }} |{{#if:{{{l12-{{#if:{{{metric|}}}|m|f}}|}}} | {{#if:{{{metric|}}} | {{convert|{{{l12-m}}}|m|ft|0|disp=output number only}} |{{convert|{{{l12-f}}}|ft|m|0|disp=output number only}} }} }} }} {{!}} {{{s12|}}} |{{#if: {{{n12|}}} | {{!}} class="ib-airport-datatable-number" colspan="4" {{!}} {{{n12|}}} }}}} |}<noinclude> {{documentation|content= This subtemplate is used by {{tl|{{BASEPAGENAME}}}}, it should not be used directly.}} </noinclude> gc82xotqx9bn3z1w6r4ybg90fzd6lso Module:Location map/data/USA Ohio 828 176052 746209 2021-02-06T21:37:43Z en>Jonesey95 0 add relief 746209 Scribunto text/plain return { name = 'Ohio', top = 42.5, bottom = 38.2, left = -85.0, right = -80.3, image = 'USA Ohio location map.svg', image1 = 'USA Ohio relief location map.svg' } 7qk9ndh5kvs4c8rnuhw00nbfn0dxoux 746210 746209 2026-06-12T21:52:00Z Robertsky 51025 1 revision imported from [[:en:Module:Location_map/data/USA_Ohio]]: for workshop activity 746209 Scribunto text/plain return { name = 'Ohio', top = 42.5, bottom = 38.2, left = -85.0, right = -80.3, image = 'USA Ohio location map.svg', image1 = 'USA Ohio relief location map.svg' } 7qk9ndh5kvs4c8rnuhw00nbfn0dxoux Module:Check for deprecated parameters 828 176053 746211 2026-06-11T18:41:51Z en>Zackmann08 0 Adding support for regular expression matching. Credit for this edit goes to [[User:Frietjes]] who did this in the sandbox. 746211 Scribunto text/plain -- This module may be used to compare the arguments passed to the parent -- with a list of arguments, returning a specified result if an argument is -- on the list local p = {} local MAX_PARAMS = 9 -- Limit to only showing 10 preview warnings local function isnotempty(s) return s and mw.text.trim(s) ~= '' end local function scanValues(values,results,args,replaceTable) for k, v in pairs(values) do local c = args.category:gsub('_VALUE_', v) table.insert(results, c) if v == '' then -- Fix odd bug for | = which gets stripped to the empty string -- and breaks category links v = ' ' end local replaceString = '<code>'..v..'</code>. ' local replaceValue = replaceTable and replaceTable[v] replaceString = replaceString..(replaceValue and 'Replace with <code>'..replaceValue..'</code>.' or 'It should be removed.') local p = args.preview:gsub('_VALUE_',replaceString) table.insert(results, p ) end end function p.check (frame) -- create the table of deprecated values and their matching new value return p._check(frame.args, frame:getParent().args, frame:getParent():getTitle()) end local moduleParams = {ignoreblank=true, preview=true, _category=true, _remove=true} function p._check(args, pargs, caller) local dep_values = {} local reg_exps = {} for k, v in pairs(args) do if ( type(k) == 'string' and k:find('^_regexp[1-9][0-9]*$') and v:find('=') ) then local v_split = mw.text.split(v, '%s*=%s*') if ( #v_split == 2 ) then table.insert(reg_exps, { '^' .. v_split[1] .. '$', v_split[2] } ) end elseif not moduleParams[k] then dep_values[k] = v end end -- Parse params to remove local removes = {} if args['_remove'] then for r in args['_remove']:gmatch("([^;]+)") do removes[mw.text.trim(r)] = 1 end end -- loop over the parent args and see if any are deprecated local values = {} local remove_values = {} local ignoreblank = isnotempty(args['ignoreblank']) for k, v in pairs(pargs) do if not ignoreblank or isnotempty(v) then if dep_values[k] then table.insert(values, k) elseif removes[k] then table.insert(remove_values, k) else for _, regexp in ipairs(reg_exps) do if mw.ustring.match( tostring(k), regexp[1] ) then table.insert(values, k) dep_values[k] = mw.ustring.gsub(tostring(k), regexp[1], regexp[2]) break end end end end end -- find out about calling context local title = mw.title.getCurrentTitle() -- create local defaulted arguments local category = args["_category"] or title.namespace == 0 and "[[Category:Pages with deprecated parameters]]" or "" local preview = args['preview'] or 'Page using [['..caller..']] with deprecated parameter _VALUE_' if isnotempty(preview) then preview = require('Module:If preview')._warning({preview}) end local localArgs = {category=category,preview=preview} -- scan through values and remove_values and create output results local results = {} scanValues(values,results,localArgs,dep_values) scanValues(remove_values,results,localArgs) if #results >= MAX_PARAMS*2 then while #results > MAX_PARAMS*2 do table.remove(results) -- Calling without index removes the last element end table.insert(results, require('Module:If preview')._warning({'Page using [['..caller..']] with <b>multiple other</b> deprecated parameters. Fix those above and preview again.'})) end return table.concat(results) end return p nf33yh045bpqn46orpqnkwwyw4ret2j 746212 746211 2026-06-12T21:52:01Z Robertsky 51025 1 revision imported from [[:en:Module:Check_for_deprecated_parameters]]: for workshop activity 746211 Scribunto text/plain -- This module may be used to compare the arguments passed to the parent -- with a list of arguments, returning a specified result if an argument is -- on the list local p = {} local MAX_PARAMS = 9 -- Limit to only showing 10 preview warnings local function isnotempty(s) return s and mw.text.trim(s) ~= '' end local function scanValues(values,results,args,replaceTable) for k, v in pairs(values) do local c = args.category:gsub('_VALUE_', v) table.insert(results, c) if v == '' then -- Fix odd bug for | = which gets stripped to the empty string -- and breaks category links v = ' ' end local replaceString = '<code>'..v..'</code>. ' local replaceValue = replaceTable and replaceTable[v] replaceString = replaceString..(replaceValue and 'Replace with <code>'..replaceValue..'</code>.' or 'It should be removed.') local p = args.preview:gsub('_VALUE_',replaceString) table.insert(results, p ) end end function p.check (frame) -- create the table of deprecated values and their matching new value return p._check(frame.args, frame:getParent().args, frame:getParent():getTitle()) end local moduleParams = {ignoreblank=true, preview=true, _category=true, _remove=true} function p._check(args, pargs, caller) local dep_values = {} local reg_exps = {} for k, v in pairs(args) do if ( type(k) == 'string' and k:find('^_regexp[1-9][0-9]*$') and v:find('=') ) then local v_split = mw.text.split(v, '%s*=%s*') if ( #v_split == 2 ) then table.insert(reg_exps, { '^' .. v_split[1] .. '$', v_split[2] } ) end elseif not moduleParams[k] then dep_values[k] = v end end -- Parse params to remove local removes = {} if args['_remove'] then for r in args['_remove']:gmatch("([^;]+)") do removes[mw.text.trim(r)] = 1 end end -- loop over the parent args and see if any are deprecated local values = {} local remove_values = {} local ignoreblank = isnotempty(args['ignoreblank']) for k, v in pairs(pargs) do if not ignoreblank or isnotempty(v) then if dep_values[k] then table.insert(values, k) elseif removes[k] then table.insert(remove_values, k) else for _, regexp in ipairs(reg_exps) do if mw.ustring.match( tostring(k), regexp[1] ) then table.insert(values, k) dep_values[k] = mw.ustring.gsub(tostring(k), regexp[1], regexp[2]) break end end end end end -- find out about calling context local title = mw.title.getCurrentTitle() -- create local defaulted arguments local category = args["_category"] or title.namespace == 0 and "[[Category:Pages with deprecated parameters]]" or "" local preview = args['preview'] or 'Page using [['..caller..']] with deprecated parameter _VALUE_' if isnotempty(preview) then preview = require('Module:If preview')._warning({preview}) end local localArgs = {category=category,preview=preview} -- scan through values and remove_values and create output results local results = {} scanValues(values,results,localArgs,dep_values) scanValues(remove_values,results,localArgs) if #results >= MAX_PARAMS*2 then while #results > MAX_PARAMS*2 do table.remove(results) -- Calling without index removes the last element end table.insert(results, require('Module:If preview')._warning({'Page using [['..caller..']] with <b>multiple other</b> deprecated parameters. Fix those above and preview again.'})) end return table.concat(results) end return p nf33yh045bpqn46orpqnkwwyw4ret2j Module:Location map/data/Thailand 828 176054 746213 2020-11-18T21:42:16Z en>C1MM 0 Added properly-displaying relief map that is more legible and accurate than previous one 746213 Scribunto text/plain return { name = 'Thailand', top = 20.6, bottom = 5.4, left = 97.1, right = 106.0, defaultscale = 0.6, image = 'Thailand adm location map.svg', image1 = 'Thailand location relief map.svg' } 2mf92jt4u57sbzdy0og8q2gj1bq9bod 746214 746213 2026-06-12T21:52:01Z Robertsky 51025 1 revision imported from [[:en:Module:Location_map/data/Thailand]]: for workshop activity 746213 Scribunto text/plain return { name = 'Thailand', top = 20.6, bottom = 5.4, left = 97.1, right = 106.0, defaultscale = 0.6, image = 'Thailand adm location map.svg', image1 = 'Thailand location relief map.svg' } 2mf92jt4u57sbzdy0og8q2gj1bq9bod Template:Buildings and structures infobox templates 10 176055 746223 2026-05-03T02:23:58Z en>Zackmann08 0 Template merged as a result of [[Wikipedia:Templates_for_discussion/Log/2026_April_3#Template:Infobox_swimming_pool|TFD]] 746223 wikitext text/x-wiki {{Navbox | name = Buildings and structures infobox templates | state = {{{state<includeonly>|expanded</includeonly>}}} | bodyclass = hlist | title = {{c|Buildings and structures infobox templates}} | above = '''[[Template:Infobox building|Infobox building]]''' | group1 = Buildings | list1 = * [[Template:Infobox airport|airport]] * [[Template:Infobox archives|archives]] * [[Template:Infobox brewery|brewery]] * [[Template:Infobox casino|casino]] * [[Template:Infobox desalination plant|desalination plant]] * [[Template:Infobox factory|factory]] * [[Template:Infobox hospital|hospital]] * [[Template:Infobox housing project|housing project]] * [[Template:Infobox hut|hut]] * [[Template:Infobox library|library]] * [[Template:Infobox lighthouse|lighthouse]] * [[Template:Infobox mill building|mill building]] * [[Template:Infobox museum|museum]] * [[Template:Infobox observatory|observatory]] * [[Template:Infobox oil refinery|oil refinery]] * [[Template:Infobox power station|power station]] * [[Template:Infobox prison|prison]] * [[Template:Infobox religious building|religious building]] ** [[Template:Infobox church|church]] ** [[Template:Infobox Hindu temple|Hindu temple]] ** [[Template:Infobox Buddhist temple|Buddhist temple]] ** [[Template:Infobox LDS Temple|LDS Temple]] ** [[Template:Infobox monastery|monastery]] * [[Template:Infobox restaurant|restaurant]] * [[Template:Infobox school|school]] * [[Template:Infobox shopping mall|shopping mall]] * [[Template:Infobox station|station]] ** [[Template:Infobox London_station|London]] ** [[Template:Infobox New York City Subway station|New York]] * [[Template:Infobox venue|venue]] | group2 = Structures | list2 = * [[Template:Infobox artwork|artwork]] **including statues * [[Template:Infobox bridge|bridge]] ** [[Template:Infobox bridge type|type]] * [[Template:Infobox dam|dam]] * [[Template:Infobox fishery|fishery]] * [[Template:Infobox future infrastructure project|future infrastructure project]] * [[Template:Infobox historic site|historic site]] * [[Template:Infobox laboratory|laboratory]] * [[Template:Infobox military installation|military installation]] * [[Template:Infobox monument|monument]] ** [[Template:Infobox military memorial|military memorial]] * [[Template:Infobox pier|pier]] * [[Template:Infobox pipeline|pipeline]] * [[Template:Infobox power transmission line|power transmission line]] * [[Template:Infobox pyramid|pyramid]] * [[Template:Infobox roller coaster|roller coaster]] ** [[Template:Infobox dual roller coaster|dual]] * [[Template:Infobox room|room]] * [[Template:Infobox telescope|telescope]] * [[Template:Infobox transmitter|transmitter]] * [[Template:Infobox tunnel|tunnel]] * [[Template:Infobox urban development project|urban development project]] * [[Template:Infobox water ride|water ride]] * [[Template:Infobox windmill|windmill]] }}<noinclude> {{Documentation | content = {{Collapsible option |default=expanded}} [[Category:Buildings and structures infobox templates| ]] [[Category:Documentation see also templates]] [[Category:Related-topic templates‎]] }}<!--(end Documentation) --></noinclude> dq8bd1iueq7w5xxv52rg3qii5xf8n3e 746224 746223 2026-06-12T21:52:02Z Robertsky 51025 1 revision imported from [[:en:Template:Buildings_and_structures_infobox_templates]]: for workshop activity 746223 wikitext text/x-wiki {{Navbox | name = Buildings and structures infobox templates | state = {{{state<includeonly>|expanded</includeonly>}}} | bodyclass = hlist | title = {{c|Buildings and structures infobox templates}} | above = '''[[Template:Infobox building|Infobox building]]''' | group1 = Buildings | list1 = * [[Template:Infobox airport|airport]] * [[Template:Infobox archives|archives]] * [[Template:Infobox brewery|brewery]] * [[Template:Infobox casino|casino]] * [[Template:Infobox desalination plant|desalination plant]] * [[Template:Infobox factory|factory]] * [[Template:Infobox hospital|hospital]] * [[Template:Infobox housing project|housing project]] * [[Template:Infobox hut|hut]] * [[Template:Infobox library|library]] * [[Template:Infobox lighthouse|lighthouse]] * [[Template:Infobox mill building|mill building]] * [[Template:Infobox museum|museum]] * [[Template:Infobox observatory|observatory]] * [[Template:Infobox oil refinery|oil refinery]] * [[Template:Infobox power station|power station]] * [[Template:Infobox prison|prison]] * [[Template:Infobox religious building|religious building]] ** [[Template:Infobox church|church]] ** [[Template:Infobox Hindu temple|Hindu temple]] ** [[Template:Infobox Buddhist temple|Buddhist temple]] ** [[Template:Infobox LDS Temple|LDS Temple]] ** [[Template:Infobox monastery|monastery]] * [[Template:Infobox restaurant|restaurant]] * [[Template:Infobox school|school]] * [[Template:Infobox shopping mall|shopping mall]] * [[Template:Infobox station|station]] ** [[Template:Infobox London_station|London]] ** [[Template:Infobox New York City Subway station|New York]] * [[Template:Infobox venue|venue]] | group2 = Structures | list2 = * [[Template:Infobox artwork|artwork]] **including statues * [[Template:Infobox bridge|bridge]] ** [[Template:Infobox bridge type|type]] * [[Template:Infobox dam|dam]] * [[Template:Infobox fishery|fishery]] * [[Template:Infobox future infrastructure project|future infrastructure project]] * [[Template:Infobox historic site|historic site]] * [[Template:Infobox laboratory|laboratory]] * [[Template:Infobox military installation|military installation]] * [[Template:Infobox monument|monument]] ** [[Template:Infobox military memorial|military memorial]] * [[Template:Infobox pier|pier]] * [[Template:Infobox pipeline|pipeline]] * [[Template:Infobox power transmission line|power transmission line]] * [[Template:Infobox pyramid|pyramid]] * [[Template:Infobox roller coaster|roller coaster]] ** [[Template:Infobox dual roller coaster|dual]] * [[Template:Infobox room|room]] * [[Template:Infobox telescope|telescope]] * [[Template:Infobox transmitter|transmitter]] * [[Template:Infobox tunnel|tunnel]] * [[Template:Infobox urban development project|urban development project]] * [[Template:Infobox water ride|water ride]] * [[Template:Infobox windmill|windmill]] }}<noinclude> {{Documentation | content = {{Collapsible option |default=expanded}} [[Category:Buildings and structures infobox templates| ]] [[Category:Documentation see also templates]] [[Category:Related-topic templates‎]] }}<!--(end Documentation) --></noinclude> dq8bd1iueq7w5xxv52rg3qii5xf8n3e Template:Infobox airport/doc 10 176056 746225 2026-06-09T01:52:29Z en>Zackmann08 0 Cleaning up syntax using [[:en:User:Zackmann08/scripts/indent|indent.js]] 746225 wikitext text/x-wiki {{Documentation subpage}} {{high-use}} {{Auto short description}} {{Lua|Module:Infobox|Module:InfoboxImage|Module:String|Module:Check for unknown parameters|Module:Type in location}} {{Uses Wikidata|P625}} ==Usage== {{TOC right}} The following blank template includes all of the available parameter names, except for repeating names used for runways and statistics. All parameters except ''name'' are optional; however, "IATA: none – ICAO: none", along with the heading "Summary", will always appear. Any unused parameters should be omitted, but can also be left blank if preferred. The use of flag icons with this infobox is discouraged. <syntaxhighlight lang="wikitext"> {{Infobox airport | name = | ensign = | ensign_size = | ensign_alt = | native_name = | image = | image_size = <!-- if less than 220 --> | image_alt = | caption = | image2 = | image2_size = <!-- if less than 220 --> | image2_alt = | caption2 = | IATA = | ICAO = | FAA = | TC = | LID = | GPS = | WMO = | type = | owner_oper = | owner = | operator = | area_served = | location = | opened = <!-- {{start date|YYYY|MM|DD}} --> | closed = <!-- {{end date|YYYY|MM|DD}} --> | passenger_services_ceased = <!-- {{end date|YYYY|MM|DD}} --> | hub = <!-- If more than one airline, use {{Unbulleted list|Airline1|Airline2}} --> | focus_city = <!-- If more than one airline, use {{Unbulleted list|Airline1|Airline2}} --> | operating_base = <!-- If more than one airline, use {{Unbulleted list|Airline1|Airline2}} --> | built = <!-- military airports --> | used = <!-- military airports --> | commander = <!-- military airports --> | occupants = <!-- military airports --> | timezone = | utc = | summer = | utcs = | elevation_f = | elevation_m = | metric_elev = | coordinates = <!-- {{coord}} --> | website = <!-- {{URL|example.com}} --> | image_map = | image_mapsize = | image_map_alt = | image_map_caption = | mapframe = | pushpin_map = | pushpin_mapsize = | pushpin_map_alt = | pushpin_map_caption = | pushpin_relief = | pushpin_image = | pushpin_label = | pushpin_label_position = | pushpin_mark = | pushpin_marksize = | r1_number = | r1_length_f = | r1_length_m = | r1_surface = <!-- up to r12 --> | metric_rwy = | h1_number = | h1_length_f = | h1_length_m = | h1_surface = <!-- up to h12 --> | stat1_header = | stat1_data = <!-- up to stat8 --> | stat_year = | footnotes = }}</syntaxhighlight> ==Parameters== All parameters except '''name''' are optional. ===Airport name=== These parameters specify the airport name which is displayed at the top of the infobox. ; name : The name of the airport in English, such as ''[[Warsaw Chopin Airport]]'' or ''[[Beijing Capital International Airport]]''. ; native_name : Airport name in a native language using Western characters (French, German, Spanish, etc.), such as ''Lotnisko Chopina w Warszawie''. In such cases the native name should be in italics, see [[Wikipedia:Manual of Style/Text formatting#Foreign terms]]. Can also be used for two different names in the same language (see [[Region of Waterloo International Airport]]). ===Airport image=== These parameters specify an airport photograph or logo which is displayed below the title. A second image can also be displayed below the first image by using the parameter names ending with a "2". ;ensign : Optional small [[Ensign (flag)|ensign]] ; image / image2 : The name of image file, such as <code>Airport.png</code> or <code>Logo.gif</code> (do not include the <code>File:</code> or <code>Image:</code> prefix). ; image_alt / image2_alt : [[Wikipedia:Alternative text for images|Alternative text]] for the images. ; image_size / image2_size : The image size or width in pixels, i.e., ''175'' (defaults to 220 if not specified). : ''May be used for smaller images which would appear distorted when expanded to a width of 220px.'' ; caption / caption2 : Text displayed beneath the image. If left blank or omitted, a caption will not be displayed. : ''This should only be used for photographs that require an explanation; it should be omitted for airport logos and may be omitted for photographs.'' ===Airport codes=== These parameters specify airport location identifiers which are displayed below the image (or below title if there is no image): ; IATA : The airport's three character [[IATA airport code|IATA location identifier]]. If omitted or left blank it will display as '''IATA: ''none'''''. ; ICAO : The airport's four character [[ICAO airport code|ICAO location identifier]]. If omitted or left blank it will display as '''ICAO: ''none'''''. ; FAA : The three or four character [[FAA]] [[location identifier]] for airports in the United States. If omitted or left blank, nothing is displayed. ; TC : The three or four character [[Transport Canada]] [[location identifier]] for airports in Canada. If omitted or left blank, nothing is displayed. ; LID : A [[location identifier]] for airports outside the US or Canada, if other than ICAO or IATA codes. If omitted or left blank, nothing is displayed. ; GPS : A [[Global Positioning System]] code for the airport, if other than ICAO or IATA codes. If omitted or left blank, nothing is displayed. ; WMO : The [[World Meteorological Organization]] five digit code for the weather station at the airport. If omitted or left blank, nothing is displayed. ===Airport summary=== These parameters specify airport details for the "Summary" section displayed below the airport codes. ; type : Airport type should be one of the following: ''Public'', ''Private'', ''Military'' or ''Military/Public''. Do not use ''Commercial'', ''General'' or ''Civil''. ; owner_oper : If the airport is owned and operated by the same entity, use this in place of ''owner'' and ''operator''. ; owner : Name of the airport owner. ; operator : Name of the airport operator, if not the owner. ; area_served : If the airport is associated with a major city but actually located in a smaller town, list the major city here and the smaller town under ''location''. This is not automatically linked, in order to allow multiple links if needed. : Example: <code><nowiki>area_served = Paris</nowiki></code> : Result: Paris ; location : Name of the town or city where the airport is located. Do not put the airport's street address in this field. This is not automatically linked, in order to allow multiple links if needed. : Example: <code><nowiki>location = [[Orly]], France</nowiki></code> : Result: [[Orly]], France ; opened : The date when the airport originally opened for commercial service. : Example: <code><nowiki>{{start date|1989|09|22}}</nowiki></code> : Result: September 22, 1989 ; closed : The date when the airport closed, either temporarily or permanently, along with reason for closing (for presently closed airports only). Use {{Template link|end date}}. ; passenger_services_ceased : The date when passenger services to the airport ceased due to conversion of the airport for another use, along with the new use for the airport. Only for airports that previously had passenger services. Use {{Template link|end date}}. ; hub : If the airport serves as a [[airline hub|hub]], list the airlines here in alphabetical order. This is not automatically linked, in order to allow multiple links if needed. Use {{Template link|Unbulleted list}} if the list is long. : Example: <syntaxhighlight lang="wikitext">{{Unbulleted list | [[British Airways]] | [[EasyJet]] | [[Virgin Atlantic]] }}</syntaxhighlight> : Result: : [[British Airways]] : [[EasyJet]] : [[Virgin Atlantic]] ; focus_city : If the airport serves as a [[focus city]], list the airlines here in alphabetical order. See discussion at [[Wikipedia talk:WikiProject Airports#Focus Cities on pages]]. Use {{Template link|Unbulleted list}} if the list is long. ; operating_base : If the airport serves as an operating base for an airline, list it here in alphabetical order, unless the airline is already listed under hub or focus_city. This parameter is most commonly used for [[Ultra-low cost airline]]s which do not have hubs or focus cities. Use {{Template link|Unbulleted list}} if the list is long. ; timezone and utc : Will give the [[time zone]] that the airport is in, can be linked. A list can be found at [[List of time zones by country]]. : Timezone is optional, but if it is used, then utc must be used as well, can be linked. A list can be found at [[List of UTC time offsets]]. ; summer and utcs : If the time zone observes [[daylight saving time]] this will give the zone that the airport is in, can be linked. A list can be found at [[List of time zones by country]]. : Summer is optional, but if it is used, then utcs must be used as well, can be linked. A list can be found at [[List of UTC time offsets]]. ; elevation_f : Height [[above mean sea level]], in feet. ; elevation_m : Height above mean sea level, in metres. ; website : External link to the airport's official [[website]]. See [[Wikipedia: External links#How to link]] for more information. : Example: <code><nowiki>website = {{URL|http://www.dfwairport.com/}}</nowiki></code> : Result: <span class="plainlinksneverexpand">{{URL|http://www.dfwairport.com/}}</span> ====Military airports==== These optional parameters provide additional information for military airports. The parameter names are based on those used in [[Template:Infobox military structure]]. This allows the display of information from that template, without the need to include an additional infobox. See [[#Example 4|example 4]] below. ; built : The date when the structure was built, usually given in years. ; used : The period during which the structure was in active military use, usually given in years. ; commander : The current commanding officer, for structures currently in military use. ; occupants : Any notable military units which occupy the structure. ====Geographic coordinates==== This template allows for the insertion of [[geographic coordinates]] in two different ways: you can either provide a complete {{Template link|Coord}} template in the '''coordinates''' parameter, or you can provide the individual coordinate components (degrees, minutes, seconds, etc.) in the separate parameters described below. The latter method also allows you to insert a [[Template:Location map|pushpin map]] with an automatically-placed airport icon and label (see [[#Maps|below]]). If you use both methods, then the '''coordinates''' parameter will be used in the infobox. ; coordinates : [[Latitude]] and [[Longitude]] of airport, specified using the {{Template link|Coord}} template. When entering the coordinates always ensure that the resultant map or image shows the airport. It is very easy to confuse "N" for "S" or "E" for "W". If used as shown below, this will also cause the airport to appear in [[Google Earth]]'s Geographic Web Layer. : Example: <code><nowiki>coordinates = {{Coord|49|27|16|N|002|06|46|E|type:airport_region:FR|display=inline,title}}</nowiki></code> : Result: {{Coord|49|27|16|N|002|06|46|E|type:airport_region:FR|display=inline}} ===Maps=== This template provides three ways to include a map: as a simple image, or using interactive [[Template:Mapframe|Mapframe]] maps, or using {{Template link|Location map}} (with the coordinate parameters described [[#Geographic coordinates|above]] to automatically place a pushpin mark and label on a map). ==== Image map ==== Am image map can be displayed by providing a value for '''image_map'''. The remaining '''image_''' parameters are optional. ; image_map : The name of an image to use as a map, such as <code>Airport_map.png</code> (do not include the <code>File:</code> or <code>Image:</code> prefix). ; image_mapsize : ''(optional)'' The width to display the image map, in pixels. Just the number, no "<code>px</code>". If omitted or left empty, defaults to '''220'''. ; image_map_alt : ''(optional)'' [[Wikipedia:Alternative text for images|Alt text]] for the image map. If left blank or omitted, this defaults to same text used in <code>image_map_caption</code> (or Location of {{{name}}} if no caption). ; image_map_caption : ''(optional)'' Caption to display below the image map. If left blank or omitted, a caption will not be displayed. ====Mapframe maps==== {{Infobox mapframe/doc/parameters |mapframe-marker=airport }} ==== Location/pushpin map ==== A location map can be displayed by providing values for '''coordinates''', and '''pushpin_map'''. The remaining '''pushpin_''' parameters are optional. ; pushpin_map : The name of a location map as per [[Template:Location map]] (e.g. '''Indonesia''' or '''Russia'''). The {{para|coordinates}} parameter values position a pushpin mark and label on the map automatically. ; pushpin_mapsize : ''(optional)'' The width to display the pushpin map, in pixels. Just the number, without "<code>px</code>". If omitted or left empty, defaults to '''220'''. ; pushpin_map_alt : ''(optional)'' [[Wikipedia:Alternative text for images|Alt text]] for the pushpin map. ; pushpin_map_caption : ''(optional)'' Caption to display below the pushpin map. If left blank or omitted, a caption will not be displayed. ; pushpin_relief : ''(optional)'' Any non-blank value (yes, 1, etc.) will cause the template to display a [[relief mapping (computer graphics)|relief map]] image, where available (see [[#Example 1|example 1]]). For additional information, see [[Template:Location map#Relief parameter]]. ; pushpin_image : ''(optional)'' Name of an alternative map image, which must have the same edge coordinates as the location map template specified via '''pushpin_map''' (see [[#Example 5|example 5]]). Do not include the <code>File:</code> or <code>Image:</code> prefix. For additional information, see [[Template:Location map#AlternativeMap parameter]]. ; pushpin_label : ''(optional)'' The text of the label to place next to the pushpin mark (see [[#Example 1|example 1]]). The default is the value of the '''name''' parameter. ; pushpin_label_position : ''(optional)'' The position of the label on the pushpin map relative to the pushpin mark (see [[#Example 5|example 5]]). Valid values are <code>left</code>, <code>right</code>, <code>top</code> and <code>bottom</code>. This defaults to either <code>left</code> or <code>right</code>, depending on the coordinates of the marker and its position relative to the right border of the map image. ; pushpin_mark : ''(optional)'' The name of an image to display as the pushpin mark (see [[#Example 5|example 5]]). The default is <code>[[:File:Airplane silhouette.svg]]</code> ( [[File:Airplane silhouette.svg|10px]] ). ; pushpin_marksize : ''(optional)'' The size of the mark in [[pixel]]s (see [[#Example 5|example 5]]). The default is 10. Do not include <code>px</code>, for example: <code>pushpin_marksize = 8</code>, not <code>pushpin_marksize = 8px</code>. ===Infobox control=== These parameters control how certain fields within the infobox are displayed. ; metric_elev : Set to any value to display elevation in metric units (metres) before imperial/US units (feet); leave blank to display imperial/US units first. This can be seen in [[#Example 1|example 1]]. ; metric_rwy : Set to any value to display runway length in metric units (metres) before imperial/US units (feet); leave blank to display imperial/US units first. [[#Example 1|Examples 1]] and [[#Example 2|2]] below show the runway length with metres first; [[#Example 3|example 3]] and [[#Example 4|4]] show it with feet before metres. ===Runways=== These parameters specify details for each runway in the "Runways" section displayed below the summary. This can also be used to specify water landing areas for [[seaplanes]] (see [[Fairbanks International Airport]]). Parameters start with '''r1-''' for the first runway, '''r2-''' for the second runway, up to '''r8-''' for the eighth runway (if more are needed, leave a message on the [[Template talk:Infobox Airport|talk]] page). Each airport should have at least one runway. ; r<sub>''n''</sub>-number (r1_number, r2_number, ...) : The designation of the runway, normally two numbers like this &rarr; 02/20, 1st number is 18 lower than the 2nd. Where there are parallel runways an additional letter is added to each number, for example "L" for left, "R" for right and "C" for center. In certain cases a runway will only have one number when it can only be used in one direction. For airports in the United States the leading zero is not used and the designation should read 2/20. ; r<sub>''n''</sub>-length_f (r1_length_f, r2_length_f, ...) : Runway length in feet. ; r<sub>''n''</sub>-length_m (r1_length_m, r2_length_m, ...) : Runway length in metres. ; r<sub>''n''</sub>-surface (r1_surface, r2_surface, ...) : Runway surface type, such as: [[Concrete]], [[Bitumen|Asphalt]], [[Gravel]], [[Grass]] (or Turf), [[Soil|Dirt]], [[Water]], etc. Avoid the generic type "Paved" if possible. ===Helipads=== These parameters specify details for each helipad in the "Helipads" section displayed below the runways. Parameters start with '''h1-''' for the first helipad, '''h2-''' for the second helipad, up to '''h12-''' for the twelfth helipad (if more are needed, leave a message on the [[Template talk:Infobox Airport|talk]] page). This section is optional and only appears if the '''h1-''' parameters are specified. See [[#Example 1|example 1]] and [[#Example 3|example 3]] below. ; h<sub>''n''</sub>-number(h1_number, h2_number, ...) : The designation of the helipad. In the United States this is usually the letter "H" followed by a number, i.e. "H1", "H2", etc. ; h<sub>''n''</sub>-length_f (h1_length_f, h2_length_f, ...) : Helipad length in feet. ; h<sub>''n''</sub>-length_m (h1_length_m, h2_length_m, ...) : Helipad length in metres. ; h<sub>''n''</sub>-surface (h1_surface, h2_surface, ...) : Helipad surface type, such as: Concrete, Asphalt, etc. Avoid the generic type "Paved" if possible. ===Statistics=== These parameters specify details for an optional "Statistics" section displayed below the runways and helipads. Parameters start with '''stat1-''' for the first statistic, '''stat2-''' for the second statistic, etc. This section only appears if the '''stat1-''' parameters are specified. See [[#Example 1|example 1]] and [[#Example 3|example 3]] below. ; stat''<sub>n</sub>''-header (stat1_header, stat2_header, ...) : A brief description of each statistic, such as ''Passengers'' or ''Aircraft operations''. ; stat''<sub>n</sub>''-data (stat1_data, stat2_data, ...) : The data associated with the corresponding header. ; stat_year : The calendar year for the statistics. This is displayed in parentheses after the word "Statistics" in the section header. ===Footnotes=== This parameter contains text for footnotes displayed at the bottom of the infobox. ; footnotes : The most common use for this field is to give sources or references for the data displayed in the infobox. See the examples below. ==Examples== ===Example 1=== {{Infobox airport | name = Warsaw Chopin Airport | native_name = ''Lotnisko Chopina w Warszawie'' | image = <!--leave blank, this is demo without image--> | IATA = WAW | ICAO = EPWA | type = Public / Military | operator = Polish Airports State Enterprise (PPL) | area_served = [[Warsaw]] | location = [[Warsaw]] ([[Okęcie]]), Poland | hub = {{plainlist| *[[Bingo Airways]] *[[Enter Air]] *[[Eurolot]] *[[LOT Polish Airlines]] *[[Small Planet Airlines]] *[[SprintAir]] *[[Wizz Air]] }} | metric_elev = yes | elevation_m = 110 | elevation_f = 362 | website = {{URL|1=http://www.lotnisko-chopina.pl/en/passenger|2=www.lotnisko-chopina.pl}} | opened = {{Start date|1934|04|29|df=yes}} | coordinates = {{coord|52|09|57|N|20|58|02|E|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = Poland | pushpin_map_caption = Location of airport in Poland | pushpin_relief = yes | pushpin_label = WAW | metric_rwy = yes | r1_number = 11/29 | r1_length_m = 2,800 | r1_length_f = 9,186 | r1_surface = [[Bitumen|Asphalt]] | r2_number = 15/33 | r2_length_f = 12,106 | r2_length_m = 3,689 | r2_surface = Asphalt | h1_number = H1 | h1_length_m = 40 | h1_length_f = 131 | h1_surface = [[Concrete]] | stat_year = 2012 | stat1_header = Passengers | stat1_data = 9,587,842 | stat2_header = Movements | stat2_data = 118,320 | footnotes = Statistics: Warsaw Chopin Airport<ref name="stats2013">{{cite web|title=About the Airport: Statistics|url=http://www.lotnisko-chopina.pl/en/airport/about-the-airport/statistics|publisher=Warsaw Chopin Airport|accessdate=28 September 2013}}</ref><br/>Sources: Polish [[Aeronautical Information Publication|AIP]] at [[Eurocontrol]]<ref>{{cite web|url=http://www.ead.eurocontrol.int/publicuser/protect/pu/main.jsp |title=EAD Basic |publisher=Ead.eurocontrol.int |accessdate=2012-06-28}}</ref> }} [[Warsaw Chopin Airport]] This example shows the appearance of the infobox without an image. It also shows the use of the parameters for latitude, longitude, and location/pushpin map. ''Note: helipad information added to illustrate function of <code>metric_rwy</code> parameter.'' <syntaxhighlight lang="wikitext"> {{Infobox airport | name = Warsaw Chopin Airport | native_name = ''Lotnisko Chopina w Warszawie'' | image = <!--leave blank, this is demo without image--> | IATA = WAW | ICAO = EPWA | type = Public / Military | operator = Polish Airports State Enterprise (PPL) | area_served = [[Warsaw]] | location = [[Warsaw]] ([[Okęcie]]), Poland | hub = {{plainlist| *[[Bingo Airways]] *[[Enter Air]] *[[Eurolot]] *[[LOT Polish Airlines]] *[[Small Planet Airlines]] *[[SprintAir]] *[[Wizz Air]] }} | metric_elev = yes | elevation_m = 110 | elevation_f = 362 | website = {{URL|1=http://www.lotnisko-chopina.pl/en/passenger|2=www.lotnisko-chopina.pl}} | opened = {{Start date|1934|04|29|df=yes}} | coordinates = {{coord|52|09|57|N|20|58|02|E|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = Poland | pushpin_map_caption = Location of airport in Poland | pushpin_relief = yes | pushpin_label = WAW | metric_rwy = yes | r1_number = 11/29 | r1_length_m = 2,800 | r1_length_f = 9,186 | r1_surface = [[Bitumen|Asphalt]] | r2_number = 15/33 | r2_length_f = 12,106 | r2_length_m = 3,689 | r2_surface = Asphalt | h1_number = H1 | h1_length_m = 40 | h1_length_f = 131 | h1_surface = [[Concrete]] | stat_year = 2012 | stat1_header = Passengers | stat1_data = 9,587,842 | stat2_header = Movements | stat2_data = 118,320 | footnotes = Statistics: Warsaw Chopin Airport<ref name="stats2013">{{cite web|title=About the Airport: Statistics|url=http://www.lotnisko-chopina.pl/en/airport/about-the-airport/statistics|publisher=Warsaw Chopin Airport|accessdate=28 September 2013}}</ref><br/>Sources: Polish [[Aeronautical Information Publication|AIP]] at [[Eurocontrol]]<ref>{{cite web|url=http://www.ead.eurocontrol.int/publicuser/protect/pu/main.jsp |title=EAD Basic |publisher=Ead.eurocontrol.int |accessdate=2012-06-28}}</ref> }} </syntaxhighlight> {{clear}} ===Example 2=== {{Infobox airport | name = Beijing Capital International Airport | native_name = 北京首都国际机场<br>Běijīng Shǒudū Guójì Jīcháng | image = Beijing Capital Departure Hall.jpg | caption = Beijing Capital Departure Hall | IATA = PEK | ICAO = ZBAA | type = Public | operator = [[Civil Aviation Administration of China]] | area_served = [[Beijing]] | location = [[Chaoyang District, Beijing]] | hub = [[Air China]], [[China Southern Airlines]] | elevation_f = 116 | elevation_m = 35 | coordinates = {{Coord|40|04|48|N|116|35|04|E|type:airport_region:CN|display=inline|name=Beijing Capital International Airport}} | website = {{URL|1=http://en.bcia.com.cn/|2=www.bcia.com.cn}} | opened = {{Start date|1958|03|02}} | metric_rwy = yes | r1_number = 18L/36R | r1_length_m = 3,800 | r1_length_f = 12,467 | r1_surface = [[Bitumen|Asphalt]] | r2_number = 18R/36L | r2_length_m = 3,200 | r2_length_f = 10,499 | r2_surface = Asphalt }} [[Beijing Capital International Airport]] This example shows the appearance of the infobox with an image and a caption. <syntaxhighlight lang="wikitext"> {{Infobox airport | name = Beijing Capital International Airport | native_name = 北京首都国际机场<br>Běijīng Shǒudū Guójì Jīcháng | image = Beijing Capital Departure Hall.jpg | caption = Beijing Capital Departure Hall | IATA = PEK | ICAO = ZBAA | type = Public | operator = [[Civil Aviation Administration of China]] | area_served = [[Beijing]] | location = [[Chaoyang District, Beijing]] | hub = [[Air China]], [[China Southern Airlines]] | elevation_f = 116 | elevation_m = 35 | coordinates = {{Coord|40|04|48|N|116|35|04|E|type:airport_region:CN|display=inline,title|name=Beijing Capital International Airport}} | website = {{URL|1=http://en.bcia.com.cn/|2=www.bcia.com.cn}} | opened = {{Start date|1958|03|02}} | metric_rwy = yes | r1_number = 18L/36R | r1_length_m = 3,800 | r1_length_f = 12,467 | r1_surface = [[Bitumen|Asphalt]] | r2_number = 18R/36L | r2_length_m = 3,200 | r2_length_f = 10,499 | r2_surface = Asphalt }} </syntaxhighlight> {{clear}} ===Example 3=== {{Infobox airport | name = Dallas/Fort Worth International Airport | image = Dfw_airport.jpg | IATA = DFW | ICAO = KDFW | FAA = DFW | type = Public | owner = City of [[Dallas]] City of [[Fort Worth, Texas|Fort Worth]] | operator = DFW Airport Board | area_served = [[Dallas–Fort Worth metroplex|Dallas–Fort Worth]] | hub = [[American Airlines]], [[Envoy Air]] | metric_elev = | elevation_f = 607 | elevation_m = 185 | website = {{URL|http://www.dfwairport.com/}} | opened = {{Start date|1974|01|13}} | coordinates = {{coord|32|53|49|N|097|02|17|W|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = USA Texas | pushpin_map_caption = Location within Texas | pushpin_label = DFW | metric_rwy = | r1_number = 13L/31R | r1_length_f = 9,000 | r1_length_m = 2,743 | r1_surface = [[Concrete]] | r2_number = 13R/31L | r2_length_f = 9,301 | r2_length_m = 2,835 | r2_surface = Concrete | r3_number = 17C/35C | r3_length_f = 13,401 | r3_length_m = 4,085 | r3_surface = Concrete | r4_number = 17L/35R | r4_length_f = 8,500 | r4_length_m = 2,591 | r4_surface = Concrete | r5_number = 17R/35L | r5_length_f = 13,401 | r5_length_m = 4,085 | r5_surface = Concrete | r6_number = 18L/36R | r6_length_f = 13,400 | r6_length_m = 4,084 | r6_surface = Concrete | r7_number = 18R/36L | r7_length_f = 13,400 | r7_length_m = 4,084 | r7_surface = Concrete | h1_number = H1 | h1_length_f = 158 | h1_length_m = 48 | h1_surface = Concrete | stat_year = 2005 | stat1_header = Passengers | stat1_data = 59,176,265 | stat2_header = Aircraft operations | stat2_data = 711,878 | stat3_header = Metric tonnes of cargo | stat3_data = 741,432 | footnotes = Sources: FAA,<ref>{{FAA-airport|ID=DFW|use=PU|own=PU|site=23710.6*A}}</ref> airport website.<ref>[http://www.dfwairport.com/ Dallas–Fort Worth International Airport], official web site</ref> }} [[Dallas–Fort Worth International Airport]] <syntaxhighlight lang="wikitext"> {{Infobox airport | name = Dallas–Fort Worth International Airport | image = Dfw_airport.jpg | IATA = DFW | ICAO = KDFW | FAA = DFW | type = Public | owner = City of [[Dallas, Texas|Dallas]] City of [[Fort Worth, Texas|Fort Worth]] | operator = DFW Airport Board | area_served = [[Dallas/Fort Worth Metroplex|Dallas/Fort Worth]] | hub = [[American Airlines]], [[American Eagle Airlines]] | metric_elev = | elevation_f = 607 | elevation_m = 185 | website = {{URL|http://www.dfwairport.com/}} | opened = {{Start date|1974|01|13}} | coordinates = {{coord|32|53|49|N|097|02|17|W|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = USA Texas | pushpin_map_caption = Location within Texas | pushpin_label = DFW | metric_rwy = | r1_number = 13L/31R | r1_length_f = 9,000 | r1_length_m = 2,743 | r1_surface = [[Concrete]] | r2_number = 13R/31L | r2_length_f = 9,301 | r2_length_m = 2,835 | r2_surface = Concrete | r3_number = 17C/35C | r3_length_f = 13,401 | r3_length_m = 4,085 | r3_surface = Concrete | r4_number = 17L/35R | r4_length_f = 8,500 | r4_length_m = 2,591 | r4_surface = Concrete | r5_number = 17R/35L | r5_length_f = 13,401 | r5_length_m = 4,085 | r5_surface = Concrete | r6_number = 18L/36R | r6_length_f = 13,400 | r6_length_m = 4,084 | r6_surface = Concrete | r7_number = 18R/36L | r7_length_f = 13,400 | r7_length_m = 4,084 | r7_surface = Concrete | h1_number = H1 | h1_length_f = 158 | h1_length_m = 48 | h1_surface = Concrete | stat_year = 2005 | stat1_header = Passengers | stat1_data = 59,176,265 | stat2_header = Aircraft operations | stat2_data = 711,878 | stat3_header = Metric tonnes of cargo | stat3_data = 741,432 | footnotes = Sources: FAA<ref>{{FAA-airport|ID=DFW|use=PU|own=PU|site=23710.6*A}}</ref>, airport website<ref>[http://www.dfwairport.com/ Dallas–Fort Worth International Airport], official web site</ref>. }} </syntaxhighlight> {{clear}} ===Example 4=== {{Infobox airport | name = Wright–Patterson Air Force Base | ensign = [[File:Air Force Materiel Command shield.svg|100px]] | nativename = {{smaller|[[Air Force Materiel Command|{{black|Air Force Materiel Command}}]]}} | image = National Museum of the United States Air Force.jpg | image_size = 250 | caption = [[National Museum of the United States Air Force]] | IATA = FFO | ICAO = KFFO | FAA = FFO | type = Military: [[Air Force Base]] | operator = [[United States Air Force]] | location = [[Dayton, Ohio]] | built = <!--1948--> | used = 1948 – present | commander = <div> * Gen. Bruce Carlson – [[Air Force Materiel Command]] * Brig. Gen. Bruce E. Davis –- [[445th Airlift Wing]] * Col. Colleen M. Ryan –- [[88th Air Base Wing]] and Installation Commander </div> | occupants = | elevation_f = 823 | elevation_m = 251 | website = {{URL|http://www.wpafb.af.mil/}} | coordinates = {{coord|39|49|34|N|084|02|54|W|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = USA Ohio | pushpin_map_caption = Location within Ohio | pushpin_label = Wright–Patterson AFB | r1_number = 5L/23R | r1_length_f = 12,601 | r1_length_m = 3,841 | r1_surface = [[Porous European Mix|PEM]] | r2_number = 5R/23L | r2_length_f = 7,000 | r2_length_m = 2,134 | r2_surface = [[Bitumen|Asphalt]] | footnotes = Sources: FAA,<ref>{{FAA-airport|ID=FFO|use=PR|own=MA|site=17827.*A}}</ref> official website.<ref>[http://www.wpafb.af.mil/ Wright-Patterson Air Force Base] (official site)</ref> }} [[Wright–Patterson Air Force Base]] This infobox shows the use of an image and linked text over the blue background in title area. It also makes use of some of the fields used for military airports. <syntaxhighlight lang="wikitext"> {{Infobox airport | name = Wright–Patterson Air Force Base | ensign = [[File:Air Force Materiel Command.png|100px]] | nativename = {{smaller|[[Air Force Materiel Command|{{black|Air Force Materiel Command}}]]}} | image = National Museum of the United States Air Force.jpg | image_size = 250 | caption = [[National Museum of the United States Air Force]] | IATA = FFO | ICAO = KFFO | FAA = FFO | type = Military: [[Air Force Base]] | operator = [[United States Air Force]] | location = [[Dayton, Ohio]] | built = <!--1948--> | used = 1948 – present | commander = <div> * Gen. Bruce Carlson – [[Air Force Materiel Command]] * Brig. Gen. Bruce E. Davis – [[445th Airlift Wing]] * Col. Colleen M. Ryan – [[88th Air Base Wing]] and Installation Commander </div> | occupants = | elevation_f = 823 | elevation_m = 251 | website = {{URL|http://www.wpafb.af.mil/}} | coordinates = {{coord|39|49|34|N|084|02|54|W|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = USA Ohio | pushpin_map_caption = Location within Ohio | pushpin_label = Wright–Patterson AFB | r1_number = 5L/23R | r1_length_f = 12,601 | r1_length_m = 3,841 | r1_surface = [[Porous European Mix|PEM]] | r2_number = 5R/23L | r2_length_f = 7,000 | r2_length_m = 2,134 | r2_surface = [[Bitumen|Asphalt]] | footnotes = Sources: FAA<ref>{{FAA-airport|ID=FFO|use=PR|own=MA|site=17827.*A}}</ref>, official website<ref>[http://www.wpafb.af.mil/ Wright-Patterson Air Force Base] (official site)</ref>. }} </syntaxhighlight> {{clear}} ===Example 5=== {{Infobox airport | name = Buri Ram Airport | native_name = {{lang|th|ท่าอากาศยานบุรีรัมย์}} | IATA = BFV | ICAO = VTUO | type = Public | area_served = [[Buri Ram]], [[Thailand]] | elevation_f = 590 | coordinates = {{coord|15|13|46|N|103|15|04|E|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = Thailand | pushpin_mapsize = 220x300 <!--limit height to 300px--> | pushpin_map_caption = Location of airport in Thailand | pushpin_image = Thailand location map Topographic.png | pushpin_label = <span style="color:yellow; font-weight:bold; font-size:larger; text-shadow: black 0.1em 0.1em 0.2em">BFV</span> | pushpin_label_position = bottom | pushpin_mark = Yellow_pog.svg | pushpin_marksize = 11 | metric_rwy = y | r1_number = 04/22 | r1_length_m = 2100 | r1_surface = Asphalt | footnotes = Source: [[Aeronautical Information Publication|AIP]] Thailand<ref name="AIP">{{cite web | url = http://www.aisthai.go.th/webais/pdf/AERONAUTICALCHARTS/VTUO.pdf | title = VTUO &ndash; BURI RAM | format = [[PDF]] | publisher = AIP Thailand | accessdate = 20 August 2012}}</ref> }} [[Buri Ram Airport]] This infobox shows the use optional parameters for the location/pushpin map. <syntaxhighlight lang="wikitext"> {{Infobox airport | name = Buri Ram Airport | native_name = {{lang|th|ท่าอากาศยานบุรีรัมย์}} | IATA = BFV | ICAO = VTUO | type = Public | area_served = [[Buri Ram]], [[Thailand]] | elevation_f = 590 | coordinates = {{coord|15|13|46|N|103|15|04|E|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = Thailand | pushpin_mapsize = 220x300 <!--limit height to 300px--> | pushpin_map_caption = Location of airport in Thailand | pushpin_image = Thailand location map Topographic.png | pushpin_label = <span style="color:yellow; font-weight:bold; font-size:larger; text-shadow: black 0.1em 0.1em 0.2em">BFV</span> | pushpin_label_position = bottom | pushpin_mark = Yellow_pog.svg | pushpin_marksize = 11 | metric_rwy = y | r1_number = 04/22 | r1_length_m = 2100 | r1_surface = Asphalt | footnotes = Source: [[Aeronautical Information Publication|AIP]] Thailand<ref name="AIP">{{cite web | url = http://www.aisthai.go.th/webais/pdf/AERONAUTICALCHARTS/VTUO.pdf | title = VTUO &ndash; BURI RAM | format = [[PDF]] | publisher = AIP Thailand | accessdate = 20 August 2012}}</ref> }} </syntaxhighlight> {{clear}} ===References for examples=== {{reflist}} ==TemplateData== {{TemplateData header}} {{collapse top|title=TemplateData}} <templatedata> { "format": "{{_\n| ___________________ = _\n}}\n", "params": { "name": { "label": "Name", "type": "string", "required": false, "description": "The name of the airport in English", "default": "{{PAGENAME}}" }, "native_name": { "label": "Native name", "type": "string", "required": false, "description": "Airport name in a native language using Western characters (French, German, Spanish, etc.)" }, "ensign": { "label": "Ensign", "type": "content", "required": false, "description": "A small ensign using image syntax.", "example": "[[File:Example.png|100px]]" }, "image": { "label": "Image", "type": "wiki-file-name", "required": false, "description": "The name of image file, such as Airport.png or Logo.gif (do not include the File: or Image: prefix)." }, "image_size": { "label": "Image size or width", "type": "number", "required": false, "description": "The image size or width in pixels, e.g., 175 (defaults to 220 if not specified).", "example": "175", "default": "220" }, "image_alt": { "label": "Image alternative text", "type": "string", "required": false, "description": "Alternative text for the images." }, "caption": { "label": "Caption", "type": "string", "required": false, "description": "Text displayed beneath the image. If left blank or omitted, a caption will not be displayed. This should only be used for photographs that require an explanation; it should be omitted for airport logos and may be omitted for photographs." }, "image2": { "label": "Image2", "type": "wiki-page-name", "required": false, "description": "The name of image file, such as Airport.png or Logo.gif (do not include the File: or Image: prefix)." }, "image2_size": { "label": "Image2 size or width", "type": "number", "required": false, "description": "The image size or width in pixels, e.g., 175 (defaults to 220 if not specified). This should only be used for smaller images which would appear distorted when expanded to a width of 220px.", "example": "175", "default": "220" }, "image2_alt": { "label": "Image2 alternative text", "type": "string", "required": false, "description": "Alternative text for the images." }, "caption2": { "label": "Caption2", "type": "string", "required": false, "description": "Text displayed beneath the image. If left blank or omitted, a caption will not be displayed. This should only be used for photographs that require an explanation; it should be omitted for airport logos and may be omitted for photographs." }, "IATA": { "label": "IATA", "type": "string", "required": false, "description": "The airport's three character IATA location identifier. If omitted or left blank it will display as IATA: none." }, "ICAO": { "label": "ICAO", "type": "string", "required": false, "description": "The airport's four character ICAO location identifier. If omitted or left blank it will display as ICAO: none." }, "FAA": { "label": "FAA", "type": "string", "required": false, "description": "The three or four character FAA location identifier for airports in the United States. If omitted or left blank, nothing is displayed." }, "TC": { "label": "TC", "type": "string", "required": false, "description": "The three or four character Transport Canada location identifier for airports in Canada. If omitted or left blank, nothing is displayed." }, "LID": { "label": "LID", "type": "string", "required": false, "description": "A location identifier for airports outside the US or Canada, if other than ICAO or IATA codes. If omitted or left blank, nothing is displayed." }, "GPS": { "label": "GPS", "type": "string", "required": false, "description": "A Global Positioning System code for the airport, if other than ICAO or IATA codes. If omitted or left blank, nothing is displayed." }, "WMO": { "label": "WMO", "type": "string", "required": false, "description": "The World Meteorological Organization five digit code for the weather station at the airport. If omitted or left blank, nothing is displayed." }, "type": { "label": "Type", "type": "string", "required": false, "description": "Airport type should be one of the following: Public, Private, Military or Military/Public. Do not use Commercial, General or Civil." }, "owner_oper": { "label": "Owner-Operator", "type": "string", "required": false, "description": "If the airport is owned and operated by the same entity, use this in place of owner and operator." }, "owner": { "label": "Owner", "type": "string", "required": false, "description": "Name of the airport owner." }, "operator": { "label": "Operator", "type": "string", "required": false, "description": "Name of the airport operator, if not the owner." }, "area_served": { "label": "Area or city served", "type": "string", "required": false, "description": "If the airport is associated with a major city but actually located in a smaller town, list the major city here and the smaller town under location. This is not automatically linked, in order to allow multiple links if needed." }, "location": { "label": "Location", "type": "string", "required": false, "description": "Name of the town or city where the airport is located. Do not put the airport's street address in this field. This is not automatically linked, in order to allow multiple links if needed." }, "opened": { "label": "Opened", "type": "string", "required": false, "description": "The date when the airport originally opened for commercial service." }, "closed": { "label": "Closed", "type": "string", "required": false, "description": "The date when the airport closed, either temporarily or permanently, along with reason for closing (for presently closed airports only). Use {{end date}}." }, "passenger_services_ceased": { "label": "Passenger Services Ceased", "type": "string", "required": false, "description": "The date when passenger services to the airport ceased due to conversion of the airport for another use, along with the new use for the airport. Only for airports that previously had passenger services. Use {{end date}}." }, "hub": { "label": "Hub", "type": "string", "required": false, "description": "If the airport serves as an hub, list the airlines here. This is not automatically linked, in order to allow multiple links if needed. Use {{plainlist}} if the list is long." }, "focus_city": { "label": "Focus City", "type": "string", "required": false, "description": "If the airport serves as a focus city" }, "built": { "label": "Built", "type": "line", "required": false, "description": "The date when the structure was built, usually given in years." }, "used": { "label": "Used", "type": "string", "required": false, "description": "The period during which the structure was in active military use, usually given in years." }, "commander": { "label": "Commander", "type": "string", "required": false, "description": "The current commanding officer, for structures currently in military use." }, "occupants": { "label": "Occupants", "type": "string", "required": false, "description": "Any notable military units which occupy the structure." }, "timezone": { "label": "Timezone", "type": "number", "required": false, "description": "Will give the time zone that the airport is in, can be linked. A list can be found at List of time zones by country. Timezone is optional, but if it is used, then utc must be used as well, can be linked. A list can be found at List of UTC time offsets." }, "utc": { "label": "UTC", "type": "number", "required": false, "description": "UTC time of the airport" }, "summer": { "label": "Summer", "type": "string", "required": false, "description": "If the time zone observes daylight saving time this will give the zone that the airport is in, can be linked. A list can be found at List of time zones by country. " }, "utcs": { "label": "UTCS", "type": "string", "required": false, "description": "Summer is optional, but if it is used, then utcs must be used as well, can be linked. A list can be found at List of UTC time offsets." }, "elevation_f": { "label": "Elevation In Feet", "type": "number", "required": false, "description": "Height above mean sea level, in feet." }, "elevation_m": { "label": "Elevation In Metres", "type": "number", "required": false, "description": "Height above mean sea level, in metres." }, "metric_elev": { "label": "Metric elevation", "type": "number", "required": false, "description": "Set to any value to display elevation in metric units (metres) before imperial/US units (feet); leave blank to display imperial/US units first." }, "coordinates": { "label": "Coordinates", "type": "number", "required": false, "description": "Latitude and Longitude of airport, specified using the {{Coord}} template" }, "website": { "label": "Website", "type": "string", "required": false, "description": "External link to the airport's official website" }, "image_map": { "label": "Image Map", "type": "wiki-page-name", "required": false, "description": "The name of an image to use as a map, such as Airport_map.png (do not include the File: or Image: prefix)." }, "image_mapsize": { "label": "Image Mapsize", "type": "number", "required": false, "description": " The width to display the image map, in pixels. Just the number, no \"px\". If omitted or left empty, defaults to 220.", "default": "220" }, "image_map_alt": { "label": "Image Map Alternative", "type": "string", "required": false, "description": " Alt text for the image map. If left blank or omitted, this defaults to same text used in image_map_caption (or Location of {{{name}}} if no caption." }, "image_map_caption": { "label": "Image Map Caption", "type": "string", "required": false, "description": "Caption to display below the image map. If left blank or omitted, a caption will not be displayed." }, "pushpin_map": { "label": "Pushpin Map", "type": "string", "required": false, "description": "The name of a location map as per Template:Location map (e.g. Indonesia or Russia). The coordinates field position a pushpin mark and label on the map automatically." }, "pushpin_mapsize": { "label": "Pushpin Mapsize", "type": "number", "required": false, "description": " The width to display the pushpin map, in pixels. Just the number, without \"px\". If omitted or left empty, defaults to 220.", "default": "220" }, "pushpin_map_alt": { "label": "Pushpin Map Alternative", "type": "string", "required": false, "description": " Alt text for the pushpin map." }, "pushpin_map_caption": { "label": "Pushpin Map Caption", "type": "string", "required": false, "description": "Caption to display below the pushpin map. If left blank or omitted, a caption will not be displayed." }, "pushpin_relief": { "label": "Pushpin Relief", "type": "string", "required": false, "description": " Any non-blank value (yes, 1, etc.) will cause the template to display a relief map image, where available (see example 1). For additional information, see Template:Location map#Relief parameter." }, "pushpin_image": { "label": "Pushpin Image", "type": "wiki-page-name", "required": false, "description": " Name of an alternative map image, which must have the same edge coordinates as the location map template specified via pushpin_map" }, "pushpin_label": { "label": "Pushpin Label", "type": "string", "required": false, "description": "The text of the label to place next to the pushpin mark. The default is the value of the name parameter." }, "pushpin_label_position": { "label": "Pushpin Label Position", "type": "string", "required": false, "description": " The position of the label on the pushpin map relative to the pushpin mark (see example 5). Valid values are left, right, top and bottom. This defaults to either left or right, depending on the coordinates of the marker and its position relative to the right border of the map image." }, "pushpin_mark": { "label": "Pushpin Mark", "type": "string", "required": false, "description": "The name of an image to display as the pushpin mark.", "default": "Airplane silhouette.svg" }, "pushpin_marksize": { "label": "Pushpin Marksize", "type": "number", "required": false, "description": " The size of the mark in pixels" }, "r1_number": { "label": "r1-Number", "type": "number", "required": false, "description": "The designation of the runway, normally two numbers like this ? 02/20, 1st number is 18 lower than the 2nd. Where there are parallel runways an additional letter is added to each number, for example \"L\" for left, \"R\" for right and \"C\" for center. In certain cases a runway will only have one number when it can only be used in one direction. For airports in the United States the leading zero is not used and the designation should read 2/20." }, "r1_length_f": { "label": "r1-Length-In Feet", "type": "number", "required": false, "description": "Runway length in feet." }, "r1_length_m": { "label": "r1-Length-In Metres", "type": "number", "required": false, "description": "Runway length in metres." }, "r1_surface": { "label": "r1-Surface", "type": "string", "required": false, "description": "Runway surface type, such as: Concrete, Asphalt, Gravel, Grass (or Turf), Dirt, Water, etc. Avoid the generic type \"Paved\" if possible." }, "metric_rwy": { "label": "Metric-runway", "type": "string", "required": false, "description": "Set to any value to display runway length in metric units (metres) before imperial/US units (feet); leave blank to display imperial/US units first" }, "h1_number": { "label": "h1-Number", "type": "number", "required": false, "description": "The designation of the helipad. In the United States this is usually the letter \"H\" followed by a number, i.e. \"H1\", \"H2\", etc." }, "h1_length_f": { "label": "h1-Length-In Feet", "type": "number", "required": false, "description": "Helipad length in feet." }, "h1_length_m": { "label": "h1-Length-Metre", "type": "number", "required": false, "description": "Helipad length in metres." }, "h1_surface": { "label": "h1-Surface", "type": "string", "required": false, "description": "Helipad surface type, such as: Concrete, Asphalt, etc. Avoid the generic type \"Paved\" if possible." }, "stat1_header": { "label": "Stat1-Header", "type": "string", "required": false, "description": "A brief description of each statistic, such as Passengers or Aircraft operations." }, "stat1_data": { "label": "Stat1-Data", "type": "string", "required": false, "description": "The data associated with the corresponding header." }, "stat_year": { "label": "Stat-Year", "type": "line", "required": false, "description": "The calendar year for the statistics. This is displayed in parentheses after the word \"Statistics\" in the section header." }, "footnotes": { "label": "Footnotes", "type": "string", "required": false, "description": "The most common use for this field is to give sources or references for the data displayed in the infobox" } } } </templatedata> {{Collapse bottom}} == Microformat == {{UF-hcard-geo}} == Tracking categories == {{infobox tracking categories}} {{Buildings and structures infobox templates}} <includeonly>{{Sandbox other|| <!-- CATEGORIES: --> [[Category:Airport templates]] [[Category:Air transport infobox templates|Airport]] [[Category:Buildings and structures infobox templates|Airport]] [[Category:Templates that add a tracking category]] [[Category:Infobox templates using Wikidata]] }}</includeonly><noinclude> [[Category:WikiProject Aviation template instructions|Infobox Airport]] </noinclude> dr1b7ak1pn8ipre6z61j2wsks9mf5mm 746226 746225 2026-06-12T21:52:03Z Robertsky 51025 1 revision imported from [[:en:Template:Infobox_airport/doc]]: for workshop activity 746225 wikitext text/x-wiki {{Documentation subpage}} {{high-use}} {{Auto short description}} {{Lua|Module:Infobox|Module:InfoboxImage|Module:String|Module:Check for unknown parameters|Module:Type in location}} {{Uses Wikidata|P625}} ==Usage== {{TOC right}} The following blank template includes all of the available parameter names, except for repeating names used for runways and statistics. All parameters except ''name'' are optional; however, "IATA: none – ICAO: none", along with the heading "Summary", will always appear. Any unused parameters should be omitted, but can also be left blank if preferred. The use of flag icons with this infobox is discouraged. <syntaxhighlight lang="wikitext"> {{Infobox airport | name = | ensign = | ensign_size = | ensign_alt = | native_name = | image = | image_size = <!-- if less than 220 --> | image_alt = | caption = | image2 = | image2_size = <!-- if less than 220 --> | image2_alt = | caption2 = | IATA = | ICAO = | FAA = | TC = | LID = | GPS = | WMO = | type = | owner_oper = | owner = | operator = | area_served = | location = | opened = <!-- {{start date|YYYY|MM|DD}} --> | closed = <!-- {{end date|YYYY|MM|DD}} --> | passenger_services_ceased = <!-- {{end date|YYYY|MM|DD}} --> | hub = <!-- If more than one airline, use {{Unbulleted list|Airline1|Airline2}} --> | focus_city = <!-- If more than one airline, use {{Unbulleted list|Airline1|Airline2}} --> | operating_base = <!-- If more than one airline, use {{Unbulleted list|Airline1|Airline2}} --> | built = <!-- military airports --> | used = <!-- military airports --> | commander = <!-- military airports --> | occupants = <!-- military airports --> | timezone = | utc = | summer = | utcs = | elevation_f = | elevation_m = | metric_elev = | coordinates = <!-- {{coord}} --> | website = <!-- {{URL|example.com}} --> | image_map = | image_mapsize = | image_map_alt = | image_map_caption = | mapframe = | pushpin_map = | pushpin_mapsize = | pushpin_map_alt = | pushpin_map_caption = | pushpin_relief = | pushpin_image = | pushpin_label = | pushpin_label_position = | pushpin_mark = | pushpin_marksize = | r1_number = | r1_length_f = | r1_length_m = | r1_surface = <!-- up to r12 --> | metric_rwy = | h1_number = | h1_length_f = | h1_length_m = | h1_surface = <!-- up to h12 --> | stat1_header = | stat1_data = <!-- up to stat8 --> | stat_year = | footnotes = }}</syntaxhighlight> ==Parameters== All parameters except '''name''' are optional. ===Airport name=== These parameters specify the airport name which is displayed at the top of the infobox. ; name : The name of the airport in English, such as ''[[Warsaw Chopin Airport]]'' or ''[[Beijing Capital International Airport]]''. ; native_name : Airport name in a native language using Western characters (French, German, Spanish, etc.), such as ''Lotnisko Chopina w Warszawie''. In such cases the native name should be in italics, see [[Wikipedia:Manual of Style/Text formatting#Foreign terms]]. Can also be used for two different names in the same language (see [[Region of Waterloo International Airport]]). ===Airport image=== These parameters specify an airport photograph or logo which is displayed below the title. A second image can also be displayed below the first image by using the parameter names ending with a "2". ;ensign : Optional small [[Ensign (flag)|ensign]] ; image / image2 : The name of image file, such as <code>Airport.png</code> or <code>Logo.gif</code> (do not include the <code>File:</code> or <code>Image:</code> prefix). ; image_alt / image2_alt : [[Wikipedia:Alternative text for images|Alternative text]] for the images. ; image_size / image2_size : The image size or width in pixels, i.e., ''175'' (defaults to 220 if not specified). : ''May be used for smaller images which would appear distorted when expanded to a width of 220px.'' ; caption / caption2 : Text displayed beneath the image. If left blank or omitted, a caption will not be displayed. : ''This should only be used for photographs that require an explanation; it should be omitted for airport logos and may be omitted for photographs.'' ===Airport codes=== These parameters specify airport location identifiers which are displayed below the image (or below title if there is no image): ; IATA : The airport's three character [[IATA airport code|IATA location identifier]]. If omitted or left blank it will display as '''IATA: ''none'''''. ; ICAO : The airport's four character [[ICAO airport code|ICAO location identifier]]. If omitted or left blank it will display as '''ICAO: ''none'''''. ; FAA : The three or four character [[FAA]] [[location identifier]] for airports in the United States. If omitted or left blank, nothing is displayed. ; TC : The three or four character [[Transport Canada]] [[location identifier]] for airports in Canada. If omitted or left blank, nothing is displayed. ; LID : A [[location identifier]] for airports outside the US or Canada, if other than ICAO or IATA codes. If omitted or left blank, nothing is displayed. ; GPS : A [[Global Positioning System]] code for the airport, if other than ICAO or IATA codes. If omitted or left blank, nothing is displayed. ; WMO : The [[World Meteorological Organization]] five digit code for the weather station at the airport. If omitted or left blank, nothing is displayed. ===Airport summary=== These parameters specify airport details for the "Summary" section displayed below the airport codes. ; type : Airport type should be one of the following: ''Public'', ''Private'', ''Military'' or ''Military/Public''. Do not use ''Commercial'', ''General'' or ''Civil''. ; owner_oper : If the airport is owned and operated by the same entity, use this in place of ''owner'' and ''operator''. ; owner : Name of the airport owner. ; operator : Name of the airport operator, if not the owner. ; area_served : If the airport is associated with a major city but actually located in a smaller town, list the major city here and the smaller town under ''location''. This is not automatically linked, in order to allow multiple links if needed. : Example: <code><nowiki>area_served = Paris</nowiki></code> : Result: Paris ; location : Name of the town or city where the airport is located. Do not put the airport's street address in this field. This is not automatically linked, in order to allow multiple links if needed. : Example: <code><nowiki>location = [[Orly]], France</nowiki></code> : Result: [[Orly]], France ; opened : The date when the airport originally opened for commercial service. : Example: <code><nowiki>{{start date|1989|09|22}}</nowiki></code> : Result: September 22, 1989 ; closed : The date when the airport closed, either temporarily or permanently, along with reason for closing (for presently closed airports only). Use {{Template link|end date}}. ; passenger_services_ceased : The date when passenger services to the airport ceased due to conversion of the airport for another use, along with the new use for the airport. Only for airports that previously had passenger services. Use {{Template link|end date}}. ; hub : If the airport serves as a [[airline hub|hub]], list the airlines here in alphabetical order. This is not automatically linked, in order to allow multiple links if needed. Use {{Template link|Unbulleted list}} if the list is long. : Example: <syntaxhighlight lang="wikitext">{{Unbulleted list | [[British Airways]] | [[EasyJet]] | [[Virgin Atlantic]] }}</syntaxhighlight> : Result: : [[British Airways]] : [[EasyJet]] : [[Virgin Atlantic]] ; focus_city : If the airport serves as a [[focus city]], list the airlines here in alphabetical order. See discussion at [[Wikipedia talk:WikiProject Airports#Focus Cities on pages]]. Use {{Template link|Unbulleted list}} if the list is long. ; operating_base : If the airport serves as an operating base for an airline, list it here in alphabetical order, unless the airline is already listed under hub or focus_city. This parameter is most commonly used for [[Ultra-low cost airline]]s which do not have hubs or focus cities. Use {{Template link|Unbulleted list}} if the list is long. ; timezone and utc : Will give the [[time zone]] that the airport is in, can be linked. A list can be found at [[List of time zones by country]]. : Timezone is optional, but if it is used, then utc must be used as well, can be linked. A list can be found at [[List of UTC time offsets]]. ; summer and utcs : If the time zone observes [[daylight saving time]] this will give the zone that the airport is in, can be linked. A list can be found at [[List of time zones by country]]. : Summer is optional, but if it is used, then utcs must be used as well, can be linked. A list can be found at [[List of UTC time offsets]]. ; elevation_f : Height [[above mean sea level]], in feet. ; elevation_m : Height above mean sea level, in metres. ; website : External link to the airport's official [[website]]. See [[Wikipedia: External links#How to link]] for more information. : Example: <code><nowiki>website = {{URL|http://www.dfwairport.com/}}</nowiki></code> : Result: <span class="plainlinksneverexpand">{{URL|http://www.dfwairport.com/}}</span> ====Military airports==== These optional parameters provide additional information for military airports. The parameter names are based on those used in [[Template:Infobox military structure]]. This allows the display of information from that template, without the need to include an additional infobox. See [[#Example 4|example 4]] below. ; built : The date when the structure was built, usually given in years. ; used : The period during which the structure was in active military use, usually given in years. ; commander : The current commanding officer, for structures currently in military use. ; occupants : Any notable military units which occupy the structure. ====Geographic coordinates==== This template allows for the insertion of [[geographic coordinates]] in two different ways: you can either provide a complete {{Template link|Coord}} template in the '''coordinates''' parameter, or you can provide the individual coordinate components (degrees, minutes, seconds, etc.) in the separate parameters described below. The latter method also allows you to insert a [[Template:Location map|pushpin map]] with an automatically-placed airport icon and label (see [[#Maps|below]]). If you use both methods, then the '''coordinates''' parameter will be used in the infobox. ; coordinates : [[Latitude]] and [[Longitude]] of airport, specified using the {{Template link|Coord}} template. When entering the coordinates always ensure that the resultant map or image shows the airport. It is very easy to confuse "N" for "S" or "E" for "W". If used as shown below, this will also cause the airport to appear in [[Google Earth]]'s Geographic Web Layer. : Example: <code><nowiki>coordinates = {{Coord|49|27|16|N|002|06|46|E|type:airport_region:FR|display=inline,title}}</nowiki></code> : Result: {{Coord|49|27|16|N|002|06|46|E|type:airport_region:FR|display=inline}} ===Maps=== This template provides three ways to include a map: as a simple image, or using interactive [[Template:Mapframe|Mapframe]] maps, or using {{Template link|Location map}} (with the coordinate parameters described [[#Geographic coordinates|above]] to automatically place a pushpin mark and label on a map). ==== Image map ==== Am image map can be displayed by providing a value for '''image_map'''. The remaining '''image_''' parameters are optional. ; image_map : The name of an image to use as a map, such as <code>Airport_map.png</code> (do not include the <code>File:</code> or <code>Image:</code> prefix). ; image_mapsize : ''(optional)'' The width to display the image map, in pixels. Just the number, no "<code>px</code>". If omitted or left empty, defaults to '''220'''. ; image_map_alt : ''(optional)'' [[Wikipedia:Alternative text for images|Alt text]] for the image map. If left blank or omitted, this defaults to same text used in <code>image_map_caption</code> (or Location of {{{name}}} if no caption). ; image_map_caption : ''(optional)'' Caption to display below the image map. If left blank or omitted, a caption will not be displayed. ====Mapframe maps==== {{Infobox mapframe/doc/parameters |mapframe-marker=airport }} ==== Location/pushpin map ==== A location map can be displayed by providing values for '''coordinates''', and '''pushpin_map'''. The remaining '''pushpin_''' parameters are optional. ; pushpin_map : The name of a location map as per [[Template:Location map]] (e.g. '''Indonesia''' or '''Russia'''). The {{para|coordinates}} parameter values position a pushpin mark and label on the map automatically. ; pushpin_mapsize : ''(optional)'' The width to display the pushpin map, in pixels. Just the number, without "<code>px</code>". If omitted or left empty, defaults to '''220'''. ; pushpin_map_alt : ''(optional)'' [[Wikipedia:Alternative text for images|Alt text]] for the pushpin map. ; pushpin_map_caption : ''(optional)'' Caption to display below the pushpin map. If left blank or omitted, a caption will not be displayed. ; pushpin_relief : ''(optional)'' Any non-blank value (yes, 1, etc.) will cause the template to display a [[relief mapping (computer graphics)|relief map]] image, where available (see [[#Example 1|example 1]]). For additional information, see [[Template:Location map#Relief parameter]]. ; pushpin_image : ''(optional)'' Name of an alternative map image, which must have the same edge coordinates as the location map template specified via '''pushpin_map''' (see [[#Example 5|example 5]]). Do not include the <code>File:</code> or <code>Image:</code> prefix. For additional information, see [[Template:Location map#AlternativeMap parameter]]. ; pushpin_label : ''(optional)'' The text of the label to place next to the pushpin mark (see [[#Example 1|example 1]]). The default is the value of the '''name''' parameter. ; pushpin_label_position : ''(optional)'' The position of the label on the pushpin map relative to the pushpin mark (see [[#Example 5|example 5]]). Valid values are <code>left</code>, <code>right</code>, <code>top</code> and <code>bottom</code>. This defaults to either <code>left</code> or <code>right</code>, depending on the coordinates of the marker and its position relative to the right border of the map image. ; pushpin_mark : ''(optional)'' The name of an image to display as the pushpin mark (see [[#Example 5|example 5]]). The default is <code>[[:File:Airplane silhouette.svg]]</code> ( [[File:Airplane silhouette.svg|10px]] ). ; pushpin_marksize : ''(optional)'' The size of the mark in [[pixel]]s (see [[#Example 5|example 5]]). The default is 10. Do not include <code>px</code>, for example: <code>pushpin_marksize = 8</code>, not <code>pushpin_marksize = 8px</code>. ===Infobox control=== These parameters control how certain fields within the infobox are displayed. ; metric_elev : Set to any value to display elevation in metric units (metres) before imperial/US units (feet); leave blank to display imperial/US units first. This can be seen in [[#Example 1|example 1]]. ; metric_rwy : Set to any value to display runway length in metric units (metres) before imperial/US units (feet); leave blank to display imperial/US units first. [[#Example 1|Examples 1]] and [[#Example 2|2]] below show the runway length with metres first; [[#Example 3|example 3]] and [[#Example 4|4]] show it with feet before metres. ===Runways=== These parameters specify details for each runway in the "Runways" section displayed below the summary. This can also be used to specify water landing areas for [[seaplanes]] (see [[Fairbanks International Airport]]). Parameters start with '''r1-''' for the first runway, '''r2-''' for the second runway, up to '''r8-''' for the eighth runway (if more are needed, leave a message on the [[Template talk:Infobox Airport|talk]] page). Each airport should have at least one runway. ; r<sub>''n''</sub>-number (r1_number, r2_number, ...) : The designation of the runway, normally two numbers like this &rarr; 02/20, 1st number is 18 lower than the 2nd. Where there are parallel runways an additional letter is added to each number, for example "L" for left, "R" for right and "C" for center. In certain cases a runway will only have one number when it can only be used in one direction. For airports in the United States the leading zero is not used and the designation should read 2/20. ; r<sub>''n''</sub>-length_f (r1_length_f, r2_length_f, ...) : Runway length in feet. ; r<sub>''n''</sub>-length_m (r1_length_m, r2_length_m, ...) : Runway length in metres. ; r<sub>''n''</sub>-surface (r1_surface, r2_surface, ...) : Runway surface type, such as: [[Concrete]], [[Bitumen|Asphalt]], [[Gravel]], [[Grass]] (or Turf), [[Soil|Dirt]], [[Water]], etc. Avoid the generic type "Paved" if possible. ===Helipads=== These parameters specify details for each helipad in the "Helipads" section displayed below the runways. Parameters start with '''h1-''' for the first helipad, '''h2-''' for the second helipad, up to '''h12-''' for the twelfth helipad (if more are needed, leave a message on the [[Template talk:Infobox Airport|talk]] page). This section is optional and only appears if the '''h1-''' parameters are specified. See [[#Example 1|example 1]] and [[#Example 3|example 3]] below. ; h<sub>''n''</sub>-number(h1_number, h2_number, ...) : The designation of the helipad. In the United States this is usually the letter "H" followed by a number, i.e. "H1", "H2", etc. ; h<sub>''n''</sub>-length_f (h1_length_f, h2_length_f, ...) : Helipad length in feet. ; h<sub>''n''</sub>-length_m (h1_length_m, h2_length_m, ...) : Helipad length in metres. ; h<sub>''n''</sub>-surface (h1_surface, h2_surface, ...) : Helipad surface type, such as: Concrete, Asphalt, etc. Avoid the generic type "Paved" if possible. ===Statistics=== These parameters specify details for an optional "Statistics" section displayed below the runways and helipads. Parameters start with '''stat1-''' for the first statistic, '''stat2-''' for the second statistic, etc. This section only appears if the '''stat1-''' parameters are specified. See [[#Example 1|example 1]] and [[#Example 3|example 3]] below. ; stat''<sub>n</sub>''-header (stat1_header, stat2_header, ...) : A brief description of each statistic, such as ''Passengers'' or ''Aircraft operations''. ; stat''<sub>n</sub>''-data (stat1_data, stat2_data, ...) : The data associated with the corresponding header. ; stat_year : The calendar year for the statistics. This is displayed in parentheses after the word "Statistics" in the section header. ===Footnotes=== This parameter contains text for footnotes displayed at the bottom of the infobox. ; footnotes : The most common use for this field is to give sources or references for the data displayed in the infobox. See the examples below. ==Examples== ===Example 1=== {{Infobox airport | name = Warsaw Chopin Airport | native_name = ''Lotnisko Chopina w Warszawie'' | image = <!--leave blank, this is demo without image--> | IATA = WAW | ICAO = EPWA | type = Public / Military | operator = Polish Airports State Enterprise (PPL) | area_served = [[Warsaw]] | location = [[Warsaw]] ([[Okęcie]]), Poland | hub = {{plainlist| *[[Bingo Airways]] *[[Enter Air]] *[[Eurolot]] *[[LOT Polish Airlines]] *[[Small Planet Airlines]] *[[SprintAir]] *[[Wizz Air]] }} | metric_elev = yes | elevation_m = 110 | elevation_f = 362 | website = {{URL|1=http://www.lotnisko-chopina.pl/en/passenger|2=www.lotnisko-chopina.pl}} | opened = {{Start date|1934|04|29|df=yes}} | coordinates = {{coord|52|09|57|N|20|58|02|E|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = Poland | pushpin_map_caption = Location of airport in Poland | pushpin_relief = yes | pushpin_label = WAW | metric_rwy = yes | r1_number = 11/29 | r1_length_m = 2,800 | r1_length_f = 9,186 | r1_surface = [[Bitumen|Asphalt]] | r2_number = 15/33 | r2_length_f = 12,106 | r2_length_m = 3,689 | r2_surface = Asphalt | h1_number = H1 | h1_length_m = 40 | h1_length_f = 131 | h1_surface = [[Concrete]] | stat_year = 2012 | stat1_header = Passengers | stat1_data = 9,587,842 | stat2_header = Movements | stat2_data = 118,320 | footnotes = Statistics: Warsaw Chopin Airport<ref name="stats2013">{{cite web|title=About the Airport: Statistics|url=http://www.lotnisko-chopina.pl/en/airport/about-the-airport/statistics|publisher=Warsaw Chopin Airport|accessdate=28 September 2013}}</ref><br/>Sources: Polish [[Aeronautical Information Publication|AIP]] at [[Eurocontrol]]<ref>{{cite web|url=http://www.ead.eurocontrol.int/publicuser/protect/pu/main.jsp |title=EAD Basic |publisher=Ead.eurocontrol.int |accessdate=2012-06-28}}</ref> }} [[Warsaw Chopin Airport]] This example shows the appearance of the infobox without an image. It also shows the use of the parameters for latitude, longitude, and location/pushpin map. ''Note: helipad information added to illustrate function of <code>metric_rwy</code> parameter.'' <syntaxhighlight lang="wikitext"> {{Infobox airport | name = Warsaw Chopin Airport | native_name = ''Lotnisko Chopina w Warszawie'' | image = <!--leave blank, this is demo without image--> | IATA = WAW | ICAO = EPWA | type = Public / Military | operator = Polish Airports State Enterprise (PPL) | area_served = [[Warsaw]] | location = [[Warsaw]] ([[Okęcie]]), Poland | hub = {{plainlist| *[[Bingo Airways]] *[[Enter Air]] *[[Eurolot]] *[[LOT Polish Airlines]] *[[Small Planet Airlines]] *[[SprintAir]] *[[Wizz Air]] }} | metric_elev = yes | elevation_m = 110 | elevation_f = 362 | website = {{URL|1=http://www.lotnisko-chopina.pl/en/passenger|2=www.lotnisko-chopina.pl}} | opened = {{Start date|1934|04|29|df=yes}} | coordinates = {{coord|52|09|57|N|20|58|02|E|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = Poland | pushpin_map_caption = Location of airport in Poland | pushpin_relief = yes | pushpin_label = WAW | metric_rwy = yes | r1_number = 11/29 | r1_length_m = 2,800 | r1_length_f = 9,186 | r1_surface = [[Bitumen|Asphalt]] | r2_number = 15/33 | r2_length_f = 12,106 | r2_length_m = 3,689 | r2_surface = Asphalt | h1_number = H1 | h1_length_m = 40 | h1_length_f = 131 | h1_surface = [[Concrete]] | stat_year = 2012 | stat1_header = Passengers | stat1_data = 9,587,842 | stat2_header = Movements | stat2_data = 118,320 | footnotes = Statistics: Warsaw Chopin Airport<ref name="stats2013">{{cite web|title=About the Airport: Statistics|url=http://www.lotnisko-chopina.pl/en/airport/about-the-airport/statistics|publisher=Warsaw Chopin Airport|accessdate=28 September 2013}}</ref><br/>Sources: Polish [[Aeronautical Information Publication|AIP]] at [[Eurocontrol]]<ref>{{cite web|url=http://www.ead.eurocontrol.int/publicuser/protect/pu/main.jsp |title=EAD Basic |publisher=Ead.eurocontrol.int |accessdate=2012-06-28}}</ref> }} </syntaxhighlight> {{clear}} ===Example 2=== {{Infobox airport | name = Beijing Capital International Airport | native_name = 北京首都国际机场<br>Běijīng Shǒudū Guójì Jīcháng | image = Beijing Capital Departure Hall.jpg | caption = Beijing Capital Departure Hall | IATA = PEK | ICAO = ZBAA | type = Public | operator = [[Civil Aviation Administration of China]] | area_served = [[Beijing]] | location = [[Chaoyang District, Beijing]] | hub = [[Air China]], [[China Southern Airlines]] | elevation_f = 116 | elevation_m = 35 | coordinates = {{Coord|40|04|48|N|116|35|04|E|type:airport_region:CN|display=inline|name=Beijing Capital International Airport}} | website = {{URL|1=http://en.bcia.com.cn/|2=www.bcia.com.cn}} | opened = {{Start date|1958|03|02}} | metric_rwy = yes | r1_number = 18L/36R | r1_length_m = 3,800 | r1_length_f = 12,467 | r1_surface = [[Bitumen|Asphalt]] | r2_number = 18R/36L | r2_length_m = 3,200 | r2_length_f = 10,499 | r2_surface = Asphalt }} [[Beijing Capital International Airport]] This example shows the appearance of the infobox with an image and a caption. <syntaxhighlight lang="wikitext"> {{Infobox airport | name = Beijing Capital International Airport | native_name = 北京首都国际机场<br>Běijīng Shǒudū Guójì Jīcháng | image = Beijing Capital Departure Hall.jpg | caption = Beijing Capital Departure Hall | IATA = PEK | ICAO = ZBAA | type = Public | operator = [[Civil Aviation Administration of China]] | area_served = [[Beijing]] | location = [[Chaoyang District, Beijing]] | hub = [[Air China]], [[China Southern Airlines]] | elevation_f = 116 | elevation_m = 35 | coordinates = {{Coord|40|04|48|N|116|35|04|E|type:airport_region:CN|display=inline,title|name=Beijing Capital International Airport}} | website = {{URL|1=http://en.bcia.com.cn/|2=www.bcia.com.cn}} | opened = {{Start date|1958|03|02}} | metric_rwy = yes | r1_number = 18L/36R | r1_length_m = 3,800 | r1_length_f = 12,467 | r1_surface = [[Bitumen|Asphalt]] | r2_number = 18R/36L | r2_length_m = 3,200 | r2_length_f = 10,499 | r2_surface = Asphalt }} </syntaxhighlight> {{clear}} ===Example 3=== {{Infobox airport | name = Dallas/Fort Worth International Airport | image = Dfw_airport.jpg | IATA = DFW | ICAO = KDFW | FAA = DFW | type = Public | owner = City of [[Dallas]] City of [[Fort Worth, Texas|Fort Worth]] | operator = DFW Airport Board | area_served = [[Dallas–Fort Worth metroplex|Dallas–Fort Worth]] | hub = [[American Airlines]], [[Envoy Air]] | metric_elev = | elevation_f = 607 | elevation_m = 185 | website = {{URL|http://www.dfwairport.com/}} | opened = {{Start date|1974|01|13}} | coordinates = {{coord|32|53|49|N|097|02|17|W|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = USA Texas | pushpin_map_caption = Location within Texas | pushpin_label = DFW | metric_rwy = | r1_number = 13L/31R | r1_length_f = 9,000 | r1_length_m = 2,743 | r1_surface = [[Concrete]] | r2_number = 13R/31L | r2_length_f = 9,301 | r2_length_m = 2,835 | r2_surface = Concrete | r3_number = 17C/35C | r3_length_f = 13,401 | r3_length_m = 4,085 | r3_surface = Concrete | r4_number = 17L/35R | r4_length_f = 8,500 | r4_length_m = 2,591 | r4_surface = Concrete | r5_number = 17R/35L | r5_length_f = 13,401 | r5_length_m = 4,085 | r5_surface = Concrete | r6_number = 18L/36R | r6_length_f = 13,400 | r6_length_m = 4,084 | r6_surface = Concrete | r7_number = 18R/36L | r7_length_f = 13,400 | r7_length_m = 4,084 | r7_surface = Concrete | h1_number = H1 | h1_length_f = 158 | h1_length_m = 48 | h1_surface = Concrete | stat_year = 2005 | stat1_header = Passengers | stat1_data = 59,176,265 | stat2_header = Aircraft operations | stat2_data = 711,878 | stat3_header = Metric tonnes of cargo | stat3_data = 741,432 | footnotes = Sources: FAA,<ref>{{FAA-airport|ID=DFW|use=PU|own=PU|site=23710.6*A}}</ref> airport website.<ref>[http://www.dfwairport.com/ Dallas–Fort Worth International Airport], official web site</ref> }} [[Dallas–Fort Worth International Airport]] <syntaxhighlight lang="wikitext"> {{Infobox airport | name = Dallas–Fort Worth International Airport | image = Dfw_airport.jpg | IATA = DFW | ICAO = KDFW | FAA = DFW | type = Public | owner = City of [[Dallas, Texas|Dallas]] City of [[Fort Worth, Texas|Fort Worth]] | operator = DFW Airport Board | area_served = [[Dallas/Fort Worth Metroplex|Dallas/Fort Worth]] | hub = [[American Airlines]], [[American Eagle Airlines]] | metric_elev = | elevation_f = 607 | elevation_m = 185 | website = {{URL|http://www.dfwairport.com/}} | opened = {{Start date|1974|01|13}} | coordinates = {{coord|32|53|49|N|097|02|17|W|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = USA Texas | pushpin_map_caption = Location within Texas | pushpin_label = DFW | metric_rwy = | r1_number = 13L/31R | r1_length_f = 9,000 | r1_length_m = 2,743 | r1_surface = [[Concrete]] | r2_number = 13R/31L | r2_length_f = 9,301 | r2_length_m = 2,835 | r2_surface = Concrete | r3_number = 17C/35C | r3_length_f = 13,401 | r3_length_m = 4,085 | r3_surface = Concrete | r4_number = 17L/35R | r4_length_f = 8,500 | r4_length_m = 2,591 | r4_surface = Concrete | r5_number = 17R/35L | r5_length_f = 13,401 | r5_length_m = 4,085 | r5_surface = Concrete | r6_number = 18L/36R | r6_length_f = 13,400 | r6_length_m = 4,084 | r6_surface = Concrete | r7_number = 18R/36L | r7_length_f = 13,400 | r7_length_m = 4,084 | r7_surface = Concrete | h1_number = H1 | h1_length_f = 158 | h1_length_m = 48 | h1_surface = Concrete | stat_year = 2005 | stat1_header = Passengers | stat1_data = 59,176,265 | stat2_header = Aircraft operations | stat2_data = 711,878 | stat3_header = Metric tonnes of cargo | stat3_data = 741,432 | footnotes = Sources: FAA<ref>{{FAA-airport|ID=DFW|use=PU|own=PU|site=23710.6*A}}</ref>, airport website<ref>[http://www.dfwairport.com/ Dallas–Fort Worth International Airport], official web site</ref>. }} </syntaxhighlight> {{clear}} ===Example 4=== {{Infobox airport | name = Wright–Patterson Air Force Base | ensign = [[File:Air Force Materiel Command shield.svg|100px]] | nativename = {{smaller|[[Air Force Materiel Command|{{black|Air Force Materiel Command}}]]}} | image = National Museum of the United States Air Force.jpg | image_size = 250 | caption = [[National Museum of the United States Air Force]] | IATA = FFO | ICAO = KFFO | FAA = FFO | type = Military: [[Air Force Base]] | operator = [[United States Air Force]] | location = [[Dayton, Ohio]] | built = <!--1948--> | used = 1948 – present | commander = <div> * Gen. Bruce Carlson – [[Air Force Materiel Command]] * Brig. Gen. Bruce E. Davis –- [[445th Airlift Wing]] * Col. Colleen M. Ryan –- [[88th Air Base Wing]] and Installation Commander </div> | occupants = | elevation_f = 823 | elevation_m = 251 | website = {{URL|http://www.wpafb.af.mil/}} | coordinates = {{coord|39|49|34|N|084|02|54|W|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = USA Ohio | pushpin_map_caption = Location within Ohio | pushpin_label = Wright–Patterson AFB | r1_number = 5L/23R | r1_length_f = 12,601 | r1_length_m = 3,841 | r1_surface = [[Porous European Mix|PEM]] | r2_number = 5R/23L | r2_length_f = 7,000 | r2_length_m = 2,134 | r2_surface = [[Bitumen|Asphalt]] | footnotes = Sources: FAA,<ref>{{FAA-airport|ID=FFO|use=PR|own=MA|site=17827.*A}}</ref> official website.<ref>[http://www.wpafb.af.mil/ Wright-Patterson Air Force Base] (official site)</ref> }} [[Wright–Patterson Air Force Base]] This infobox shows the use of an image and linked text over the blue background in title area. It also makes use of some of the fields used for military airports. <syntaxhighlight lang="wikitext"> {{Infobox airport | name = Wright–Patterson Air Force Base | ensign = [[File:Air Force Materiel Command.png|100px]] | nativename = {{smaller|[[Air Force Materiel Command|{{black|Air Force Materiel Command}}]]}} | image = National Museum of the United States Air Force.jpg | image_size = 250 | caption = [[National Museum of the United States Air Force]] | IATA = FFO | ICAO = KFFO | FAA = FFO | type = Military: [[Air Force Base]] | operator = [[United States Air Force]] | location = [[Dayton, Ohio]] | built = <!--1948--> | used = 1948 – present | commander = <div> * Gen. Bruce Carlson – [[Air Force Materiel Command]] * Brig. Gen. Bruce E. Davis – [[445th Airlift Wing]] * Col. Colleen M. Ryan – [[88th Air Base Wing]] and Installation Commander </div> | occupants = | elevation_f = 823 | elevation_m = 251 | website = {{URL|http://www.wpafb.af.mil/}} | coordinates = {{coord|39|49|34|N|084|02|54|W|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = USA Ohio | pushpin_map_caption = Location within Ohio | pushpin_label = Wright–Patterson AFB | r1_number = 5L/23R | r1_length_f = 12,601 | r1_length_m = 3,841 | r1_surface = [[Porous European Mix|PEM]] | r2_number = 5R/23L | r2_length_f = 7,000 | r2_length_m = 2,134 | r2_surface = [[Bitumen|Asphalt]] | footnotes = Sources: FAA<ref>{{FAA-airport|ID=FFO|use=PR|own=MA|site=17827.*A}}</ref>, official website<ref>[http://www.wpafb.af.mil/ Wright-Patterson Air Force Base] (official site)</ref>. }} </syntaxhighlight> {{clear}} ===Example 5=== {{Infobox airport | name = Buri Ram Airport | native_name = {{lang|th|ท่าอากาศยานบุรีรัมย์}} | IATA = BFV | ICAO = VTUO | type = Public | area_served = [[Buri Ram]], [[Thailand]] | elevation_f = 590 | coordinates = {{coord|15|13|46|N|103|15|04|E|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = Thailand | pushpin_mapsize = 220x300 <!--limit height to 300px--> | pushpin_map_caption = Location of airport in Thailand | pushpin_image = Thailand location map Topographic.png | pushpin_label = <span style="color:yellow; font-weight:bold; font-size:larger; text-shadow: black 0.1em 0.1em 0.2em">BFV</span> | pushpin_label_position = bottom | pushpin_mark = Yellow_pog.svg | pushpin_marksize = 11 | metric_rwy = y | r1_number = 04/22 | r1_length_m = 2100 | r1_surface = Asphalt | footnotes = Source: [[Aeronautical Information Publication|AIP]] Thailand<ref name="AIP">{{cite web | url = http://www.aisthai.go.th/webais/pdf/AERONAUTICALCHARTS/VTUO.pdf | title = VTUO &ndash; BURI RAM | format = [[PDF]] | publisher = AIP Thailand | accessdate = 20 August 2012}}</ref> }} [[Buri Ram Airport]] This infobox shows the use optional parameters for the location/pushpin map. <syntaxhighlight lang="wikitext"> {{Infobox airport | name = Buri Ram Airport | native_name = {{lang|th|ท่าอากาศยานบุรีรัมย์}} | IATA = BFV | ICAO = VTUO | type = Public | area_served = [[Buri Ram]], [[Thailand]] | elevation_f = 590 | coordinates = {{coord|15|13|46|N|103|15|04|E|display=inline<!--- set here to prevent coordinates from appearing in the title of the template page --->}} | pushpin_map = Thailand | pushpin_mapsize = 220x300 <!--limit height to 300px--> | pushpin_map_caption = Location of airport in Thailand | pushpin_image = Thailand location map Topographic.png | pushpin_label = <span style="color:yellow; font-weight:bold; font-size:larger; text-shadow: black 0.1em 0.1em 0.2em">BFV</span> | pushpin_label_position = bottom | pushpin_mark = Yellow_pog.svg | pushpin_marksize = 11 | metric_rwy = y | r1_number = 04/22 | r1_length_m = 2100 | r1_surface = Asphalt | footnotes = Source: [[Aeronautical Information Publication|AIP]] Thailand<ref name="AIP">{{cite web | url = http://www.aisthai.go.th/webais/pdf/AERONAUTICALCHARTS/VTUO.pdf | title = VTUO &ndash; BURI RAM | format = [[PDF]] | publisher = AIP Thailand | accessdate = 20 August 2012}}</ref> }} </syntaxhighlight> {{clear}} ===References for examples=== {{reflist}} ==TemplateData== {{TemplateData header}} {{collapse top|title=TemplateData}} <templatedata> { "format": "{{_\n| ___________________ = _\n}}\n", "params": { "name": { "label": "Name", "type": "string", "required": false, "description": "The name of the airport in English", "default": "{{PAGENAME}}" }, "native_name": { "label": "Native name", "type": "string", "required": false, "description": "Airport name in a native language using Western characters (French, German, Spanish, etc.)" }, "ensign": { "label": "Ensign", "type": "content", "required": false, "description": "A small ensign using image syntax.", "example": "[[File:Example.png|100px]]" }, "image": { "label": "Image", "type": "wiki-file-name", "required": false, "description": "The name of image file, such as Airport.png or Logo.gif (do not include the File: or Image: prefix)." }, "image_size": { "label": "Image size or width", "type": "number", "required": false, "description": "The image size or width in pixels, e.g., 175 (defaults to 220 if not specified).", "example": "175", "default": "220" }, "image_alt": { "label": "Image alternative text", "type": "string", "required": false, "description": "Alternative text for the images." }, "caption": { "label": "Caption", "type": "string", "required": false, "description": "Text displayed beneath the image. If left blank or omitted, a caption will not be displayed. This should only be used for photographs that require an explanation; it should be omitted for airport logos and may be omitted for photographs." }, "image2": { "label": "Image2", "type": "wiki-page-name", "required": false, "description": "The name of image file, such as Airport.png or Logo.gif (do not include the File: or Image: prefix)." }, "image2_size": { "label": "Image2 size or width", "type": "number", "required": false, "description": "The image size or width in pixels, e.g., 175 (defaults to 220 if not specified). This should only be used for smaller images which would appear distorted when expanded to a width of 220px.", "example": "175", "default": "220" }, "image2_alt": { "label": "Image2 alternative text", "type": "string", "required": false, "description": "Alternative text for the images." }, "caption2": { "label": "Caption2", "type": "string", "required": false, "description": "Text displayed beneath the image. If left blank or omitted, a caption will not be displayed. This should only be used for photographs that require an explanation; it should be omitted for airport logos and may be omitted for photographs." }, "IATA": { "label": "IATA", "type": "string", "required": false, "description": "The airport's three character IATA location identifier. If omitted or left blank it will display as IATA: none." }, "ICAO": { "label": "ICAO", "type": "string", "required": false, "description": "The airport's four character ICAO location identifier. If omitted or left blank it will display as ICAO: none." }, "FAA": { "label": "FAA", "type": "string", "required": false, "description": "The three or four character FAA location identifier for airports in the United States. If omitted or left blank, nothing is displayed." }, "TC": { "label": "TC", "type": "string", "required": false, "description": "The three or four character Transport Canada location identifier for airports in Canada. If omitted or left blank, nothing is displayed." }, "LID": { "label": "LID", "type": "string", "required": false, "description": "A location identifier for airports outside the US or Canada, if other than ICAO or IATA codes. If omitted or left blank, nothing is displayed." }, "GPS": { "label": "GPS", "type": "string", "required": false, "description": "A Global Positioning System code for the airport, if other than ICAO or IATA codes. If omitted or left blank, nothing is displayed." }, "WMO": { "label": "WMO", "type": "string", "required": false, "description": "The World Meteorological Organization five digit code for the weather station at the airport. If omitted or left blank, nothing is displayed." }, "type": { "label": "Type", "type": "string", "required": false, "description": "Airport type should be one of the following: Public, Private, Military or Military/Public. Do not use Commercial, General or Civil." }, "owner_oper": { "label": "Owner-Operator", "type": "string", "required": false, "description": "If the airport is owned and operated by the same entity, use this in place of owner and operator." }, "owner": { "label": "Owner", "type": "string", "required": false, "description": "Name of the airport owner." }, "operator": { "label": "Operator", "type": "string", "required": false, "description": "Name of the airport operator, if not the owner." }, "area_served": { "label": "Area or city served", "type": "string", "required": false, "description": "If the airport is associated with a major city but actually located in a smaller town, list the major city here and the smaller town under location. This is not automatically linked, in order to allow multiple links if needed." }, "location": { "label": "Location", "type": "string", "required": false, "description": "Name of the town or city where the airport is located. Do not put the airport's street address in this field. This is not automatically linked, in order to allow multiple links if needed." }, "opened": { "label": "Opened", "type": "string", "required": false, "description": "The date when the airport originally opened for commercial service." }, "closed": { "label": "Closed", "type": "string", "required": false, "description": "The date when the airport closed, either temporarily or permanently, along with reason for closing (for presently closed airports only). Use {{end date}}." }, "passenger_services_ceased": { "label": "Passenger Services Ceased", "type": "string", "required": false, "description": "The date when passenger services to the airport ceased due to conversion of the airport for another use, along with the new use for the airport. Only for airports that previously had passenger services. Use {{end date}}." }, "hub": { "label": "Hub", "type": "string", "required": false, "description": "If the airport serves as an hub, list the airlines here. This is not automatically linked, in order to allow multiple links if needed. Use {{plainlist}} if the list is long." }, "focus_city": { "label": "Focus City", "type": "string", "required": false, "description": "If the airport serves as a focus city" }, "built": { "label": "Built", "type": "line", "required": false, "description": "The date when the structure was built, usually given in years." }, "used": { "label": "Used", "type": "string", "required": false, "description": "The period during which the structure was in active military use, usually given in years." }, "commander": { "label": "Commander", "type": "string", "required": false, "description": "The current commanding officer, for structures currently in military use." }, "occupants": { "label": "Occupants", "type": "string", "required": false, "description": "Any notable military units which occupy the structure." }, "timezone": { "label": "Timezone", "type": "number", "required": false, "description": "Will give the time zone that the airport is in, can be linked. A list can be found at List of time zones by country. Timezone is optional, but if it is used, then utc must be used as well, can be linked. A list can be found at List of UTC time offsets." }, "utc": { "label": "UTC", "type": "number", "required": false, "description": "UTC time of the airport" }, "summer": { "label": "Summer", "type": "string", "required": false, "description": "If the time zone observes daylight saving time this will give the zone that the airport is in, can be linked. A list can be found at List of time zones by country. " }, "utcs": { "label": "UTCS", "type": "string", "required": false, "description": "Summer is optional, but if it is used, then utcs must be used as well, can be linked. A list can be found at List of UTC time offsets." }, "elevation_f": { "label": "Elevation In Feet", "type": "number", "required": false, "description": "Height above mean sea level, in feet." }, "elevation_m": { "label": "Elevation In Metres", "type": "number", "required": false, "description": "Height above mean sea level, in metres." }, "metric_elev": { "label": "Metric elevation", "type": "number", "required": false, "description": "Set to any value to display elevation in metric units (metres) before imperial/US units (feet); leave blank to display imperial/US units first." }, "coordinates": { "label": "Coordinates", "type": "number", "required": false, "description": "Latitude and Longitude of airport, specified using the {{Coord}} template" }, "website": { "label": "Website", "type": "string", "required": false, "description": "External link to the airport's official website" }, "image_map": { "label": "Image Map", "type": "wiki-page-name", "required": false, "description": "The name of an image to use as a map, such as Airport_map.png (do not include the File: or Image: prefix)." }, "image_mapsize": { "label": "Image Mapsize", "type": "number", "required": false, "description": " The width to display the image map, in pixels. Just the number, no \"px\". If omitted or left empty, defaults to 220.", "default": "220" }, "image_map_alt": { "label": "Image Map Alternative", "type": "string", "required": false, "description": " Alt text for the image map. If left blank or omitted, this defaults to same text used in image_map_caption (or Location of {{{name}}} if no caption." }, "image_map_caption": { "label": "Image Map Caption", "type": "string", "required": false, "description": "Caption to display below the image map. If left blank or omitted, a caption will not be displayed." }, "pushpin_map": { "label": "Pushpin Map", "type": "string", "required": false, "description": "The name of a location map as per Template:Location map (e.g. Indonesia or Russia). The coordinates field position a pushpin mark and label on the map automatically." }, "pushpin_mapsize": { "label": "Pushpin Mapsize", "type": "number", "required": false, "description": " The width to display the pushpin map, in pixels. Just the number, without \"px\". If omitted or left empty, defaults to 220.", "default": "220" }, "pushpin_map_alt": { "label": "Pushpin Map Alternative", "type": "string", "required": false, "description": " Alt text for the pushpin map." }, "pushpin_map_caption": { "label": "Pushpin Map Caption", "type": "string", "required": false, "description": "Caption to display below the pushpin map. If left blank or omitted, a caption will not be displayed." }, "pushpin_relief": { "label": "Pushpin Relief", "type": "string", "required": false, "description": " Any non-blank value (yes, 1, etc.) will cause the template to display a relief map image, where available (see example 1). For additional information, see Template:Location map#Relief parameter." }, "pushpin_image": { "label": "Pushpin Image", "type": "wiki-page-name", "required": false, "description": " Name of an alternative map image, which must have the same edge coordinates as the location map template specified via pushpin_map" }, "pushpin_label": { "label": "Pushpin Label", "type": "string", "required": false, "description": "The text of the label to place next to the pushpin mark. The default is the value of the name parameter." }, "pushpin_label_position": { "label": "Pushpin Label Position", "type": "string", "required": false, "description": " The position of the label on the pushpin map relative to the pushpin mark (see example 5). Valid values are left, right, top and bottom. This defaults to either left or right, depending on the coordinates of the marker and its position relative to the right border of the map image." }, "pushpin_mark": { "label": "Pushpin Mark", "type": "string", "required": false, "description": "The name of an image to display as the pushpin mark.", "default": "Airplane silhouette.svg" }, "pushpin_marksize": { "label": "Pushpin Marksize", "type": "number", "required": false, "description": " The size of the mark in pixels" }, "r1_number": { "label": "r1-Number", "type": "number", "required": false, "description": "The designation of the runway, normally two numbers like this ? 02/20, 1st number is 18 lower than the 2nd. Where there are parallel runways an additional letter is added to each number, for example \"L\" for left, \"R\" for right and \"C\" for center. In certain cases a runway will only have one number when it can only be used in one direction. For airports in the United States the leading zero is not used and the designation should read 2/20." }, "r1_length_f": { "label": "r1-Length-In Feet", "type": "number", "required": false, "description": "Runway length in feet." }, "r1_length_m": { "label": "r1-Length-In Metres", "type": "number", "required": false, "description": "Runway length in metres." }, "r1_surface": { "label": "r1-Surface", "type": "string", "required": false, "description": "Runway surface type, such as: Concrete, Asphalt, Gravel, Grass (or Turf), Dirt, Water, etc. Avoid the generic type \"Paved\" if possible." }, "metric_rwy": { "label": "Metric-runway", "type": "string", "required": false, "description": "Set to any value to display runway length in metric units (metres) before imperial/US units (feet); leave blank to display imperial/US units first" }, "h1_number": { "label": "h1-Number", "type": "number", "required": false, "description": "The designation of the helipad. In the United States this is usually the letter \"H\" followed by a number, i.e. \"H1\", \"H2\", etc." }, "h1_length_f": { "label": "h1-Length-In Feet", "type": "number", "required": false, "description": "Helipad length in feet." }, "h1_length_m": { "label": "h1-Length-Metre", "type": "number", "required": false, "description": "Helipad length in metres." }, "h1_surface": { "label": "h1-Surface", "type": "string", "required": false, "description": "Helipad surface type, such as: Concrete, Asphalt, etc. Avoid the generic type \"Paved\" if possible." }, "stat1_header": { "label": "Stat1-Header", "type": "string", "required": false, "description": "A brief description of each statistic, such as Passengers or Aircraft operations." }, "stat1_data": { "label": "Stat1-Data", "type": "string", "required": false, "description": "The data associated with the corresponding header." }, "stat_year": { "label": "Stat-Year", "type": "line", "required": false, "description": "The calendar year for the statistics. This is displayed in parentheses after the word \"Statistics\" in the section header." }, "footnotes": { "label": "Footnotes", "type": "string", "required": false, "description": "The most common use for this field is to give sources or references for the data displayed in the infobox" } } } </templatedata> {{Collapse bottom}} == Microformat == {{UF-hcard-geo}} == Tracking categories == {{infobox tracking categories}} {{Buildings and structures infobox templates}} <includeonly>{{Sandbox other|| <!-- CATEGORIES: --> [[Category:Airport templates]] [[Category:Air transport infobox templates|Airport]] [[Category:Buildings and structures infobox templates|Airport]] [[Category:Templates that add a tracking category]] [[Category:Infobox templates using Wikidata]] }}</includeonly><noinclude> [[Category:WikiProject Aviation template instructions|Infobox Airport]] </noinclude> dr1b7ak1pn8ipre6z61j2wsks9mf5mm Template:Infobox mapframe/doc/parameters 10 176057 746227 2026-04-15T21:26:06Z en>Redrose64 0 documentation conventionally goes last 746227 wikitext text/x-wiki <includeonly>{{navbar|Template:Infobox mapframe/doc/parameters|plain=y|style=float: right;}}</includeonly><nowiki></nowiki> *Basic {{tl|Infobox mapframe}} parameters:{{#if:{{{noprefix|}}}||<nowiki></nowiki> **'''mapframe''' – Specify yes or no to show or hide the map, overriding the default. ''Default:'' {{{mapframe|no}}}{{#if:{{{onByDefault|}}}|, ''but also modified by onByDefault''}} *** Internal ''onByDefault'' parameter: {{{onByDefault|''not specified''}}} **{{#if:{{{noprefix|}}}||'''mapframe-coordinates''' or '''mapframe-coord''' or}} '''coordinates''' or '''coord''' – Coordinates to use, instead of any on Wikidata. Use the {{tl|Coord}} template, e.g. {{para|coord|2={{tlx|Coord|12.34|N|56.78|E}}}}. ''Default:'' {{{mapframe-coordinates|{{{mapframe-coord|{{{coordinates|{{{coord|''coordinates from Wikidata [[d:Property:P625]]''}}}}}}}}}}}} **'''mapframe-caption''' – Caption for the map. ''Default'': {{{mapframe-caption|''blank'' (or if {{para|mapframe-geomask}} is set, "Location in {{kbd|geomask's label}}")}}} **'''mapframe-custom''' – Use a custom map instead of the automatic mapframe. Specify either a {{tlx|maplink}} template, or another template that generates a mapframe map, or an image name. If used, most mapframe parameters will be ignored. ''Default'': ''not specified''}} **{{#if:{{{noprefix|}}}|'''id'''|'''mapframe-id''' or '''id''' or '''qid'''}} – Id (Q-number) of Wikidata item to use. ''Default:'' ''item for current page'' **'''{{#if:{{{noprefix|}}}||mapframe-}}wikidata''' – Set to {{code|yes}} to show all shape/line features from OpenStreetMap. ''Default:'' {{{mapframe-wikidata|''not specified''}}} *Customise which features are displayed: **'''{{#if:{{{noprefix|}}}||mapframe-}}point''' – Turn off display of point feature by setting to {{code|none}}. Force point marker to be displayed by setting to {{code|on}}. ''Default:'' {{{mapframe-point|''not specified''}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}shape''' – Turn off display of shape feature by setting to {{code|none}}. Force display of shape by setting to {{code|on}}. Use an inverse shape (geomask) instead of a regular shape by setting to {{code|inverse}}. ''Default:'' {{{mapframe-shape|''not specified''}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}line''' – Turn off display of line feature by setting to {{code|none}}. Force display of line by setting to {{code|on}}. ''Default:'' {{{mapframe-line|''not specified''}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}geomask''' – Wikidata item to use as a geomask (everything outside the boundary is shaded darker). Can either be a specific Wikidata item (Q-number), or a property that specifies the item to use (e.g. <code>P17</code> for {{Q|P17}}, <code>P131</code> for {{Q|P131}}). ''Default:'' {{{mapframe-geomask|''not specified''}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}switcher''' – set to {{code|auto}} or {{code|geomasks}} or {{code|zooms}} to enable [[Template:Switcher]]-style switching between multiple mapframes. ''Default:'' {{{mapframe-switcher|''not specified''}}} ***{{code|auto}} – switch geomasks found in {{Q|P276}} and {{Q|P131}} statements on the page's Wikidata item, searching recursively. E.g. an item's city, that city's state, and that state's country. ***{{code|geomasks}} – switch between the geomasks specified as a comma-separated list of Wikidata items (Q-numbers) in the '''{{#if:{{{noprefix|}}}||mapframe-}}geomask''' parameter ***{{code|zooms}} – switch between "zoomed in"/"zoomed midway"/"zoomed out", where "zoomed in" is the default zoom (with a minimum of {{code|3}}), "zoomed out" is {{code|1}}, and "zoomed midway" is the average *Other optional parameters: **'''{{#if:{{{noprefix|}}}||mapframe-}}frame-width''' or '''{{#if:{{{noprefix|}}}||mapframe-}}width''' – Frame width. ''Default:'' {{{mapframe-frame-width|270}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}frame-height''' or '''{{#if:{{{noprefix|}}}||mapframe-}}height''' – Frame height. ''Default:'' {{{mapframe-frame-height|200}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}shape-fill''' – Color used to fill shape features. ''Default:'' {{{mapframe-shape-fill|#606060}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}shape-fill-opacity''' – Opacity level of shape fill, a number between 0 and 1. ''Default:'' {{{mapframe-shape-fill-opacity|0.1}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}stroke-color''' or '''{{#if:{{{noprefix|}}}||mapframe-}}stroke-colour''' – Color of line features, and outlines of shape features. ''Default:'' {{{mapframe-stroke-color|{{{mapframe-stroke-colour|#ff0000}}}}}} ***'''{{#if:{{{noprefix|}}}||mapframe-}}line-stroke-color''' or '''{{#if:{{{noprefix|}}}||mapframe-}}line-stroke-colour''' – Color of line features. ''Default:'' {{{mapframe-line-stroke-color|{{{mapframe-line-stroke-colour|#ff0000}}}}}} ***'''{{#if:{{{noprefix|}}}||mapframe-}}shape-stroke-color''' or '''{{#if:{{{noprefix|}}}||mapframe-}}shape-stroke-colour''' – Color of outlines of shape features. ''Default:'' {{{mapframe-shape-stroke-color|{{{mapframe-shape-stroke-colour|#ff0000}}}}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}stroke-width''' – Width of line features, and outlines of shape features. ''Default:'' {{{mapframe-stroke-width|2}}} ***'''{{#if:{{{noprefix|}}}||mapframe-}}shape-stroke-width''' – Width of outlines of shape features. ''Default:'' {{{mapframe-shape-stroke-width|2}}} ***'''{{#if:{{{noprefix|}}}||mapframe-}}line-stroke-width''' – Width of line features. ''Default:'' {{{mapframe-line-stroke-width|5}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}marker''' – Marker symbol to use for coordinates; see [[mw:Help:Extension:Kartographer/Icons]] for options. ''Default:'' {{{mapframe-marker|''not specified (i.e. blank)''}}} ***Can also be set to {{code|blank}} to override any default marker symbol **'''{{#if:{{{noprefix|}}}||mapframe-}}marker-color''' or '''{{#if:{{{noprefix|}}}||mapframe-}}marker-colour''' – Background color for the marker. ''Default:'' {{{mapframe-marker-color|{{{mapframe-marker-colour|#5E74F3}}}}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}geomask-stroke-color''' or '''{{#if:{{{noprefix|}}}||mapframe-}}geomask-stroke-colour''' – Color of outline of geomask shape. ''Default:'' {{{mapframe-geomask-stroke-color|{{{mapframe-geomask-stroke-colour|#555555}}}}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}geomask-stroke-width''' – Width of outline of geomask shape. ''Default:'' {{{mapframe-geomask-stroke-width|1}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}geomask-fill''' – Color used to fill outside geomask features. ''Default:'' {{{mapframe-geomask-fill|#606060}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}geomask-fill-opacity''' – Opacity level of fill outside geomask features, a number between 0 and 1. ''Default:'' {{{mapframe-geomask-fill-opacity|0.25}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}zoom''' – Set the zoom level, from "1" (map of earth) to "18" (maximum zoom in), to be used if the zoom level cannot be determined automatically from object length or area. ''Default:'' {{{mapframe-zoom|10}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}length_km {{nobold|or}} {{#if:{{{noprefix|}}}||mapframe-}}length_mi {{nobold|or}} {{#if:{{{noprefix|}}}||mapframe-}}area_km2 {{nobold|or}} {{#if:{{{noprefix|}}}||mapframe-}}area_mi2''' – Determine zoom level by passing in object's length (in kilometres or miles) or area (in square kilometres or square miles). ''Default:'' ''{{{mapframe-length_km|not specified}}} / {{{mapframe-length_mi|not specified}}} / {{{mapframe-area_km2|not specified}}} / {{{mapframe-area_mi2|not specified}}}'' **'''{{#if:{{{noprefix|}}}||mapframe-}}frame-coordinates''' or '''{{#if:{{{noprefix|}}}||mapframe-}}frame-coord''' – Alternate latitude and longitude coordinates for initial placement of map, using {{tl|coord}}. ''Default:'' ''derived from item coordinates'' **'''{{#if:{{{noprefix|}}}||mapframe-}}type''' – Set the type of the object, with the same usage as {{tl|coord}}. ''Default:'' {{{mapframe-type|''not specified''}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}population''' – Set the population, useful with type="city", for {{tl|Infobox dim}}. ''Default:'' {{{mapframe-population|''not specified''}}} {{#if:{{{deprecated|}}}|<nowiki></nowiki> *Deprecated parameters **{{gray|1='''{{#if:{{{noprefix|}}}||mapframe-}}frame-lat''' or '''{{#if:{{{noprefix|}}}||mapframe-}}frame-latitude'''}} – Alternate latitude coordinate for initial placement of map; default is derived from item coordinates **{{gray|1='''{{#if:{{{noprefix|}}}||mapframe-}}frame-long''' or '''{{#if:{{{noprefix|}}}||mapframe-}}frame-longitude'''}} – Alternate longitude coordinate for initial placement of map; default is derived from item coordinates }}<noinclude>{{Documentation}}</noinclude> gmt0a73qep5wnninjoqvxs49de1rd8f 746228 746227 2026-06-12T21:52:03Z Robertsky 51025 1 revision imported from [[:en:Template:Infobox_mapframe/doc/parameters]]: for workshop activity 746227 wikitext text/x-wiki <includeonly>{{navbar|Template:Infobox mapframe/doc/parameters|plain=y|style=float: right;}}</includeonly><nowiki></nowiki> *Basic {{tl|Infobox mapframe}} parameters:{{#if:{{{noprefix|}}}||<nowiki></nowiki> **'''mapframe''' – Specify yes or no to show or hide the map, overriding the default. ''Default:'' {{{mapframe|no}}}{{#if:{{{onByDefault|}}}|, ''but also modified by onByDefault''}} *** Internal ''onByDefault'' parameter: {{{onByDefault|''not specified''}}} **{{#if:{{{noprefix|}}}||'''mapframe-coordinates''' or '''mapframe-coord''' or}} '''coordinates''' or '''coord''' – Coordinates to use, instead of any on Wikidata. Use the {{tl|Coord}} template, e.g. {{para|coord|2={{tlx|Coord|12.34|N|56.78|E}}}}. ''Default:'' {{{mapframe-coordinates|{{{mapframe-coord|{{{coordinates|{{{coord|''coordinates from Wikidata [[d:Property:P625]]''}}}}}}}}}}}} **'''mapframe-caption''' – Caption for the map. ''Default'': {{{mapframe-caption|''blank'' (or if {{para|mapframe-geomask}} is set, "Location in {{kbd|geomask's label}}")}}} **'''mapframe-custom''' – Use a custom map instead of the automatic mapframe. Specify either a {{tlx|maplink}} template, or another template that generates a mapframe map, or an image name. If used, most mapframe parameters will be ignored. ''Default'': ''not specified''}} **{{#if:{{{noprefix|}}}|'''id'''|'''mapframe-id''' or '''id''' or '''qid'''}} – Id (Q-number) of Wikidata item to use. ''Default:'' ''item for current page'' **'''{{#if:{{{noprefix|}}}||mapframe-}}wikidata''' – Set to {{code|yes}} to show all shape/line features from OpenStreetMap. ''Default:'' {{{mapframe-wikidata|''not specified''}}} *Customise which features are displayed: **'''{{#if:{{{noprefix|}}}||mapframe-}}point''' – Turn off display of point feature by setting to {{code|none}}. Force point marker to be displayed by setting to {{code|on}}. ''Default:'' {{{mapframe-point|''not specified''}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}shape''' – Turn off display of shape feature by setting to {{code|none}}. Force display of shape by setting to {{code|on}}. Use an inverse shape (geomask) instead of a regular shape by setting to {{code|inverse}}. ''Default:'' {{{mapframe-shape|''not specified''}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}line''' – Turn off display of line feature by setting to {{code|none}}. Force display of line by setting to {{code|on}}. ''Default:'' {{{mapframe-line|''not specified''}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}geomask''' – Wikidata item to use as a geomask (everything outside the boundary is shaded darker). Can either be a specific Wikidata item (Q-number), or a property that specifies the item to use (e.g. <code>P17</code> for {{Q|P17}}, <code>P131</code> for {{Q|P131}}). ''Default:'' {{{mapframe-geomask|''not specified''}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}switcher''' – set to {{code|auto}} or {{code|geomasks}} or {{code|zooms}} to enable [[Template:Switcher]]-style switching between multiple mapframes. ''Default:'' {{{mapframe-switcher|''not specified''}}} ***{{code|auto}} – switch geomasks found in {{Q|P276}} and {{Q|P131}} statements on the page's Wikidata item, searching recursively. E.g. an item's city, that city's state, and that state's country. ***{{code|geomasks}} – switch between the geomasks specified as a comma-separated list of Wikidata items (Q-numbers) in the '''{{#if:{{{noprefix|}}}||mapframe-}}geomask''' parameter ***{{code|zooms}} – switch between "zoomed in"/"zoomed midway"/"zoomed out", where "zoomed in" is the default zoom (with a minimum of {{code|3}}), "zoomed out" is {{code|1}}, and "zoomed midway" is the average *Other optional parameters: **'''{{#if:{{{noprefix|}}}||mapframe-}}frame-width''' or '''{{#if:{{{noprefix|}}}||mapframe-}}width''' – Frame width. ''Default:'' {{{mapframe-frame-width|270}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}frame-height''' or '''{{#if:{{{noprefix|}}}||mapframe-}}height''' – Frame height. ''Default:'' {{{mapframe-frame-height|200}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}shape-fill''' – Color used to fill shape features. ''Default:'' {{{mapframe-shape-fill|#606060}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}shape-fill-opacity''' – Opacity level of shape fill, a number between 0 and 1. ''Default:'' {{{mapframe-shape-fill-opacity|0.1}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}stroke-color''' or '''{{#if:{{{noprefix|}}}||mapframe-}}stroke-colour''' – Color of line features, and outlines of shape features. ''Default:'' {{{mapframe-stroke-color|{{{mapframe-stroke-colour|#ff0000}}}}}} ***'''{{#if:{{{noprefix|}}}||mapframe-}}line-stroke-color''' or '''{{#if:{{{noprefix|}}}||mapframe-}}line-stroke-colour''' – Color of line features. ''Default:'' {{{mapframe-line-stroke-color|{{{mapframe-line-stroke-colour|#ff0000}}}}}} ***'''{{#if:{{{noprefix|}}}||mapframe-}}shape-stroke-color''' or '''{{#if:{{{noprefix|}}}||mapframe-}}shape-stroke-colour''' – Color of outlines of shape features. ''Default:'' {{{mapframe-shape-stroke-color|{{{mapframe-shape-stroke-colour|#ff0000}}}}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}stroke-width''' – Width of line features, and outlines of shape features. ''Default:'' {{{mapframe-stroke-width|2}}} ***'''{{#if:{{{noprefix|}}}||mapframe-}}shape-stroke-width''' – Width of outlines of shape features. ''Default:'' {{{mapframe-shape-stroke-width|2}}} ***'''{{#if:{{{noprefix|}}}||mapframe-}}line-stroke-width''' – Width of line features. ''Default:'' {{{mapframe-line-stroke-width|5}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}marker''' – Marker symbol to use for coordinates; see [[mw:Help:Extension:Kartographer/Icons]] for options. ''Default:'' {{{mapframe-marker|''not specified (i.e. blank)''}}} ***Can also be set to {{code|blank}} to override any default marker symbol **'''{{#if:{{{noprefix|}}}||mapframe-}}marker-color''' or '''{{#if:{{{noprefix|}}}||mapframe-}}marker-colour''' – Background color for the marker. ''Default:'' {{{mapframe-marker-color|{{{mapframe-marker-colour|#5E74F3}}}}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}geomask-stroke-color''' or '''{{#if:{{{noprefix|}}}||mapframe-}}geomask-stroke-colour''' – Color of outline of geomask shape. ''Default:'' {{{mapframe-geomask-stroke-color|{{{mapframe-geomask-stroke-colour|#555555}}}}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}geomask-stroke-width''' – Width of outline of geomask shape. ''Default:'' {{{mapframe-geomask-stroke-width|1}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}geomask-fill''' – Color used to fill outside geomask features. ''Default:'' {{{mapframe-geomask-fill|#606060}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}geomask-fill-opacity''' – Opacity level of fill outside geomask features, a number between 0 and 1. ''Default:'' {{{mapframe-geomask-fill-opacity|0.25}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}zoom''' – Set the zoom level, from "1" (map of earth) to "18" (maximum zoom in), to be used if the zoom level cannot be determined automatically from object length or area. ''Default:'' {{{mapframe-zoom|10}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}length_km {{nobold|or}} {{#if:{{{noprefix|}}}||mapframe-}}length_mi {{nobold|or}} {{#if:{{{noprefix|}}}||mapframe-}}area_km2 {{nobold|or}} {{#if:{{{noprefix|}}}||mapframe-}}area_mi2''' – Determine zoom level by passing in object's length (in kilometres or miles) or area (in square kilometres or square miles). ''Default:'' ''{{{mapframe-length_km|not specified}}} / {{{mapframe-length_mi|not specified}}} / {{{mapframe-area_km2|not specified}}} / {{{mapframe-area_mi2|not specified}}}'' **'''{{#if:{{{noprefix|}}}||mapframe-}}frame-coordinates''' or '''{{#if:{{{noprefix|}}}||mapframe-}}frame-coord''' – Alternate latitude and longitude coordinates for initial placement of map, using {{tl|coord}}. ''Default:'' ''derived from item coordinates'' **'''{{#if:{{{noprefix|}}}||mapframe-}}type''' – Set the type of the object, with the same usage as {{tl|coord}}. ''Default:'' {{{mapframe-type|''not specified''}}} **'''{{#if:{{{noprefix|}}}||mapframe-}}population''' – Set the population, useful with type="city", for {{tl|Infobox dim}}. ''Default:'' {{{mapframe-population|''not specified''}}} {{#if:{{{deprecated|}}}|<nowiki></nowiki> *Deprecated parameters **{{gray|1='''{{#if:{{{noprefix|}}}||mapframe-}}frame-lat''' or '''{{#if:{{{noprefix|}}}||mapframe-}}frame-latitude'''}} – Alternate latitude coordinate for initial placement of map; default is derived from item coordinates **{{gray|1='''{{#if:{{{noprefix|}}}||mapframe-}}frame-long''' or '''{{#if:{{{noprefix|}}}||mapframe-}}frame-longitude'''}} – Alternate longitude coordinate for initial placement of map; default is derived from item coordinates }}<noinclude>{{Documentation}}</noinclude> gmt0a73qep5wnninjoqvxs49de1rd8f Template:Category link without namespace 10 176058 746229 2024-06-02T14:03:48Z en>HouseBlaster 0 HouseBlaster moved page [[Template:C]] to [[Template:Category link without namespace]]: expand template name per [[WP:TPN]] 746229 wikitext text/x-wiki [[:Category:{{PAGENAME:{{{1}}}}}|{{{2|{{PAGENAME:{{{1}}}}}}}}]]<noinclude> {{Documentation}} </noinclude> 5ihlenrrtiyl0onp17hzt1jb0im35x9 746230 746229 2026-06-12T21:52:04Z Robertsky 51025 1 revision imported from [[:en:Template:Category_link_without_namespace]]: for workshop activity 746229 wikitext text/x-wiki [[:Category:{{PAGENAME:{{{1}}}}}|{{{2|{{PAGENAME:{{{1}}}}}}}}]]<noinclude> {{Documentation}} </noinclude> 5ihlenrrtiyl0onp17hzt1jb0im35x9 Module:Infobox dim 828 176059 746241 2025-11-15T18:59:08Z en>Hike395 0 allow zoom computation to accept latitude 746241 Scribunto text/plain require('strict') local getArgs = require('Module:Arguments').getArgs local p = {} local log2 = 0.693147181 local ppm = 1000/0.3 -- pixels per meter, from 0.3 mm / pixel from https://wiki.openstreetmap.org/wiki/Zoom_levels -- To convert to OSM zoom level, we need to know meters per pixel at zoom level 9 -- On the equator, it's 305.748 meters/pixel according to https://wiki.openstreetmap.org/wiki/Zoom_levels -- This quantity depends on the latitude (which we usually don't have easy access to) -- Instead, we'll be correct at 38 degrees N, given en-WP bias towards NA and Europe -- 38N was chosen because: -- * It's the furthest north where scale=100000 maps to zoom=12 -- * One hemisphere (20000km) maps to zoom=1 local mppl9Equator = 305.748 -- Convert from Geohack's scale to OSM style zoom levels as used by <maplink> local function geohackScaleToMapZoom(scale,latitude) scale = tonumber(scale) if not scale or scale <= 0 then return end latitude = latitude or 38 local mppl9 = mppl9Equator*math.cos(math.rad(latitude)) return math.log(mppl9*ppm/scale)/log2 + 9 end -- compute the viewport size (on screen) in meters, assuming ppm pixels per meter on screen local function computeViewport(args) local viewport_cm = tonumber(args.viewport_cm) local viewport_px = tonumber(args.viewport_px) return viewport_cm and viewport_cm / 100 or viewport_px and viewport_px / ppm or tonumber(args.default_viewport) or 0.1 end -- convert from geohack dim (knowing the viewpoint size on screen) to geohack scale local function geohackDimToScale(dim, args) dim = tonumber(dim) args = args or {} if not dim or dim <= 0 then return end local units = args.units if units and string.lower(units) == 'km' then dim = dim*1000 end return dim / computeViewport(args) end -- inverse of above function, returning dim in km local function geohackScaleToDim(scale, args) scale = tonumber(scale) args = args or {} if not scale or scale <= 0 then return end return scale * computeViewport(args) * 1e-3 end local oddShape = 2.09 --- length/sqrt(area) of Boston (to choose an example) -- Convert from Geohack's types to Geohack dim local function geohackTypeToDim(args) local t = args.type if not t then return end local typeDim = mw.loadData('Module:Infobox_dim/data') local dim = typeDim[t] local population = tonumber(args.population) if t == 'city' and population and population > 0 then -- assume city is a circle with density of 1000/square kilometer -- compute diameter, in meters. Then multiply by oddShape to account for weird shapes dim = 35.68e-3*math.sqrt(population)*oddShape -- don't zoom in too far if dim < 5 then dim = 5 end end return dim end -- Convert from dimension of object to Geohack dim local function computeDim(length,width,area) if length and width then return math.max(length,width) end if length then return length end if width then return width end if area then return oddShape*math.sqrt(area) end end -- compute geohack dim from unit arguments (e.g., length_mi) local function convertDim(args) local length = args.length_mi and 1.60934*args.length_mi or args.length_km local width = args.width_mi and 1.60934*args.width_mi or args.width_km local area = args.area_acre and 0.00404686*args.area_acre or args.area_ha and 0.01*args.area_ha or args.area_mi2 and 2.58999*args.area_mi2 or args.area_km2 local dim = computeDim(length, width, area) return dim end local function computeScale(args) if args.scale then return args.scale end local dim, units, scale if args.dim then dim, units = mw.ustring.match(args.dim,"^([-%d%.]+)%s*(%D*)") args.units = units args.default_viewport = 0.1 -- default geohack viewpoirt scale = geohackDimToScale(dim, args) end if not scale then dim = convertDim(args) or geohackTypeToDim(args) args.units = 'km' args.default_viewport = 0.2 --- when object dimensions or type is specified, assume 20cm viewport scale = dim and geohackDimToScale(dim, args) end if not scale then return end scale = math.floor(scale+0.5) -- keep scale within sane bounds (OSM zoom levels 1-17) if scale < 1600 then scale = 1600 end if scale > 200e6 then scale = 200e6 end return scale end -- Argument checking local positiveNumericArgs = {viewport_cm=true,viewport_px=true,length_mi=true,length_km=true, width_mi=true,width_km=true,area_mi2=true,area_km2=true, area_acre=true,area_ha=true,scale=true,population=true} local function cleanArgs(args) local clean = {} if type(args) == 'table' then for k, v in pairs(args) do if positiveNumericArgs[k] then v = v and mw.ustring.gsub(v,",","") -- clean out any commas v = tonumber(v) -- ensure argument is numeric if v and v <= 0 then -- if non-positive, ignore value v = nil end end clean[k] = v end end return clean end -- Module entry points function p._dim(args) args = cleanArgs(args) if args.dim then return args.dim end -- compute scale for geohack local scale = args.scale local dim if not scale then args.default_viewport = 0.2 -- when specifying a object dimension or type, assume output spans 20cm dim = convertDim(args) or geohackTypeToDim(args) args.units = 'km' scale = dim and geohackDimToScale(dim, args) end -- reset back to 10cm viewport for correct geohack dim output args.viewport_cm = 10 dim = scale and geohackScaleToDim(scale, args) return dim and tostring(math.floor(dim+0.5))..'km' end function p._scale(args) args = cleanArgs(args) return computeScale(args) end function p._zoom(args) args = cleanArgs(args) args.viewport_px = args.viewport_px or 200 --- viewport for Kartographer is 200px high local scale = computeScale(args) if scale then local latitude = tonumber(args.latitude) latitude = latitude and (latitude > 70 and 70 or latitude < -70 and -70 or latitude) local zoom = geohackScaleToMapZoom(scale,latitude) return zoom and math.floor(zoom) end end -- Template entry points function p.dim(frame) return p._dim(getArgs(frame)) or '' end function p.scale(frame) return p._scale(getArgs(frame)) or '' end function p.zoom(frame) return p._zoom(getArgs(frame)) or '' end return p jy5fyn8gcmhd8ajqw0ljt5qgmzyo4hz 746242 746241 2026-06-12T21:52:05Z Robertsky 51025 1 revision imported from [[:en:Module:Infobox_dim]]: for workshop activity 746241 Scribunto text/plain require('strict') local getArgs = require('Module:Arguments').getArgs local p = {} local log2 = 0.693147181 local ppm = 1000/0.3 -- pixels per meter, from 0.3 mm / pixel from https://wiki.openstreetmap.org/wiki/Zoom_levels -- To convert to OSM zoom level, we need to know meters per pixel at zoom level 9 -- On the equator, it's 305.748 meters/pixel according to https://wiki.openstreetmap.org/wiki/Zoom_levels -- This quantity depends on the latitude (which we usually don't have easy access to) -- Instead, we'll be correct at 38 degrees N, given en-WP bias towards NA and Europe -- 38N was chosen because: -- * It's the furthest north where scale=100000 maps to zoom=12 -- * One hemisphere (20000km) maps to zoom=1 local mppl9Equator = 305.748 -- Convert from Geohack's scale to OSM style zoom levels as used by <maplink> local function geohackScaleToMapZoom(scale,latitude) scale = tonumber(scale) if not scale or scale <= 0 then return end latitude = latitude or 38 local mppl9 = mppl9Equator*math.cos(math.rad(latitude)) return math.log(mppl9*ppm/scale)/log2 + 9 end -- compute the viewport size (on screen) in meters, assuming ppm pixels per meter on screen local function computeViewport(args) local viewport_cm = tonumber(args.viewport_cm) local viewport_px = tonumber(args.viewport_px) return viewport_cm and viewport_cm / 100 or viewport_px and viewport_px / ppm or tonumber(args.default_viewport) or 0.1 end -- convert from geohack dim (knowing the viewpoint size on screen) to geohack scale local function geohackDimToScale(dim, args) dim = tonumber(dim) args = args or {} if not dim or dim <= 0 then return end local units = args.units if units and string.lower(units) == 'km' then dim = dim*1000 end return dim / computeViewport(args) end -- inverse of above function, returning dim in km local function geohackScaleToDim(scale, args) scale = tonumber(scale) args = args or {} if not scale or scale <= 0 then return end return scale * computeViewport(args) * 1e-3 end local oddShape = 2.09 --- length/sqrt(area) of Boston (to choose an example) -- Convert from Geohack's types to Geohack dim local function geohackTypeToDim(args) local t = args.type if not t then return end local typeDim = mw.loadData('Module:Infobox_dim/data') local dim = typeDim[t] local population = tonumber(args.population) if t == 'city' and population and population > 0 then -- assume city is a circle with density of 1000/square kilometer -- compute diameter, in meters. Then multiply by oddShape to account for weird shapes dim = 35.68e-3*math.sqrt(population)*oddShape -- don't zoom in too far if dim < 5 then dim = 5 end end return dim end -- Convert from dimension of object to Geohack dim local function computeDim(length,width,area) if length and width then return math.max(length,width) end if length then return length end if width then return width end if area then return oddShape*math.sqrt(area) end end -- compute geohack dim from unit arguments (e.g., length_mi) local function convertDim(args) local length = args.length_mi and 1.60934*args.length_mi or args.length_km local width = args.width_mi and 1.60934*args.width_mi or args.width_km local area = args.area_acre and 0.00404686*args.area_acre or args.area_ha and 0.01*args.area_ha or args.area_mi2 and 2.58999*args.area_mi2 or args.area_km2 local dim = computeDim(length, width, area) return dim end local function computeScale(args) if args.scale then return args.scale end local dim, units, scale if args.dim then dim, units = mw.ustring.match(args.dim,"^([-%d%.]+)%s*(%D*)") args.units = units args.default_viewport = 0.1 -- default geohack viewpoirt scale = geohackDimToScale(dim, args) end if not scale then dim = convertDim(args) or geohackTypeToDim(args) args.units = 'km' args.default_viewport = 0.2 --- when object dimensions or type is specified, assume 20cm viewport scale = dim and geohackDimToScale(dim, args) end if not scale then return end scale = math.floor(scale+0.5) -- keep scale within sane bounds (OSM zoom levels 1-17) if scale < 1600 then scale = 1600 end if scale > 200e6 then scale = 200e6 end return scale end -- Argument checking local positiveNumericArgs = {viewport_cm=true,viewport_px=true,length_mi=true,length_km=true, width_mi=true,width_km=true,area_mi2=true,area_km2=true, area_acre=true,area_ha=true,scale=true,population=true} local function cleanArgs(args) local clean = {} if type(args) == 'table' then for k, v in pairs(args) do if positiveNumericArgs[k] then v = v and mw.ustring.gsub(v,",","") -- clean out any commas v = tonumber(v) -- ensure argument is numeric if v and v <= 0 then -- if non-positive, ignore value v = nil end end clean[k] = v end end return clean end -- Module entry points function p._dim(args) args = cleanArgs(args) if args.dim then return args.dim end -- compute scale for geohack local scale = args.scale local dim if not scale then args.default_viewport = 0.2 -- when specifying a object dimension or type, assume output spans 20cm dim = convertDim(args) or geohackTypeToDim(args) args.units = 'km' scale = dim and geohackDimToScale(dim, args) end -- reset back to 10cm viewport for correct geohack dim output args.viewport_cm = 10 dim = scale and geohackScaleToDim(scale, args) return dim and tostring(math.floor(dim+0.5))..'km' end function p._scale(args) args = cleanArgs(args) return computeScale(args) end function p._zoom(args) args = cleanArgs(args) args.viewport_px = args.viewport_px or 200 --- viewport for Kartographer is 200px high local scale = computeScale(args) if scale then local latitude = tonumber(args.latitude) latitude = latitude and (latitude > 70 and 70 or latitude < -70 and -70 or latitude) local zoom = geohackScaleToMapZoom(scale,latitude) return zoom and math.floor(zoom) end end -- Template entry points function p.dim(frame) return p._dim(getArgs(frame)) or '' end function p.scale(frame) return p._scale(getArgs(frame)) or '' end function p.zoom(frame) return p._zoom(getArgs(frame)) or '' end return p jy5fyn8gcmhd8ajqw0ljt5qgmzyo4hz Module:Date time 828 176060 746245 2025-04-10T14:19:53Z en>Gonnym 0 remove categories from /testcases other than in this module 746245 Scribunto text/plain --[[ Module:Date time – Date formatting and validation module. This module provides functions for validating and formatting dates in templates such as {{Start date}}, {{End date}}, {{Start date and age}}, and {{End date and age}}. It handles: - Validation of date components (year, month, day) - Validation of time components (hour, minute, second) - Timezone formatting and validation - Generation of appropriate hCalendar microformat markup - "time-ago" calculations Design notes: - Functions are organized into helper, validation, and formatting sections - Error handling uses a consistent pattern with centralized error messages - Timezone validation supports standard ISO 8601 formats - Leap year calculation is cached for performance ]] require("strict") local p = {} --------------- -- Constants -- --------------- local HTML_SPACE = "&#32;" local HTML_NBSP = "&nbsp;" -- Error message constants local ERROR_MESSAGES = { integers = "All values must be integers", has_leading_zeros = "Values cannot have unnecessary leading zeros", missing_year = "Year value is required", invalid_month = "Value is not a valid month", missing_month = "Month value is required when a day is provided", invalid_day = "Value is not a valid day (Month %d has %d days)", invalid_hour = "Value is not a valid hour", invalid_minute = "Value is not a valid minute", invalid_second = "Value is not a valid second", timezone_incomplete_date = "A timezone cannot be set without a day and hour", invalid_timezone = "Value is not a valid timezone", yes_value_parameter = '%s must be either "yes" or "y"', duplicate_parameters = 'Duplicate parameters used: %s and %s', template = "Template not supported", time_without_hour = "Minutes and seconds require an hour value" } -- Template class mapping -- "itvstart" and "itvend" are unique classes used by the TV infoboxes, -- which only allow the usage of {{Start date}} and {{End date}}. local TEMPLATE_CLASSES = { ["start date"] = "bday dtstart published updated itvstart", ["start date and age"] = "bday dtstart published updated", ["end date"] = "dtend itvend", ["end date and age"] = "dtend" } -- Templates that require "time ago" calculations local TIME_AGO = { ["start date and age"] = true, ["end date and age"] = true } -- English month names local MONTHS = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" } -- Error category local ERROR_CATEGORY = "[[Category:Pages using Module:Date time with invalid values]]" -- Namespaces where error categories should be applied local CATEGORY_NAMESPACES = { [0] = true, -- Article [1] = true, -- Article talk [4] = true, -- Wikipedia [10] = true, -- Template [100] = true, -- Portal [118] = true -- Draft } -- Cached leap year calculations for performance local leap_year_cache = {} -- Local variables for error handling local help_link ---------------------- -- Helper Functions -- ---------------------- --- Pads a number with leading zeros to ensure a minimum of two digits. -- @param value (number|string) The value to pad with leading zeros -- @return string The value padded to at least two digits, or nil if input is nil local function pad_left_zeros(value) if value == nil then return nil end local str = tostring(value) return string.rep("0", math.max(0, 2 - #str)) .. str end --- Replaces [[U+2212]] (Unicode minus) with [[U+002D]] (ASCII hyphen) or vice versa. -- @param value (string) The string value to process -- @param to_unicode (boolean) If true, converts ASCII hyphen to Unicode minus; -- If false, converts Unicode minus to ASCII hyphen -- @return string The processed string with appropriate minus characters, or nil if input is nil local function replace_minus_character(value, to_unicode) if not value then return nil end if to_unicode then return value:gsub("-", "−") end return value:gsub("−", "-") end --- Normalizes timezone format by ensuring proper padding of hours. -- @param timezone (string) The timezone string to normalize -- @return string The normalized timezone string with properly padded hours, or nil if input is nil local function fix_timezone(timezone) if not timezone then return nil end -- Replace U+2212 (Unicode minus) with U+002D (ASCII hyphen) timezone = replace_minus_character(timezone, false) -- Match the timezone pattern for ±H:MM format local sign, hour, minutes = timezone:match("^([+-])(%d+):(%d+)$") if sign and hour and minutes then -- Pad the hour with a leading zero if necessary hour = pad_left_zeros(hour) return sign .. hour .. ":" .. minutes end -- If no match, return the original timezone (this handles invalid or already padded timezones) return timezone end --- Checks if a timezone string is valid according to standard timezone formats. -- Valid timezones range from UTC-12:00 to UTC+14:00. -- @param timezone (string) The timezone string to validate -- @return boolean true if the timezone is valid, false otherwise local function is_timezone_valid(timezone) -- Consolidated timezone pattern for better performance local valid_patterns = { -- Z (UTC) "^Z$", -- Full timezone with minutes ±HH:MM "^[+]0[1-9]:[0-5][0-9]$", "^[+-]0[1-9]:[0-5][0-9]$", "^[+-]1[0-2]:[0-5][0-9]$", "^[+]1[34]:[0-5][0-9]$", -- Whole hour timezones ±HH "^[+-]0[1-9]$", "^[+-]1[0-2]$", "^[+]1[34]$", -- Special cases "^[+]00:00$", "^[+]00$" } -- Additional checks for invalid -00 and -00:00 cases if timezone == "-00" or timezone == "-00:00" then return false end for _, pattern in ipairs(valid_patterns) do if string.match(timezone, pattern) then return true end end return false end --- Checks if a given year is a leap year. -- Uses a cache for better performance. -- @param year (number) The year to check for leap year status -- @return boolean true if the year is a leap year, false otherwise local function is_leap_year(year) if leap_year_cache[year] == nil then leap_year_cache[year] = (year % 4 == 0 and year % 100 ~= 0) or (year % 400 == 0) end return leap_year_cache[year] end --- Returns the number of days in a given month of a specified year. -- Handles leap years for February. -- @param year (number) The year to check for leap year conditions -- @param month (number) The month (1-12) for which to return the number of days -- @return number The number of days in the specified month, accounting for leap years local function get_days_in_month(year, month) local days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } if month == 2 and is_leap_year(year) then return 29 end return days_in_month[month] or 0 end --- Checks if a given value has invalid leading zeros. -- @param value (string) The value to check for leading zeros -- @param field_type (string) Field type ("day", "month", "hour", "minute", "second") -- @return boolean true if the value has invalid leading zeros, false otherwise local function has_leading_zeros(value, field_type) value = tostring(value) -- Common checks for day and month if field_type == "day" or field_type == "month" then -- Reject "00" and values with leading zero followed by more than one digit return value == "00" or string.match(value, "^0[0-9][0-9]$") ~= nil or string.match(value, "^0[1-9][0-9]") ~= nil end -- Checks for hour, minute, second if field_type == "hour" or field_type == "minute" or field_type == "second" then -- Allow "00" and "01" to "09" if value == "00" or string.match(value, "^0[1-9]$") then return false end -- Reject values starting with "0" followed by more than one digit return string.match(value, "^0[0-9][0-9]+$") ~= nil end return false end --- Checks if a given value is an integer. -- @param value (string|number) The value to check -- @return boolean true if the value is a valid integer, false otherwise local function is_integer(value) if not value then return false end -- Check if the value is a number first local num_value = tonumber(value) if not num_value then return false end -- Check if it's an integer by comparing floor with the original if math.floor(num_value) ~= num_value then return false end -- For string inputs, check for decimal point to reject values like "7." if type(value) == "string" then -- If the string contains a decimal point, it's not an integer if string.find(value, "%.") then return false end end return true end --- Returns the name of a month based on its numerical representation. -- @param month_number (number) The month number (1-12) -- @return string|nil The name of the month, or nil if invalid local function get_month_name(month_number) month_number = tonumber(month_number) return MONTHS[month_number] end --- Generates an error message wrapped in HTML. -- @param message (string) The error message to format -- @param add_tracking_category (boolean, optional) If false, omits the tracking category -- @return string An HTML-formatted error message with help link and error category local function generate_error(message, add_tracking_category) local category = ERROR_CATEGORY if add_tracking_category == false then category = "" end -- Get current page title object local article_title = mw.title.getCurrentTitle() -- Special case for testcases pages local is_test_page = article_title.subpageText == "testcases" local allow_this_test_page = article_title.fullText == "Module talk:Date time/testcases" -- Remove category if the page is not in a tracked namespace or is any other testcases other than this module if (not CATEGORY_NAMESPACES[article_title.namespace] and not allow_this_test_page) or (is_test_page and not allow_this_test_page) then category = "" end return '<strong class="error">Error: ' .. message .. '</strong> ' .. help_link .. category end -------------------------- -- Formatting Functions -- -------------------------- --- Formats the time portion of a datetime string. -- @param hour (string) The hour component -- @param minute (string) The minute component -- @param second (string) The second component -- @return string The formatted time string, or empty string if hour is nil local function format_time_string(hour, minute, second) if not hour then return "" end local time_string = string.format("%s:%s", hour, minute) if second and second ~= "00" and minute ~= "00" then time_string = string.format("%s:%s", time_string, second) end return time_string .. "," .. HTML_SPACE end --- Formats the date portion of a datetime string based on the specified format. -- @param year (string) The year component -- @param month (string) The month component -- @param day (string) The day component -- @param date_format_dmy (string) The date format ("yes" or "y" for day-month-year, otherwise month-day-year) -- @return string The formatted date string, or empty string if year is nil local function format_date_string(year, month, day, date_format_dmy) if not year then return "" end local date_string if month then local month_name = get_month_name(month) if day then day = tonumber(day) if date_format_dmy then date_string = day .. HTML_NBSP .. month_name else date_string = month_name .. HTML_NBSP .. day .. "," end date_string = date_string .. HTML_NBSP .. year else date_string = month_name .. HTML_NBSP .. year end else date_string = year end return date_string end --- Formats the timezone portion of a datetime string. -- @param timezone (string) The timezone component -- @return string The formatted timezone string, or empty string if timezone is nil local function format_timezone(timezone) if not timezone then return "" end return HTML_SPACE .. (timezone == "Z" and "(UTC)" or "(" .. timezone .. ")") end --- Generates an hCalendar microformat string for the given date-time values. -- @param date_time_values (table) A table containing date and time components -- @param classes (string) The CSS classes to apply to the microformat span -- @return string The HTML for the hCalendar microformat local function generate_h_calendar(date_time_values, classes) local parts = {} if date_time_values.year then table.insert(parts, date_time_values.year) if date_time_values.month then table.insert(parts, "-" .. date_time_values.month) if date_time_values.day then table.insert(parts, "-" .. date_time_values.day) end end if date_time_values.hour then table.insert(parts, "T" .. date_time_values.hour) if date_time_values.minute then table.insert(parts, ":" .. date_time_values.minute) if date_time_values.second then table.insert(parts, ":" .. date_time_values.second) end end end end local h_calendar_content = table.concat(parts) .. (date_time_values.timezone or "") local class_span = string.format('<span class="%s">', classes) return string.format( '<span style="display: none;">%s(%s)</span>', HTML_NBSP, class_span .. h_calendar_content .. '</span>' ) end --- Generates a "time ago" string for age calculation templates. -- @param date_time_values (table) Table containing date components (year, month, day) -- @param br (boolean) Whether to include a line break before the time ago text -- @param p (boolean) Whether to format with parentheses around the time ago text -- @return string Formatted "time ago" text wrapped in a noprint span local function get_time_ago(date_time_values, br, p) -- Build timestamp based on available date components local timestamp local min_magnitude if date_time_values.day then -- Format with padding for month and day if needed timestamp = string.format("%d-%02d-%02d", date_time_values.year, date_time_values.month, date_time_values.day) min_magnitude = "days" elseif date_time_values.month then -- Format with padding for month if needed timestamp = string.format("%d-%02d", date_time_values.year, date_time_values.month) -- Get the current date local current_date = os.date("*t") -- Compute the difference in months local year_diff = current_date.year - date_time_values.year local month_diff = (year_diff * 12) + (current_date.month - date_time_values.month) -- If the difference is less than 12 months, use "months", otherwise "years" if month_diff < 12 then min_magnitude = "months" else min_magnitude = "years" end else timestamp = tostring(date_time_values.year) min_magnitude = "years" end -- Calculate time ago using [[Module:Time]] ago local m_time_ago = require("Module:Time ago")._main local time_ago = m_time_ago({timestamp, ["min_magnitude"] = min_magnitude}) -- Format the result based on br and p parameters if br then time_ago = p and ("<br/>(" .. time_ago .. ")") or (";<br/>" .. time_ago) else time_ago = p and (HTML_SPACE .. "(" .. time_ago .. ")") or (";" .. HTML_SPACE .. time_ago) end -- Wrap in noprint span return "<span class=\"noprint\">" .. time_ago .. "</span>" end -------------------------- -- Validation Functions -- -------------------------- --- Validates the date and time values provided. -- @param args (table) Table containing date and time values and optional parameters -- @return nil|string Nil if validation passes, or an error message if validation fails local function _validate_date_time(args) local template_name = args.template or "start date" help_link = string.format("<small>[[:Template:%s|(help)]]</small>", template_name) -- Store and validate date-time values local date_time_values = { year = args[1], month = args[2], day = args[3], hour = args[4], minute = args[5], second = args[6] } -- Validate each value for key, value in pairs(date_time_values) do if value then -- Check for integer and leading zeros if not is_integer(value) then return generate_error(ERROR_MESSAGES.integers) end if has_leading_zeros(tostring(value), key) then return generate_error(ERROR_MESSAGES.has_leading_zeros) end -- Convert to number date_time_values[key] = tonumber(value) end end -- Validate date components if not date_time_values.year then return generate_error(ERROR_MESSAGES.missing_year) end if date_time_values.month and (date_time_values.month < 1 or date_time_values.month > 12) then return generate_error(ERROR_MESSAGES.invalid_month) end if date_time_values.day then if not date_time_values.month then return generate_error(ERROR_MESSAGES.missing_month) end local max_day = get_days_in_month(date_time_values.year, date_time_values.month) if date_time_values.day < 1 or date_time_values.day > max_day then return generate_error(string.format(ERROR_MESSAGES.invalid_day, date_time_values.month, max_day)) end end -- Validate time components if (date_time_values.minute or date_time_values.second) and not date_time_values.hour then return generate_error(ERROR_MESSAGES.time_without_hour) end if date_time_values.hour and (date_time_values.hour < 0 or date_time_values.hour > 23) then return generate_error(ERROR_MESSAGES.invalid_hour) end if date_time_values.minute and (date_time_values.minute < 0 or date_time_values.minute > 59) then return generate_error(ERROR_MESSAGES.invalid_minute) end if date_time_values.second and (date_time_values.second < 0 or date_time_values.second > 59) then return generate_error(ERROR_MESSAGES.invalid_second) end -- Timezone cannot be set without a specific date and hour if args[7] and not (date_time_values.day and date_time_values.hour) then return generate_error(ERROR_MESSAGES.timezone_incomplete_date) elseif args[7] and not is_timezone_valid(args[7]) then return generate_error(ERROR_MESSAGES.invalid_timezone) end -- Validate that there aren't any duplicate parameters if args.p and args.paren then return generate_error(string.format(ERROR_MESSAGES.duplicate_parameters, "p", "paren")) end -- Validate parameters that use "y" or "yes" for values local boolean_params = {'df', 'p', 'paren', 'br'} for _, param_name in ipairs(boolean_params) do if args[param_name] and not (args[param_name] == "yes" or args[param_name] == "y") then return generate_error(string.format(ERROR_MESSAGES.yes_value_parameter, param_name)) end end return nil end ---------------------- -- Public Functions -- ---------------------- --- Validates date-time values from template arguments. -- @param frame (table) The MediaWiki frame containing template arguments -- @return nil|string Result of date-time validation function p.validate_date_time(frame) local get_args = require("Module:Arguments").getArgs local args = get_args(frame) -- Sanitize inputs args[7] = fix_timezone(args[7]) return _validate_date_time(args) end --- Generates a formatted date string with microformat markup. -- @param frame (table) The MediaWiki frame containing template arguments -- @return string A formatted date string, or an error message if validation fails function p.generate_date(frame) local get_args = require("Module:Arguments").getArgs local args = get_args(frame) -- Sanitize inputs args[7] = fix_timezone(args[7]) local validation_error = _validate_date_time(args) if validation_error then return validation_error end local classes = TEMPLATE_CLASSES[args.template or "start date"] if not classes then return generate_error(ERROR_MESSAGES.template, false) end -- Process date-time values local date_time_values = { year = args[1], month = pad_left_zeros(args[2]), day = pad_left_zeros(args[3]), hour = pad_left_zeros(args[4]), minute = args[5] and pad_left_zeros(args[5]) or "00", second = args[6] and pad_left_zeros(args[6]) or "00", timezone = replace_minus_character(args[7], true) -- Restore U+2212 (Unicode minus) } -- Generate individual components local time_string = format_time_string( date_time_values.hour, date_time_values.minute, date_time_values.second ) local date_string = format_date_string( date_time_values.year, date_time_values.month, date_time_values.day, args.df ) local timezone_string = format_timezone(date_time_values.timezone) local time_ago = "" if TIME_AGO[args.template] then time_ago = get_time_ago( date_time_values, args.br, args.p or args.paren ) end local h_calendar = generate_h_calendar(date_time_values, classes) -- Combine components return time_string .. date_string .. timezone_string .. time_ago .. h_calendar end return p m1n2ubn29iw0dq7s8rz8ddwljxm563c 746246 746245 2026-06-12T21:52:06Z Robertsky 51025 1 revision imported from [[:en:Module:Date_time]]: for workshop activity 746245 Scribunto text/plain --[[ Module:Date time – Date formatting and validation module. This module provides functions for validating and formatting dates in templates such as {{Start date}}, {{End date}}, {{Start date and age}}, and {{End date and age}}. It handles: - Validation of date components (year, month, day) - Validation of time components (hour, minute, second) - Timezone formatting and validation - Generation of appropriate hCalendar microformat markup - "time-ago" calculations Design notes: - Functions are organized into helper, validation, and formatting sections - Error handling uses a consistent pattern with centralized error messages - Timezone validation supports standard ISO 8601 formats - Leap year calculation is cached for performance ]] require("strict") local p = {} --------------- -- Constants -- --------------- local HTML_SPACE = "&#32;" local HTML_NBSP = "&nbsp;" -- Error message constants local ERROR_MESSAGES = { integers = "All values must be integers", has_leading_zeros = "Values cannot have unnecessary leading zeros", missing_year = "Year value is required", invalid_month = "Value is not a valid month", missing_month = "Month value is required when a day is provided", invalid_day = "Value is not a valid day (Month %d has %d days)", invalid_hour = "Value is not a valid hour", invalid_minute = "Value is not a valid minute", invalid_second = "Value is not a valid second", timezone_incomplete_date = "A timezone cannot be set without a day and hour", invalid_timezone = "Value is not a valid timezone", yes_value_parameter = '%s must be either "yes" or "y"', duplicate_parameters = 'Duplicate parameters used: %s and %s', template = "Template not supported", time_without_hour = "Minutes and seconds require an hour value" } -- Template class mapping -- "itvstart" and "itvend" are unique classes used by the TV infoboxes, -- which only allow the usage of {{Start date}} and {{End date}}. local TEMPLATE_CLASSES = { ["start date"] = "bday dtstart published updated itvstart", ["start date and age"] = "bday dtstart published updated", ["end date"] = "dtend itvend", ["end date and age"] = "dtend" } -- Templates that require "time ago" calculations local TIME_AGO = { ["start date and age"] = true, ["end date and age"] = true } -- English month names local MONTHS = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" } -- Error category local ERROR_CATEGORY = "[[Category:Pages using Module:Date time with invalid values]]" -- Namespaces where error categories should be applied local CATEGORY_NAMESPACES = { [0] = true, -- Article [1] = true, -- Article talk [4] = true, -- Wikipedia [10] = true, -- Template [100] = true, -- Portal [118] = true -- Draft } -- Cached leap year calculations for performance local leap_year_cache = {} -- Local variables for error handling local help_link ---------------------- -- Helper Functions -- ---------------------- --- Pads a number with leading zeros to ensure a minimum of two digits. -- @param value (number|string) The value to pad with leading zeros -- @return string The value padded to at least two digits, or nil if input is nil local function pad_left_zeros(value) if value == nil then return nil end local str = tostring(value) return string.rep("0", math.max(0, 2 - #str)) .. str end --- Replaces [[U+2212]] (Unicode minus) with [[U+002D]] (ASCII hyphen) or vice versa. -- @param value (string) The string value to process -- @param to_unicode (boolean) If true, converts ASCII hyphen to Unicode minus; -- If false, converts Unicode minus to ASCII hyphen -- @return string The processed string with appropriate minus characters, or nil if input is nil local function replace_minus_character(value, to_unicode) if not value then return nil end if to_unicode then return value:gsub("-", "−") end return value:gsub("−", "-") end --- Normalizes timezone format by ensuring proper padding of hours. -- @param timezone (string) The timezone string to normalize -- @return string The normalized timezone string with properly padded hours, or nil if input is nil local function fix_timezone(timezone) if not timezone then return nil end -- Replace U+2212 (Unicode minus) with U+002D (ASCII hyphen) timezone = replace_minus_character(timezone, false) -- Match the timezone pattern for ±H:MM format local sign, hour, minutes = timezone:match("^([+-])(%d+):(%d+)$") if sign and hour and minutes then -- Pad the hour with a leading zero if necessary hour = pad_left_zeros(hour) return sign .. hour .. ":" .. minutes end -- If no match, return the original timezone (this handles invalid or already padded timezones) return timezone end --- Checks if a timezone string is valid according to standard timezone formats. -- Valid timezones range from UTC-12:00 to UTC+14:00. -- @param timezone (string) The timezone string to validate -- @return boolean true if the timezone is valid, false otherwise local function is_timezone_valid(timezone) -- Consolidated timezone pattern for better performance local valid_patterns = { -- Z (UTC) "^Z$", -- Full timezone with minutes ±HH:MM "^[+]0[1-9]:[0-5][0-9]$", "^[+-]0[1-9]:[0-5][0-9]$", "^[+-]1[0-2]:[0-5][0-9]$", "^[+]1[34]:[0-5][0-9]$", -- Whole hour timezones ±HH "^[+-]0[1-9]$", "^[+-]1[0-2]$", "^[+]1[34]$", -- Special cases "^[+]00:00$", "^[+]00$" } -- Additional checks for invalid -00 and -00:00 cases if timezone == "-00" or timezone == "-00:00" then return false end for _, pattern in ipairs(valid_patterns) do if string.match(timezone, pattern) then return true end end return false end --- Checks if a given year is a leap year. -- Uses a cache for better performance. -- @param year (number) The year to check for leap year status -- @return boolean true if the year is a leap year, false otherwise local function is_leap_year(year) if leap_year_cache[year] == nil then leap_year_cache[year] = (year % 4 == 0 and year % 100 ~= 0) or (year % 400 == 0) end return leap_year_cache[year] end --- Returns the number of days in a given month of a specified year. -- Handles leap years for February. -- @param year (number) The year to check for leap year conditions -- @param month (number) The month (1-12) for which to return the number of days -- @return number The number of days in the specified month, accounting for leap years local function get_days_in_month(year, month) local days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } if month == 2 and is_leap_year(year) then return 29 end return days_in_month[month] or 0 end --- Checks if a given value has invalid leading zeros. -- @param value (string) The value to check for leading zeros -- @param field_type (string) Field type ("day", "month", "hour", "minute", "second") -- @return boolean true if the value has invalid leading zeros, false otherwise local function has_leading_zeros(value, field_type) value = tostring(value) -- Common checks for day and month if field_type == "day" or field_type == "month" then -- Reject "00" and values with leading zero followed by more than one digit return value == "00" or string.match(value, "^0[0-9][0-9]$") ~= nil or string.match(value, "^0[1-9][0-9]") ~= nil end -- Checks for hour, minute, second if field_type == "hour" or field_type == "minute" or field_type == "second" then -- Allow "00" and "01" to "09" if value == "00" or string.match(value, "^0[1-9]$") then return false end -- Reject values starting with "0" followed by more than one digit return string.match(value, "^0[0-9][0-9]+$") ~= nil end return false end --- Checks if a given value is an integer. -- @param value (string|number) The value to check -- @return boolean true if the value is a valid integer, false otherwise local function is_integer(value) if not value then return false end -- Check if the value is a number first local num_value = tonumber(value) if not num_value then return false end -- Check if it's an integer by comparing floor with the original if math.floor(num_value) ~= num_value then return false end -- For string inputs, check for decimal point to reject values like "7." if type(value) == "string" then -- If the string contains a decimal point, it's not an integer if string.find(value, "%.") then return false end end return true end --- Returns the name of a month based on its numerical representation. -- @param month_number (number) The month number (1-12) -- @return string|nil The name of the month, or nil if invalid local function get_month_name(month_number) month_number = tonumber(month_number) return MONTHS[month_number] end --- Generates an error message wrapped in HTML. -- @param message (string) The error message to format -- @param add_tracking_category (boolean, optional) If false, omits the tracking category -- @return string An HTML-formatted error message with help link and error category local function generate_error(message, add_tracking_category) local category = ERROR_CATEGORY if add_tracking_category == false then category = "" end -- Get current page title object local article_title = mw.title.getCurrentTitle() -- Special case for testcases pages local is_test_page = article_title.subpageText == "testcases" local allow_this_test_page = article_title.fullText == "Module talk:Date time/testcases" -- Remove category if the page is not in a tracked namespace or is any other testcases other than this module if (not CATEGORY_NAMESPACES[article_title.namespace] and not allow_this_test_page) or (is_test_page and not allow_this_test_page) then category = "" end return '<strong class="error">Error: ' .. message .. '</strong> ' .. help_link .. category end -------------------------- -- Formatting Functions -- -------------------------- --- Formats the time portion of a datetime string. -- @param hour (string) The hour component -- @param minute (string) The minute component -- @param second (string) The second component -- @return string The formatted time string, or empty string if hour is nil local function format_time_string(hour, minute, second) if not hour then return "" end local time_string = string.format("%s:%s", hour, minute) if second and second ~= "00" and minute ~= "00" then time_string = string.format("%s:%s", time_string, second) end return time_string .. "," .. HTML_SPACE end --- Formats the date portion of a datetime string based on the specified format. -- @param year (string) The year component -- @param month (string) The month component -- @param day (string) The day component -- @param date_format_dmy (string) The date format ("yes" or "y" for day-month-year, otherwise month-day-year) -- @return string The formatted date string, or empty string if year is nil local function format_date_string(year, month, day, date_format_dmy) if not year then return "" end local date_string if month then local month_name = get_month_name(month) if day then day = tonumber(day) if date_format_dmy then date_string = day .. HTML_NBSP .. month_name else date_string = month_name .. HTML_NBSP .. day .. "," end date_string = date_string .. HTML_NBSP .. year else date_string = month_name .. HTML_NBSP .. year end else date_string = year end return date_string end --- Formats the timezone portion of a datetime string. -- @param timezone (string) The timezone component -- @return string The formatted timezone string, or empty string if timezone is nil local function format_timezone(timezone) if not timezone then return "" end return HTML_SPACE .. (timezone == "Z" and "(UTC)" or "(" .. timezone .. ")") end --- Generates an hCalendar microformat string for the given date-time values. -- @param date_time_values (table) A table containing date and time components -- @param classes (string) The CSS classes to apply to the microformat span -- @return string The HTML for the hCalendar microformat local function generate_h_calendar(date_time_values, classes) local parts = {} if date_time_values.year then table.insert(parts, date_time_values.year) if date_time_values.month then table.insert(parts, "-" .. date_time_values.month) if date_time_values.day then table.insert(parts, "-" .. date_time_values.day) end end if date_time_values.hour then table.insert(parts, "T" .. date_time_values.hour) if date_time_values.minute then table.insert(parts, ":" .. date_time_values.minute) if date_time_values.second then table.insert(parts, ":" .. date_time_values.second) end end end end local h_calendar_content = table.concat(parts) .. (date_time_values.timezone or "") local class_span = string.format('<span class="%s">', classes) return string.format( '<span style="display: none;">%s(%s)</span>', HTML_NBSP, class_span .. h_calendar_content .. '</span>' ) end --- Generates a "time ago" string for age calculation templates. -- @param date_time_values (table) Table containing date components (year, month, day) -- @param br (boolean) Whether to include a line break before the time ago text -- @param p (boolean) Whether to format with parentheses around the time ago text -- @return string Formatted "time ago" text wrapped in a noprint span local function get_time_ago(date_time_values, br, p) -- Build timestamp based on available date components local timestamp local min_magnitude if date_time_values.day then -- Format with padding for month and day if needed timestamp = string.format("%d-%02d-%02d", date_time_values.year, date_time_values.month, date_time_values.day) min_magnitude = "days" elseif date_time_values.month then -- Format with padding for month if needed timestamp = string.format("%d-%02d", date_time_values.year, date_time_values.month) -- Get the current date local current_date = os.date("*t") -- Compute the difference in months local year_diff = current_date.year - date_time_values.year local month_diff = (year_diff * 12) + (current_date.month - date_time_values.month) -- If the difference is less than 12 months, use "months", otherwise "years" if month_diff < 12 then min_magnitude = "months" else min_magnitude = "years" end else timestamp = tostring(date_time_values.year) min_magnitude = "years" end -- Calculate time ago using [[Module:Time]] ago local m_time_ago = require("Module:Time ago")._main local time_ago = m_time_ago({timestamp, ["min_magnitude"] = min_magnitude}) -- Format the result based on br and p parameters if br then time_ago = p and ("<br/>(" .. time_ago .. ")") or (";<br/>" .. time_ago) else time_ago = p and (HTML_SPACE .. "(" .. time_ago .. ")") or (";" .. HTML_SPACE .. time_ago) end -- Wrap in noprint span return "<span class=\"noprint\">" .. time_ago .. "</span>" end -------------------------- -- Validation Functions -- -------------------------- --- Validates the date and time values provided. -- @param args (table) Table containing date and time values and optional parameters -- @return nil|string Nil if validation passes, or an error message if validation fails local function _validate_date_time(args) local template_name = args.template or "start date" help_link = string.format("<small>[[:Template:%s|(help)]]</small>", template_name) -- Store and validate date-time values local date_time_values = { year = args[1], month = args[2], day = args[3], hour = args[4], minute = args[5], second = args[6] } -- Validate each value for key, value in pairs(date_time_values) do if value then -- Check for integer and leading zeros if not is_integer(value) then return generate_error(ERROR_MESSAGES.integers) end if has_leading_zeros(tostring(value), key) then return generate_error(ERROR_MESSAGES.has_leading_zeros) end -- Convert to number date_time_values[key] = tonumber(value) end end -- Validate date components if not date_time_values.year then return generate_error(ERROR_MESSAGES.missing_year) end if date_time_values.month and (date_time_values.month < 1 or date_time_values.month > 12) then return generate_error(ERROR_MESSAGES.invalid_month) end if date_time_values.day then if not date_time_values.month then return generate_error(ERROR_MESSAGES.missing_month) end local max_day = get_days_in_month(date_time_values.year, date_time_values.month) if date_time_values.day < 1 or date_time_values.day > max_day then return generate_error(string.format(ERROR_MESSAGES.invalid_day, date_time_values.month, max_day)) end end -- Validate time components if (date_time_values.minute or date_time_values.second) and not date_time_values.hour then return generate_error(ERROR_MESSAGES.time_without_hour) end if date_time_values.hour and (date_time_values.hour < 0 or date_time_values.hour > 23) then return generate_error(ERROR_MESSAGES.invalid_hour) end if date_time_values.minute and (date_time_values.minute < 0 or date_time_values.minute > 59) then return generate_error(ERROR_MESSAGES.invalid_minute) end if date_time_values.second and (date_time_values.second < 0 or date_time_values.second > 59) then return generate_error(ERROR_MESSAGES.invalid_second) end -- Timezone cannot be set without a specific date and hour if args[7] and not (date_time_values.day and date_time_values.hour) then return generate_error(ERROR_MESSAGES.timezone_incomplete_date) elseif args[7] and not is_timezone_valid(args[7]) then return generate_error(ERROR_MESSAGES.invalid_timezone) end -- Validate that there aren't any duplicate parameters if args.p and args.paren then return generate_error(string.format(ERROR_MESSAGES.duplicate_parameters, "p", "paren")) end -- Validate parameters that use "y" or "yes" for values local boolean_params = {'df', 'p', 'paren', 'br'} for _, param_name in ipairs(boolean_params) do if args[param_name] and not (args[param_name] == "yes" or args[param_name] == "y") then return generate_error(string.format(ERROR_MESSAGES.yes_value_parameter, param_name)) end end return nil end ---------------------- -- Public Functions -- ---------------------- --- Validates date-time values from template arguments. -- @param frame (table) The MediaWiki frame containing template arguments -- @return nil|string Result of date-time validation function p.validate_date_time(frame) local get_args = require("Module:Arguments").getArgs local args = get_args(frame) -- Sanitize inputs args[7] = fix_timezone(args[7]) return _validate_date_time(args) end --- Generates a formatted date string with microformat markup. -- @param frame (table) The MediaWiki frame containing template arguments -- @return string A formatted date string, or an error message if validation fails function p.generate_date(frame) local get_args = require("Module:Arguments").getArgs local args = get_args(frame) -- Sanitize inputs args[7] = fix_timezone(args[7]) local validation_error = _validate_date_time(args) if validation_error then return validation_error end local classes = TEMPLATE_CLASSES[args.template or "start date"] if not classes then return generate_error(ERROR_MESSAGES.template, false) end -- Process date-time values local date_time_values = { year = args[1], month = pad_left_zeros(args[2]), day = pad_left_zeros(args[3]), hour = pad_left_zeros(args[4]), minute = args[5] and pad_left_zeros(args[5]) or "00", second = args[6] and pad_left_zeros(args[6]) or "00", timezone = replace_minus_character(args[7], true) -- Restore U+2212 (Unicode minus) } -- Generate individual components local time_string = format_time_string( date_time_values.hour, date_time_values.minute, date_time_values.second ) local date_string = format_date_string( date_time_values.year, date_time_values.month, date_time_values.day, args.df ) local timezone_string = format_timezone(date_time_values.timezone) local time_ago = "" if TIME_AGO[args.template] then time_ago = get_time_ago( date_time_values, args.br, args.p or args.paren ) end local h_calendar = generate_h_calendar(date_time_values, classes) -- Combine components return time_string .. date_string .. timezone_string .. time_ago .. h_calendar end return p m1n2ubn29iw0dq7s8rz8ddwljxm563c Template:Infobox airport/styles.css 10 176061 746247 2025-09-27T02:16:24Z en>Izno 0 color: black 746247 sanitized-css text/css /* {{pp-template|small=yes}} */ .ib-airport .infobox-above, .ib-airport .infobox-header { background-color: #DDDDFF; color: black; } .ib-airport .infobox-header a { color: black; } .ib-airport-footnotes { background-color: #eee; color: black; } .ib-airport-footnotes .infobox-full-data { text-align: left; } .ib-airport-codes { font-weight: bold; } .ib-airport-datatable { width: 100%; margin: -2px -1px -1px -1px; border-spacing: 0; } .ib-airport-datatable th { background-color: #e6e6ff; color: black; border: solid 1px #fafafa; text-align: center; /* TODO-LATER gotta override 'core' with its 2 class specificity */ } .ib-airport-datatable td { text-align: center; /* TODO-LATER gotta override 'core' with its 2 class specificity */ } .ib-airport .ib-airport-datatable-number { text-align: left; /* TODO-LATER gotta override 'core' with its 2 class specificity */ } @media (min-width: 640px) { .ib-airport-datatable-w15 { width: 15%; } .ib-airport-datatable-w20 { width: 20%; } .ib-airport-datatable-w35 { width: 35%; } .ib-airport-datatable-w50 { width: 50%; } } 29ok8hlv36on8n5cbz38suozj43cd2y 746248 746247 2026-06-12T21:52:06Z Robertsky 51025 1 revision imported from [[:en:Template:Infobox_airport/styles.css]]: for workshop activity 746247 sanitized-css text/css /* {{pp-template|small=yes}} */ .ib-airport .infobox-above, .ib-airport .infobox-header { background-color: #DDDDFF; color: black; } .ib-airport .infobox-header a { color: black; } .ib-airport-footnotes { background-color: #eee; color: black; } .ib-airport-footnotes .infobox-full-data { text-align: left; } .ib-airport-codes { font-weight: bold; } .ib-airport-datatable { width: 100%; margin: -2px -1px -1px -1px; border-spacing: 0; } .ib-airport-datatable th { background-color: #e6e6ff; color: black; border: solid 1px #fafafa; text-align: center; /* TODO-LATER gotta override 'core' with its 2 class specificity */ } .ib-airport-datatable td { text-align: center; /* TODO-LATER gotta override 'core' with its 2 class specificity */ } .ib-airport .ib-airport-datatable-number { text-align: left; /* TODO-LATER gotta override 'core' with its 2 class specificity */ } @media (min-width: 640px) { .ib-airport-datatable-w15 { width: 15%; } .ib-airport-datatable-w20 { width: 20%; } .ib-airport-datatable-w35 { width: 35%; } .ib-airport-datatable-w50 { width: 50%; } } 29ok8hlv36on8n5cbz38suozj43cd2y Template:Infobox tracking categories 10 176062 746249 2026-01-17T18:00:33Z en>MusikBot II 0 Protected "[[Template:Infobox tracking categories]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 265 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require autoconfirmed or confirmed access] (indefinite)) 746249 wikitext text/x-wiki <includeonly>{{#ifexist: Category:Pages using {{lcfirst:{{if empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with unknown parameters| * {{clc|Category:Pages using {{lcfirst:{{if empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with unknown parameters}}}}{{#ifexist: Category:Pages using {{lcfirst:{{if empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with deprecated parameters| * {{clc|Category:Pages using {{lcfirst:{{if empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with deprecated parameters}}}}{{#ifexist: Category:Pages using {{lcfirst:{{if empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with conflicting parameters| * {{clc|Category:Pages using {{lcfirst:{{if empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with conflicting parameters}}}}</includeonly><noinclude> {{doc}} </noinclude> 0f7uown7qksysaj592dyoo5tk68887b 746250 746249 2026-06-12T21:52:06Z Robertsky 51025 1 revision imported from [[:en:Template:Infobox_tracking_categories]]: for workshop activity 746249 wikitext text/x-wiki <includeonly>{{#ifexist: Category:Pages using {{lcfirst:{{if empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with unknown parameters| * {{clc|Category:Pages using {{lcfirst:{{if empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with unknown parameters}}}}{{#ifexist: Category:Pages using {{lcfirst:{{if empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with deprecated parameters| * {{clc|Category:Pages using {{lcfirst:{{if empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with deprecated parameters}}}}{{#ifexist: Category:Pages using {{lcfirst:{{if empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with conflicting parameters| * {{clc|Category:Pages using {{lcfirst:{{if empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with conflicting parameters}}}}</includeonly><noinclude> {{doc}} </noinclude> 0f7uown7qksysaj592dyoo5tk68887b Jewel Changi Airport 0 176063 746255 2026-05-01T20:07:10Z en>Sheila1988 0 z 746255 wikitext text/x-wiki {{short description|Entertainment and retail complex in Singapore}} {{Use dmy dates|date=March 2026}} {{Use British English|date=September 2019}} {{Infobox building | name = Jewel Changi Airport | logo = Jewel Changi Airport logo.png | logo_size = 200 | image = Jewel Changi Airport 13-11-2023(1).jpg | image_size = 300 | caption = Jewel Changi Airport | pushpin_relief = | former_names = | alternate_names = | etymology = | status = completed | architectural_style = [[Neo-futurism|Neofuturistic]] | cancelled = | topped_out = | building_type = {{hlist|Retail|entertainment|observation}} | material = Steel and glass | cost = [[Singapore dollar|S$]]1.7 billion | location = [[Changi]], Singapore | address = 78 Airport Boulevard, Singapore 819666 | location_city = | location_country = Singapore | coordinates = {{coord|1.3644|103.9915|format=dms|display=inline,title}} | altitude = | current_tenants = | namesake = | construction_start_date = {{start date and age|df=y|2014|12|05}} | completion_date = | opened_date = {{start date and age|df=y|2019|04|17}} (soft opening)<ref>{{Cite news |date=6 March 2019 |title=Jewel Changi Airport to open on April 17 |url=https://www.straitstimes.com/singapore/transport/jewel-changi-airport-to-open-on-april-17 |url-status=live |archive-url=https://web.archive.org/web/20190307153244/https://www.straitstimes.com/singapore/transport/jewel-changi-airport-to-open-on-april-17 |archive-date=7 March 2019 |access-date=6 March 2019 |work=The Straits Times}}</ref><br />{{start date and age|df=y|2019|10|18}} (official opening)<ref name="50&nbsp;m">{{Cite web |last=Toh |first=Ting Wei |date=18 October 2019 |title=Jewel Changi Airport sees 50&nbsp;m visitors since opening six months ago |url=https://www.straitstimes.com/singapore/transport/jewel-changi-airport-sees-50m-visitors-since-opening-six-months-ago |access-date=25 October 2019 |website=The Straits Times}}</ref> | owner = Changi Airport Group [[CapitaLand]] Jewel Changi Airport Trustee Pte. Ltd. | size = {{convert|3.5|ha}} | floor_count = 12 – 5 above-ground storeys and 7 basement levels (Levels B5 — B2, B2M, B1, B1M, L1-L5) | floor_area = {{convert|135,700|m2}} | architect = [[Moshe Safdie]]<br />[[RSP Architects Planners & Engineers|RSP Architects Planners & Engineers Private Limited]] | structural_engineer = RSP Architects Planners & Engineers | other_designers = PWP Landscape Architecture<br />ICN Design International Pte Ltd<br />Ove Arup<br />Benoy<br />Lighting Planners Associates<ref>{{Cite web |title=Jewel Changi Airport |url=https://www.lighting.co.jp/projects/detail/109 |access-date=10 September 2019 |website=Lighting Planners Associates |archive-date=24 July 2021 |archive-url=https://web.archive.org/web/20210724061127/https://www.lighting.co.jp/projects/detail/109 |url-status=dead }}</ref> | main_contractor = [[Obayashi Corporation]]<ref>{{Cite web |title=Jewel- Changi Airport Mixed Development – Obayashi Singapore |url=https://www.obayashi.com.sg/our-projects/jewel-changi-airport-mixed-development/ |url-status=live |archive-url=https://web.archive.org/web/20190605184009/https://www.obayashi.com.sg/our-projects/jewel-changi-airport-mixed-development/ |archive-date=5 June 2019 |access-date=5 June 2019 |website=obayashi.com.sg}}</ref><br />Woh Hup Pte. Ltd. | awards = | designations = | known_for = | ren_architect = | ren_firm = | ren_engineer = | ren_str_engineer = | ren_serv_engineer = | ren_civ_engineer = | ren_oth_designers = | ren_qty_surveyor = | ren_contractor = | ren_awards = | number_of_rooms = <!-- or | unit_count = --> | parking = | website = {{URL|jewelchangiairport.com}} | embed = | embedded = | references = | footnotes = }} '''Jewel Changi Airport''' (also known as '''Jewel'''; {{zh|s=星耀樟宜|p=Xīng yào Zhāngyí|l=Singapore Sparkle Changi}}, {{Langx|ms|Jewel Lapangan Terbang Changi}}) is a nature-themed entertainment and retail complex surrounded by and linked to Terminals 1, 2, and 3 of [[Changi Airport]] in Singapore. Its centrepiece is the world's tallest [[Artificial waterfall|indoor waterfall]], the Rain Vortex, which is surrounded by a terraced forest setting.<ref>{{Cite news |last=Kaur |first=Karamjit |date=21 March 2017 |title=Changi's Jewel shaping up well for sparkling start in 2019 |url=http://www.straitstimes.com/singapore/changis-jewel-shaping-up-well-for-sparkling-start-in-2019 |url-status=live |archive-url=https://web.archive.org/web/20171225091131/http://www.straitstimes.com/singapore/changis-jewel-shaping-up-well-for-sparkling-start-in-2019 |archive-date=25 December 2017 |access-date=9 January 2018 |work=The Straits Times}}</ref> Jewel includes gardens, attractions, a hotel, about 300 retail and dining outlets, as well as early [[baggage]] check-in facilities. It covers a total floor area of {{convert|135,700|m2|abbr=on}}, spanning ten storeys—five above-ground and five basement levels.<ref>{{Cite news |date=19 August 2013 |title=Changi Airport Group unveils 'Project Jewel' |url=http://www.themalaymailonline.com/travel/article/changi-airport-group-unveils-project-jewel#JgaeDzjSQr5GRSJc.97 |url-status=live |archive-url=https://web.archive.org/web/20180117132929/http://www.themalaymailonline.com/travel/article/changi-airport-group-unveils-project-jewel#JgaeDzjSQr5GRSJc.97 |archive-date=17 January 2018 |access-date=9 January 2018}}</ref> Attractions include the Forest Valley, an indoor garden spanning five storeys; and the Canopy Park at the topmost level, featuring gardens and leisure facilities.<ref>{{Cite news |title=Jewel at Changi Airport to open in early 2019, Canopy Park unveiled |url=https://sg.style.yahoo.com/jewel-changi-airport-open-early-2019-canopy-park-unveiled-075454240.html |url-status=live |archive-url=https://web.archive.org/web/20180117132211/https://sg.style.yahoo.com/jewel-changi-airport-open-early-2019-canopy-park-unveiled-075454240.html |archive-date=17 January 2018 |access-date=9 January 2018 }}</ref> Jewel receives about 300,000 visitors per day. In October 2019, six months after its [[Soft launch|soft opening]], it welcomed 50 million visitors, exceeding its initial target for the whole year.<ref name="50&nbsp;m" /> In 2024, it achieved a record footfall of more than 80 million, the highest since its opening.<ref>{{Cite web |last=Loi |first=Esther |date=28 January 2025 |title=Jewel Changi Airport reports record footfall of over 80 million people in 2024 |url=https://www.straitstimes.com/singapore/transport/jewel-changi-airport-reports-record-footfall-of-over-80-million-in-2024 |access-date=28 January 2025 |website=The Straits Times}}</ref> The complex and airport are located in [[Changi]], at the eastern end of Singapore, approximately {{convert|20|km|abbr=on}} northeast from Singapore's [[Downtown Core]].<ref>{{Cite web |title=Regulations |url=http://www.caas.gov.sg/caasWeb2010/export/sites/caas/en/Regulations/Aeronautical_Information/AIP/aerodrome/AD_WSSS/WSSS-AD2-1.pdf |url-status=live |archive-url=https://web.archive.org/web/20150923195740/http://www.caas.gov.sg/caasWeb2010/export/sites/caas/en/Regulations/Aeronautical_Information/AIP/aerodrome/AD_WSSS/WSSS-AD2-1.pdf |archive-date=23 September 2015 |access-date=3 March 2017 |website=Caas.gov.sg}}</ref> ==Conception== Jewel was conceived to maintain Changi Airport's status as a major aviation hub in the Asia-Pacific.<ref>{{Cite news |url=http://www.straitstimes.com/singapore/jewel-at-changi-will-offer-travellers-stunning-welcome?login=true|title=Jewel at Changi will offer travelers stunning welcome|last=migration|date=20 August 2013|work=The Straits Times|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117190548/http://www.straitstimes.com/singapore/jewel-at-changi-will-offer-travellers-stunning-welcome?login=true|archive-date=17 January 2018|url-status=live}}</ref> It was first mentioned by then-Prime Minister [[Lee Hsien Loong]] in his [[Singapore National Day Rally|National Day Rally]] speech in 2013 as part of Changi Airport's long-term plans to double its capacity by the mid-2020s and "create more opportunities for Singapore and Singaporeans".<ref>{{Cite news|url=https://www.youtube.com/watch?v=jXVYc_IDygw |title=Expanding Changi Airport for 2030 and Beyond - National Day Rally 2013|work=govsingapore youtube channel uploaded 22 Aug 2013}}</ref><ref>{{Cite news|url=http://www.todayonline.com/singapore/terminal-5-will-double-changi-airports-capacity-pm-lee|title=Terminal 5 will double Changi Airport's capacity: PM Lee|work=TODAYonline|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117190432/http://www.todayonline.com/singapore/terminal-5-will-double-changi-airports-capacity-pm-lee|archive-date=17 January 2018|url-status=live}}</ref> Built over the former open-air car park in front of Changi Airport Terminal 1, Jewel expanded Terminal 1's arrival hall and [[baggage reclaim]] areas by 70%, and its handling capacity was also expected to increase from 21 to 24 million passengers a year.<ref name="TODAYonline">{{Cite news|url=http://www.todayonline.com/singapore/first-look-changi-airports-new-jewel|title=A first look at Changi Airport's new 'Jewel'|work=TODAYonline|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117131606/http://www.todayonline.com/singapore/first-look-changi-airports-new-jewel|archive-date=17 January 2018|url-status=live}}</ref><ref>{{Cite news|url=https://thedesignair.net/2015/03/14/changi-airport-proves-it-is-the-jewel-of-the-world/|title=Changi Airport Proves It Is the Jewel of the World|date=14 March 2015|work=TheDesignAir|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117131934/https://thedesignair.net/2015/03/14/changi-airport-proves-it-is-the-jewel-of-the-world/|archive-date=17 January 2018|url-status=live}}</ref> Jewel was officially opened on 18 October 2019 by Lee, six months after its [[Soft launch|soft opening]]. During this time, it received 50 million visitors—about 300,000 per day—exceeding its initial target of 40–50 million visitors for the first year.<ref name="50&nbsp;m" /> The concept was developed by Jewel Changi Airport Trustee Pte Ltd, a joint venture between Changi Airport Group (CAG) and [[CapitaLand]], through its wholly owned shopping mall business, CapitaLand Mall Asia.<ref>{{Cite news|url=http://www.straitstimes.com/singapore/project-jewel-at-changi-airport-to-cost-147b|title=Project Jewel at Changi Airport to cost $1.47b|last=migration|date=20 December 2013|work=The Straits Times|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117190536/http://www.straitstimes.com/singapore/project-jewel-at-changi-airport-to-cost-147b|archive-date=17 January 2018|url-status=live}}</ref> The project cost S$1.7&nbsp;billion<ref>{{Cite news|url=http://www.straitstimes.com/singapore/transport/work-on-changi-airports-jewel-project-and-t1-expansion-begins|title=Work on Changi Airport's Jewel project and T1 expansion begins|author=Karamjit Kaur |date=5 December 2014 |work=The Straits Times|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117190441/http://www.straitstimes.com/singapore/transport/work-on-changi-airports-jewel-project-and-t1-expansion-begins|archive-date=17 January 2018|url-status=live}}</ref> and did not involve any government funds or taxpayer money, despite both entities being either wholly or partially owned by [[Temasek Holdings]], the state-owned investment company.<ref>{{cite web |title=Clarification on funding of Jewel Changi Airport |url=https://www.gov.sg/article/clarification-on-funding-of-jewel-changi-airport |website=gov.sg |access-date=28 August 2020 |date=30 June 2020}}</ref> {{clear left}} ==Design and development== Jewel's [[toroid]]al glass-and-steel façade was designed by a consortium of architects, led by [[Moshe Safdie]],<ref name="TODAYonline" /> who also designed Singapore's [[Marina Bay Sands]].<ref>{{Cite news|url=https://www.vanityfair.com/culture/2012/06/moshe-safdie-architecture-of-today-bilbao-effect|title=Architect Moshe Safdie on the "Bilbao Effect"|last=Heilpern|first=John|magazine=Vanity Fair|access-date=9 January 2018|archive-url=https://web.archive.org/web/20160414083814/https://www.vanityfair.com/culture/2012/06/moshe-safdie-architecture-of-today-bilbao-effect|archive-date=14 April 2016|url-status=live}}</ref> Local firm [[RSP Architects Planners & Engineers]] were the executive architects and structural engineers.<ref>{{Cite news|url=http://www.rsp.com.sg/home|title=Home {{!}} RSP |work=rsp.com.sg |access-date=17 April 2019|archive-url=https://web.archive.org/web/20190417032534/http://www.rsp.com.sg/home|archive-date=17 April 2019|url-status=dead }}</ref> The landscape architect was [[Peter Walker (landscape architect)|PWP Landscape Architecture]],<ref>{{Cite web|url=http://www.pwpla.com/projects/jewel-changi-airport|title=Jewel Changi Airport |website=PWP Landscape Architecture |access-date=17 April 2018|archive-url=https://web.archive.org/web/20180418092813/http://www.pwpla.com/projects/jewel-changi-airport|archive-date=18 April 2018|url-status=live}}</ref> who co-designed the [[National 9/11 Memorial]] in New York City and worked with Safdie on the landscaping of Marina Bay Sands. [[Benoy]] were the interior designers, [[BuroHappold Engineering]] were responsible for the façade, and Lighting Planners Associates handled the lighting.<ref>{{cite web |url-status=live |url=https://www.architectmagazine.com/project-gallery/jewel-changi-airport_o |title=Jewel Changi Airport |archive-url=https://web.archive.org/web/20190520104435/https://www.architectmagazine.com/project-gallery/jewel-changi-airport_o |archive-date=20 May 2019 |date= 6 May 2019 |website=Architect Magazine }}</ref> The Rain Vortex was engineered by water design firm [[WET Design]]; it has a 360-degree light and sound show projected onto it.<ref>{{cite web |url-status=live |url=https://www.dezeen.com/2019/03/12/moshe-safdie-worlds-tallest-indoor-waterfall-changi-airport/ |title=World's tallest indoor waterfall inside Safdie Architects' Singapore airport building |archive-url=https://web.archive.org/web/20190702011249/https://www.dezeen.com/2019/03/12/moshe-safdie-worlds-tallest-indoor-waterfall-changi-airport/ |archive-date=2 July 2019 |website= Dezeen |date=12 March 2019 |first1=India |last1=Block }}</ref> Jewel was envisioned to combine a marketplace and an urban park. "The component of the traditional mall is combined with the experience of nature, culture, education, and recreation, aiming to provide an uplifting experience. By drawing both visitors and local residents alike, we aim to create a place where the people of Singapore interact with the people of the world", said Safdie.<ref>{{Cite news |first1=Anna |last1=Winston |url=https://www.dezeen.com/2014/12/05/moshe-safdie-huge-greenhouse-singapore-changi-airport/|title=Safdie reveals greenhouse for Singapore's Changi airport|date=5 December 2014|work=Dezeen|access-date=9 January 2018|archive-url=https://web.archive.org/web/20170703022726/https://www.dezeen.com/2014/12/05/moshe-safdie-huge-greenhouse-singapore-changi-airport/|archive-date=3 July 2017|url-status=live}}</ref> The glass panels of the dome are framed in steel that rests on a complex latticework.<ref>{{Cite news|url=http://inhabitat.com/moshe-safdies-jewel-changi-airport-biodome-breaks-ground-in-singapore/moshe-safdie-architects-jewel-changi-airport-6/|title=Moshe Safdie's Jewel Changi Airport biodome breaks ground in Singapore|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180118010506/https://inhabitat.com/moshe-safdies-jewel-changi-airport-biodome-breaks-ground-in-singapore/moshe-safdie-architects-jewel-changi-airport-6/|archive-date=18 January 2018|url-status=live}}</ref> At night, the glowing dome is visible from surrounding areas.<ref>{{Cite web|url=https://apex.aero/2016/09/20/changi-airport-singapore-crown-jewel|title=Changi Airport: Singapore's Crown Jewel|website=apex.aero|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117133414/https://apex.aero/2016/09/20/changi-airport-singapore-crown-jewel|archive-date=17 January 2018|url-status=live}}</ref> ==Attractions== ===Forest Valley=== [[File:JewelSingaporeVortex1.jpg|thumb|Forest Valley to the left and right]] The Forest Valley is one of Asia's largest indoor gardens, spanning five stories and approximately {{convert|22,000|m2}}, located in the heart of Jewel Changi Airport. It houses around 3,000 trees and 60,000 shrubs of 120 species that live in high-altitude tropical forests around the world.<ref name=":1" /><ref>{{cite web|url=https://www.teamlab.art/w/resonatingforest-jewel/|title=Resonating Forest – Shiseido Forest Valley at Jewel Changi Airport – teamLab / チームラボ|website=Resonating Forest – Shiseido Forest Valley at Jewel Changi Airport – teamLab / チームラボ|access-date=27 May 2019|archive-url=https://web.archive.org/web/20190525143643/https://www.teamlab.art/w/resonatingforest-jewel/|archive-date=25 May 2019|url-status=live}}</ref><ref>{{cite web|url=http://www.shiseidogroup.com/news/detail.html?n=00000000002682|title=Shiseido Opens Shiseido Forest Valley at Jewel Changi Airport |website=News Release – Shiseido group website|access-date=27 May 2019}}</ref> It was conceived and designed by PWP Landscape Architecture. ===Rain Vortex=== [[File:At Jewel Changi, Singapore 2023 36.jpg|thumb|Rain Vortex in 2023]] The Rain Vortex is the world's largest and tallest [[Artificial waterfall#Indoor waterfalls|indoor waterfall]], standing at {{convert|40|m}} high.<ref>{{Cite news|url=https://www.nytimes.com/2019/04/11/travel/singapores-changi-airport-jewel.html|title=At Singapore's Changi Airport, a New Jewel Shines|last=Surana|first=Sanjay|date=11 April 2019|work=The New York Times|access-date=12 April 2019|archive-url=https://web.archive.org/web/20190412225925/https://www.nytimes.com/2019/04/11/travel/singapores-changi-airport-jewel.html|archive-date=12 April 2019|issn=0362-4331|url-status=live}}</ref> Recirculating rain water is pumped to the roof to freefall through a round hole at up to {{Convert|37850|liters||abbr=out}} per minute to a basement-level pool.<ref name=":1">{{Cite web|url=https://infographics.channelnewsasia.com/jewel-changi-airport/index.html|title=Inside Jewel Changi Airport: An interactive special|website=CNA|access-date=15 September 2019}}</ref> An [[Acrylate polymer|acrylic]] funnel at the bottom prevents splashing and insulates the sound of the cascade. The toroid-shaped roof has more than 9,000 pieces of glass spanning {{convert|200|by|150|meters}},<ref name=":1" /> with a sloped [[Oculus (architecture)|oculus]] as the mouth of the waterfall acting as "a continuation of the building... completed in a liquid form".<ref>{{Cite web|url=https://www.cnbc.com/2019/04/12/singapores-changi-airport-touts-the-worlds-tallest-indoor-waterfall.html|title=Singapore's Changi Airport, called the world's best airport, now touts the world's tallest indoor waterfall|last=Baskas|first=Harriet|date=14 April 2019|website=CNBC|access-date=6 November 2019}}</ref> At night, the circular walls of the waterfall become a 360-degree stage for a light-and-sound show.<ref name="jewelchangi">{{Cite news|url=http://www.straitstimes.com/singapore/6-things-you-shouldnt-miss-when-visiting-jewel-changi-airport|title=Jewel Changi Airport: 6 things you should not miss|last=Kaur|first=Karamjit|date=7 June 2017|work=The Straits Times|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180109031255/http://www.straitstimes.com/singapore/6-things-you-shouldnt-miss-when-visiting-jewel-changi-airport|archive-date=9 January 2018|url-status=live}}</ref> To prevent excess humidity in the Jewel, the waterfall's flow alternates between cascades and trickles that reduce air turbulence. The design process, by WET Design engineers, included testing a one-fifth-scale model and a full-size partial prototype.<ref>{{Cite news|url=https://www.wired.com/2016/09/fit-worlds-biggest-indoor-waterfall-airport/|title=How to Fit the World's Biggest Indoor Waterfall in an Airport|last=Zhang|first=Sarah|date=7 September 2016|magazine=Wired|access-date=29 October 2019|issn=1059-1028}}</ref> The [[Changi Airport Skytrain]] connecting the terminals passes above ground near the waterfall, allowing passengers remaining [[Airport#Landside and airside areas|airside]] to see the Vortex and Jewel itself.<ref>{{cite web|title=Getting between Terminal 2 & Terminal 3|url=http://www.changiairport.com/getting-around/getting-around-the-airport/inter-terminal-transfer|access-date=6 April 2015|archive-url=https://web.archive.org/web/20150401061404/http://www.changiairport.com/getting-around/getting-around-the-airport/inter-terminal-transfer|archive-date=1 April 2015|url-status=dead}}</ref> ===Canopy Park=== [[File:At Jewel Changi, Singapore 2023 47.jpg|thumb|Topmost level at Jewel Changi]] At the topmost level of Jewel, the {{convert|14,000|m2|adj=on}} Canopy Park houses recreation and leisure attractions.<ref>{{Cite news|url=http://www.todayonline.com/singapore/jewel-changi-airport-set-dazzle-crowds-early-2019|title=Canopy bridge, mazes among features at Changi Airport's S$1.7 billion Jewel|work=TODAYonline|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180116070933/http://www.todayonline.com/singapore/jewel-changi-airport-set-dazzle-crowds-early-2019|archive-date=16 January 2018|url-status=live}}</ref> About half of the total landscaping is hosted at Canopy Park, including two gardens: Topiary Walk and Petal Garden.<ref name="Planet" /> The Topiary Walk features animal-shaped [[Topiary|topiaries]] at every corner, while the Petal Garden has seasonal floral displays. The park includes a [[suspension bridge]] called the [[Mastercard]] Canopy Bridge,<ref>{{Cite web |title=Jewel Changi Airport Mastercard® Canopy Bridge |url=https://specials.priceless.com/en-ap/offers/Jewel_Changi_Airport_Mastercard%C2%AE_Canopy_Bridge?Oid=202212090002&issuerId=&productId= |access-date=19 April 2025 |work=Priceless Specials}}</ref> located {{convert|23|metres}} above the ground and offering a panoramic view of the Rain Vortex. At {{convert|50|metres}} long, the bridge also has a glass-panel floor at the centre section that offers a view down to level 1 of Jewel. The park also consists of two mazes, situated at the eastern end of the Jewel, called the Hedge Maze and Mirror Maze.<ref name=":1" /><ref>{{Cite web|url=https://funsandfacts.com/singapore-jewel-changi-airport-tourist-attraction/|title=Singapore Jewel Changi Airport tourist attractions|work= funsandfacts|date=30 April 2020|access-date=12 July 2020|archive-url=https://web.archive.org/web/20200711191329/https://funsandfacts.com/singapore-jewel-changi-airport-tourist-attraction/|archive-date=11 July 2020|url-status=live}}</ref> The Hedge Maze is Singapore's largest, with hedge walls standing at {{convert|1.8|m}} high. The maze features gates that can be pushed inward and thus change the path of the maze. It ends at an elevated watchtower that offers a bird's-eye view of the entire maze. The Mirror Maze is located under the dome, with plants branching across the top. It makes use of mirrors and various reflections.<ref name="jewelchangi" /><ref>{{Cite news|url=http://www.channelnewsasia.com/news/singapore/changi-airport-unveils-14-000%C2%A0m%C2%B2-canopy-park-at-jewel-8923932|title=Changi Airport unveils 14,000&nbsp;m² Canopy Park at Jewel|work=Channel NewsAsia|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180118011225/https://www.channelnewsasia.com/news/singapore/changi-airport-unveils-14-000%C2%A0m%C2%B2-canopy-park-at-jewel-8923932|archive-date=18 January 2018|url-status=dead}}</ref> * '''Bouncing and Walking Nets''' – The Bouncing Net is {{convert|250|metres}} long, suspended 8 metres above ground at its highest point.<ref name="jewelchangi" /> A separate {{convert|50|metre}}-long Walking Net enables visitors to look down {{convert|25|metre}} to Jewel's level 1.<ref name="Planet">{{Cite web|url=https://www.lonelyplanet.com/news/2017/06/09/singapores-jewel-changi-canopy-park/|title=Inside Canopy Park at Singapore's Jewel Changi Airport|last=Planet|first=Lonely|website=lonelyplanet.com|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117132649/https://www.lonelyplanet.com/news/2017/06/09/singapores-jewel-changi-canopy-park/|archive-date=17 January 2018|url-status=live}}</ref> * '''Discovery Slides''' – the Discovery Slides feature four integrated slides: two tube slides and two sliding surfaces.<ref name="jewelchangi" /> The entire structure sits at an incline, {{convert|3|m}} high on one end, and close to {{convert|7|m}} on the other,<ref name="Channel NewsAsia">{{Cite news|url=http://www.channelnewsasia.com/news/singapore/changi-airport-unveils-14-000%C2%A0m%C2%B2-canopy-park-at-jewel-8923932|title=Changi Airport unveils 14,000&nbsp;m² Canopy Park at Jewel|work=Channel NewsAsia|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180118011225/https://www.channelnewsasia.com/news/singapore/changi-airport-unveils-14-000%C2%A0m%C2%B2-canopy-park-at-jewel-8923932|archive-date=18 January 2018|url-status=dead}}</ref> and enables visitors to view the Forest Valley and the Rain Vortex.<ref>{{Cite news|url=http://www.businessinsider.sg/singapore-changi-airport-jewel-rainforest-waterfall-2017-6/|title=The best airport in the world is building a $1.7 billion indoor forest and waterfall|last=Zhang|first=Benjamin Zhang|date=9 June 2017|work=Business Insider Singapore|access-date=17 January 2018|archive-url=https://web.archive.org/web/20180117131456/http://www.businessinsider.sg/singapore-changi-airport-jewel-rainforest-waterfall-2017-6/|archive-date=17 January 2018|url-status=live}}</ref> The Discovery Slides were designed by Carve and built by Playpoint in Singapore.<ref name="jewelchangi" /> * '''Foggy Bowls''' – the Foggy Bowls are four concave bowls with depths of between {{convert|30|cm}} and {{convert|65|cm}} for people to jump in while mist is released to create an illusion of playing among clouds.<ref name="jewelchangi" /> ===Changi Experience Studio=== The Changi Experience Studio is a {{convert|3,000|m2|adj=on}} space with interactive games and displays relating to the airport's history that allows visitors a behind-the-scenes look at how the facility is run.<ref name="jewelchangi" /> ==Facilities== ===Hotel=== [[Yotel]] operates a hotel within Jewel, with approximately 130 rooms, which opened on 12 April 2019.<ref name="CNN Travel">{{Cite news|url=https://edition.cnn.com/travel/article/singapores-jewel-changi/index.html|title=Singapore's Jewel Changi: World's most awesome airport?|date=9 December 2014|work=CNN Travel|access-date=9 January 2018|url-status=live|archive-url=https://web.archive.org/web/20180117132006/http://edition.cnn.com/travel/article/singapores-jewel-changi/index.html|archive-date=17 January 2018}}</ref><ref name="YOTEL">{{Cite news|url=https://www.straitstimes.com/business/property/microhotel-chain-yotel-to-open-at-jewel-changi-airport-on-april-12|title=Micro-hotel chain Yotel to open at Jewel Changi Airport on April 12|date=8 March 2019|work=The Straits Times|access-date=9 March 2019|url-status=live|archive-url=https://web.archive.org/web/20190309081757/https://www.straitstimes.com/business/property/microhotel-chain-yotel-to-open-at-jewel-changi-airport-on-april-12|archive-date=9 March 2019}}</ref> ===Aviation facilities=== An "integrated multi-modal transport lounge" provides ticketing, boarding pass collection, and baggage transfer service in a single location. Early check-in facilities enable passengers to drop off luggage up to 24 hours ahead of regular check-in times.<ref name="CNN Travel" /> ===Retail=== [[File:Pokemon Center Singapore.jpg|thumb|Pokémon Centre Singapore]] Jewel houses both local and international brands, such as the first [[Apple Store]] located inside an airport complex<ref>{{Cite web|url=https://www.straitstimes.com/tech/first-apple-store-inside-an-airport-complex-to-open-this-saturday-at-jewel-changi-airport|title=First Apple store inside an airport complex to open on Saturday at Jewel Changi Airport|last=Tan|first=Trevor|date=11 July 2019|website=The Straits Times|access-date=20 October 2019}}</ref> and the first permanent [[Pokémon Center]] in Asia outside of Japan. Other tenants include: [[Muji]], [[Zara (retailer)|Zara]], [[Uniqlo]], [[Don Quijote (store)|Don Don Donki]], [[Massimo Dutti]], a [[Shaw Organisation|Shaw Theatres]] cinema that includes an [[IMAX]] theatre, a [[NTUC FairPrice|FairPrice Finest]] supermarket, as well as a food court.<ref>{{Cite web|last=Lin|first=Jessica|title=Singapore's S$1.7 billion Jewel Changi opens on Apr 17 – but there's a way to get inside before everyone else does, Business Insider – Business Insider Singapore|url=https://www.businessinsider.sg/singapores-s1-7-billion-jewel-changi-opens-on-apr-17-but-theres-a-way-to-get-inside-before-everyone-else-does/|url-status=dead|archive-url=https://web.archive.org/web/20190828023006/https://www.businessinsider.sg/singapores-s1-7-billion-jewel-changi-opens-on-apr-17-but-theres-a-way-to-get-inside-before-everyone-else-does/|archive-date=28 August 2019|access-date=20 October 2019|website=businessinsider.sg}}</ref> Jewel has a lineup of [[athleisure]] brands, such as [[Nike, Inc.|Nike]], [[Adidas]], [[Descente]], [[On (company)|On]], [[Fila]], and [[New Balance]]. It also features a mix of local and international and local restaurant chains, such as [[A&W Restaurants]],<ref>{{Cite web |last=Goldberg |first=Eddy |title=A&W Restaurants Returns to Singapore After 16 Years Away |url=https://www.franchising.com/articles/aw_restaurants_returns_to_singapore_after_16_years_away.html |access-date=30 April 2023 |website=franchising.com}}</ref> [[Jumbo Seafood]], [[Shake Shack]], [[Bee Cheng Hiang]], [[Bengawan Solo (company)|Bengawan Solo]], [[Ya Kun Kaya Toast]], and Irvins.<ref>{{Cite news|url=https://www.straitstimes.com/singapore/transport/coming-soon-cinema-at-changis-jewel|title=Coming soon to Changi Airport's Jewel: Cinema, fast-food chain A&W|date=15 July 2018|work=The Straits Times|access-date=16 July 2018|archive-url=https://web.archive.org/web/20180716170129/https://www.straitstimes.com/singapore/transport/coming-soon-cinema-at-changis-jewel|archive-date=16 July 2018|url-status=live}}</ref><ref>{{Cite news|url=https://www.channelnewsasia.com/news/singapore/jewel-changi-airport-a-w-pokemon-shaw-theatres-among-tenants-10815310|title=Jewel Changi Airport tenants to include A&W, Pokemon, Shaw Theatres|date=12 October 2018|work=Channel NewsAsia|access-date=12 October 2018|archive-url=https://web.archive.org/web/20181012122807/https://www.channelnewsasia.com/news/singapore/jewel-changi-airport-a-w-pokemon-shaw-theatres-among-tenants-10815310|archive-date=12 October 2018|url-status=live}}</ref><ref>{{Cite news|url=https://www.jewelchangiairport.com/content/dam/jca-project/documents/Media%20Release%20-%20Jewel%20Changi%20Airport%20Retail%20Update.pdf|title=Close to 90% of Jewel Changi Airport's retail space leased to date with unique experiential retail concepts|date=11 October 2018|work=Jewel Changi Airport|access-date=15 October 2018|archive-url=https://web.archive.org/web/20190327085640/https://www.jewelchangiairport.com/content/dam/jca-project/documents/Media%20Release%20-%20Jewel%20Changi%20Airport%20Retail%20Update.pdf|archive-date=27 March 2019|url-status=dead}}</ref><ref>{{Cite news|url=https://www.jewelchangiairport.com/content/dam/jca-project/documents/Burger_Lobster_to_launch_at_Jewel_Changi_Airport.pdf|title=Burger & Lobster to launch at Jewel Changi Airport|date=31 January 2019|work=Jewel Changi Airport|access-date=4 March 2019|archive-url=https://web.archive.org/web/20190327085800/https://www.jewelchangiairport.com/content/dam/jca-project/documents/Burger_Lobster_to_launch_at_Jewel_Changi_Airport.pdf|archive-date=27 March 2019|url-status=live}}</ref><ref>{{Cite news|url=https://www.straitstimes.com/tech/apple-to-open-2-more-stores-here-sources|title=Apple to open 2 more stores here: Sources|date=27 March 2019|work=The Straits Times|access-date=28 March 2019|archive-url=https://web.archive.org/web/20190328082523/https://www.straitstimes.com/tech/apple-to-open-2-more-stores-here-sources|archive-date=28 March 2019|url-status=live}}</ref><ref>{{Cite news|url=https://www.jewelchangiairport.com/en/dine/tokyo-milk-cheese-factory-cow-cow-kitchen.html|title=Tokyo Milk Cheese Factory & Cow Cow Kitchen|date=23 June 2019|work=Jewel Changi Airport|access-date=23 June 2019|archive-url=https://web.archive.org/web/20190623093435/https://www.jewelchangiairport.com/en/dine/tokyo-milk-cheese-factory-cow-cow-kitchen.html|archive-date=23 June 2019|url-status=live}}</ref> ==Awards== Jewel Changi Airport was accorded the 2016 International Architecture Award by the [[Chicago Athenaeum]], an international museum of architecture and design.<ref>{{Cite news|url=http://www.channelnewsasia.com/news/singapore/jewel-changi-airport-wins-international-architecture-award-7927210|title=Jewel Changi Airport wins International Architecture Award|work=Channel NewsAsia|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180118010644/https://www.channelnewsasia.com/news/singapore/jewel-changi-airport-wins-international-architecture-award-7927210|archive-date=18 January 2018|url-status=live}}</ref> In November 2019, the airport received the Special Jury Award at that year's [[Mapic]] Awards.<ref>{{Cite web|title=Changi's Jewel shines with global award; it is the top pick of international retail real estate experts|url=https://www.straitstimes.com/singapore/changis-jewel-shines-with-global-award-it-is-the-top-pick-of-international-retail-real|last=Ang|first=Prisca|date=15 November 2019|website=The Straits Times|access-date=20 May 2020}}</ref> In 2024, it was publicly voted "My Favourite Shopping Mall" by the Singapore Retailers Association at the SRA Retail Awards.<ref>{{Cite news |title=Jewel Changi Airport crowned 'My Favourite Shopping Mall' by the Singapore Retailers Association at the SRA Retail Awards 2024 |url=https://www.linkedin.com/posts/jewel-changi-airport_jewelchangiairport-whatafeelin5-activity-7260238692202536960-cZlM/ | access-date=10 May 2025}}</ref> Jewel Changi Airport also received [[Tripadvisor]]'s 2025 Travellers' Choice Award, based on reviews from millions of travellers, ranking the airport among the top 10% worldwide.<ref>{{Cite web |title=Jewel Changi Airport (2025) All You Need to Know Before You Go (with Reviews) |url=https://www.tripadvisor.com.sg/Attraction_Review-g294265-d17237163-Reviews-Jewel_Changi_Airport-Singapore.html |archive-url=https://web.archive.org/web/20250317141907/https://www.tripadvisor.com.sg/Attraction_Review-g294265-d17237163-Reviews-Jewel_Changi_Airport-Singapore.html |archive-date=17 March 2025 |access-date=13 August 2025 |website=Tripadvisor |url-status=live }}</ref> ==In popular culture== The song "The Right Time" by Singaporean singer [[JJ Lin]] was inspired by Jewel, which was featured in the music video.<ref>{{Cite news|url=https://www.businessinsider.sg/jj-lin-was-blown-away-when-he-saw-jewels-waterfall-and-now-theres-a-song-about-it/|title=JJ Lin was blown away when he saw Jewel's waterfall – and now there's a song about it|work=Business Insider|access-date=22 August 2019|archive-url=https://web.archive.org/web/20190822091849/https://www.businessinsider.sg/jj-lin-was-blown-away-when-he-saw-jewels-waterfall-and-now-theres-a-song-about-it/|archive-date=22 August 2019|url-status=live}}</ref><ref>{{Cite news|url=https://www.straitstimes.com/lifestyle/entertainment/high-flier-jj-lin-salutes-changi-airports-jewel-with-new-song-called-the|title=High-flier JJ Lin salutes Changi Airport's Jewel with new song called The Right Time|work=The Straits Times|access-date=22 August 2019|archive-url=https://web.archive.org/web/20190822071458/https://www.straitstimes.com/lifestyle/entertainment/high-flier-jj-lin-salutes-changi-airports-jewel-with-new-song-called-the|archive-date=22 August 2019|url-status=live}}</ref> It also appeared in [[Coldplay]]'s music video for the 2024 song "[[Moon Music#Full Moon edition|Man in the Moon]]"<ref>{{Cite web |title=Coldplay Debuts 'Man in the Moon' Music Video Filmed in Singapore |url=https://www.stb.gov.sg/about-stb/media-publications/media-centre/coldplay-debuts--man-in-the-moon--music-video--filmed-in-singapore |access-date=19 February 2025 |website=Singapore Tourism Board}}</ref> and the fourth-season finale of "[[Hacks (TV series)|Hacks]]".<ref>{{Cite web |title=Season finale of Max comedy series Hacks was filmed in Singapore |url=https://cnalifestyle.channelnewsasia.com/entertainment/hacks-season-four-finale-shot-singapore-465786 |access-date=24 March 2026 |website=CNA Lifestyle}}</ref> ==See also== {{Portal|Architecture|Singapore}} * [[Infrastructure of Singapore Changi Airport]] ==References== {{Reflist}} ==External links== {{Commons category}} * {{official website|jewelchangiairport.com}} {{Changi Airport}} {{Major Tourist Attractions in Singapore}} {{Singapore malls}} {{Authority control}} [[Category:Airport terminals]] [[Category:Changi Airport]] [[Category:Tourist attractions in Singapore]] [[Category:2019 establishments in Singapore]] [[Category:Neo-futurist architecture]] [[Category:CapitaLand]] [[Category:Buildings and structures completed in 2019]] ckbzevesrednpkf6lc41cp01s3kq1fj 746256 746255 2026-06-12T21:55:46Z Robertsky 51025 1 revision imported from [[:en:Jewel_Changi_Airport]] 746255 wikitext text/x-wiki {{short description|Entertainment and retail complex in Singapore}} {{Use dmy dates|date=March 2026}} {{Use British English|date=September 2019}} {{Infobox building | name = Jewel Changi Airport | logo = Jewel Changi Airport logo.png | logo_size = 200 | image = Jewel Changi Airport 13-11-2023(1).jpg | image_size = 300 | caption = Jewel Changi Airport | pushpin_relief = | former_names = | alternate_names = | etymology = | status = completed | architectural_style = [[Neo-futurism|Neofuturistic]] | cancelled = | topped_out = | building_type = {{hlist|Retail|entertainment|observation}} | material = Steel and glass | cost = [[Singapore dollar|S$]]1.7 billion | location = [[Changi]], Singapore | address = 78 Airport Boulevard, Singapore 819666 | location_city = | location_country = Singapore | coordinates = {{coord|1.3644|103.9915|format=dms|display=inline,title}} | altitude = | current_tenants = | namesake = | construction_start_date = {{start date and age|df=y|2014|12|05}} | completion_date = | opened_date = {{start date and age|df=y|2019|04|17}} (soft opening)<ref>{{Cite news |date=6 March 2019 |title=Jewel Changi Airport to open on April 17 |url=https://www.straitstimes.com/singapore/transport/jewel-changi-airport-to-open-on-april-17 |url-status=live |archive-url=https://web.archive.org/web/20190307153244/https://www.straitstimes.com/singapore/transport/jewel-changi-airport-to-open-on-april-17 |archive-date=7 March 2019 |access-date=6 March 2019 |work=The Straits Times}}</ref><br />{{start date and age|df=y|2019|10|18}} (official opening)<ref name="50&nbsp;m">{{Cite web |last=Toh |first=Ting Wei |date=18 October 2019 |title=Jewel Changi Airport sees 50&nbsp;m visitors since opening six months ago |url=https://www.straitstimes.com/singapore/transport/jewel-changi-airport-sees-50m-visitors-since-opening-six-months-ago |access-date=25 October 2019 |website=The Straits Times}}</ref> | owner = Changi Airport Group [[CapitaLand]] Jewel Changi Airport Trustee Pte. Ltd. | size = {{convert|3.5|ha}} | floor_count = 12 – 5 above-ground storeys and 7 basement levels (Levels B5 — B2, B2M, B1, B1M, L1-L5) | floor_area = {{convert|135,700|m2}} | architect = [[Moshe Safdie]]<br />[[RSP Architects Planners & Engineers|RSP Architects Planners & Engineers Private Limited]] | structural_engineer = RSP Architects Planners & Engineers | other_designers = PWP Landscape Architecture<br />ICN Design International Pte Ltd<br />Ove Arup<br />Benoy<br />Lighting Planners Associates<ref>{{Cite web |title=Jewel Changi Airport |url=https://www.lighting.co.jp/projects/detail/109 |access-date=10 September 2019 |website=Lighting Planners Associates |archive-date=24 July 2021 |archive-url=https://web.archive.org/web/20210724061127/https://www.lighting.co.jp/projects/detail/109 |url-status=dead }}</ref> | main_contractor = [[Obayashi Corporation]]<ref>{{Cite web |title=Jewel- Changi Airport Mixed Development – Obayashi Singapore |url=https://www.obayashi.com.sg/our-projects/jewel-changi-airport-mixed-development/ |url-status=live |archive-url=https://web.archive.org/web/20190605184009/https://www.obayashi.com.sg/our-projects/jewel-changi-airport-mixed-development/ |archive-date=5 June 2019 |access-date=5 June 2019 |website=obayashi.com.sg}}</ref><br />Woh Hup Pte. Ltd. | awards = | designations = | known_for = | ren_architect = | ren_firm = | ren_engineer = | ren_str_engineer = | ren_serv_engineer = | ren_civ_engineer = | ren_oth_designers = | ren_qty_surveyor = | ren_contractor = | ren_awards = | number_of_rooms = <!-- or | unit_count = --> | parking = | website = {{URL|jewelchangiairport.com}} | embed = | embedded = | references = | footnotes = }} '''Jewel Changi Airport''' (also known as '''Jewel'''; {{zh|s=星耀樟宜|p=Xīng yào Zhāngyí|l=Singapore Sparkle Changi}}, {{Langx|ms|Jewel Lapangan Terbang Changi}}) is a nature-themed entertainment and retail complex surrounded by and linked to Terminals 1, 2, and 3 of [[Changi Airport]] in Singapore. Its centrepiece is the world's tallest [[Artificial waterfall|indoor waterfall]], the Rain Vortex, which is surrounded by a terraced forest setting.<ref>{{Cite news |last=Kaur |first=Karamjit |date=21 March 2017 |title=Changi's Jewel shaping up well for sparkling start in 2019 |url=http://www.straitstimes.com/singapore/changis-jewel-shaping-up-well-for-sparkling-start-in-2019 |url-status=live |archive-url=https://web.archive.org/web/20171225091131/http://www.straitstimes.com/singapore/changis-jewel-shaping-up-well-for-sparkling-start-in-2019 |archive-date=25 December 2017 |access-date=9 January 2018 |work=The Straits Times}}</ref> Jewel includes gardens, attractions, a hotel, about 300 retail and dining outlets, as well as early [[baggage]] check-in facilities. It covers a total floor area of {{convert|135,700|m2|abbr=on}}, spanning ten storeys—five above-ground and five basement levels.<ref>{{Cite news |date=19 August 2013 |title=Changi Airport Group unveils 'Project Jewel' |url=http://www.themalaymailonline.com/travel/article/changi-airport-group-unveils-project-jewel#JgaeDzjSQr5GRSJc.97 |url-status=live |archive-url=https://web.archive.org/web/20180117132929/http://www.themalaymailonline.com/travel/article/changi-airport-group-unveils-project-jewel#JgaeDzjSQr5GRSJc.97 |archive-date=17 January 2018 |access-date=9 January 2018}}</ref> Attractions include the Forest Valley, an indoor garden spanning five storeys; and the Canopy Park at the topmost level, featuring gardens and leisure facilities.<ref>{{Cite news |title=Jewel at Changi Airport to open in early 2019, Canopy Park unveiled |url=https://sg.style.yahoo.com/jewel-changi-airport-open-early-2019-canopy-park-unveiled-075454240.html |url-status=live |archive-url=https://web.archive.org/web/20180117132211/https://sg.style.yahoo.com/jewel-changi-airport-open-early-2019-canopy-park-unveiled-075454240.html |archive-date=17 January 2018 |access-date=9 January 2018 }}</ref> Jewel receives about 300,000 visitors per day. In October 2019, six months after its [[Soft launch|soft opening]], it welcomed 50 million visitors, exceeding its initial target for the whole year.<ref name="50&nbsp;m" /> In 2024, it achieved a record footfall of more than 80 million, the highest since its opening.<ref>{{Cite web |last=Loi |first=Esther |date=28 January 2025 |title=Jewel Changi Airport reports record footfall of over 80 million people in 2024 |url=https://www.straitstimes.com/singapore/transport/jewel-changi-airport-reports-record-footfall-of-over-80-million-in-2024 |access-date=28 January 2025 |website=The Straits Times}}</ref> The complex and airport are located in [[Changi]], at the eastern end of Singapore, approximately {{convert|20|km|abbr=on}} northeast from Singapore's [[Downtown Core]].<ref>{{Cite web |title=Regulations |url=http://www.caas.gov.sg/caasWeb2010/export/sites/caas/en/Regulations/Aeronautical_Information/AIP/aerodrome/AD_WSSS/WSSS-AD2-1.pdf |url-status=live |archive-url=https://web.archive.org/web/20150923195740/http://www.caas.gov.sg/caasWeb2010/export/sites/caas/en/Regulations/Aeronautical_Information/AIP/aerodrome/AD_WSSS/WSSS-AD2-1.pdf |archive-date=23 September 2015 |access-date=3 March 2017 |website=Caas.gov.sg}}</ref> ==Conception== Jewel was conceived to maintain Changi Airport's status as a major aviation hub in the Asia-Pacific.<ref>{{Cite news |url=http://www.straitstimes.com/singapore/jewel-at-changi-will-offer-travellers-stunning-welcome?login=true|title=Jewel at Changi will offer travelers stunning welcome|last=migration|date=20 August 2013|work=The Straits Times|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117190548/http://www.straitstimes.com/singapore/jewel-at-changi-will-offer-travellers-stunning-welcome?login=true|archive-date=17 January 2018|url-status=live}}</ref> It was first mentioned by then-Prime Minister [[Lee Hsien Loong]] in his [[Singapore National Day Rally|National Day Rally]] speech in 2013 as part of Changi Airport's long-term plans to double its capacity by the mid-2020s and "create more opportunities for Singapore and Singaporeans".<ref>{{Cite news|url=https://www.youtube.com/watch?v=jXVYc_IDygw |title=Expanding Changi Airport for 2030 and Beyond - National Day Rally 2013|work=govsingapore youtube channel uploaded 22 Aug 2013}}</ref><ref>{{Cite news|url=http://www.todayonline.com/singapore/terminal-5-will-double-changi-airports-capacity-pm-lee|title=Terminal 5 will double Changi Airport's capacity: PM Lee|work=TODAYonline|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117190432/http://www.todayonline.com/singapore/terminal-5-will-double-changi-airports-capacity-pm-lee|archive-date=17 January 2018|url-status=live}}</ref> Built over the former open-air car park in front of Changi Airport Terminal 1, Jewel expanded Terminal 1's arrival hall and [[baggage reclaim]] areas by 70%, and its handling capacity was also expected to increase from 21 to 24 million passengers a year.<ref name="TODAYonline">{{Cite news|url=http://www.todayonline.com/singapore/first-look-changi-airports-new-jewel|title=A first look at Changi Airport's new 'Jewel'|work=TODAYonline|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117131606/http://www.todayonline.com/singapore/first-look-changi-airports-new-jewel|archive-date=17 January 2018|url-status=live}}</ref><ref>{{Cite news|url=https://thedesignair.net/2015/03/14/changi-airport-proves-it-is-the-jewel-of-the-world/|title=Changi Airport Proves It Is the Jewel of the World|date=14 March 2015|work=TheDesignAir|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117131934/https://thedesignair.net/2015/03/14/changi-airport-proves-it-is-the-jewel-of-the-world/|archive-date=17 January 2018|url-status=live}}</ref> Jewel was officially opened on 18 October 2019 by Lee, six months after its [[Soft launch|soft opening]]. During this time, it received 50 million visitors—about 300,000 per day—exceeding its initial target of 40–50 million visitors for the first year.<ref name="50&nbsp;m" /> The concept was developed by Jewel Changi Airport Trustee Pte Ltd, a joint venture between Changi Airport Group (CAG) and [[CapitaLand]], through its wholly owned shopping mall business, CapitaLand Mall Asia.<ref>{{Cite news|url=http://www.straitstimes.com/singapore/project-jewel-at-changi-airport-to-cost-147b|title=Project Jewel at Changi Airport to cost $1.47b|last=migration|date=20 December 2013|work=The Straits Times|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117190536/http://www.straitstimes.com/singapore/project-jewel-at-changi-airport-to-cost-147b|archive-date=17 January 2018|url-status=live}}</ref> The project cost S$1.7&nbsp;billion<ref>{{Cite news|url=http://www.straitstimes.com/singapore/transport/work-on-changi-airports-jewel-project-and-t1-expansion-begins|title=Work on Changi Airport's Jewel project and T1 expansion begins|author=Karamjit Kaur |date=5 December 2014 |work=The Straits Times|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117190441/http://www.straitstimes.com/singapore/transport/work-on-changi-airports-jewel-project-and-t1-expansion-begins|archive-date=17 January 2018|url-status=live}}</ref> and did not involve any government funds or taxpayer money, despite both entities being either wholly or partially owned by [[Temasek Holdings]], the state-owned investment company.<ref>{{cite web |title=Clarification on funding of Jewel Changi Airport |url=https://www.gov.sg/article/clarification-on-funding-of-jewel-changi-airport |website=gov.sg |access-date=28 August 2020 |date=30 June 2020}}</ref> {{clear left}} ==Design and development== Jewel's [[toroid]]al glass-and-steel façade was designed by a consortium of architects, led by [[Moshe Safdie]],<ref name="TODAYonline" /> who also designed Singapore's [[Marina Bay Sands]].<ref>{{Cite news|url=https://www.vanityfair.com/culture/2012/06/moshe-safdie-architecture-of-today-bilbao-effect|title=Architect Moshe Safdie on the "Bilbao Effect"|last=Heilpern|first=John|magazine=Vanity Fair|access-date=9 January 2018|archive-url=https://web.archive.org/web/20160414083814/https://www.vanityfair.com/culture/2012/06/moshe-safdie-architecture-of-today-bilbao-effect|archive-date=14 April 2016|url-status=live}}</ref> Local firm [[RSP Architects Planners & Engineers]] were the executive architects and structural engineers.<ref>{{Cite news|url=http://www.rsp.com.sg/home|title=Home {{!}} RSP |work=rsp.com.sg |access-date=17 April 2019|archive-url=https://web.archive.org/web/20190417032534/http://www.rsp.com.sg/home|archive-date=17 April 2019|url-status=dead }}</ref> The landscape architect was [[Peter Walker (landscape architect)|PWP Landscape Architecture]],<ref>{{Cite web|url=http://www.pwpla.com/projects/jewel-changi-airport|title=Jewel Changi Airport |website=PWP Landscape Architecture |access-date=17 April 2018|archive-url=https://web.archive.org/web/20180418092813/http://www.pwpla.com/projects/jewel-changi-airport|archive-date=18 April 2018|url-status=live}}</ref> who co-designed the [[National 9/11 Memorial]] in New York City and worked with Safdie on the landscaping of Marina Bay Sands. [[Benoy]] were the interior designers, [[BuroHappold Engineering]] were responsible for the façade, and Lighting Planners Associates handled the lighting.<ref>{{cite web |url-status=live |url=https://www.architectmagazine.com/project-gallery/jewel-changi-airport_o |title=Jewel Changi Airport |archive-url=https://web.archive.org/web/20190520104435/https://www.architectmagazine.com/project-gallery/jewel-changi-airport_o |archive-date=20 May 2019 |date= 6 May 2019 |website=Architect Magazine }}</ref> The Rain Vortex was engineered by water design firm [[WET Design]]; it has a 360-degree light and sound show projected onto it.<ref>{{cite web |url-status=live |url=https://www.dezeen.com/2019/03/12/moshe-safdie-worlds-tallest-indoor-waterfall-changi-airport/ |title=World's tallest indoor waterfall inside Safdie Architects' Singapore airport building |archive-url=https://web.archive.org/web/20190702011249/https://www.dezeen.com/2019/03/12/moshe-safdie-worlds-tallest-indoor-waterfall-changi-airport/ |archive-date=2 July 2019 |website= Dezeen |date=12 March 2019 |first1=India |last1=Block }}</ref> Jewel was envisioned to combine a marketplace and an urban park. "The component of the traditional mall is combined with the experience of nature, culture, education, and recreation, aiming to provide an uplifting experience. By drawing both visitors and local residents alike, we aim to create a place where the people of Singapore interact with the people of the world", said Safdie.<ref>{{Cite news |first1=Anna |last1=Winston |url=https://www.dezeen.com/2014/12/05/moshe-safdie-huge-greenhouse-singapore-changi-airport/|title=Safdie reveals greenhouse for Singapore's Changi airport|date=5 December 2014|work=Dezeen|access-date=9 January 2018|archive-url=https://web.archive.org/web/20170703022726/https://www.dezeen.com/2014/12/05/moshe-safdie-huge-greenhouse-singapore-changi-airport/|archive-date=3 July 2017|url-status=live}}</ref> The glass panels of the dome are framed in steel that rests on a complex latticework.<ref>{{Cite news|url=http://inhabitat.com/moshe-safdies-jewel-changi-airport-biodome-breaks-ground-in-singapore/moshe-safdie-architects-jewel-changi-airport-6/|title=Moshe Safdie's Jewel Changi Airport biodome breaks ground in Singapore|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180118010506/https://inhabitat.com/moshe-safdies-jewel-changi-airport-biodome-breaks-ground-in-singapore/moshe-safdie-architects-jewel-changi-airport-6/|archive-date=18 January 2018|url-status=live}}</ref> At night, the glowing dome is visible from surrounding areas.<ref>{{Cite web|url=https://apex.aero/2016/09/20/changi-airport-singapore-crown-jewel|title=Changi Airport: Singapore's Crown Jewel|website=apex.aero|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117133414/https://apex.aero/2016/09/20/changi-airport-singapore-crown-jewel|archive-date=17 January 2018|url-status=live}}</ref> ==Attractions== ===Forest Valley=== [[File:JewelSingaporeVortex1.jpg|thumb|Forest Valley to the left and right]] The Forest Valley is one of Asia's largest indoor gardens, spanning five stories and approximately {{convert|22,000|m2}}, located in the heart of Jewel Changi Airport. It houses around 3,000 trees and 60,000 shrubs of 120 species that live in high-altitude tropical forests around the world.<ref name=":1" /><ref>{{cite web|url=https://www.teamlab.art/w/resonatingforest-jewel/|title=Resonating Forest – Shiseido Forest Valley at Jewel Changi Airport – teamLab / チームラボ|website=Resonating Forest – Shiseido Forest Valley at Jewel Changi Airport – teamLab / チームラボ|access-date=27 May 2019|archive-url=https://web.archive.org/web/20190525143643/https://www.teamlab.art/w/resonatingforest-jewel/|archive-date=25 May 2019|url-status=live}}</ref><ref>{{cite web|url=http://www.shiseidogroup.com/news/detail.html?n=00000000002682|title=Shiseido Opens Shiseido Forest Valley at Jewel Changi Airport |website=News Release – Shiseido group website|access-date=27 May 2019}}</ref> It was conceived and designed by PWP Landscape Architecture. ===Rain Vortex=== [[File:At Jewel Changi, Singapore 2023 36.jpg|thumb|Rain Vortex in 2023]] The Rain Vortex is the world's largest and tallest [[Artificial waterfall#Indoor waterfalls|indoor waterfall]], standing at {{convert|40|m}} high.<ref>{{Cite news|url=https://www.nytimes.com/2019/04/11/travel/singapores-changi-airport-jewel.html|title=At Singapore's Changi Airport, a New Jewel Shines|last=Surana|first=Sanjay|date=11 April 2019|work=The New York Times|access-date=12 April 2019|archive-url=https://web.archive.org/web/20190412225925/https://www.nytimes.com/2019/04/11/travel/singapores-changi-airport-jewel.html|archive-date=12 April 2019|issn=0362-4331|url-status=live}}</ref> Recirculating rain water is pumped to the roof to freefall through a round hole at up to {{Convert|37850|liters||abbr=out}} per minute to a basement-level pool.<ref name=":1">{{Cite web|url=https://infographics.channelnewsasia.com/jewel-changi-airport/index.html|title=Inside Jewel Changi Airport: An interactive special|website=CNA|access-date=15 September 2019}}</ref> An [[Acrylate polymer|acrylic]] funnel at the bottom prevents splashing and insulates the sound of the cascade. The toroid-shaped roof has more than 9,000 pieces of glass spanning {{convert|200|by|150|meters}},<ref name=":1" /> with a sloped [[Oculus (architecture)|oculus]] as the mouth of the waterfall acting as "a continuation of the building... completed in a liquid form".<ref>{{Cite web|url=https://www.cnbc.com/2019/04/12/singapores-changi-airport-touts-the-worlds-tallest-indoor-waterfall.html|title=Singapore's Changi Airport, called the world's best airport, now touts the world's tallest indoor waterfall|last=Baskas|first=Harriet|date=14 April 2019|website=CNBC|access-date=6 November 2019}}</ref> At night, the circular walls of the waterfall become a 360-degree stage for a light-and-sound show.<ref name="jewelchangi">{{Cite news|url=http://www.straitstimes.com/singapore/6-things-you-shouldnt-miss-when-visiting-jewel-changi-airport|title=Jewel Changi Airport: 6 things you should not miss|last=Kaur|first=Karamjit|date=7 June 2017|work=The Straits Times|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180109031255/http://www.straitstimes.com/singapore/6-things-you-shouldnt-miss-when-visiting-jewel-changi-airport|archive-date=9 January 2018|url-status=live}}</ref> To prevent excess humidity in the Jewel, the waterfall's flow alternates between cascades and trickles that reduce air turbulence. The design process, by WET Design engineers, included testing a one-fifth-scale model and a full-size partial prototype.<ref>{{Cite news|url=https://www.wired.com/2016/09/fit-worlds-biggest-indoor-waterfall-airport/|title=How to Fit the World's Biggest Indoor Waterfall in an Airport|last=Zhang|first=Sarah|date=7 September 2016|magazine=Wired|access-date=29 October 2019|issn=1059-1028}}</ref> The [[Changi Airport Skytrain]] connecting the terminals passes above ground near the waterfall, allowing passengers remaining [[Airport#Landside and airside areas|airside]] to see the Vortex and Jewel itself.<ref>{{cite web|title=Getting between Terminal 2 & Terminal 3|url=http://www.changiairport.com/getting-around/getting-around-the-airport/inter-terminal-transfer|access-date=6 April 2015|archive-url=https://web.archive.org/web/20150401061404/http://www.changiairport.com/getting-around/getting-around-the-airport/inter-terminal-transfer|archive-date=1 April 2015|url-status=dead}}</ref> ===Canopy Park=== [[File:At Jewel Changi, Singapore 2023 47.jpg|thumb|Topmost level at Jewel Changi]] At the topmost level of Jewel, the {{convert|14,000|m2|adj=on}} Canopy Park houses recreation and leisure attractions.<ref>{{Cite news|url=http://www.todayonline.com/singapore/jewel-changi-airport-set-dazzle-crowds-early-2019|title=Canopy bridge, mazes among features at Changi Airport's S$1.7 billion Jewel|work=TODAYonline|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180116070933/http://www.todayonline.com/singapore/jewel-changi-airport-set-dazzle-crowds-early-2019|archive-date=16 January 2018|url-status=live}}</ref> About half of the total landscaping is hosted at Canopy Park, including two gardens: Topiary Walk and Petal Garden.<ref name="Planet" /> The Topiary Walk features animal-shaped [[Topiary|topiaries]] at every corner, while the Petal Garden has seasonal floral displays. The park includes a [[suspension bridge]] called the [[Mastercard]] Canopy Bridge,<ref>{{Cite web |title=Jewel Changi Airport Mastercard® Canopy Bridge |url=https://specials.priceless.com/en-ap/offers/Jewel_Changi_Airport_Mastercard%C2%AE_Canopy_Bridge?Oid=202212090002&issuerId=&productId= |access-date=19 April 2025 |work=Priceless Specials}}</ref> located {{convert|23|metres}} above the ground and offering a panoramic view of the Rain Vortex. At {{convert|50|metres}} long, the bridge also has a glass-panel floor at the centre section that offers a view down to level 1 of Jewel. The park also consists of two mazes, situated at the eastern end of the Jewel, called the Hedge Maze and Mirror Maze.<ref name=":1" /><ref>{{Cite web|url=https://funsandfacts.com/singapore-jewel-changi-airport-tourist-attraction/|title=Singapore Jewel Changi Airport tourist attractions|work= funsandfacts|date=30 April 2020|access-date=12 July 2020|archive-url=https://web.archive.org/web/20200711191329/https://funsandfacts.com/singapore-jewel-changi-airport-tourist-attraction/|archive-date=11 July 2020|url-status=live}}</ref> The Hedge Maze is Singapore's largest, with hedge walls standing at {{convert|1.8|m}} high. The maze features gates that can be pushed inward and thus change the path of the maze. It ends at an elevated watchtower that offers a bird's-eye view of the entire maze. The Mirror Maze is located under the dome, with plants branching across the top. It makes use of mirrors and various reflections.<ref name="jewelchangi" /><ref>{{Cite news|url=http://www.channelnewsasia.com/news/singapore/changi-airport-unveils-14-000%C2%A0m%C2%B2-canopy-park-at-jewel-8923932|title=Changi Airport unveils 14,000&nbsp;m² Canopy Park at Jewel|work=Channel NewsAsia|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180118011225/https://www.channelnewsasia.com/news/singapore/changi-airport-unveils-14-000%C2%A0m%C2%B2-canopy-park-at-jewel-8923932|archive-date=18 January 2018|url-status=dead}}</ref> * '''Bouncing and Walking Nets''' – The Bouncing Net is {{convert|250|metres}} long, suspended 8 metres above ground at its highest point.<ref name="jewelchangi" /> A separate {{convert|50|metre}}-long Walking Net enables visitors to look down {{convert|25|metre}} to Jewel's level 1.<ref name="Planet">{{Cite web|url=https://www.lonelyplanet.com/news/2017/06/09/singapores-jewel-changi-canopy-park/|title=Inside Canopy Park at Singapore's Jewel Changi Airport|last=Planet|first=Lonely|website=lonelyplanet.com|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180117132649/https://www.lonelyplanet.com/news/2017/06/09/singapores-jewel-changi-canopy-park/|archive-date=17 January 2018|url-status=live}}</ref> * '''Discovery Slides''' – the Discovery Slides feature four integrated slides: two tube slides and two sliding surfaces.<ref name="jewelchangi" /> The entire structure sits at an incline, {{convert|3|m}} high on one end, and close to {{convert|7|m}} on the other,<ref name="Channel NewsAsia">{{Cite news|url=http://www.channelnewsasia.com/news/singapore/changi-airport-unveils-14-000%C2%A0m%C2%B2-canopy-park-at-jewel-8923932|title=Changi Airport unveils 14,000&nbsp;m² Canopy Park at Jewel|work=Channel NewsAsia|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180118011225/https://www.channelnewsasia.com/news/singapore/changi-airport-unveils-14-000%C2%A0m%C2%B2-canopy-park-at-jewel-8923932|archive-date=18 January 2018|url-status=dead}}</ref> and enables visitors to view the Forest Valley and the Rain Vortex.<ref>{{Cite news|url=http://www.businessinsider.sg/singapore-changi-airport-jewel-rainforest-waterfall-2017-6/|title=The best airport in the world is building a $1.7 billion indoor forest and waterfall|last=Zhang|first=Benjamin Zhang|date=9 June 2017|work=Business Insider Singapore|access-date=17 January 2018|archive-url=https://web.archive.org/web/20180117131456/http://www.businessinsider.sg/singapore-changi-airport-jewel-rainforest-waterfall-2017-6/|archive-date=17 January 2018|url-status=live}}</ref> The Discovery Slides were designed by Carve and built by Playpoint in Singapore.<ref name="jewelchangi" /> * '''Foggy Bowls''' – the Foggy Bowls are four concave bowls with depths of between {{convert|30|cm}} and {{convert|65|cm}} for people to jump in while mist is released to create an illusion of playing among clouds.<ref name="jewelchangi" /> ===Changi Experience Studio=== The Changi Experience Studio is a {{convert|3,000|m2|adj=on}} space with interactive games and displays relating to the airport's history that allows visitors a behind-the-scenes look at how the facility is run.<ref name="jewelchangi" /> ==Facilities== ===Hotel=== [[Yotel]] operates a hotel within Jewel, with approximately 130 rooms, which opened on 12 April 2019.<ref name="CNN Travel">{{Cite news|url=https://edition.cnn.com/travel/article/singapores-jewel-changi/index.html|title=Singapore's Jewel Changi: World's most awesome airport?|date=9 December 2014|work=CNN Travel|access-date=9 January 2018|url-status=live|archive-url=https://web.archive.org/web/20180117132006/http://edition.cnn.com/travel/article/singapores-jewel-changi/index.html|archive-date=17 January 2018}}</ref><ref name="YOTEL">{{Cite news|url=https://www.straitstimes.com/business/property/microhotel-chain-yotel-to-open-at-jewel-changi-airport-on-april-12|title=Micro-hotel chain Yotel to open at Jewel Changi Airport on April 12|date=8 March 2019|work=The Straits Times|access-date=9 March 2019|url-status=live|archive-url=https://web.archive.org/web/20190309081757/https://www.straitstimes.com/business/property/microhotel-chain-yotel-to-open-at-jewel-changi-airport-on-april-12|archive-date=9 March 2019}}</ref> ===Aviation facilities=== An "integrated multi-modal transport lounge" provides ticketing, boarding pass collection, and baggage transfer service in a single location. Early check-in facilities enable passengers to drop off luggage up to 24 hours ahead of regular check-in times.<ref name="CNN Travel" /> ===Retail=== [[File:Pokemon Center Singapore.jpg|thumb|Pokémon Centre Singapore]] Jewel houses both local and international brands, such as the first [[Apple Store]] located inside an airport complex<ref>{{Cite web|url=https://www.straitstimes.com/tech/first-apple-store-inside-an-airport-complex-to-open-this-saturday-at-jewel-changi-airport|title=First Apple store inside an airport complex to open on Saturday at Jewel Changi Airport|last=Tan|first=Trevor|date=11 July 2019|website=The Straits Times|access-date=20 October 2019}}</ref> and the first permanent [[Pokémon Center]] in Asia outside of Japan. Other tenants include: [[Muji]], [[Zara (retailer)|Zara]], [[Uniqlo]], [[Don Quijote (store)|Don Don Donki]], [[Massimo Dutti]], a [[Shaw Organisation|Shaw Theatres]] cinema that includes an [[IMAX]] theatre, a [[NTUC FairPrice|FairPrice Finest]] supermarket, as well as a food court.<ref>{{Cite web|last=Lin|first=Jessica|title=Singapore's S$1.7 billion Jewel Changi opens on Apr 17 – but there's a way to get inside before everyone else does, Business Insider – Business Insider Singapore|url=https://www.businessinsider.sg/singapores-s1-7-billion-jewel-changi-opens-on-apr-17-but-theres-a-way-to-get-inside-before-everyone-else-does/|url-status=dead|archive-url=https://web.archive.org/web/20190828023006/https://www.businessinsider.sg/singapores-s1-7-billion-jewel-changi-opens-on-apr-17-but-theres-a-way-to-get-inside-before-everyone-else-does/|archive-date=28 August 2019|access-date=20 October 2019|website=businessinsider.sg}}</ref> Jewel has a lineup of [[athleisure]] brands, such as [[Nike, Inc.|Nike]], [[Adidas]], [[Descente]], [[On (company)|On]], [[Fila]], and [[New Balance]]. It also features a mix of local and international and local restaurant chains, such as [[A&W Restaurants]],<ref>{{Cite web |last=Goldberg |first=Eddy |title=A&W Restaurants Returns to Singapore After 16 Years Away |url=https://www.franchising.com/articles/aw_restaurants_returns_to_singapore_after_16_years_away.html |access-date=30 April 2023 |website=franchising.com}}</ref> [[Jumbo Seafood]], [[Shake Shack]], [[Bee Cheng Hiang]], [[Bengawan Solo (company)|Bengawan Solo]], [[Ya Kun Kaya Toast]], and Irvins.<ref>{{Cite news|url=https://www.straitstimes.com/singapore/transport/coming-soon-cinema-at-changis-jewel|title=Coming soon to Changi Airport's Jewel: Cinema, fast-food chain A&W|date=15 July 2018|work=The Straits Times|access-date=16 July 2018|archive-url=https://web.archive.org/web/20180716170129/https://www.straitstimes.com/singapore/transport/coming-soon-cinema-at-changis-jewel|archive-date=16 July 2018|url-status=live}}</ref><ref>{{Cite news|url=https://www.channelnewsasia.com/news/singapore/jewel-changi-airport-a-w-pokemon-shaw-theatres-among-tenants-10815310|title=Jewel Changi Airport tenants to include A&W, Pokemon, Shaw Theatres|date=12 October 2018|work=Channel NewsAsia|access-date=12 October 2018|archive-url=https://web.archive.org/web/20181012122807/https://www.channelnewsasia.com/news/singapore/jewel-changi-airport-a-w-pokemon-shaw-theatres-among-tenants-10815310|archive-date=12 October 2018|url-status=live}}</ref><ref>{{Cite news|url=https://www.jewelchangiairport.com/content/dam/jca-project/documents/Media%20Release%20-%20Jewel%20Changi%20Airport%20Retail%20Update.pdf|title=Close to 90% of Jewel Changi Airport's retail space leased to date with unique experiential retail concepts|date=11 October 2018|work=Jewel Changi Airport|access-date=15 October 2018|archive-url=https://web.archive.org/web/20190327085640/https://www.jewelchangiairport.com/content/dam/jca-project/documents/Media%20Release%20-%20Jewel%20Changi%20Airport%20Retail%20Update.pdf|archive-date=27 March 2019|url-status=dead}}</ref><ref>{{Cite news|url=https://www.jewelchangiairport.com/content/dam/jca-project/documents/Burger_Lobster_to_launch_at_Jewel_Changi_Airport.pdf|title=Burger & Lobster to launch at Jewel Changi Airport|date=31 January 2019|work=Jewel Changi Airport|access-date=4 March 2019|archive-url=https://web.archive.org/web/20190327085800/https://www.jewelchangiairport.com/content/dam/jca-project/documents/Burger_Lobster_to_launch_at_Jewel_Changi_Airport.pdf|archive-date=27 March 2019|url-status=live}}</ref><ref>{{Cite news|url=https://www.straitstimes.com/tech/apple-to-open-2-more-stores-here-sources|title=Apple to open 2 more stores here: Sources|date=27 March 2019|work=The Straits Times|access-date=28 March 2019|archive-url=https://web.archive.org/web/20190328082523/https://www.straitstimes.com/tech/apple-to-open-2-more-stores-here-sources|archive-date=28 March 2019|url-status=live}}</ref><ref>{{Cite news|url=https://www.jewelchangiairport.com/en/dine/tokyo-milk-cheese-factory-cow-cow-kitchen.html|title=Tokyo Milk Cheese Factory & Cow Cow Kitchen|date=23 June 2019|work=Jewel Changi Airport|access-date=23 June 2019|archive-url=https://web.archive.org/web/20190623093435/https://www.jewelchangiairport.com/en/dine/tokyo-milk-cheese-factory-cow-cow-kitchen.html|archive-date=23 June 2019|url-status=live}}</ref> ==Awards== Jewel Changi Airport was accorded the 2016 International Architecture Award by the [[Chicago Athenaeum]], an international museum of architecture and design.<ref>{{Cite news|url=http://www.channelnewsasia.com/news/singapore/jewel-changi-airport-wins-international-architecture-award-7927210|title=Jewel Changi Airport wins International Architecture Award|work=Channel NewsAsia|access-date=9 January 2018|archive-url=https://web.archive.org/web/20180118010644/https://www.channelnewsasia.com/news/singapore/jewel-changi-airport-wins-international-architecture-award-7927210|archive-date=18 January 2018|url-status=live}}</ref> In November 2019, the airport received the Special Jury Award at that year's [[Mapic]] Awards.<ref>{{Cite web|title=Changi's Jewel shines with global award; it is the top pick of international retail real estate experts|url=https://www.straitstimes.com/singapore/changis-jewel-shines-with-global-award-it-is-the-top-pick-of-international-retail-real|last=Ang|first=Prisca|date=15 November 2019|website=The Straits Times|access-date=20 May 2020}}</ref> In 2024, it was publicly voted "My Favourite Shopping Mall" by the Singapore Retailers Association at the SRA Retail Awards.<ref>{{Cite news |title=Jewel Changi Airport crowned 'My Favourite Shopping Mall' by the Singapore Retailers Association at the SRA Retail Awards 2024 |url=https://www.linkedin.com/posts/jewel-changi-airport_jewelchangiairport-whatafeelin5-activity-7260238692202536960-cZlM/ | access-date=10 May 2025}}</ref> Jewel Changi Airport also received [[Tripadvisor]]'s 2025 Travellers' Choice Award, based on reviews from millions of travellers, ranking the airport among the top 10% worldwide.<ref>{{Cite web |title=Jewel Changi Airport (2025) All You Need to Know Before You Go (with Reviews) |url=https://www.tripadvisor.com.sg/Attraction_Review-g294265-d17237163-Reviews-Jewel_Changi_Airport-Singapore.html |archive-url=https://web.archive.org/web/20250317141907/https://www.tripadvisor.com.sg/Attraction_Review-g294265-d17237163-Reviews-Jewel_Changi_Airport-Singapore.html |archive-date=17 March 2025 |access-date=13 August 2025 |website=Tripadvisor |url-status=live }}</ref> ==In popular culture== The song "The Right Time" by Singaporean singer [[JJ Lin]] was inspired by Jewel, which was featured in the music video.<ref>{{Cite news|url=https://www.businessinsider.sg/jj-lin-was-blown-away-when-he-saw-jewels-waterfall-and-now-theres-a-song-about-it/|title=JJ Lin was blown away when he saw Jewel's waterfall – and now there's a song about it|work=Business Insider|access-date=22 August 2019|archive-url=https://web.archive.org/web/20190822091849/https://www.businessinsider.sg/jj-lin-was-blown-away-when-he-saw-jewels-waterfall-and-now-theres-a-song-about-it/|archive-date=22 August 2019|url-status=live}}</ref><ref>{{Cite news|url=https://www.straitstimes.com/lifestyle/entertainment/high-flier-jj-lin-salutes-changi-airports-jewel-with-new-song-called-the|title=High-flier JJ Lin salutes Changi Airport's Jewel with new song called The Right Time|work=The Straits Times|access-date=22 August 2019|archive-url=https://web.archive.org/web/20190822071458/https://www.straitstimes.com/lifestyle/entertainment/high-flier-jj-lin-salutes-changi-airports-jewel-with-new-song-called-the|archive-date=22 August 2019|url-status=live}}</ref> It also appeared in [[Coldplay]]'s music video for the 2024 song "[[Moon Music#Full Moon edition|Man in the Moon]]"<ref>{{Cite web |title=Coldplay Debuts 'Man in the Moon' Music Video Filmed in Singapore |url=https://www.stb.gov.sg/about-stb/media-publications/media-centre/coldplay-debuts--man-in-the-moon--music-video--filmed-in-singapore |access-date=19 February 2025 |website=Singapore Tourism Board}}</ref> and the fourth-season finale of "[[Hacks (TV series)|Hacks]]".<ref>{{Cite web |title=Season finale of Max comedy series Hacks was filmed in Singapore |url=https://cnalifestyle.channelnewsasia.com/entertainment/hacks-season-four-finale-shot-singapore-465786 |access-date=24 March 2026 |website=CNA Lifestyle}}</ref> ==See also== {{Portal|Architecture|Singapore}} * [[Infrastructure of Singapore Changi Airport]] ==References== {{Reflist}} ==External links== {{Commons category}} * {{official website|jewelchangiairport.com}} {{Changi Airport}} {{Major Tourist Attractions in Singapore}} {{Singapore malls}} {{Authority control}} [[Category:Airport terminals]] [[Category:Changi Airport]] [[Category:Tourist attractions in Singapore]] [[Category:2019 establishments in Singapore]] [[Category:Neo-futurist architecture]] [[Category:CapitaLand]] [[Category:Buildings and structures completed in 2019]] ckbzevesrednpkf6lc41cp01s3kq1fj Template:Infobox building 10 176064 746257 2026-05-23T16:52:31Z en>Zackmann08 0 Reducing [[WP:OVERLINKING]] 746257 wikitext text/x-wiki {{main other|{{#if:{{#invoke:Is infobox in lead|main|[Ii]nfobox [Bb]uilding}}|{{#if:{{Has short description}} |<!--Do nothing--> |{{#invoke:Type in location|main|{{if empty|{{{building_type|}}}|Building}}|{{comma separated entries |1= {{if empty|{{{location|}}}|{{{address|}}}}} |2= {{if empty|{{{location_town|}}}|{{{location_city|}}}}} |3= {{{location_country|}}} }}}}}}}}}}{{Infobox | child = {{#ifeq:{{{embed|}}}|yes|yes}} | autoheaders = yes | bodyclass = vcard | aboveclass = fn org | headerstyle = {{#ifeq:{{{embed|}}}|yes||background-color:#ededed;color:#000;}} | title = {{#ifeq:{{{embed|}}}|yes|<div style="font-weight:bold; text-align:center;">Building details</div>}} | above = {{if empty|{{{name|}}}|<includeonly>{{PAGENAMEBASE}}</includeonly>}} | subheader = {{#if:{{{native_name|}}}|<div class="nickname" {{#if:{{{native_name_lang|}}}| lang="{{{native_name_lang}}}"}}>{{{native_name}}}</div>}} | imagestyle = text-align: center | captionstyle = text-align: center | image1 = {{#invoke:InfoboxImage|InfoboxImage|image={{{logo|}}}|size={{{logo_size|}}}|sizedefault=250px|upright={{if empty|{{{logo_upright|}}}|1.1}}|alt={{{logo_alt|}}}}} | caption1 = {{{logo_caption|}}} | image2 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|size={{{image_size|}}}|sizedefault=250px|upright={{if empty|{{{image_upright|}}}|1.1}}|alt={{if empty|{{{image_alt|}}}|{{{alt|}}}}}}} | caption2 = {{if empty|{{{caption|}}}|{{{image_caption|}}}}} | image3 = {{#if:{{{pushpin_map|}}}|{{Location map|{{{pushpin_map|}}} |alt = {{{pushpin_map_alt|}}} |coordinates = {{{coordinates|}}} |float = center |mark = {{if empty|{{{pushpin_mark|}}}|Red pog.svg}} |marksize= 7 |label = {{{pushpin_label|}}} |relief = {{{pushpin_relief|}}} |border = infobox |caption = {{if empty|{{{pushpin_map_caption|}}}|Location within {{#invoke:Location map|data|{{{pushpin_map|}}}|name}}}} |width = {{{pushpin_mapsize|}}} }} |<!-- else if map_type is blank -->{{#invoke:InfoboxImage|InfoboxImage|image={{{image_map|}}}|size={{{map_size|}}}|sizedefault=250px|alt={{{map_alt|}}}}}<!-- end if map_type -->}} | caption3 = {{#if:{{{pushpin_map|}}} |<!-- leave blank -->| {{{map_caption|}}} }} | image4 = {{#invoke:Infobox mapframe | autoWithCaption | onByDefault = {{#if:{{{pushpin_map|}}}{{{image_map|}}}{{{embed|}}}|no|yes}} | mapframe-frame-width = 250 | mapframe-wikidata = yes | mapframe-type = landmark | mapframe-marker = building | mapframe-marker-color = #919090 | mapframe-stroke-color = #525252 | mapframe-stroke-width = 3 | mapframe-shape-fill = #dbdbdb | mapframe-caption = Interactive map of the {{if empty|{{{name|}}}|{{PAGENAMEBASE}}}} area }} | label1 = Former names | data1 = {{if empty|{{{former_names|}}}|{{{former_name|}}}}} | class1 = nickname | label2 = Alternative names | data2 = {{if empty|{{{alternate_names|}}}|{{{alternate_name|}}}}} | class2 = nickname | label3 = Etymology | data3 = {{{etymology|}}} | label4 = Hotel chain | data4 = {{{hotel_chain|}}} | header5 = Record height | data6 = {{#if:{{{highest_start|}}}{{{highest_end|}}} |Tallest in {{if empty|{{{highest_region|}}}|the world}}<!-- --> {{#if:{{both|{{{highest_start|}}}|{{{highest_end|}}}}} |from {{{highest_start|}}} to {{{highest_end|}}} |{{#if:{{{highest_start|}}}|since {{{highest_start}}} }}<!-- -->{{#if:{{{highest_end|}}}|until {{{highest_end}}} }}<!-- -->}}{{ref label|{{if empty|{{{highest_reflabel|}}}|talleststatus}}|I|}} }} | label7 = Preceded by | data7 = {{{highest_prev|}}} | label8 = Surpassed by | data8 = {{{highest_next|}}} | header9 = General information | label10 = Status | class10 = category | data10 = {{#if:{{{status|}}}|{{#switch:{{lc:{{{status|}}}}} | built | completed | finished | complete = Completed | destroyed = Destroyed | demolished = Demolished | on hold = On hold | incomplete | unfinished | under construction = Under construction | cancelled | canceled | never built = Never built | topped out | topped-out = [[Topping out|Topped-out]] | planned | proposed = Proposed | approved = Approved | #default = {{{status|}}} }}|{{#if:{{{cancelled|}}}{{{canceled|}}}|Never built|{{#if:{{{topped_out|}}}|[[Topping out|Topped-out]]}} }} }} | label11 = Type | data11 = {{{building_type|}}} | class11 = category | label12 = Architectural style | data12 = {{{architectural_style|}}} | class12 = category | label13 = Classification | data13 = {{{classification|}}} | class13 = category | class14 = label | label14 = Location | data14 = {{csv|{{{location|}}}|{{{address|}}}|{{{location_town|}}}|{{{location_city|}}}|{{{location_country|}}}}} | label18 = Coordinates | data18 = {{#if:{{{coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates|}}}|type:landmark|{{#if:{{{location_country|}}}|region:{{Country abbreviation|{{{location_country}}}}}}}}}|}} | label19 = {{if empty|{{{grid_name|}}}|Grid&nbsp;position}} | data19 = {{{grid_position|}}} | label20 = Elevation | data20 = {{{altitude|}}} | label21 = Current tenants | data21 = {{{current_tenants|}}} | label22 = Named for | data22 = {{{namesake|}}} | label23 = Year{{pluralize from text|{{{years_built|}}}|plural=s}} built | data23 = {{{years_built|}}} | label24 = Groundbreaking | data24 = {{{groundbreaking_date|}}} | label25 = Construction started | data25 = {{{construction_start_date|}}} | label26 = Construction stopped | data26 = {{{construction_stop_date|}}} | label27 = Topped-out | data27 = {{{topped_out_date|}}} | rowclass28= note | label28 = {{#if:{{{est_completion|}}}|Estimated completion|{{#if:{{{completion_date|}}}|Completed}} }} | data28 = {{if empty|{{{est_completion|}}}|{{{completion_date|}}} }} | label29 = {{#if:{{{opened_date|}}}|{{#iferror:{{#ifexpr: {{#time:U|{{Plain text|1={{MultiReplace|1={{{opened_date}}}|2=%<.*%>|3=|4=%s|5=}}}}}}>{{#time:U}} |Opening|Opened}}|Opened}}|Opening}} | data29 = {{if empty|{{{opened_date|}}}|{{{opening_date|}}}}} | label30 = Inaugurated | data30 = {{{inauguration_date|}}} | label31 = Relocated | data31 = {{{relocated_date|}}} | label32 = Renovated | data32 = {{{renovation_date|}}} | label33 = Closed | data33 = {{{closing_date|}}} | rowclass34= note | label34 = Destroyed | data34 = {{{destruction_date|}}} | label35 = Demolished | data35 = {{{demolished_date|}}} | label36 = Cost | data36 = {{{cost|}}} | label37 = Renovation cost | data37 = {{{ren_cost|}}} | label38 = Client | data38 = {{{client|}}} | label39 = Owner | data39 = {{{owner|}}} | label40 = {{#if:{{{governing_body|}}}|Governing body|{{#if:{{{landlord|}}}|Landlord|Operator}}}} | data40 = {{if empty|{{{governing_body|}}}|{{{landlord|}}}|{{{operator|}}}}} | label41 = Affiliation | data41 = {{{affiliation|}}} | header42 = Height | label43 = Height | data43 = {{{height|}}} | label44 = Architectural | data44 = {{{architectural|}}} | label45 = Tip | data45 = {{{tip|}}} | label46 = Antenna spire | data46 = {{{antenna_spire|}}} | label47 = Roof | data47 = {{{roof|}}} | label48 = Top floor | data48 = {{{top_floor|}}} | label49 = Observatory | data49 = {{{observatory|}}} | header50 = Dimensions | label51 = Diameter | data51 = {{{diameter|}}} | label52 = Circumference | data52 = {{{circumference|}}} | label53 = Weight | data53 = {{{weight|}}} | label54 = Other dimensions | data54 = {{{other_dimensions|}}} | header55 = Technical details | label56 = Structural system | data56 = {{{structural_system|}}} | class56 = category | label57 = Material | data57 = {{{material|}}} | class57 = category | label58 = Size | data58 = {{{size|}}} | label59 = Floor count | data59 = {{{floor_count|}}} | label60 = Floor area | data60 = {{{floor_area|}}} | label61 = Lifts/elevators | data61 = {{{elevator_count|}}} | label62 = Grounds | data62 = {{{grounds_area|}}} | header63 = Design and construction | label64 = Architect{{pluralize from text|{{{architect|}}}|plural=s}} | data64 = {{{architect|}}} | label65 = Architecture firm | data65 = {{{architecture_firm|}}} | label66 = Developer | data66 = {{{developer|}}} | label67 = Engineer | data67 = {{{engineer|}}} | label68 = Structural engineer | data68 = {{{structural_engineer|}}} | label69 = Services engineer | data69 = {{{services_engineer|}}} | label70 = Civil engineer | data70 = {{{civil_engineer|}}} | label71 = Other designers | data71 = {{{other_designers|}}} | label72 = Quantity surveyor | data72 = {{{quantity_surveyor|}}} | label73 = Main contractor | data73 = {{if empty|{{{main_contractor|}}}|{{{main_contractors|}}}}} | rowclass74 = note | label74 = Awards and prizes | data74 = {{{awards|}}} | label75 = Designations | data75 = {{{designations|}}} | label76 = Known for | data76 = {{{known_for|}}} | header77 = Renovating team | rowclass78 = note | label78 = Architect{{pluralize from text|{{{ren_architect|}}}|plural=s}} | data78 = {{{ren_architect|}}} | label79 = Renovating firm | data79 = {{{ren_firm|}}} | label80 = Engineer | data80 = {{{ren_engineer|}}} | label81 = Structural engineer | data81 = {{{ren_str_engineer|}}} | label82 = Services engineer | data82 = {{{ren_serv_engineer|}}} | label83 = Civil engineer | data83 = {{{ren_civ_engineer|}}} | label84 = Other designers | data84 = {{{ren_oth_designers|}}} | label85 = Quantity surveyor | data85 = {{{ren_qty_surveyor|}}} | label86 = Main contractor | data86 = {{{ren_contractor|}}} | rowclass87 = note | label87 = Awards and prizes | data87 = {{{ren_awards|}}} | header88 = Other information | label89 = Seating type | data89 = {{{seating_type|}}} | label90 = Seating capacity | data90 = {{{seating_capacity|}}} | label91 = Number of stores | data91 = {{{number_of_stores|}}} | label92 = Number of anchors | data92 = {{{number_of_anchors|}}} | label93 = Number of {{#if:{{{number_of_units|}}}|units|rooms}} | data93 = {{if empty|{{{number_of_units|}}}|{{{number_of_rooms|}}}}} | label94 = Number of suites | data94 = {{{number_of_suites|}}} | label95 = Number of restaurants | data95 = {{{number_of_restaurants|}}} | label96 = Number of bars | data96 = {{{number_of_bars|}}} | label97 = Facilities | data97 = {{{facilities|}}} | label98 = Parking | data98 = {{{parking|}}} | label99 = Public transit access | data99 = {{{public_transit|}}} | header100 = Website | data101 = {{{website|}}} | header102 = _BLANK_ | data103 = {{{nrhp|}}} | data104 = {{{embedded|}}} | data105 = {{{module|}}} | header106 = References | data107 = {{{references|}}} | belowstyle = {{{belowstyle|}}} | below = {{{footnotes|}}} }}<!-- end of infobox -->{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox building with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox building]] with unknown parameter "_VALUE_"|ignoreblank=y|mapframe_args=y| address | affiliation | alt | alternate_name | alternate_names | altitude | antenna_spire | architect | architectural | architectural_style | architecture_firm | awards | belowstyle | building_type | canceled | cancelled | caption | circumference | civil_engineer | classification | client | closing_date | completion_date | construction_start_date | construction_stop_date | coordinates | cost | current_tenants | demolished_date | designations | destruction_date | developer | diameter | elevator_count | embed | embedded | engineer | est_completion | etymology | facilities | floor_area | floor_count | footnotes | former_name | former_names | governing_body | grid_name | grid_position | groundbreaking_date | grounds_area | height | highest_end | highest_next | highest_prev | highest_reflabel | highest_region | highest_start | hotel_chain | image | image_alt | image_caption | image_map | image_size | image_upright | inauguration_date | known_for | landlord | location | location_city | location_country | location_town | logo | logo_alt | logo_caption | logo_size | logo_upright | main_contractor | main_contractors | map_alt | map_caption | map_size | material | module | name | namesake | native_name | native_name_lang | nrhp | number_of_anchors | number_of_bars | number_of_restaurants | number_of_rooms | number_of_stores | number_of_suites | number_of_units | observatory | opened_date | opening_date | operator | other_designers | other_dimensions | owner | parking | public_transit | pushpin_label | pushpin_map | pushpin_map_alt | pushpin_map_caption | pushpin_mapsize | pushpin_mark | pushpin_relief | quantity_surveyor | references | relocated_date | ren_architect | ren_awards | ren_civ_engineer | ren_contractor | ren_cost | ren_engineer | ren_firm | ren_oth_designers | ren_qty_surveyor | ren_serv_engineer | ren_str_engineer | renovation_date | roof | seating_capacity | seating_type | services_engineer | size | status | structural_engineer | structural_system | tip | top_floor | topped_out | topped_out_date | website | weight | years_built }}<!-- -->{{main other|1={{#if:{{{topped_out|}}}|[[Category:Pages using infobox building with topped out]]}}{{#if:{{{canceled|}}}{{{cancelled|}}}|[[Category:Pages using infobox building with cancelled]]}}<!-- -->{{#if:{{both|{{{height|}}}|{{{architectural|}}}{{{tip|}}}{{{antenna_spire|}}}{{{roof|}}}{{{top_floor|}}}{{{observatory|}}}}}|[[Category:Pages using infobox building with parameter errors]]}} }}<!-- -->{{#invoke:Check for conflicting parameters|check | template = [[Template:Infobox building]] | cat = {{main other|Category:Pages using infobox building with conflicting parameters}} | former_names; former_name | caption; image_caption | alt; image_alt | alternate_names; alternate_name | est_completion; completion_date | opened_date; opening_date | governing_body; landlord; operator | main_contractor; main_contractors | number_of_units; number_of_rooms }}<noinclude> {{documentation}} </noinclude> 7q19wtfu0q3dcoa4k1dzb1hnohwyw0w 746258 746257 2026-06-12T21:56:12Z Robertsky 51025 1 revision imported from [[:en:Template:Infobox_building]] 746257 wikitext text/x-wiki {{main other|{{#if:{{#invoke:Is infobox in lead|main|[Ii]nfobox [Bb]uilding}}|{{#if:{{Has short description}} |<!--Do nothing--> |{{#invoke:Type in location|main|{{if empty|{{{building_type|}}}|Building}}|{{comma separated entries |1= {{if empty|{{{location|}}}|{{{address|}}}}} |2= {{if empty|{{{location_town|}}}|{{{location_city|}}}}} |3= {{{location_country|}}} }}}}}}}}}}{{Infobox | child = {{#ifeq:{{{embed|}}}|yes|yes}} | autoheaders = yes | bodyclass = vcard | aboveclass = fn org | headerstyle = {{#ifeq:{{{embed|}}}|yes||background-color:#ededed;color:#000;}} | title = {{#ifeq:{{{embed|}}}|yes|<div style="font-weight:bold; text-align:center;">Building details</div>}} | above = {{if empty|{{{name|}}}|<includeonly>{{PAGENAMEBASE}}</includeonly>}} | subheader = {{#if:{{{native_name|}}}|<div class="nickname" {{#if:{{{native_name_lang|}}}| lang="{{{native_name_lang}}}"}}>{{{native_name}}}</div>}} | imagestyle = text-align: center | captionstyle = text-align: center | image1 = {{#invoke:InfoboxImage|InfoboxImage|image={{{logo|}}}|size={{{logo_size|}}}|sizedefault=250px|upright={{if empty|{{{logo_upright|}}}|1.1}}|alt={{{logo_alt|}}}}} | caption1 = {{{logo_caption|}}} | image2 = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|size={{{image_size|}}}|sizedefault=250px|upright={{if empty|{{{image_upright|}}}|1.1}}|alt={{if empty|{{{image_alt|}}}|{{{alt|}}}}}}} | caption2 = {{if empty|{{{caption|}}}|{{{image_caption|}}}}} | image3 = {{#if:{{{pushpin_map|}}}|{{Location map|{{{pushpin_map|}}} |alt = {{{pushpin_map_alt|}}} |coordinates = {{{coordinates|}}} |float = center |mark = {{if empty|{{{pushpin_mark|}}}|Red pog.svg}} |marksize= 7 |label = {{{pushpin_label|}}} |relief = {{{pushpin_relief|}}} |border = infobox |caption = {{if empty|{{{pushpin_map_caption|}}}|Location within {{#invoke:Location map|data|{{{pushpin_map|}}}|name}}}} |width = {{{pushpin_mapsize|}}} }} |<!-- else if map_type is blank -->{{#invoke:InfoboxImage|InfoboxImage|image={{{image_map|}}}|size={{{map_size|}}}|sizedefault=250px|alt={{{map_alt|}}}}}<!-- end if map_type -->}} | caption3 = {{#if:{{{pushpin_map|}}} |<!-- leave blank -->| {{{map_caption|}}} }} | image4 = {{#invoke:Infobox mapframe | autoWithCaption | onByDefault = {{#if:{{{pushpin_map|}}}{{{image_map|}}}{{{embed|}}}|no|yes}} | mapframe-frame-width = 250 | mapframe-wikidata = yes | mapframe-type = landmark | mapframe-marker = building | mapframe-marker-color = #919090 | mapframe-stroke-color = #525252 | mapframe-stroke-width = 3 | mapframe-shape-fill = #dbdbdb | mapframe-caption = Interactive map of the {{if empty|{{{name|}}}|{{PAGENAMEBASE}}}} area }} | label1 = Former names | data1 = {{if empty|{{{former_names|}}}|{{{former_name|}}}}} | class1 = nickname | label2 = Alternative names | data2 = {{if empty|{{{alternate_names|}}}|{{{alternate_name|}}}}} | class2 = nickname | label3 = Etymology | data3 = {{{etymology|}}} | label4 = Hotel chain | data4 = {{{hotel_chain|}}} | header5 = Record height | data6 = {{#if:{{{highest_start|}}}{{{highest_end|}}} |Tallest in {{if empty|{{{highest_region|}}}|the world}}<!-- --> {{#if:{{both|{{{highest_start|}}}|{{{highest_end|}}}}} |from {{{highest_start|}}} to {{{highest_end|}}} |{{#if:{{{highest_start|}}}|since {{{highest_start}}} }}<!-- -->{{#if:{{{highest_end|}}}|until {{{highest_end}}} }}<!-- -->}}{{ref label|{{if empty|{{{highest_reflabel|}}}|talleststatus}}|I|}} }} | label7 = Preceded by | data7 = {{{highest_prev|}}} | label8 = Surpassed by | data8 = {{{highest_next|}}} | header9 = General information | label10 = Status | class10 = category | data10 = {{#if:{{{status|}}}|{{#switch:{{lc:{{{status|}}}}} | built | completed | finished | complete = Completed | destroyed = Destroyed | demolished = Demolished | on hold = On hold | incomplete | unfinished | under construction = Under construction | cancelled | canceled | never built = Never built | topped out | topped-out = [[Topping out|Topped-out]] | planned | proposed = Proposed | approved = Approved | #default = {{{status|}}} }}|{{#if:{{{cancelled|}}}{{{canceled|}}}|Never built|{{#if:{{{topped_out|}}}|[[Topping out|Topped-out]]}} }} }} | label11 = Type | data11 = {{{building_type|}}} | class11 = category | label12 = Architectural style | data12 = {{{architectural_style|}}} | class12 = category | label13 = Classification | data13 = {{{classification|}}} | class13 = category | class14 = label | label14 = Location | data14 = {{csv|{{{location|}}}|{{{address|}}}|{{{location_town|}}}|{{{location_city|}}}|{{{location_country|}}}}} | label18 = Coordinates | data18 = {{#if:{{{coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates|}}}|type:landmark|{{#if:{{{location_country|}}}|region:{{Country abbreviation|{{{location_country}}}}}}}}}|}} | label19 = {{if empty|{{{grid_name|}}}|Grid&nbsp;position}} | data19 = {{{grid_position|}}} | label20 = Elevation | data20 = {{{altitude|}}} | label21 = Current tenants | data21 = {{{current_tenants|}}} | label22 = Named for | data22 = {{{namesake|}}} | label23 = Year{{pluralize from text|{{{years_built|}}}|plural=s}} built | data23 = {{{years_built|}}} | label24 = Groundbreaking | data24 = {{{groundbreaking_date|}}} | label25 = Construction started | data25 = {{{construction_start_date|}}} | label26 = Construction stopped | data26 = {{{construction_stop_date|}}} | label27 = Topped-out | data27 = {{{topped_out_date|}}} | rowclass28= note | label28 = {{#if:{{{est_completion|}}}|Estimated completion|{{#if:{{{completion_date|}}}|Completed}} }} | data28 = {{if empty|{{{est_completion|}}}|{{{completion_date|}}} }} | label29 = {{#if:{{{opened_date|}}}|{{#iferror:{{#ifexpr: {{#time:U|{{Plain text|1={{MultiReplace|1={{{opened_date}}}|2=%<.*%>|3=|4=%s|5=}}}}}}>{{#time:U}} |Opening|Opened}}|Opened}}|Opening}} | data29 = {{if empty|{{{opened_date|}}}|{{{opening_date|}}}}} | label30 = Inaugurated | data30 = {{{inauguration_date|}}} | label31 = Relocated | data31 = {{{relocated_date|}}} | label32 = Renovated | data32 = {{{renovation_date|}}} | label33 = Closed | data33 = {{{closing_date|}}} | rowclass34= note | label34 = Destroyed | data34 = {{{destruction_date|}}} | label35 = Demolished | data35 = {{{demolished_date|}}} | label36 = Cost | data36 = {{{cost|}}} | label37 = Renovation cost | data37 = {{{ren_cost|}}} | label38 = Client | data38 = {{{client|}}} | label39 = Owner | data39 = {{{owner|}}} | label40 = {{#if:{{{governing_body|}}}|Governing body|{{#if:{{{landlord|}}}|Landlord|Operator}}}} | data40 = {{if empty|{{{governing_body|}}}|{{{landlord|}}}|{{{operator|}}}}} | label41 = Affiliation | data41 = {{{affiliation|}}} | header42 = Height | label43 = Height | data43 = {{{height|}}} | label44 = Architectural | data44 = {{{architectural|}}} | label45 = Tip | data45 = {{{tip|}}} | label46 = Antenna spire | data46 = {{{antenna_spire|}}} | label47 = Roof | data47 = {{{roof|}}} | label48 = Top floor | data48 = {{{top_floor|}}} | label49 = Observatory | data49 = {{{observatory|}}} | header50 = Dimensions | label51 = Diameter | data51 = {{{diameter|}}} | label52 = Circumference | data52 = {{{circumference|}}} | label53 = Weight | data53 = {{{weight|}}} | label54 = Other dimensions | data54 = {{{other_dimensions|}}} | header55 = Technical details | label56 = Structural system | data56 = {{{structural_system|}}} | class56 = category | label57 = Material | data57 = {{{material|}}} | class57 = category | label58 = Size | data58 = {{{size|}}} | label59 = Floor count | data59 = {{{floor_count|}}} | label60 = Floor area | data60 = {{{floor_area|}}} | label61 = Lifts/elevators | data61 = {{{elevator_count|}}} | label62 = Grounds | data62 = {{{grounds_area|}}} | header63 = Design and construction | label64 = Architect{{pluralize from text|{{{architect|}}}|plural=s}} | data64 = {{{architect|}}} | label65 = Architecture firm | data65 = {{{architecture_firm|}}} | label66 = Developer | data66 = {{{developer|}}} | label67 = Engineer | data67 = {{{engineer|}}} | label68 = Structural engineer | data68 = {{{structural_engineer|}}} | label69 = Services engineer | data69 = {{{services_engineer|}}} | label70 = Civil engineer | data70 = {{{civil_engineer|}}} | label71 = Other designers | data71 = {{{other_designers|}}} | label72 = Quantity surveyor | data72 = {{{quantity_surveyor|}}} | label73 = Main contractor | data73 = {{if empty|{{{main_contractor|}}}|{{{main_contractors|}}}}} | rowclass74 = note | label74 = Awards and prizes | data74 = {{{awards|}}} | label75 = Designations | data75 = {{{designations|}}} | label76 = Known for | data76 = {{{known_for|}}} | header77 = Renovating team | rowclass78 = note | label78 = Architect{{pluralize from text|{{{ren_architect|}}}|plural=s}} | data78 = {{{ren_architect|}}} | label79 = Renovating firm | data79 = {{{ren_firm|}}} | label80 = Engineer | data80 = {{{ren_engineer|}}} | label81 = Structural engineer | data81 = {{{ren_str_engineer|}}} | label82 = Services engineer | data82 = {{{ren_serv_engineer|}}} | label83 = Civil engineer | data83 = {{{ren_civ_engineer|}}} | label84 = Other designers | data84 = {{{ren_oth_designers|}}} | label85 = Quantity surveyor | data85 = {{{ren_qty_surveyor|}}} | label86 = Main contractor | data86 = {{{ren_contractor|}}} | rowclass87 = note | label87 = Awards and prizes | data87 = {{{ren_awards|}}} | header88 = Other information | label89 = Seating type | data89 = {{{seating_type|}}} | label90 = Seating capacity | data90 = {{{seating_capacity|}}} | label91 = Number of stores | data91 = {{{number_of_stores|}}} | label92 = Number of anchors | data92 = {{{number_of_anchors|}}} | label93 = Number of {{#if:{{{number_of_units|}}}|units|rooms}} | data93 = {{if empty|{{{number_of_units|}}}|{{{number_of_rooms|}}}}} | label94 = Number of suites | data94 = {{{number_of_suites|}}} | label95 = Number of restaurants | data95 = {{{number_of_restaurants|}}} | label96 = Number of bars | data96 = {{{number_of_bars|}}} | label97 = Facilities | data97 = {{{facilities|}}} | label98 = Parking | data98 = {{{parking|}}} | label99 = Public transit access | data99 = {{{public_transit|}}} | header100 = Website | data101 = {{{website|}}} | header102 = _BLANK_ | data103 = {{{nrhp|}}} | data104 = {{{embedded|}}} | data105 = {{{module|}}} | header106 = References | data107 = {{{references|}}} | belowstyle = {{{belowstyle|}}} | below = {{{footnotes|}}} }}<!-- end of infobox -->{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox building with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox building]] with unknown parameter "_VALUE_"|ignoreblank=y|mapframe_args=y| address | affiliation | alt | alternate_name | alternate_names | altitude | antenna_spire | architect | architectural | architectural_style | architecture_firm | awards | belowstyle | building_type | canceled | cancelled | caption | circumference | civil_engineer | classification | client | closing_date | completion_date | construction_start_date | construction_stop_date | coordinates | cost | current_tenants | demolished_date | designations | destruction_date | developer | diameter | elevator_count | embed | embedded | engineer | est_completion | etymology | facilities | floor_area | floor_count | footnotes | former_name | former_names | governing_body | grid_name | grid_position | groundbreaking_date | grounds_area | height | highest_end | highest_next | highest_prev | highest_reflabel | highest_region | highest_start | hotel_chain | image | image_alt | image_caption | image_map | image_size | image_upright | inauguration_date | known_for | landlord | location | location_city | location_country | location_town | logo | logo_alt | logo_caption | logo_size | logo_upright | main_contractor | main_contractors | map_alt | map_caption | map_size | material | module | name | namesake | native_name | native_name_lang | nrhp | number_of_anchors | number_of_bars | number_of_restaurants | number_of_rooms | number_of_stores | number_of_suites | number_of_units | observatory | opened_date | opening_date | operator | other_designers | other_dimensions | owner | parking | public_transit | pushpin_label | pushpin_map | pushpin_map_alt | pushpin_map_caption | pushpin_mapsize | pushpin_mark | pushpin_relief | quantity_surveyor | references | relocated_date | ren_architect | ren_awards | ren_civ_engineer | ren_contractor | ren_cost | ren_engineer | ren_firm | ren_oth_designers | ren_qty_surveyor | ren_serv_engineer | ren_str_engineer | renovation_date | roof | seating_capacity | seating_type | services_engineer | size | status | structural_engineer | structural_system | tip | top_floor | topped_out | topped_out_date | website | weight | years_built }}<!-- -->{{main other|1={{#if:{{{topped_out|}}}|[[Category:Pages using infobox building with topped out]]}}{{#if:{{{canceled|}}}{{{cancelled|}}}|[[Category:Pages using infobox building with cancelled]]}}<!-- -->{{#if:{{both|{{{height|}}}|{{{architectural|}}}{{{tip|}}}{{{antenna_spire|}}}{{{roof|}}}{{{top_floor|}}}{{{observatory|}}}}}|[[Category:Pages using infobox building with parameter errors]]}} }}<!-- -->{{#invoke:Check for conflicting parameters|check | template = [[Template:Infobox building]] | cat = {{main other|Category:Pages using infobox building with conflicting parameters}} | former_names; former_name | caption; image_caption | alt; image_alt | alternate_names; alternate_name | est_completion; completion_date | opened_date; opening_date | governing_body; landlord; operator | main_contractor; main_contractors | number_of_units; number_of_rooms }}<noinclude> {{documentation}} </noinclude> 7q19wtfu0q3dcoa4k1dzb1hnohwyw0w Template:Station link 10 176065 746265 2021-08-17T01:16:27Z en>MusikBot II 0 Changed protection settings for "[[Template:Station link]]": [[Wikipedia:High-risk templates|High-risk template or module]] 6175 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 746265 wikitext text/x-wiki <includeonly>{{#invoke:Adjacent stations|station}}</includeonly><noinclude> {{documentation}} </noinclude> mm42f9ytujkp11dyp3dg9ka6ls57mod 746266 746265 2026-06-12T21:56:13Z Robertsky 51025 1 revision imported from [[:en:Template:Station_link]] 746265 wikitext text/x-wiki <includeonly>{{#invoke:Adjacent stations|station}}</includeonly><noinclude> {{documentation}} </noinclude> mm42f9ytujkp11dyp3dg9ka6ls57mod Module:Adjacent stations 828 176066 746267 2025-10-03T03:27:24Z en>Jonesey95 0 fix text color in dark mode; this generally works but may cause problems, in which case revert or try specifying a different CSS value 746267 Scribunto text/plain require('strict') local p = {} local lang = 'en-GB' -- local default language -- Below these comments: Internationalization table -- How to translate this module (for languages without variants): -- • Characters inside single and double quotation marks are called strings. -- The strings in this i18n table are used as output. -- • Strings within square brackets are keys. -- • Strings are concatenated (joined) with two dots. -- • Set the string after «local lang =» to your language's code. -- Change the first key after "i18n" (usually "en-GB") to the same thing. -- • For each string which is not inside a function, translate it directly. -- • Strings with keys named "format" are Lua regular expressions. -- «()» is a match; «.+» means all characters; «%s+» means all spaces. -- • For each string which is concatenated to the variable «var», -- translate the phrase assuming that «var» will be a noun. -- • Remove any unnecessary translations. local i18n = require("Module:Adjacent stations/i18n") local function getData(system, verify) if verify then local title = mw.title.new('Module:Adjacent stations/' .. system -- .. '/sandbox' ) if not (title and title.exists) then return nil end end return require('Module:Adjacent stations/' .. system -- .. '/sandbox' ) end local function getLine(data, lineN) if lineN then if data['aliases'] then lineN = data['aliases'][mw.ustring.lower(lineN)] or lineN end local default = data['lines']['_default'] or {} local line = data['lines'][lineN] or {} for k, v in pairs(default) do if v then line[k] = line[k] or v end end line['title'] = line['title'] and mw.ustring.gsub(line['title'], '%%1', lineN) return line, lineN end end local function getColor(data, system, line, Type, frame) if system then if line then return frame:expandTemplate{ title = system .. ' color', args = {line, ['branch'] = Type} } end return frame:expandTemplate{ title = system .. ' color' } else line = (getLine(data, line)) local default = data['lines']['_default'] if line or default then default = default or {} if not line then line = mw.clone(default) end local color = line['color'] or line['background color'] or default['color'] or default['background color'] or data['system color'] local Type_value = Type and line['types'] and (line['types'][Type] and line['types'][Type]['color']) if Type_value then color = Type_value end return color end return (default and (default['color'] or default['background color']) or data['system color'] or '') end end local lineN, typeN local function somethingMissing(name, key, formats) local formatKeys = {} for k in pairs(formats) do table.insert(formatKeys, k) end return name .. ' was "' .. key .. '" but neither an entry for it nor a default was found. Choices were: ' .. table.concat(formatKeys, ', ') end local function getStation(station, _Format) if type(_Format) == 'table' then local lineNformats = _Format _Format = lineNformats[lineN] or lineNformats[1] if not _Format then error(somethingMissing('lineN', lineN, lineNformats)) elseif type(_Format) == 'table' then local typeNformats = _Format _Format = typeNformats[typeN] or typeNformats[1] if not _Format then error(somethingMissing('typeN', typeN, typeNformats)) end end end if typeN then _Format = mw.ustring.gsub(_Format, '%%3', typeN) end if lineN then _Format = mw.ustring.gsub(_Format, '%%2', lineN) end return (mw.ustring.match(_Format, '%[%[.+%]%]')) and (mw.ustring.gsub(_Format, '%%1', station)) or table.concat({'[[', mw.ustring.gsub(_Format, '%%1', station), '|', station, ']]'}) end local function getTerminusText(var, Format) local function subst(var1, var2) -- var1 is the terminus or table of termini; var2 is the key for the table of termini return type(var1) == 'string' and getStation(var1, (Format[var1] or Format[1])) or type(var1) == 'table' and #var1 > 0 and getStation(var1[var2], (Format[var1[var2]] or Format[1])) or '' end if Format then if type(var) == 'string' then return subst(var) elseif type(var) == 'table' and #var > 0 then local t = {subst(var, 1)} for i = 2, #var - 1 do t[i] = i18n[lang]['comma'](subst(var, i)) end if #var > 1 then t[#var] = i18n[lang]['or'](subst(var, #var)) end if var['via'] then if i18n[lang]['via-first'] then table.insert(t, 1, i18n[lang]['via'](subst(var, 'via'))) else table.insert(t, i18n[lang]['via'](subst(var, 'via'))) end end return table.concat(t) else return '' end else return var or '' end end function p._main(_args) -- Arguments are processed here instead of the main function local yesno = require('Module:Yesno') local trimq = require('Module:Trim quotes')._trim local boolean = { ['oneway-left'] = true, ['oneway-right'] = true, ['reverse'] = true, ['reverse-left'] = true, ['reverse-right'] = true } local args = {} -- Processed arguments local index = {} -- A list of addresses corresponding to number suffixes in the arguments for k, v in pairs(_args) do -- Maps each raw argument to processed arguments by string matching _args[k] = v:match('^%s*(.-)%s*$') if _args[k] and _args[k] ~= '' then local a = mw.ustring.match(k, '^(.*%D)%d+$') or k -- The parameter; address 1 can be omitted local b = tonumber(mw.ustring.match(k, '^.*%D(%d+)$')) or 1 -- The address for a given argument; address 1 can be omitted if boolean[a] then v = yesno(v) end if not args[b] then args[b] = {[a] = v} table.insert(index, b) elseif args[b][a] then return error(i18n[lang]['error_duplicate'](a .. b)) else args[b][a] = v end end end table.sort(index) local function small(s, italic) return italic and '<div class="isA">' .. s .. '</div>' or '<div class="smA">' .. s .. '</div>' end local style = { -- Style for each cell type ['header cell'] = 'class="hcA"|', ['header midcell'] = 'colspan="3" class="hmA"|', ['body cell'] = 'class="bcA"|', ['body banner'] = 'class="bbA notheme" style="color:inherit;background-color:#', } local function rgb(var) if var:len() == 3 then return {tonumber(var:sub(1, 1), 16) * 17, tonumber(var:sub(2, 2), 16) * 17, tonumber(var:sub(2, 2), 16) * 17} elseif var:len() == 6 then return {tonumber(var:sub(1, 2), 16), tonumber(var:sub(3, 4), 16), tonumber(var:sub(5, 6), 16)} end return {} end local data = {} -- A table of data modules for each address local noclearclass = (((_args.noclear or '') ~= '') and ' adjacent-stations-noclear' or '') local wikitable = {'{| class="wikitable adjacent-stations' .. noclearclass .. '"'} for i, v in ipairs(index) do -- If an address has a system argument, indexes the data module data[v] = args[v]['system'] and getData(args[v]['system']) -- If an address has no system, the row uses data from the previous address or data[index[i - 1]] or (args[v]['header'] and getData(args[index[i+1]]['system'])) or error(i18n[lang]['error_unknown'](args[v]['system'])) local lang = data[v]['lang'] or lang if args[v]['system'] and not args[v]['hide-system'] then -- Header row local stop_noun = data[v]['header stop noun'] or i18n[lang]['stop_noun'] table.insert(wikitable, table.concat({'\n|-', '\n! scope="col" ', style['header cell'], i18n[lang]['preceding'](stop_noun), '\n! scope="col" ', style['header midcell'], (data[v]['system icon'] and data[v]['system icon'] .. ' ' or ''), (data[v]['system title'] or ('[['.. args[v]['system'] ..']]')), '\n! scope="col" ', style['header cell'], i18n[lang]['following'](stop_noun) })) table.insert(wikitable, '') table.insert(wikitable, '') table.insert(wikitable, '') end if args[v]['header'] then -- Subheader table.insert(wikitable, '\n|-\n!colspan="5" class="hmA"|'.. args[v]['header']) table.insert(wikitable, '') table.insert(wikitable, '') table.insert(wikitable, '') end if args[v]['line'] or args[v]['left'] or args[v]['right'] or args[v]['nonstop'] then if not args[v]['line'] and i > 1 and not args[v]['system'] then args[v]['line'] = args[index[i - 1]]['line'] end lineN = args[v]['line'] or '_default' typeN = args[v]['type'] if data[v]['aliases'] then lineN = data[v]['aliases'][mw.ustring.lower(lineN)] or lineN if typeN then typeN = data[v]['aliases'][mw.ustring.lower(typeN)] or typeN end end -- get the line table local line = data[v]['lines'] and (mw.clone(data[v]['lines'][lineN]) or error(i18n[lang]['error_unknown'](args[v]['line']))) or error(i18n[lang]['error_line']) local default = data[v]['lines']['_default'] or {} line['title'] = line['title'] or default['title'] or '' line['title'] = mw.ustring.gsub(line['title'], '%%1', lineN) -- cell across row for non-stop service if args[v]['nonstop'] then table.insert(wikitable, table.concat({'\n|-\n|colspan="5" ', style['body cell'], ((args[v]['nonstop'] == 'former') and i18n[lang]['nonstop_past'] or i18n[lang]['nonstop_present'])(p._box({data = data[v], line = lineN, Type = typeN, inline = 'yes'})) }) ) table.insert(wikitable, '') table.insert(wikitable, '') table.insert(wikitable, '') else local Format = data[v]['station format'] or i18n[lang]['error_format'] local color, color_2, background_color, circular local Type = line['types'] and line['types'][typeN] -- get the line type table if Type then if Type['color'] then -- line color is used as background if there is no background color in the line type table background_color = Type['background color'] or line['color'] color = Type['color'] color_2 = Type['color2'] or color else background_color = Type['background color'] or line['background color'] color = line['color'] or default['color'] or '' color_2 = line['color2'] or color end if Type['circular'] then -- Type may override the circular status of the line circular = Type['circular'] end else background_color = line['background color'] color = line['color'] or default['color'] or '' color_2 = line['color2'] or color circular = line['circular'] end -- Alternate termini can be specified based on type local sideCell = {true, true} for i, b in ipairs({'left', 'right'}) do if not args[v][b] then -- If no station is given on one side, the station is assumed to be the terminus on that side local _through = args[v]['through-' .. b] or args[v]['through'] local _through_data = getLine(data[v], _through) if _through_data then _through = _through_data['title'] or _through end sideCell[i] = _through and "''" .. i18n[lang]['through'](trimq(_through)) .. "''" or "''" .. trimq((args[v]['reverse-' .. b] or args[v]['reverse']) and i18n[lang]['reverse'] or i18n[lang]['terminus']) .. "''" else local terminusT local terminusN = Type and Type[b .. ' terminus'] or line[b .. ' terminus'] -- If the terminus table has more than one numbered key or has the via key then the table shows only the default termini, since terminusN[2] cannot be used and terminusN[via] is reserved if type(terminusN) == 'string' or (type(terminusN) == 'table' and (terminusN[2] or terminusN['via'])) then if args[v]['to-' .. b] then terminusT = args[v]['to-' .. b] local _or = mw.ustring.match(terminusT, i18n[lang]['or-format']) if _or then terminusT = mw.ustring.gsub(terminusT, i18n[lang]['or-format'], '\127_OR_\127') terminusT = mw.ustring.gsub(terminusT, i18n[lang]['comma-format'], '\127_OR_\127') end local _via = (mw.ustring.match(terminusT, i18n[lang]['via-format'])) if _via then terminusT = mw.ustring.gsub(terminusT, i18n[lang]['via-format'], '') terminusT = mw.text.split(terminusT, '\127_OR_\127') terminusT['via'] = _via elseif _or then terminusT = mw.text.split(terminusT, '\127_OR_\127') end else terminusT = terminusN end elseif type(terminusN) == 'table' then terminusT = terminusN[args[v]['to-' .. b]] or terminusN[args[v]['to']] or terminusN[1] end local mainText = args[v]['note-' .. b] and getTerminusText(args[v][b], Format) .. small(args[v]['note-' .. b]) or getTerminusText(args[v][b], Format) local subText = (args[v]['oneway-' .. b] or line['oneway-' .. b]) and i18n[lang]['oneway'] or args[v][b] == terminusT and i18n[lang]['terminus'] or circular and terminusT or i18n[lang]['towards'](getTerminusText(terminusT, Format)) subText = small(subText, true) sideCell[i] = mainText .. subText end end table.insert(wikitable, '\n|-') table.insert(wikitable, '\n|' .. style['body cell'] .. sideCell[1]) table.insert(wikitable, table.concat({'\n|', style['body banner'], color, '"|', '\n|', (background_color and 'class="bcA" style="background-color:rgba(' .. table.concat(rgb(background_color), ',') .. ',.2)"|' or style['body cell']), line['title'], -- Type; table key 'types' in subpages (datatype table, with strings as keys). If table does not exist then the input is displayed as the text (typeN and '<div>' .. (Type and Type['title'] or typeN) .. '</div>' or ''), -- Note-mid; table key 'note-mid' in subpages. Overridden by user input ((args[v]['note-mid'] and small(args[v]['note-mid'])) or (Type and Type['note-mid'] and small(Type['note-mid'])) or (line['note-mid'] and small(line['note-mid'])) or ''), -- Transfer; uses system's station link table (args[v]['transfer'] and small('transfer at ' .. getTerminusText(args[v]['transfer'], Format), true) or ''), '\n|', style['body banner'], color_2, '"|'})) table.insert(wikitable, '\n|' .. style['body cell'] .. sideCell[2]) end end if args[v]['note-row'] then -- Note if args[v]['note-row']:match('^%s*<tr') or args[v]['note-row']:match('^%s*%|%-') then table.insert(wikitable, '\n' .. args[v]['note-row']) else table.insert(wikitable, '\n|-\n|colspan="5" ' .. style['body cell'] .. args[v]['note-row']) end table.insert(wikitable, '') table.insert(wikitable, '') table.insert(wikitable, '') end end local function combine(t, n) if t[n + 4] ~= '' and t[n + 4] == t[n] then t[n + 4] = '' -- The cell in the next row is deleted local rowspan = 2 while t[n + rowspan * 4] == t[n] do t[n + rowspan * 4] = '' rowspan = rowspan + 1 end t[n] = mw.ustring.gsub(t[n], '\n|class="', '\n|rowspan="' .. rowspan .. '" class="') end end local M = #wikitable for i = 3, M, 4 do combine(wikitable, i) end for i = 4, M, 4 do combine(wikitable, i) end for i = 5, M, 4 do combine(wikitable, i) end table.insert(wikitable, '\n|}') return table.concat(wikitable) end local getArgs = require('Module:Arguments').getArgs local function makeInvokeFunction(funcName) -- makes a function that can be returned from #invoke, using -- [[Module:Arguments]] return function (frame) local args = getArgs(frame, {parentOnly = true}) return p[funcName](args, frame) end end local function makeTemplateFunction(funcName) -- makes a function that can be returned from #invoke, using -- [[Module:Arguments]] return function (frame) local args = getArgs(frame, {frameOnly = true}) return p[funcName](args, frame) end end p.main = makeInvokeFunction('_main') function p._color(args, frame) local data = args.data if args[1] or data then data = data or getData(args[1], true) if not data then return getColor(nil, args[1], args[2], args[3], frame) end return getColor(data, nil, args[2], args[3]) end end p.color = makeInvokeFunction('_color') function p._box(args, frame) local system = args[1] or args.system lineN = args[2] or args.line if not (system or lineN) then return '' end local line, Type, line_data local inline = args[3] or args.inline typeN = args.type local data = args.data if system or data then data = data or getData(system, true) local color if data then local default = data['lines']['_default'] or {} line, lineN = getLine(data, lineN) if typeN then typeN = data['aliases'] and data['aliases'][mw.ustring.lower(typeN)] or typeN Type = line['types'] and line['types'][typeN] and line['types'][typeN]['title'] or typeN end color = getColor(data, nil, lineN, typeN) if inline ~= 'box' then line_data = line or error(i18n[lang]['error_unknown'](lineN)) line = line_data['title'] or default['title'] or error(i18n[lang]['error_missing']('title')) line = mw.ustring.gsub(line, '%%1', lineN) end else color = getColor(nil, system, lineN, typeN, frame) if inline ~= 'box' then line = frame:expandTemplate{ title = system .. ' lines', args = {lineN, ['branch'] = typeN} } if mw.text.trim(line) == '' then return error(i18n[lang]['error_unknown'](lineN)) end end Type = typeN end local result if Type and Type ~= '' and inline ~= 'box' then if line == '' then line = Type else result = ' – ' .. Type end end if args.note then result = (result or '') .. ' ' .. args.note end result = result or '' if not inline then -- [[Template:Legend]] result = '<div class="legend" style="page-break-inside:avoid;break-inside:avoid-column"><span class="legend-color" style="display:inline-block;min-width:1.25em;height:1.25em;line-height:1.25;margin:1px 0;border:1px solid black;color:inherit;background-color:#' .. color .. '"> </span> ' .. line .. result .. '</div>' elseif inline == 'yes' then result = '<span style="color:inherit;background-color:#' .. color .. ';border:1px solid #000">    </span>&nbsp;' .. line .. result elseif inline == 'box' then result = '<span style="color:inherit;background-color:#' .. color .. ';border:1px solid #000">    </span>' .. result elseif inline == 'link' then local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') if link then result = '[[' .. link .. '|<span style="color:inherit;background-color:#' .. color .. ';border:1px solid #000">    </span>]]' .. result else result = '<span style="color:inherit;background-color:#' .. color .. ';border:1px solid #000">    </span>' .. result end elseif inline == 'square' then result = '<span style="color:#' .. color .. ';line-height:initial">■</span>&nbsp;' .. line .. result elseif inline == 'lsquare' then local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') if link then result = '[[' .. link .. '|<span style="color:#' .. color .. ';line-height:initial">■</span>]]' else result = '<span style="color:#' .. color .. ';line-height:initial">■</span>' end elseif inline == 'dot' then result = '<span style="color:#' .. color .. ';line-height:initial">●</span> ' .. line .. result elseif inline == 'ldot' then local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') if link then result = '[[' .. link .. '|<span style="color:#' .. color .. ';line-height:initial">●</span>]]' else result = '<span style="color:#' .. color .. ';line-height:initial">●</span>' end elseif inline == 'small' then result = '<span style="color:inherit;background-color:#' .. color .. '"> </span>' .. ' ' .. line .. result else local yesno = require("Module:Yesno") local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') local border_color, text_color local color_box = data['color box format'] or data['rail box format'] or {} if line_data then if line_data['types'] and line_data['types'][typeN] then local Type_data = line_data['types'][typeN] border_color = Type_data['border color'] or line_data['border color'] or color text_color = Type_data['text color'] or line_data['text color'] if color_box == 'title' and not args[4] then lineN = Type_data['short name'] or line_data['short name'] or require('Module:Delink')._delink{line} else lineN = Type_data['short name'] or line_data['short name'] or lineN end else border_color = line_data['border color'] or color text_color = line_data['text color'] if color_box == 'title' and not args[4] then lineN = line_data['short name'] or require('Module:Delink')._delink{line} else lineN = line_data['short name'] or lineN end end else border_color = color end text_color = text_color and '#' .. text_color or require('Module:Color contrast')._greatercontrast{color} local bold = ';font-weight:bold' if (yesno(args.bold) == false) then bold = '' end if inline == 'route' then -- [[Template:RouteBox]] if link then result = '<span style="color:inherit;background-color:#' .. color .. ';border:.075em solid #' .. border_color .. ';padding:0 .3em">[[' .. link .. '|<span style="color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>]]</span>' else result = '<span style="background-color:#' .. color .. ';border:.075em solid #' .. border_color .. ';padding:0 .3em;color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>' end elseif inline == 'croute' then -- [[Template:Bahnlinie]] if link then result = '<span style="color:inherit;background-color:#' .. color .. ';border:.075em solid #' .. border_color .. ';border-radius:.5em;padding:0 .3em">[[' .. link .. '|<span style="color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>]]</span>' else result = '<span style="color:inherit;background-color:#' .. color .. ';border:.075em solid #' .. border_color .. ';border-radius:.5em;padding:0 .3em;color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>' end elseif inline == 'xroute' then -- [[Template:Bahnlinie]] if link then result = '<span style="border:.075em solid #' .. border_color .. ';border-radius:.5em;padding:0 .3em">[[' .. link .. '|<span style="color:#' .. color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>]]</span>' else result = '<span style="border:.075em solid #' .. border_color .. ';border-radius:.5em;padding:0 .3em;color:#' .. color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>' end elseif inline == 'broute' then if link then result = '<span style="color:inherit;background-color:#' .. color .. ';border:.075em solid #000;padding:0 .3em">[[' .. link .. '|<span style="color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>]]</span>' else result = '<span style="background-color:#' .. color .. ';border:.075em solid #000;padding:0 .3em;color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>' end else -- [[Template:Legend]] (fallback; duplication to simplify logic) result = '<div class="legend" style="page-break-inside:avoid;break-inside:avoid-column"><span class="legend-color" style="display:inline-block;min-width:1.25em;height:1.25em;line-height:1.25;margin:1px 0;border:1px solid black;color:inherit;background-color:#' .. color .. '"> </span> ' .. line .. result .. '</div>' end end result = mw.ustring.gsub(result, ':%s*#transparent', ':transparent') return result end end p.box = makeInvokeFunction('_box') function p._icon(args, frame) local system = args[1] or args.system local data = args.data if not system and not data then return end data = data or getData(system) local line, line_name = getLine(data, args[2] or args.line) local icon local icon_format if line then local line_type = args[3] or args.type if line_type then line_type = data.aliases and data.aliases[mw.ustring.lower(line_type)] or line_type line_type = line.types and line.types[line_type] -- If there's no type table or entry for this type, then it can't have its own icon icon_format = line_type['icon format'] or data['type icon format'] if line_type.icon then icon = line_type.icon end end if not icon then icon = line.icon end -- Only if there is no icon use the icon_format. if not icon and not icon_format then icon_format = line['icon format'] or data['line icon format'] end local default = data.lines._default or {} if icon and string.find(icon, "%%1") and default and default.icon then icon = mw.ustring.gsub(default.icon, '%%1', line_name) end end if not icon then icon = data['system icon'] end if not icon_format then icon_format = data['system icon format'] end if icon_format then if icon_format ~= 'image' then icon = p._box({data = data, [2] = (args[2] or args.line), [3] = icon_format, type = (args[3] or args.type), bold = args.bold, link = args.link}, frame) if args.name then if line and line.title then return icon .. " " .. line.title end return icon .. " " .. data["system title"] end end end local size = args.size if size then if mw.ustring.match(size, '%d$') then size = '|' .. size .. 'px' else size = '|' .. size end -- Upright values are to be disabled until there is use of upright scaling in subpages; doesn't seem to work anyway as of 2018-08-10 local regex = { '|%s*%d*x?%d+px%s*([%]|])', -- '|%s*upright=%d+%.?%d*%s*([%]|])', '|%s*upright%s*([%]|])' } if mw.ustring.match(icon, regex[1]) then icon = mw.ustring.gsub(icon, regex[1], size .. '%1') -- elseif mw.ustring.match(icon, regex[2]) then -- icon = gsub(icon, regex[2], size .. '%1') -- elseif mw.ustring.match(icon, regex[3]) then -- icon = gsub(icon, regex[3], size .. '%1') else icon = mw.ustring.gsub(icon, '(%[%[[^%]|]+)([%]|])', '%1' .. size .. '%2') end end local link = args.link if link then if mw.ustring.match(icon, '|%s*link=[^%]|]*[%]|]') then icon = mw.ustring.gsub(icon, '|%s*link=[^%]|]*([%]|])', '|link=' .. link .. '%1') else icon = mw.ustring.gsub(icon, '(%[%[[^%]|]+)([%]|])', '%1|link=' .. link .. '%2') end end local alt = args.alt or link if alt then if mw.ustring.match(icon, '|%s*alt=[^%]|]*[%]|]') then icon = mw.ustring.gsub(icon, '|%s*alt=[^%]|]*([%]|])', '|alt=' .. alt .. '%1') else icon = mw.ustring.gsub(icon, '(%[%[[^%]|]+)([%]|])', '%1|alt=' .. alt .. '%2') end end if args.name then if line and line.title then return icon .. " " .. line.title end return icon .. " " .. data["system title"] end return icon end p.icon = makeInvokeFunction('_icon') p['rail icon'] = makeTemplateFunction('_icon') function p._line(args, frame) local system = args[1] or args.system local line = args[2] or args.line if not line then return '' end local Type = args[3] or args.type local data = args.data if system or data then data = data or getData(system, true) if data then line = (getLine(data, line)) or error(i18n[lang]['error_unknown'](line)) if Type then Type = data['aliases'] and data['aliases'][mw.ustring.lower(Type)] or Type Type = line['types'] and line['types'][Type] and line['types'][Type]['title'] or Type end line = line['title'] or error(i18n[lang]['error_missing']('title')) else line = frame:expandTemplate{ title = system .. ' lines', args = {line, ['branch'] = Type} } if mw.text.trim(line) == '' then return error(i18n[lang]['error_unknown'](lineN)) end end if Type and Type ~= '' then if line == '' then line = Type else line = line .. ' – ' .. Type end end return line end end p.line = makeInvokeFunction('_line') function p._shortline(args, frame) local system = args[1] or args.system lineN = args[2] or args.line if not (system or lineN) then return '' end local line, Type, line_data typeN = args.type local data = args.data if system or data then data = data or getData(system, true) if data then local default = data['lines']['_default'] or {} line, lineN = getLine(data, lineN) if typeN then typeN = data['aliases'] and data['aliases'][mw.ustring.lower(typeN)] or typeN Type = line['types'] and line['types'][typeN] and line['types'][typeN]['title'] or typeN end line_data = line or error(i18n[lang]['error_unknown'](lineN)) line = line_data['title'] or default['title'] or error(i18n[lang]['error_missing']('title')) line = mw.ustring.gsub(line, '%%1', lineN) else line = frame:expandTemplate{ title = system .. ' lines', args = {lineN, ['branch'] = typeN} } if mw.text.trim(line) == '' then return error(i18n[lang]['error_unknown'](lineN)) end Type = typeN end local result if Type and Type ~= '' then if line == '' then line = Type else result = ' – ' .. Type end end if args.note then result = (result or '') .. ' ' .. args.note end result = result or '' local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') if line_data then if line_data['types'] and line_data['types'][typeN] then local Type_data = line_data['types'][typeN] lineN = Type_data['short name'] or line_data['short name'] or lineN else lineN = line_data['short name'] or lineN end end if link then result = '[[' .. link .. '|' .. lineN .. ']]' else result = lineN end result = mw.ustring.gsub(result, ':%s*#transparent', ':transparent') return result end end p.shortline = makeInvokeFunction('_shortline') function p._station(args, frame) local system = args[1] or args.system local station = args[2] or args.station if not station then return '' end lineN = args[3] or args.line typeN = args[4] or args.type local data = args.data if system or data then data = data or getData(system, true) if data then local _Format = data['station format'][station] or data['station format'][1] if _Format then if data['aliases'] then if lineN then lineN = data['aliases'][mw.ustring.lower(lineN)] or lineN end if typeN then typeN = data['aliases'][mw.ustring.lower(typeN)] or typeN end end station = getStation(station, _Format) else station = station or '' end else station = frame:expandTemplate{ title = system .. ' stations', args = {['station'] = station, ['line'] = lineN, ['branch'] = typeN} } end return station end end p.station = makeInvokeFunction('_station') p['station link'] = makeTemplateFunction('_station') function p._terminusTable(args, frame) local system = args[1] or args.system lineN = args[2] or args.line local side = mw.ustring.sub(mw.ustring.lower(args[3] or args.side or ''), 1, 1) typeN = args.type local prefix = (side == 'r') and 'right' or 'left' local data = args.data if system or data then data = data or getData(system, true) end if data then local line = getLine(data, lineN) or error(i18n[lang]['error_unknown'](lineN)) if typeN and data and data['aliases'] then typeN = data['aliases'][mw.ustring.lower(typeN)] or typeN end local Type = line['types'] and line['types'][typeN] local circular if Type then if Type['circular'] then -- Type may override the circular status of the line circular = Type['circular'] end else circular = line['circular'] end return Type and Type[prefix .. ' terminus'] or line[prefix .. ' terminus'], data['station format'] or i18n[lang]['error_format'], circular else local terminus = frame:expandTemplate{ title = 'S-line/' .. system .. ' ' .. prefix .. '/' .. lineN } return mw.ustring.gsub(terminus, '{{{type}}}', typeN) end end function p._terminus(args, frame) local var, Format, circular = p._terminusTable(args, frame) return circular and var or getTerminusText(var, Format) end p.terminus = makeInvokeFunction('_terminus') function p._style(args, frame) local style = args[1] or args.style local system = args[2] or args.system local line = args[3] or args.line local station = args[4] or args.station local result = {} local data = args.data local default = 'color:inherit;background-color:#efefef' -- Default text and background color for {{Infobox station}} if system or data then data = data or getData(system, true) end if data then local function getValue(var) if type(var) == 'table' then var = var[line] or var[1] if type(var) == 'table' then var = var[station] or var[1] end end if var ~= '' then return var end end if style == 'header' then local tmp = data['name format'] and getValue(data['name format']) if tmp then table.insert(result, tmp) end elseif style == 'subheader' then local tmp = data['header background color'] and getValue(data['header background color']) if tmp then table.insert(result, 'background-color:#' .. tmp) local color = data['header text color'] and getValue(data['header text color']) if color then table.insert(result, 'color:#' .. color) else local greatercontrast = require('Module:Color contrast')._greatercontrast if greatercontrast{tmp} == '#FFFFFF' then table.insert(result, 'color:#FFFFFF') end end else table.insert(result, default) local color = data['header text color'] and getValue(data['header text color']) if color then table.insert(result, 'color:#' .. color) end end end result = table.concat(result, ';') elseif system then local title = 'Template:' .. system .. ' style' local titleObj = mw.title.new(title) if titleObj and titleObj.exists then local tmp if style == 'header' then tmp = frame:expandTemplate{ title = title, args = {'name_format', line, station} } if tmp ~= '' then table.insert(result, tmp) end elseif style == 'subheader' then tmp = frame:expandTemplate{ title = title, args = {'thbgcolor', line, station} } if tmp ~= '' then table.insert(result, 'background-color:#' .. tmp) local color = frame:expandTemplate{ title = title, args = {'thcolor', line, station} } if color ~= '' then table.insert(result, 'color:#' .. color) else local ratio = require('Module:Color contrast')._ratio if ratio{tmp, '222222'} < 4.5 then table.insert(result, 'color:#FFFFFF') end -- 222222 is the default text color in Vector end else table.insert(result, default) tmp = frame:expandTemplate{ title = title, args = {'thcolor', line, station} } if tmp ~= '' then table.insert(result, 'color:#' .. tmp) end end end result = table.concat(result, ';') else if style == 'subheader' then result = default else result = '' end end else if style == 'subheader' then result = default else result = '' end end return result end function p.style(frame) local args = getArgs(frame, {frameOnly = true}) return p._style(args, frame) end function p.convert(frame) local args = frame.args local code = mw.text.split(mw.ustring.gsub(args[1], '^%s*{{(.*)}}%s*$', '%1'), '%s*}}%s*{{%s*') local system local group = tonumber(args.offset or 0) or 0 local firstgroup = group + 1 local delete = { ['s-rail'] = true, ['s-rail-next'] = true, ['s-rail-national'] = true, ['s-start'] = true, ['s-rail-start'] = true, ['start'] = true, ['s-end'] = true, ['end'] = true } local order = { 'line', 'left', 'right', 'to-left', 'to-right', 'oneway-left', 'oneway-right', 'through-left', 'through-right', 'reverse', 'reverse-left', 'reverse-right', 'note-left', 'note-mid', 'note-right', 'transfer' -- circular: use module subpage -- state: not implemented } local replace = { ['previous'] = 'left', ['next'] = 'right', ['type'] = 'to-left', ['type2'] = 'to-right', ['branch'] = 'type', ['note'] = 'note-left', ['notemid'] = 'note-mid', ['note2'] = 'note-right', ['oneway1'] = 'oneway-left', ['oneway2'] = 'oneway-right', ['through1'] = 'through-left', ['through2'] = 'through-right' } local remove_rows = {} local data = {} local noclear = false for i, v in ipairs(code) do code[i] = mw.ustring.gsub(code[i], '\n', ' ') local template = mw.ustring.lower(mw.text.trim(mw.ustring.match(code[i], '^[^|]+'))) code[i] = mw.ustring.match(code[i], '(|.+)$') if (mw.ustring.match(code[i] or '', 'noclear%s*=%s*[a-z]')) then noclear = true end if template == 's-line' then data[i] = {} local this_system = mw.text.trim(mw.ustring.match(code[i], '|%s*system%s*=([^|]+)')) code[i] = mw.text.split(code[i], '%s*|%s*') for m, n in ipairs(code[i]) do local tmp = mw.text.split(n, '%s*=%s*') if tmp[3] then tmp[2] = mw.ustring.gsub(n, '^.-%s*=', '') end tmp[1] = replace[tmp[1]] or tmp[1] if tmp[2] then -- checks for matching brackets local curly = select(2, mw.ustring.gsub(tmp[2], "{", ""))-select(2, mw.ustring.gsub(tmp[2], "}", "")) local square = select(2, mw.ustring.gsub(tmp[2], "%[", ""))-select(2, mw.ustring.gsub(tmp[2], "%]", "")) if not (curly == 0 and square == 0) then local count = mw.clone(m)+1 while not (curly == 0 and square == 0) do tmp[2] = tmp[2]..'|'..code[i][count] curly = curly+select(2, mw.ustring.gsub(code[i][count], "{", ""))-select(2, mw.ustring.gsub(code[i][count], "}", "")) square = square+select(2, mw.ustring.gsub(code[i][count], "%[", ""))-select(2, mw.ustring.gsub(code[i][count], "%]", "")) code[i][count] = '' count = count+1 end end data[i][tmp[1]] = tmp[2] end end if (this_system ~= system) or (not system) then system = this_system data[i]['system'] = system else data[i]['system'] = nil end local last = data[i-1] or data[i-2] or data[i-3] if last then for r, s in pairs({ ['hide1'] = {'left', 'to-left', 'note-left', 'oneway-left'}, ['hide2'] = {'right', 'to-right', 'note-right', 'oneway-right'}, ['hidemid'] = {'type', 'note-mid'} }) do if data[i][r] then for m, n in ipairs(s) do if not data[i][n] then data[i][n] = last[n] end end end end end code[i] = {} local X = '|' local Y = (i+group)..'=' if data[i]['system'] then table.insert(code[i], '|system') table.insert(code[i], Y) table.insert(code[i], data[i]['system']) table.insert(code[i], '\n') end for m, n in ipairs(order) do if data[i][n] then table.insert(code[i], X) table.insert(code[i], n) table.insert(code[i], Y) table.insert(code[i], data[i][n]) end end code[i] = table.concat(code[i]) elseif template == 's-note' then code[i] = mw.ustring.gsub(code[i], '|%s*text%s*=', '|header'..i+group..'=') code[i] = mw.ustring.gsub(code[i], '|%s*wide%s*=[^|]*', '') elseif template == 's-text' then code[i] = mw.ustring.gsub(code[i], '|%s*text%s*=', '|note-row'..i+group..'=') elseif delete[template] then code[i] = '' table.insert(remove_rows, 1, i) -- at the start, so that the rows are deleted in reverse order group = group-1 end end for i, v in ipairs(remove_rows) do table.remove(code, v) end code = table.concat(code, '\n') local t = {'{{Adjacent stations' .. (noclear and '|noclear=y\n' or ''), '\n}}'} system = mw.ustring.match(code, '|system(%d*)=') code = mw.ustring.gsub(code, '\n\n+', '\n') if tonumber(system) > firstgroup then -- If s-line isn't the first template then the system will have to be moved to the top system = mw.ustring.match(code, '|system%d*=([^|]*[^|\n])') code = mw.ustring.gsub(code, '|system%d*=[^|]*', '') code = '\n|system'..firstgroup..'='..system..code elseif not mw.ustring.match(code, '^[^{%[]*|[^=|]+2=') then -- If there's only one parameter group then there's no need to have line breaks code = mw.ustring.gsub(code, '\n', '') code = mw.ustring.gsub(code, '(|[^=|]+)1=', '%1=') t[2] = '}}' if not mw.ustring.match(code, '[%[{]') then code = mw.ustring.gsub(code, '|[^=|]*=$', '') code = mw.ustring.gsub(code, '|[^=|]*$', '') end end if not mw.ustring.match(code, '[%[{]') then code = mw.ustring.gsub(code, '|[^=|]*=|', '|') code = mw.ustring.gsub(code, '|[^=|]*|', '|') code = mw.ustring.gsub(code, '|[^=|]*=\n', '\n') code = mw.ustring.gsub(code, '|[^=|]*\n', '\n') end return t[1]..code..t[2] end return p jca1evjg28y2y92hnk1s3eak58flopp 746268 746267 2026-06-12T21:56:13Z Robertsky 51025 1 revision imported from [[:en:Module:Adjacent_stations]] 746267 Scribunto text/plain require('strict') local p = {} local lang = 'en-GB' -- local default language -- Below these comments: Internationalization table -- How to translate this module (for languages without variants): -- • Characters inside single and double quotation marks are called strings. -- The strings in this i18n table are used as output. -- • Strings within square brackets are keys. -- • Strings are concatenated (joined) with two dots. -- • Set the string after «local lang =» to your language's code. -- Change the first key after "i18n" (usually "en-GB") to the same thing. -- • For each string which is not inside a function, translate it directly. -- • Strings with keys named "format" are Lua regular expressions. -- «()» is a match; «.+» means all characters; «%s+» means all spaces. -- • For each string which is concatenated to the variable «var», -- translate the phrase assuming that «var» will be a noun. -- • Remove any unnecessary translations. local i18n = require("Module:Adjacent stations/i18n") local function getData(system, verify) if verify then local title = mw.title.new('Module:Adjacent stations/' .. system -- .. '/sandbox' ) if not (title and title.exists) then return nil end end return require('Module:Adjacent stations/' .. system -- .. '/sandbox' ) end local function getLine(data, lineN) if lineN then if data['aliases'] then lineN = data['aliases'][mw.ustring.lower(lineN)] or lineN end local default = data['lines']['_default'] or {} local line = data['lines'][lineN] or {} for k, v in pairs(default) do if v then line[k] = line[k] or v end end line['title'] = line['title'] and mw.ustring.gsub(line['title'], '%%1', lineN) return line, lineN end end local function getColor(data, system, line, Type, frame) if system then if line then return frame:expandTemplate{ title = system .. ' color', args = {line, ['branch'] = Type} } end return frame:expandTemplate{ title = system .. ' color' } else line = (getLine(data, line)) local default = data['lines']['_default'] if line or default then default = default or {} if not line then line = mw.clone(default) end local color = line['color'] or line['background color'] or default['color'] or default['background color'] or data['system color'] local Type_value = Type and line['types'] and (line['types'][Type] and line['types'][Type]['color']) if Type_value then color = Type_value end return color end return (default and (default['color'] or default['background color']) or data['system color'] or '') end end local lineN, typeN local function somethingMissing(name, key, formats) local formatKeys = {} for k in pairs(formats) do table.insert(formatKeys, k) end return name .. ' was "' .. key .. '" but neither an entry for it nor a default was found. Choices were: ' .. table.concat(formatKeys, ', ') end local function getStation(station, _Format) if type(_Format) == 'table' then local lineNformats = _Format _Format = lineNformats[lineN] or lineNformats[1] if not _Format then error(somethingMissing('lineN', lineN, lineNformats)) elseif type(_Format) == 'table' then local typeNformats = _Format _Format = typeNformats[typeN] or typeNformats[1] if not _Format then error(somethingMissing('typeN', typeN, typeNformats)) end end end if typeN then _Format = mw.ustring.gsub(_Format, '%%3', typeN) end if lineN then _Format = mw.ustring.gsub(_Format, '%%2', lineN) end return (mw.ustring.match(_Format, '%[%[.+%]%]')) and (mw.ustring.gsub(_Format, '%%1', station)) or table.concat({'[[', mw.ustring.gsub(_Format, '%%1', station), '|', station, ']]'}) end local function getTerminusText(var, Format) local function subst(var1, var2) -- var1 is the terminus or table of termini; var2 is the key for the table of termini return type(var1) == 'string' and getStation(var1, (Format[var1] or Format[1])) or type(var1) == 'table' and #var1 > 0 and getStation(var1[var2], (Format[var1[var2]] or Format[1])) or '' end if Format then if type(var) == 'string' then return subst(var) elseif type(var) == 'table' and #var > 0 then local t = {subst(var, 1)} for i = 2, #var - 1 do t[i] = i18n[lang]['comma'](subst(var, i)) end if #var > 1 then t[#var] = i18n[lang]['or'](subst(var, #var)) end if var['via'] then if i18n[lang]['via-first'] then table.insert(t, 1, i18n[lang]['via'](subst(var, 'via'))) else table.insert(t, i18n[lang]['via'](subst(var, 'via'))) end end return table.concat(t) else return '' end else return var or '' end end function p._main(_args) -- Arguments are processed here instead of the main function local yesno = require('Module:Yesno') local trimq = require('Module:Trim quotes')._trim local boolean = { ['oneway-left'] = true, ['oneway-right'] = true, ['reverse'] = true, ['reverse-left'] = true, ['reverse-right'] = true } local args = {} -- Processed arguments local index = {} -- A list of addresses corresponding to number suffixes in the arguments for k, v in pairs(_args) do -- Maps each raw argument to processed arguments by string matching _args[k] = v:match('^%s*(.-)%s*$') if _args[k] and _args[k] ~= '' then local a = mw.ustring.match(k, '^(.*%D)%d+$') or k -- The parameter; address 1 can be omitted local b = tonumber(mw.ustring.match(k, '^.*%D(%d+)$')) or 1 -- The address for a given argument; address 1 can be omitted if boolean[a] then v = yesno(v) end if not args[b] then args[b] = {[a] = v} table.insert(index, b) elseif args[b][a] then return error(i18n[lang]['error_duplicate'](a .. b)) else args[b][a] = v end end end table.sort(index) local function small(s, italic) return italic and '<div class="isA">' .. s .. '</div>' or '<div class="smA">' .. s .. '</div>' end local style = { -- Style for each cell type ['header cell'] = 'class="hcA"|', ['header midcell'] = 'colspan="3" class="hmA"|', ['body cell'] = 'class="bcA"|', ['body banner'] = 'class="bbA notheme" style="color:inherit;background-color:#', } local function rgb(var) if var:len() == 3 then return {tonumber(var:sub(1, 1), 16) * 17, tonumber(var:sub(2, 2), 16) * 17, tonumber(var:sub(2, 2), 16) * 17} elseif var:len() == 6 then return {tonumber(var:sub(1, 2), 16), tonumber(var:sub(3, 4), 16), tonumber(var:sub(5, 6), 16)} end return {} end local data = {} -- A table of data modules for each address local noclearclass = (((_args.noclear or '') ~= '') and ' adjacent-stations-noclear' or '') local wikitable = {'{| class="wikitable adjacent-stations' .. noclearclass .. '"'} for i, v in ipairs(index) do -- If an address has a system argument, indexes the data module data[v] = args[v]['system'] and getData(args[v]['system']) -- If an address has no system, the row uses data from the previous address or data[index[i - 1]] or (args[v]['header'] and getData(args[index[i+1]]['system'])) or error(i18n[lang]['error_unknown'](args[v]['system'])) local lang = data[v]['lang'] or lang if args[v]['system'] and not args[v]['hide-system'] then -- Header row local stop_noun = data[v]['header stop noun'] or i18n[lang]['stop_noun'] table.insert(wikitable, table.concat({'\n|-', '\n! scope="col" ', style['header cell'], i18n[lang]['preceding'](stop_noun), '\n! scope="col" ', style['header midcell'], (data[v]['system icon'] and data[v]['system icon'] .. ' ' or ''), (data[v]['system title'] or ('[['.. args[v]['system'] ..']]')), '\n! scope="col" ', style['header cell'], i18n[lang]['following'](stop_noun) })) table.insert(wikitable, '') table.insert(wikitable, '') table.insert(wikitable, '') end if args[v]['header'] then -- Subheader table.insert(wikitable, '\n|-\n!colspan="5" class="hmA"|'.. args[v]['header']) table.insert(wikitable, '') table.insert(wikitable, '') table.insert(wikitable, '') end if args[v]['line'] or args[v]['left'] or args[v]['right'] or args[v]['nonstop'] then if not args[v]['line'] and i > 1 and not args[v]['system'] then args[v]['line'] = args[index[i - 1]]['line'] end lineN = args[v]['line'] or '_default' typeN = args[v]['type'] if data[v]['aliases'] then lineN = data[v]['aliases'][mw.ustring.lower(lineN)] or lineN if typeN then typeN = data[v]['aliases'][mw.ustring.lower(typeN)] or typeN end end -- get the line table local line = data[v]['lines'] and (mw.clone(data[v]['lines'][lineN]) or error(i18n[lang]['error_unknown'](args[v]['line']))) or error(i18n[lang]['error_line']) local default = data[v]['lines']['_default'] or {} line['title'] = line['title'] or default['title'] or '' line['title'] = mw.ustring.gsub(line['title'], '%%1', lineN) -- cell across row for non-stop service if args[v]['nonstop'] then table.insert(wikitable, table.concat({'\n|-\n|colspan="5" ', style['body cell'], ((args[v]['nonstop'] == 'former') and i18n[lang]['nonstop_past'] or i18n[lang]['nonstop_present'])(p._box({data = data[v], line = lineN, Type = typeN, inline = 'yes'})) }) ) table.insert(wikitable, '') table.insert(wikitable, '') table.insert(wikitable, '') else local Format = data[v]['station format'] or i18n[lang]['error_format'] local color, color_2, background_color, circular local Type = line['types'] and line['types'][typeN] -- get the line type table if Type then if Type['color'] then -- line color is used as background if there is no background color in the line type table background_color = Type['background color'] or line['color'] color = Type['color'] color_2 = Type['color2'] or color else background_color = Type['background color'] or line['background color'] color = line['color'] or default['color'] or '' color_2 = line['color2'] or color end if Type['circular'] then -- Type may override the circular status of the line circular = Type['circular'] end else background_color = line['background color'] color = line['color'] or default['color'] or '' color_2 = line['color2'] or color circular = line['circular'] end -- Alternate termini can be specified based on type local sideCell = {true, true} for i, b in ipairs({'left', 'right'}) do if not args[v][b] then -- If no station is given on one side, the station is assumed to be the terminus on that side local _through = args[v]['through-' .. b] or args[v]['through'] local _through_data = getLine(data[v], _through) if _through_data then _through = _through_data['title'] or _through end sideCell[i] = _through and "''" .. i18n[lang]['through'](trimq(_through)) .. "''" or "''" .. trimq((args[v]['reverse-' .. b] or args[v]['reverse']) and i18n[lang]['reverse'] or i18n[lang]['terminus']) .. "''" else local terminusT local terminusN = Type and Type[b .. ' terminus'] or line[b .. ' terminus'] -- If the terminus table has more than one numbered key or has the via key then the table shows only the default termini, since terminusN[2] cannot be used and terminusN[via] is reserved if type(terminusN) == 'string' or (type(terminusN) == 'table' and (terminusN[2] or terminusN['via'])) then if args[v]['to-' .. b] then terminusT = args[v]['to-' .. b] local _or = mw.ustring.match(terminusT, i18n[lang]['or-format']) if _or then terminusT = mw.ustring.gsub(terminusT, i18n[lang]['or-format'], '\127_OR_\127') terminusT = mw.ustring.gsub(terminusT, i18n[lang]['comma-format'], '\127_OR_\127') end local _via = (mw.ustring.match(terminusT, i18n[lang]['via-format'])) if _via then terminusT = mw.ustring.gsub(terminusT, i18n[lang]['via-format'], '') terminusT = mw.text.split(terminusT, '\127_OR_\127') terminusT['via'] = _via elseif _or then terminusT = mw.text.split(terminusT, '\127_OR_\127') end else terminusT = terminusN end elseif type(terminusN) == 'table' then terminusT = terminusN[args[v]['to-' .. b]] or terminusN[args[v]['to']] or terminusN[1] end local mainText = args[v]['note-' .. b] and getTerminusText(args[v][b], Format) .. small(args[v]['note-' .. b]) or getTerminusText(args[v][b], Format) local subText = (args[v]['oneway-' .. b] or line['oneway-' .. b]) and i18n[lang]['oneway'] or args[v][b] == terminusT and i18n[lang]['terminus'] or circular and terminusT or i18n[lang]['towards'](getTerminusText(terminusT, Format)) subText = small(subText, true) sideCell[i] = mainText .. subText end end table.insert(wikitable, '\n|-') table.insert(wikitable, '\n|' .. style['body cell'] .. sideCell[1]) table.insert(wikitable, table.concat({'\n|', style['body banner'], color, '"|', '\n|', (background_color and 'class="bcA" style="background-color:rgba(' .. table.concat(rgb(background_color), ',') .. ',.2)"|' or style['body cell']), line['title'], -- Type; table key 'types' in subpages (datatype table, with strings as keys). If table does not exist then the input is displayed as the text (typeN and '<div>' .. (Type and Type['title'] or typeN) .. '</div>' or ''), -- Note-mid; table key 'note-mid' in subpages. Overridden by user input ((args[v]['note-mid'] and small(args[v]['note-mid'])) or (Type and Type['note-mid'] and small(Type['note-mid'])) or (line['note-mid'] and small(line['note-mid'])) or ''), -- Transfer; uses system's station link table (args[v]['transfer'] and small('transfer at ' .. getTerminusText(args[v]['transfer'], Format), true) or ''), '\n|', style['body banner'], color_2, '"|'})) table.insert(wikitable, '\n|' .. style['body cell'] .. sideCell[2]) end end if args[v]['note-row'] then -- Note if args[v]['note-row']:match('^%s*<tr') or args[v]['note-row']:match('^%s*%|%-') then table.insert(wikitable, '\n' .. args[v]['note-row']) else table.insert(wikitable, '\n|-\n|colspan="5" ' .. style['body cell'] .. args[v]['note-row']) end table.insert(wikitable, '') table.insert(wikitable, '') table.insert(wikitable, '') end end local function combine(t, n) if t[n + 4] ~= '' and t[n + 4] == t[n] then t[n + 4] = '' -- The cell in the next row is deleted local rowspan = 2 while t[n + rowspan * 4] == t[n] do t[n + rowspan * 4] = '' rowspan = rowspan + 1 end t[n] = mw.ustring.gsub(t[n], '\n|class="', '\n|rowspan="' .. rowspan .. '" class="') end end local M = #wikitable for i = 3, M, 4 do combine(wikitable, i) end for i = 4, M, 4 do combine(wikitable, i) end for i = 5, M, 4 do combine(wikitable, i) end table.insert(wikitable, '\n|}') return table.concat(wikitable) end local getArgs = require('Module:Arguments').getArgs local function makeInvokeFunction(funcName) -- makes a function that can be returned from #invoke, using -- [[Module:Arguments]] return function (frame) local args = getArgs(frame, {parentOnly = true}) return p[funcName](args, frame) end end local function makeTemplateFunction(funcName) -- makes a function that can be returned from #invoke, using -- [[Module:Arguments]] return function (frame) local args = getArgs(frame, {frameOnly = true}) return p[funcName](args, frame) end end p.main = makeInvokeFunction('_main') function p._color(args, frame) local data = args.data if args[1] or data then data = data or getData(args[1], true) if not data then return getColor(nil, args[1], args[2], args[3], frame) end return getColor(data, nil, args[2], args[3]) end end p.color = makeInvokeFunction('_color') function p._box(args, frame) local system = args[1] or args.system lineN = args[2] or args.line if not (system or lineN) then return '' end local line, Type, line_data local inline = args[3] or args.inline typeN = args.type local data = args.data if system or data then data = data or getData(system, true) local color if data then local default = data['lines']['_default'] or {} line, lineN = getLine(data, lineN) if typeN then typeN = data['aliases'] and data['aliases'][mw.ustring.lower(typeN)] or typeN Type = line['types'] and line['types'][typeN] and line['types'][typeN]['title'] or typeN end color = getColor(data, nil, lineN, typeN) if inline ~= 'box' then line_data = line or error(i18n[lang]['error_unknown'](lineN)) line = line_data['title'] or default['title'] or error(i18n[lang]['error_missing']('title')) line = mw.ustring.gsub(line, '%%1', lineN) end else color = getColor(nil, system, lineN, typeN, frame) if inline ~= 'box' then line = frame:expandTemplate{ title = system .. ' lines', args = {lineN, ['branch'] = typeN} } if mw.text.trim(line) == '' then return error(i18n[lang]['error_unknown'](lineN)) end end Type = typeN end local result if Type and Type ~= '' and inline ~= 'box' then if line == '' then line = Type else result = ' – ' .. Type end end if args.note then result = (result or '') .. ' ' .. args.note end result = result or '' if not inline then -- [[Template:Legend]] result = '<div class="legend" style="page-break-inside:avoid;break-inside:avoid-column"><span class="legend-color" style="display:inline-block;min-width:1.25em;height:1.25em;line-height:1.25;margin:1px 0;border:1px solid black;color:inherit;background-color:#' .. color .. '"> </span> ' .. line .. result .. '</div>' elseif inline == 'yes' then result = '<span style="color:inherit;background-color:#' .. color .. ';border:1px solid #000">    </span>&nbsp;' .. line .. result elseif inline == 'box' then result = '<span style="color:inherit;background-color:#' .. color .. ';border:1px solid #000">    </span>' .. result elseif inline == 'link' then local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') if link then result = '[[' .. link .. '|<span style="color:inherit;background-color:#' .. color .. ';border:1px solid #000">    </span>]]' .. result else result = '<span style="color:inherit;background-color:#' .. color .. ';border:1px solid #000">    </span>' .. result end elseif inline == 'square' then result = '<span style="color:#' .. color .. ';line-height:initial">■</span>&nbsp;' .. line .. result elseif inline == 'lsquare' then local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') if link then result = '[[' .. link .. '|<span style="color:#' .. color .. ';line-height:initial">■</span>]]' else result = '<span style="color:#' .. color .. ';line-height:initial">■</span>' end elseif inline == 'dot' then result = '<span style="color:#' .. color .. ';line-height:initial">●</span> ' .. line .. result elseif inline == 'ldot' then local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') if link then result = '[[' .. link .. '|<span style="color:#' .. color .. ';line-height:initial">●</span>]]' else result = '<span style="color:#' .. color .. ';line-height:initial">●</span>' end elseif inline == 'small' then result = '<span style="color:inherit;background-color:#' .. color .. '"> </span>' .. ' ' .. line .. result else local yesno = require("Module:Yesno") local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') local border_color, text_color local color_box = data['color box format'] or data['rail box format'] or {} if line_data then if line_data['types'] and line_data['types'][typeN] then local Type_data = line_data['types'][typeN] border_color = Type_data['border color'] or line_data['border color'] or color text_color = Type_data['text color'] or line_data['text color'] if color_box == 'title' and not args[4] then lineN = Type_data['short name'] or line_data['short name'] or require('Module:Delink')._delink{line} else lineN = Type_data['short name'] or line_data['short name'] or lineN end else border_color = line_data['border color'] or color text_color = line_data['text color'] if color_box == 'title' and not args[4] then lineN = line_data['short name'] or require('Module:Delink')._delink{line} else lineN = line_data['short name'] or lineN end end else border_color = color end text_color = text_color and '#' .. text_color or require('Module:Color contrast')._greatercontrast{color} local bold = ';font-weight:bold' if (yesno(args.bold) == false) then bold = '' end if inline == 'route' then -- [[Template:RouteBox]] if link then result = '<span style="color:inherit;background-color:#' .. color .. ';border:.075em solid #' .. border_color .. ';padding:0 .3em">[[' .. link .. '|<span style="color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>]]</span>' else result = '<span style="background-color:#' .. color .. ';border:.075em solid #' .. border_color .. ';padding:0 .3em;color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>' end elseif inline == 'croute' then -- [[Template:Bahnlinie]] if link then result = '<span style="color:inherit;background-color:#' .. color .. ';border:.075em solid #' .. border_color .. ';border-radius:.5em;padding:0 .3em">[[' .. link .. '|<span style="color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>]]</span>' else result = '<span style="color:inherit;background-color:#' .. color .. ';border:.075em solid #' .. border_color .. ';border-radius:.5em;padding:0 .3em;color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>' end elseif inline == 'xroute' then -- [[Template:Bahnlinie]] if link then result = '<span style="border:.075em solid #' .. border_color .. ';border-radius:.5em;padding:0 .3em">[[' .. link .. '|<span style="color:#' .. color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>]]</span>' else result = '<span style="border:.075em solid #' .. border_color .. ';border-radius:.5em;padding:0 .3em;color:#' .. color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>' end elseif inline == 'broute' then if link then result = '<span style="color:inherit;background-color:#' .. color .. ';border:.075em solid #000;padding:0 .3em">[[' .. link .. '|<span style="color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>]]</span>' else result = '<span style="background-color:#' .. color .. ';border:.075em solid #000;padding:0 .3em;color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>' end else -- [[Template:Legend]] (fallback; duplication to simplify logic) result = '<div class="legend" style="page-break-inside:avoid;break-inside:avoid-column"><span class="legend-color" style="display:inline-block;min-width:1.25em;height:1.25em;line-height:1.25;margin:1px 0;border:1px solid black;color:inherit;background-color:#' .. color .. '"> </span> ' .. line .. result .. '</div>' end end result = mw.ustring.gsub(result, ':%s*#transparent', ':transparent') return result end end p.box = makeInvokeFunction('_box') function p._icon(args, frame) local system = args[1] or args.system local data = args.data if not system and not data then return end data = data or getData(system) local line, line_name = getLine(data, args[2] or args.line) local icon local icon_format if line then local line_type = args[3] or args.type if line_type then line_type = data.aliases and data.aliases[mw.ustring.lower(line_type)] or line_type line_type = line.types and line.types[line_type] -- If there's no type table or entry for this type, then it can't have its own icon icon_format = line_type['icon format'] or data['type icon format'] if line_type.icon then icon = line_type.icon end end if not icon then icon = line.icon end -- Only if there is no icon use the icon_format. if not icon and not icon_format then icon_format = line['icon format'] or data['line icon format'] end local default = data.lines._default or {} if icon and string.find(icon, "%%1") and default and default.icon then icon = mw.ustring.gsub(default.icon, '%%1', line_name) end end if not icon then icon = data['system icon'] end if not icon_format then icon_format = data['system icon format'] end if icon_format then if icon_format ~= 'image' then icon = p._box({data = data, [2] = (args[2] or args.line), [3] = icon_format, type = (args[3] or args.type), bold = args.bold, link = args.link}, frame) if args.name then if line and line.title then return icon .. " " .. line.title end return icon .. " " .. data["system title"] end end end local size = args.size if size then if mw.ustring.match(size, '%d$') then size = '|' .. size .. 'px' else size = '|' .. size end -- Upright values are to be disabled until there is use of upright scaling in subpages; doesn't seem to work anyway as of 2018-08-10 local regex = { '|%s*%d*x?%d+px%s*([%]|])', -- '|%s*upright=%d+%.?%d*%s*([%]|])', '|%s*upright%s*([%]|])' } if mw.ustring.match(icon, regex[1]) then icon = mw.ustring.gsub(icon, regex[1], size .. '%1') -- elseif mw.ustring.match(icon, regex[2]) then -- icon = gsub(icon, regex[2], size .. '%1') -- elseif mw.ustring.match(icon, regex[3]) then -- icon = gsub(icon, regex[3], size .. '%1') else icon = mw.ustring.gsub(icon, '(%[%[[^%]|]+)([%]|])', '%1' .. size .. '%2') end end local link = args.link if link then if mw.ustring.match(icon, '|%s*link=[^%]|]*[%]|]') then icon = mw.ustring.gsub(icon, '|%s*link=[^%]|]*([%]|])', '|link=' .. link .. '%1') else icon = mw.ustring.gsub(icon, '(%[%[[^%]|]+)([%]|])', '%1|link=' .. link .. '%2') end end local alt = args.alt or link if alt then if mw.ustring.match(icon, '|%s*alt=[^%]|]*[%]|]') then icon = mw.ustring.gsub(icon, '|%s*alt=[^%]|]*([%]|])', '|alt=' .. alt .. '%1') else icon = mw.ustring.gsub(icon, '(%[%[[^%]|]+)([%]|])', '%1|alt=' .. alt .. '%2') end end if args.name then if line and line.title then return icon .. " " .. line.title end return icon .. " " .. data["system title"] end return icon end p.icon = makeInvokeFunction('_icon') p['rail icon'] = makeTemplateFunction('_icon') function p._line(args, frame) local system = args[1] or args.system local line = args[2] or args.line if not line then return '' end local Type = args[3] or args.type local data = args.data if system or data then data = data or getData(system, true) if data then line = (getLine(data, line)) or error(i18n[lang]['error_unknown'](line)) if Type then Type = data['aliases'] and data['aliases'][mw.ustring.lower(Type)] or Type Type = line['types'] and line['types'][Type] and line['types'][Type]['title'] or Type end line = line['title'] or error(i18n[lang]['error_missing']('title')) else line = frame:expandTemplate{ title = system .. ' lines', args = {line, ['branch'] = Type} } if mw.text.trim(line) == '' then return error(i18n[lang]['error_unknown'](lineN)) end end if Type and Type ~= '' then if line == '' then line = Type else line = line .. ' – ' .. Type end end return line end end p.line = makeInvokeFunction('_line') function p._shortline(args, frame) local system = args[1] or args.system lineN = args[2] or args.line if not (system or lineN) then return '' end local line, Type, line_data typeN = args.type local data = args.data if system or data then data = data or getData(system, true) if data then local default = data['lines']['_default'] or {} line, lineN = getLine(data, lineN) if typeN then typeN = data['aliases'] and data['aliases'][mw.ustring.lower(typeN)] or typeN Type = line['types'] and line['types'][typeN] and line['types'][typeN]['title'] or typeN end line_data = line or error(i18n[lang]['error_unknown'](lineN)) line = line_data['title'] or default['title'] or error(i18n[lang]['error_missing']('title')) line = mw.ustring.gsub(line, '%%1', lineN) else line = frame:expandTemplate{ title = system .. ' lines', args = {lineN, ['branch'] = typeN} } if mw.text.trim(line) == '' then return error(i18n[lang]['error_unknown'](lineN)) end Type = typeN end local result if Type and Type ~= '' then if line == '' then line = Type else result = ' – ' .. Type end end if args.note then result = (result or '') .. ' ' .. args.note end result = result or '' local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') if line_data then if line_data['types'] and line_data['types'][typeN] then local Type_data = line_data['types'][typeN] lineN = Type_data['short name'] or line_data['short name'] or lineN else lineN = line_data['short name'] or lineN end end if link then result = '[[' .. link .. '|' .. lineN .. ']]' else result = lineN end result = mw.ustring.gsub(result, ':%s*#transparent', ':transparent') return result end end p.shortline = makeInvokeFunction('_shortline') function p._station(args, frame) local system = args[1] or args.system local station = args[2] or args.station if not station then return '' end lineN = args[3] or args.line typeN = args[4] or args.type local data = args.data if system or data then data = data or getData(system, true) if data then local _Format = data['station format'][station] or data['station format'][1] if _Format then if data['aliases'] then if lineN then lineN = data['aliases'][mw.ustring.lower(lineN)] or lineN end if typeN then typeN = data['aliases'][mw.ustring.lower(typeN)] or typeN end end station = getStation(station, _Format) else station = station or '' end else station = frame:expandTemplate{ title = system .. ' stations', args = {['station'] = station, ['line'] = lineN, ['branch'] = typeN} } end return station end end p.station = makeInvokeFunction('_station') p['station link'] = makeTemplateFunction('_station') function p._terminusTable(args, frame) local system = args[1] or args.system lineN = args[2] or args.line local side = mw.ustring.sub(mw.ustring.lower(args[3] or args.side or ''), 1, 1) typeN = args.type local prefix = (side == 'r') and 'right' or 'left' local data = args.data if system or data then data = data or getData(system, true) end if data then local line = getLine(data, lineN) or error(i18n[lang]['error_unknown'](lineN)) if typeN and data and data['aliases'] then typeN = data['aliases'][mw.ustring.lower(typeN)] or typeN end local Type = line['types'] and line['types'][typeN] local circular if Type then if Type['circular'] then -- Type may override the circular status of the line circular = Type['circular'] end else circular = line['circular'] end return Type and Type[prefix .. ' terminus'] or line[prefix .. ' terminus'], data['station format'] or i18n[lang]['error_format'], circular else local terminus = frame:expandTemplate{ title = 'S-line/' .. system .. ' ' .. prefix .. '/' .. lineN } return mw.ustring.gsub(terminus, '{{{type}}}', typeN) end end function p._terminus(args, frame) local var, Format, circular = p._terminusTable(args, frame) return circular and var or getTerminusText(var, Format) end p.terminus = makeInvokeFunction('_terminus') function p._style(args, frame) local style = args[1] or args.style local system = args[2] or args.system local line = args[3] or args.line local station = args[4] or args.station local result = {} local data = args.data local default = 'color:inherit;background-color:#efefef' -- Default text and background color for {{Infobox station}} if system or data then data = data or getData(system, true) end if data then local function getValue(var) if type(var) == 'table' then var = var[line] or var[1] if type(var) == 'table' then var = var[station] or var[1] end end if var ~= '' then return var end end if style == 'header' then local tmp = data['name format'] and getValue(data['name format']) if tmp then table.insert(result, tmp) end elseif style == 'subheader' then local tmp = data['header background color'] and getValue(data['header background color']) if tmp then table.insert(result, 'background-color:#' .. tmp) local color = data['header text color'] and getValue(data['header text color']) if color then table.insert(result, 'color:#' .. color) else local greatercontrast = require('Module:Color contrast')._greatercontrast if greatercontrast{tmp} == '#FFFFFF' then table.insert(result, 'color:#FFFFFF') end end else table.insert(result, default) local color = data['header text color'] and getValue(data['header text color']) if color then table.insert(result, 'color:#' .. color) end end end result = table.concat(result, ';') elseif system then local title = 'Template:' .. system .. ' style' local titleObj = mw.title.new(title) if titleObj and titleObj.exists then local tmp if style == 'header' then tmp = frame:expandTemplate{ title = title, args = {'name_format', line, station} } if tmp ~= '' then table.insert(result, tmp) end elseif style == 'subheader' then tmp = frame:expandTemplate{ title = title, args = {'thbgcolor', line, station} } if tmp ~= '' then table.insert(result, 'background-color:#' .. tmp) local color = frame:expandTemplate{ title = title, args = {'thcolor', line, station} } if color ~= '' then table.insert(result, 'color:#' .. color) else local ratio = require('Module:Color contrast')._ratio if ratio{tmp, '222222'} < 4.5 then table.insert(result, 'color:#FFFFFF') end -- 222222 is the default text color in Vector end else table.insert(result, default) tmp = frame:expandTemplate{ title = title, args = {'thcolor', line, station} } if tmp ~= '' then table.insert(result, 'color:#' .. tmp) end end end result = table.concat(result, ';') else if style == 'subheader' then result = default else result = '' end end else if style == 'subheader' then result = default else result = '' end end return result end function p.style(frame) local args = getArgs(frame, {frameOnly = true}) return p._style(args, frame) end function p.convert(frame) local args = frame.args local code = mw.text.split(mw.ustring.gsub(args[1], '^%s*{{(.*)}}%s*$', '%1'), '%s*}}%s*{{%s*') local system local group = tonumber(args.offset or 0) or 0 local firstgroup = group + 1 local delete = { ['s-rail'] = true, ['s-rail-next'] = true, ['s-rail-national'] = true, ['s-start'] = true, ['s-rail-start'] = true, ['start'] = true, ['s-end'] = true, ['end'] = true } local order = { 'line', 'left', 'right', 'to-left', 'to-right', 'oneway-left', 'oneway-right', 'through-left', 'through-right', 'reverse', 'reverse-left', 'reverse-right', 'note-left', 'note-mid', 'note-right', 'transfer' -- circular: use module subpage -- state: not implemented } local replace = { ['previous'] = 'left', ['next'] = 'right', ['type'] = 'to-left', ['type2'] = 'to-right', ['branch'] = 'type', ['note'] = 'note-left', ['notemid'] = 'note-mid', ['note2'] = 'note-right', ['oneway1'] = 'oneway-left', ['oneway2'] = 'oneway-right', ['through1'] = 'through-left', ['through2'] = 'through-right' } local remove_rows = {} local data = {} local noclear = false for i, v in ipairs(code) do code[i] = mw.ustring.gsub(code[i], '\n', ' ') local template = mw.ustring.lower(mw.text.trim(mw.ustring.match(code[i], '^[^|]+'))) code[i] = mw.ustring.match(code[i], '(|.+)$') if (mw.ustring.match(code[i] or '', 'noclear%s*=%s*[a-z]')) then noclear = true end if template == 's-line' then data[i] = {} local this_system = mw.text.trim(mw.ustring.match(code[i], '|%s*system%s*=([^|]+)')) code[i] = mw.text.split(code[i], '%s*|%s*') for m, n in ipairs(code[i]) do local tmp = mw.text.split(n, '%s*=%s*') if tmp[3] then tmp[2] = mw.ustring.gsub(n, '^.-%s*=', '') end tmp[1] = replace[tmp[1]] or tmp[1] if tmp[2] then -- checks for matching brackets local curly = select(2, mw.ustring.gsub(tmp[2], "{", ""))-select(2, mw.ustring.gsub(tmp[2], "}", "")) local square = select(2, mw.ustring.gsub(tmp[2], "%[", ""))-select(2, mw.ustring.gsub(tmp[2], "%]", "")) if not (curly == 0 and square == 0) then local count = mw.clone(m)+1 while not (curly == 0 and square == 0) do tmp[2] = tmp[2]..'|'..code[i][count] curly = curly+select(2, mw.ustring.gsub(code[i][count], "{", ""))-select(2, mw.ustring.gsub(code[i][count], "}", "")) square = square+select(2, mw.ustring.gsub(code[i][count], "%[", ""))-select(2, mw.ustring.gsub(code[i][count], "%]", "")) code[i][count] = '' count = count+1 end end data[i][tmp[1]] = tmp[2] end end if (this_system ~= system) or (not system) then system = this_system data[i]['system'] = system else data[i]['system'] = nil end local last = data[i-1] or data[i-2] or data[i-3] if last then for r, s in pairs({ ['hide1'] = {'left', 'to-left', 'note-left', 'oneway-left'}, ['hide2'] = {'right', 'to-right', 'note-right', 'oneway-right'}, ['hidemid'] = {'type', 'note-mid'} }) do if data[i][r] then for m, n in ipairs(s) do if not data[i][n] then data[i][n] = last[n] end end end end end code[i] = {} local X = '|' local Y = (i+group)..'=' if data[i]['system'] then table.insert(code[i], '|system') table.insert(code[i], Y) table.insert(code[i], data[i]['system']) table.insert(code[i], '\n') end for m, n in ipairs(order) do if data[i][n] then table.insert(code[i], X) table.insert(code[i], n) table.insert(code[i], Y) table.insert(code[i], data[i][n]) end end code[i] = table.concat(code[i]) elseif template == 's-note' then code[i] = mw.ustring.gsub(code[i], '|%s*text%s*=', '|header'..i+group..'=') code[i] = mw.ustring.gsub(code[i], '|%s*wide%s*=[^|]*', '') elseif template == 's-text' then code[i] = mw.ustring.gsub(code[i], '|%s*text%s*=', '|note-row'..i+group..'=') elseif delete[template] then code[i] = '' table.insert(remove_rows, 1, i) -- at the start, so that the rows are deleted in reverse order group = group-1 end end for i, v in ipairs(remove_rows) do table.remove(code, v) end code = table.concat(code, '\n') local t = {'{{Adjacent stations' .. (noclear and '|noclear=y\n' or ''), '\n}}'} system = mw.ustring.match(code, '|system(%d*)=') code = mw.ustring.gsub(code, '\n\n+', '\n') if tonumber(system) > firstgroup then -- If s-line isn't the first template then the system will have to be moved to the top system = mw.ustring.match(code, '|system%d*=([^|]*[^|\n])') code = mw.ustring.gsub(code, '|system%d*=[^|]*', '') code = '\n|system'..firstgroup..'='..system..code elseif not mw.ustring.match(code, '^[^{%[]*|[^=|]+2=') then -- If there's only one parameter group then there's no need to have line breaks code = mw.ustring.gsub(code, '\n', '') code = mw.ustring.gsub(code, '(|[^=|]+)1=', '%1=') t[2] = '}}' if not mw.ustring.match(code, '[%[{]') then code = mw.ustring.gsub(code, '|[^=|]*=$', '') code = mw.ustring.gsub(code, '|[^=|]*$', '') end end if not mw.ustring.match(code, '[%[{]') then code = mw.ustring.gsub(code, '|[^=|]*=|', '|') code = mw.ustring.gsub(code, '|[^=|]*|', '|') code = mw.ustring.gsub(code, '|[^=|]*=\n', '\n') code = mw.ustring.gsub(code, '|[^=|]*\n', '\n') end return t[1]..code..t[2] end return p jca1evjg28y2y92hnk1s3eak58flopp Module:Adjacent stations/Amtrak 828 176067 746269 2026-05-29T03:02:01Z en>Pi.1415926535 0 update link 746269 Scribunto text/plain local amtrak = "%1 station (Amtrak)" local al = "%1 station (Alabama)" local ar = "%1 station (Arkansas)" local az = "%1 station (Arizona)" local ca = "%1 station (California)" local cccr = "%1 station (CCCR)" local co = "%1 station (Colorado)" local ct = "%1 station (Connecticut)" local de = "%1 station (Delaware)" local fl = "%1 station (Florida)" local ga = "%1 station (Georgia)" local go = "%1 GO Station" local ia = "%1 station (Iowa)" local ind = "%1 station (Indiana)" local il = "%1 station (Illinois)" local ks = "%1 station (Kansas)" local lou = "%1 station (Louisiana)" local ma = "%1 station (Massachusetts)" local marc = "%1 station (MARC)" local md = "%1 station (Maryland)" local me = "%1 station (Maine)" local mi = "%1 station (Michigan)" local mn = "%1 station (Minnesota)" local mnrr = "%1 station (Metro-North)" local mo = "%1 station (Missouri)" local ms = "%1 station (Mississippi)" local mt = "%1 station (Montana)" local nc = "%1 station (North Carolina)" local nd = "%1 station (North Dakota)" local ne = "%1 station (Nebraska)" local nh = "%1 station (New Hampshire)" local njt = "%1 station (NJ Transit)" local ny = "%1 station (New York)" local nm = "%1 station (New Mexico)" local nv = "%1 station (Nevada)" local oh = "%1 station (Ohio)" local ok = "%1 station (Oklahoma)" local on = "%1 station (Ontario)" local ore = "%1 station (Oregon)" local pa = "%1 station (Pennsylvania)" local ri = "%1 station (Rhode Island)" local sc = "%1 station (South Carolina)" local septa = "%1 station (SEPTA)" local septarr = "%1 station (SEPTA Regional Rail)" local tc = "%1 Transportation Center" local tx = "%1 station (Texas)" local union = "Union Station (%1)" local ut = "%1 station (Utah)" local va = "%1 station (Virginia)" local vt = "%1 station (Vermont)" local wa = "%1 station (Washington)" local wi = "%1 station (Wisconsin)" local wv = "%1 station (West Virginia)" local wy = "%1 station (Wyoming)" local xunion = "%1 Union Station" local p = { ["lang"] = "en-US", ["system title"] = "[[Amtrak]]", ["system icon"] = "[[File:BSicon LOGO Amtrak2.svg|20px|link=Amtrak]]", ["system color"] = "00537E", ["name format"] = { "font-size: 160%; font-weight: bolder; color: #FFFFFF; background-color: #00537E; padding: 0.4em 4px;", ["Amtrak old"] = "font-size: 160%; font-family:Helvetica Neue, Helvetica; font-weight: bolder; color: #ffffff; background-color: #0078B9; padding: 0.4em 4px;" }, ["header text color"] = "FFFFFF", ["header background color"] = { "00537E", ["Amtrak old"] = "0078B9", }, ["station format"] = { "%1 station", ["16th Street"] = "[[16th Street station (Oakland)|Oakland]]", ["30th Street"] = "[[30th Street Station|Philadelphia–30th Street]]", ["52nd Street"] = septarr, ["Aberdeen"] = md, ["Akron"] = { ["Broadway Limited"] = amtrak, ["Three Rivers"] = amtrak, ["California Zephyr"] = co, ["Desert Wind"] = co, ["Pioneer"] = co, }, ["Albany"] = { "[[Albany–Rensselaer station|Albany–Rensselaer]]", ["Cascades"] = ore, ["Coast Starlight"] = ore, ["Willamette Valley"] = ore, }, ["Albion"] = mi, ["Albuquerque"] = "Alvarado Transportation Center", ["Aldershot"] = go, ["Alexandria"] = xunion, ["Alton"] = il, ["Altoona"] = tc, ["Amherst"] = ma, ["Amsterdam"] = ny, ["Anaheim"] = "Anaheim Regional Transportation Intermodal Center", ["Antioch"] = "[[Antioch–Pittsburg station|Antioch–Pittsburg]]", ["Ardmore"] = { pa, ["Heartland Flyer"] = ok, ["Lone Star"] = ok, }, ["Ashland"] = { va, ["Cardinal"] = tc, ["James Whitcomb Riley"] = tc, ["James Whitcomb Riley and George Washington"] = tc, }, ["Athens"] = oh, ["Atlanta"] = "Peachtree station", ["Atlantic City"] = "Atlantic City Rail Terminal", ["Attleboro"] = ma, ["Auburn"] = ca, ["Aurora"] = tc, ["Austin"] = tx, ["BWI Airport"] = "BWI Rail Station", ["Boston"] = { "[[South Station|Boston South]]", ["Downeaster"] = "[[North Station|Boston North]]" }, ["Back Bay"] = "[[Back Bay station|Boston Back Bay]]", ["Bakersfield"] = amtrak, ["Baltimore Airport"] = "BWI Rail Station", ["Baltimore"] = "Baltimore Penn Station", ["Bangor"] = mi, ["Barstow"] = "Barstow Harvey House", ["Battle Creek"] = tc, ["Baton Rouge"] = "Baton Rouge, Louisiana", ["Bedford"] = va, ["Belleville"] = amtrak, ["Bellingham"] = "Fairhaven Station", ["Berkeley"] = amtrak, ["Berlin"] = ct, ["Berwyn"] = septa, ["Bill Lee"] = "[[Chipley station|Chipley]]", ["Birmingham"] = { al, ["Wolverine"] = mi, }, ["Black Rock"] = "Black Rock Rail Yard", ["Bloomington"] = "Bloomington station (Monon Railroad)", ["Bloomington–Normal"] = { "Uptown Station", ["Floridian (1971–1979)"] = ind, }, ["Bloomington–Normal"] = "[[Uptown Station|Bloomington–Normal]]", ["Bloomington–Normal"] = "[[Uptown Station|Bloomington–Normal]]", ["Boise"] = "Boise Union Pacific Depot", ["Boston North"] = "North Station", ["Boston South"] = "South Station", ["Bowie"] = "Bowie Railroad Buildings", ["Bowling Green"] = "Bowling Green station (Louisville and Nashville Railroad)", ["Brampton"] = go, ["Brattleboro"] = "Union Station (Brattleboro, Vermont)", ["Bridgeport"] = ct, ["Brookhaven"] = "Godbold Transportation Center", ["Brunswick"] = { md, ["Downeaster"] = me }, ["Bryan"] = oh, ["Bryn Mawr"] = septarr, ["Buffalo"] = "Buffalo–Depew station", ["Buffalo Central Terminal"] = "[[Buffalo Central Terminal|Buffalo]]", ["Burbank Airport"] = "[[Burbank Airport–South station|Hollywood Burbank Airport]]", ["Burlington"] = { nc, ["California Zephyr"] = ia, ["Desert Wind"] = ia, ["Ethan Allen Express"] = "Union Station (Burlington, Vermont)", ["Maple Leaf"] = "Burlington GO Station", ["Pioneer"] = ia, }, ["Burlington West"] = "Burlington GO Station#History", ["Cambridge"] = { mn, ["Northern Lights Express"] = "Cambridge, Minnesota" }, ["Camden"] = sc, ["Canton"] = { oh, ["City of New Orleans"] = ms, }, ["Cary"] = nc, ["Castleton"] = vt, ["Centralia"] = { il, ["Cascades"] = wa, ["Coast Starlight"] = wa, ["Pioneer"] = wa, }, ["Champaign-Urbana"] = "[[Illinois Terminal|Champaign–Urbana]]", ["Charleston"] = { "North Charleston station", ["Cardinal"] = wv, ["James Whitcomb Riley"] = wv, ["James Whitcomb Riley and George Washington"] = wv, }, ["Charlotte"] = amtrak, ["Charlotte Gateway"] = "[[Charlotte Gateway Station|Gateway Station]]", ["Charlottesville"] = xunion, ["Chelsea"] = mi, ["Cherry Hill"] = njt, ["Chester"] = "Chester Transit Center", ["Cheyenne"] = "Cheyenne Depot Museum", ["Chicago (Central Station)"] = "[[Central Station (Chicago terminal)|Chicago–Central]]", ["Chicago"] = xunion, ["Chillicothe"] = { il, ["Shenandoah"] = oh, }, ["Chillicothe, IL"] = "[[Chillicothe station (Illinois)|Chillicothe]]", ["Cincinnati"] = "Cincinnati Union Terminal", ["Cincinnati River Road"] = "[[Cincinnati River Road station|Cincinnati (River Road)]]", ["Claremont"] = nh, ["Clearwater"] = amtrak, ["Cleburne"] = "Cleburne Intermodal Transportation Depot", ["Cleveland Union Terminal"] = "[[Tower City Center#Cleveland Union Terminal|Cleveland]]", ["Cleveland"] = "Cleveland Lakefront Station", ["Clinton"] = ct, ["Colonel Allensworth State Historic Park"] = "Colonel Allensworth State Historic Park#Amtrak station", ["Colonie–Schenectady"] = "Schenectady station#History", ["Columbia"] = sc, ["Columbus"] = { "Columbus station", ["National Limited"] = "Union Station (Columbus, Ohio)", }, ["Commerce"] = ca, ["Crestview"] = { ct, ["Sunset Limited"] = "Crestview station (Florida)", }, ["Cumberland"] = md, ["Dallas"] = xunion, ["Davis"] = ca, ["Dayton"] = "Dayton Union Station", ["DC"] = "[[Washington Union Station|Washington]]", ["Dearborn"] = "John D. Dingell Transit Center", ["Decatur"] = { il, ["Floridian (1971–1979)"] = "Decatur station (Southern Railway)", }, ["Del Mar"] = "Solana Beach station#Former Amtrak station at Del Mar", ["Delray Beach"] = { "%1 station", ["Floridian (1971–1979)"] = "Delray Beach station (Seaboard Air Line Railroad)", }, ["Delta"] = ut, ["Denver"] = xunion, ["Depew"] = "Buffalo–Depew station", ["Detroit (MC)"] = "[[Michigan Central Station|Detroit (Michigan Central)]]", ["Dover"] = tc, ["Dubuque"] = { ["Black Hawk"] = "Dubuque Intermodal Transportation Center", ["Black Hawk (1974–1981)"] = "Dubuque station", }, ["Duluth"] = "Duluth Depot", ["Dundas"] = "Dundas station (Dundas, Ontario)", ["Dunkirk"] = ny, ["Durand"] = xunion, ["Durham"] = { nc, ["Downeaster"] = "[[Durham–UNH station|Durham–UNH]]", }, ["East Lansing"] = "Capital Area Multimodal Gateway", ["East Lyme"] = "Niantic station", ["East Syracuse"] = "[[William F. Walsh Regional Transportation Center#History|Syracuse]]", ["Edgewood"] = marc, ["Edmonds"] = wa, ["Edmondson"] = "West Baltimore station#Edmondson", ["El Paso"] = "Union Depot (El Paso)", ["Elgin"] = il, ["Elmhurst"] = amtrak, ["Enfield"] = ct, ["Englewood"] = "Englewood station (Chicago)", ["Erie"] = "Union Station (Erie, Pennsylvania)", ["Essex"] = mt, ["Eureka"] = amtrak, ["Eugene"] = amtrak, ["Eugene-Springfield"] = "[[Eugene station (Amtrak)|Eugene]]", ["Eugene–Springfield"] = "[[Eugene station (Amtrak)|Eugene]]", ["Evanston"] = wy, ["Everett"] = "Everett Station", ["Evergreen"] = al, ["Exeter"] = nh, ["Exton"] = pa, ["Flint"] = mi, ["Florence"] = sc, ["Forsyth"] = mt, ["Fort Madison"] = { "Atchison, Topeka and Santa Fe Passenger and Freight Complex Historic District", ["Lone Star"] = "Fort Madison station (1968–2021)", }, ["Fort Worth"] = { "Fort Worth Central Station", ["Inter-American"] = "Fort Worth Union Depot (1900–2002)", ["Lone Star"] = "Fort Worth Union Depot (1900–2002)", }, ["Freeport"] = { me, ["Black Hawk"] = il, ["Black Hawk (1974–1981)"] = il, }, ["Fremont-Centerville"] = "[[Fremont station|Fremont]]", ["Fresno"] = "Santa Fe Passenger Depot (Fresno, California)", ["Fullerton"] = tc, ["Gainesville"] = { fl, ["Crescent"] = ga, ["Piedmont"] = ga, ["Heartland Flyer"] = tx, ["Lone Star"] = tx, }, ["Galesburg (SF)"] = "[[Galesburg station (Atchison, Topeka and Santa Fe Railway)|Galesburg (SF Depot)]]", ["Garden City"] = ks, ["Gary"] = { "Gary station (Pennsylvania Railroad)", ["Cardinal"] = "Gary station (Miller and Lake Streets)", }, ["Georgetown"] = go, ["Glasgow"] = mt, ["Glendale"] = tc, ["Grafton"] = wv, ["Grand Forks (GN)"] = "[[Great Northern Freight Warehouse and Depot|Grand Forks (GN Depot)]]", ["Grand Rapids"] = "Vernon J. Ehlers Station", ["Greenfield"] = "John W. Olver Transit Center", ["Greensboro"] = "J. Douglas Galyon Depot", ["Greenwood"] = ms, ["Green River"] = { ut, ["City of San Francisco"] = wy, ["Pioneer"] = wy, ["San Francisco Zephyr"] = wy, }, ["Groton"] = ct, ["Guelph"] = "Guelph Central Station", ["Hamilton"] = oh, ["Hammond"] = lou, ["Hancock"] = wv, ["Harrisburg"] = tc, ["Hartford"] = xunion, ["Hastings"] = ne, ["Haverhill"] = ma, ["Hayward"] = amtrak, ["Helena"] = "Helena Railroad Depot Historic District", ["Hermann"] = mo, ["Hillsborough"] = nc, ["Hinkle"] = "Hinkle Locomotive Service and Repair Facility", ["Hinton"] = wv, ["Hobart"] = ind, ["Holland"] = mi, ["Hollywood Burbank Airport"] = "[[Burbank Airport–South station|Hollywood Burbank Airport]]", ["Hollywood"] = fl, ["Hope"] = ar, ["Houston (Union Station)"] = "[[Union Station (Houston)|Houston–Union Station]]", ["Houston"] = tx, ["Hudson"] = ny, ["Huntingdon"] = amtrak, ["Huntington"] = amtrak, ["Hyannis"] = "Hyannis Transportation Center", ["Indianapolis"] = xunion, ["Irvine"] = tc, ["Jackson"] = { mi, ["City of New Orleans"] = "Union Station (Jackson, Mississippi)", ["Crescent"] = "Union Station (Jackson, Mississippi)", }, ["Jamestown"] = nd, ["Joliet Union Station"] = "[[Joliet Union Station|Joliet (Union Station)]]", ["Joliet"] = "Joliet Gateway Center", ["Kalamazoo"] = tc, ["Kansas City"] = xunion, ["Kelso"] = "Kelso Multimodal Transportation Center", ["Kelso–Longview"] = "Kelso Multimodal Transportation Center", ["Kensington"] = md, ["King City"] = "King City Multimodal Transportation Center", ["Kingston"] = ri, ["Kirkwood"] = mo, ["Lafayette"] = { ind, ["Sunset Limited"] = lou, }, ["La Grande"] = "La Grande station (Union Pacific Railroad)", ["La Grange"] = "LaGrange Road station", ["Lake City"] = fl, ["Lamar"] = amtrak, ["Lambert's Point"] = "[[Lambert's Point#station|Norfolk]]", ["Lancaster"] = pa, ["Laramie"] = wy, ["Las Vegas"] = { nm, ["Desert Wind"] = "Las Vegas Union Plaza station", ["Las Vegas Limited"] = "Las Vegas Union Plaza station", }, ["Laurel"] = ms, ["Lawrence"] = ks, ["Leavenworth"] = "Icicle Station", ["Lee Hall"] = "Lee Hall Depot", ["Levittown–Tullytown"] = "Levittown station", ["Lexington"] = nc, ["Lima"] = "Lima station (Pennsylvania Railroad)", ["Lincoln"] = { il, ["California Zephyr"] = ne, ["Desert Wind"] = "Lincoln station (Nebraska, 1926–2012)", ["Pioneer"] = "Lincoln station (Nebraska, 1926–2012)", }, ["Lincoln, NE (CB&Q)"] = "[[Lincoln station (Nebraska, 1926–2012)|Lincoln (CB&Q Depot)]]", ["Little Rock"] = xunion, ["Livingston"] = "Livingston Depot", ["Lodi"] = "Lodi Transit Station", ["Lompoc-Surf"] = "Lompoc–Surf station", ["London"] = on, ["Lorton"] = "Lorton station (Auto Train)", ["Los Angeles"] = "Los Angeles Union Station", ["Louisville"] = union, ["Lovelock"] = "Lovelock station", ["Lynchburg"] = "Kemper Street station", ["Madera (SF)"] = "[[Storey station|Madera (SF Station)]]", ["Madera"] = amtrak, ["Madison"] = { ct, ["Sunset Limited"] = fl, }, ["Malton"] = go, ["Malvern"] = { ar, ["Keystone Service"] = septa, }, ["Marceline"] = "Walt Disney Hometown Museum", ["Marion"] = amtrak, ["Marshall"] = tx, ["Marysville"] = ca, ["McKeesport"] = tc, ["Memphis"] = "Memphis Central Station", ["Merced"] = amtrak, ["Merced (CAHSR)"] = "[[Merced station (California High-Speed Rail)|Merced]]", ["Meriden"] = "Meriden Transit Center", ["Meridian"] = "Union Station (Meridian, Mississippi)", ["Merion"] = septa, ["Miami"] = amtrak, ["Middletown"] = pa, ["Midway"] = "[[Midway station (Minnesota)|Saint Paul–Midway]]", ["Milford"] = "Union Pacific Railroad Depot (Milford, Utah)", ["Milwaukee Airport"] = "Milwaukee Airport Railroad Station", ["Milwaukee"] = "Milwaukee Intermodal Station", ["Mineola"] = { tx, ["Northeast Regional"] = "Mineola station (LIRR)", ["Empire Service"] = "Mineola station (LIRR)", }, ["Minneapolis"] = "Minneapolis Great Northern Depot", ["Minneapolis Target Field"] = "Target Field station", ["Missoula"] = "Missoula station (Northern Pacific Railway)", ["Mobile"] = amtrak, ["Monroe"] = lou, ["Montgomery"] = { "Montgomery Union Station", ["Cardinal"] = wv, }, ["Montpelier"] = vt, ["Montreal"] = "Montreal Central Station", ["Montreal old"] = "[[Windsor Station (Montreal)|Montreal]]", ["Montreal West"] = "Montréal-Ouest station", ["Morris"] = mn, ["Mount Joy"] = pa, ["Mount Pleasant"] = ia, ["Mount Vernon"] = "Skagit Station", ["Munice"] = "Cincinnati, Richmond, & Muncie Depot (Muncie, Indiana)", ["Mystic"] = ct, ["Narberth"] = septa, ["Nashville"] = union, ["Natomas/Sacramento Airport"] = "[[Natomas/Sacramento Airport station|Natomas/​Sacramento Airport]]", ["Needles"] = "El Garces Intermodal Transportation Facility", ["New Buffalo (PM)"] = "[[New Buffalo station|New Buffalo (PM Depot)]]", ["New Haven"] = union, ["New London"] = xunion, ["New Orleans"] = "New Orleans Union Passenger Terminal", ["New York (Grand Central)"] = "Grand Central Terminal", ["New York"] = "New York Penn Station", ["New York City"] = "New York Penn Station", ["Newark Airport"] = "Newark Liberty International Airport Station", ["Newark, Delaware"] = "Newark station (Delaware)", ["Newark, New Jersey"] = "[[Newark Penn Station|Newark Penn]]", ["Newark, NJ"] = "[[Newark Penn Station|Newark Penn]]", ["Newark Penn"] = "[[Newark Penn Station|Newark Penn]]", ["Newbern"] = "Newbern Depot", ["Newport"] = ar, ["Newport News"] = { tc, ["Acela Regional"] = "Newport News station", ["Colonial"] = "Newport News station", ["Twilight Shoreliner"] = "Newport News station", ["George Washington"] = "Newport News station", ["James Whitcomb Riley"] = "Newport News station", ["James Whitcomb Riley and George Washington"] = "Newport News station", }, ["Newport News old"] = "[[Newport News station|Newport News]]", ["Newton"] = ks, ["Niagara Falls (former)"] = "[[Niagara Falls station (New York, 1978–2016)|Niagara Falls, New York]]", ["Niagara Falls, New York"] = "Niagara Falls station (New York)", ["Niagara Falls, Ontario"] = "Niagara Falls station (Ontario)", ["Norfolk"] = { amtrak, ["Mountaineer"] = "Lambert's Point#station", }, ["Normal"] = "Uptown Station", ["North Haven"] = ct, ["North Kingston"] = "Wickford Junction station", ["Northampton"] = "Union Station (Northampton, Massachusetts)", ["Oakland"] = { "Oakland–Jack London Square station", ["Shenandoah"] = md, ["West Virginian"] = md, }, ["Oakland – Jack London Square"] = "[[Oakland–Jack London Square station|Oakland–Jack London Square]]", ["Oakland 16th Street"] = "[[16th Street station (Oakland)|Oakland-16th Street]]", ["Oakley"] = ca, ["Oakville"] = go, ["Ocala"] = xunion, ["Oceanside"] = "Oceanside Transit Center", ["Ogden"] = "Union Station (Ogden, Utah)", ["Okeechobee"] = amtrak, ["Oklahoma City"] = "Santa Fe Depot (Oklahoma City)", ["Old Town San Diego"] = "[[Old Town Transit Center|San Diego–Old Town]]", ["San Diego–Old Town"] = "[[Old Town Transit Center|San Diego–Old Town]]", ["Olympia–Lacey"] = "Centennial Station", ["Omaha (CB&Q)"] = "[[Omaha station (Chicago, Burlington and Quincy Railroad)|Omaha (CB&Q Depot)]]", ["Ontario"] = { amtrak, ["Pioneer"] = ore, }, ["Orange"] = ca, ["Orlando"] = "Orlando Health/Amtrak station", ["Oxford"] = oh, ["Oxnard"] = "Oxnard Transit Center", ["Pajaro/Watsonville"] = "[[Pajaro/Watsonville station|Pajaro/​Watsonville]]", ["Pasadena"] = "Del Mar station", ["Pasco"] = "Pasco Intermodal Train Station", ["Pensacola"] = amtrak, ["Perry"] = ok, ["Petersburg (Union Station)"] = "[[Union Station (Petersburg)|Petersburg–Union Station]]", ["Philadelphia"] = "30th Street Station", ["Philadelphia-Suburban"] = "[[Suburban Station|Philadelphia-Suburban]]", ["Philadelphia International Airport"] = "Philadelphia International Airport stations", ["Phoenix"] = "Union Station (Phoenix, Arizona)", ["Pittsburgh"] = union, ["Pittsfield"] = "Joseph Scelsi Intermodal Transportation Center", ["Plano"] = il, ["Pocatello"] = "Union Pacific Railroad Depot (Pocatello, Idaho)", ["Pomona"] = { "[[Pomona–Downtown station|Pomona]]", ["Desert Wind"] = "Pomona–North station", ["Las Vegas Limited"] = "Pomona–North station", ["Southwest Chief"] = "Pomona–North station", ["Southwest Limited"] = "Pomona–North station", ["Super Chief"] = "Pomona–North station", }, ["Pontiac"] = { il, ["Lake Cities"] = tc, ["Wolverine"] = tc, ["Michigan"] = tc, }, ["Portland"] = { "Portland Union Station", ["Downeaster"] = tc, }, ["Princeton"] = il, ["Providence (Union Station)"] = "[[Union Station (Providence)|Providence–Union Station]]", ["Provo"] = amtrak, ["Quincy"] = amtrak, ["Radnor"] = septarr, ["Raleigh"] = xunion, ["Randolph"] = vt, ["Rawlins"] = "Union Pacific Railroad Depot (Rawlins, Wyoming)", ["Redding"] = ca, ["Richmond"] = { ca, ["Cardinal"] = "Richmond station (Chesapeake and Ohio Railway)", ["James Whitcomb Riley"] = "Richmond station (Chesapeake and Ohio Railway)", ["Mountaineer"] = "Richmond station (Chesapeake and Ohio Railway)", ["National Limited"] = "Richmond Railroad Station Historic District", }, ["Richmond Main Street"] = "[[Richmond Main Street Station|Richmond–Main Street]]", ["Richmond-Broad Street"] = "[[Broad Street Station (Richmond)|Richmond–Broad Street]]", ["Riverbank"] = "[[Gold Runner|Riverbank]]", ["Riverside"] = "[[Riverside–Downtown station|Riverside]]", ["Rochester"] = "Louise M. Slaughter Rochester Station", ["Rome"] = ny, ["Rosemont"] = septa, ["Rosenberg"] = tx, ["Roseville"] = ca, ["Royal Oak"] = mi, ["Rugby"] = nd, ["Rye"] = mnrr, ["Saco"] = tc, ["Sacramento"] = "Sacramento Valley Station", ["City College"] = "City College station (Sacramento)", ["Sacramento City College"] = "[[City College station (Sacramento)|City College]]", ["Saint Paul"] = "Saint Paul Union Depot", ["Salem"] = ore, ["Salinas"] = "Salinas Intermodal Transportation Center", ["Salisbury"] = nc, ["Salt Lake City (D&RGW)"] = "[[Denver and Rio Grande Western Depot (Salt Lake City)|Salt Lake City (D&RGW Depot)]]", ["Salt Lake City (UP)"] = "[[Salt Lake City Union Pacific Depot|Salt Lake City (UP Depot)]]", ["Salt Lake City"] = "Salt Lake City Intermodal Hub", ["San Antonio"] = tx, ["San Antonio-Sunset"] = "[[San Antonio station (Texas)#Sunset Station|San Antonio-Sunset]]", ["San Bernardino"] = "San Bernardino Santa Fe Depot", ["San Clemente"] = "[[San Clemente Pier station|San Clemente]]", ["San Diego Old Town"] = "[[Old Town Transit Center|San Diego–Old Town]]", ["San Diego Sorrento Valley"] = "[[Sorrento Valley station|San Diego–Sorrento Valley]]", ["San Diego"] = "Santa Fe Depot (San Diego)", ["San Joaquin Street"] = "[[San Joaquin Street station|Stockton–San Joaquin Street]]", ["San Jose"] = "San Jose Diridon station", ["Sandwich"] = ma, ["Sanford (ACL)"] = "[[Sanford Atlantic Coast Line Station|Sanford (ACL Depot)]]", ["Sanford"] = amtrak, ["Santa Ana"] = "Santa Ana Regional Transportation Center", ["Santa Clara"] = "[[Santa Clara Transit Center|Santa Clara–University]]", ["Santa Clarita"] = "Newhall station", ["Savannah"] = amtrak, ["Seattle"] = "King Street Station", ["Selma"] = "Selma Union Depot", ["Shreveport"] = amtrak, ["Silver Spring"] = "Silver Spring station (Baltimore and Ohio Railroad)", ["Spokane"] = "Spokane Intermodal Center", ["Springfield"] = { "Springfield Union Station (Massachusetts)", ["Abraham Lincoln"] = il, ["Inter-American"] = il, ["Lincoln Service"] = il, ["Loop"] = il, ["Texas Eagle"] = il, }, ["St. Albans"] = vt, ["St. Louis (Union Station)"] = "[[St. Louis Union Station|St. Louis–Union Station]]", ["St. Louis"] = "Gateway Transportation Center", ["St. Marys"] = on, ["St. Paul"] = "Saint Paul Union Depot", ["St. Petersburg"] = amtrak, ["St. Thomas"] = "Canada Southern Railway Station", ["Stamford"] = tc, ["Stanley"] = nd, ["Stockton"] = "[[Robert J. Cabral Station|Stockton–Downtown]]", ["Stockton–Downtown"] = "[[Robert J. Cabral Station|Stockton–Downtown]]", ["Stockton–San Joaquin Street"] = "[[San Joaquin Street station|Stockton–San Joaquin Street]]", ["Stony Creek"] = ct, ["Stratford"] = on, ["Suburban Station"] = "[[Suburban Station|Philadelphia–Suburban]]", ["Suffolk"] = va, ["Summit"] = il, ["Superior"] = { "[[Superior Union Station|Superior]]", ["Northern Lights Express"] = "Superior, Wisconsin", }, ["Surf"] = "[[Lompoc–Surf station|Lompoc–Surf]]", ["Syracuse"] = "William F. Walsh Regional Transportation Center", ["Tacoma (Union Station)"] = "[[Union Station (Tacoma, Washington)|Tacoma–Union Station]]", ["Tacoma Dome"] = "Tacoma Dome Station", ["Tacoma"] = "[[Tacoma station (1984)|Tacoma]]", ["Tampa"] = xunion, ["Taunton"] = amtrak, ["Tempe"] = az, ["Temple"] = tx, ["Texarkana"] = xunion, ["Thomasville"] = "Thomasville Depot (Georgia)", ["Thompson"] = "Green River station (Utah)#History", ["Toledo"] = "Martin Luther King Jr. Plaza (Toledo)", ["Toronto"] = union, ["Trenton"] = "Trenton Transit Center", ["Tri-State"] = "Catlettsburg station", ["Trinidad"] = co, ["Troy"] = "Troy Transit Center", ["Utica"] = "Union Station (Utica, New York)", ["Vancouver, British Columbia"] = "Pacific Central Station", ["Vancouver, Washington"] = "Vancouver station (Washington)", ["Victorville"] = "Victor Valley Transportation Center", ["Wallingford"] = ct, ["Wareham"] = "Wareham Village station", ["Warren"] = il, ["Warsaw"] = ind, ["Washington, DC"] = "[[Washington Union Station|Washington, D.C.]]", ["Washington, D.C."] = "[[Washington Union Station|Washington, D.C.]]", ["Washington, Missouri"] = "[[Washington station (Missouri)|Washington]]", ["Waterbury"] = vt, ["Waterloo"] = ind, ["Wells"] = "Wells Regional Transportation Center", ["Wellesley"] = "Wellesley Square station", ["Wenatchee"] = "Columbia Station (Washington)", ["Westport"] = ny, ["Westwood"] = "[[Route 128 station|Westwood Route 128]]", ["Wheeler"] = ind, ["Whiting"] = "Whiting station (Pennsylvania Railroad)", ["Wichita"] = "Union Station (Wichita, Kansas)", ["Williamsburg"] = tc, ["Wilmington"] = de, ["Wilson"] = nc, ["Windsor"] = { ct, ["Niagara Rainbow"] = "Windsor station (Michigan Central Railroad)", ["Vermonter"] = vt, ["Wolverine"] = on, }, ["Winona"] = { "Winona station", ["City of New Orleans"] = ms, }, ["Winslow"] = az, ["Woburn"] = "Anderson Regional Transportation Center", ["Woodbridge"] = va, ["Woodstock"] = on, ["Worcester"] = "Union Station (Worcester, Massachusetts)", ["Youngstown"] = "Youngstown station (Baltimore and Ohio Railroad)", ["Ypsilanti"] = "Michigan Executive", ["Yuma"] = az, }, ["lines"] = { ["_default"] = { ["title"] = "''[[%1]]''", ["color"] = "00537E", }, ["Abraham Lincoln"] = { ["title"] = "''[[Abraham Lincoln (train)|Abraham Lincoln]]''", ["color"] = "0078B9", ["left terminus"] = "St. Louis (Union Station)", ["right terminus"] = "Chicago", }, ["Acela"] = { ["title"] = "''[[Acela]]''", ["color"] = "00B5E2", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Boston South", }, ["Acela Commuter"] = { ["title"] = "''[[Clocker (train)|Acela Commuter]]''", ["left terminus"] = "Philadelphia", ["right terminus"] = "New York," }, ["Acela Express"] = { ["title"] = "''[[Acela]]''", ["color"] = "00b5e2", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Boston South", }, ["Acela Regional"] = { ["title"] = "''[[Northeast Regional#History|Acela Regional]]''", ["left terminus"] = "Newport News", ["right terminus"] = "Boston South," }, ["Adirondack"] = { ["title"] = "''[[Adirondack (train)|Adirondack]]''", ["left terminus"] = "Montreal", ["right terminus"] = "New York", }, ["Ann Rutledge"] = { ["title"] = "''[[Ann Rutledge (train)|Ann Rutledge]]''", ["left terminus"] = "Kansas City", ["right terminus"] = "St. Louis", }, ["Arrowhead"] = { ["title"] = "''[[Arrowhead (train)|Arrowhead]]''", ["color"] = "0078B9", ["left terminus"] = "Duluth", ["right terminus"] = "Minneapolis", }, ["Atlantic City Express"] = { ["title"] = "''[[Atlantic City Express (Amtrak train)|Atlantic City Express]]''", ["color"] = "0078B9", ["left terminus"] = {"Richmond Staples Mill Road", "Harrisburg", "Springfield"}, ["right terminus"] = "Atlantic City", }, ["Auto Train"] = { ["left terminus"] = "Sanford", ["right terminus"] = "Lorton", }, ["Badger"] = { ["title"] = "''[[Hiawatha (Amtrak train)|Badger]]''", ["color"] = "0078B9", }, ["Bankers"] = { ["title"] = "''[[Bankers (train)|Bankers]]''", ["color"] = "0078B9", }, ["Bay State"] = { ["title"] = "''[[New Haven–Springfield Line|Bay State]]''", ["color"] = "0078B9", ["left terminus"] = "Philadelphia", ["right terminus"] = "Boston South", }, ["Beacon Hill"] = { ["title"] = "''[[Beacon Hill (train)|Beacon Hill]]''", ["color"] = "0078B9", ["left terminus"] = "New Haven", ["right terminus"] = "Boston South", }, ["Berkshire Flyer"] = { ["title"] = "''[[Berkshire Flyer]]''", ["left terminus"] = "Pittsfield", ["right terminus"] = "New York", }, ["Big Apple"] = { ["title"] = "''[[Keystone Service#Through service|Big Apple]]''", ["color"] = "0078B9", }, ["Black Hawk"] = { ["title"] = "''[[Black Hawk (Amtrak train)|Black Hawk]]''", ["left terminus"] = "Rockford", ["right terminus"] = "Chicago", }, ["Black Hawk (1974–1981)"] = { ["title"] = "''[[Black Hawk (Amtrak train)|Black Hawk]]''", ["color"] = "0078B9", ["left terminus"] = "Dubuque", ["right terminus"] = "Chicago", ["note-mid"] = "1974–1981", }, ["Blue Ridge"] = { ["title"] = "''[[Blue Ridge (train)|Blue Ridge]]''", ["color"] = "0078B9", ["left terminus"] = "Martinsburg", ["right terminus"] = "Washington, D.C.", ["note-mid"] = "1973–1986", }, ["Blue Water"] = { ["title"] = "''[[Blue Water (train)|Blue Water]]''", ["left terminus"] = "Chicago", ["right terminus"] = "Port Huron", }, ["Borealis"] = { ["title"] = "''[[Borealis (train)|Borealis]]''", ["left terminus"] = "St. Paul", ["right terminus"] = "Chicago", }, ["Broadway Limited"] = { ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = "New York", }, ["California Zephyr"] = { ["left terminus"] = "Emeryville", ["right terminus"] = "Chicago", }, ["California Zephyr (1983–1994)"] = { ["title"] = "''[[California Zephyr]]''", ["color"] = "0078B9", ["left terminus"] = "Oakland 16th Street", ["right terminus"] = "Chicago", }, ["Calumet"] = { ["title"] = "''[[Calumet (train)|Calumet]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = "Valparaiso", }, ["Campus"] = { ["title"] = "''[[Campus (train)|Campus]]''", ["color"] = "0078B9", ["left terminus"] = "Champaign-Urbana", ["right terminus"] = "Chicago (Central Station)", }, ["Cape Codder"] = { ["title"] = "''[[Cape Codder (train)|Cape Codder]]''", ["color"] = "0078B9", ["left terminus"] = "New York", ["right terminus"] = "Hyannis", }, ["Capitol Corridor"] = { ["color"] = "1C1B4D", ["left terminus"] = "San Jose", ["right terminus"] = "Auburn", }, ["Capitol Limited"] = { ["left terminus"] = "Chicago", ["right terminus"] = "Washington, D.C.", }, ["Capitols (1991–1998)"] = { ["title"] = "''[[Capitol Corridor|Capitols]]''", ["color"] = "FFC709", ["left terminus"] = "San Jose", ["right terminus"] = "Roseville", }, ["Cardinal"] = { ["title"] = "''[[Cardinal (train)|Cardinal]]''", ["left terminus"] = "Chicago", ["right terminus"] = "New York", }, ["Carolina Special"] = { ["title"] = "''[[Carolina Special (Amtrak train)|Carolina Special]]''", ["color"] = "0078B9", ["left terminus"] = "Jacksonville", ["right terminus"] = "New York", }, ["Carolinian"] = { ["title"] = "''[[Carolinian (train)|Carolinian]]''", ["left terminus"] = "Charlotte", ["right terminus"] = "New York", }, ["Cascades"] = { ["title"] = "[[Amtrak Cascades|Amtrak ''Cascades'']]", ["color"] = "223832", ["left terminus"] = "Eugene", ["right terminus"] = "Vancouver, British Columbia", }, ["Champion"] = { ["title"] = "''[[Champion (train)|Champion]]''", ["color"] = "0078B9", ["left terminus"] = "St. Petersburg", ["right terminus"] = "New York", }, ["Charter Oak"] = { ["title"] = "''[[Colonial (Amtrak train)|Charter Oak]]''", ["color"] = "0078B9", }, ["Chesapeake"] = { ["title"] = "''[[Chesapeake (train)|Chesapeake]]''", ["color"] = "0078B9", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Suburban Station", }, ["Chesapeake Virginia"] = { ["title"] = "''[[Colonial (Amtrak train)|Chesapeake]]''", ["color"] = "0078B9", }, ["Chief"] = { ["title"] = "''[[Chief (train)|Chief]]''", ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "Chicago", }, ["City of New Orleans"] = { ["title"] = "''[[City of New Orleans (train)|City of New Orleans]]''", ["left terminus"] = "New Orleans", ["right terminus"] = "Chicago", }, ["City of San Francisco"] = { ["title"] = "''[[City of San Francisco (train)|City of San Francisco]]''", ["color"] = "0078B9", ["left terminus"] = "Oakland 16th Street", ["right terminus"] = "Chicago", }, ["Clamdigger"] = { ["title"] = "''[[Clamdigger (train)|Clamdigger]]''", ["color"] = "0078B9", ["left terminus"] = "New Haven", ["right terminus"] = "New London", }, ["Clocker"] = { ["title"] = "''[[Clocker (train)|Clocker]]''", ["left terminus"] = "Philadelphia", ["right terminus"] = "New York," }, ["Coast Starlight"] = { ["left terminus"] = "Los Angeles", ["right terminus"] = "Seattle", }, ["Colonial"] = { ["title"] = "''[[Colonial (Amtrak train)|Colonial]]''", ["color"] = "0078B9", ["left terminus"] = "Newport News", ["right terminus"] = "Boston South", }, ["Colonial (PRR)"] = { ["title"] = "''[[Colonial (PRR train)|Colonial]]''", ["color"] = "0078B9", }, ["Connecticut Valley Service"] = { ["title"] = "''[[Amtrak Hartford Line|Connecticut Valley Service]]''", ["color"] = "0078B9", ["left terminus"] = "New Haven", ["right terminus"] = "Springfield", }, ["Crescent"] = { ["title"] = "''[[Crescent (train)|Crescent]]''", ["left terminus"] = "New Orleans", ["right terminus"] = "New York", }, ["Desert Wind"] = { ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "Chicago", }, ["Downeaster"] = { ["title"] = "''[[Downeaster (train)|Downeaster]]''", ["left terminus"] = "Boston North", ["right terminus"] = "Brunswick", }, ["Duquesne"] = { ["title"] = "''[[Pennsylvanian (train)|Duquesne]]''", ["color"] = "0078B9", }, ["Eagle"] = { ["title"] = "''[[Texas Eagle|Eagle]]''", ["color"] = "0078B9", }, ["El Capitan"] = { ["title"] = "''[[El Capitan (train)|El Capitan]]''", ["color"] = "0078B9", }, ["Empire Builder"] = { ["left terminus"] = {"Seattle", "Portland"}, ["right terminus"] = "Chicago", }, ["Empire Builder (1971-1981)"] = { ["title"] = "''[[Empire Builder]]''", ["color"] = "0078B9", ["left terminus"] = "Seattle", ["right terminus"] = "Chicago", }, ["Empire Service"] = { ["left terminus"] = "Niagara Falls, New York", ["right terminus"] = "New York", }, ["Encore"] = { ["title"] = "''[[Hiawatha Service|Encore]]''", ["color"] = "0078B9", }, ["Ethan Allen Express"] = { ["left terminus"] = "Burlington", ["right terminus"] = "New York", }, ["Executive Sleeper"] = { ["title"] = "''[[Night Owl (train)|Executive Sleeper]]''", ["color"] = "0078B9", }, ["Expo '74"] = { ["title"] = "''[[Expo '74 (train)|Expo '74]]''", ["color"] = "0078B9", ["left terminus"] = "Seattle", ["right terminus"] = "Spokane", }, ["Fast Mail"] = { ["title"] = "''[[Fast Mail (Amtrak train)|Fast Mail]]''", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Boston or Springfield", }, ["Federal"] = { ["title"] = "''[[Twilight Shoreliner|Federal]]''", ["color"] = "0078B9", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Boston South", }, ["Floridian"] = { ["title"] = "''[[Floridian (train)|Floridian]]''", ["left terminus"] = "Miami", ["right terminus"] = "Chicago", }, ["Floridian (1971–1979)"] = { ["title"] = "''[[Floridian (train, 1971–1979)|Floridian]]''", ["color"] = "0078B9", ["left terminus"] = {"St. Petersburg", "Miami"}, ["right terminus"] = "Chicago", ["types"] = { ["Miami"] = { ["title"] = "", ["left terminus"] = "Miami", ["right terminus"] = "Chicago", }, ["St. Petersburg"] = { ["title"] = "", ["left terminus"] = "St. Petersburg", ["right terminus"] = "Chicago", }, }, }, ["Florida Special"] = { ["title"] = "''[[Florida Special (train)|Florida Special]]''", ["color"] = "0078B9", }, ["Fort Pitt"] = { ["title"] = "''[[Fort Pitt (train)|Fort Pitt]]''", ["color"] = "0078B9", ["left terminus"] = "Pittsburgh", ["right terminus"] = "Altoona", }, ["George Washington"] = { ["title"] = "''[[George Washington (train)|George Washington]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = {"Washington, D.C.", "Newport News"}, }, ["Gold Runner"] = { ["title"] = "''[[Gold Runner]]''", ["color"] = "0096CE", ["left terminus"] = {"Oakland", "Sacramento"}, ["right terminus"] = "Bakersfield", }, ["Gotham Limited"] = { ["title"] = "''[[Colonial (Amtrak train)|Gotham Limited]]''", ["color"] = "0078B9", }, ["Gulf Breeze"] = { ["title"] = "''[[Gulf Breeze (train)|Gulf Breeze]]''", ["color"] = "0078B9", ["left terminus"] = "Mobile", ["right terminus"] = "Birmingham", }, ["Gulf Coast Limited"] = { ["title"] = "''[[Gulf Coast Limited]]''", ["color"] = "0078B9", ["left terminus"] = "New Orleans", ["right terminus"] = "Mobile", }, ["Hartford"] = { ["title"] = "[[Amtrak Hartford Line|''Hartford Line'']]", ["left terminus"] = "New Haven", ["right terminus"] = "Springfield", }, ["Heartland Flyer"] = { ["left terminus"] = "Fort Worth", ["right terminus"] = "Oklahoma City", }, ["Hiawatha (1971-1977)"] = { ["title"] = "''[[Borealis (train)#History|Hiawatha]]''", ["color"] = "0078B9", }, ["Hiawatha"] = { ["title"] = "''[[Hiawatha (Amtrak train)|Hiawatha]]''", ["left terminus"] = "Milwaukee", ["right terminus"] = "Chicago", }, ["Hilltopper"] = { ["title"] = "''[[Hilltopper (train)|Hilltopper]]''", ["color"] = "0078B9", ["left terminus"] = "Tri-State", ["right terminus"] = "Boston South", }, ["Hoosier State"] = { ["title"] = "''[[Hoosier State (train)|Hoosier State]]''", ["left terminus"] = "Chicago", ["right terminus"] = "Indianapolis", }, ["Illini and Saluki"] = { ["title"] = "[[Illini and Saluki|''Illini'' and ''Saluki'']]", ["left terminus"] = "Carbondale", ["right terminus"] = "Chicago", }, ["Illini (Central)"] = { ["title"] = "[[Illini and Saluki|''Illini'']]", ["color"] = "0078B9", ["left terminus"] = "Champaign-Urbana", ["right terminus"] = "Chicago", }, ["Illinois Zephyr and Carl Sandburg"] = { ["title"] = "[[Illinois Zephyr and Carl Sandburg|''Illinois Zephyr'' and ''Carl Sandburg'']]", ["left terminus"] = "Quincy", ["right terminus"] = "Chicago", }, ["Illinois Zephyr old"] = { ["title"] = "[[Illinois Zephyr and Carl Sandburg|''Illinois Zephyr'']]", ["left terminus"] = "Quincy", ["right terminus"] = "Chicago", }, ["Inter-American"] = { ["title"] = "''[[Inter-American (train)|Inter-American]]''", ["color"] = "0078B9", ["left terminus"] = {"Laredo", "Houston"}, ["right terminus"] = "Chicago", }, ["International"] = { ["title"] = "''[[International (Amtrak train)|International]]''", ["left terminus"] = "Chicago", ["right terminus"] = "Toronto", }, ["International (1982–1990)"] = { ["title"] = "''[[International (Amtrak train)|International]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = "Toronto", }, ["James River"] = { ["title"] = "''[[Colonial (Amtrak train)|James River]]''", ["color"] = "0078B9", }, ["James Whitcomb Riley"] = { ["title"] = "''[[James Whitcomb Riley (train)|James Whitcomb Riley]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = {"Washington, D.C.", "Newport News"}, }, ["James Whitcomb Riley and George Washington"] = { ["title"] = "''[[James Whitcomb Riley (train)|James Whitcomb Riley]] and [[George Washington (train)|George Washington]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = {"Washington, D.C.", "Newport News"}, }, ["Kentucky Cardinal"] = { ["left terminus"] = "Chicago", ["right terminus"] = "Louisville", }, ["Keystone"] = { ["title"] = "''[[Pennsylvanian (train)#History|Keystone]]''", ["color"] = "0078B9", ["left terminus"] = "Pittsburgh", ["right terminus"] = "New York", }, ["Keystone (1971-1972)"] = { ["title"] = "''[[Pennsylvanian (train)|Keystone]]''", ["color"] = "0078B9", }, ["Keystone Executive"] = { ["title"] = "''[[Keystone Service#Declining service|Keystone Executive]]''", ["color"] = "0078B9", }, ["Keystone Service"] = { ["left terminus"] = "Harrisburg", ["right terminus"] = "New York", }, ["Keystone State Express"] = { ["title"] = "''[[Keystone Service#Through service|Keystone State Express]]''", ["color"] = "0078B9", }, ["Lake Cities"] = { ["title"] = "''[[Lake Cities (Amtrak train)|Lake Cities]]''", ["left terminus"] = "Chicago", ["right terminus"] = "Pontiac", }, ["Lake Cities (1980–1995)"] = { ["title"] = "''[[Lake Cities (Amtrak train)|Lake Cities]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = "Toledo", }, ["Lake Country Limited"] = { ["left terminus"] = "Janesville", ["right terminus"] = "Chicago", }, ["Lake Shore"] = { ["title"] = "''[[Lake Shore Limited#Lake Shore|Lake Shore]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = "New York (Grand Central)", }, ["Lake Shore Limited"] = { ["left terminus"] = "Chicago", ["right terminus"] = {"New York", "Boston South"}, }, ["LaSalle"] = { ["title"] = "''[[Hiawatha (Amtrak train)|LaSalle]]''", ["color"] = "0078B9", }, ["Las Vegas Limited"] = { ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "Las Vegas", }, ["Loop"] = { ["title"] = "''[[Loop (Amtrak train)|Loop]]''", ["color"] = "0078B9", ["left terminus"] = "Springfield", ["right terminus"] = "Chicago", }, ["Limited"] = { ["title"] = "''[[Alton Limited|Limited]]''", ["color"] = "0078B9", }, ["Lincoln Service"] = { ["left terminus"] = "St. Louis", ["right terminus"] = "Chicago", }, ["Lone Star"] = { ["title"] = "''[[Lone Star (Amtrak train)|Lone Star]]''", ["color"] = "0078B9", ["left terminus"] = {"Dallas", "Houston"}, ["right terminus"] = "Chicago", }, ["Manhattan Express"] = { ["title"] = "''[[Colonial (Amtrak train)|Manhattan Express]]''", ["color"] = "0078B9", }, ["Mardi Gras Service"] = { ["title"] = "''[[Mardi Gras Service]]''", ["left terminus"] = "New Orleans", ["right terminus"] = "Mobile", }, ["Maple Leaf"] = { ["title"] = "''[[Maple Leaf (train)|Maple Leaf]]''", ["left terminus"] = "Toronto", ["right terminus"] = "New York", }, ["Marquette"] = { ["title"] = "''[[Hiawatha (Amtrak train)|Marquette]]''", ["color"] = "0078B9", }, ["Merchants"] = { ["title"] = "''[[Merchants Limited|Merchants]]''", ["color"] = "0078B9", }, ["Merchants Limited"] = { ["title"] = "''[[Merchants Limited]]''", ["color"] = "0078B9", }, ["Meteor"] = { ["title"] = "''[[Champion (train)#Amtrak|Meteor]]''", ["color"] = "0078B9", ["left terminus"] = {"St. Petersburg", "Miami"}, ["right terminus"] = "Boston South", }, ["Metroliner"] = { ["title"] = "''[[Metroliner (train)|Metroliner]]''", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "New York", }, ["Miamian"] = { ["title"] = "''[[Vacationer (train)|Miamian]]''", ["color"] = "0078B9", }, ["Michigan Executive"] = { ["color"] = "0078B9", ["left terminus"] = "Jackson", ["right terminus"] = "Detroit (MC)", }, ["Missouri River Runner"] = { ["left terminus"] = "Kansas City", ["right terminus"] = "St. Louis", }, ["Montrealer"] = { ["title"] = "''[[Montrealer (train)|Montrealer]]''", ["color"] = "0078B9", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Montreal", }, ["Mount Rainier"] = { ["title"] = "''[[Amtrak Cascades#History|Mount Rainier]]''", ["color"] = "0078B9", ["left terminus"] = "Eugene", ["right terminus"] = "Seattle", }, ["Mountaineer"] = { ["title"] = "''[[Mountaineer (Amtrak train)|Mountaineer]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = "Norfolk", }, ["Mountain Rail"] = { ["title"] = "''[[Winter Park Express#Future plans|Mountain Rail]]''", ["left terminus"] = "Craig", ["right terminus"] = "Denver", }, ["National Limited"] = { ["title"] = "''[[National Limited (Amtrak train)|National Limited]]''", ["color"] = "0078B9", ["left terminus"] = "Kansas City", ["right terminus"] = {"New York", "Washington, D.C."}, }, ["New England Express"] = { ["title"] = "''[[Colonial (Amtrak train)|New England Express]]''", ["color"] = "0078B9", }, ["New Orleans–Baton Rouge passenger rail"] = { ["title"] = "[[New Orleans–Baton Rouge passenger rail|New Orleans–Baton Rouge]]", ["left terminus"] = "Baton Rouge", ["right terminus"] = "New Orleans", }, ["Niagara Rainbow"] = { ["color"] = "0078B9", ["left terminus"] = "Detroit (MC)", ["right terminus"] = "New York (Grand Central)", }, ["Nicollet"] = { ["title"] = "''[[Hiawatha (Amtrak train)|Nicollet]]''", ["color"] = "0078B9", }, ["Night Owl"] = { ["title"] = "''[[Night Owl (train)|Night Owl]]''", ["color"] = "0078B9", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Boston South", }, ["North Coast Hiawatha"] = { ["color"] = "0078B9", ["left terminus"] = "Seattle", ["right terminus"] = "Chicago", }, ["Northern Lights Express"] = { ["color"] = "78BE21", ["left terminus"] = "Duluth", ["right terminus"] = "Minneapolis Target Field", }, ["North Star"] = { ["title"] = "''[[North Star (Amtrak train)|North Star]]''", ["color"] = "0078B9", ["left terminus"] = "Duluth", ["right terminus"] = {"Chicago", "Midway"}, }, ["Northeast Corridor"] = { ["title"] = "[[Northeast Corridor]]", ["color"] = "0078B9", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Boston South", }, ["Northeast Regional"] = { ["left terminus"] = {"Norfolk", "Newport News", "Roanoke"}, ["right terminus"] = {"Boston South", "Springfield"}, ["types"] = { ["Newport News or Roanoke"] = { ["title"] = "", ["left terminus"] = {"Newport News", "Roanoke"}, ["right terminus"] = {"Boston South", "Springfield"}, }, ["Norfolk or Newport News"] = { ["title"] = "", ["left terminus"] = {"Norfolk", "Newport News"}, ["right terminus"] = {"Boston South", "Springfield"}, }, ["Norfolk or Roanoke"] = { ["title"] = "", ["left terminus"] = {"Norfolk", "Roanoke"}, ["right terminus"] = {"Boston South", "Springfield"}, }, }, }, ["Old Dominion"] = { ["title"] = "''[[Colonial (Amtrak train)|Old Dominion]]''", ["color"] = "0078B9", }, ["Orange County Commuter"] = { ["title"] = "''[[Orange County Line|Orange County Commuter]]''", ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "San Juan Capistrano", }, ["Pacific International"] = { ["title"] = "''[[Pacific International]]''", ["color"] = "0078B9", ["left terminus"] = "Seattle", ["right terminus"] = "Vancouver, British Columbia", }, ["Pacific Surfliner"] = { ["color"] = "003C5B", ["left terminus"] = "San Luis Obispo", ["right terminus"] = "San Diego", }, ["Palmetto"] = { ["title"] = "''[[Palmetto (train)|Palmetto]]''", ["left terminus"] = "Savannah", ["right terminus"] = "New York", }, ["Panama Limited"] = { ["title"] = "''[[Panama Limited]]''", ["color"] = "0078B9", ["left terminus"] = "New Orleans", ["right terminus"] = "Chicago (Central Station)", }, ["Pennsylvanian"] = { ["title"] = "''[[Pennsylvanian (train)|Pennsylvanian]]''", ["left terminus"] = "Pittsburgh", ["right terminus"] = "New York", }, ["Pere Marquette"] = { ["title"] = "''[[Pere Marquette (Amtrak train)|Pere Marquette]]''", ["left terminus"] = "Chicago", ["right terminus"] = "Grand Rapids", }, ["Piedmont"] = { ["title"] = "''[[Piedmont (train)|Piedmont]]''", ["left terminus"] = "Charlotte", ["right terminus"] = "Raleigh", }, ["Pioneer"] = { ["title"] = "''[[Pioneer (train)|Pioneer]]''", ["color"] = "0078B9", ["left terminus"] = "Seattle", ["right terminus"] = "Chicago", }, ["Potomac"] = { ["title"] = "''[[Colonial (Amtrak train)|Potomac]]''", ["color"] = "0078B9", }, ["Prairie Marksman"] = { ["title"] = "''[[Prairie Marksman]]''", ["left terminus"] = "East Peoria", ["right terminus"] = "Chicago", ["color"] = "0078B9", }, ["Prairie State"] = { ["title"] = "''[[Prairie State (Amtrak)|Prairie State]]''", ["color"] = "0078B9", }, ["Quad Cities"] = { ["title"] = "''[[Quad Cities (train)|Quad Cities]]''", ["left terminus"] = "Moline", ["right terminus"] = "Chicago", ["note-mid"] = "Proposed", }, ["Radisson"] = { ["title"] = "''[[Hiawatha (Amtrak train)|Radisson]]''", ["color"] = "0078B9", }, ["River Cities"] = { ["title"] = "''[[River Cities (train)|River Cities]]''", ["color"] = "0078B9", ["left terminus"] = "New Orleans", ["right terminus"] = "Kansas City", }, ["San Diegan"] = { ["title"] = "''[[San Diegan (train)|San Diegan]]''", ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "San Diego", }, ["San Francisco Zephyr"] = { ["color"] = "0078B9", ["left terminus"] = "Oakland 16th Street", ["right terminus"] = "Chicago", }, ["San Joaquin (1974–1994)"] = { ["title"] = "''[[Gold Runner#History|San Joaquins]]''", ["color"] = "0078B9", ["left terminus"] = "Oakland 16th Street", ["right terminus"] = "Bakersfield", }, ["San Joaquin (1994–1996)"] = { ["title"] = "''[[Gold Runner#History|San Joaquins]]''", ["color"] = "FFC709", ["left terminus"] = "Emeryville", ["right terminus"] = "Bakersfield", }, ["San Joaquin (1996–2002)"] = { ["title"] = "''[[Gold Runner#History|San Joaquins]]''", ["color"] = "FFC709", ["left terminus"] = "Oakland", ["right terminus"] = "Bakersfield", }, ["San Joaquins (1999–2025)"] = { ["title"] = "''[[Gold Runner#History|San Joaquins]]''", ["color"] = "1EB1D2", ["left terminus"] = {"Oakland", "Sacramento"}, ["right terminus"] = "Bakersfield", }, ["Shawnee"] = { ["title"] = "''[[Shawnee (train)|Shawnee]]''", ["color"] = "0078B9", ["left terminus"] = "Carbondale", ["right terminus"] = "Chicago", }, ["Shenandoah"] = { ["title"] = "''[[Shenandoah (Amtrak train)|Shenandoah]]''", ["color"] = "0078B9", ["left terminus"] = "Cincinnati River Road", ["right terminus"] = "Washington, D.C.", }, ["Silver Meteor"] = { ["left terminus"] = "Miami", ["right terminus"] = "New York", }, ["Silver Palm (1982–1985)"] = { ["title"] = "''[[Silver Palm (train)|Silver Palm]]''", ["color"] = "0078B9", ["left terminus"] = "Miami", ["right terminus"] = "Tampa", }, ["Silver Palm (1996–2002)"] = { ["title"] = "''[[Palmetto (train)#History|Silver Palm]]''", ["left terminus"] = "Miami", ["right terminus"] = "New York", }, ["Silver Star"] = { ["title"] = "''[[Silver Star (Amtrak train)|Silver Star]]''", ["left terminus"] = "Miami", ["right terminus"] = "New York", }, ["Silverliner Service"] = { ["color"] = "0078B9", ["left terminus"] = "Harrisburg", ["right terminus"] = "Suburban Station", }, ["Southwest Chief"] = { ["left terminus"] = "Los Angeles", ["right terminus"] = "Chicago", }, ["Southwest Limited"] = { ["title"] = "''[[Southwest Chief|Southwest Limited]]''", ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "Chicago", }, ["South Wind"] = { ["title"] = "''[[South Wind (train)|South Wind]]''", ["color"] = "0078B9", }, ["Spirit of California"] = { ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "Sacramento", }, ["Spirit of St. Louis"] = { ["title"] = "''[[Spirit of St. Louis (train)|Spirit of St. Louis]]''", ["color"] = "0078B9", }, ["State House"] = { ["title"] = "''[[State House (train)|State House]]''", ["left terminus"] = "St. Louis", ["right terminus"] = "Chicago", }, ["St. Clair"] = { ["title"] = "''[[Lake Cities (Amtrak train)|St. Clair]]''", ["color"] = "0078B9", }, ["Sunset Limited"] = { ["left terminus"] = "Los Angeles", ["right terminus"] = "New Orleans", ["types"] = { ["East"] = { ["title"] = "", ["left terminus"] = "Los Angeles", ["right terminus"] = {"Orlando", "Miami"}, }, }, }, ["Super Chief"] = { ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "Chicago", }, ["Super Chief/El Capitan"] = { ["title"] = "''[[Super Chief]]''/​''[[El Capitan (train)|El Capitan]]''", ["color"] = "0078B9", }, ["Susquehanna"] = { ["title"] = "''[[Keystone Service#Through service|Susquehanna]]''", ["color"] = "0078B9", }, ["Texas Eagle"] = { ["left terminus"] = {"Los Angeles", "San Antonio"}, ["right terminus"] = "Chicago", }, ["Three Rivers"] = { ["title"] = "''[[Three Rivers (train)|Three Rivers]]''", ["left terminus"] = "Chicago", ["right terminus"] = "New York", }, ["Tidewater"] = { ["title"] = "''[[Colonial (Amtrak train)|Tidewater]]''", ["color"] = "0078B9", }, ["Tidewater Express"] = { ["title"] = "''[[Colonial (Amtrak train)|Tidewater Express]]''", ["color"] = "0078B9", }, ["Turboliner"] = { ["title"] = "''[[Turboliner#Service|Turboliner]]''", ["color"] = "0078B9", }, ["Twilight Limited"] = { ["left terminus"] = "Chicago", ["right terminus"] = "Pontiac", }, ["Twilight Shoreliner"] = { ["title"] = "''[[Twilight Shoreliner]]''", ["color"] = "0078B9", ["left terminus"] = "Newport News", ["right terminus"] = "Boston South", }, ["Twin Cities Hiawatha"] = { ["title"] = "''[[Borealis (train)#History|Twin Cities Hiawatha]]''", ["color"] = "0078B9", ["left terminus"] = {"Minneapolis", "Midway"}, ["right terminus"] = "Chicago", }, ["Vacationer"] = { ["title"] = "''[[Vacationer (train)|Vacationer]]''", ["color"] = "0078B9", ["left terminus"] = "Miami", ["right terminus"] = "New York", }, ["Valley Forge"] = { ["title"] = "''[[Keystone Service#Through service|Valley Forge]]''", ["color"] = "0078B9", ["left terminus"] = "Harrisburg", ["right terminus"] = "New York", ["types"] = { ["weekends only"] = { ["title"] = "1974-1975, weekends only", ["right terminus"] = "Boston South", }, }, }, ["Valley Flyer"] = { ["title"] = "''[[Valley Flyer]]''", ["left terminus"] = "New Haven", ["right terminus"] = "Greenfield", }, ["Vermonter"] = { ["title"] = "''[[Vermonter (train)|Vermonter]]''", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "St. Albans", }, ["Virginian"] = { ["title"] = "''[[Colonial (Amtrak train)|Virginian]]''", ["color"] = "0078B9", }, ["Washington Executive"] = { ["title"] = "''[[Night Owl (train)|Washington Executive]]''", ["color"] = "0078B9", }, ["Weekender"] = { ["title"] = "''[[Lincoln Service|Weekender]]''", ["color"] = "0078B9", }, ["Weekend Metroliner"] = { ["title"] = "''[[Metroliner (train)|Weekend Metroliner]]''", ["color"] = "0078B9", }, ["West Virginian"] = { ["title"] = "''[[West Virginian (Amtrak train)|West Virginian]]''", ["color"] = "0078B9", ["left terminus"] = "Parkersburg", ["right terminus"] = "Washington, D.C.", ["note-mid"] = "1971–1973", }, ["Willamette Valley"] = { ["title"] = "''[[Willamette Valley (train)|Willamette Valley]]''", ["color"] = "0078B9", ["left terminus"] = "Eugene", ["right terminus"] = "Portland", }, ["Winter Park Express"] = { ["left terminus"] = "Fraser–Winter Park", ["right terminus"] = "Denver", }, ["Wolverine"] = { ["title"] = "''[[Wolverine (train)|Wolverine]]''", ["left terminus"] = "Chicago", ["right terminus"] = "Pontiac", }, -- For generic system display on station layouts using rail color box ["Amtrak"] = { ["title"] = "[[Amtrak]]", }, }, ["aliases"] = { ["amtrak cascades"] = "Cascades", ["amtrak hartford line"] ="Hartford", ["carl sandburg"] = "Illinois Zephyr and Carl Sandburg", ["carl sandburg/illinois zephyr"] = "Illinois Zephyr and Carl Sandburg", ["hartford line"] ="Hartford", ["hiawatha service"] = "Hiawatha", ["hiawatha (1971-1974)"] = "Hiawatha (1971-1977)", ["illini"] = "Illini and Saluki", ["illini/saluki"] = "Illini and Saluki", ["illinois zephyr"] = "Illinois Zephyr and Carl Sandburg", ["illinois zephyr/carl sandburg"] = "Illinois Zephyr and Carl Sandburg", ["international limited"] = "International", ["international (1982-1990)"] = "International (1982–1990)", ["new haven–springfield shuttle"] = "Hartford", ["new haven-springfield shuttle"] = "Hartford", ["regional"] = "Northeast Regional", ["saluki"] = "Illini and Saluki", ["saluki/illini"] = "Illini and Saluki", ["san joaquin"] = "Gold Runner", ["san joaquins"] = "Gold Runner", ["shuttle"] = "Hartford Line", ["black hawk (1974-1981)"] = "Black Hawk (1974–1981)", ["california zephyr (1983-1994)"] = "California Zephyr (1983–1994)", ["capitols (1991-1998)"] = "Capitols (1991–1998)", ["lake cities (1980-1995)"] = "Lake Cities (1980–1995)", ["san joaquin (1974-1994)"] = "San Joaquin (1974–1994)", ["san joaquin (1994-1996)"] = "San Joaquin (1994–1996)", ["san joaquin (1996-2002)"] = "San Joaquin (1996–2002)", ["silver palm (1982-1985)"] = "Silver Palm (1982–1985)", ["silver palm (1996-2002)"] = "Silver Palm (1996–2002)", ["northern lights express"] = "Northern Lights Express", ["baton rouge"] = "New Orleans–Baton Rouge passenger rail", ["great river"] = "Borealis", ["tcmc"] = "Borealis", }, } return p 5d810rozuozv4qituw64bug1k4rr453 746270 746269 2026-06-12T21:56:14Z Robertsky 51025 1 revision imported from [[:en:Module:Adjacent_stations/Amtrak]] 746269 Scribunto text/plain local amtrak = "%1 station (Amtrak)" local al = "%1 station (Alabama)" local ar = "%1 station (Arkansas)" local az = "%1 station (Arizona)" local ca = "%1 station (California)" local cccr = "%1 station (CCCR)" local co = "%1 station (Colorado)" local ct = "%1 station (Connecticut)" local de = "%1 station (Delaware)" local fl = "%1 station (Florida)" local ga = "%1 station (Georgia)" local go = "%1 GO Station" local ia = "%1 station (Iowa)" local ind = "%1 station (Indiana)" local il = "%1 station (Illinois)" local ks = "%1 station (Kansas)" local lou = "%1 station (Louisiana)" local ma = "%1 station (Massachusetts)" local marc = "%1 station (MARC)" local md = "%1 station (Maryland)" local me = "%1 station (Maine)" local mi = "%1 station (Michigan)" local mn = "%1 station (Minnesota)" local mnrr = "%1 station (Metro-North)" local mo = "%1 station (Missouri)" local ms = "%1 station (Mississippi)" local mt = "%1 station (Montana)" local nc = "%1 station (North Carolina)" local nd = "%1 station (North Dakota)" local ne = "%1 station (Nebraska)" local nh = "%1 station (New Hampshire)" local njt = "%1 station (NJ Transit)" local ny = "%1 station (New York)" local nm = "%1 station (New Mexico)" local nv = "%1 station (Nevada)" local oh = "%1 station (Ohio)" local ok = "%1 station (Oklahoma)" local on = "%1 station (Ontario)" local ore = "%1 station (Oregon)" local pa = "%1 station (Pennsylvania)" local ri = "%1 station (Rhode Island)" local sc = "%1 station (South Carolina)" local septa = "%1 station (SEPTA)" local septarr = "%1 station (SEPTA Regional Rail)" local tc = "%1 Transportation Center" local tx = "%1 station (Texas)" local union = "Union Station (%1)" local ut = "%1 station (Utah)" local va = "%1 station (Virginia)" local vt = "%1 station (Vermont)" local wa = "%1 station (Washington)" local wi = "%1 station (Wisconsin)" local wv = "%1 station (West Virginia)" local wy = "%1 station (Wyoming)" local xunion = "%1 Union Station" local p = { ["lang"] = "en-US", ["system title"] = "[[Amtrak]]", ["system icon"] = "[[File:BSicon LOGO Amtrak2.svg|20px|link=Amtrak]]", ["system color"] = "00537E", ["name format"] = { "font-size: 160%; font-weight: bolder; color: #FFFFFF; background-color: #00537E; padding: 0.4em 4px;", ["Amtrak old"] = "font-size: 160%; font-family:Helvetica Neue, Helvetica; font-weight: bolder; color: #ffffff; background-color: #0078B9; padding: 0.4em 4px;" }, ["header text color"] = "FFFFFF", ["header background color"] = { "00537E", ["Amtrak old"] = "0078B9", }, ["station format"] = { "%1 station", ["16th Street"] = "[[16th Street station (Oakland)|Oakland]]", ["30th Street"] = "[[30th Street Station|Philadelphia–30th Street]]", ["52nd Street"] = septarr, ["Aberdeen"] = md, ["Akron"] = { ["Broadway Limited"] = amtrak, ["Three Rivers"] = amtrak, ["California Zephyr"] = co, ["Desert Wind"] = co, ["Pioneer"] = co, }, ["Albany"] = { "[[Albany–Rensselaer station|Albany–Rensselaer]]", ["Cascades"] = ore, ["Coast Starlight"] = ore, ["Willamette Valley"] = ore, }, ["Albion"] = mi, ["Albuquerque"] = "Alvarado Transportation Center", ["Aldershot"] = go, ["Alexandria"] = xunion, ["Alton"] = il, ["Altoona"] = tc, ["Amherst"] = ma, ["Amsterdam"] = ny, ["Anaheim"] = "Anaheim Regional Transportation Intermodal Center", ["Antioch"] = "[[Antioch–Pittsburg station|Antioch–Pittsburg]]", ["Ardmore"] = { pa, ["Heartland Flyer"] = ok, ["Lone Star"] = ok, }, ["Ashland"] = { va, ["Cardinal"] = tc, ["James Whitcomb Riley"] = tc, ["James Whitcomb Riley and George Washington"] = tc, }, ["Athens"] = oh, ["Atlanta"] = "Peachtree station", ["Atlantic City"] = "Atlantic City Rail Terminal", ["Attleboro"] = ma, ["Auburn"] = ca, ["Aurora"] = tc, ["Austin"] = tx, ["BWI Airport"] = "BWI Rail Station", ["Boston"] = { "[[South Station|Boston South]]", ["Downeaster"] = "[[North Station|Boston North]]" }, ["Back Bay"] = "[[Back Bay station|Boston Back Bay]]", ["Bakersfield"] = amtrak, ["Baltimore Airport"] = "BWI Rail Station", ["Baltimore"] = "Baltimore Penn Station", ["Bangor"] = mi, ["Barstow"] = "Barstow Harvey House", ["Battle Creek"] = tc, ["Baton Rouge"] = "Baton Rouge, Louisiana", ["Bedford"] = va, ["Belleville"] = amtrak, ["Bellingham"] = "Fairhaven Station", ["Berkeley"] = amtrak, ["Berlin"] = ct, ["Berwyn"] = septa, ["Bill Lee"] = "[[Chipley station|Chipley]]", ["Birmingham"] = { al, ["Wolverine"] = mi, }, ["Black Rock"] = "Black Rock Rail Yard", ["Bloomington"] = "Bloomington station (Monon Railroad)", ["Bloomington–Normal"] = { "Uptown Station", ["Floridian (1971–1979)"] = ind, }, ["Bloomington–Normal"] = "[[Uptown Station|Bloomington–Normal]]", ["Bloomington–Normal"] = "[[Uptown Station|Bloomington–Normal]]", ["Boise"] = "Boise Union Pacific Depot", ["Boston North"] = "North Station", ["Boston South"] = "South Station", ["Bowie"] = "Bowie Railroad Buildings", ["Bowling Green"] = "Bowling Green station (Louisville and Nashville Railroad)", ["Brampton"] = go, ["Brattleboro"] = "Union Station (Brattleboro, Vermont)", ["Bridgeport"] = ct, ["Brookhaven"] = "Godbold Transportation Center", ["Brunswick"] = { md, ["Downeaster"] = me }, ["Bryan"] = oh, ["Bryn Mawr"] = septarr, ["Buffalo"] = "Buffalo–Depew station", ["Buffalo Central Terminal"] = "[[Buffalo Central Terminal|Buffalo]]", ["Burbank Airport"] = "[[Burbank Airport–South station|Hollywood Burbank Airport]]", ["Burlington"] = { nc, ["California Zephyr"] = ia, ["Desert Wind"] = ia, ["Ethan Allen Express"] = "Union Station (Burlington, Vermont)", ["Maple Leaf"] = "Burlington GO Station", ["Pioneer"] = ia, }, ["Burlington West"] = "Burlington GO Station#History", ["Cambridge"] = { mn, ["Northern Lights Express"] = "Cambridge, Minnesota" }, ["Camden"] = sc, ["Canton"] = { oh, ["City of New Orleans"] = ms, }, ["Cary"] = nc, ["Castleton"] = vt, ["Centralia"] = { il, ["Cascades"] = wa, ["Coast Starlight"] = wa, ["Pioneer"] = wa, }, ["Champaign-Urbana"] = "[[Illinois Terminal|Champaign–Urbana]]", ["Charleston"] = { "North Charleston station", ["Cardinal"] = wv, ["James Whitcomb Riley"] = wv, ["James Whitcomb Riley and George Washington"] = wv, }, ["Charlotte"] = amtrak, ["Charlotte Gateway"] = "[[Charlotte Gateway Station|Gateway Station]]", ["Charlottesville"] = xunion, ["Chelsea"] = mi, ["Cherry Hill"] = njt, ["Chester"] = "Chester Transit Center", ["Cheyenne"] = "Cheyenne Depot Museum", ["Chicago (Central Station)"] = "[[Central Station (Chicago terminal)|Chicago–Central]]", ["Chicago"] = xunion, ["Chillicothe"] = { il, ["Shenandoah"] = oh, }, ["Chillicothe, IL"] = "[[Chillicothe station (Illinois)|Chillicothe]]", ["Cincinnati"] = "Cincinnati Union Terminal", ["Cincinnati River Road"] = "[[Cincinnati River Road station|Cincinnati (River Road)]]", ["Claremont"] = nh, ["Clearwater"] = amtrak, ["Cleburne"] = "Cleburne Intermodal Transportation Depot", ["Cleveland Union Terminal"] = "[[Tower City Center#Cleveland Union Terminal|Cleveland]]", ["Cleveland"] = "Cleveland Lakefront Station", ["Clinton"] = ct, ["Colonel Allensworth State Historic Park"] = "Colonel Allensworth State Historic Park#Amtrak station", ["Colonie–Schenectady"] = "Schenectady station#History", ["Columbia"] = sc, ["Columbus"] = { "Columbus station", ["National Limited"] = "Union Station (Columbus, Ohio)", }, ["Commerce"] = ca, ["Crestview"] = { ct, ["Sunset Limited"] = "Crestview station (Florida)", }, ["Cumberland"] = md, ["Dallas"] = xunion, ["Davis"] = ca, ["Dayton"] = "Dayton Union Station", ["DC"] = "[[Washington Union Station|Washington]]", ["Dearborn"] = "John D. Dingell Transit Center", ["Decatur"] = { il, ["Floridian (1971–1979)"] = "Decatur station (Southern Railway)", }, ["Del Mar"] = "Solana Beach station#Former Amtrak station at Del Mar", ["Delray Beach"] = { "%1 station", ["Floridian (1971–1979)"] = "Delray Beach station (Seaboard Air Line Railroad)", }, ["Delta"] = ut, ["Denver"] = xunion, ["Depew"] = "Buffalo–Depew station", ["Detroit (MC)"] = "[[Michigan Central Station|Detroit (Michigan Central)]]", ["Dover"] = tc, ["Dubuque"] = { ["Black Hawk"] = "Dubuque Intermodal Transportation Center", ["Black Hawk (1974–1981)"] = "Dubuque station", }, ["Duluth"] = "Duluth Depot", ["Dundas"] = "Dundas station (Dundas, Ontario)", ["Dunkirk"] = ny, ["Durand"] = xunion, ["Durham"] = { nc, ["Downeaster"] = "[[Durham–UNH station|Durham–UNH]]", }, ["East Lansing"] = "Capital Area Multimodal Gateway", ["East Lyme"] = "Niantic station", ["East Syracuse"] = "[[William F. Walsh Regional Transportation Center#History|Syracuse]]", ["Edgewood"] = marc, ["Edmonds"] = wa, ["Edmondson"] = "West Baltimore station#Edmondson", ["El Paso"] = "Union Depot (El Paso)", ["Elgin"] = il, ["Elmhurst"] = amtrak, ["Enfield"] = ct, ["Englewood"] = "Englewood station (Chicago)", ["Erie"] = "Union Station (Erie, Pennsylvania)", ["Essex"] = mt, ["Eureka"] = amtrak, ["Eugene"] = amtrak, ["Eugene-Springfield"] = "[[Eugene station (Amtrak)|Eugene]]", ["Eugene–Springfield"] = "[[Eugene station (Amtrak)|Eugene]]", ["Evanston"] = wy, ["Everett"] = "Everett Station", ["Evergreen"] = al, ["Exeter"] = nh, ["Exton"] = pa, ["Flint"] = mi, ["Florence"] = sc, ["Forsyth"] = mt, ["Fort Madison"] = { "Atchison, Topeka and Santa Fe Passenger and Freight Complex Historic District", ["Lone Star"] = "Fort Madison station (1968–2021)", }, ["Fort Worth"] = { "Fort Worth Central Station", ["Inter-American"] = "Fort Worth Union Depot (1900–2002)", ["Lone Star"] = "Fort Worth Union Depot (1900–2002)", }, ["Freeport"] = { me, ["Black Hawk"] = il, ["Black Hawk (1974–1981)"] = il, }, ["Fremont-Centerville"] = "[[Fremont station|Fremont]]", ["Fresno"] = "Santa Fe Passenger Depot (Fresno, California)", ["Fullerton"] = tc, ["Gainesville"] = { fl, ["Crescent"] = ga, ["Piedmont"] = ga, ["Heartland Flyer"] = tx, ["Lone Star"] = tx, }, ["Galesburg (SF)"] = "[[Galesburg station (Atchison, Topeka and Santa Fe Railway)|Galesburg (SF Depot)]]", ["Garden City"] = ks, ["Gary"] = { "Gary station (Pennsylvania Railroad)", ["Cardinal"] = "Gary station (Miller and Lake Streets)", }, ["Georgetown"] = go, ["Glasgow"] = mt, ["Glendale"] = tc, ["Grafton"] = wv, ["Grand Forks (GN)"] = "[[Great Northern Freight Warehouse and Depot|Grand Forks (GN Depot)]]", ["Grand Rapids"] = "Vernon J. Ehlers Station", ["Greenfield"] = "John W. Olver Transit Center", ["Greensboro"] = "J. Douglas Galyon Depot", ["Greenwood"] = ms, ["Green River"] = { ut, ["City of San Francisco"] = wy, ["Pioneer"] = wy, ["San Francisco Zephyr"] = wy, }, ["Groton"] = ct, ["Guelph"] = "Guelph Central Station", ["Hamilton"] = oh, ["Hammond"] = lou, ["Hancock"] = wv, ["Harrisburg"] = tc, ["Hartford"] = xunion, ["Hastings"] = ne, ["Haverhill"] = ma, ["Hayward"] = amtrak, ["Helena"] = "Helena Railroad Depot Historic District", ["Hermann"] = mo, ["Hillsborough"] = nc, ["Hinkle"] = "Hinkle Locomotive Service and Repair Facility", ["Hinton"] = wv, ["Hobart"] = ind, ["Holland"] = mi, ["Hollywood Burbank Airport"] = "[[Burbank Airport–South station|Hollywood Burbank Airport]]", ["Hollywood"] = fl, ["Hope"] = ar, ["Houston (Union Station)"] = "[[Union Station (Houston)|Houston–Union Station]]", ["Houston"] = tx, ["Hudson"] = ny, ["Huntingdon"] = amtrak, ["Huntington"] = amtrak, ["Hyannis"] = "Hyannis Transportation Center", ["Indianapolis"] = xunion, ["Irvine"] = tc, ["Jackson"] = { mi, ["City of New Orleans"] = "Union Station (Jackson, Mississippi)", ["Crescent"] = "Union Station (Jackson, Mississippi)", }, ["Jamestown"] = nd, ["Joliet Union Station"] = "[[Joliet Union Station|Joliet (Union Station)]]", ["Joliet"] = "Joliet Gateway Center", ["Kalamazoo"] = tc, ["Kansas City"] = xunion, ["Kelso"] = "Kelso Multimodal Transportation Center", ["Kelso–Longview"] = "Kelso Multimodal Transportation Center", ["Kensington"] = md, ["King City"] = "King City Multimodal Transportation Center", ["Kingston"] = ri, ["Kirkwood"] = mo, ["Lafayette"] = { ind, ["Sunset Limited"] = lou, }, ["La Grande"] = "La Grande station (Union Pacific Railroad)", ["La Grange"] = "LaGrange Road station", ["Lake City"] = fl, ["Lamar"] = amtrak, ["Lambert's Point"] = "[[Lambert's Point#station|Norfolk]]", ["Lancaster"] = pa, ["Laramie"] = wy, ["Las Vegas"] = { nm, ["Desert Wind"] = "Las Vegas Union Plaza station", ["Las Vegas Limited"] = "Las Vegas Union Plaza station", }, ["Laurel"] = ms, ["Lawrence"] = ks, ["Leavenworth"] = "Icicle Station", ["Lee Hall"] = "Lee Hall Depot", ["Levittown–Tullytown"] = "Levittown station", ["Lexington"] = nc, ["Lima"] = "Lima station (Pennsylvania Railroad)", ["Lincoln"] = { il, ["California Zephyr"] = ne, ["Desert Wind"] = "Lincoln station (Nebraska, 1926–2012)", ["Pioneer"] = "Lincoln station (Nebraska, 1926–2012)", }, ["Lincoln, NE (CB&Q)"] = "[[Lincoln station (Nebraska, 1926–2012)|Lincoln (CB&Q Depot)]]", ["Little Rock"] = xunion, ["Livingston"] = "Livingston Depot", ["Lodi"] = "Lodi Transit Station", ["Lompoc-Surf"] = "Lompoc–Surf station", ["London"] = on, ["Lorton"] = "Lorton station (Auto Train)", ["Los Angeles"] = "Los Angeles Union Station", ["Louisville"] = union, ["Lovelock"] = "Lovelock station", ["Lynchburg"] = "Kemper Street station", ["Madera (SF)"] = "[[Storey station|Madera (SF Station)]]", ["Madera"] = amtrak, ["Madison"] = { ct, ["Sunset Limited"] = fl, }, ["Malton"] = go, ["Malvern"] = { ar, ["Keystone Service"] = septa, }, ["Marceline"] = "Walt Disney Hometown Museum", ["Marion"] = amtrak, ["Marshall"] = tx, ["Marysville"] = ca, ["McKeesport"] = tc, ["Memphis"] = "Memphis Central Station", ["Merced"] = amtrak, ["Merced (CAHSR)"] = "[[Merced station (California High-Speed Rail)|Merced]]", ["Meriden"] = "Meriden Transit Center", ["Meridian"] = "Union Station (Meridian, Mississippi)", ["Merion"] = septa, ["Miami"] = amtrak, ["Middletown"] = pa, ["Midway"] = "[[Midway station (Minnesota)|Saint Paul–Midway]]", ["Milford"] = "Union Pacific Railroad Depot (Milford, Utah)", ["Milwaukee Airport"] = "Milwaukee Airport Railroad Station", ["Milwaukee"] = "Milwaukee Intermodal Station", ["Mineola"] = { tx, ["Northeast Regional"] = "Mineola station (LIRR)", ["Empire Service"] = "Mineola station (LIRR)", }, ["Minneapolis"] = "Minneapolis Great Northern Depot", ["Minneapolis Target Field"] = "Target Field station", ["Missoula"] = "Missoula station (Northern Pacific Railway)", ["Mobile"] = amtrak, ["Monroe"] = lou, ["Montgomery"] = { "Montgomery Union Station", ["Cardinal"] = wv, }, ["Montpelier"] = vt, ["Montreal"] = "Montreal Central Station", ["Montreal old"] = "[[Windsor Station (Montreal)|Montreal]]", ["Montreal West"] = "Montréal-Ouest station", ["Morris"] = mn, ["Mount Joy"] = pa, ["Mount Pleasant"] = ia, ["Mount Vernon"] = "Skagit Station", ["Munice"] = "Cincinnati, Richmond, & Muncie Depot (Muncie, Indiana)", ["Mystic"] = ct, ["Narberth"] = septa, ["Nashville"] = union, ["Natomas/Sacramento Airport"] = "[[Natomas/Sacramento Airport station|Natomas/​Sacramento Airport]]", ["Needles"] = "El Garces Intermodal Transportation Facility", ["New Buffalo (PM)"] = "[[New Buffalo station|New Buffalo (PM Depot)]]", ["New Haven"] = union, ["New London"] = xunion, ["New Orleans"] = "New Orleans Union Passenger Terminal", ["New York (Grand Central)"] = "Grand Central Terminal", ["New York"] = "New York Penn Station", ["New York City"] = "New York Penn Station", ["Newark Airport"] = "Newark Liberty International Airport Station", ["Newark, Delaware"] = "Newark station (Delaware)", ["Newark, New Jersey"] = "[[Newark Penn Station|Newark Penn]]", ["Newark, NJ"] = "[[Newark Penn Station|Newark Penn]]", ["Newark Penn"] = "[[Newark Penn Station|Newark Penn]]", ["Newbern"] = "Newbern Depot", ["Newport"] = ar, ["Newport News"] = { tc, ["Acela Regional"] = "Newport News station", ["Colonial"] = "Newport News station", ["Twilight Shoreliner"] = "Newport News station", ["George Washington"] = "Newport News station", ["James Whitcomb Riley"] = "Newport News station", ["James Whitcomb Riley and George Washington"] = "Newport News station", }, ["Newport News old"] = "[[Newport News station|Newport News]]", ["Newton"] = ks, ["Niagara Falls (former)"] = "[[Niagara Falls station (New York, 1978–2016)|Niagara Falls, New York]]", ["Niagara Falls, New York"] = "Niagara Falls station (New York)", ["Niagara Falls, Ontario"] = "Niagara Falls station (Ontario)", ["Norfolk"] = { amtrak, ["Mountaineer"] = "Lambert's Point#station", }, ["Normal"] = "Uptown Station", ["North Haven"] = ct, ["North Kingston"] = "Wickford Junction station", ["Northampton"] = "Union Station (Northampton, Massachusetts)", ["Oakland"] = { "Oakland–Jack London Square station", ["Shenandoah"] = md, ["West Virginian"] = md, }, ["Oakland – Jack London Square"] = "[[Oakland–Jack London Square station|Oakland–Jack London Square]]", ["Oakland 16th Street"] = "[[16th Street station (Oakland)|Oakland-16th Street]]", ["Oakley"] = ca, ["Oakville"] = go, ["Ocala"] = xunion, ["Oceanside"] = "Oceanside Transit Center", ["Ogden"] = "Union Station (Ogden, Utah)", ["Okeechobee"] = amtrak, ["Oklahoma City"] = "Santa Fe Depot (Oklahoma City)", ["Old Town San Diego"] = "[[Old Town Transit Center|San Diego–Old Town]]", ["San Diego–Old Town"] = "[[Old Town Transit Center|San Diego–Old Town]]", ["Olympia–Lacey"] = "Centennial Station", ["Omaha (CB&Q)"] = "[[Omaha station (Chicago, Burlington and Quincy Railroad)|Omaha (CB&Q Depot)]]", ["Ontario"] = { amtrak, ["Pioneer"] = ore, }, ["Orange"] = ca, ["Orlando"] = "Orlando Health/Amtrak station", ["Oxford"] = oh, ["Oxnard"] = "Oxnard Transit Center", ["Pajaro/Watsonville"] = "[[Pajaro/Watsonville station|Pajaro/​Watsonville]]", ["Pasadena"] = "Del Mar station", ["Pasco"] = "Pasco Intermodal Train Station", ["Pensacola"] = amtrak, ["Perry"] = ok, ["Petersburg (Union Station)"] = "[[Union Station (Petersburg)|Petersburg–Union Station]]", ["Philadelphia"] = "30th Street Station", ["Philadelphia-Suburban"] = "[[Suburban Station|Philadelphia-Suburban]]", ["Philadelphia International Airport"] = "Philadelphia International Airport stations", ["Phoenix"] = "Union Station (Phoenix, Arizona)", ["Pittsburgh"] = union, ["Pittsfield"] = "Joseph Scelsi Intermodal Transportation Center", ["Plano"] = il, ["Pocatello"] = "Union Pacific Railroad Depot (Pocatello, Idaho)", ["Pomona"] = { "[[Pomona–Downtown station|Pomona]]", ["Desert Wind"] = "Pomona–North station", ["Las Vegas Limited"] = "Pomona–North station", ["Southwest Chief"] = "Pomona–North station", ["Southwest Limited"] = "Pomona–North station", ["Super Chief"] = "Pomona–North station", }, ["Pontiac"] = { il, ["Lake Cities"] = tc, ["Wolverine"] = tc, ["Michigan"] = tc, }, ["Portland"] = { "Portland Union Station", ["Downeaster"] = tc, }, ["Princeton"] = il, ["Providence (Union Station)"] = "[[Union Station (Providence)|Providence–Union Station]]", ["Provo"] = amtrak, ["Quincy"] = amtrak, ["Radnor"] = septarr, ["Raleigh"] = xunion, ["Randolph"] = vt, ["Rawlins"] = "Union Pacific Railroad Depot (Rawlins, Wyoming)", ["Redding"] = ca, ["Richmond"] = { ca, ["Cardinal"] = "Richmond station (Chesapeake and Ohio Railway)", ["James Whitcomb Riley"] = "Richmond station (Chesapeake and Ohio Railway)", ["Mountaineer"] = "Richmond station (Chesapeake and Ohio Railway)", ["National Limited"] = "Richmond Railroad Station Historic District", }, ["Richmond Main Street"] = "[[Richmond Main Street Station|Richmond–Main Street]]", ["Richmond-Broad Street"] = "[[Broad Street Station (Richmond)|Richmond–Broad Street]]", ["Riverbank"] = "[[Gold Runner|Riverbank]]", ["Riverside"] = "[[Riverside–Downtown station|Riverside]]", ["Rochester"] = "Louise M. Slaughter Rochester Station", ["Rome"] = ny, ["Rosemont"] = septa, ["Rosenberg"] = tx, ["Roseville"] = ca, ["Royal Oak"] = mi, ["Rugby"] = nd, ["Rye"] = mnrr, ["Saco"] = tc, ["Sacramento"] = "Sacramento Valley Station", ["City College"] = "City College station (Sacramento)", ["Sacramento City College"] = "[[City College station (Sacramento)|City College]]", ["Saint Paul"] = "Saint Paul Union Depot", ["Salem"] = ore, ["Salinas"] = "Salinas Intermodal Transportation Center", ["Salisbury"] = nc, ["Salt Lake City (D&RGW)"] = "[[Denver and Rio Grande Western Depot (Salt Lake City)|Salt Lake City (D&RGW Depot)]]", ["Salt Lake City (UP)"] = "[[Salt Lake City Union Pacific Depot|Salt Lake City (UP Depot)]]", ["Salt Lake City"] = "Salt Lake City Intermodal Hub", ["San Antonio"] = tx, ["San Antonio-Sunset"] = "[[San Antonio station (Texas)#Sunset Station|San Antonio-Sunset]]", ["San Bernardino"] = "San Bernardino Santa Fe Depot", ["San Clemente"] = "[[San Clemente Pier station|San Clemente]]", ["San Diego Old Town"] = "[[Old Town Transit Center|San Diego–Old Town]]", ["San Diego Sorrento Valley"] = "[[Sorrento Valley station|San Diego–Sorrento Valley]]", ["San Diego"] = "Santa Fe Depot (San Diego)", ["San Joaquin Street"] = "[[San Joaquin Street station|Stockton–San Joaquin Street]]", ["San Jose"] = "San Jose Diridon station", ["Sandwich"] = ma, ["Sanford (ACL)"] = "[[Sanford Atlantic Coast Line Station|Sanford (ACL Depot)]]", ["Sanford"] = amtrak, ["Santa Ana"] = "Santa Ana Regional Transportation Center", ["Santa Clara"] = "[[Santa Clara Transit Center|Santa Clara–University]]", ["Santa Clarita"] = "Newhall station", ["Savannah"] = amtrak, ["Seattle"] = "King Street Station", ["Selma"] = "Selma Union Depot", ["Shreveport"] = amtrak, ["Silver Spring"] = "Silver Spring station (Baltimore and Ohio Railroad)", ["Spokane"] = "Spokane Intermodal Center", ["Springfield"] = { "Springfield Union Station (Massachusetts)", ["Abraham Lincoln"] = il, ["Inter-American"] = il, ["Lincoln Service"] = il, ["Loop"] = il, ["Texas Eagle"] = il, }, ["St. Albans"] = vt, ["St. Louis (Union Station)"] = "[[St. Louis Union Station|St. Louis–Union Station]]", ["St. Louis"] = "Gateway Transportation Center", ["St. Marys"] = on, ["St. Paul"] = "Saint Paul Union Depot", ["St. Petersburg"] = amtrak, ["St. Thomas"] = "Canada Southern Railway Station", ["Stamford"] = tc, ["Stanley"] = nd, ["Stockton"] = "[[Robert J. Cabral Station|Stockton–Downtown]]", ["Stockton–Downtown"] = "[[Robert J. Cabral Station|Stockton–Downtown]]", ["Stockton–San Joaquin Street"] = "[[San Joaquin Street station|Stockton–San Joaquin Street]]", ["Stony Creek"] = ct, ["Stratford"] = on, ["Suburban Station"] = "[[Suburban Station|Philadelphia–Suburban]]", ["Suffolk"] = va, ["Summit"] = il, ["Superior"] = { "[[Superior Union Station|Superior]]", ["Northern Lights Express"] = "Superior, Wisconsin", }, ["Surf"] = "[[Lompoc–Surf station|Lompoc–Surf]]", ["Syracuse"] = "William F. Walsh Regional Transportation Center", ["Tacoma (Union Station)"] = "[[Union Station (Tacoma, Washington)|Tacoma–Union Station]]", ["Tacoma Dome"] = "Tacoma Dome Station", ["Tacoma"] = "[[Tacoma station (1984)|Tacoma]]", ["Tampa"] = xunion, ["Taunton"] = amtrak, ["Tempe"] = az, ["Temple"] = tx, ["Texarkana"] = xunion, ["Thomasville"] = "Thomasville Depot (Georgia)", ["Thompson"] = "Green River station (Utah)#History", ["Toledo"] = "Martin Luther King Jr. Plaza (Toledo)", ["Toronto"] = union, ["Trenton"] = "Trenton Transit Center", ["Tri-State"] = "Catlettsburg station", ["Trinidad"] = co, ["Troy"] = "Troy Transit Center", ["Utica"] = "Union Station (Utica, New York)", ["Vancouver, British Columbia"] = "Pacific Central Station", ["Vancouver, Washington"] = "Vancouver station (Washington)", ["Victorville"] = "Victor Valley Transportation Center", ["Wallingford"] = ct, ["Wareham"] = "Wareham Village station", ["Warren"] = il, ["Warsaw"] = ind, ["Washington, DC"] = "[[Washington Union Station|Washington, D.C.]]", ["Washington, D.C."] = "[[Washington Union Station|Washington, D.C.]]", ["Washington, Missouri"] = "[[Washington station (Missouri)|Washington]]", ["Waterbury"] = vt, ["Waterloo"] = ind, ["Wells"] = "Wells Regional Transportation Center", ["Wellesley"] = "Wellesley Square station", ["Wenatchee"] = "Columbia Station (Washington)", ["Westport"] = ny, ["Westwood"] = "[[Route 128 station|Westwood Route 128]]", ["Wheeler"] = ind, ["Whiting"] = "Whiting station (Pennsylvania Railroad)", ["Wichita"] = "Union Station (Wichita, Kansas)", ["Williamsburg"] = tc, ["Wilmington"] = de, ["Wilson"] = nc, ["Windsor"] = { ct, ["Niagara Rainbow"] = "Windsor station (Michigan Central Railroad)", ["Vermonter"] = vt, ["Wolverine"] = on, }, ["Winona"] = { "Winona station", ["City of New Orleans"] = ms, }, ["Winslow"] = az, ["Woburn"] = "Anderson Regional Transportation Center", ["Woodbridge"] = va, ["Woodstock"] = on, ["Worcester"] = "Union Station (Worcester, Massachusetts)", ["Youngstown"] = "Youngstown station (Baltimore and Ohio Railroad)", ["Ypsilanti"] = "Michigan Executive", ["Yuma"] = az, }, ["lines"] = { ["_default"] = { ["title"] = "''[[%1]]''", ["color"] = "00537E", }, ["Abraham Lincoln"] = { ["title"] = "''[[Abraham Lincoln (train)|Abraham Lincoln]]''", ["color"] = "0078B9", ["left terminus"] = "St. Louis (Union Station)", ["right terminus"] = "Chicago", }, ["Acela"] = { ["title"] = "''[[Acela]]''", ["color"] = "00B5E2", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Boston South", }, ["Acela Commuter"] = { ["title"] = "''[[Clocker (train)|Acela Commuter]]''", ["left terminus"] = "Philadelphia", ["right terminus"] = "New York," }, ["Acela Express"] = { ["title"] = "''[[Acela]]''", ["color"] = "00b5e2", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Boston South", }, ["Acela Regional"] = { ["title"] = "''[[Northeast Regional#History|Acela Regional]]''", ["left terminus"] = "Newport News", ["right terminus"] = "Boston South," }, ["Adirondack"] = { ["title"] = "''[[Adirondack (train)|Adirondack]]''", ["left terminus"] = "Montreal", ["right terminus"] = "New York", }, ["Ann Rutledge"] = { ["title"] = "''[[Ann Rutledge (train)|Ann Rutledge]]''", ["left terminus"] = "Kansas City", ["right terminus"] = "St. Louis", }, ["Arrowhead"] = { ["title"] = "''[[Arrowhead (train)|Arrowhead]]''", ["color"] = "0078B9", ["left terminus"] = "Duluth", ["right terminus"] = "Minneapolis", }, ["Atlantic City Express"] = { ["title"] = "''[[Atlantic City Express (Amtrak train)|Atlantic City Express]]''", ["color"] = "0078B9", ["left terminus"] = {"Richmond Staples Mill Road", "Harrisburg", "Springfield"}, ["right terminus"] = "Atlantic City", }, ["Auto Train"] = { ["left terminus"] = "Sanford", ["right terminus"] = "Lorton", }, ["Badger"] = { ["title"] = "''[[Hiawatha (Amtrak train)|Badger]]''", ["color"] = "0078B9", }, ["Bankers"] = { ["title"] = "''[[Bankers (train)|Bankers]]''", ["color"] = "0078B9", }, ["Bay State"] = { ["title"] = "''[[New Haven–Springfield Line|Bay State]]''", ["color"] = "0078B9", ["left terminus"] = "Philadelphia", ["right terminus"] = "Boston South", }, ["Beacon Hill"] = { ["title"] = "''[[Beacon Hill (train)|Beacon Hill]]''", ["color"] = "0078B9", ["left terminus"] = "New Haven", ["right terminus"] = "Boston South", }, ["Berkshire Flyer"] = { ["title"] = "''[[Berkshire Flyer]]''", ["left terminus"] = "Pittsfield", ["right terminus"] = "New York", }, ["Big Apple"] = { ["title"] = "''[[Keystone Service#Through service|Big Apple]]''", ["color"] = "0078B9", }, ["Black Hawk"] = { ["title"] = "''[[Black Hawk (Amtrak train)|Black Hawk]]''", ["left terminus"] = "Rockford", ["right terminus"] = "Chicago", }, ["Black Hawk (1974–1981)"] = { ["title"] = "''[[Black Hawk (Amtrak train)|Black Hawk]]''", ["color"] = "0078B9", ["left terminus"] = "Dubuque", ["right terminus"] = "Chicago", ["note-mid"] = "1974–1981", }, ["Blue Ridge"] = { ["title"] = "''[[Blue Ridge (train)|Blue Ridge]]''", ["color"] = "0078B9", ["left terminus"] = "Martinsburg", ["right terminus"] = "Washington, D.C.", ["note-mid"] = "1973–1986", }, ["Blue Water"] = { ["title"] = "''[[Blue Water (train)|Blue Water]]''", ["left terminus"] = "Chicago", ["right terminus"] = "Port Huron", }, ["Borealis"] = { ["title"] = "''[[Borealis (train)|Borealis]]''", ["left terminus"] = "St. Paul", ["right terminus"] = "Chicago", }, ["Broadway Limited"] = { ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = "New York", }, ["California Zephyr"] = { ["left terminus"] = "Emeryville", ["right terminus"] = "Chicago", }, ["California Zephyr (1983–1994)"] = { ["title"] = "''[[California Zephyr]]''", ["color"] = "0078B9", ["left terminus"] = "Oakland 16th Street", ["right terminus"] = "Chicago", }, ["Calumet"] = { ["title"] = "''[[Calumet (train)|Calumet]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = "Valparaiso", }, ["Campus"] = { ["title"] = "''[[Campus (train)|Campus]]''", ["color"] = "0078B9", ["left terminus"] = "Champaign-Urbana", ["right terminus"] = "Chicago (Central Station)", }, ["Cape Codder"] = { ["title"] = "''[[Cape Codder (train)|Cape Codder]]''", ["color"] = "0078B9", ["left terminus"] = "New York", ["right terminus"] = "Hyannis", }, ["Capitol Corridor"] = { ["color"] = "1C1B4D", ["left terminus"] = "San Jose", ["right terminus"] = "Auburn", }, ["Capitol Limited"] = { ["left terminus"] = "Chicago", ["right terminus"] = "Washington, D.C.", }, ["Capitols (1991–1998)"] = { ["title"] = "''[[Capitol Corridor|Capitols]]''", ["color"] = "FFC709", ["left terminus"] = "San Jose", ["right terminus"] = "Roseville", }, ["Cardinal"] = { ["title"] = "''[[Cardinal (train)|Cardinal]]''", ["left terminus"] = "Chicago", ["right terminus"] = "New York", }, ["Carolina Special"] = { ["title"] = "''[[Carolina Special (Amtrak train)|Carolina Special]]''", ["color"] = "0078B9", ["left terminus"] = "Jacksonville", ["right terminus"] = "New York", }, ["Carolinian"] = { ["title"] = "''[[Carolinian (train)|Carolinian]]''", ["left terminus"] = "Charlotte", ["right terminus"] = "New York", }, ["Cascades"] = { ["title"] = "[[Amtrak Cascades|Amtrak ''Cascades'']]", ["color"] = "223832", ["left terminus"] = "Eugene", ["right terminus"] = "Vancouver, British Columbia", }, ["Champion"] = { ["title"] = "''[[Champion (train)|Champion]]''", ["color"] = "0078B9", ["left terminus"] = "St. Petersburg", ["right terminus"] = "New York", }, ["Charter Oak"] = { ["title"] = "''[[Colonial (Amtrak train)|Charter Oak]]''", ["color"] = "0078B9", }, ["Chesapeake"] = { ["title"] = "''[[Chesapeake (train)|Chesapeake]]''", ["color"] = "0078B9", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Suburban Station", }, ["Chesapeake Virginia"] = { ["title"] = "''[[Colonial (Amtrak train)|Chesapeake]]''", ["color"] = "0078B9", }, ["Chief"] = { ["title"] = "''[[Chief (train)|Chief]]''", ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "Chicago", }, ["City of New Orleans"] = { ["title"] = "''[[City of New Orleans (train)|City of New Orleans]]''", ["left terminus"] = "New Orleans", ["right terminus"] = "Chicago", }, ["City of San Francisco"] = { ["title"] = "''[[City of San Francisco (train)|City of San Francisco]]''", ["color"] = "0078B9", ["left terminus"] = "Oakland 16th Street", ["right terminus"] = "Chicago", }, ["Clamdigger"] = { ["title"] = "''[[Clamdigger (train)|Clamdigger]]''", ["color"] = "0078B9", ["left terminus"] = "New Haven", ["right terminus"] = "New London", }, ["Clocker"] = { ["title"] = "''[[Clocker (train)|Clocker]]''", ["left terminus"] = "Philadelphia", ["right terminus"] = "New York," }, ["Coast Starlight"] = { ["left terminus"] = "Los Angeles", ["right terminus"] = "Seattle", }, ["Colonial"] = { ["title"] = "''[[Colonial (Amtrak train)|Colonial]]''", ["color"] = "0078B9", ["left terminus"] = "Newport News", ["right terminus"] = "Boston South", }, ["Colonial (PRR)"] = { ["title"] = "''[[Colonial (PRR train)|Colonial]]''", ["color"] = "0078B9", }, ["Connecticut Valley Service"] = { ["title"] = "''[[Amtrak Hartford Line|Connecticut Valley Service]]''", ["color"] = "0078B9", ["left terminus"] = "New Haven", ["right terminus"] = "Springfield", }, ["Crescent"] = { ["title"] = "''[[Crescent (train)|Crescent]]''", ["left terminus"] = "New Orleans", ["right terminus"] = "New York", }, ["Desert Wind"] = { ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "Chicago", }, ["Downeaster"] = { ["title"] = "''[[Downeaster (train)|Downeaster]]''", ["left terminus"] = "Boston North", ["right terminus"] = "Brunswick", }, ["Duquesne"] = { ["title"] = "''[[Pennsylvanian (train)|Duquesne]]''", ["color"] = "0078B9", }, ["Eagle"] = { ["title"] = "''[[Texas Eagle|Eagle]]''", ["color"] = "0078B9", }, ["El Capitan"] = { ["title"] = "''[[El Capitan (train)|El Capitan]]''", ["color"] = "0078B9", }, ["Empire Builder"] = { ["left terminus"] = {"Seattle", "Portland"}, ["right terminus"] = "Chicago", }, ["Empire Builder (1971-1981)"] = { ["title"] = "''[[Empire Builder]]''", ["color"] = "0078B9", ["left terminus"] = "Seattle", ["right terminus"] = "Chicago", }, ["Empire Service"] = { ["left terminus"] = "Niagara Falls, New York", ["right terminus"] = "New York", }, ["Encore"] = { ["title"] = "''[[Hiawatha Service|Encore]]''", ["color"] = "0078B9", }, ["Ethan Allen Express"] = { ["left terminus"] = "Burlington", ["right terminus"] = "New York", }, ["Executive Sleeper"] = { ["title"] = "''[[Night Owl (train)|Executive Sleeper]]''", ["color"] = "0078B9", }, ["Expo '74"] = { ["title"] = "''[[Expo '74 (train)|Expo '74]]''", ["color"] = "0078B9", ["left terminus"] = "Seattle", ["right terminus"] = "Spokane", }, ["Fast Mail"] = { ["title"] = "''[[Fast Mail (Amtrak train)|Fast Mail]]''", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Boston or Springfield", }, ["Federal"] = { ["title"] = "''[[Twilight Shoreliner|Federal]]''", ["color"] = "0078B9", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Boston South", }, ["Floridian"] = { ["title"] = "''[[Floridian (train)|Floridian]]''", ["left terminus"] = "Miami", ["right terminus"] = "Chicago", }, ["Floridian (1971–1979)"] = { ["title"] = "''[[Floridian (train, 1971–1979)|Floridian]]''", ["color"] = "0078B9", ["left terminus"] = {"St. Petersburg", "Miami"}, ["right terminus"] = "Chicago", ["types"] = { ["Miami"] = { ["title"] = "", ["left terminus"] = "Miami", ["right terminus"] = "Chicago", }, ["St. Petersburg"] = { ["title"] = "", ["left terminus"] = "St. Petersburg", ["right terminus"] = "Chicago", }, }, }, ["Florida Special"] = { ["title"] = "''[[Florida Special (train)|Florida Special]]''", ["color"] = "0078B9", }, ["Fort Pitt"] = { ["title"] = "''[[Fort Pitt (train)|Fort Pitt]]''", ["color"] = "0078B9", ["left terminus"] = "Pittsburgh", ["right terminus"] = "Altoona", }, ["George Washington"] = { ["title"] = "''[[George Washington (train)|George Washington]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = {"Washington, D.C.", "Newport News"}, }, ["Gold Runner"] = { ["title"] = "''[[Gold Runner]]''", ["color"] = "0096CE", ["left terminus"] = {"Oakland", "Sacramento"}, ["right terminus"] = "Bakersfield", }, ["Gotham Limited"] = { ["title"] = "''[[Colonial (Amtrak train)|Gotham Limited]]''", ["color"] = "0078B9", }, ["Gulf Breeze"] = { ["title"] = "''[[Gulf Breeze (train)|Gulf Breeze]]''", ["color"] = "0078B9", ["left terminus"] = "Mobile", ["right terminus"] = "Birmingham", }, ["Gulf Coast Limited"] = { ["title"] = "''[[Gulf Coast Limited]]''", ["color"] = "0078B9", ["left terminus"] = "New Orleans", ["right terminus"] = "Mobile", }, ["Hartford"] = { ["title"] = "[[Amtrak Hartford Line|''Hartford Line'']]", ["left terminus"] = "New Haven", ["right terminus"] = "Springfield", }, ["Heartland Flyer"] = { ["left terminus"] = "Fort Worth", ["right terminus"] = "Oklahoma City", }, ["Hiawatha (1971-1977)"] = { ["title"] = "''[[Borealis (train)#History|Hiawatha]]''", ["color"] = "0078B9", }, ["Hiawatha"] = { ["title"] = "''[[Hiawatha (Amtrak train)|Hiawatha]]''", ["left terminus"] = "Milwaukee", ["right terminus"] = "Chicago", }, ["Hilltopper"] = { ["title"] = "''[[Hilltopper (train)|Hilltopper]]''", ["color"] = "0078B9", ["left terminus"] = "Tri-State", ["right terminus"] = "Boston South", }, ["Hoosier State"] = { ["title"] = "''[[Hoosier State (train)|Hoosier State]]''", ["left terminus"] = "Chicago", ["right terminus"] = "Indianapolis", }, ["Illini and Saluki"] = { ["title"] = "[[Illini and Saluki|''Illini'' and ''Saluki'']]", ["left terminus"] = "Carbondale", ["right terminus"] = "Chicago", }, ["Illini (Central)"] = { ["title"] = "[[Illini and Saluki|''Illini'']]", ["color"] = "0078B9", ["left terminus"] = "Champaign-Urbana", ["right terminus"] = "Chicago", }, ["Illinois Zephyr and Carl Sandburg"] = { ["title"] = "[[Illinois Zephyr and Carl Sandburg|''Illinois Zephyr'' and ''Carl Sandburg'']]", ["left terminus"] = "Quincy", ["right terminus"] = "Chicago", }, ["Illinois Zephyr old"] = { ["title"] = "[[Illinois Zephyr and Carl Sandburg|''Illinois Zephyr'']]", ["left terminus"] = "Quincy", ["right terminus"] = "Chicago", }, ["Inter-American"] = { ["title"] = "''[[Inter-American (train)|Inter-American]]''", ["color"] = "0078B9", ["left terminus"] = {"Laredo", "Houston"}, ["right terminus"] = "Chicago", }, ["International"] = { ["title"] = "''[[International (Amtrak train)|International]]''", ["left terminus"] = "Chicago", ["right terminus"] = "Toronto", }, ["International (1982–1990)"] = { ["title"] = "''[[International (Amtrak train)|International]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = "Toronto", }, ["James River"] = { ["title"] = "''[[Colonial (Amtrak train)|James River]]''", ["color"] = "0078B9", }, ["James Whitcomb Riley"] = { ["title"] = "''[[James Whitcomb Riley (train)|James Whitcomb Riley]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = {"Washington, D.C.", "Newport News"}, }, ["James Whitcomb Riley and George Washington"] = { ["title"] = "''[[James Whitcomb Riley (train)|James Whitcomb Riley]] and [[George Washington (train)|George Washington]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = {"Washington, D.C.", "Newport News"}, }, ["Kentucky Cardinal"] = { ["left terminus"] = "Chicago", ["right terminus"] = "Louisville", }, ["Keystone"] = { ["title"] = "''[[Pennsylvanian (train)#History|Keystone]]''", ["color"] = "0078B9", ["left terminus"] = "Pittsburgh", ["right terminus"] = "New York", }, ["Keystone (1971-1972)"] = { ["title"] = "''[[Pennsylvanian (train)|Keystone]]''", ["color"] = "0078B9", }, ["Keystone Executive"] = { ["title"] = "''[[Keystone Service#Declining service|Keystone Executive]]''", ["color"] = "0078B9", }, ["Keystone Service"] = { ["left terminus"] = "Harrisburg", ["right terminus"] = "New York", }, ["Keystone State Express"] = { ["title"] = "''[[Keystone Service#Through service|Keystone State Express]]''", ["color"] = "0078B9", }, ["Lake Cities"] = { ["title"] = "''[[Lake Cities (Amtrak train)|Lake Cities]]''", ["left terminus"] = "Chicago", ["right terminus"] = "Pontiac", }, ["Lake Cities (1980–1995)"] = { ["title"] = "''[[Lake Cities (Amtrak train)|Lake Cities]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = "Toledo", }, ["Lake Country Limited"] = { ["left terminus"] = "Janesville", ["right terminus"] = "Chicago", }, ["Lake Shore"] = { ["title"] = "''[[Lake Shore Limited#Lake Shore|Lake Shore]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = "New York (Grand Central)", }, ["Lake Shore Limited"] = { ["left terminus"] = "Chicago", ["right terminus"] = {"New York", "Boston South"}, }, ["LaSalle"] = { ["title"] = "''[[Hiawatha (Amtrak train)|LaSalle]]''", ["color"] = "0078B9", }, ["Las Vegas Limited"] = { ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "Las Vegas", }, ["Loop"] = { ["title"] = "''[[Loop (Amtrak train)|Loop]]''", ["color"] = "0078B9", ["left terminus"] = "Springfield", ["right terminus"] = "Chicago", }, ["Limited"] = { ["title"] = "''[[Alton Limited|Limited]]''", ["color"] = "0078B9", }, ["Lincoln Service"] = { ["left terminus"] = "St. Louis", ["right terminus"] = "Chicago", }, ["Lone Star"] = { ["title"] = "''[[Lone Star (Amtrak train)|Lone Star]]''", ["color"] = "0078B9", ["left terminus"] = {"Dallas", "Houston"}, ["right terminus"] = "Chicago", }, ["Manhattan Express"] = { ["title"] = "''[[Colonial (Amtrak train)|Manhattan Express]]''", ["color"] = "0078B9", }, ["Mardi Gras Service"] = { ["title"] = "''[[Mardi Gras Service]]''", ["left terminus"] = "New Orleans", ["right terminus"] = "Mobile", }, ["Maple Leaf"] = { ["title"] = "''[[Maple Leaf (train)|Maple Leaf]]''", ["left terminus"] = "Toronto", ["right terminus"] = "New York", }, ["Marquette"] = { ["title"] = "''[[Hiawatha (Amtrak train)|Marquette]]''", ["color"] = "0078B9", }, ["Merchants"] = { ["title"] = "''[[Merchants Limited|Merchants]]''", ["color"] = "0078B9", }, ["Merchants Limited"] = { ["title"] = "''[[Merchants Limited]]''", ["color"] = "0078B9", }, ["Meteor"] = { ["title"] = "''[[Champion (train)#Amtrak|Meteor]]''", ["color"] = "0078B9", ["left terminus"] = {"St. Petersburg", "Miami"}, ["right terminus"] = "Boston South", }, ["Metroliner"] = { ["title"] = "''[[Metroliner (train)|Metroliner]]''", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "New York", }, ["Miamian"] = { ["title"] = "''[[Vacationer (train)|Miamian]]''", ["color"] = "0078B9", }, ["Michigan Executive"] = { ["color"] = "0078B9", ["left terminus"] = "Jackson", ["right terminus"] = "Detroit (MC)", }, ["Missouri River Runner"] = { ["left terminus"] = "Kansas City", ["right terminus"] = "St. Louis", }, ["Montrealer"] = { ["title"] = "''[[Montrealer (train)|Montrealer]]''", ["color"] = "0078B9", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Montreal", }, ["Mount Rainier"] = { ["title"] = "''[[Amtrak Cascades#History|Mount Rainier]]''", ["color"] = "0078B9", ["left terminus"] = "Eugene", ["right terminus"] = "Seattle", }, ["Mountaineer"] = { ["title"] = "''[[Mountaineer (Amtrak train)|Mountaineer]]''", ["color"] = "0078B9", ["left terminus"] = "Chicago", ["right terminus"] = "Norfolk", }, ["Mountain Rail"] = { ["title"] = "''[[Winter Park Express#Future plans|Mountain Rail]]''", ["left terminus"] = "Craig", ["right terminus"] = "Denver", }, ["National Limited"] = { ["title"] = "''[[National Limited (Amtrak train)|National Limited]]''", ["color"] = "0078B9", ["left terminus"] = "Kansas City", ["right terminus"] = {"New York", "Washington, D.C."}, }, ["New England Express"] = { ["title"] = "''[[Colonial (Amtrak train)|New England Express]]''", ["color"] = "0078B9", }, ["New Orleans–Baton Rouge passenger rail"] = { ["title"] = "[[New Orleans–Baton Rouge passenger rail|New Orleans–Baton Rouge]]", ["left terminus"] = "Baton Rouge", ["right terminus"] = "New Orleans", }, ["Niagara Rainbow"] = { ["color"] = "0078B9", ["left terminus"] = "Detroit (MC)", ["right terminus"] = "New York (Grand Central)", }, ["Nicollet"] = { ["title"] = "''[[Hiawatha (Amtrak train)|Nicollet]]''", ["color"] = "0078B9", }, ["Night Owl"] = { ["title"] = "''[[Night Owl (train)|Night Owl]]''", ["color"] = "0078B9", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Boston South", }, ["North Coast Hiawatha"] = { ["color"] = "0078B9", ["left terminus"] = "Seattle", ["right terminus"] = "Chicago", }, ["Northern Lights Express"] = { ["color"] = "78BE21", ["left terminus"] = "Duluth", ["right terminus"] = "Minneapolis Target Field", }, ["North Star"] = { ["title"] = "''[[North Star (Amtrak train)|North Star]]''", ["color"] = "0078B9", ["left terminus"] = "Duluth", ["right terminus"] = {"Chicago", "Midway"}, }, ["Northeast Corridor"] = { ["title"] = "[[Northeast Corridor]]", ["color"] = "0078B9", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "Boston South", }, ["Northeast Regional"] = { ["left terminus"] = {"Norfolk", "Newport News", "Roanoke"}, ["right terminus"] = {"Boston South", "Springfield"}, ["types"] = { ["Newport News or Roanoke"] = { ["title"] = "", ["left terminus"] = {"Newport News", "Roanoke"}, ["right terminus"] = {"Boston South", "Springfield"}, }, ["Norfolk or Newport News"] = { ["title"] = "", ["left terminus"] = {"Norfolk", "Newport News"}, ["right terminus"] = {"Boston South", "Springfield"}, }, ["Norfolk or Roanoke"] = { ["title"] = "", ["left terminus"] = {"Norfolk", "Roanoke"}, ["right terminus"] = {"Boston South", "Springfield"}, }, }, }, ["Old Dominion"] = { ["title"] = "''[[Colonial (Amtrak train)|Old Dominion]]''", ["color"] = "0078B9", }, ["Orange County Commuter"] = { ["title"] = "''[[Orange County Line|Orange County Commuter]]''", ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "San Juan Capistrano", }, ["Pacific International"] = { ["title"] = "''[[Pacific International]]''", ["color"] = "0078B9", ["left terminus"] = "Seattle", ["right terminus"] = "Vancouver, British Columbia", }, ["Pacific Surfliner"] = { ["color"] = "003C5B", ["left terminus"] = "San Luis Obispo", ["right terminus"] = "San Diego", }, ["Palmetto"] = { ["title"] = "''[[Palmetto (train)|Palmetto]]''", ["left terminus"] = "Savannah", ["right terminus"] = "New York", }, ["Panama Limited"] = { ["title"] = "''[[Panama Limited]]''", ["color"] = "0078B9", ["left terminus"] = "New Orleans", ["right terminus"] = "Chicago (Central Station)", }, ["Pennsylvanian"] = { ["title"] = "''[[Pennsylvanian (train)|Pennsylvanian]]''", ["left terminus"] = "Pittsburgh", ["right terminus"] = "New York", }, ["Pere Marquette"] = { ["title"] = "''[[Pere Marquette (Amtrak train)|Pere Marquette]]''", ["left terminus"] = "Chicago", ["right terminus"] = "Grand Rapids", }, ["Piedmont"] = { ["title"] = "''[[Piedmont (train)|Piedmont]]''", ["left terminus"] = "Charlotte", ["right terminus"] = "Raleigh", }, ["Pioneer"] = { ["title"] = "''[[Pioneer (train)|Pioneer]]''", ["color"] = "0078B9", ["left terminus"] = "Seattle", ["right terminus"] = "Chicago", }, ["Potomac"] = { ["title"] = "''[[Colonial (Amtrak train)|Potomac]]''", ["color"] = "0078B9", }, ["Prairie Marksman"] = { ["title"] = "''[[Prairie Marksman]]''", ["left terminus"] = "East Peoria", ["right terminus"] = "Chicago", ["color"] = "0078B9", }, ["Prairie State"] = { ["title"] = "''[[Prairie State (Amtrak)|Prairie State]]''", ["color"] = "0078B9", }, ["Quad Cities"] = { ["title"] = "''[[Quad Cities (train)|Quad Cities]]''", ["left terminus"] = "Moline", ["right terminus"] = "Chicago", ["note-mid"] = "Proposed", }, ["Radisson"] = { ["title"] = "''[[Hiawatha (Amtrak train)|Radisson]]''", ["color"] = "0078B9", }, ["River Cities"] = { ["title"] = "''[[River Cities (train)|River Cities]]''", ["color"] = "0078B9", ["left terminus"] = "New Orleans", ["right terminus"] = "Kansas City", }, ["San Diegan"] = { ["title"] = "''[[San Diegan (train)|San Diegan]]''", ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "San Diego", }, ["San Francisco Zephyr"] = { ["color"] = "0078B9", ["left terminus"] = "Oakland 16th Street", ["right terminus"] = "Chicago", }, ["San Joaquin (1974–1994)"] = { ["title"] = "''[[Gold Runner#History|San Joaquins]]''", ["color"] = "0078B9", ["left terminus"] = "Oakland 16th Street", ["right terminus"] = "Bakersfield", }, ["San Joaquin (1994–1996)"] = { ["title"] = "''[[Gold Runner#History|San Joaquins]]''", ["color"] = "FFC709", ["left terminus"] = "Emeryville", ["right terminus"] = "Bakersfield", }, ["San Joaquin (1996–2002)"] = { ["title"] = "''[[Gold Runner#History|San Joaquins]]''", ["color"] = "FFC709", ["left terminus"] = "Oakland", ["right terminus"] = "Bakersfield", }, ["San Joaquins (1999–2025)"] = { ["title"] = "''[[Gold Runner#History|San Joaquins]]''", ["color"] = "1EB1D2", ["left terminus"] = {"Oakland", "Sacramento"}, ["right terminus"] = "Bakersfield", }, ["Shawnee"] = { ["title"] = "''[[Shawnee (train)|Shawnee]]''", ["color"] = "0078B9", ["left terminus"] = "Carbondale", ["right terminus"] = "Chicago", }, ["Shenandoah"] = { ["title"] = "''[[Shenandoah (Amtrak train)|Shenandoah]]''", ["color"] = "0078B9", ["left terminus"] = "Cincinnati River Road", ["right terminus"] = "Washington, D.C.", }, ["Silver Meteor"] = { ["left terminus"] = "Miami", ["right terminus"] = "New York", }, ["Silver Palm (1982–1985)"] = { ["title"] = "''[[Silver Palm (train)|Silver Palm]]''", ["color"] = "0078B9", ["left terminus"] = "Miami", ["right terminus"] = "Tampa", }, ["Silver Palm (1996–2002)"] = { ["title"] = "''[[Palmetto (train)#History|Silver Palm]]''", ["left terminus"] = "Miami", ["right terminus"] = "New York", }, ["Silver Star"] = { ["title"] = "''[[Silver Star (Amtrak train)|Silver Star]]''", ["left terminus"] = "Miami", ["right terminus"] = "New York", }, ["Silverliner Service"] = { ["color"] = "0078B9", ["left terminus"] = "Harrisburg", ["right terminus"] = "Suburban Station", }, ["Southwest Chief"] = { ["left terminus"] = "Los Angeles", ["right terminus"] = "Chicago", }, ["Southwest Limited"] = { ["title"] = "''[[Southwest Chief|Southwest Limited]]''", ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "Chicago", }, ["South Wind"] = { ["title"] = "''[[South Wind (train)|South Wind]]''", ["color"] = "0078B9", }, ["Spirit of California"] = { ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "Sacramento", }, ["Spirit of St. Louis"] = { ["title"] = "''[[Spirit of St. Louis (train)|Spirit of St. Louis]]''", ["color"] = "0078B9", }, ["State House"] = { ["title"] = "''[[State House (train)|State House]]''", ["left terminus"] = "St. Louis", ["right terminus"] = "Chicago", }, ["St. Clair"] = { ["title"] = "''[[Lake Cities (Amtrak train)|St. Clair]]''", ["color"] = "0078B9", }, ["Sunset Limited"] = { ["left terminus"] = "Los Angeles", ["right terminus"] = "New Orleans", ["types"] = { ["East"] = { ["title"] = "", ["left terminus"] = "Los Angeles", ["right terminus"] = {"Orlando", "Miami"}, }, }, }, ["Super Chief"] = { ["color"] = "0078B9", ["left terminus"] = "Los Angeles", ["right terminus"] = "Chicago", }, ["Super Chief/El Capitan"] = { ["title"] = "''[[Super Chief]]''/​''[[El Capitan (train)|El Capitan]]''", ["color"] = "0078B9", }, ["Susquehanna"] = { ["title"] = "''[[Keystone Service#Through service|Susquehanna]]''", ["color"] = "0078B9", }, ["Texas Eagle"] = { ["left terminus"] = {"Los Angeles", "San Antonio"}, ["right terminus"] = "Chicago", }, ["Three Rivers"] = { ["title"] = "''[[Three Rivers (train)|Three Rivers]]''", ["left terminus"] = "Chicago", ["right terminus"] = "New York", }, ["Tidewater"] = { ["title"] = "''[[Colonial (Amtrak train)|Tidewater]]''", ["color"] = "0078B9", }, ["Tidewater Express"] = { ["title"] = "''[[Colonial (Amtrak train)|Tidewater Express]]''", ["color"] = "0078B9", }, ["Turboliner"] = { ["title"] = "''[[Turboliner#Service|Turboliner]]''", ["color"] = "0078B9", }, ["Twilight Limited"] = { ["left terminus"] = "Chicago", ["right terminus"] = "Pontiac", }, ["Twilight Shoreliner"] = { ["title"] = "''[[Twilight Shoreliner]]''", ["color"] = "0078B9", ["left terminus"] = "Newport News", ["right terminus"] = "Boston South", }, ["Twin Cities Hiawatha"] = { ["title"] = "''[[Borealis (train)#History|Twin Cities Hiawatha]]''", ["color"] = "0078B9", ["left terminus"] = {"Minneapolis", "Midway"}, ["right terminus"] = "Chicago", }, ["Vacationer"] = { ["title"] = "''[[Vacationer (train)|Vacationer]]''", ["color"] = "0078B9", ["left terminus"] = "Miami", ["right terminus"] = "New York", }, ["Valley Forge"] = { ["title"] = "''[[Keystone Service#Through service|Valley Forge]]''", ["color"] = "0078B9", ["left terminus"] = "Harrisburg", ["right terminus"] = "New York", ["types"] = { ["weekends only"] = { ["title"] = "1974-1975, weekends only", ["right terminus"] = "Boston South", }, }, }, ["Valley Flyer"] = { ["title"] = "''[[Valley Flyer]]''", ["left terminus"] = "New Haven", ["right terminus"] = "Greenfield", }, ["Vermonter"] = { ["title"] = "''[[Vermonter (train)|Vermonter]]''", ["left terminus"] = "Washington, D.C.", ["right terminus"] = "St. Albans", }, ["Virginian"] = { ["title"] = "''[[Colonial (Amtrak train)|Virginian]]''", ["color"] = "0078B9", }, ["Washington Executive"] = { ["title"] = "''[[Night Owl (train)|Washington Executive]]''", ["color"] = "0078B9", }, ["Weekender"] = { ["title"] = "''[[Lincoln Service|Weekender]]''", ["color"] = "0078B9", }, ["Weekend Metroliner"] = { ["title"] = "''[[Metroliner (train)|Weekend Metroliner]]''", ["color"] = "0078B9", }, ["West Virginian"] = { ["title"] = "''[[West Virginian (Amtrak train)|West Virginian]]''", ["color"] = "0078B9", ["left terminus"] = "Parkersburg", ["right terminus"] = "Washington, D.C.", ["note-mid"] = "1971–1973", }, ["Willamette Valley"] = { ["title"] = "''[[Willamette Valley (train)|Willamette Valley]]''", ["color"] = "0078B9", ["left terminus"] = "Eugene", ["right terminus"] = "Portland", }, ["Winter Park Express"] = { ["left terminus"] = "Fraser–Winter Park", ["right terminus"] = "Denver", }, ["Wolverine"] = { ["title"] = "''[[Wolverine (train)|Wolverine]]''", ["left terminus"] = "Chicago", ["right terminus"] = "Pontiac", }, -- For generic system display on station layouts using rail color box ["Amtrak"] = { ["title"] = "[[Amtrak]]", }, }, ["aliases"] = { ["amtrak cascades"] = "Cascades", ["amtrak hartford line"] ="Hartford", ["carl sandburg"] = "Illinois Zephyr and Carl Sandburg", ["carl sandburg/illinois zephyr"] = "Illinois Zephyr and Carl Sandburg", ["hartford line"] ="Hartford", ["hiawatha service"] = "Hiawatha", ["hiawatha (1971-1974)"] = "Hiawatha (1971-1977)", ["illini"] = "Illini and Saluki", ["illini/saluki"] = "Illini and Saluki", ["illinois zephyr"] = "Illinois Zephyr and Carl Sandburg", ["illinois zephyr/carl sandburg"] = "Illinois Zephyr and Carl Sandburg", ["international limited"] = "International", ["international (1982-1990)"] = "International (1982–1990)", ["new haven–springfield shuttle"] = "Hartford", ["new haven-springfield shuttle"] = "Hartford", ["regional"] = "Northeast Regional", ["saluki"] = "Illini and Saluki", ["saluki/illini"] = "Illini and Saluki", ["san joaquin"] = "Gold Runner", ["san joaquins"] = "Gold Runner", ["shuttle"] = "Hartford Line", ["black hawk (1974-1981)"] = "Black Hawk (1974–1981)", ["california zephyr (1983-1994)"] = "California Zephyr (1983–1994)", ["capitols (1991-1998)"] = "Capitols (1991–1998)", ["lake cities (1980-1995)"] = "Lake Cities (1980–1995)", ["san joaquin (1974-1994)"] = "San Joaquin (1974–1994)", ["san joaquin (1994-1996)"] = "San Joaquin (1994–1996)", ["san joaquin (1996-2002)"] = "San Joaquin (1996–2002)", ["silver palm (1982-1985)"] = "Silver Palm (1982–1985)", ["silver palm (1996-2002)"] = "Silver Palm (1996–2002)", ["northern lights express"] = "Northern Lights Express", ["baton rouge"] = "New Orleans–Baton Rouge passenger rail", ["great river"] = "Borealis", ["tcmc"] = "Borealis", }, } return p 5d810rozuozv4qituw64bug1k4rr453 Module:Adjacent stations/i18n 828 176068 746271 2023-06-13T12:15:00Z en>MSGJ 0 p['en-AU'] = mw.clone(p['en-GB']) 746271 Scribunto text/plain local p = {} p = { ['en-GB'] = { ['preceding'] = function(s) return s and 'Preceding ' .. s end, ['following'] = function(s) return s and 'Following ' .. s end, ['stop_noun'] = 'station', ['nonstop_past'] = function(s) return s and s .. ' did not stop here' end, ['nonstop_present'] = function(s) return s and s .. ' does not stop here' end, ['comma'] = function(s) return s and ', ' .. s end, ['or'] = function(s) return s and ' or ' .. s end, ['via-first'] = false, -- If the «via» text comes before termini, change to «true» ['via'] = function(s) return s and ' via&nbsp;' .. s end, ['comma-format'] = ',%s+', ['or-format'] = '%s+or%s+', ['via-format'] = '%s+via%s+(.+)$', -- first match is station name ['towards'] = function(s) return s and 'towards ' .. s end, ['through'] = function(s) return s and 'through to ' .. s end, ['reverse'] = 'Reverses direction', ['oneway'] = 'One-way operation', ['terminus'] = 'Terminus', ['transfer'] = function(s) return s and 'transfer at ' .. s end, ['error_duplicate'] = function(s) return s and 'Same row number used multiple times for ' .. s end, ['error_format'] = 'Station format table missing in data page', ['error_line'] = 'Lines table missing in data module', ['error_missing'] = function(s) return s and '"' .. (s or '') .. '" is missing from the data page' end, ['error_unknown'] = function(s) return s and 'Unknown line "' .. (s or '') .. '"' end } } p['en-US'] = mw.clone(p['en-GB']) p['en-US']['towards'] = function(s) return s and 'toward ' .. s end p['en-AU'] = mw.clone(p['en-GB']) return p qjwzqzndyls4gd2zajp1iwpq4kxtlyj 746272 746271 2026-06-12T21:56:14Z Robertsky 51025 1 revision imported from [[:en:Module:Adjacent_stations/i18n]] 746271 Scribunto text/plain local p = {} p = { ['en-GB'] = { ['preceding'] = function(s) return s and 'Preceding ' .. s end, ['following'] = function(s) return s and 'Following ' .. s end, ['stop_noun'] = 'station', ['nonstop_past'] = function(s) return s and s .. ' did not stop here' end, ['nonstop_present'] = function(s) return s and s .. ' does not stop here' end, ['comma'] = function(s) return s and ', ' .. s end, ['or'] = function(s) return s and ' or ' .. s end, ['via-first'] = false, -- If the «via» text comes before termini, change to «true» ['via'] = function(s) return s and ' via&nbsp;' .. s end, ['comma-format'] = ',%s+', ['or-format'] = '%s+or%s+', ['via-format'] = '%s+via%s+(.+)$', -- first match is station name ['towards'] = function(s) return s and 'towards ' .. s end, ['through'] = function(s) return s and 'through to ' .. s end, ['reverse'] = 'Reverses direction', ['oneway'] = 'One-way operation', ['terminus'] = 'Terminus', ['transfer'] = function(s) return s and 'transfer at ' .. s end, ['error_duplicate'] = function(s) return s and 'Same row number used multiple times for ' .. s end, ['error_format'] = 'Station format table missing in data page', ['error_line'] = 'Lines table missing in data module', ['error_missing'] = function(s) return s and '"' .. (s or '') .. '" is missing from the data page' end, ['error_unknown'] = function(s) return s and 'Unknown line "' .. (s or '') .. '"' end } } p['en-US'] = mw.clone(p['en-GB']) p['en-US']['towards'] = function(s) return s and 'toward ' .. s end p['en-AU'] = mw.clone(p['en-GB']) return p qjwzqzndyls4gd2zajp1iwpq4kxtlyj Template:Native name 10 176069 746279 2022-01-02T15:28:59Z en>Trappist the monk 0 use [[Module:Native name]]; 746279 wikitext text/x-wiki <includeonly>{{#invoke:native name|native_name}}</includeonly><noinclude>{{Documentation}}</noinclude> gp4mircewcgfc8vfhzojwwumum7hr0j 746280 746279 2026-06-12T21:56:15Z Robertsky 51025 1 revision imported from [[:en:Template:Native_name]] 746279 wikitext text/x-wiki <includeonly>{{#invoke:native name|native_name}}</includeonly><noinclude>{{Documentation}}</noinclude> gp4mircewcgfc8vfhzojwwumum7hr0j Module:Native name 828 176070 746281 2024-10-10T17:06:54Z en>Trappist the monk 0 746281 Scribunto text/plain require('strict'); local getArgs = require ('Module:Arguments').getArgs; local lang_module = require ('Module:Lang'); local yes_no = require('Module:Yesno') local defined_values = { italic = {['no']='no', ['off']='no'}, -- values accepted by |italic= and |italics=; {{lang}} expects 'no' so 'off' must be translated paren = {['no']=true, ['off']=true, ['omit']=true}, -- values accepted by |paren= } local messages_t = { tag_required = 'an IETF language tag as parameter {{{1}}} is required', -- for {{native name}} name_required = 'a name as parameter {{{2}}} is required', tag_required_idx = 'an IETF language tag in |tag%s= is required', -- for {{native name}} when called from {{native name list}} name_required_idx = 'a name in |name%s= is required', empty_list = 'list is empty', -- for {{native name list}} positional = 'positional parameters not supported', br_list = '&lt;br /> lists not allowed', -- for {{native name checker}} list_markup = 'list markup expected for multiple names', malformed_param = 'parameter value is malformed', } local help_links_t = { ['native name'] = '[[Template:Native name|help]]', ['native name checker'] = '[[Template:Native name checker|help]]', ['native name list'] = '[[Template:Native name list|help]]', } local error_cats_t = { ['native name'] = '[[Category:Native name template errors]]', ['native name checker'] = '[[Category:Native name checker template errors]]', ['native name list'] = '[[Category:Native name list template errors]]', } --[[--------------------------< E R R O R _ M S G >------------------------------------------------------------ returns a formatted error message ]] local function error_msg (msg, template, index) local cat = ((0 == mw.title.getCurrentTitle().namespace) and error_cats_t[template]) or ''; if index then local message = string.format (msg, index); return string.format ('<span style="color:#d33">Error {{%s}}: %s (%s)</span>%s', template, message, help_links_t[template], cat) end return string.format ('<span style="color:#d33">Error {{%s}}: %s (%s)</span>%s', template, msg, help_links_t[template], cat) end --[=[-------------------------< _ N A T I V E _ N A M E >------------------------------------------------------ implements {{native name}}; entry point from a module <args_t> is a table of parameter name/value pairs. Parameters that are supported are: args_t[1] - IETF language tag (required) args_t[2] - the native name (required) args_t.italic - accepts string values 'no' or 'off'; {{lang}} expects 'no' so 'off' must be translated args_t.italics - alias of |italic= args_t.paren - accepts 'omit', 'off', or 'no' args_t.icon - alias of paren args_t.parensize - args_t.fontsize - deprecated alias of |parensize= args_t.nolink - any value inhibits wikilinking of language name args_t.suppress_empty_list_error - when set to 'yes', suppresses an 'empty' error message; mostly for use within another template this function calls these functions in Module:lang: _is_ietf_tag _lang _name_from_tag TODO: add support for romanization and transliteration? add support for postfix so that 'mis' can render something like this: {{native|name|mis|Chotilapacquen|parent=omit|postfix=&#32;([[Coahuiltecan languages|Coahuiltecan]])}} Chotilapacquen (Coahuiltecan) ]=] local function _native_name (args_t) local template = (args_t.template and args_t.template) or 'native name'; -- for error messaging; use 'native name list' when called from native_name_list(), etc if not (args_t[1] or args_t[2]) and yes_no (args_t.suppress_empty_list_error) then return ''; -- if empty list error is suppressed, return empty string elseif not args_t[1] then return error_msg ((args_t.index and messages_t.tag_required_idx) or messages_t.tag_required, template, args_t.index) elseif not args_t[2] then return error_msg ((args_t.index and messages_t.name_required_idx) or messages_t.name_required, template, args_t.index) end args_t.italic = args_t.italics or args_t.italic; -- plural form first in {{native name}} but singular form for {{lang}} args_t.italic = defined_values.italic[args_t.italic] or nil; -- translate assigned value args_t.italics = nil; -- so unset as unneeded args_t.paren = args_t.paren or args_t.icon; args_t.icon = nil; -- unset as unneeded args_t.parensize = args_t.parensize or args_t.fontsize or '100%'; args_t.fontsize = nil; -- unset as unneeded if not lang_module._is_ietf_tag (args_t[1]) then args_t[1] = lang_module._tag_from_name ({args_t[1]}); if args_t[1]:find ('Error') then return error_msg ((args_t.index and messages_t.tag_required_idx) or messages_t.tag_required, template, args_t.index) end end local out_t = {}; table.insert (out_t, lang_module._lang ({args_t[1], args_t[2], ['italic']=args_t.italic, ['template']=template})); if not defined_values.paren[args_t.paren] then table.insert (out_t, '&nbsp;'); table.insert (out_t, table.concat ({ '<span class="languageicon" style="font-size:', args_t.parensize, '; font-weight:normal">'})); if args_t.nolink then table.insert (out_t, table.concat ({'(', lang_module._name_from_tag ({args_t[1], ['template']=template}), ')'})); else if lang_module._is_ietf_tag (args_t[1]) then table.insert (out_t, table.concat ({'(', lang_module._name_from_tag ({args_t[1], ['link'] ='yes', ['template']=template}), ')'})); else table.insert (out_t, '(language?)'); -- TODO: any reason to keep this? end end table.insert (out_t, '</span>'); end return table.concat (out_t); end --[[--------------------------< N A T I V E _ N A M E >-------------------------------------------------------- implements {{native name}}; entry point from the template {{#invoke:native name|native_name|<tag>|<name>|italic=|paren=|parensize=|nolink=}} ]] local function native_name (frame) return _native_name (getArgs (frame)); end --[[--------------------------> _ N A T I V E _ N A M E _ L I S T >-------------------------------------------- implements {{native name}}; entry point from a module <args_t> is a table of parameter name/value pairs. Supports enumerated forms of the {{native name}} parameters: args_t.tagn - IETF language tag (|tag1= required) args_t.namen - the native name (|name1= required) args_t.italicn - accepts string values 'no' or 'off' args_t.italicsn - alias of |italicn= args_t.parenn - accepts 'omit', 'off', or 'no' args_t.iconn - alias of paren args_t.parensizen - args_t.fontsizen - deprecated alias of |parensizen= args_t.nolinkn - any value inhibits wikilinking of language name also supports: args_t.postfixn - wikitext to be appended to list item n (references other appropriate text) args_t.suppress_empty_list_error - when set to 'yes', suppresses an 'empty list' error message; mostly for use within another template ]] local function _native_name_list (args_t) if args_t[1] then return error_msg (messages_t.positional, 'native name list') end local unsorted_enumerators_t = {} -- unsorted k/v table of tagn and namen enumerators where k is the enumerator and v is always true for param, _ in pairs (args_t) do -- loop through all parameters local enumerator = mw.ustring.match (param, "^tag(%d+)$") -- is this a |tagn= parameter? extract enumerator if present if enumerator then -- if there is an enumerator unsorted_enumerators_t[tonumber(enumerator)] = true -- add enumerator to the table else local name_match = mw.ustring.match (param, "^name(%d+)$") -- is this a |tagn= parameter? extract enumerator if present if name_match then -- if there is an enumerator unsorted_enumerators_t[tonumber (name_match)] = true -- add enumerator to the table end end end local enumerators_t = {} -- will hold a sorted sequence of enumerators for n, _ in pairs (unsorted_enumerators_t) do -- loop through the k/v table of enumerators table.insert (enumerators_t, n) -- add the enumerator to the sequence end table.sort (enumerators_t) -- and ascending sort local list_t = {}; -- list of formatted native names goes here for _, n in ipairs (enumerators_t) do -- loop through the sorted enumerators table.insert (list_t, table.concat ({ _native_name ({ -- go render the native name args_t['tag'..n], args_t['name'..n], ['italic'] = args_t['italic'..n], ['italics'] = args_t['italics'..n], ['paren'] = args_t['paren'..n], ['icon'] = args_t['icon'..n], ['parensize'] = args_t['parensize'..n], ['fontsize'] = args_t['fontsize'..n], ['nolink'] = args_t['nolink'..n], ['template'] = 'native name list', -- for error messaging ['index'] = n, -- for error messaging }), args_t['postfix'..n] or '', })); end if 0 == #list_t then return (yes_no (args_t.suppress_empty_list_error) and '') or -- return empty string when error suppressed error_msg (messages_t.empty_list, 'native name list'); -- otherwise error elseif 1 == #list_t then return list_t[1]; -- return the very short list; TODO: add error? else return require ('Module:List').unbulleted (list_t); -- use unbulleted list from module end end --[[--------------------------< N A T I V E _ N A M E _ L I S T >---------------------------------------------- implements {{native name list}}; entry point from the template {{#invoke:native name list|native_name_list|tag1=<tag>|name1=<name>|italic1=|paren1=|parensize1=|nolink1=}} ]] local function native_name_list (frame) return _native_name_list (getArgs (frame)); end --[[--------------------------< _ N A T I V E _ N A M E _ C H E C K E R >-------------------------------------- entry point from a module implements {{native name checker}} for use inside infoboxen: |dataxx = {{native name checker|{{{native_name|}}}}} inspects rendered content of {{{native_name}}}: expects: at least one lang="<valid IETF tag>" html attribute; tag must begin with 2 or three letters followed by a hyphen or double quote character: lang="zh-Hant" or lang="nav" or lang="oj" emits error message when 2 or more lang="<valid IETF tag>" html attribute but list markup <li> tag not found emits error message if any form of '<br />' tag is found per MOS:NOBREAK returns: nothing when |native_name= is omitted or empty assigned value when no error error message on error ]] local function _native_name_checker (args_t) local value = args_t[1]; if not value then -- if |native_name= is omitted or empty return; -- return nothing end local _, count = value:gsub ('lang="%a%a%a?[%-"]%a*', '%1'); if 0 == count then return table.concat ({value, error_msg (messages_t.malformed_param, 'native name checker')}, ' '); -- no {{lang}} or {{native_name}} template end if 1 < count then if not value:find ('<div class="plainlist *" *>') or not value:find ('</div>$') then -- must be wrapped in 'plainlist' div return table.concat ({value, error_msg (messages_t.list_markup, 'native name checker')}, ' '); end end if value:find ('< */? *[Bb][Rr] */? *>') then -- look for something that vaguely resembles a <br /> tag return table.concat ({value, error_msg (messages_t.br_list, 'native name checker')}, ' '); end return value; -- no failed tests, return the value as is end --[[--------------------------< N A T I V E _ N A M E _ C H E C K E R >-------------------------------------- entry point from a module implements {{native name checker}} ]] local function native_name_checker (frame) return _native_name_checker (getArgs (frame)); end --[[--------------------------< E X P O R T S >---------------------------------------------------------------- ]] return { native_name = native_name, -- template interface native_name_list = native_name_list, native_name_checker = native_name_checker, _native_name = _native_name, -- other module interface _native_name_list = _native_name_list, _native_name_checker = _native_name_checker, } j0tmvjm5o3ypbjncduux70wkkuc8sc2 746282 746281 2026-06-12T21:56:15Z Robertsky 51025 1 revision imported from [[:en:Module:Native_name]] 746281 Scribunto text/plain require('strict'); local getArgs = require ('Module:Arguments').getArgs; local lang_module = require ('Module:Lang'); local yes_no = require('Module:Yesno') local defined_values = { italic = {['no']='no', ['off']='no'}, -- values accepted by |italic= and |italics=; {{lang}} expects 'no' so 'off' must be translated paren = {['no']=true, ['off']=true, ['omit']=true}, -- values accepted by |paren= } local messages_t = { tag_required = 'an IETF language tag as parameter {{{1}}} is required', -- for {{native name}} name_required = 'a name as parameter {{{2}}} is required', tag_required_idx = 'an IETF language tag in |tag%s= is required', -- for {{native name}} when called from {{native name list}} name_required_idx = 'a name in |name%s= is required', empty_list = 'list is empty', -- for {{native name list}} positional = 'positional parameters not supported', br_list = '&lt;br /> lists not allowed', -- for {{native name checker}} list_markup = 'list markup expected for multiple names', malformed_param = 'parameter value is malformed', } local help_links_t = { ['native name'] = '[[Template:Native name|help]]', ['native name checker'] = '[[Template:Native name checker|help]]', ['native name list'] = '[[Template:Native name list|help]]', } local error_cats_t = { ['native name'] = '[[Category:Native name template errors]]', ['native name checker'] = '[[Category:Native name checker template errors]]', ['native name list'] = '[[Category:Native name list template errors]]', } --[[--------------------------< E R R O R _ M S G >------------------------------------------------------------ returns a formatted error message ]] local function error_msg (msg, template, index) local cat = ((0 == mw.title.getCurrentTitle().namespace) and error_cats_t[template]) or ''; if index then local message = string.format (msg, index); return string.format ('<span style="color:#d33">Error {{%s}}: %s (%s)</span>%s', template, message, help_links_t[template], cat) end return string.format ('<span style="color:#d33">Error {{%s}}: %s (%s)</span>%s', template, msg, help_links_t[template], cat) end --[=[-------------------------< _ N A T I V E _ N A M E >------------------------------------------------------ implements {{native name}}; entry point from a module <args_t> is a table of parameter name/value pairs. Parameters that are supported are: args_t[1] - IETF language tag (required) args_t[2] - the native name (required) args_t.italic - accepts string values 'no' or 'off'; {{lang}} expects 'no' so 'off' must be translated args_t.italics - alias of |italic= args_t.paren - accepts 'omit', 'off', or 'no' args_t.icon - alias of paren args_t.parensize - args_t.fontsize - deprecated alias of |parensize= args_t.nolink - any value inhibits wikilinking of language name args_t.suppress_empty_list_error - when set to 'yes', suppresses an 'empty' error message; mostly for use within another template this function calls these functions in Module:lang: _is_ietf_tag _lang _name_from_tag TODO: add support for romanization and transliteration? add support for postfix so that 'mis' can render something like this: {{native|name|mis|Chotilapacquen|parent=omit|postfix=&#32;([[Coahuiltecan languages|Coahuiltecan]])}} Chotilapacquen (Coahuiltecan) ]=] local function _native_name (args_t) local template = (args_t.template and args_t.template) or 'native name'; -- for error messaging; use 'native name list' when called from native_name_list(), etc if not (args_t[1] or args_t[2]) and yes_no (args_t.suppress_empty_list_error) then return ''; -- if empty list error is suppressed, return empty string elseif not args_t[1] then return error_msg ((args_t.index and messages_t.tag_required_idx) or messages_t.tag_required, template, args_t.index) elseif not args_t[2] then return error_msg ((args_t.index and messages_t.name_required_idx) or messages_t.name_required, template, args_t.index) end args_t.italic = args_t.italics or args_t.italic; -- plural form first in {{native name}} but singular form for {{lang}} args_t.italic = defined_values.italic[args_t.italic] or nil; -- translate assigned value args_t.italics = nil; -- so unset as unneeded args_t.paren = args_t.paren or args_t.icon; args_t.icon = nil; -- unset as unneeded args_t.parensize = args_t.parensize or args_t.fontsize or '100%'; args_t.fontsize = nil; -- unset as unneeded if not lang_module._is_ietf_tag (args_t[1]) then args_t[1] = lang_module._tag_from_name ({args_t[1]}); if args_t[1]:find ('Error') then return error_msg ((args_t.index and messages_t.tag_required_idx) or messages_t.tag_required, template, args_t.index) end end local out_t = {}; table.insert (out_t, lang_module._lang ({args_t[1], args_t[2], ['italic']=args_t.italic, ['template']=template})); if not defined_values.paren[args_t.paren] then table.insert (out_t, '&nbsp;'); table.insert (out_t, table.concat ({ '<span class="languageicon" style="font-size:', args_t.parensize, '; font-weight:normal">'})); if args_t.nolink then table.insert (out_t, table.concat ({'(', lang_module._name_from_tag ({args_t[1], ['template']=template}), ')'})); else if lang_module._is_ietf_tag (args_t[1]) then table.insert (out_t, table.concat ({'(', lang_module._name_from_tag ({args_t[1], ['link'] ='yes', ['template']=template}), ')'})); else table.insert (out_t, '(language?)'); -- TODO: any reason to keep this? end end table.insert (out_t, '</span>'); end return table.concat (out_t); end --[[--------------------------< N A T I V E _ N A M E >-------------------------------------------------------- implements {{native name}}; entry point from the template {{#invoke:native name|native_name|<tag>|<name>|italic=|paren=|parensize=|nolink=}} ]] local function native_name (frame) return _native_name (getArgs (frame)); end --[[--------------------------> _ N A T I V E _ N A M E _ L I S T >-------------------------------------------- implements {{native name}}; entry point from a module <args_t> is a table of parameter name/value pairs. Supports enumerated forms of the {{native name}} parameters: args_t.tagn - IETF language tag (|tag1= required) args_t.namen - the native name (|name1= required) args_t.italicn - accepts string values 'no' or 'off' args_t.italicsn - alias of |italicn= args_t.parenn - accepts 'omit', 'off', or 'no' args_t.iconn - alias of paren args_t.parensizen - args_t.fontsizen - deprecated alias of |parensizen= args_t.nolinkn - any value inhibits wikilinking of language name also supports: args_t.postfixn - wikitext to be appended to list item n (references other appropriate text) args_t.suppress_empty_list_error - when set to 'yes', suppresses an 'empty list' error message; mostly for use within another template ]] local function _native_name_list (args_t) if args_t[1] then return error_msg (messages_t.positional, 'native name list') end local unsorted_enumerators_t = {} -- unsorted k/v table of tagn and namen enumerators where k is the enumerator and v is always true for param, _ in pairs (args_t) do -- loop through all parameters local enumerator = mw.ustring.match (param, "^tag(%d+)$") -- is this a |tagn= parameter? extract enumerator if present if enumerator then -- if there is an enumerator unsorted_enumerators_t[tonumber(enumerator)] = true -- add enumerator to the table else local name_match = mw.ustring.match (param, "^name(%d+)$") -- is this a |tagn= parameter? extract enumerator if present if name_match then -- if there is an enumerator unsorted_enumerators_t[tonumber (name_match)] = true -- add enumerator to the table end end end local enumerators_t = {} -- will hold a sorted sequence of enumerators for n, _ in pairs (unsorted_enumerators_t) do -- loop through the k/v table of enumerators table.insert (enumerators_t, n) -- add the enumerator to the sequence end table.sort (enumerators_t) -- and ascending sort local list_t = {}; -- list of formatted native names goes here for _, n in ipairs (enumerators_t) do -- loop through the sorted enumerators table.insert (list_t, table.concat ({ _native_name ({ -- go render the native name args_t['tag'..n], args_t['name'..n], ['italic'] = args_t['italic'..n], ['italics'] = args_t['italics'..n], ['paren'] = args_t['paren'..n], ['icon'] = args_t['icon'..n], ['parensize'] = args_t['parensize'..n], ['fontsize'] = args_t['fontsize'..n], ['nolink'] = args_t['nolink'..n], ['template'] = 'native name list', -- for error messaging ['index'] = n, -- for error messaging }), args_t['postfix'..n] or '', })); end if 0 == #list_t then return (yes_no (args_t.suppress_empty_list_error) and '') or -- return empty string when error suppressed error_msg (messages_t.empty_list, 'native name list'); -- otherwise error elseif 1 == #list_t then return list_t[1]; -- return the very short list; TODO: add error? else return require ('Module:List').unbulleted (list_t); -- use unbulleted list from module end end --[[--------------------------< N A T I V E _ N A M E _ L I S T >---------------------------------------------- implements {{native name list}}; entry point from the template {{#invoke:native name list|native_name_list|tag1=<tag>|name1=<name>|italic1=|paren1=|parensize1=|nolink1=}} ]] local function native_name_list (frame) return _native_name_list (getArgs (frame)); end --[[--------------------------< _ N A T I V E _ N A M E _ C H E C K E R >-------------------------------------- entry point from a module implements {{native name checker}} for use inside infoboxen: |dataxx = {{native name checker|{{{native_name|}}}}} inspects rendered content of {{{native_name}}}: expects: at least one lang="<valid IETF tag>" html attribute; tag must begin with 2 or three letters followed by a hyphen or double quote character: lang="zh-Hant" or lang="nav" or lang="oj" emits error message when 2 or more lang="<valid IETF tag>" html attribute but list markup <li> tag not found emits error message if any form of '<br />' tag is found per MOS:NOBREAK returns: nothing when |native_name= is omitted or empty assigned value when no error error message on error ]] local function _native_name_checker (args_t) local value = args_t[1]; if not value then -- if |native_name= is omitted or empty return; -- return nothing end local _, count = value:gsub ('lang="%a%a%a?[%-"]%a*', '%1'); if 0 == count then return table.concat ({value, error_msg (messages_t.malformed_param, 'native name checker')}, ' '); -- no {{lang}} or {{native_name}} template end if 1 < count then if not value:find ('<div class="plainlist *" *>') or not value:find ('</div>$') then -- must be wrapped in 'plainlist' div return table.concat ({value, error_msg (messages_t.list_markup, 'native name checker')}, ' '); end end if value:find ('< */? *[Bb][Rr] */? *>') then -- look for something that vaguely resembles a <br /> tag return table.concat ({value, error_msg (messages_t.br_list, 'native name checker')}, ' '); end return value; -- no failed tests, return the value as is end --[[--------------------------< N A T I V E _ N A M E _ C H E C K E R >-------------------------------------- entry point from a module implements {{native name checker}} ]] local function native_name_checker (frame) return _native_name_checker (getArgs (frame)); end --[[--------------------------< E X P O R T S >---------------------------------------------------------------- ]] return { native_name = native_name, -- template interface native_name_list = native_name_list, native_name_checker = native_name_checker, _native_name = _native_name, -- other module interface _native_name_list = _native_name_list, _native_name_checker = _native_name_checker, } j0tmvjm5o3ypbjncduux70wkkuc8sc2 Template:Ref label 10 176071 746287 2024-07-04T18:52:25Z en>Neveselbert 0 tested; prevent bold 746287 wikitext text/x-wiki <templatestyles src="Citation/styles.css"/><{{#ifeq:yes|{{yesno|def=|{{{sub|}}}}}|sub|sup}} class="citation nobold" {{#ifeq:{{{noid}}}|noid||id="ref_{{{1}}}{{{3|}}}"}}>[[#endnote_{{{1}}}{{{3|}}}|[{{{2}}}]]]</{{#ifeq:yes|{{yesno|def=|{{{sub|}}}}}|sub|sup}}><noinclude> {{Documentation|Template:Ref/doc}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> 93h66gk33fkstvx6eqau6pzjw75dxts 746288 746287 2026-06-12T21:56:16Z Robertsky 51025 1 revision imported from [[:en:Template:Ref_label]] 746287 wikitext text/x-wiki <templatestyles src="Citation/styles.css"/><{{#ifeq:yes|{{yesno|def=|{{{sub|}}}}}|sub|sup}} class="citation nobold" {{#ifeq:{{{noid}}}|noid||id="ref_{{{1}}}{{{3|}}}"}}>[[#endnote_{{{1}}}{{{3|}}}|[{{{2}}}]]]</{{#ifeq:yes|{{yesno|def=|{{{sub|}}}}}|sub|sup}}><noinclude> {{Documentation|Template:Ref/doc}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> 93h66gk33fkstvx6eqau6pzjw75dxts Template:Country abbreviation 10 176072 746293 2018-09-11T13:37:34Z en>MSGJ 0 redirecting, per request on talk 746293 wikitext text/x-wiki #REDIRECT [[Template:ISO 3166 code]] qgp8rerf8z38t0ur8nb4bkbquqwzgph 746294 746293 2026-06-12T21:56:17Z Robertsky 51025 1 revision imported from [[:en:Template:Country_abbreviation]] 746293 wikitext text/x-wiki #REDIRECT [[Template:ISO 3166 code]] qgp8rerf8z38t0ur8nb4bkbquqwzgph Template:MultiReplace 10 176073 746295 2022-11-14T14:04:57Z en>Paine Ellsworth 0 close noinclude tag 746295 wikitext text/x-wiki {{safesubst:<noinclude/>#invoke:MultiReplace|main}}<noinclude> {{doc}} </noinclude> mnf7xe1hgdpjc0b7wx3qoppxpy2qzhe 746296 746295 2026-06-12T21:56:17Z Robertsky 51025 1 revision imported from [[:en:Template:MultiReplace]] 746295 wikitext text/x-wiki {{safesubst:<noinclude/>#invoke:MultiReplace|main}}<noinclude> {{doc}} </noinclude> mnf7xe1hgdpjc0b7wx3qoppxpy2qzhe Template:NRHP Focus 10 176074 746299 2025-05-14T19:03:49Z en>Trappist the monk 0 /* top */ Replaced {{#invoke:Cite xxxx||...}} module calls with [[Module:Cite]] calls: {{#invoke:Cite|xxxx|...}} (1×) 746299 wikitext text/x-wiki {{#if:{{{url|}}}|https://npgallery.nps.gov/AssetDetail/NRIS/{{{refnum|{{{1}}}}}}|{{#invoke:cite|web|author=Staff|url=https://npgallery.nps.gov/AssetDetail/NRIS/{{{refnum|{{{1}}}}}} |title=NPS Focus: {{#if:{{{name|}}}|{{{name}}} (#{{{refnum|{{{1}}}}}})|{{{refnum|{{{1}}}}}}}}|publisher=[[National Park Service]]|work=National Register of Historic Places|access-date={{{access-date|{{{accessdate|}}}}}}}}}}<noinclude> {{doc}} </noinclude> ffaun8pcpmhergadhwlfupj7fo6kz63 746300 746299 2026-06-12T21:56:18Z Robertsky 51025 1 revision imported from [[:en:Template:NRHP_Focus]] 746299 wikitext text/x-wiki {{#if:{{{url|}}}|https://npgallery.nps.gov/AssetDetail/NRIS/{{{refnum|{{{1}}}}}}|{{#invoke:cite|web|author=Staff|url=https://npgallery.nps.gov/AssetDetail/NRIS/{{{refnum|{{{1}}}}}} |title=NPS Focus: {{#if:{{{name|}}}|{{{name}}} (#{{{refnum|{{{1}}}}}})|{{{refnum|{{{1}}}}}}}}|publisher=[[National Park Service]]|work=National Register of Historic Places|access-date={{{access-date|{{{accessdate|}}}}}}}}}}<noinclude> {{doc}} </noinclude> ffaun8pcpmhergadhwlfupj7fo6kz63 Template:Infobox NRHP/locmapin2region 10 176075 746301 2025-08-14T14:39:03Z en>Ahecht 0 Add additional major cities (unambiguous ones from top 25 of [[List of United States cities by population]] and from https://engagingplaces.net/2015/12/09/new-york-tops-the-national-register-of-historic-places/). Move missouri above kansas to avoid flagging "kansas city missouri" as "kansas". 746301 wikitext text/x-wiki {{MultiReplace|plain=false|{{MultiReplace|plain=false|{{MultiReplace|plain=false|>{{{1|}}}|(#)|>}}|>USA%s*|>|>United States%s*|>}}<!-- -->|^.*>(Alabama).*$|%1 |^.*>(Alaska).*$|%1 |^.*>(Arizona).*$|%1 |^.*>(Arkansas).*$|%1 |^.*>(California).*$|%1 |^.*>(Colorado).*$|%1 |^.*>(Connecticut).*$|%1 |^.*>(Delaware).*$|%1 |^.*>(Florida).*$|%1 |^.*>(Georgia).*$|%1 |^.*>(Hawaii).*$|%1 |^.*>(Idaho).*$|%1 |^.*>(Illinois).*$|%1 |^.*>(Indiana).*$|%1 |^.*>(Iowa).*$|%1 |^.*>(Missouri).*$|%1 |^.*>(Kansas).*$|%1 |^.*>(Kentucky).*$|%1 |^.*>(Louisiana).*$|%1 |^.*>(Maine).*$|%1 |^.*>(Maryland).*$|%1 |^.*>(Massachusetts).*$|%1 |^.*>(Michigan).*$|%1 |^.*>(Minnesota).*$|%1 |^.*>(Mississippi).*$|%1 |^.*>(Montana).*$|%1 |^.*>(Nebraska).*$|%1 |^.*>(Nevada).*$|%1 |^.*>(New Hampshire).*$|%1 |^.*>(New Jersey).*$|%1 |^.*>(New Mexico).*$|%1 |^.*>(New York).*$|%1 |^.*>(North Carolina).*$|%1 |^.*>(North Dakota).*$|%1 |^.*>(Ohio).*$|%1 |^.*>(Oklahoma).*$|%1 |^.*>(Oregon).*$|%1 |^.*>(Pennsylvania).*$|%1 |^.*>(Rhode Island).*$|%1 |^.*>(South Carolina).*$|%1 |^.*>(South Dakota).*$|%1 |^.*>(Tennessee).*$|%1 |^.*>(Texas).*$|%1 |^.*>(Utah).*$|%1 |^.*>(Vermont).*$|%1 |^.*>(Virginia).*$|%1 |^.*>(District of Columbia).*$|%1 |^.*>(Washington[, ]*D[%.]*C[%.]*).*$|%1 |^.*>(West Virginia).*$|%1 |^.*>(Wisconsin).*$|%1 |^.*>(Wyoming).*$|%1 |^.*>(American Samoa).*$|%1 |^.*>(Guam).*$|%1 |^.*>(Northern Mariana Islands).*$|%1 |^.*>(Puerto Rico).*$|%1 |^.*>(Minor Outlying Islands).*$|%1 |^.*>(Virgin Islands).*$|%1 |^.*>(Washington).*$|%1 |^.*>Los Angeles.*$|California |^.*>Chicago.*$|Illinois |^.*>Houston.*$|Texas |^.*>Phoenix.*$|Arizona |^.*>Philadelphia.*$|Pennsylvania |^.*>San Antonio.*$|Texas |^.*>San Diego.*$|California |^.*>Dallas.*$|Texas |^.*>Fort Worth.*$|Texas |^.*>San Jose.*$|California |^.*>Indianapolis.*$|Indiana |^.*>San Francisco.*$|California |^.*>Seattle.*$|Washington |^.*>El Paso.*$|Texas |^.*>Las Vegas.*$|Nevada |^.*>Boston.*$|Massachusetts |^.*>Louisville.*$|Kentucky |^.*>St[%.]* Louis.*$|Missouri |^.*>Denver.*$|Colorado |^.*>Worcester.*$|Massachusetts |^.*>Baltimore.*$|Maryland |^.*>Cincinnati.*$|Ohio |^.*>Davenport.*$|Iowa |^.*>Salt Lake City.*$|Utah |^.*>Little Rock.*$|Arkansas |^.*>Atlanta.*$|Georgia |^>|}}<noinclude>{{documentation|content= == Examples == * <code><nowiki>{{Infobox NRHP/locmapin2region|USA Oregon Portland}}</nowiki></code> &rarr; {{Infobox NRHP/locmapin2region|USA Oregon Portland}} * <code><nowiki>{{Infobox NRHP/locmapin2region|United States San Francisco#USA California#USA}}</nowiki></code> &rarr; {{Infobox NRHP/locmapin2region|United States San Francisco#USA California#USA}} * <code><nowiki>{{Infobox NRHP/locmapin2region|USA Minneapolis–Saint Paul#USA Minnesota#USA}}</nowiki></code> &rarr; {{Infobox NRHP/locmapin2region|USA Minneapolis–Saint Paul#USA Minnesota#USA}} * <code><nowiki>{{Infobox NRHP/locmapin2region|United States Manhattan#New York}}</nowiki></code> &rarr; {{Infobox NRHP/locmapin2region|United States Manhattan#New York}} * <code><nowiki>{{Infobox NRHP/locmapin2region|USA Alaska Juneau#USA Alaska}}</nowiki></code> &rarr; {{Infobox NRHP/locmapin2region|USA Alaska Juneau#USA Alaska}} * <code><nowiki>{{Infobox NRHP/locmapin2region|United States Washington, D.C.#USA}}</nowiki></code> &rarr; {{Infobox NRHP/locmapin2region|United States Washington, D.C.#USA}} }}</noinclude> kvx3wt99t4wwwvhmviqkgj4lsgpjxcs 746302 746301 2026-06-12T21:56:18Z Robertsky 51025 1 revision imported from [[:en:Template:Infobox_NRHP/locmapin2region]] 746301 wikitext text/x-wiki {{MultiReplace|plain=false|{{MultiReplace|plain=false|{{MultiReplace|plain=false|>{{{1|}}}|(#)|>}}|>USA%s*|>|>United States%s*|>}}<!-- -->|^.*>(Alabama).*$|%1 |^.*>(Alaska).*$|%1 |^.*>(Arizona).*$|%1 |^.*>(Arkansas).*$|%1 |^.*>(California).*$|%1 |^.*>(Colorado).*$|%1 |^.*>(Connecticut).*$|%1 |^.*>(Delaware).*$|%1 |^.*>(Florida).*$|%1 |^.*>(Georgia).*$|%1 |^.*>(Hawaii).*$|%1 |^.*>(Idaho).*$|%1 |^.*>(Illinois).*$|%1 |^.*>(Indiana).*$|%1 |^.*>(Iowa).*$|%1 |^.*>(Missouri).*$|%1 |^.*>(Kansas).*$|%1 |^.*>(Kentucky).*$|%1 |^.*>(Louisiana).*$|%1 |^.*>(Maine).*$|%1 |^.*>(Maryland).*$|%1 |^.*>(Massachusetts).*$|%1 |^.*>(Michigan).*$|%1 |^.*>(Minnesota).*$|%1 |^.*>(Mississippi).*$|%1 |^.*>(Montana).*$|%1 |^.*>(Nebraska).*$|%1 |^.*>(Nevada).*$|%1 |^.*>(New Hampshire).*$|%1 |^.*>(New Jersey).*$|%1 |^.*>(New Mexico).*$|%1 |^.*>(New York).*$|%1 |^.*>(North Carolina).*$|%1 |^.*>(North Dakota).*$|%1 |^.*>(Ohio).*$|%1 |^.*>(Oklahoma).*$|%1 |^.*>(Oregon).*$|%1 |^.*>(Pennsylvania).*$|%1 |^.*>(Rhode Island).*$|%1 |^.*>(South Carolina).*$|%1 |^.*>(South Dakota).*$|%1 |^.*>(Tennessee).*$|%1 |^.*>(Texas).*$|%1 |^.*>(Utah).*$|%1 |^.*>(Vermont).*$|%1 |^.*>(Virginia).*$|%1 |^.*>(District of Columbia).*$|%1 |^.*>(Washington[, ]*D[%.]*C[%.]*).*$|%1 |^.*>(West Virginia).*$|%1 |^.*>(Wisconsin).*$|%1 |^.*>(Wyoming).*$|%1 |^.*>(American Samoa).*$|%1 |^.*>(Guam).*$|%1 |^.*>(Northern Mariana Islands).*$|%1 |^.*>(Puerto Rico).*$|%1 |^.*>(Minor Outlying Islands).*$|%1 |^.*>(Virgin Islands).*$|%1 |^.*>(Washington).*$|%1 |^.*>Los Angeles.*$|California |^.*>Chicago.*$|Illinois |^.*>Houston.*$|Texas |^.*>Phoenix.*$|Arizona |^.*>Philadelphia.*$|Pennsylvania |^.*>San Antonio.*$|Texas |^.*>San Diego.*$|California |^.*>Dallas.*$|Texas |^.*>Fort Worth.*$|Texas |^.*>San Jose.*$|California |^.*>Indianapolis.*$|Indiana |^.*>San Francisco.*$|California |^.*>Seattle.*$|Washington |^.*>El Paso.*$|Texas |^.*>Las Vegas.*$|Nevada |^.*>Boston.*$|Massachusetts |^.*>Louisville.*$|Kentucky |^.*>St[%.]* Louis.*$|Missouri |^.*>Denver.*$|Colorado |^.*>Worcester.*$|Massachusetts |^.*>Baltimore.*$|Maryland |^.*>Cincinnati.*$|Ohio |^.*>Davenport.*$|Iowa |^.*>Salt Lake City.*$|Utah |^.*>Little Rock.*$|Arkansas |^.*>Atlanta.*$|Georgia |^>|}}<noinclude>{{documentation|content= == Examples == * <code><nowiki>{{Infobox NRHP/locmapin2region|USA Oregon Portland}}</nowiki></code> &rarr; {{Infobox NRHP/locmapin2region|USA Oregon Portland}} * <code><nowiki>{{Infobox NRHP/locmapin2region|United States San Francisco#USA California#USA}}</nowiki></code> &rarr; {{Infobox NRHP/locmapin2region|United States San Francisco#USA California#USA}} * <code><nowiki>{{Infobox NRHP/locmapin2region|USA Minneapolis–Saint Paul#USA Minnesota#USA}}</nowiki></code> &rarr; {{Infobox NRHP/locmapin2region|USA Minneapolis–Saint Paul#USA Minnesota#USA}} * <code><nowiki>{{Infobox NRHP/locmapin2region|United States Manhattan#New York}}</nowiki></code> &rarr; {{Infobox NRHP/locmapin2region|United States Manhattan#New York}} * <code><nowiki>{{Infobox NRHP/locmapin2region|USA Alaska Juneau#USA Alaska}}</nowiki></code> &rarr; {{Infobox NRHP/locmapin2region|USA Alaska Juneau#USA Alaska}} * <code><nowiki>{{Infobox NRHP/locmapin2region|United States Washington, D.C.#USA}}</nowiki></code> &rarr; {{Infobox NRHP/locmapin2region|United States Washington, D.C.#USA}} }}</noinclude> kvx3wt99t4wwwvhmviqkgj4lsgpjxcs Module:ISO 3166/data/US 828 176076 746303 2025-10-28T19:55:07Z en>Ahecht 0 include okina in Hawaiʻi (which should be represented by a turned comma, not an apostrophe) 746303 Scribunto text/plain return { lang = "en", ["AK"] = {name="Alaska"}, ["AL"] = {name="Alabama"}, ["AR"] = {name="Arkansas"}, ["AZ"] = {name="Arizona"}, ["CA"] = {name="California"}, ["CO"] = {name="Colorado"}, ["CT"] = {name="Connecticut"}, ["DE"] = {name="Delaware"}, ["FL"] = {name="Florida"}, ["GA"] = {name="Georgia"}, ["HI"] = {name="Hawaii", altnames={"Hawaiʻi"}}, ["IA"] = {name="Iowa"}, ["ID"] = {name="Idaho"}, ["IL"] = {name="Illinois"}, ["IN"] = {name="Indiana"}, ["KS"] = {name="Kansas"}, ["KY"] = {name="Kentucky"}, ["LA"] = {name="Louisiana"}, ["MA"] = {name="Massachusetts"}, ["MD"] = {name="Maryland"}, ["ME"] = {name="Maine"}, ["MI"] = {name="Michigan"}, ["MN"] = {name="Minnesota"}, ["MO"] = {name="Missouri"}, ["MS"] = {name="Mississippi"}, ["MT"] = {name="Montana"}, ["NC"] = {name="North Carolina"}, ["ND"] = {name="North Dakota"}, ["NE"] = {name="Nebraska"}, ["NH"] = {name="New Hampshire"}, ["NJ"] = {name="New Jersey"}, ["NM"] = {name="New Mexico"}, ["NV"] = {name="Nevada"}, ["NY"] = {name="New York",altnames={"New York State", "NYS"}}, ["OH"] = {name="Ohio"}, ["OK"] = {name="Oklahoma"}, ["OR"] = {name="Oregon"}, ["PA"] = {name="Pennsylvania"}, ["RI"] = {name="Rhode Island"}, ["SC"] = {name="South Carolina"}, ["SD"] = {name="South Dakota"}, ["TN"] = {name="Tennessee"}, ["TX"] = {name="Texas"}, ["UT"] = {name="Utah"}, ["VA"] = {name="Virginia"}, ["VT"] = {name="Vermont"}, ["WA"] = {name="Washington", altnames={"Washington State"}}, ["WI"] = {name="Wisconsin"}, ["WV"] = {name="West Virginia"}, ["WY"] = {name="Wyoming"}, ["DC"] = {name="District of Columbia",altnames={"Washington, D.C."}}, ["AS"] = {name="American Samoa"}, ["GU"] = {name="Guam"}, ["MP"] = {name="Northern Mariana Islands"}, ["PR"] = {name="Puerto Rico"}, ["UM"] = {name="United States Minor Outlying Islands"}, ["VI"] = {name="United States Virgin Islands",isoname="Virgin Islands, U.S.",altnames={"U.S. Virgin Islands","Virgin Islands"}} } m8l57cr1ughp0mhfofh43fuerr01hvt 746304 746303 2026-06-12T21:56:18Z Robertsky 51025 1 revision imported from [[:en:Module:ISO_3166/data/US]] 746303 Scribunto text/plain return { lang = "en", ["AK"] = {name="Alaska"}, ["AL"] = {name="Alabama"}, ["AR"] = {name="Arkansas"}, ["AZ"] = {name="Arizona"}, ["CA"] = {name="California"}, ["CO"] = {name="Colorado"}, ["CT"] = {name="Connecticut"}, ["DE"] = {name="Delaware"}, ["FL"] = {name="Florida"}, ["GA"] = {name="Georgia"}, ["HI"] = {name="Hawaii", altnames={"Hawaiʻi"}}, ["IA"] = {name="Iowa"}, ["ID"] = {name="Idaho"}, ["IL"] = {name="Illinois"}, ["IN"] = {name="Indiana"}, ["KS"] = {name="Kansas"}, ["KY"] = {name="Kentucky"}, ["LA"] = {name="Louisiana"}, ["MA"] = {name="Massachusetts"}, ["MD"] = {name="Maryland"}, ["ME"] = {name="Maine"}, ["MI"] = {name="Michigan"}, ["MN"] = {name="Minnesota"}, ["MO"] = {name="Missouri"}, ["MS"] = {name="Mississippi"}, ["MT"] = {name="Montana"}, ["NC"] = {name="North Carolina"}, ["ND"] = {name="North Dakota"}, ["NE"] = {name="Nebraska"}, ["NH"] = {name="New Hampshire"}, ["NJ"] = {name="New Jersey"}, ["NM"] = {name="New Mexico"}, ["NV"] = {name="Nevada"}, ["NY"] = {name="New York",altnames={"New York State", "NYS"}}, ["OH"] = {name="Ohio"}, ["OK"] = {name="Oklahoma"}, ["OR"] = {name="Oregon"}, ["PA"] = {name="Pennsylvania"}, ["RI"] = {name="Rhode Island"}, ["SC"] = {name="South Carolina"}, ["SD"] = {name="South Dakota"}, ["TN"] = {name="Tennessee"}, ["TX"] = {name="Texas"}, ["UT"] = {name="Utah"}, ["VA"] = {name="Virginia"}, ["VT"] = {name="Vermont"}, ["WA"] = {name="Washington", altnames={"Washington State"}}, ["WI"] = {name="Wisconsin"}, ["WV"] = {name="West Virginia"}, ["WY"] = {name="Wyoming"}, ["DC"] = {name="District of Columbia",altnames={"Washington, D.C."}}, ["AS"] = {name="American Samoa"}, ["GU"] = {name="Guam"}, ["MP"] = {name="Northern Mariana Islands"}, ["PR"] = {name="Puerto Rico"}, ["UM"] = {name="United States Minor Outlying Islands"}, ["VI"] = {name="United States Virgin Islands",isoname="Virgin Islands, U.S.",altnames={"U.S. Virgin Islands","Virgin Islands"}} } m8l57cr1ughp0mhfofh43fuerr01hvt Module:Location map/data/Earth 828 176077 746305 2019-11-17T21:50:23Z en>Sumanuil 0 Blast it. 746305 Scribunto text/plain return { name = 'Earth', top = 90, bottom = -90, left = -180, right = 180, image = 'World location map (equirectangular 180).svg', image1='World location map (equirectangular 180).svg'} 1gh5izdoszwn7ruavo5dysgd43evgoy 746306 746305 2026-06-12T21:56:18Z Robertsky 51025 1 revision imported from [[:en:Module:Location_map/data/Earth]] 746305 Scribunto text/plain return { name = 'Earth', top = 90, bottom = -90, left = -180, right = 180, image = 'World location map (equirectangular 180).svg', image1='World location map (equirectangular 180).svg'} 1gh5izdoszwn7ruavo5dysgd43evgoy Template:Csv 10 176078 746307 2026-04-18T03:12:59Z en>Pppery 0 Changed protection settings for "[[Template:Csv]]" ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 746307 wikitext text/x-wiki #redirect [[Template:Comma separated entries]] 0kulkok9s0oxxzox1fal3zd3un10e86 746308 746307 2026-06-12T21:56:18Z Robertsky 51025 1 revision imported from [[:en:Template:Csv]] 746307 wikitext text/x-wiki #redirect [[Template:Comma separated entries]] 0kulkok9s0oxxzox1fal3zd3un10e86 Template:Rail icon 10 176079 746309 2025-03-09T04:05:22Z en>Pppery 0 Changed protection settings for "[[Template:Rail icon]]": [[WP:High-risk templates|High-risk template or module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 746309 wikitext text/x-wiki <includeonly>{{#invoke:Adjacent stations|icon}}</includeonly><noinclude> {{documentation}} </noinclude> nf44jlki17lvz51z36jzomdujd55y7h 746310 746309 2026-06-12T21:56:19Z Robertsky 51025 1 revision imported from [[:en:Template:Rail_icon]] 746309 wikitext text/x-wiki <includeonly>{{#invoke:Adjacent stations|icon}}</includeonly><noinclude> {{documentation}} </noinclude> nf44jlki17lvz51z36jzomdujd55y7h Template:Ric 10 176080 746311 2025-08-11T23:22:15Z en>Pppery 0 Changed protection settings for "[[Template:Ric]]" ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 746311 wikitext text/x-wiki #REDIRECT [[Template:Rail icon]] {{rcat shell| {{R from template shortcut}} }} t0bn0yqkykhranp86mxumw9xz4l4smy 746312 746311 2026-06-12T21:56:19Z Robertsky 51025 1 revision imported from [[:en:Template:Ric]] 746311 wikitext text/x-wiki #REDIRECT [[Template:Rail icon]] {{rcat shell| {{R from template shortcut}} }} t0bn0yqkykhranp86mxumw9xz4l4smy Module:Location map/data/New Mexico 828 176081 746313 2024-01-03T19:27:24Z en>Pppery 0 Convert old-style module redirect to new built-in redirect (via [[WP:JWB]]) 746313 Scribunto text/plain return require [[Module:Location map/data/USA New Mexico]] 49grujiy8gbo2o0ok8bzfsvu9lyzgid 746314 746313 2026-06-12T21:56:19Z Robertsky 51025 1 revision imported from [[:en:Module:Location_map/data/New_Mexico]] 746313 Scribunto text/plain return require [[Module:Location map/data/USA New Mexico]] 49grujiy8gbo2o0ok8bzfsvu9lyzgid Module:Location map/data/USA New Mexico 828 176082 746315 2021-02-03T00:13:40Z en>Izno 0 per tper 746315 Scribunto text/plain return { name = 'New Mexico', top = 37.2, bottom = 31.1, left = -109.3, right = -102.8, image = 'USA New Mexico location map.svg', image1 = 'USA New Mexico relief location map.svg' } 6cmckypdzi5pd883w7pq9ibn7z88194 746316 746315 2026-06-12T21:56:19Z Robertsky 51025 1 revision imported from [[:en:Module:Location_map/data/USA_New_Mexico]] 746315 Scribunto text/plain return { name = 'New Mexico', top = 37.2, bottom = 31.1, left = -109.3, right = -102.8, image = 'USA New Mexico location map.svg', image1 = 'USA New Mexico relief location map.svg' } 6cmckypdzi5pd883w7pq9ibn7z88194 Template:Infobox building/doc 10 176083 746321 2026-05-13T02:42:31Z en>Zackmann08 0 Undid revision [[Special:Diff/1353883111|1353883111]] by [[Special:Contributions/Crisco 1492|Crisco 1492]] ([[User talk:Crisco 1492|talk]]) fixing the 2nd param 746321 wikitext text/x-wiki {{Documentation subpage}} <!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> {{High-use}} {{auto short description}} {{Lua|Module:Infobox|Module:InfoboxImage|Module:Location map|Module:Coordinates|Module:Check for unknown parameters}} {{tl|Infobox building}} may be used to summarize information about a building or built structure, including skyscrapers, hotels, hostels and performance venues. == Usage == {{Parameter names example | name | native_name | native_name_lang | logo | logo_size | logo_alt | logo_caption | image | image_size | image_alt | image_caption | pushpin_map = Earth | pushpin_map_alt | pushpin_label | pushpin_relief | map_caption | pushpin_mapsize | coordinates = {{coord|0|0|type:landmark|display=inline}} | former_names | alternate_names | etymology | hotel_chain | highest_prev | highest_next | highest_start | highest_end | highest_region | highest_reflabel | status | cancelled | topped_out | building_type | architectural_style | classification | location | address | location_city | location_country | grid_name | grid_position | altitude | current_tenants | namesake | years_built | groundbreaking_date | construction_start_date | construction_stop_date | topped_out_date | completion_date | opened_date | inauguration_date | relocated_date | renovation_date | closing_date | demolished_date | cost | ren_cost | client | owner | landlord | affiliation | height | architectural | tip | antenna_spire | roof | top_floor | observatory | diameter | circumference | weight | other_dimensions | structural_system | material | size | floor_count | floor_area | elevator_count | grounds_area | architect | architecture_firm | developer | engineer | structural_engineer | services_engineer | civil_engineer | other_designers | quantity_surveyor | main_contractor | awards | designations | known_for | ren_architect | ren_firm | ren_engineer | ren_str_engineer | ren_serv_engineer | ren_civ_engineer | ren_oth_designers | ren_qty_surveyor | ren_contractor | ren_awards | seating_type | seating_capacity | number_of_stores | number_of_anchors | number_of_rooms | number_of_suites | number_of_restaurants | number_of_bars | facilities | parking | public_transit | website | embedded | references | footnotes }} {{Parameter names example | name=Without ''logo_size'' or ''image_size'' | logo | logo_alt | logo_caption | image | image_alt | image_caption }} === Blank template with most common parameters === <syntaxhighlight lang="wikitext" style="width:50%; height:250px; overflow:scroll;"> {{Infobox building | name = | image = | image_size = | image_alt = | image_caption = | coordinates = <!-- {{coord|latitude|longitude|type:landmark|display=inline,title}} --> | architectural_style = | address = | years_built = | groundbreaking_date = | construction_start_date = | construction_stop_date = | topped_out_date = | completion_date = <!-- or |est_completion= --> | opened_date = | inauguration_date = | relocated_date = | renovation_date = | closing_date = | demolished_date = <!-- or |destruction_date= --> | cost = | owner = | height = | material = | size = | floor_count = | floor_area = | architect = | architecture_firm = | parking = | public_transit = | website = <!-- {{URL|example.com}} --> | references = | footnotes = }} </syntaxhighlight> === Blank template with nearly every parameter === <syntaxhighlight lang="wikitext" style="width:50%; height:250px; overflow:scroll;"> {{Infobox building | name = | native_name = | native_name_lang = | logo = | logo_size = | logo_alt = | logo_caption = | image = | image_size = | image_alt = | image_caption = | pushpin_map = | pushpin_map_alt = | map_dot_mark = | pushpin_label = | pushpin_relief = | map_caption = | pushpin_mapsize = | coordinates = <!-- {{coord|latitude|longitude|type:landmark|display=inline,title}} --> | former_names = | alternate_names = | etymology = | status = | cancelled = | topped_out = | building_type = | architectural_style = | classification = | location = | address = | location_city = <!-- or |location_town= --> | location_country = | grid_name = | grid_position = | altitude = | current_tenants = | namesake = | years_built = | groundbreaking_date = | construction_start_date = | construction_stop_date = | topped_out_date = | completion_date = <!-- or |est_completion= --> | opened_date = | inauguration_date = | relocated_date = | renovation_date = | closing_date = | demolished_date = <!-- or |destruction_date= --> | cost = | ren_cost = | client = | owner = | landlord = <!-- or |operator= or |governing_body= --> | affiliation = | height = | architectural = | tip = | antenna_spire = | roof = | top_floor = | observatory = | diameter = | circumference = | weight = | other_dimensions = | structural_system = | material = | size = | floor_count = | floor_area = | elevator_count = | grounds_area = | architect = | architecture_firm = | developer = | engineer = | structural_engineer = | services_engineer = | civil_engineer = | other_designers = | quantity_surveyor = | main_contractor = | awards = | designations = | known_for = | ren_architect = | ren_firm = | ren_engineer = | ren_str_engineer = | ren_serv_engineer = | ren_civ_engineer = | ren_oth_designers = | ren_qty_surveyor = | ren_contractor = | ren_awards = | parking = | public_transit = | website = <!-- {{URL|example.com}} --> | embed = | embedded = | references = | footnotes = }} </syntaxhighlight> === Other options === ==== Record height ==== <syntaxhighlight lang="wikitext" style="overflow:auto"> | highest_prev = | highest_next = | highest_start = | highest_end = | highest_region = | highest_reflabel = </syntaxhighlight> ==== Hotels, hostels, shopping centers, and performance venues ==== '''Hotels and hostels''' <syntaxhighlight lang="wikitext" style="overflow:auto"> | hotel_chain = | number_of_rooms = <!-- or |number_of_units= --> | number_of_suites = | number_of_restaurants = | number_of_bars = | facilities = </syntaxhighlight> '''Shopping centers''' <syntaxhighlight lang="wikitext" style="overflow:auto"> | number_of_stores = | number_of_anchors = </syntaxhighlight> '''Seating''' <syntaxhighlight lang="wikitext" style="overflow:auto"> | seating_type = | seating_capacity = </syntaxhighlight> ==== Use as a child template ==== The '''embed''' parameter is used when embedding this infobox into another (see the [[Template:Infobox]] documentation which explains [[Template:Infobox/doc#Embedding|embedding]] and [[Template:Infobox/doc#Subboxes|subboxes]]). <syntaxhighlight lang="wikitext" style="overflow: auto;"> {{Infobox ABC | name = | <!-- etc. --> | embedded = <!-- or module= --> {{Infobox building | embed = yes | <!-- etc. --> }} }} </syntaxhighlight> ==== Embedding other templates ==== The '''embedded''' parameter is used for embedding other templates into this infobox (see [[Wikipedia:Infobox modules]]). <syntaxhighlight lang="wikitext" style="overflow: auto;"> {{Infobox building | name = | <!-- etc. --> | embedded = {{Infobox ABC | embed = yes <!-- or child=yes or subbox=yes--> | <!-- etc. --> }} }} </syntaxhighlight> == Examples == ===Example 1=== {{Infobox building | name = Palace of Justice of Brussels | native_name = {{native name|fr|Palais de Justice de Bruxelles}}<br />{{native name|nl|Justitiepaleis van Brussel}} | image = Palais de Justice from Hilton.jpg | image_caption = View from [[The Hotel Brussels]] (then Hilton) in 2009 | architectural_style = {{Flatlist| * [[Eclecticism|Eclectic]] * [[Neoclassical architecture|neoclassical]] }} | cost = 45 million [[Belgian franc]]s | address = {{lang|fr|Place Poelaert|italic=no}} / {{lang|nl|Poelaertplein|italic=no}} 1 | location_town = B-1000 [[City of Brussels]], [[Brussels|Brussels-Capital Region]] | location_country = [[Belgium]] | client = Belgian government | owner = [[Belgian federal government|Belgian government]] | current_tenants = Belgian court | coordinates = {{coord|50|50|12|N|4|21|06|E|type:landmark_region:BE|display=inline}} | construction_start_date = {{start date|1866|10|31}} | inauguration_date = 15 October 1883 | height = {{convert|104|m|ft|abbr=on}} | diameter = {{convert|160|x|150|m|ft|abbr=on}} | floor_area = {{convert|26,000|m2|sqft|abbr=on}} | architect = [[Joseph Poelaert]] | public_transit = '''[[Brussels metro|Metro]]''': [[Louise/Louiza metro station|Louise/Louiza station]], lines [[Brussels Metro line 2|2]] and [[Brussels Metro line 6|6]]<br/>'''[[Trams in Brussels|Tram]]''': Lines 92 and 94 }} <syntaxhighlight lang="wikitext" style="overflow:auto;"> {{Infobox building | name = Palace of Justice of Brussels | native_name = {{native name|fr|Palais de Justice de Bruxelles}}<br />{{native name|nl|Justitiepaleis van Brussel}} | image = Palais de Justice from Hilton.jpg | image_caption = View from [[The Hotel Brussels]] (then Hilton) in 2009 | architectural_style = {{Flatlist| * [[Eclecticism|Eclectic]] * [[Neoclassical architecture|neoclassical]] }} | cost = 45 million [[Belgian franc]]s | address = {{lang|fr|Place Poelaert|italic=no}} / {{lang|nl|Poelaertplein|italic=no}} 1 | location_town = B-1000 [[City of Brussels]], [[Brussels|Brussels-Capital Region]] | location_country = [[Belgium]] | client = Belgian government | owner = [[Belgian federal government|Belgian government]] | current_tenants = Belgian court | coordinates = {{coord|50|50|12|N|4|21|06|E|type:landmark_region:BE|display=inline}} | construction_start_date = {{start date|1866|10|31}} | inauguration_date = 15 October 1883 | height = {{convert|104|m|ft|abbr=on}} | diameter = {{convert|160|x|150|m|ft|abbr=on}} | floor_area = {{convert|26,000|m2|sqft|abbr=on}} | architect = [[Joseph Poelaert]] | public_transit = '''[[Brussels metro|Metro]]''': [[Louise/Louiza metro station|Louise/Louiza station]], lines [[Brussels Metro line 2|2]] and [[Brussels Metro line 6|6]]<br/>'''[[Trams in Brussels|Tram]]''': Lines 92 and 94 }} </syntaxhighlight> {{Clear}} === Example 2: embedded templates === {{Infobox building | name = Deming Armory | image = Deming Luna Mimbres Museum.jpg | image_alt = The red-brick front facade of the Deming Armory | image_caption = Deming Armory in 2009 | former_names = State Armory | alternate_names = Deming Luna Mimbres Museum | status = Used as a museum | building_type = Government [[Armory (military)|armory]] | architectural_style = Castellated style | address = 301 South Silver Avenue | location_town = [[Deming, New Mexico]] | location_country = United States | altitude = {{convert|4337|ft|abbr=on}} | current_tenants = Deming Luna Mimbres Museum | construction_start_date = {{start date|1915}} | completion_date = 1916 | cost = {{US$|17500}} | client = [[United States Department of the Army]] | owner = Luna County Historical Society, Inc. (current) | floor_count = 2 | floor_area = {{convert|14000|sqft|abbr=on}} | other_dimensions = {{convert|50|ft}} across x {{convert|132|ft}} deep | architect = Henry C. Trost | architecture_firm = [[Trost & Trost]] | main_contractor = W. W. Barracks | public_transit = {{station link|Amtrak|Deming}} {{ric|Amtrak}} | embedded = {{Infobox NRHP | embed = yes | name = Deming Armory | coordinates = {{coord|32|15|58|N|107|45|29|W|type:landmark_region:US-NM|display=inline}} | locmapin = New Mexico | map_alt = Located in New Mexico, in the southwest portion of the state | map_caption = Location in New Mexico | architect = [[Henry C. Trost]] | refnum = 83001624 | added = April 21, 1983 | designated_other1 = N.M. State Register of Cultural Properties | designated_other1_date = January 20, 1978 | designated_other1_number = 584 | designated_other1_num_position = bottom }} }} <syntaxhighlight lang="wikitext" style="overflow:auto;"> {{Infobox building | name = Deming Armory | image = Deming Luna Mimbres Museum.jpg | image_alt = The red-brick front facade of the Deming Armory | image_caption = Deming Armory in 2009 | former_names = State Armory | alternate_names = Deming Luna Mimbres Museum | status = Used as a museum | building_type = Government [[Armory (military)|armory]] | architectural_style = Castellated style | address = 301 South Silver Avenue | location_town = [[Deming, New Mexico]] | location_country = United States | altitude = {{convert|4337|ft|abbr=on}} | current_tenants = Deming Luna Mimbres Museum | construction_start_date = {{start date|1915}} | completion_date = 1916 | cost = {{US$|17500}} | client = [[United States Department of the Army]] | owner = Luna County Historical Society, Inc. (current) | floor_count = 2 | floor_area = {{convert|14000|sqft|abbr=on}} | other_dimensions = {{convert|50|ft}} across x {{convert|132|ft}} deep | architect = Henry C. Trost | architecture_firm = [[Trost & Trost]] | main_contractor = W. W. Barracks | public_transit = {{station link|Amtrak|Deming}} {{ric|Amtrak}} | embedded = {{Infobox NRHP | embed = yes | name = Deming Armory | coordinates = {{coord|32|15|58|N|107|45|29|W|type:landmark_region:US-NM|display=inline}} | locmapin = New Mexico | map_alt = Located in New Mexico, in the southwest portion of the state | map_caption = Location in New Mexico | architect = [[Henry C. Trost]] | refnum = 83001624 | added = April 21, 1983 | designated_other1 = N.M. State Register of Cultural Properties | designated_other1_date = January 20, 1978 | designated_other1_number = 584 | designated_other1_num_position = bottom }} }} </syntaxhighlight> {{Clear}} ==Parameters== {| class="wikitable" |- ! Field Name ! Required ! Description ! Values |- | name || {{yes}} || Name of building || wikitext |- | native_name || {{no}} || name in that country's official language(s), if other than English. || wikitext |- | native_name_lang || {{no}} || [[List of ISO 639-2 codes|ISO 639-2 code]] || use [[List of ISO 639-2 codes|ISO 639-2 code]], e.g. "fr" for French. If there is more than one native name, in different languages, enter those names using {{tl|lang}}, instead. |- | etymology || {{no}} || Thing (event, person, etc.) the building was named after |- | status || {{no}} || useful to show the construction status of new buildings. The keywords to the right can be used to produce the appropriate status: || *"built", "completed", "finished" or "complete" = Complete *"destroyed" = Destroyed *"demolished" = Demolished *"on hold" = On hold *"incomplete", "unfinished" or "under construction" = Under construction *"cancelled", "canceled", or "never built" = Never built *"topped out" or "topped-out" = Topped out *"planned" or "proposed" = Proposed *"approved" = Approved |- | image || {{no}} || Image of the building || filename |- | image_size || {{no}} || The image width in pixels. If not specified, the image uses ''frameless'' with ''upright=1.1'' which displays it at approximately 110% of the user's default thumbnail size (for most users the image will display at {{#expr:220*1.1 round -1}}px; for logged-in users who have changed the setting at [[Special:Preferences]] the displayed image could range from {{#expr:120*1.1 round -1}}px to {{#expr:400*1.1 round -1}}px). See also: [[Module:InfoboxImage]], [[WP:AUTOSIZE]], [[WP:EIS]], [[WP:IMGSIZE]], and [[MOS:IMGSIZE]] || number (with or without "px") |- | image_alt || {{no}} || Alt text for image, see [[WP:ALT]] || text |- | image_caption || {{no}} || Caption for image || wikitext (can contain links) |- | location || {{no}} || Location of the building || wikitext (can contain links), e.g., <nowiki>[[Joondalup, Western Australia]], [[Australia]], [[Las Vegas Strip]]</nowiki> |- | address || {{no}} || Address of the building || The address can be different from the location, especially when it is only a mailing address and does not represent the actual physical location. Generally address should be used except when the location and address are different. |- | location_town || {{no}} || Settlement where the building is located || wikitext (can contain links) |- | location_country || {{no}} || Country where the building is located || wikitext (can contain links) |- | coordinates || {{no}} || Geographic coordinates of location || See [[#Map and coordinates|map and coordinates]] for details |- | years_built || {{no}} || Dates of building construction || E.g.; <nowiki>2007{{ndash}}2009</nowiki> |- | groundbreaking_date || {{no}} || Date of the formal ground breaking, if any || E.g.; <nowiki>25 January 2007</nowiki> |- | construction_start_date || {{no}} || Date building construction started || E.g.; <nowiki>25 January 2007</nowiki> |- | construction_stop_date || {{no}} || Date building construction stopped or halted || E.g.; <nowiki>25 January 2007</nowiki> |- | completion_date || {{no}} || Completion date of construction if known || E.g.; <nowiki>25 January 2007</nowiki> |- | opened_date || {{no}} || Date of opening || E.g.; <nowiki>{{Start date|2007|01|25}}</nowiki> |- | relocated_date || {{no}} || Date of relocation || E.g.; <nowiki>25 January 2007</nowiki> |- | inauguration_date || {{no}} || Inauguration date if know || E.g.; <nowiki>25 January 2007</nowiki> |- | demolition_date || {{no}} || Date building was demolished || E.g.; <nowiki>25 January 2007</nowiki> |- | destruction_date || {{no}} || Date building was destroyed, generally by a natural event or war || E.g.; <nowiki>25 January 2007</nowiki> |- | cancelled_date || {{no}} || Date construction was cancelled || E.g.; <nowiki>25 January 2007</nowiki> |- | cancelled || {{no}} || Was the construction cancelled || {{yes}}, will set the status if no other status specified |- | topped_out_date || {{no}} || Date building reached final height || E.g.; <nowiki>25 January 2007</nowiki> |- | topped_out || {{no}} || Was the final height reached || {{yes}}, will set the status if no other status specified |- | architect || {{no}} || Name of original architect || wikitext (can contain links) |- | landlord || {{no}} || Name of current landlord || wikitext (can contain links) |- | owner || {{no}} || Name(s) of current owner(s) || wikitext (can contain links) |- | cost || {{no}} || Construction cost || wikitext (can contain links) |- |height || {{no}} || Generic height parameter || For best practice, use {{tl|convert}} in this field. |- | architectural || {{no}} || CTBUH height to the top of the building || For best practice, use {{tl|convert}}. |- | tip || {{no}} || CTBUH height to the tip of the building || For best practice, use {{tl|convert}}. |- | top_floor || {{no}} || CTBUH height to the floor level of the highest floor || For best practice, use {{tl|convert}}. |- | roof || {{no}} || CTBUH height to the top of the roof || For best practice, use {{tl|convert}}. |- | observatory || {{no}} || Height of observation deck || For best practice, use {{tl|convert}}. |- | antenna_spire || {{no}} || Height of highest point of antenna tower || For best practice, use {{tl|convert}}. |- | floor_area || {{no}} || Gross floor area of the building, expressed as a numerical value || For best practice, use {{tl|convert}}. |- | floor_count || {{no}} || Number of floors expressed as a numerical value || |- | seating_type || {{no}} |||| |- | seating_capacity || {{no}} || Numbers of seats available || |- | grounds_area || {{no}} || Area of associated land, in hectares, square metres or equivalent. Use {{tl|Convert}} if appropriate || |- | awards || {{no}} || Listed awards should meet the [[WP:N|notability criteria]] for its own non-[[WP:RDR|redirect]] article in the English Wikipedia. [[WP:RED|Red-linked entries]] are acceptable if the award's notability is [[WP:V|verifiable]], and it is reasonable to expect an article could be forthcoming in the future. This standard prevents the infobox award section from becoming an [[WP:IINFO|indiscriminate list]]. || |- | ren_awards || {{no}} || Listed renovation awards should meet the [[WP:N|notability criteria]] for its own non-[[WP:RDR|redirect]] article in the English Wikipedia. [[WP:RED|Red-linked entries]] are acceptable if the award's notability is [[WP:V|verifiable]], and it is reasonable to expect an article could be forthcoming in the future. This standard prevents the infobox award section from becoming an [[WP:IINFO|indiscriminate list]]. || |- | parking || {{no}} || Information on the building's own parking facilities (e.g. number of spaces or lots). Do ''not'' use for nearby parking unassociated with the building itself. || |- | public_transit || {{no}} || Information on nearby public transit options || |- | website || {{no}} || Website for building || <nowiki>{{URL|url.com.au}}</nowiki> |- | embed || {{no}} || ''Embed'' this infobox into another by using embed=yes || |- | embedded || {{no}} || Other templates to be ''embedded'' in this infobox. Templates with such capability include {{tl|Designation list}} and {{tl|Infobox NRHP}} (see [[:Category:Embeddable templates]]). || the code of the embedded template |- | references || {{no}} || Footnotes and citations for information within infobox || wikitext (can contain links) |- | style="text-align:center;" colspan="4" | '''Notes:''' Do not link to the same article more than once in the infobox. |- | highest_region || {{no}} || |- | highest_reflabel || {{no}} || Override the default reference label 'talleststatus', pointing to the reference marked with {{tlp|note label|2=''thatlabel''}}. |- | highest_prev || {{no}} || |- | highest_start || {{no}} || |- | highest_end || {{no}} || |- | highest_next || {{no}} || |} ===Height parameters=== The following parameters are provided for the height of buildings. They include parameters corresponding to methods used by the [[Council on Tall Buildings and Urban Habitat]] (CTBUH) to measure the height of tall buildings. CTBUH heights are measured from the level of the lowest, significant, open-air, pedestrian entrance of the building. Specify {{para|height}} with no other height-related parameters, or leave {{para|height}} blank and fill in one or more of the other parameters below. Use of {{para|height}} along with one of the other parameters below will place the page in {{cl|Pages using infobox building with parameter errors}}. {| class="wikitable" |- ! Parameter !! Description |- | height || Generic height parameter |- | architectural || (CTBUH) Height to the top of the building, inclusive of spires but excluding items such as flagpoles and antennae. This is the most commonly cited CTBUH measurement. |- | tip || (CTBUH) Height to the highest point of the building, including antennae, flagpoles, and technical equipment. |- | top_floor || (CTBUH) Height to the floor level of the highest floor that is occupied by building users on a consistent basis. |- | roof || (CTBUH) Height to top of roof. This category was removed from CTBUH criteria in 2009, but is included for historical data. |- | observatory || Height of observation deck. |- | antenna_spire || Height of the highest point of structures such as antenna towers. |} ===Map and coordinates=== ====Location maps==== The <code>coordinates=</code> parameter is used to display coordinates in the infobox, and optionally at the top of the page; use the {{tl|coord}} template. *The [[ISO 3166-1 alpha-2]] or [[ISO 3166-2]] region code can often be determined automatically, based on the <code>location_country=</code> parameter. <syntaxhighlight lang="wikitext" style="overflow:auto"> {{Infobox building ... | coordinates = <!-- Use the {{Coord}} template. --> | pushpin_map = <!-- Location name used for Template:Location map --> | pushpin_map_alt = <!-- Alternative text for map image, see WP:ALT for details --> | pushpin_map_caption = <!-- Text to be displayed below map; if the parameter is omitted then the caption will be "Marker text (location map name)" --> | pushpin_relief = <!-- Any non-blank value (yes, 1, etc.) will cause the template to display a relief map image, where available. --> | pushpin_label = <!-- Text to display on the map --> | pushpin_mark = <!-- Pin color for use on the map --> ... }} </syntaxhighlight> ===== Map type ===== A list of templates containing maps that may be used can be found at: * [[Special:PrefixIndex/Template:Location map]] A list of modules containing maps that may be used can be found at: * [[Special:PrefixIndex/Module:Location map/data/]] ===Mapframe maps=== {{Infobox mapframe/doc/parameters | onByDefault = yes, unless other map types have been used with {{para|pushpin_map}}, {{para|map_type}} or {{para|image_map}} | mapframe-frame-width = 250 | mapframe-wikidata = yes | mapframe-type = landmark }} == TemplateData == {{TemplateData header}} {{collapse top|title=TemplateData}} <templatedata> { "description": "This template may be used to summarise information about a building. See template documentation for more information.", "format": "{{_\n| ________________ = _\n}}\n", "params": { "name": { "label": "Name", "description": "Name of building", "type": "string", "required": false }, "native_name": { "label": "Native name", "description": "Name of building in native language", "type": "string", "required": false }, "native_name_lang": { "label": "Native name language", "description": "ISO 639-2 code", "type": "string", "required": false }, "former_names": { "label": "Former names", "description": "Former names", "type": "string", "required": false, "aliases": [ "former_name" ] }, "alternate_names": { "label": "Alternate names", "description": "Alternate names", "type": "string", "required": false, "aliases": [ "alternate_name" ] }, "status": { "label": "Status", "description": "useful to show the construction status of new buildings. The keywords to the right can be used to produce the appropriate colored status:", "type": "string", "required": false, "suggestedvalues": [ "complete", "destroyed", "demolished", "on hold", "under construction", "never built", "topped out", "proposed", "approved" ] }, "image": { "label": "Image", "description": "Image of the building", "type": "wiki-file-name", "required": false }, "image_alt": { "label": "Image alt", "description": "Text to display if image cannot be shown", "type": "string", "required": false, "aliases": [ "alt" ] }, "image_size": { "label": "Image size", "description": "Image size", "type": "number", "required": false }, "caption": { "label": "Caption", "description": "Caption for image", "type": "string", "required": false, "aliases": [ "image_caption" ] }, "location": { "label": "Location", "description": "Location of the building", "type": "string", "required": false }, "address": { "label": "Address", "description": "Address of the building", "type": "string", "required": false }, "location_town": { "label": "Town or City", "description": "Settlement where the building is located.", "type": "string", "required": false, "aliases": [ "location_city" ] }, "location_country": { "label": "Country", "description": "Country where the building is located", "type": "string", "required": false }, "coordinates": { "label": "Coordinates", "description": "coordinates", "type": "string", "required": false }, "years_built": { "label": "Years Built", "description": "Dates of building construction", "type": "string", "required": false }, "groundbreaking_date": { "label": "Groundbreaking date", "description": "Date of the formal ground breaking, if any", "type": "string", "required": false }, "completion_date": { "label": "Completion date", "description": "Completion date of construction if know", "type": "string", "required": false, "aliases": [ "est_completion" ] }, "opened_date": { "label": "Opened date", "description": "Date of opening", "type": "string", "required": false, "aliases": [ "opening_date" ] }, "inauguration_date": { "label": "Inauguration date", "description": "Inauguration date if known", "type": "string", "required": false }, "destruction_date": { "label": "Destruction date", "description": "Date building was destroyed, generally by a natural event or war", "type": "string", "required": false }, "architect": { "label": "Architect", "description": "Name of original architect", "type": "string", "required": false }, "landlord": { "label": "Landlord", "description": "Name of current landlord", "type": "string", "required": false, "aliases": [ "operator" ] }, "owner": { "label": "Owner", "description": "Name(s) of current owner(s)", "type": "string", "required": false }, "cost": { "label": "Cost", "description": "Construction cost", "type": "string", "required": false }, "floor_area": { "label": "Floor area", "description": "Gross floor area of the building, expressed as a numerical value", "type": "string", "required": false }, "top_floor": { "label": "Top floor", "description": "Number of the highest floor expressed as a numerical value", "type": "number", "required": false }, "floor_count": { "label": "Floor_count", "description": "Number of floors expressed as a numerical value", "type": "string", "required": false }, "awards": { "label": "Awards", "description": "listed awards should meet the&nbsp;notability criteria&nbsp;for its own non-redirectarticle in the English Wikipedia.&nbsp;Red-linked entries&nbsp;are acceptable if the award's notability is&nbsp;verifiable, and it is reasonable to expect an article could be forthcoming in the future. This standard prevents the infobox award section from becoming an&nbsp;indiscriminate list.", "type": "string", "required": false }, "ren_awards": { "label": "Ren_awards", "description": "listed awards should meet the&nbsp;notability criteria&nbsp;for its own non-redirectarticle in the English Wikipedia.&nbsp;Red-linked entries&nbsp;are acceptable if the award's notability is&nbsp;verifiable, and it is reasonable to expect an article could be forthcoming in the future. This standard prevents the infobox award section from becoming an&nbsp;indiscriminate list.", "type": "string", "required": false }, "parking": { "label": "Parking", "description": "parking", "type": "string", "required": false }, "website": { "label": "Website", "description": "Website for building.", "type": "string", "required": false }, "embed": { "label": "Embed", "description": "Embed this infobox into another by using embed=yes", "type": "string", "required": false }, "embedded": { "label": "Embedded", "description": "Other templates to be embedded in this infobox. Templates with such capability include {{Designation list}} and {{Infobox NRHP}}", "type": "string", "required": false }, "references": { "label": "References", "description": "Footnotes and citations for information within infobox", "type": "string", "required": false }, "highest_region": { "label": "Highest_region", "type": "string", "required": false }, "highest_reflabel": { "label": "Highest_reflabel", "description": "Override the default reference label 'talleststatus', pointing to the reference marked with&nbsp;{{note label|thatlabel}}.", "type": "string", "required": false }, "highest_prev": { "label": "Highest_prev", "type": "string", "required": false }, "highest_start": { "label": "Highest_start", "type": "string", "required": false }, "highest_end": { "label": "Highest_end", "type": "string", "required": false }, "highest_next": { "label": "Highest_next", "type": "string", "required": false }, "map_caption": { "label": "Map caption", "description": "map caption", "type": "string", "required": false, "aliases": [ "pushpin_map_caption" ] }, "map_dot_mark": { "label": "Map dot mark", "description": "Pin color for use on the map. See [[:Commons:Category:Map pointers, dotset 1]].", "type": "string", "required": false }, "altitude": { "label": "Altitude", "description": "altitude", "type": "string", "required": false }, "building_type": { "label": "Building_type", "description": "building_type", "type": "string", "required": false }, "architectural_style": { "label": "Architectural_style", "description": "architectural_style", "type": "string", "required": false }, "structural_system": { "label": "Structural_system", "description": "structural_system", "type": "string", "required": false }, "ren_cost": { "label": "Ren_cost", "description": "ren_cost", "type": "string", "required": false }, "client": { "label": "Client", "description": "client", "type": "string", "required": false }, "current_tenants": { "label": "Current_tenants", "description": "current_tenants", "type": "string", "required": false }, "renovation_date": { "label": "Renovation_date", "description": "renovation_date", "type": "string", "required": false }, "height": { "label": "Height", "description": "height", "type": "string", "required": false }, "architectural": { "label": "Architectural", "description": "architectural", "type": "string", "required": false }, "tip": { "label": "Tip", "description": "tip", "type": "string", "required": false }, "antenna_spire": { "label": "Antenna_spire", "description": "antenna_spire", "type": "string", "required": false }, "roof": { "label": "Roof", "description": "roof", "type": "string", "required": false }, "observatory": { "label": "Observatory", "description": "observatory", "type": "string", "required": false }, "other_dimensions": { "label": "Other_dimensions", "description": "other_dimensions", "type": "string", "required": false }, "seating_type": { "label": "Seating_type", "description": "seating_type", "type": "string", "required": false }, "seating_capacity": { "label": "Seating_capacity", "description": "seating_capacity", "type": "string", "required": false, "aliases": [ "capacity" ] }, "elevator_count": { "label": "Elevator_count", "description": "elevator_count", "type": "string", "required": false }, "architecture_firm": { "label": "Architecture_firm", "description": "architecture_firm", "type": "string", "required": false }, "structural_engineer": { "label": "Structural_engineer", "description": "structural_engineer", "type": "string", "required": false }, "services_engineer": { "label": "Services_engineer", "description": "services_engineer", "type": "string", "required": false }, "civil_engineer": { "label": "Civil_engineer", "description": "civil_engineer", "type": "string", "required": false }, "other_designers": { "label": "Other_designers", "description": "other_designers", "type": "string", "required": false }, "quantity_surveyor": { "label": "Quantity_surveyor", "description": "quantity_surveyor", "type": "string", "required": false }, "main_contractor": { "label": "Main_contractor", "description": "main_contractor", "type": "string", "required": false, "aliases": [ "main_contractors" ] }, "designations": { "label": "Designations", "description": "designations", "type": "string", "required": false }, "ren_architect": { "label": "Renovation architect", "description": "Architect for the building's renovation", "type": "string", "required": false }, "ren_firm": { "label": "Ren_firm", "description": "Company that renovated the building", "type": "string", "required": false }, "ren_str_engineer": { "label": "Ren_str_engineer", "description": "Structural engineer for the building's renovation", "type": "string", "required": false }, "ren_serv_engineer": { "label": "Ren_serv_engineer", "description": "Service engineer for the building's renovation", "type": "string", "required": false }, "ren_civ_engineer": { "label": "Ren_civ_engineer", "description": "Civil engineer for the building's renovation", "type": "string", "required": false }, "ren_oth_designers": { "label": "Ren_oth_designers", "description": "Other designers for the building's renovation", "type": "string", "required": false }, "ren_qty_surveyor": { "label": "Ren_qty_surveyor", "description": "Quantity surveyor for the building's renovation", "type": "string", "required": false }, "public_transit": { "label": "Public transit", "description": "Public transit access to the building", "example": "{{LACMTA link logo}} '''Bus''': [[Metro Local (Los Angeles County)#234|234]], [[Metro Rapid#734|734]] <br/> '''Train''': [[Getty Center Tram]]", "type": "string" }, "logo": {}, "logo_size": {}, "logo_upright": {}, "logo_alt": {}, "logo_caption": {}, "image_upright": {}, "mapframe-zoom": {}, "etymology": {}, "hotel_chain": { "aliases": [ "chain" ] }, "classification": {}, "closing_date": {}, "governing_body": {}, "affiliation": {}, "cancelled": { "aliases": [ "canceled" ] }, "topped_out": {}, "grid_name": {}, "grid_position": {}, "namesake": {}, "relocated_date": {}, "diameter": {}, "circumference": {}, "weight": {}, "material": {}, "size": {}, "grounds_area": {}, "developer": {}, "engineer": {}, "known_for": {}, "ren_engineer": {}, "ren_contractor": {}, "number_of_stores": {}, "number_of_anchors": {}, "number_of_suites": {}, "number_of_restaurants": {}, "number_of_bars": {}, "facilities": {}, "belowstyle": {}, "footnotes": {}, "topped_out_date": {}, "mapframe-frame-width": {}, "pushpin_mark": {}, "construction_start_date": { "label": "Start date", "description": "Date building construction started", "type": "string" }, "construction_stop_date": { "label": "Stop date", "description": "Date building construction stopped or halted", "type": "string" }, "pushpin_map": { "aliases": [ "image_map" ], "label": "Map_type", "description": "map_type", "type": "string" }, "pushpin_map_alt": { "label": "Map_alt", "description": "Text to display if the map image cannot be shown", "type": "string" }, "pushpin_label": { "label": "Map dot label", "description": "Text to display on the map", "type": "string" }, "pushpin_relief": { "label": "Relief", "description": "relief", "type": "string" }, "pushpin_mapsize": {}, "number_of_units": {}, "number_of_rooms": { "label": "Rooms", "description": "How many rooms the building has", "type": "number" }, "demolished_date": { "label": "Demolition date", "description": "Date building was demolished", "type": "string" } }, "paramOrder": [ "name", "native_name", "native_name_lang", "former_names", "alternate_names", "awards", "image", "image_alt", "image_size", "caption", "location", "address", "location_town", "location_country", "coordinates", "altitude", "status", "years_built", "groundbreaking_date", "construction_start_date", "construction_stop_date", "completion_date", "opened_date", "inauguration_date", "demolished_date", "destruction_date", "architect", "landlord", "owner", "cost", "floor_area", "top_floor", "floor_count", "parking", "public_transit", "embed", "embedded", "references", "highest_region", "highest_reflabel", "highest_prev", "highest_start", "highest_end", "highest_next", "pushpin_map", "pushpin_map_alt", "map_caption", "pushpin_label", "map_dot_mark", "pushpin_relief", "building_type", "architectural_style", "structural_system", "client", "current_tenants", "height", "architectural", "tip", "antenna_spire", "roof", "observatory", "other_dimensions", "seating_type", "seating_capacity", "elevator_count", "architecture_firm", "structural_engineer", "services_engineer", "civil_engineer", "other_designers", "quantity_surveyor", "main_contractor", "designations", "ren_architect", "renovation_date", "ren_awards", "ren_firm", "ren_cost", "ren_str_engineer", "ren_serv_engineer", "ren_civ_engineer", "ren_oth_designers", "ren_qty_surveyor", "ren_engineer", "ren_contractor", "logo", "logo_size", "logo_upright", "logo_alt", "logo_caption", "image_upright", "pushpin_mapsize", "etymology", "hotel_chain", "classification", "closing_date", "governing_body", "affiliation", "cancelled", "topped_out", "topped_out_date", "grid_name", "grid_position", "namesake", "relocated_date", "diameter", "circumference", "weight", "material", "size", "grounds_area", "developer", "engineer", "known_for", "number_of_stores", "number_of_anchors", "number_of_units", "number_of_rooms", "number_of_suites", "number_of_restaurants", "number_of_bars", "facilities", "belowstyle", "website", "footnotes", "mapframe-zoom", "mapframe-frame-width", "pushpin_mark" ] } </templatedata> {{collapse bottom}} ==Microformat== {{UF-hcard-geo}} == Tracking categories == {{infobox tracking categories}} * {{clc|Pages using infobox building with parameter errors}} * {{clc|Pages using infobox building with topped out}} * {{clc|Pages using infobox building with cancelled}} ==Redirects== {{columns-list|colwidth=30em| #{{tl|infobox bathhouse}} #{{tl|infobox historic building}} #{{tl|infobox hostel}} #{{tl|infobox hotel}} #{{tl|infobox house}} #{{tl|infobox modern building}} #{{tl|infobox skyscraper}} }} ==See also== {{Buildings and structures infobox templates}} <includeonly>{{Sandbox other|| <!--Categories below this line, please; interwikis at Wikidata--> [[Category:Buildings and structures infobox templates| ]] [[Category:Infobox templates with module parameter|Building]] [[Category:Embeddable templates]] [[Category:Templates that add a tracking category]] [[Category:Templates that generate named references]] }}</includeonly> 0opmiu294wx4dqgylnm2ifcpn3fma1o 746322 746321 2026-06-12T21:56:20Z Robertsky 51025 1 revision imported from [[:en:Template:Infobox_building/doc]] 746321 wikitext text/x-wiki {{Documentation subpage}} <!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> {{High-use}} {{auto short description}} {{Lua|Module:Infobox|Module:InfoboxImage|Module:Location map|Module:Coordinates|Module:Check for unknown parameters}} {{tl|Infobox building}} may be used to summarize information about a building or built structure, including skyscrapers, hotels, hostels and performance venues. == Usage == {{Parameter names example | name | native_name | native_name_lang | logo | logo_size | logo_alt | logo_caption | image | image_size | image_alt | image_caption | pushpin_map = Earth | pushpin_map_alt | pushpin_label | pushpin_relief | map_caption | pushpin_mapsize | coordinates = {{coord|0|0|type:landmark|display=inline}} | former_names | alternate_names | etymology | hotel_chain | highest_prev | highest_next | highest_start | highest_end | highest_region | highest_reflabel | status | cancelled | topped_out | building_type | architectural_style | classification | location | address | location_city | location_country | grid_name | grid_position | altitude | current_tenants | namesake | years_built | groundbreaking_date | construction_start_date | construction_stop_date | topped_out_date | completion_date | opened_date | inauguration_date | relocated_date | renovation_date | closing_date | demolished_date | cost | ren_cost | client | owner | landlord | affiliation | height | architectural | tip | antenna_spire | roof | top_floor | observatory | diameter | circumference | weight | other_dimensions | structural_system | material | size | floor_count | floor_area | elevator_count | grounds_area | architect | architecture_firm | developer | engineer | structural_engineer | services_engineer | civil_engineer | other_designers | quantity_surveyor | main_contractor | awards | designations | known_for | ren_architect | ren_firm | ren_engineer | ren_str_engineer | ren_serv_engineer | ren_civ_engineer | ren_oth_designers | ren_qty_surveyor | ren_contractor | ren_awards | seating_type | seating_capacity | number_of_stores | number_of_anchors | number_of_rooms | number_of_suites | number_of_restaurants | number_of_bars | facilities | parking | public_transit | website | embedded | references | footnotes }} {{Parameter names example | name=Without ''logo_size'' or ''image_size'' | logo | logo_alt | logo_caption | image | image_alt | image_caption }} === Blank template with most common parameters === <syntaxhighlight lang="wikitext" style="width:50%; height:250px; overflow:scroll;"> {{Infobox building | name = | image = | image_size = | image_alt = | image_caption = | coordinates = <!-- {{coord|latitude|longitude|type:landmark|display=inline,title}} --> | architectural_style = | address = | years_built = | groundbreaking_date = | construction_start_date = | construction_stop_date = | topped_out_date = | completion_date = <!-- or |est_completion= --> | opened_date = | inauguration_date = | relocated_date = | renovation_date = | closing_date = | demolished_date = <!-- or |destruction_date= --> | cost = | owner = | height = | material = | size = | floor_count = | floor_area = | architect = | architecture_firm = | parking = | public_transit = | website = <!-- {{URL|example.com}} --> | references = | footnotes = }} </syntaxhighlight> === Blank template with nearly every parameter === <syntaxhighlight lang="wikitext" style="width:50%; height:250px; overflow:scroll;"> {{Infobox building | name = | native_name = | native_name_lang = | logo = | logo_size = | logo_alt = | logo_caption = | image = | image_size = | image_alt = | image_caption = | pushpin_map = | pushpin_map_alt = | map_dot_mark = | pushpin_label = | pushpin_relief = | map_caption = | pushpin_mapsize = | coordinates = <!-- {{coord|latitude|longitude|type:landmark|display=inline,title}} --> | former_names = | alternate_names = | etymology = | status = | cancelled = | topped_out = | building_type = | architectural_style = | classification = | location = | address = | location_city = <!-- or |location_town= --> | location_country = | grid_name = | grid_position = | altitude = | current_tenants = | namesake = | years_built = | groundbreaking_date = | construction_start_date = | construction_stop_date = | topped_out_date = | completion_date = <!-- or |est_completion= --> | opened_date = | inauguration_date = | relocated_date = | renovation_date = | closing_date = | demolished_date = <!-- or |destruction_date= --> | cost = | ren_cost = | client = | owner = | landlord = <!-- or |operator= or |governing_body= --> | affiliation = | height = | architectural = | tip = | antenna_spire = | roof = | top_floor = | observatory = | diameter = | circumference = | weight = | other_dimensions = | structural_system = | material = | size = | floor_count = | floor_area = | elevator_count = | grounds_area = | architect = | architecture_firm = | developer = | engineer = | structural_engineer = | services_engineer = | civil_engineer = | other_designers = | quantity_surveyor = | main_contractor = | awards = | designations = | known_for = | ren_architect = | ren_firm = | ren_engineer = | ren_str_engineer = | ren_serv_engineer = | ren_civ_engineer = | ren_oth_designers = | ren_qty_surveyor = | ren_contractor = | ren_awards = | parking = | public_transit = | website = <!-- {{URL|example.com}} --> | embed = | embedded = | references = | footnotes = }} </syntaxhighlight> === Other options === ==== Record height ==== <syntaxhighlight lang="wikitext" style="overflow:auto"> | highest_prev = | highest_next = | highest_start = | highest_end = | highest_region = | highest_reflabel = </syntaxhighlight> ==== Hotels, hostels, shopping centers, and performance venues ==== '''Hotels and hostels''' <syntaxhighlight lang="wikitext" style="overflow:auto"> | hotel_chain = | number_of_rooms = <!-- or |number_of_units= --> | number_of_suites = | number_of_restaurants = | number_of_bars = | facilities = </syntaxhighlight> '''Shopping centers''' <syntaxhighlight lang="wikitext" style="overflow:auto"> | number_of_stores = | number_of_anchors = </syntaxhighlight> '''Seating''' <syntaxhighlight lang="wikitext" style="overflow:auto"> | seating_type = | seating_capacity = </syntaxhighlight> ==== Use as a child template ==== The '''embed''' parameter is used when embedding this infobox into another (see the [[Template:Infobox]] documentation which explains [[Template:Infobox/doc#Embedding|embedding]] and [[Template:Infobox/doc#Subboxes|subboxes]]). <syntaxhighlight lang="wikitext" style="overflow: auto;"> {{Infobox ABC | name = | <!-- etc. --> | embedded = <!-- or module= --> {{Infobox building | embed = yes | <!-- etc. --> }} }} </syntaxhighlight> ==== Embedding other templates ==== The '''embedded''' parameter is used for embedding other templates into this infobox (see [[Wikipedia:Infobox modules]]). <syntaxhighlight lang="wikitext" style="overflow: auto;"> {{Infobox building | name = | <!-- etc. --> | embedded = {{Infobox ABC | embed = yes <!-- or child=yes or subbox=yes--> | <!-- etc. --> }} }} </syntaxhighlight> == Examples == ===Example 1=== {{Infobox building | name = Palace of Justice of Brussels | native_name = {{native name|fr|Palais de Justice de Bruxelles}}<br />{{native name|nl|Justitiepaleis van Brussel}} | image = Palais de Justice from Hilton.jpg | image_caption = View from [[The Hotel Brussels]] (then Hilton) in 2009 | architectural_style = {{Flatlist| * [[Eclecticism|Eclectic]] * [[Neoclassical architecture|neoclassical]] }} | cost = 45 million [[Belgian franc]]s | address = {{lang|fr|Place Poelaert|italic=no}} / {{lang|nl|Poelaertplein|italic=no}} 1 | location_town = B-1000 [[City of Brussels]], [[Brussels|Brussels-Capital Region]] | location_country = [[Belgium]] | client = Belgian government | owner = [[Belgian federal government|Belgian government]] | current_tenants = Belgian court | coordinates = {{coord|50|50|12|N|4|21|06|E|type:landmark_region:BE|display=inline}} | construction_start_date = {{start date|1866|10|31}} | inauguration_date = 15 October 1883 | height = {{convert|104|m|ft|abbr=on}} | diameter = {{convert|160|x|150|m|ft|abbr=on}} | floor_area = {{convert|26,000|m2|sqft|abbr=on}} | architect = [[Joseph Poelaert]] | public_transit = '''[[Brussels metro|Metro]]''': [[Louise/Louiza metro station|Louise/Louiza station]], lines [[Brussels Metro line 2|2]] and [[Brussels Metro line 6|6]]<br/>'''[[Trams in Brussels|Tram]]''': Lines 92 and 94 }} <syntaxhighlight lang="wikitext" style="overflow:auto;"> {{Infobox building | name = Palace of Justice of Brussels | native_name = {{native name|fr|Palais de Justice de Bruxelles}}<br />{{native name|nl|Justitiepaleis van Brussel}} | image = Palais de Justice from Hilton.jpg | image_caption = View from [[The Hotel Brussels]] (then Hilton) in 2009 | architectural_style = {{Flatlist| * [[Eclecticism|Eclectic]] * [[Neoclassical architecture|neoclassical]] }} | cost = 45 million [[Belgian franc]]s | address = {{lang|fr|Place Poelaert|italic=no}} / {{lang|nl|Poelaertplein|italic=no}} 1 | location_town = B-1000 [[City of Brussels]], [[Brussels|Brussels-Capital Region]] | location_country = [[Belgium]] | client = Belgian government | owner = [[Belgian federal government|Belgian government]] | current_tenants = Belgian court | coordinates = {{coord|50|50|12|N|4|21|06|E|type:landmark_region:BE|display=inline}} | construction_start_date = {{start date|1866|10|31}} | inauguration_date = 15 October 1883 | height = {{convert|104|m|ft|abbr=on}} | diameter = {{convert|160|x|150|m|ft|abbr=on}} | floor_area = {{convert|26,000|m2|sqft|abbr=on}} | architect = [[Joseph Poelaert]] | public_transit = '''[[Brussels metro|Metro]]''': [[Louise/Louiza metro station|Louise/Louiza station]], lines [[Brussels Metro line 2|2]] and [[Brussels Metro line 6|6]]<br/>'''[[Trams in Brussels|Tram]]''': Lines 92 and 94 }} </syntaxhighlight> {{Clear}} === Example 2: embedded templates === {{Infobox building | name = Deming Armory | image = Deming Luna Mimbres Museum.jpg | image_alt = The red-brick front facade of the Deming Armory | image_caption = Deming Armory in 2009 | former_names = State Armory | alternate_names = Deming Luna Mimbres Museum | status = Used as a museum | building_type = Government [[Armory (military)|armory]] | architectural_style = Castellated style | address = 301 South Silver Avenue | location_town = [[Deming, New Mexico]] | location_country = United States | altitude = {{convert|4337|ft|abbr=on}} | current_tenants = Deming Luna Mimbres Museum | construction_start_date = {{start date|1915}} | completion_date = 1916 | cost = {{US$|17500}} | client = [[United States Department of the Army]] | owner = Luna County Historical Society, Inc. (current) | floor_count = 2 | floor_area = {{convert|14000|sqft|abbr=on}} | other_dimensions = {{convert|50|ft}} across x {{convert|132|ft}} deep | architect = Henry C. Trost | architecture_firm = [[Trost & Trost]] | main_contractor = W. W. Barracks | public_transit = {{station link|Amtrak|Deming}} {{ric|Amtrak}} | embedded = {{Infobox NRHP | embed = yes | name = Deming Armory | coordinates = {{coord|32|15|58|N|107|45|29|W|type:landmark_region:US-NM|display=inline}} | locmapin = New Mexico | map_alt = Located in New Mexico, in the southwest portion of the state | map_caption = Location in New Mexico | architect = [[Henry C. Trost]] | refnum = 83001624 | added = April 21, 1983 | designated_other1 = N.M. State Register of Cultural Properties | designated_other1_date = January 20, 1978 | designated_other1_number = 584 | designated_other1_num_position = bottom }} }} <syntaxhighlight lang="wikitext" style="overflow:auto;"> {{Infobox building | name = Deming Armory | image = Deming Luna Mimbres Museum.jpg | image_alt = The red-brick front facade of the Deming Armory | image_caption = Deming Armory in 2009 | former_names = State Armory | alternate_names = Deming Luna Mimbres Museum | status = Used as a museum | building_type = Government [[Armory (military)|armory]] | architectural_style = Castellated style | address = 301 South Silver Avenue | location_town = [[Deming, New Mexico]] | location_country = United States | altitude = {{convert|4337|ft|abbr=on}} | current_tenants = Deming Luna Mimbres Museum | construction_start_date = {{start date|1915}} | completion_date = 1916 | cost = {{US$|17500}} | client = [[United States Department of the Army]] | owner = Luna County Historical Society, Inc. (current) | floor_count = 2 | floor_area = {{convert|14000|sqft|abbr=on}} | other_dimensions = {{convert|50|ft}} across x {{convert|132|ft}} deep | architect = Henry C. Trost | architecture_firm = [[Trost & Trost]] | main_contractor = W. W. Barracks | public_transit = {{station link|Amtrak|Deming}} {{ric|Amtrak}} | embedded = {{Infobox NRHP | embed = yes | name = Deming Armory | coordinates = {{coord|32|15|58|N|107|45|29|W|type:landmark_region:US-NM|display=inline}} | locmapin = New Mexico | map_alt = Located in New Mexico, in the southwest portion of the state | map_caption = Location in New Mexico | architect = [[Henry C. Trost]] | refnum = 83001624 | added = April 21, 1983 | designated_other1 = N.M. State Register of Cultural Properties | designated_other1_date = January 20, 1978 | designated_other1_number = 584 | designated_other1_num_position = bottom }} }} </syntaxhighlight> {{Clear}} ==Parameters== {| class="wikitable" |- ! Field Name ! Required ! Description ! Values |- | name || {{yes}} || Name of building || wikitext |- | native_name || {{no}} || name in that country's official language(s), if other than English. || wikitext |- | native_name_lang || {{no}} || [[List of ISO 639-2 codes|ISO 639-2 code]] || use [[List of ISO 639-2 codes|ISO 639-2 code]], e.g. "fr" for French. If there is more than one native name, in different languages, enter those names using {{tl|lang}}, instead. |- | etymology || {{no}} || Thing (event, person, etc.) the building was named after |- | status || {{no}} || useful to show the construction status of new buildings. The keywords to the right can be used to produce the appropriate status: || *"built", "completed", "finished" or "complete" = Complete *"destroyed" = Destroyed *"demolished" = Demolished *"on hold" = On hold *"incomplete", "unfinished" or "under construction" = Under construction *"cancelled", "canceled", or "never built" = Never built *"topped out" or "topped-out" = Topped out *"planned" or "proposed" = Proposed *"approved" = Approved |- | image || {{no}} || Image of the building || filename |- | image_size || {{no}} || The image width in pixels. If not specified, the image uses ''frameless'' with ''upright=1.1'' which displays it at approximately 110% of the user's default thumbnail size (for most users the image will display at {{#expr:220*1.1 round -1}}px; for logged-in users who have changed the setting at [[Special:Preferences]] the displayed image could range from {{#expr:120*1.1 round -1}}px to {{#expr:400*1.1 round -1}}px). See also: [[Module:InfoboxImage]], [[WP:AUTOSIZE]], [[WP:EIS]], [[WP:IMGSIZE]], and [[MOS:IMGSIZE]] || number (with or without "px") |- | image_alt || {{no}} || Alt text for image, see [[WP:ALT]] || text |- | image_caption || {{no}} || Caption for image || wikitext (can contain links) |- | location || {{no}} || Location of the building || wikitext (can contain links), e.g., <nowiki>[[Joondalup, Western Australia]], [[Australia]], [[Las Vegas Strip]]</nowiki> |- | address || {{no}} || Address of the building || The address can be different from the location, especially when it is only a mailing address and does not represent the actual physical location. Generally address should be used except when the location and address are different. |- | location_town || {{no}} || Settlement where the building is located || wikitext (can contain links) |- | location_country || {{no}} || Country where the building is located || wikitext (can contain links) |- | coordinates || {{no}} || Geographic coordinates of location || See [[#Map and coordinates|map and coordinates]] for details |- | years_built || {{no}} || Dates of building construction || E.g.; <nowiki>2007{{ndash}}2009</nowiki> |- | groundbreaking_date || {{no}} || Date of the formal ground breaking, if any || E.g.; <nowiki>25 January 2007</nowiki> |- | construction_start_date || {{no}} || Date building construction started || E.g.; <nowiki>25 January 2007</nowiki> |- | construction_stop_date || {{no}} || Date building construction stopped or halted || E.g.; <nowiki>25 January 2007</nowiki> |- | completion_date || {{no}} || Completion date of construction if known || E.g.; <nowiki>25 January 2007</nowiki> |- | opened_date || {{no}} || Date of opening || E.g.; <nowiki>{{Start date|2007|01|25}}</nowiki> |- | relocated_date || {{no}} || Date of relocation || E.g.; <nowiki>25 January 2007</nowiki> |- | inauguration_date || {{no}} || Inauguration date if know || E.g.; <nowiki>25 January 2007</nowiki> |- | demolition_date || {{no}} || Date building was demolished || E.g.; <nowiki>25 January 2007</nowiki> |- | destruction_date || {{no}} || Date building was destroyed, generally by a natural event or war || E.g.; <nowiki>25 January 2007</nowiki> |- | cancelled_date || {{no}} || Date construction was cancelled || E.g.; <nowiki>25 January 2007</nowiki> |- | cancelled || {{no}} || Was the construction cancelled || {{yes}}, will set the status if no other status specified |- | topped_out_date || {{no}} || Date building reached final height || E.g.; <nowiki>25 January 2007</nowiki> |- | topped_out || {{no}} || Was the final height reached || {{yes}}, will set the status if no other status specified |- | architect || {{no}} || Name of original architect || wikitext (can contain links) |- | landlord || {{no}} || Name of current landlord || wikitext (can contain links) |- | owner || {{no}} || Name(s) of current owner(s) || wikitext (can contain links) |- | cost || {{no}} || Construction cost || wikitext (can contain links) |- |height || {{no}} || Generic height parameter || For best practice, use {{tl|convert}} in this field. |- | architectural || {{no}} || CTBUH height to the top of the building || For best practice, use {{tl|convert}}. |- | tip || {{no}} || CTBUH height to the tip of the building || For best practice, use {{tl|convert}}. |- | top_floor || {{no}} || CTBUH height to the floor level of the highest floor || For best practice, use {{tl|convert}}. |- | roof || {{no}} || CTBUH height to the top of the roof || For best practice, use {{tl|convert}}. |- | observatory || {{no}} || Height of observation deck || For best practice, use {{tl|convert}}. |- | antenna_spire || {{no}} || Height of highest point of antenna tower || For best practice, use {{tl|convert}}. |- | floor_area || {{no}} || Gross floor area of the building, expressed as a numerical value || For best practice, use {{tl|convert}}. |- | floor_count || {{no}} || Number of floors expressed as a numerical value || |- | seating_type || {{no}} |||| |- | seating_capacity || {{no}} || Numbers of seats available || |- | grounds_area || {{no}} || Area of associated land, in hectares, square metres or equivalent. Use {{tl|Convert}} if appropriate || |- | awards || {{no}} || Listed awards should meet the [[WP:N|notability criteria]] for its own non-[[WP:RDR|redirect]] article in the English Wikipedia. [[WP:RED|Red-linked entries]] are acceptable if the award's notability is [[WP:V|verifiable]], and it is reasonable to expect an article could be forthcoming in the future. This standard prevents the infobox award section from becoming an [[WP:IINFO|indiscriminate list]]. || |- | ren_awards || {{no}} || Listed renovation awards should meet the [[WP:N|notability criteria]] for its own non-[[WP:RDR|redirect]] article in the English Wikipedia. [[WP:RED|Red-linked entries]] are acceptable if the award's notability is [[WP:V|verifiable]], and it is reasonable to expect an article could be forthcoming in the future. This standard prevents the infobox award section from becoming an [[WP:IINFO|indiscriminate list]]. || |- | parking || {{no}} || Information on the building's own parking facilities (e.g. number of spaces or lots). Do ''not'' use for nearby parking unassociated with the building itself. || |- | public_transit || {{no}} || Information on nearby public transit options || |- | website || {{no}} || Website for building || <nowiki>{{URL|url.com.au}}</nowiki> |- | embed || {{no}} || ''Embed'' this infobox into another by using embed=yes || |- | embedded || {{no}} || Other templates to be ''embedded'' in this infobox. Templates with such capability include {{tl|Designation list}} and {{tl|Infobox NRHP}} (see [[:Category:Embeddable templates]]). || the code of the embedded template |- | references || {{no}} || Footnotes and citations for information within infobox || wikitext (can contain links) |- | style="text-align:center;" colspan="4" | '''Notes:''' Do not link to the same article more than once in the infobox. |- | highest_region || {{no}} || |- | highest_reflabel || {{no}} || Override the default reference label 'talleststatus', pointing to the reference marked with {{tlp|note label|2=''thatlabel''}}. |- | highest_prev || {{no}} || |- | highest_start || {{no}} || |- | highest_end || {{no}} || |- | highest_next || {{no}} || |} ===Height parameters=== The following parameters are provided for the height of buildings. They include parameters corresponding to methods used by the [[Council on Tall Buildings and Urban Habitat]] (CTBUH) to measure the height of tall buildings. CTBUH heights are measured from the level of the lowest, significant, open-air, pedestrian entrance of the building. Specify {{para|height}} with no other height-related parameters, or leave {{para|height}} blank and fill in one or more of the other parameters below. Use of {{para|height}} along with one of the other parameters below will place the page in {{cl|Pages using infobox building with parameter errors}}. {| class="wikitable" |- ! Parameter !! Description |- | height || Generic height parameter |- | architectural || (CTBUH) Height to the top of the building, inclusive of spires but excluding items such as flagpoles and antennae. This is the most commonly cited CTBUH measurement. |- | tip || (CTBUH) Height to the highest point of the building, including antennae, flagpoles, and technical equipment. |- | top_floor || (CTBUH) Height to the floor level of the highest floor that is occupied by building users on a consistent basis. |- | roof || (CTBUH) Height to top of roof. This category was removed from CTBUH criteria in 2009, but is included for historical data. |- | observatory || Height of observation deck. |- | antenna_spire || Height of the highest point of structures such as antenna towers. |} ===Map and coordinates=== ====Location maps==== The <code>coordinates=</code> parameter is used to display coordinates in the infobox, and optionally at the top of the page; use the {{tl|coord}} template. *The [[ISO 3166-1 alpha-2]] or [[ISO 3166-2]] region code can often be determined automatically, based on the <code>location_country=</code> parameter. <syntaxhighlight lang="wikitext" style="overflow:auto"> {{Infobox building ... | coordinates = <!-- Use the {{Coord}} template. --> | pushpin_map = <!-- Location name used for Template:Location map --> | pushpin_map_alt = <!-- Alternative text for map image, see WP:ALT for details --> | pushpin_map_caption = <!-- Text to be displayed below map; if the parameter is omitted then the caption will be "Marker text (location map name)" --> | pushpin_relief = <!-- Any non-blank value (yes, 1, etc.) will cause the template to display a relief map image, where available. --> | pushpin_label = <!-- Text to display on the map --> | pushpin_mark = <!-- Pin color for use on the map --> ... }} </syntaxhighlight> ===== Map type ===== A list of templates containing maps that may be used can be found at: * [[Special:PrefixIndex/Template:Location map]] A list of modules containing maps that may be used can be found at: * [[Special:PrefixIndex/Module:Location map/data/]] ===Mapframe maps=== {{Infobox mapframe/doc/parameters | onByDefault = yes, unless other map types have been used with {{para|pushpin_map}}, {{para|map_type}} or {{para|image_map}} | mapframe-frame-width = 250 | mapframe-wikidata = yes | mapframe-type = landmark }} == TemplateData == {{TemplateData header}} {{collapse top|title=TemplateData}} <templatedata> { "description": "This template may be used to summarise information about a building. See template documentation for more information.", "format": "{{_\n| ________________ = _\n}}\n", "params": { "name": { "label": "Name", "description": "Name of building", "type": "string", "required": false }, "native_name": { "label": "Native name", "description": "Name of building in native language", "type": "string", "required": false }, "native_name_lang": { "label": "Native name language", "description": "ISO 639-2 code", "type": "string", "required": false }, "former_names": { "label": "Former names", "description": "Former names", "type": "string", "required": false, "aliases": [ "former_name" ] }, "alternate_names": { "label": "Alternate names", "description": "Alternate names", "type": "string", "required": false, "aliases": [ "alternate_name" ] }, "status": { "label": "Status", "description": "useful to show the construction status of new buildings. The keywords to the right can be used to produce the appropriate colored status:", "type": "string", "required": false, "suggestedvalues": [ "complete", "destroyed", "demolished", "on hold", "under construction", "never built", "topped out", "proposed", "approved" ] }, "image": { "label": "Image", "description": "Image of the building", "type": "wiki-file-name", "required": false }, "image_alt": { "label": "Image alt", "description": "Text to display if image cannot be shown", "type": "string", "required": false, "aliases": [ "alt" ] }, "image_size": { "label": "Image size", "description": "Image size", "type": "number", "required": false }, "caption": { "label": "Caption", "description": "Caption for image", "type": "string", "required": false, "aliases": [ "image_caption" ] }, "location": { "label": "Location", "description": "Location of the building", "type": "string", "required": false }, "address": { "label": "Address", "description": "Address of the building", "type": "string", "required": false }, "location_town": { "label": "Town or City", "description": "Settlement where the building is located.", "type": "string", "required": false, "aliases": [ "location_city" ] }, "location_country": { "label": "Country", "description": "Country where the building is located", "type": "string", "required": false }, "coordinates": { "label": "Coordinates", "description": "coordinates", "type": "string", "required": false }, "years_built": { "label": "Years Built", "description": "Dates of building construction", "type": "string", "required": false }, "groundbreaking_date": { "label": "Groundbreaking date", "description": "Date of the formal ground breaking, if any", "type": "string", "required": false }, "completion_date": { "label": "Completion date", "description": "Completion date of construction if know", "type": "string", "required": false, "aliases": [ "est_completion" ] }, "opened_date": { "label": "Opened date", "description": "Date of opening", "type": "string", "required": false, "aliases": [ "opening_date" ] }, "inauguration_date": { "label": "Inauguration date", "description": "Inauguration date if known", "type": "string", "required": false }, "destruction_date": { "label": "Destruction date", "description": "Date building was destroyed, generally by a natural event or war", "type": "string", "required": false }, "architect": { "label": "Architect", "description": "Name of original architect", "type": "string", "required": false }, "landlord": { "label": "Landlord", "description": "Name of current landlord", "type": "string", "required": false, "aliases": [ "operator" ] }, "owner": { "label": "Owner", "description": "Name(s) of current owner(s)", "type": "string", "required": false }, "cost": { "label": "Cost", "description": "Construction cost", "type": "string", "required": false }, "floor_area": { "label": "Floor area", "description": "Gross floor area of the building, expressed as a numerical value", "type": "string", "required": false }, "top_floor": { "label": "Top floor", "description": "Number of the highest floor expressed as a numerical value", "type": "number", "required": false }, "floor_count": { "label": "Floor_count", "description": "Number of floors expressed as a numerical value", "type": "string", "required": false }, "awards": { "label": "Awards", "description": "listed awards should meet the&nbsp;notability criteria&nbsp;for its own non-redirectarticle in the English Wikipedia.&nbsp;Red-linked entries&nbsp;are acceptable if the award's notability is&nbsp;verifiable, and it is reasonable to expect an article could be forthcoming in the future. This standard prevents the infobox award section from becoming an&nbsp;indiscriminate list.", "type": "string", "required": false }, "ren_awards": { "label": "Ren_awards", "description": "listed awards should meet the&nbsp;notability criteria&nbsp;for its own non-redirectarticle in the English Wikipedia.&nbsp;Red-linked entries&nbsp;are acceptable if the award's notability is&nbsp;verifiable, and it is reasonable to expect an article could be forthcoming in the future. This standard prevents the infobox award section from becoming an&nbsp;indiscriminate list.", "type": "string", "required": false }, "parking": { "label": "Parking", "description": "parking", "type": "string", "required": false }, "website": { "label": "Website", "description": "Website for building.", "type": "string", "required": false }, "embed": { "label": "Embed", "description": "Embed this infobox into another by using embed=yes", "type": "string", "required": false }, "embedded": { "label": "Embedded", "description": "Other templates to be embedded in this infobox. Templates with such capability include {{Designation list}} and {{Infobox NRHP}}", "type": "string", "required": false }, "references": { "label": "References", "description": "Footnotes and citations for information within infobox", "type": "string", "required": false }, "highest_region": { "label": "Highest_region", "type": "string", "required": false }, "highest_reflabel": { "label": "Highest_reflabel", "description": "Override the default reference label 'talleststatus', pointing to the reference marked with&nbsp;{{note label|thatlabel}}.", "type": "string", "required": false }, "highest_prev": { "label": "Highest_prev", "type": "string", "required": false }, "highest_start": { "label": "Highest_start", "type": "string", "required": false }, "highest_end": { "label": "Highest_end", "type": "string", "required": false }, "highest_next": { "label": "Highest_next", "type": "string", "required": false }, "map_caption": { "label": "Map caption", "description": "map caption", "type": "string", "required": false, "aliases": [ "pushpin_map_caption" ] }, "map_dot_mark": { "label": "Map dot mark", "description": "Pin color for use on the map. See [[:Commons:Category:Map pointers, dotset 1]].", "type": "string", "required": false }, "altitude": { "label": "Altitude", "description": "altitude", "type": "string", "required": false }, "building_type": { "label": "Building_type", "description": "building_type", "type": "string", "required": false }, "architectural_style": { "label": "Architectural_style", "description": "architectural_style", "type": "string", "required": false }, "structural_system": { "label": "Structural_system", "description": "structural_system", "type": "string", "required": false }, "ren_cost": { "label": "Ren_cost", "description": "ren_cost", "type": "string", "required": false }, "client": { "label": "Client", "description": "client", "type": "string", "required": false }, "current_tenants": { "label": "Current_tenants", "description": "current_tenants", "type": "string", "required": false }, "renovation_date": { "label": "Renovation_date", "description": "renovation_date", "type": "string", "required": false }, "height": { "label": "Height", "description": "height", "type": "string", "required": false }, "architectural": { "label": "Architectural", "description": "architectural", "type": "string", "required": false }, "tip": { "label": "Tip", "description": "tip", "type": "string", "required": false }, "antenna_spire": { "label": "Antenna_spire", "description": "antenna_spire", "type": "string", "required": false }, "roof": { "label": "Roof", "description": "roof", "type": "string", "required": false }, "observatory": { "label": "Observatory", "description": "observatory", "type": "string", "required": false }, "other_dimensions": { "label": "Other_dimensions", "description": "other_dimensions", "type": "string", "required": false }, "seating_type": { "label": "Seating_type", "description": "seating_type", "type": "string", "required": false }, "seating_capacity": { "label": "Seating_capacity", "description": "seating_capacity", "type": "string", "required": false, "aliases": [ "capacity" ] }, "elevator_count": { "label": "Elevator_count", "description": "elevator_count", "type": "string", "required": false }, "architecture_firm": { "label": "Architecture_firm", "description": "architecture_firm", "type": "string", "required": false }, "structural_engineer": { "label": "Structural_engineer", "description": "structural_engineer", "type": "string", "required": false }, "services_engineer": { "label": "Services_engineer", "description": "services_engineer", "type": "string", "required": false }, "civil_engineer": { "label": "Civil_engineer", "description": "civil_engineer", "type": "string", "required": false }, "other_designers": { "label": "Other_designers", "description": "other_designers", "type": "string", "required": false }, "quantity_surveyor": { "label": "Quantity_surveyor", "description": "quantity_surveyor", "type": "string", "required": false }, "main_contractor": { "label": "Main_contractor", "description": "main_contractor", "type": "string", "required": false, "aliases": [ "main_contractors" ] }, "designations": { "label": "Designations", "description": "designations", "type": "string", "required": false }, "ren_architect": { "label": "Renovation architect", "description": "Architect for the building's renovation", "type": "string", "required": false }, "ren_firm": { "label": "Ren_firm", "description": "Company that renovated the building", "type": "string", "required": false }, "ren_str_engineer": { "label": "Ren_str_engineer", "description": "Structural engineer for the building's renovation", "type": "string", "required": false }, "ren_serv_engineer": { "label": "Ren_serv_engineer", "description": "Service engineer for the building's renovation", "type": "string", "required": false }, "ren_civ_engineer": { "label": "Ren_civ_engineer", "description": "Civil engineer for the building's renovation", "type": "string", "required": false }, "ren_oth_designers": { "label": "Ren_oth_designers", "description": "Other designers for the building's renovation", "type": "string", "required": false }, "ren_qty_surveyor": { "label": "Ren_qty_surveyor", "description": "Quantity surveyor for the building's renovation", "type": "string", "required": false }, "public_transit": { "label": "Public transit", "description": "Public transit access to the building", "example": "{{LACMTA link logo}} '''Bus''': [[Metro Local (Los Angeles County)#234|234]], [[Metro Rapid#734|734]] <br/> '''Train''': [[Getty Center Tram]]", "type": "string" }, "logo": {}, "logo_size": {}, "logo_upright": {}, "logo_alt": {}, "logo_caption": {}, "image_upright": {}, "mapframe-zoom": {}, "etymology": {}, "hotel_chain": { "aliases": [ "chain" ] }, "classification": {}, "closing_date": {}, "governing_body": {}, "affiliation": {}, "cancelled": { "aliases": [ "canceled" ] }, "topped_out": {}, "grid_name": {}, "grid_position": {}, "namesake": {}, "relocated_date": {}, "diameter": {}, "circumference": {}, "weight": {}, "material": {}, "size": {}, "grounds_area": {}, "developer": {}, "engineer": {}, "known_for": {}, "ren_engineer": {}, "ren_contractor": {}, "number_of_stores": {}, "number_of_anchors": {}, "number_of_suites": {}, "number_of_restaurants": {}, "number_of_bars": {}, "facilities": {}, "belowstyle": {}, "footnotes": {}, "topped_out_date": {}, "mapframe-frame-width": {}, "pushpin_mark": {}, "construction_start_date": { "label": "Start date", "description": "Date building construction started", "type": "string" }, "construction_stop_date": { "label": "Stop date", "description": "Date building construction stopped or halted", "type": "string" }, "pushpin_map": { "aliases": [ "image_map" ], "label": "Map_type", "description": "map_type", "type": "string" }, "pushpin_map_alt": { "label": "Map_alt", "description": "Text to display if the map image cannot be shown", "type": "string" }, "pushpin_label": { "label": "Map dot label", "description": "Text to display on the map", "type": "string" }, "pushpin_relief": { "label": "Relief", "description": "relief", "type": "string" }, "pushpin_mapsize": {}, "number_of_units": {}, "number_of_rooms": { "label": "Rooms", "description": "How many rooms the building has", "type": "number" }, "demolished_date": { "label": "Demolition date", "description": "Date building was demolished", "type": "string" } }, "paramOrder": [ "name", "native_name", "native_name_lang", "former_names", "alternate_names", "awards", "image", "image_alt", "image_size", "caption", "location", "address", "location_town", "location_country", "coordinates", "altitude", "status", "years_built", "groundbreaking_date", "construction_start_date", "construction_stop_date", "completion_date", "opened_date", "inauguration_date", "demolished_date", "destruction_date", "architect", "landlord", "owner", "cost", "floor_area", "top_floor", "floor_count", "parking", "public_transit", "embed", "embedded", "references", "highest_region", "highest_reflabel", "highest_prev", "highest_start", "highest_end", "highest_next", "pushpin_map", "pushpin_map_alt", "map_caption", "pushpin_label", "map_dot_mark", "pushpin_relief", "building_type", "architectural_style", "structural_system", "client", "current_tenants", "height", "architectural", "tip", "antenna_spire", "roof", "observatory", "other_dimensions", "seating_type", "seating_capacity", "elevator_count", "architecture_firm", "structural_engineer", "services_engineer", "civil_engineer", "other_designers", "quantity_surveyor", "main_contractor", "designations", "ren_architect", "renovation_date", "ren_awards", "ren_firm", "ren_cost", "ren_str_engineer", "ren_serv_engineer", "ren_civ_engineer", "ren_oth_designers", "ren_qty_surveyor", "ren_engineer", "ren_contractor", "logo", "logo_size", "logo_upright", "logo_alt", "logo_caption", "image_upright", "pushpin_mapsize", "etymology", "hotel_chain", "classification", "closing_date", "governing_body", "affiliation", "cancelled", "topped_out", "topped_out_date", "grid_name", "grid_position", "namesake", "relocated_date", "diameter", "circumference", "weight", "material", "size", "grounds_area", "developer", "engineer", "known_for", "number_of_stores", "number_of_anchors", "number_of_units", "number_of_rooms", "number_of_suites", "number_of_restaurants", "number_of_bars", "facilities", "belowstyle", "website", "footnotes", "mapframe-zoom", "mapframe-frame-width", "pushpin_mark" ] } </templatedata> {{collapse bottom}} ==Microformat== {{UF-hcard-geo}} == Tracking categories == {{infobox tracking categories}} * {{clc|Pages using infobox building with parameter errors}} * {{clc|Pages using infobox building with topped out}} * {{clc|Pages using infobox building with cancelled}} ==Redirects== {{columns-list|colwidth=30em| #{{tl|infobox bathhouse}} #{{tl|infobox historic building}} #{{tl|infobox hostel}} #{{tl|infobox hotel}} #{{tl|infobox house}} #{{tl|infobox modern building}} #{{tl|infobox skyscraper}} }} ==See also== {{Buildings and structures infobox templates}} <includeonly>{{Sandbox other|| <!--Categories below this line, please; interwikis at Wikidata--> [[Category:Buildings and structures infobox templates| ]] [[Category:Infobox templates with module parameter|Building]] [[Category:Embeddable templates]] [[Category:Templates that add a tracking category]] [[Category:Templates that generate named references]] }}</includeonly> 0opmiu294wx4dqgylnm2ifcpn3fma1o Module:Infobox dim/data 828 176084 746323 2024-10-07T18:00:28Z en>MusikBot II 0 Protected "[[Module:Infobox dim/data]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 27202 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 746323 Scribunto text/plain local typeToDim = { -- typical size of object (in km) country = 2000, satellite = 2000, state = 600, adm1st = 200, adm2nd = 60, adm3rd = 20, city = 20, isle = 20, mountain = 20, river = 20, waterbody = 20, event = 10, forest = 10, glacier = 10, airport = 6, landmark = 2, railwaystation = 2, edu = 2, pass = 2, camera = 2 } return typeToDim q8gk4m0g59kpt1szm28fnnl9cyh4rhi 746324 746323 2026-06-12T21:56:21Z Robertsky 51025 1 revision imported from [[:en:Module:Infobox_dim/data]] 746323 Scribunto text/plain local typeToDim = { -- typical size of object (in km) country = 2000, satellite = 2000, state = 600, adm1st = 200, adm2nd = 60, adm3rd = 20, city = 20, isle = 20, mountain = 20, river = 20, waterbody = 20, event = 10, forest = 10, glacier = 10, airport = 6, landmark = 2, railwaystation = 2, edu = 2, pass = 2, camera = 2 } return typeToDim q8gk4m0g59kpt1szm28fnnl9cyh4rhi Module:Link if exists 828 176085 746325 2025-11-25T02:37:32Z en>Hike395 0 Restored revision 1323871754 by [[Special:Contributions/Hike395|Hike395]] ([[User talk:Hike395|talk]]): Restore after fixing [[Template:Category link if exists]] 746325 Scribunto text/plain require('strict') local p = {} local function titleExistsUnprotected(titleObject) return titleObject.exists end -- test for title existing -- if we get an error accessing titleObject.exists, assume it doesn't exist local function titleExists(titleObject) local success, exists = pcall(titleExistsUnprotected, titleObject) return success and exists end function p._main(args) local title = args[1] if not title then return title end local display = args[2] or title title = args.prefix and args.prefix..':'..title or title local titleObject = mw.title.new(title, args.nsp) local result = '' if titleObject and titleExists(titleObject) then -- use prefix only if args[2] is empty/false display = args[2] or title result = result..'[[' result = result..(titleObject.namespace ~= 0 and ':' or '') result = result..(titleObject.fullText ~= display and titleObject.fullText..'|' or '') result = result..display..']]' elseif not args.hide_display then result = result..(args.color and '<span style="color:'..args.color..'">' or '') result = result..display result = result..(args.color and '</span>' or '') end return result end function p.main(frame) local getArgs = require('Module:Arguments').getArgs local args = getArgs(frame) return p._main(args) or "" end return p 0oaig3kqduvuak0u5ultcaih17gwt73 746326 746325 2026-06-12T21:56:21Z Robertsky 51025 1 revision imported from [[:en:Module:Link_if_exists]] 746325 Scribunto text/plain require('strict') local p = {} local function titleExistsUnprotected(titleObject) return titleObject.exists end -- test for title existing -- if we get an error accessing titleObject.exists, assume it doesn't exist local function titleExists(titleObject) local success, exists = pcall(titleExistsUnprotected, titleObject) return success and exists end function p._main(args) local title = args[1] if not title then return title end local display = args[2] or title title = args.prefix and args.prefix..':'..title or title local titleObject = mw.title.new(title, args.nsp) local result = '' if titleObject and titleExists(titleObject) then -- use prefix only if args[2] is empty/false display = args[2] or title result = result..'[[' result = result..(titleObject.namespace ~= 0 and ':' or '') result = result..(titleObject.fullText ~= display and titleObject.fullText..'|' or '') result = result..display..']]' elseif not args.hide_display then result = result..(args.color and '<span style="color:'..args.color..'">' or '') result = result..display result = result..(args.color and '</span>' or '') end return result end function p.main(frame) local getArgs = require('Module:Arguments').getArgs local args = getArgs(frame) return p._main(args) or "" end return p 0oaig3kqduvuak0u5ultcaih17gwt73 Module:Designation 828 176086 746327 2026-03-26T22:22:00Z en>MSGJ 0 default to displaying number in bottom only in infobox 746327 Scribunto text/plain require('strict') local p = {} local sandbox-- = '/sandbox' -- COMMENT OUT this defintion on the live version local validate = function(args) local former = false if args.delisted=='yes' then former = true end local par if args and args[1] and args[1]~='' then par = args[1]:lower() if par:sub(1, 6)=='former' then former = true par = par:sub(7) -- strip off "former" from start end local list = mw.loadJsonData('Module:Designation/list' .. (sandbox or '')) if list[par] then -- lookup not needed return list[par], former else -- attempt lookup local lookup = mw.loadJsonData('Module:Designation/lookup' .. (sandbox or '')) if lookup[par] then -- successful lookup par = lookup[par] return list[par], former else local category = mw.title.getCurrentTitle().namespace==0 and '[[Category:Articles using Template:Designation with invalid designation]]' or '' return 'Invalid designation' .. category end end else return 'No parameter' end end local get_data = function(frame) local getArgs = require('Module:Arguments').getArgs local args = getArgs(frame, {wrappers = { 'Template:Designation', 'Template:Designation/text', 'Template:Designation/colour', 'Template:Designation/colour2', 'Template:Designation/divbox', 'Template:Designation/abbreviation' }}) return validate(args) end local text = function(frame, data, former) local text = data.text if data.lang then text = frame:expandTemplate{title = 'lang', args = { code = data.lang, text = text }} end return text and ((former and 'Former ' or '') .. text) end p.text = function(frame) local data, former = get_data(frame) if type(data)=='string' then return data end return text(frame, data, former) end local colour = function(data, former, index) local color if former then color = 'DDDDDD' elseif data[index] then color = data[index] else color = 'A8EDEF' -- default colour end return color and ('#' .. color) end p.color = function(frame) local data, former = get_data(frame) if type(data)=='string' then return data end return mw.text.nowiki(colour(data, former, 'col')) end p.color2 = function(frame) local data, former = get_data(frame) if type(data)=='string' then return data end return mw.text.nowiki(colour(data, former, 'col2')) end p.abbr = function(frame) local data, former = get_data(frame) if type(data)=='string' then return data end return former and '???' or data.abbr or '???' end local box = function(data, color, text) local div = mw.html.create('div') :css('line-height', '1.5') :css('text-align', 'center') if type(data)=='string' then local invalid = mw.html.create('span') :css('color', 'red') :wikitext('Error: ' .. data) div:node(invalid) else div:css('border-style', 'solid') :css('border-width', '4px') :css('border-color', color) :wikitext(text) end return div end p.divbox = function(frame) local data, former = get_data(frame) local color = colour(data, former, 'col2') local text = text(frame, data, former) return tostring(box(data, color, text)) end p.doc_table = function(frame) local scope = frame.args and frame.args.scope local scopes = {} for s in mw.text.gsplit(scope, ",", true) do scopes[mw.text.trim(s:lower())] = true end local lookup = mw.loadJsonData('Module:Designation/lookup' .. (sandbox or '')) local rev_lookup = {} for alias, code in pairs(lookup) do if rev_lookup[code] then table.insert(rev_lookup[code], alias) else rev_lookup[code] = {alias} end end local list = mw.loadJsonData('Module:Designation/list' .. (sandbox or '')) local header = mw.html.create('tr') :tag('th'):wikitext('Code'):done() :tag('th'):wikitext('Designation'):done() :tag('th'):css('width', '250px'):wikitext('Bordered version'):done() :tag('th'):wikitext('Scope'):done() :tag('th'):wikitext('Aliases'):done() local tab = mw.html.create('table') :addClass('wikitable') :addClass('sortable') :node(header) for code, data in pairs(list) do if scopes[data.scope:lower()] then local des = mw.html.create('td') :css('text-align', 'center') :css('background', '#' .. (data.col or 'A8EDEF')) :wikitext(data.text) local border = mw.html.create('td') :node(box(data, '#'..(data.col2 or 'A8EDEF'), data.text)) local row = mw.html.create('tr') :tag('th'):wikitext(code):done() :node(des) :node(border) :tag('td'):css('text-align', 'center'):wikitext(data.scope):done() :tag('td'):wikitext(rev_lookup[code] and table.concat(rev_lookup[code], ', ')):done() tab:node(row) end end return tostring(tab) end local check_params = function(args, n) local desp = {root = args['designated_other' .. n]} local suffixes = {'name', 'color', 'textcolor', 'link', 'num_position', 'number', 'abbr'} for _, s in ipairs(suffixes) do desp[s] = args['designated_other' .. n .. '_' .. s] end local data = desp.root and validate{[1]=desp.root} return desp, data end p.header = function(frame) local desp, data = check_params(frame:getParent().args, frame.args[1]) local makediv = function(text, bgcolor, num, textcolor) local autolink = require('Module:Link if exists')._main local link = autolink{[1]=text} local span = mw.html.create('span') :css('color', textcolor) :wikitext(link) local div = mw.html.create('div') :css('width', '100%') :css('text-align', 'center') :css('line-height', '1.5') :css('color', 'var(--color-base)') :css('background', bgcolor) :node(span) :wikitext(num) return tostring(div) end local num = '' local position = desp.num_position and desp.num_position:lower() if desp.number and desp.number~='' and (position=='both' or position=='top') then local abbr = frame:expandTemplate{title = 'abbr', args = {[1]='No.', [2]='Number'}} num = '&nbsp;' .. abbr .. '&nbsp;' .. desp.number end if data and type(data)=='table' then return makediv(data.text, '#' .. (data.col or 'A8EDEF'), num) elseif desp.name then return makediv(desp.name, desp.color or 'FFFFFF', num, desp.textcolor) end end p.label = function(frame) local desp, data = check_params(frame:getParent().args, frame.args[1]) local abbr = (data and data.abbr) or desp.abbr or '???' local category = abbr=='???' and mw.title.getCurrentTitle().namespace==0 and '[[Category:Articles using Template:Designation with undefined abbreviation]]' or '' return frame.args[2] .. ' ' .. abbr .. category end p.number = function(frame) local desp, data = check_params(frame:getParent().args, frame.args[1]) local out = '' local position = desp.num_position and desp.num_position:lower() if position~='top' then local noabbr = frame:expandTemplate{title = 'abbr', args = {[1]='No.', [2]='Number'}} local abbr = data and data.abbr or desp.abbr or '???' local category = abbr=='???' and mw.title.getCurrentTitle().namespace==0 and '[[Category:Articles using Template:Designation with undefined abbreviation]]' or '' out = abbr .. '&nbsp;' .. noabbr .. category end return out end return p q2q1vuo6if0moemom2sifd1yfq169dy 746328 746327 2026-06-12T21:56:21Z Robertsky 51025 1 revision imported from [[:en:Module:Designation]] 746327 Scribunto text/plain require('strict') local p = {} local sandbox-- = '/sandbox' -- COMMENT OUT this defintion on the live version local validate = function(args) local former = false if args.delisted=='yes' then former = true end local par if args and args[1] and args[1]~='' then par = args[1]:lower() if par:sub(1, 6)=='former' then former = true par = par:sub(7) -- strip off "former" from start end local list = mw.loadJsonData('Module:Designation/list' .. (sandbox or '')) if list[par] then -- lookup not needed return list[par], former else -- attempt lookup local lookup = mw.loadJsonData('Module:Designation/lookup' .. (sandbox or '')) if lookup[par] then -- successful lookup par = lookup[par] return list[par], former else local category = mw.title.getCurrentTitle().namespace==0 and '[[Category:Articles using Template:Designation with invalid designation]]' or '' return 'Invalid designation' .. category end end else return 'No parameter' end end local get_data = function(frame) local getArgs = require('Module:Arguments').getArgs local args = getArgs(frame, {wrappers = { 'Template:Designation', 'Template:Designation/text', 'Template:Designation/colour', 'Template:Designation/colour2', 'Template:Designation/divbox', 'Template:Designation/abbreviation' }}) return validate(args) end local text = function(frame, data, former) local text = data.text if data.lang then text = frame:expandTemplate{title = 'lang', args = { code = data.lang, text = text }} end return text and ((former and 'Former ' or '') .. text) end p.text = function(frame) local data, former = get_data(frame) if type(data)=='string' then return data end return text(frame, data, former) end local colour = function(data, former, index) local color if former then color = 'DDDDDD' elseif data[index] then color = data[index] else color = 'A8EDEF' -- default colour end return color and ('#' .. color) end p.color = function(frame) local data, former = get_data(frame) if type(data)=='string' then return data end return mw.text.nowiki(colour(data, former, 'col')) end p.color2 = function(frame) local data, former = get_data(frame) if type(data)=='string' then return data end return mw.text.nowiki(colour(data, former, 'col2')) end p.abbr = function(frame) local data, former = get_data(frame) if type(data)=='string' then return data end return former and '???' or data.abbr or '???' end local box = function(data, color, text) local div = mw.html.create('div') :css('line-height', '1.5') :css('text-align', 'center') if type(data)=='string' then local invalid = mw.html.create('span') :css('color', 'red') :wikitext('Error: ' .. data) div:node(invalid) else div:css('border-style', 'solid') :css('border-width', '4px') :css('border-color', color) :wikitext(text) end return div end p.divbox = function(frame) local data, former = get_data(frame) local color = colour(data, former, 'col2') local text = text(frame, data, former) return tostring(box(data, color, text)) end p.doc_table = function(frame) local scope = frame.args and frame.args.scope local scopes = {} for s in mw.text.gsplit(scope, ",", true) do scopes[mw.text.trim(s:lower())] = true end local lookup = mw.loadJsonData('Module:Designation/lookup' .. (sandbox or '')) local rev_lookup = {} for alias, code in pairs(lookup) do if rev_lookup[code] then table.insert(rev_lookup[code], alias) else rev_lookup[code] = {alias} end end local list = mw.loadJsonData('Module:Designation/list' .. (sandbox or '')) local header = mw.html.create('tr') :tag('th'):wikitext('Code'):done() :tag('th'):wikitext('Designation'):done() :tag('th'):css('width', '250px'):wikitext('Bordered version'):done() :tag('th'):wikitext('Scope'):done() :tag('th'):wikitext('Aliases'):done() local tab = mw.html.create('table') :addClass('wikitable') :addClass('sortable') :node(header) for code, data in pairs(list) do if scopes[data.scope:lower()] then local des = mw.html.create('td') :css('text-align', 'center') :css('background', '#' .. (data.col or 'A8EDEF')) :wikitext(data.text) local border = mw.html.create('td') :node(box(data, '#'..(data.col2 or 'A8EDEF'), data.text)) local row = mw.html.create('tr') :tag('th'):wikitext(code):done() :node(des) :node(border) :tag('td'):css('text-align', 'center'):wikitext(data.scope):done() :tag('td'):wikitext(rev_lookup[code] and table.concat(rev_lookup[code], ', ')):done() tab:node(row) end end return tostring(tab) end local check_params = function(args, n) local desp = {root = args['designated_other' .. n]} local suffixes = {'name', 'color', 'textcolor', 'link', 'num_position', 'number', 'abbr'} for _, s in ipairs(suffixes) do desp[s] = args['designated_other' .. n .. '_' .. s] end local data = desp.root and validate{[1]=desp.root} return desp, data end p.header = function(frame) local desp, data = check_params(frame:getParent().args, frame.args[1]) local makediv = function(text, bgcolor, num, textcolor) local autolink = require('Module:Link if exists')._main local link = autolink{[1]=text} local span = mw.html.create('span') :css('color', textcolor) :wikitext(link) local div = mw.html.create('div') :css('width', '100%') :css('text-align', 'center') :css('line-height', '1.5') :css('color', 'var(--color-base)') :css('background', bgcolor) :node(span) :wikitext(num) return tostring(div) end local num = '' local position = desp.num_position and desp.num_position:lower() if desp.number and desp.number~='' and (position=='both' or position=='top') then local abbr = frame:expandTemplate{title = 'abbr', args = {[1]='No.', [2]='Number'}} num = '&nbsp;' .. abbr .. '&nbsp;' .. desp.number end if data and type(data)=='table' then return makediv(data.text, '#' .. (data.col or 'A8EDEF'), num) elseif desp.name then return makediv(desp.name, desp.color or 'FFFFFF', num, desp.textcolor) end end p.label = function(frame) local desp, data = check_params(frame:getParent().args, frame.args[1]) local abbr = (data and data.abbr) or desp.abbr or '???' local category = abbr=='???' and mw.title.getCurrentTitle().namespace==0 and '[[Category:Articles using Template:Designation with undefined abbreviation]]' or '' return frame.args[2] .. ' ' .. abbr .. category end p.number = function(frame) local desp, data = check_params(frame:getParent().args, frame.args[1]) local out = '' local position = desp.num_position and desp.num_position:lower() if position~='top' then local noabbr = frame:expandTemplate{title = 'abbr', args = {[1]='No.', [2]='Number'}} local abbr = data and data.abbr or desp.abbr or '???' local category = abbr=='???' and mw.title.getCurrentTitle().namespace==0 and '[[Category:Articles using Template:Designation with undefined abbreviation]]' or '' out = abbr .. '&nbsp;' .. noabbr .. category end return out end return p q2q1vuo6if0moemom2sifd1yfq169dy Module:Designation/list 828 176087 746329 2026-05-07T11:40:10Z en>MSGJ 0 update color for KONS 746329 json application/json { "whs": { "text": "[[World Heritage Site|UNESCO World Heritage Site]]", "abbr": "WHS", "col": "FFE978", "col2": "0177D3", "scope": "Global" }, "iucnia": { "text": "[[IUCN]] Category Ia ([[Nature reserve|Strict Nature Reserve]])", "abbr": "IUCN Ia", "col": "E7BFAD", "col2": "E7AF97", "scope": "Global" }, "iucnib": { "text": "[[IUCN]] Category Ib ([[Wilderness Area]])", "abbr": "IUCN Ib", "col": "DACAA5", "col2": "DACAA5", "scope": "Global" }, "iucnii": { "text": "[[IUCN]] Category II ([[National Park]])", "abbr": "IUCN II", "col": "CDE5B2", "col2": "CDE5B2", "scope": "Global" }, "iucniii": { "text": "[[IUCN]] Category III ([[Natural Monument]])", "abbr": "IUCN III", "col": "BFFFBF", "col2": "BFFFBF", "scope": "Global" }, "iucniv": { "text": "[[IUCN]] Category IV (Habitat/Species Management Area)", "abbr": "IUCN IV", "col": "B2E5CD", "col2": "B2E5CD", "scope": "Global" }, "iucnv": { "text": "[[IUCN]] Category V (Protected Landscape/Seascape)", "abbr": "IUCN V", "col": "A5CADA", "col2": "A5CADA", "scope": "Global" }, "iucnvi": { "text": "[[IUCN]] Category VI (Managed Resource Protected Area)", "abbr": "IUCN VI", "col": "A8BDEC", "col2": "A8BDEC", "scope": "Global" }, "ramsar": { "text": "[[Ramsar Convention|Ramsar Wetland]]", "col": "8DE3D2", "col2": "8DE3D2", "scope": "Global" }, "hcel": { "text": "[[List of Historic Civil Engineering Landmarks|Historic Civil Engineering Landmark]]", "col2": "AAAAAA", "scope": "Global" }, "hmel": { "text": "[[List of Historic Mechanical Engineering Landmarks|Historic Mechanical Engineering Landmark]]", "col2": "AAAAAA", "scope": "Global" }, "kons": { "text": "[[Commission to Preserve National Monuments of Bosnia and Herzegovina|KONS of Bosnia and Herzegovina]]", "col": "A8BDEC", "col2": "CCAA02", "scope": "Bosnia and Herzegovina" }, "cmoa": { "text": "[[Cultural Monument of Albania]]", "abbr": "CMOA", "col": "B2E5CD", "col2": "CC3333", "scope": "Albania" }, "ncha": { "text": "[[National Cultural Heritage of Antigua and Barbuda]]", "col": "0072C6", "col2": "0072C6", "scope": "Antigua and Barbuda" }, "hsab": { "text": "[[Historical Site of Antigua and Barbuda]]", "col": "0072C6", "col2": "0072C6", "scope": "Antigua and Barbuda" }, "nhma": { "text": "[[National Historic Monument of Argentina]]", "abbr": "NHMA", "col": "A5CADA", "col2": "75AADB", "scope": "Argentina" }, "anhl": { "text": "[[Australian National Heritage List]]", "col": "CDE5B2", "col2": "CDE5B2", "scope": "Australia" }, "cwlthl": { "text": "[[Commonwealth Heritage List]]", "col": "FFE978", "col2": "FFE978", "scope": "Australia" }, "rne": { "text": "[[Register of the National Estate]]", "col": "FFC0CB", "col2": "FF0000", "scope": "Australia" }, "nhhb": { "text": "[[National Historic Heritage of Brazil]]", "col": "CDE5B2", "col2": "00A859", "scope": "Brazil" }, "nhsc": { "text": "[[National Historic Sites of Canada|National Historic Site of Canada]]", "abbr": "NHSC", "col": "FFC0CB", "col2": "FF0000", "scope": "Canada" }, "hrsc": { "text": "[[Heritage Railway Stations Protection Act|Heritage Railway Station (Canada)]]", "col2": "FF3333", "scope": "Canada" }, "mchs": { "text": "[[Major cultural heritage sites under national-level protection]]", "col2": "CD071E", "scope": "China" }, "pnvc": { "text": "[[Register of Protected Natural Values of Croatia|Protected Natural Value of Croatia]]", "abbr": "PNVC", "col": "FFE978", "col2": "00247D", "scope": "Croatia" }, "cgoc": { "text": "[[Register of Cultural Goods of Croatia|Cultural Good of Croatia]]", "abbr": "CGOC", "col": "DACAA5", "col2": "CC3333", "scope": "Croatia" }, "ncmcr": { "text": "[[National Cultural Monument of the Czech Republic]]", "col": "A8BDEC", "col2": "D7141A", "scope": "Czech Republic" }, "nrhpg": { "text": "[[National Register of Historic Parks and Gardens]]", "abbr": "NRHPG", "col": "A5CADA", "col2": "1E8C00", "scope": "England" }, "mh": { "text": "[[Monument historique]]", "lang": "fr", "abbr": "MH", "col": "A8BDEC", "col2": "0055A4", "scope": "France" }, "chmg": { "text": "[[List of Cultural Heritage Monuments of Georgia|Cultural Heritage Monument of Georgia]]", "col": "A5CADA", "col2": "FF0000", "scope": "Georgia (country)" }, "icmns": { "text": "[[Immovable Cultural Monuments of National Significance|Immovable Cultural Monument of National Significance of Georgia]]", "col": "A5CADA", "col2": "FF0000", "scope": "Georgia (country)" }, "mani": { "text": "[[Monuments of National Importance (India)|Monument of National Importance]]", "col": "F4C430", "col2": "FF7722", "scope": "India" }, "inhl": { "text": "[[Iran National Heritage List]]", "col": "C3B091", "col2": "C3B091", "scope": "Iran" }, "inmon": { "text": "[[National monument (Ireland)|National monument of Ireland]]", "abbr": "INMON", "col": "BFFFBF", "col2": "FF7900", "scope": "Ireland" }, "ntoj": { "text": "[[National Treasures of Japan|National Treasure of Japan]]", "abbr": "NTOJ", "col": "FFC0CB", "col2": "FF0000", "scope": "Japan" }, "chile": { "text": "[[National Monuments of Chile|National Monument of Chile]]", "col": "B2E5CD", "col2": "FF0000", "scope": "Chile" }, "cmll": { "text": "[[Cultural Monuments of Lithuania]]", "col": "001A94", "col2": "001A94", "scope": "Lithuania" }, "rijks": { "text": "[[Rijksmonument]]", "lang": "nl", "abbr": "RIJKS", "col": "A5CADA", "col2": "FF7900", "scope": "Netherlands" }, "hpti": { "text": "[[Heritage New Zealand|Heritage New Zealand – Category 1]]", "abbr": "NZHPT I", "col": "CDE5B2", "col2": "00247D", "scope": "New Zealand" }, "hptii": { "text": "[[Heritage New Zealand|Heritage New Zealand – Category 2]]", "abbr": "NZHPT II", "col": "CDE5B2", "col2": "00247D", "scope": "New Zealand" }, "nzwtapu": { "text": "[[Heritage New Zealand|Heritage New Zealand – Wāhi Tapu]]", "col": "CDE5B2", "col2": "00247D", "scope": "New Zealand" }, "nzwtapua": { "text": "[[Heritage New Zealand|Heritage New Zealand – Wāhi Tapu area]]", "col": "CDE5B2", "col2": "00247D", "scope": "New Zealand" }, "nzwtupuna": { "text": "[[Heritage New Zealand|Heritage New Zealand – Wāhi Tūpuna]]", "col": "CDE5B2", "scope": "New Zealand" }, "nzha": { "text": "[[Heritage New Zealand|Heritage New Zealand – Historic Area]]", "col": "CDE5B2", "col2": "00247D", "scope": "New Zealand" }, "nihg": { "text": "[[Register of Parks, Gardens and Demesnes of Special Historic Interest]]", "col": "DACAA5", "col2": "1E8C00", "scope": "Northern Ireland" }, "dhaka": { "text": "[[List of Old Dhaka Heritage Sites]]", "col": "BFFFBF", "col2": "803355", "scope": "Bangladesh" }, "pnct": { "text": "[[List of National Cultural Treasures in the Philippines|National Cultural Treasures]]", "col": "B2E5CD", "col2": "B2E5CD", "scope": "Philippines" }, "pnhl": { "text": "National Historical Landmarks", "col": "FFE978", "col2": "FFE978", "scope": "Philippines" }, "hmp": { "text": "[[Historic Monument (Poland)|Historic Monument of Poland]]", "col": "969488", "col2": "78776D", "scope": "Poland" }, "ippar": { "text": "[[Monuments of Portugal|Portuguese National Monument]]", "abbr": "IPPAR", "col": "FFE978", "col2": "006600", "scope": "Portugal" }, "romania": { "text": "[[Monument istoric]]", "lang": "ro", "col": "BFFFBF", "col2": "800000", "scope": "Romania" }, "cpgi": { "text": "[[Cultural Heritage of Serbia]]", "abbr": "CPGI", "col": "B2E5CD", "col2": "0000FF", "scope": "Serbia" }, "nms": { "text": "[[National monuments of Singapore|National monument of Singapore]]", "abbr": "NMS", "col": "FFE978", "col2": "0000FF", "scope": "Singapore" }, "hssk": { "text": "[[Historic Sites of South Korea]]", "col": "A8BDEC", "col2": "CD313A", "scope": "South Korea" }, "ntsk": { "text": "[[National Treasure (South Korea)]]", "col": "A8BDEC", "col2": "CD313A", "scope": "South Korea" }, "nfchsk": { "text": "[[National Folklore Cultural Heritage (South Korea)|National Folklore Cultural Heritage of South Korea]]", "col": "A8BDEC", "col2": "CD313A", "scope": "South Korea" }, "sssk": { "text": "[[Scenic Sites (South Korea)|Scenic Sites of South Korea]]", "col": "A8BDEC", "col2": "CD313A", "scope": "South Korea" }, "sfh": { "text": "[[Seoul Future Heritage]]", "col": "A8BDEC", "col2": "CD313A", "scope": "Seoul" }, "tsk": { "text": "[[Treasure (South Korean designation)|Treasures of South Korea]]", "col": "A8BDEC", "col2": "CD313A", "scope": "South Korea" }, "gdls": { "text": "[[Inventory of Gardens and Designed Landscapes in Scotland]]", "abbr": "GDLS", "col": "CDE5B2", "col2": "1E8C00", "scope": "Scotland" }, "bdic": { "text": "[[Bien de Interés Cultural|Spanish Cultural Heritage]]", "abbr": "BDIC", "col": "FFE978", "col2": "ACE1AF", "scope": "Spain" }, "sac": { "text": "[[Natura 2000]] site ([[Special Area of Conservation|SAC]])", "col": "ACE1AF", "col2": "ACE1AF", "scope": "European Union" }, "spa": { "text": "[[Natura 2000]] site ([[Special Protection Area|SPA]])", "col": "ACE1AF", "col2": "ACE1AF", "scope": "European Union" }, "sacspa": { "text": "[[Natura 2000]] site ([[Special Area of Conservation|SAC]]/[[Special Protection Area|SPA]])", "col": "ACE1AF", "col2": "ACE1AF", "scope": "European Union" }, "scpnc": { "text": "[[Swiss Inventory of Cultural Property of National and Regional Significance|Swiss Cultural Property of National Significance]]", "abbr": "CPNS", "col": "FFC0CB", "col2": "FF0000", "scope": "Switzerland" }, "listed": { "text": "[[Listed Building]]", "abbr": "LISTED", "col": "F0DC82", "col2": "F0DC82", "scope": "United Kingdom" }, "sca": { "text": "[[Listed building#Scotland|Listed Building]] – Category A", "abbr": "LIST A", "col": "FFC0CB", "col2": "FFC0CB", "scope": "Scotland" }, "nia": { "text": "[[Listed building#Northern Ireland|Listed Building]] – Grade A", "abbr": "LIST A", "col": "FFC0CB", "col2": "FFC0CB", "scope": "Northern Ireland" }, "ewi": { "text": "[[Listed building#England and Wales|Listed Building]] – Grade I", "abbr": "LIST I", "col": "FFC0CB", "col2": "FFC0CB", "scope": "England and Wales" }, "scb": { "text": "[[Listed building#Scotland|Listed Building]] – Category B", "abbr": "LIST B", "col": "87CEEB", "col2": "87CEEB", "scope": "Scotland" }, "nib+": { "text": "[[Listed building#Northern Ireland|Listed Building]] – Grade B+", "abbr": "LIST B+", "col": "87CEEB", "col2": "87CEEB", "scope": "Northern Ireland" }, "ewii": { "text": "[[Listed building#England and Wales|Listed Building]] – Grade II", "abbr": "LIST II", "col": "ACE1AF", "col2": "ACE1AF", "scope": "England and Wales" }, "scc": { "text": "[[Listed building#Scotland|Listed Building]] – Category C(S)", "abbr": "LIST C", "col": "ACE1AF", "col2": "ACE1AF", "scope": "Scotland" }, "nhst": { "text": "[[National Historic Sites of Tanzania]]", "col": "CDE5B2", "col2": "DACAA5", "scope": "Tanzania" }, "nib1": { "text": "[[Listed building#Northern Ireland|Listed Building]] – Grade B1", "abbr": "LIST B1", "col": "ACE1AF", "col2": "ACE1AF", "scope": "Northern Ireland" }, "ewii*": { "text": "[[Listed building#England and Wales|Listed Building]] – Grade II*", "abbr": "LIST II*", "col": "87CEEB", "col2": "87CEEB", "scope": "England and Wales" }, "nib2": { "text": "[[Listed building#Northern Ireland|Listed Building]] – Grade B2", "abbr": "LIST B2", "col": "DACAA5", "col2": "BDB76B", "scope": "Northern Ireland" }, "sm": { "text": "[[Scheduled monument]]", "abbr": "SM", "col": "A5CADA", "col2": "00247D", "scope": "United Kingdom" }, "nhleb": { "text": "[[Registered Battlefields (UK)|Registered battlefield]]", "col": "A5CADA", "col2": "00247D", "scope": "United Kingdom" }, "nrpg": { "text": "[[National Register of Historic Parks and Gardens]]", "abbr": "NRHPG", "col": "A5CADA", "col2": "A8EDEF", "scope": "United Kingdom" }, "nhlew": { "text": "[[UK Protected Wreck]]", "col": "A5CADA", "col2": "A5CADA", "scope": "United Kingdom" }, "ukca": { "text": "[[Conservation Area (United Kingdom)|UK Conservation Area]]", "col": "A5CADA", "col2": "A5CADA", "scope": "United Kingdom" }, "llb": { "text": "[[Local heritage list|Locally Listed Building]]", "col": "FFE153", "col2": "FFE153", "scope": "United Kingdom" }, "nhle": { "text": "[[National Heritage List for England]]", "scope": "England" }, "nrhp": { "text": "[[National Register of Historic Places|U.S. National Register of Historic Places]]", "abbr": "NRHP", "scope": "United States" }, "hd": { "text": "[[Historic districts in the United States|U.S. Historic district]]", "abbr": "HD", "col": "E6E6FA", "col2": "E6E6FA", "scope": "United States" }, "cp": { "text": "[[Historic districts in the United States|U.S. Historic district]] – [[Contributing property]]", "abbr": "CP", "col": "CCFFCC", "col2": "CCFFCC", "scope": "United States" }, "nhldcp": { "text": "[[National Historic Landmark|U.S. National Historic Landmark District]] – [[Contributing property]]", "abbr": "NHLDCP", "col": "CCFFCC", "col2": "CCFFCC", "scope": "United States" }, "nb": { "text": "[[List of areas in the United States National Park System#National battlefields|U.S. National Battlefield]]", "abbr": "NB", "col2": "FFE6B0", "scope": "United States" }, "nbp": { "text": "[[List of areas in the United States National Park System#National battlefield parks|U.S. National Battlefield Park]]", "abbr": "NBP", "col2": "E6E6AA", "scope": "United States" }, "nbs": { "text": "[[List of areas in the United States National Park System#National battlefield site|U.S. National Battlefield Site]]", "abbr": "NBS", "col2": "FFE8E8", "scope": "United States" }, "nhl": { "text": "[[National Historic Landmark|U.S. National Historic Landmark]]", "abbr": "NHL", "col": "87CEEB", "col2": "87CEEB", "scope": "United States" }, "nhld": { "text": "[[National Historic Landmark|U.S. National Historic Landmark District]]", "abbr": "NHLD", "col": "00CED1", "col2": "00CED1", "scope": "United States" }, "nhp": { "text": "[[National Historic Sites (United States)#National Historical Parks|U.S. National Historical Park]]", "abbr": "NHP", "col2": "CCCCFF", "scope": "United States" }, "usnha": { "text": "[[National Heritage Area]]", "scope": "United States" }, "nhr": { "text": "[[List of areas in the United States National Park System#National reserves|U.S. National Historic Reserve]]", "abbr": "NHR", "col2": "E9967A", "scope": "United States" }, "nhs": { "text": "[[National Historic Sites (United States)|U.S. National Historic Site]]", "abbr": "NHS", "col2": "5F9EA0", "scope": "United States" }, "nmem": { "text": "[[List of National Memorials of the United States|U.S. National Memorial]]", "abbr": "NMEM", "col2": "CCCCCC", "scope": "United States" }, "nmon": { "text": "[[National monument (United States)|U.S. National Monument]]", "abbr": "NMON", "col2": "FFEFD5", "scope": "United States" }, "nmp": { "text": "[[National Military Park|U.S. National Military Park]]", "abbr": "NMP", "col2": "EED8D2", "scope": "United States" }, "nnl": { "text": "[[National Natural Landmark|U.S. National Natural Landmark]]", "col2": "ACE1AF", "scope": "United States" }, "nwsrs": { "text": "[[National Wild and Scenic Rivers System]]", "col": "90B8F1", "col2": "90B8F1", "scope": "United States" }, "nwsr": { "text": "[[National Wild and Scenic Rivers System|National Wild and Scenic River]]", "col": "90B8F1", "col2": "90B8F1", "scope": "United States" }, "his": { "text": "[[List of areas in the United States National Park System#International historic site|International Historic Site]]", "scope": "United States" }, "whp": { "text": "[[Cadw/ICOMOS Register of Parks and Gardens of Special Historic Interest in Wales]]", "scope": "Wales" }, "nmz": { "text": "[[Monuments and Historic Sites of Zambia|National Monument of Zambia]]", "abbr": "NMZ", "scope": "Zambia" }, "twn": { "text": "[[List of national monuments of Taiwan|National monument of Taiwan]]", "col": "FFC7C7", "col2": "B00000", "scope": "Taiwan" }, "imnsu": { "text": "[[State Register of Immovable Monuments of Ukraine|Immovable Monument of National Significance of Ukraine]]", "col": "F0DC45", "col2": "F0DC45", "scope": "Ukraine" }, "imlsu": { "text": "[[State Register of Immovable Monuments of Ukraine|Immovable Monument of Local Significance of Ukraine]]", "col": "F0DC45", "col2": "F0DC45", "scope": "Ukraine" }, "apmsl": { "text": "[[Archaeological Protected Monuments in Sri Lanka|Archaeological Protected Monument of Sri Lanka]]", "scope": "Sri Lanka" }, "ahra": { "text": "[[Provincial historic sites of Alberta|Alberta Historic Resources Act]]", "col2": "2B60DE", "scope": "Alberta" }, "nbhca": { "text": "[[Heritage Conservation Act (New Brunswick)|New Brunswick Heritage Conservation Act]]", "col2": "FBB917", "scope": "New Brunswick" }, "nshpa": { "text": "[[Heritage Property Act (Nova Scotia)|Nova Scotia Heritage Property Act]]", "col2": "2B60DE", "scope": "Nova Scotia" }, "oha": { "text": "[[Ontario Heritage Act]]", "abbr": "OHA", "col": "90EE90", "col2": "347C2C", "scope": "Ontario" }, "pwihp": { "text": "[[Heritage Places Protection Act|Prince Edward Island Heritage Place]]", "scope": "Prince Edward Island" }, "rpcq": { "text": "[[Répertoire du patrimoine culturel du Québec|Patrimoine culturel du Québec]]", "lang": "fr", "abbr": "RPCQ", "col": "A8BDEC", "col2": "0033CC", "scope": "Québec" }, "shpa": { "text": "[[Heritage Property Act (Saskatchewan)|Saskatchewan Heritage Property Act]]", "col2": "339900", "scope": "Saskatchewan" }, "hkdm": { "text": "[[Declared monuments of Hong Kong|Declared Monument of Hong Kong]]", "abbr": "HKDM", "col2": "FF0000", "scope": "Hong Kong" }, "gbhk": { "text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]]", "abbr": "GBHK", "col": "F0DC82", "col2": "F0DC82", "scope": "Hong Kong" }, "gbhki": { "text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade I historic buildings in Hong Kong|Grade I]]", "abbr": "GBHK I", "col": "FFC0CB", "col2": "FFC0CB", "scope": "Hong Kong" }, "gbhkii": { "text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade II historic buildings in Hong Kong|Grade II]]", "abbr": "GBHK II", "col": "ACE1AF", "col2": "ACE1AF", "scope": "Hong Kong" }, "gbhkiii": { "text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade III historic buildings in Hong Kong|Grade III]]", "abbr": "GBHK III", "col": "87CEEB", "col2": "87CEEB", "scope": "Hong Kong" }, "bch": { "text": "[[Basque Cultural Heritage]]", "col": "67D68A", "col2": "67D68A", "scope": "Basque" }, "arlh": { "text": "[[Alabama Register of Landmarks and Heritage]]", "col": "CDE5B2", "col2": "83A06B", "scope": "Alabama", "abbr": "ARLH" }, "ahrs": { "text": "[[Alaska Heritage Resources Survey]]", "scope": "Alaska" }, "chisl": { "text": "[[California Historical Landmark]]", "abbr": "CHISL", "col": "FFC94B", "col2": "FFC94B", "scope": "California" }, "csrhp": { "text": "[[Colorado State Register of Historic Properties]]", "abbr": "CSRHP", "col": "AECF6B", "col2": "AECF6B", "scope": "Colorado" }, "dcihs": { "text": "[[District of Columbia Inventory of Historic Sites|D.C. Inventory of Historic Sites]]", "col": "ACE1AF", "col2": "ACE1AF", "scope": "District of Columbia" }, "fuap": { "text": "[[Florida Underwater Archaeological Preserve]]", "col": "FFC0CB", "scope": "Florida" }, "ushi": { "text": "[[Hawaiʻi Register of Historic Places]]", "col": "FAEA39", "col2": "001B69", "scope": "Hawaii" }, "irhss": { "text": "[[Indiana Register of Historic Sites and Structures|Indiana Register of Historic Sites]]", "abbr": "IRHSS", "col": "DEB887", "col2": "DEB887", "scope": "Indiana" }, "mshs": { "text": "[[Michigan State Historic Preservation Office|Michigan State Historic Site]]", "abbr": "MSHS", "col": "DACAA5", "col2": "DACAA5", "scope": "Michigan" }, "usms": { "text": "[[Mississippi Landmark]]", "abbr": "USMS", "col": "A8BDEC", "col2": "B3A1D7", "scope": "Mississippi" }, "nhsrhp": { "text": "[[New Hampshire State Register of Historic Places|NH State Register of Historic Places]]", "abbr": "NHSRHP", "col": "A8BDEC", "col2": "A8BDEC", "scope": "New Hampshire" }, "njrhp": { "text": "[[New Jersey Register of Historic Places]]", "abbr": "NJRHP", "col": "FFC94B", "col2": "FFC94B", "scope": "New Jersey" }, "nmsr": { "text": "[[New Mexico State Register of Cultural Properties|NM State Register of Cultural Properties]]", "abbr": "NMSRCP", "col": "FAF284", "col2": "FAF284", "scope": "New Mexico" }, "usny": { "text": "[[New York State Register of Historic Places]]", "col": "FFC94B", "col2": "FFC94B", "scope": "New York", "abbr": "NYSRHP" }, "usnv": { "text": "[[Nevada Historical Marker]]", "abbr": "USNV", "col": "FFE978", "col2": "FFC94B", "scope": "Nevada" }, "phm": { "text": "[[List of Pennsylvania state historical markers|Pennsylvania Historical Marker]]", "col": "FFC94B", "col2": "000080", "scope": "Pennsylvania" }, "prrhsz": { "text": "[[Puerto Rico Register of Historic Sites and Zones]]", "col": "FA7070", "scope": "Puerto Rico" }, "rthl": { "text": "[[Recorded Texas Historic Landmark]]", "abbr": "RTHL", "col": "DACAA5", "col2": "D6BC98", "scope": "Texas" }, "tsal": { "text": "[[Texas State Antiquities Landmark]]", "abbr": "TSAL", "col": "DACAA5", "col2": "D6BC98", "scope": "Texas" }, "tshs": { "text": "[[List of Texas state historic sites|Texas State Historic Site]]", "col2": "CDE5B2", "scope": "Texas" }, "vlr": { "text": "[[Virginia Landmarks Register]]", "abbr": "VLR", "col": "C1D1AE", "col2": "C1D1AE", "scope": "Virginia" }, "qhr": { "text": "[[Queensland Heritage Register]]", "col": "FBB917", "col2": "FBB917", "scope": "Queensland" }, "nswhr": { "text": "[[New South Wales State Heritage Register|New South Wales Heritage Register]]", "col": "A8BDEC", "col2": "BBB2FF", "scope": "New South Wales" }, "nswhd": { "text": "[[New South Wales Heritage Database]]\u003Cbr /\u003E(Local Government Register)", "col": "FFFFFF", "col2": "A8BDEC", "scope": "New South Wales" }, "nthr": { "text": "[[Northern Territory Heritage Register]]", "col": "FFC0CB", "scope": "Northern Territory" }, "sahr": { "text": "[[South Australian Heritage Register]]", "col": "A8BDEC", "col2": "BBB2FF", "scope": "South Australia" }, "thr": { "text": "[[Tasmanian Heritage Register]]", "col": "B2E5CD", "col2": "B2E5CD", "scope": "Tasmania" }, "vhr": { "text": "[[Victorian Heritage Register]]", "col": "BFFFBF", "col2": "AAAAAA", "scope": "Victoria" }, "wasrhp": { "text": "[[State Register of Heritage Places|Western Australia Heritage Register]]", "col": "DACAA5", "col2": "DACAA5", "scope": "Western Australia" }, "albhl": { "text": "[[List of historic landmarks in Albuquerque|Albuquerque Historic Landmark]]", "abbr": "ALBHL", "col": "FF99FF", "col2": "FF99FF", "scope": "Albuquerque" }, "ahsd": { "text": "[[List of historic buildings and districts designated by the City of Atlanta|Atlanta Historic Site or District]]", "col": "AACCFF", "scope": "Atlanta" }, "bcl": { "text": "[[Baltimore City Landmarks|Baltimore City Landmark]]", "col": "ECAF18", "col2": "ECAF18", "scope": "Baltimore" }, "berkl": { "text": "[[List of Berkeley Landmarks|Berkeley Landmark]]", "abbr": "BERKL", "col": "FFE4B5", "col2": "FFE4B5", "scope": "Berkeley" }, "bhr": { "text": "[[Brisbane Heritage Register]]", "col": "BFFFBF", "col2": "BFFFBF", "scope": "Brisbane" }, "chicl": { "text": "[[Chicago Landmark]]", "abbr": "CHICL", "col": "AACCFF", "col2": "AACCFF", "scope": "Chicago" }, "clhl": { "text": "[[List of Cincinnati Local Historic Landmarks|Cincinnati Local Historic Landmark]]", "col": "F5ABB6", "col2": "C4122C", "scope": "Cincinnati" }, "crhp": { "text": "[[Columbus Register of Historic Properties]]", "col": "78a2f5", "col2": "2C4891", "scope": "Columbus" }, "dlmk": { "text": "[[List of Dallas Landmarks|Dallas Landmark]]", "abbr": "DLMK", "col": "F5DEB3", "col2": "F5DEB3", "scope": "Dallas" }, "drhp": { "text": "[[Davenport Register of Historic Properties]]", "abbr": "DRHP", "col": "EEE8AA", "col2": "EEE8AA", "scope": "Davenport" }, "denvl": { "text": "[[Denver Landmarks]]", "col": "A0BEF8", "col2": "2C4891", "scope": "Denver" }, "lbhl": { "text": "[[List of City of Long Beach historic landmarks|Long Beach Historic Landmark]]", "abbr": "LBHL", "col": "FFD4E1", "col2": "FFD4E1", "scope": "Long Beach" }, "lahcm": { "text": "[[Los Angeles Historic-Cultural Monument]]", "abbr": "LAHCM", "col": "FFE978", "col2": "FFC94B", "scope": "Los Angeles" }, "mplsl": { "text": "[[Minneapolis Landmark]]", "abbr": "MPLSL", "col": "A8BDEC", "col2": "A8BDEC", "scope": "Minneapolis Landmark" }, "nycl": { "text": "[[New York City Landmarks Preservation Commission|New York City Landmark]]", "abbr": "NYCL", "col": "FFE978", "col2": "FFE978", "scope": "New York City" }, "odl": { "text": "[[List of Oakland Designated Landmarks|Oakland Designated Landmark]]", "abbr": "ODL", "col": "F5DC0F", "scope": "Oakland" }, "omal": { "text": "[[List of Omaha landmarks|Omaha Landmark]]", "abbr": "OMAL", "col": "EEE8AA", "scope": "Omaha" }, "obl": { "text": "[[Oyster Bay Landmark]]", "abbr": "OBL", "col": "D0F0C0", "col2": "D0F0C0", "scope": "Oyster Bay" }, "prhp": { "text": "[[Philadelphia Register of Historic Places]]", "abbr": "PRHP", "col": "A8BDEC", "col2": "A8BDEC", "scope": "Philadelphia" }, "phl": { "text": "[[List of Pittsburgh Landmarks|Pittsburgh Landmark]]", "abbr": "PHLF", "col": "FFD700", "col2": "FFD700", "scope": "Pittsburgh" }, "phlf": { "text": "[[List of Pittsburgh History and Landmarks Foundation Historic Landmarks|Pittsburgh Landmark – PHLF]]", "abbr": "PHLF", "col": "old", "col2": "FFD700", "scope": "Pittsburgh" }, "cphd": { "text": "[[List of City of Pittsburgh historic designations|Pittsburgh Historic Designation]]", "col": "FFF89F", "col2": "000000", "scope": "Pittsburgh" }, "rivl": { "text": "[[List of landmarks in Riverside, California|Riverside Landmark]]", "abbr": "RIVL", "col": "A8BDEC", "col2": "BBB2FF", "scope": "Riverside" }, "sdhl": { "text": "[[List of San Diego Historic Landmarks|San Diego Historic Landmark]]", "abbr": "SDHL", "col": "FFE978", "col2": "FFE978", "scope": "San Diego" }, "sfdl": { "text": "[[List of San Francisco Designated Landmarks|San Francisco Designated Landmark]]", "abbr": "SFDL", "col": "FFE978", "col2": "FFC94B", "scope": "San Francisco" }, "smhl": { "text": "[[List of City of Santa Monica Designated Historic Landmarks|Santa Monica Historic Landmark]]", "abbr": "SMHL", "col": "D8AFE2", "col2": "DDA0DD", "scope": "Santa Monica" }, "seatl": { "text": "[[List of Seattle landmarks|Seattle Landmark]]", "abbr": "SEATL", "col": "D8DBDF", "col2": "D8DBDF", "scope": "Seattle" }, "sll": { "text": "[[Landmarks of St. Louis, Missouri|St. Louis Landmark]]", "abbr": "SLL", "col": "BFFFBF", "col2": "AAAAAA", "scope": "St. Louis" }, "ycl": { "text": "[[Yangon City Heritage List|Yangon City Landmark]]", "abbr": "YCL", "col2": "2E8B57", "scope": "Yangon" }, "chp": { "text": "[[Cultural Heritage of Peru]]", "col": "FFE978", "col2": "CC3333", "scope": "Peru" } } qve4y2obbu44omvpuw14sene7eykwh8 746330 746329 2026-06-12T21:56:21Z Robertsky 51025 1 revision imported from [[:en:Module:Designation/list]] 746329 json application/json { "whs": { "text": "[[World Heritage Site|UNESCO World Heritage Site]]", "abbr": "WHS", "col": "FFE978", "col2": "0177D3", "scope": "Global" }, "iucnia": { "text": "[[IUCN]] Category Ia ([[Nature reserve|Strict Nature Reserve]])", "abbr": "IUCN Ia", "col": "E7BFAD", "col2": "E7AF97", "scope": "Global" }, "iucnib": { "text": "[[IUCN]] Category Ib ([[Wilderness Area]])", "abbr": "IUCN Ib", "col": "DACAA5", "col2": "DACAA5", "scope": "Global" }, "iucnii": { "text": "[[IUCN]] Category II ([[National Park]])", "abbr": "IUCN II", "col": "CDE5B2", "col2": "CDE5B2", "scope": "Global" }, "iucniii": { "text": "[[IUCN]] Category III ([[Natural Monument]])", "abbr": "IUCN III", "col": "BFFFBF", "col2": "BFFFBF", "scope": "Global" }, "iucniv": { "text": "[[IUCN]] Category IV (Habitat/Species Management Area)", "abbr": "IUCN IV", "col": "B2E5CD", "col2": "B2E5CD", "scope": "Global" }, "iucnv": { "text": "[[IUCN]] Category V (Protected Landscape/Seascape)", "abbr": "IUCN V", "col": "A5CADA", "col2": "A5CADA", "scope": "Global" }, "iucnvi": { "text": "[[IUCN]] Category VI (Managed Resource Protected Area)", "abbr": "IUCN VI", "col": "A8BDEC", "col2": "A8BDEC", "scope": "Global" }, "ramsar": { "text": "[[Ramsar Convention|Ramsar Wetland]]", "col": "8DE3D2", "col2": "8DE3D2", "scope": "Global" }, "hcel": { "text": "[[List of Historic Civil Engineering Landmarks|Historic Civil Engineering Landmark]]", "col2": "AAAAAA", "scope": "Global" }, "hmel": { "text": "[[List of Historic Mechanical Engineering Landmarks|Historic Mechanical Engineering Landmark]]", "col2": "AAAAAA", "scope": "Global" }, "kons": { "text": "[[Commission to Preserve National Monuments of Bosnia and Herzegovina|KONS of Bosnia and Herzegovina]]", "col": "A8BDEC", "col2": "CCAA02", "scope": "Bosnia and Herzegovina" }, "cmoa": { "text": "[[Cultural Monument of Albania]]", "abbr": "CMOA", "col": "B2E5CD", "col2": "CC3333", "scope": "Albania" }, "ncha": { "text": "[[National Cultural Heritage of Antigua and Barbuda]]", "col": "0072C6", "col2": "0072C6", "scope": "Antigua and Barbuda" }, "hsab": { "text": "[[Historical Site of Antigua and Barbuda]]", "col": "0072C6", "col2": "0072C6", "scope": "Antigua and Barbuda" }, "nhma": { "text": "[[National Historic Monument of Argentina]]", "abbr": "NHMA", "col": "A5CADA", "col2": "75AADB", "scope": "Argentina" }, "anhl": { "text": "[[Australian National Heritage List]]", "col": "CDE5B2", "col2": "CDE5B2", "scope": "Australia" }, "cwlthl": { "text": "[[Commonwealth Heritage List]]", "col": "FFE978", "col2": "FFE978", "scope": "Australia" }, "rne": { "text": "[[Register of the National Estate]]", "col": "FFC0CB", "col2": "FF0000", "scope": "Australia" }, "nhhb": { "text": "[[National Historic Heritage of Brazil]]", "col": "CDE5B2", "col2": "00A859", "scope": "Brazil" }, "nhsc": { "text": "[[National Historic Sites of Canada|National Historic Site of Canada]]", "abbr": "NHSC", "col": "FFC0CB", "col2": "FF0000", "scope": "Canada" }, "hrsc": { "text": "[[Heritage Railway Stations Protection Act|Heritage Railway Station (Canada)]]", "col2": "FF3333", "scope": "Canada" }, "mchs": { "text": "[[Major cultural heritage sites under national-level protection]]", "col2": "CD071E", "scope": "China" }, "pnvc": { "text": "[[Register of Protected Natural Values of Croatia|Protected Natural Value of Croatia]]", "abbr": "PNVC", "col": "FFE978", "col2": "00247D", "scope": "Croatia" }, "cgoc": { "text": "[[Register of Cultural Goods of Croatia|Cultural Good of Croatia]]", "abbr": "CGOC", "col": "DACAA5", "col2": "CC3333", "scope": "Croatia" }, "ncmcr": { "text": "[[National Cultural Monument of the Czech Republic]]", "col": "A8BDEC", "col2": "D7141A", "scope": "Czech Republic" }, "nrhpg": { "text": "[[National Register of Historic Parks and Gardens]]", "abbr": "NRHPG", "col": "A5CADA", "col2": "1E8C00", "scope": "England" }, "mh": { "text": "[[Monument historique]]", "lang": "fr", "abbr": "MH", "col": "A8BDEC", "col2": "0055A4", "scope": "France" }, "chmg": { "text": "[[List of Cultural Heritage Monuments of Georgia|Cultural Heritage Monument of Georgia]]", "col": "A5CADA", "col2": "FF0000", "scope": "Georgia (country)" }, "icmns": { "text": "[[Immovable Cultural Monuments of National Significance|Immovable Cultural Monument of National Significance of Georgia]]", "col": "A5CADA", "col2": "FF0000", "scope": "Georgia (country)" }, "mani": { "text": "[[Monuments of National Importance (India)|Monument of National Importance]]", "col": "F4C430", "col2": "FF7722", "scope": "India" }, "inhl": { "text": "[[Iran National Heritage List]]", "col": "C3B091", "col2": "C3B091", "scope": "Iran" }, "inmon": { "text": "[[National monument (Ireland)|National monument of Ireland]]", "abbr": "INMON", "col": "BFFFBF", "col2": "FF7900", "scope": "Ireland" }, "ntoj": { "text": "[[National Treasures of Japan|National Treasure of Japan]]", "abbr": "NTOJ", "col": "FFC0CB", "col2": "FF0000", "scope": "Japan" }, "chile": { "text": "[[National Monuments of Chile|National Monument of Chile]]", "col": "B2E5CD", "col2": "FF0000", "scope": "Chile" }, "cmll": { "text": "[[Cultural Monuments of Lithuania]]", "col": "001A94", "col2": "001A94", "scope": "Lithuania" }, "rijks": { "text": "[[Rijksmonument]]", "lang": "nl", "abbr": "RIJKS", "col": "A5CADA", "col2": "FF7900", "scope": "Netherlands" }, "hpti": { "text": "[[Heritage New Zealand|Heritage New Zealand – Category 1]]", "abbr": "NZHPT I", "col": "CDE5B2", "col2": "00247D", "scope": "New Zealand" }, "hptii": { "text": "[[Heritage New Zealand|Heritage New Zealand – Category 2]]", "abbr": "NZHPT II", "col": "CDE5B2", "col2": "00247D", "scope": "New Zealand" }, "nzwtapu": { "text": "[[Heritage New Zealand|Heritage New Zealand – Wāhi Tapu]]", "col": "CDE5B2", "col2": "00247D", "scope": "New Zealand" }, "nzwtapua": { "text": "[[Heritage New Zealand|Heritage New Zealand – Wāhi Tapu area]]", "col": "CDE5B2", "col2": "00247D", "scope": "New Zealand" }, "nzwtupuna": { "text": "[[Heritage New Zealand|Heritage New Zealand – Wāhi Tūpuna]]", "col": "CDE5B2", "scope": "New Zealand" }, "nzha": { "text": "[[Heritage New Zealand|Heritage New Zealand – Historic Area]]", "col": "CDE5B2", "col2": "00247D", "scope": "New Zealand" }, "nihg": { "text": "[[Register of Parks, Gardens and Demesnes of Special Historic Interest]]", "col": "DACAA5", "col2": "1E8C00", "scope": "Northern Ireland" }, "dhaka": { "text": "[[List of Old Dhaka Heritage Sites]]", "col": "BFFFBF", "col2": "803355", "scope": "Bangladesh" }, "pnct": { "text": "[[List of National Cultural Treasures in the Philippines|National Cultural Treasures]]", "col": "B2E5CD", "col2": "B2E5CD", "scope": "Philippines" }, "pnhl": { "text": "National Historical Landmarks", "col": "FFE978", "col2": "FFE978", "scope": "Philippines" }, "hmp": { "text": "[[Historic Monument (Poland)|Historic Monument of Poland]]", "col": "969488", "col2": "78776D", "scope": "Poland" }, "ippar": { "text": "[[Monuments of Portugal|Portuguese National Monument]]", "abbr": "IPPAR", "col": "FFE978", "col2": "006600", "scope": "Portugal" }, "romania": { "text": "[[Monument istoric]]", "lang": "ro", "col": "BFFFBF", "col2": "800000", "scope": "Romania" }, "cpgi": { "text": "[[Cultural Heritage of Serbia]]", "abbr": "CPGI", "col": "B2E5CD", "col2": "0000FF", "scope": "Serbia" }, "nms": { "text": "[[National monuments of Singapore|National monument of Singapore]]", "abbr": "NMS", "col": "FFE978", "col2": "0000FF", "scope": "Singapore" }, "hssk": { "text": "[[Historic Sites of South Korea]]", "col": "A8BDEC", "col2": "CD313A", "scope": "South Korea" }, "ntsk": { "text": "[[National Treasure (South Korea)]]", "col": "A8BDEC", "col2": "CD313A", "scope": "South Korea" }, "nfchsk": { "text": "[[National Folklore Cultural Heritage (South Korea)|National Folklore Cultural Heritage of South Korea]]", "col": "A8BDEC", "col2": "CD313A", "scope": "South Korea" }, "sssk": { "text": "[[Scenic Sites (South Korea)|Scenic Sites of South Korea]]", "col": "A8BDEC", "col2": "CD313A", "scope": "South Korea" }, "sfh": { "text": "[[Seoul Future Heritage]]", "col": "A8BDEC", "col2": "CD313A", "scope": "Seoul" }, "tsk": { "text": "[[Treasure (South Korean designation)|Treasures of South Korea]]", "col": "A8BDEC", "col2": "CD313A", "scope": "South Korea" }, "gdls": { "text": "[[Inventory of Gardens and Designed Landscapes in Scotland]]", "abbr": "GDLS", "col": "CDE5B2", "col2": "1E8C00", "scope": "Scotland" }, "bdic": { "text": "[[Bien de Interés Cultural|Spanish Cultural Heritage]]", "abbr": "BDIC", "col": "FFE978", "col2": "ACE1AF", "scope": "Spain" }, "sac": { "text": "[[Natura 2000]] site ([[Special Area of Conservation|SAC]])", "col": "ACE1AF", "col2": "ACE1AF", "scope": "European Union" }, "spa": { "text": "[[Natura 2000]] site ([[Special Protection Area|SPA]])", "col": "ACE1AF", "col2": "ACE1AF", "scope": "European Union" }, "sacspa": { "text": "[[Natura 2000]] site ([[Special Area of Conservation|SAC]]/[[Special Protection Area|SPA]])", "col": "ACE1AF", "col2": "ACE1AF", "scope": "European Union" }, "scpnc": { "text": "[[Swiss Inventory of Cultural Property of National and Regional Significance|Swiss Cultural Property of National Significance]]", "abbr": "CPNS", "col": "FFC0CB", "col2": "FF0000", "scope": "Switzerland" }, "listed": { "text": "[[Listed Building]]", "abbr": "LISTED", "col": "F0DC82", "col2": "F0DC82", "scope": "United Kingdom" }, "sca": { "text": "[[Listed building#Scotland|Listed Building]] – Category A", "abbr": "LIST A", "col": "FFC0CB", "col2": "FFC0CB", "scope": "Scotland" }, "nia": { "text": "[[Listed building#Northern Ireland|Listed Building]] – Grade A", "abbr": "LIST A", "col": "FFC0CB", "col2": "FFC0CB", "scope": "Northern Ireland" }, "ewi": { "text": "[[Listed building#England and Wales|Listed Building]] – Grade I", "abbr": "LIST I", "col": "FFC0CB", "col2": "FFC0CB", "scope": "England and Wales" }, "scb": { "text": "[[Listed building#Scotland|Listed Building]] – Category B", "abbr": "LIST B", "col": "87CEEB", "col2": "87CEEB", "scope": "Scotland" }, "nib+": { "text": "[[Listed building#Northern Ireland|Listed Building]] – Grade B+", "abbr": "LIST B+", "col": "87CEEB", "col2": "87CEEB", "scope": "Northern Ireland" }, "ewii": { "text": "[[Listed building#England and Wales|Listed Building]] – Grade II", "abbr": "LIST II", "col": "ACE1AF", "col2": "ACE1AF", "scope": "England and Wales" }, "scc": { "text": "[[Listed building#Scotland|Listed Building]] – Category C(S)", "abbr": "LIST C", "col": "ACE1AF", "col2": "ACE1AF", "scope": "Scotland" }, "nhst": { "text": "[[National Historic Sites of Tanzania]]", "col": "CDE5B2", "col2": "DACAA5", "scope": "Tanzania" }, "nib1": { "text": "[[Listed building#Northern Ireland|Listed Building]] – Grade B1", "abbr": "LIST B1", "col": "ACE1AF", "col2": "ACE1AF", "scope": "Northern Ireland" }, "ewii*": { "text": "[[Listed building#England and Wales|Listed Building]] – Grade II*", "abbr": "LIST II*", "col": "87CEEB", "col2": "87CEEB", "scope": "England and Wales" }, "nib2": { "text": "[[Listed building#Northern Ireland|Listed Building]] – Grade B2", "abbr": "LIST B2", "col": "DACAA5", "col2": "BDB76B", "scope": "Northern Ireland" }, "sm": { "text": "[[Scheduled monument]]", "abbr": "SM", "col": "A5CADA", "col2": "00247D", "scope": "United Kingdom" }, "nhleb": { "text": "[[Registered Battlefields (UK)|Registered battlefield]]", "col": "A5CADA", "col2": "00247D", "scope": "United Kingdom" }, "nrpg": { "text": "[[National Register of Historic Parks and Gardens]]", "abbr": "NRHPG", "col": "A5CADA", "col2": "A8EDEF", "scope": "United Kingdom" }, "nhlew": { "text": "[[UK Protected Wreck]]", "col": "A5CADA", "col2": "A5CADA", "scope": "United Kingdom" }, "ukca": { "text": "[[Conservation Area (United Kingdom)|UK Conservation Area]]", "col": "A5CADA", "col2": "A5CADA", "scope": "United Kingdom" }, "llb": { "text": "[[Local heritage list|Locally Listed Building]]", "col": "FFE153", "col2": "FFE153", "scope": "United Kingdom" }, "nhle": { "text": "[[National Heritage List for England]]", "scope": "England" }, "nrhp": { "text": "[[National Register of Historic Places|U.S. National Register of Historic Places]]", "abbr": "NRHP", "scope": "United States" }, "hd": { "text": "[[Historic districts in the United States|U.S. Historic district]]", "abbr": "HD", "col": "E6E6FA", "col2": "E6E6FA", "scope": "United States" }, "cp": { "text": "[[Historic districts in the United States|U.S. Historic district]] – [[Contributing property]]", "abbr": "CP", "col": "CCFFCC", "col2": "CCFFCC", "scope": "United States" }, "nhldcp": { "text": "[[National Historic Landmark|U.S. National Historic Landmark District]] – [[Contributing property]]", "abbr": "NHLDCP", "col": "CCFFCC", "col2": "CCFFCC", "scope": "United States" }, "nb": { "text": "[[List of areas in the United States National Park System#National battlefields|U.S. National Battlefield]]", "abbr": "NB", "col2": "FFE6B0", "scope": "United States" }, "nbp": { "text": "[[List of areas in the United States National Park System#National battlefield parks|U.S. National Battlefield Park]]", "abbr": "NBP", "col2": "E6E6AA", "scope": "United States" }, "nbs": { "text": "[[List of areas in the United States National Park System#National battlefield site|U.S. National Battlefield Site]]", "abbr": "NBS", "col2": "FFE8E8", "scope": "United States" }, "nhl": { "text": "[[National Historic Landmark|U.S. National Historic Landmark]]", "abbr": "NHL", "col": "87CEEB", "col2": "87CEEB", "scope": "United States" }, "nhld": { "text": "[[National Historic Landmark|U.S. National Historic Landmark District]]", "abbr": "NHLD", "col": "00CED1", "col2": "00CED1", "scope": "United States" }, "nhp": { "text": "[[National Historic Sites (United States)#National Historical Parks|U.S. National Historical Park]]", "abbr": "NHP", "col2": "CCCCFF", "scope": "United States" }, "usnha": { "text": "[[National Heritage Area]]", "scope": "United States" }, "nhr": { "text": "[[List of areas in the United States National Park System#National reserves|U.S. National Historic Reserve]]", "abbr": "NHR", "col2": "E9967A", "scope": "United States" }, "nhs": { "text": "[[National Historic Sites (United States)|U.S. National Historic Site]]", "abbr": "NHS", "col2": "5F9EA0", "scope": "United States" }, "nmem": { "text": "[[List of National Memorials of the United States|U.S. National Memorial]]", "abbr": "NMEM", "col2": "CCCCCC", "scope": "United States" }, "nmon": { "text": "[[National monument (United States)|U.S. National Monument]]", "abbr": "NMON", "col2": "FFEFD5", "scope": "United States" }, "nmp": { "text": "[[National Military Park|U.S. National Military Park]]", "abbr": "NMP", "col2": "EED8D2", "scope": "United States" }, "nnl": { "text": "[[National Natural Landmark|U.S. National Natural Landmark]]", "col2": "ACE1AF", "scope": "United States" }, "nwsrs": { "text": "[[National Wild and Scenic Rivers System]]", "col": "90B8F1", "col2": "90B8F1", "scope": "United States" }, "nwsr": { "text": "[[National Wild and Scenic Rivers System|National Wild and Scenic River]]", "col": "90B8F1", "col2": "90B8F1", "scope": "United States" }, "his": { "text": "[[List of areas in the United States National Park System#International historic site|International Historic Site]]", "scope": "United States" }, "whp": { "text": "[[Cadw/ICOMOS Register of Parks and Gardens of Special Historic Interest in Wales]]", "scope": "Wales" }, "nmz": { "text": "[[Monuments and Historic Sites of Zambia|National Monument of Zambia]]", "abbr": "NMZ", "scope": "Zambia" }, "twn": { "text": "[[List of national monuments of Taiwan|National monument of Taiwan]]", "col": "FFC7C7", "col2": "B00000", "scope": "Taiwan" }, "imnsu": { "text": "[[State Register of Immovable Monuments of Ukraine|Immovable Monument of National Significance of Ukraine]]", "col": "F0DC45", "col2": "F0DC45", "scope": "Ukraine" }, "imlsu": { "text": "[[State Register of Immovable Monuments of Ukraine|Immovable Monument of Local Significance of Ukraine]]", "col": "F0DC45", "col2": "F0DC45", "scope": "Ukraine" }, "apmsl": { "text": "[[Archaeological Protected Monuments in Sri Lanka|Archaeological Protected Monument of Sri Lanka]]", "scope": "Sri Lanka" }, "ahra": { "text": "[[Provincial historic sites of Alberta|Alberta Historic Resources Act]]", "col2": "2B60DE", "scope": "Alberta" }, "nbhca": { "text": "[[Heritage Conservation Act (New Brunswick)|New Brunswick Heritage Conservation Act]]", "col2": "FBB917", "scope": "New Brunswick" }, "nshpa": { "text": "[[Heritage Property Act (Nova Scotia)|Nova Scotia Heritage Property Act]]", "col2": "2B60DE", "scope": "Nova Scotia" }, "oha": { "text": "[[Ontario Heritage Act]]", "abbr": "OHA", "col": "90EE90", "col2": "347C2C", "scope": "Ontario" }, "pwihp": { "text": "[[Heritage Places Protection Act|Prince Edward Island Heritage Place]]", "scope": "Prince Edward Island" }, "rpcq": { "text": "[[Répertoire du patrimoine culturel du Québec|Patrimoine culturel du Québec]]", "lang": "fr", "abbr": "RPCQ", "col": "A8BDEC", "col2": "0033CC", "scope": "Québec" }, "shpa": { "text": "[[Heritage Property Act (Saskatchewan)|Saskatchewan Heritage Property Act]]", "col2": "339900", "scope": "Saskatchewan" }, "hkdm": { "text": "[[Declared monuments of Hong Kong|Declared Monument of Hong Kong]]", "abbr": "HKDM", "col2": "FF0000", "scope": "Hong Kong" }, "gbhk": { "text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]]", "abbr": "GBHK", "col": "F0DC82", "col2": "F0DC82", "scope": "Hong Kong" }, "gbhki": { "text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade I historic buildings in Hong Kong|Grade I]]", "abbr": "GBHK I", "col": "FFC0CB", "col2": "FFC0CB", "scope": "Hong Kong" }, "gbhkii": { "text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade II historic buildings in Hong Kong|Grade II]]", "abbr": "GBHK II", "col": "ACE1AF", "col2": "ACE1AF", "scope": "Hong Kong" }, "gbhkiii": { "text": "[[Heritage conservation in Hong Kong|Hong Kong Graded Building]] – [[List of Grade III historic buildings in Hong Kong|Grade III]]", "abbr": "GBHK III", "col": "87CEEB", "col2": "87CEEB", "scope": "Hong Kong" }, "bch": { "text": "[[Basque Cultural Heritage]]", "col": "67D68A", "col2": "67D68A", "scope": "Basque" }, "arlh": { "text": "[[Alabama Register of Landmarks and Heritage]]", "col": "CDE5B2", "col2": "83A06B", "scope": "Alabama", "abbr": "ARLH" }, "ahrs": { "text": "[[Alaska Heritage Resources Survey]]", "scope": "Alaska" }, "chisl": { "text": "[[California Historical Landmark]]", "abbr": "CHISL", "col": "FFC94B", "col2": "FFC94B", "scope": "California" }, "csrhp": { "text": "[[Colorado State Register of Historic Properties]]", "abbr": "CSRHP", "col": "AECF6B", "col2": "AECF6B", "scope": "Colorado" }, "dcihs": { "text": "[[District of Columbia Inventory of Historic Sites|D.C. Inventory of Historic Sites]]", "col": "ACE1AF", "col2": "ACE1AF", "scope": "District of Columbia" }, "fuap": { "text": "[[Florida Underwater Archaeological Preserve]]", "col": "FFC0CB", "scope": "Florida" }, "ushi": { "text": "[[Hawaiʻi Register of Historic Places]]", "col": "FAEA39", "col2": "001B69", "scope": "Hawaii" }, "irhss": { "text": "[[Indiana Register of Historic Sites and Structures|Indiana Register of Historic Sites]]", "abbr": "IRHSS", "col": "DEB887", "col2": "DEB887", "scope": "Indiana" }, "mshs": { "text": "[[Michigan State Historic Preservation Office|Michigan State Historic Site]]", "abbr": "MSHS", "col": "DACAA5", "col2": "DACAA5", "scope": "Michigan" }, "usms": { "text": "[[Mississippi Landmark]]", "abbr": "USMS", "col": "A8BDEC", "col2": "B3A1D7", "scope": "Mississippi" }, "nhsrhp": { "text": "[[New Hampshire State Register of Historic Places|NH State Register of Historic Places]]", "abbr": "NHSRHP", "col": "A8BDEC", "col2": "A8BDEC", "scope": "New Hampshire" }, "njrhp": { "text": "[[New Jersey Register of Historic Places]]", "abbr": "NJRHP", "col": "FFC94B", "col2": "FFC94B", "scope": "New Jersey" }, "nmsr": { "text": "[[New Mexico State Register of Cultural Properties|NM State Register of Cultural Properties]]", "abbr": "NMSRCP", "col": "FAF284", "col2": "FAF284", "scope": "New Mexico" }, "usny": { "text": "[[New York State Register of Historic Places]]", "col": "FFC94B", "col2": "FFC94B", "scope": "New York", "abbr": "NYSRHP" }, "usnv": { "text": "[[Nevada Historical Marker]]", "abbr": "USNV", "col": "FFE978", "col2": "FFC94B", "scope": "Nevada" }, "phm": { "text": "[[List of Pennsylvania state historical markers|Pennsylvania Historical Marker]]", "col": "FFC94B", "col2": "000080", "scope": "Pennsylvania" }, "prrhsz": { "text": "[[Puerto Rico Register of Historic Sites and Zones]]", "col": "FA7070", "scope": "Puerto Rico" }, "rthl": { "text": "[[Recorded Texas Historic Landmark]]", "abbr": "RTHL", "col": "DACAA5", "col2": "D6BC98", "scope": "Texas" }, "tsal": { "text": "[[Texas State Antiquities Landmark]]", "abbr": "TSAL", "col": "DACAA5", "col2": "D6BC98", "scope": "Texas" }, "tshs": { "text": "[[List of Texas state historic sites|Texas State Historic Site]]", "col2": "CDE5B2", "scope": "Texas" }, "vlr": { "text": "[[Virginia Landmarks Register]]", "abbr": "VLR", "col": "C1D1AE", "col2": "C1D1AE", "scope": "Virginia" }, "qhr": { "text": "[[Queensland Heritage Register]]", "col": "FBB917", "col2": "FBB917", "scope": "Queensland" }, "nswhr": { "text": "[[New South Wales State Heritage Register|New South Wales Heritage Register]]", "col": "A8BDEC", "col2": "BBB2FF", "scope": "New South Wales" }, "nswhd": { "text": "[[New South Wales Heritage Database]]\u003Cbr /\u003E(Local Government Register)", "col": "FFFFFF", "col2": "A8BDEC", "scope": "New South Wales" }, "nthr": { "text": "[[Northern Territory Heritage Register]]", "col": "FFC0CB", "scope": "Northern Territory" }, "sahr": { "text": "[[South Australian Heritage Register]]", "col": "A8BDEC", "col2": "BBB2FF", "scope": "South Australia" }, "thr": { "text": "[[Tasmanian Heritage Register]]", "col": "B2E5CD", "col2": "B2E5CD", "scope": "Tasmania" }, "vhr": { "text": "[[Victorian Heritage Register]]", "col": "BFFFBF", "col2": "AAAAAA", "scope": "Victoria" }, "wasrhp": { "text": "[[State Register of Heritage Places|Western Australia Heritage Register]]", "col": "DACAA5", "col2": "DACAA5", "scope": "Western Australia" }, "albhl": { "text": "[[List of historic landmarks in Albuquerque|Albuquerque Historic Landmark]]", "abbr": "ALBHL", "col": "FF99FF", "col2": "FF99FF", "scope": "Albuquerque" }, "ahsd": { "text": "[[List of historic buildings and districts designated by the City of Atlanta|Atlanta Historic Site or District]]", "col": "AACCFF", "scope": "Atlanta" }, "bcl": { "text": "[[Baltimore City Landmarks|Baltimore City Landmark]]", "col": "ECAF18", "col2": "ECAF18", "scope": "Baltimore" }, "berkl": { "text": "[[List of Berkeley Landmarks|Berkeley Landmark]]", "abbr": "BERKL", "col": "FFE4B5", "col2": "FFE4B5", "scope": "Berkeley" }, "bhr": { "text": "[[Brisbane Heritage Register]]", "col": "BFFFBF", "col2": "BFFFBF", "scope": "Brisbane" }, "chicl": { "text": "[[Chicago Landmark]]", "abbr": "CHICL", "col": "AACCFF", "col2": "AACCFF", "scope": "Chicago" }, "clhl": { "text": "[[List of Cincinnati Local Historic Landmarks|Cincinnati Local Historic Landmark]]", "col": "F5ABB6", "col2": "C4122C", "scope": "Cincinnati" }, "crhp": { "text": "[[Columbus Register of Historic Properties]]", "col": "78a2f5", "col2": "2C4891", "scope": "Columbus" }, "dlmk": { "text": "[[List of Dallas Landmarks|Dallas Landmark]]", "abbr": "DLMK", "col": "F5DEB3", "col2": "F5DEB3", "scope": "Dallas" }, "drhp": { "text": "[[Davenport Register of Historic Properties]]", "abbr": "DRHP", "col": "EEE8AA", "col2": "EEE8AA", "scope": "Davenport" }, "denvl": { "text": "[[Denver Landmarks]]", "col": "A0BEF8", "col2": "2C4891", "scope": "Denver" }, "lbhl": { "text": "[[List of City of Long Beach historic landmarks|Long Beach Historic Landmark]]", "abbr": "LBHL", "col": "FFD4E1", "col2": "FFD4E1", "scope": "Long Beach" }, "lahcm": { "text": "[[Los Angeles Historic-Cultural Monument]]", "abbr": "LAHCM", "col": "FFE978", "col2": "FFC94B", "scope": "Los Angeles" }, "mplsl": { "text": "[[Minneapolis Landmark]]", "abbr": "MPLSL", "col": "A8BDEC", "col2": "A8BDEC", "scope": "Minneapolis Landmark" }, "nycl": { "text": "[[New York City Landmarks Preservation Commission|New York City Landmark]]", "abbr": "NYCL", "col": "FFE978", "col2": "FFE978", "scope": "New York City" }, "odl": { "text": "[[List of Oakland Designated Landmarks|Oakland Designated Landmark]]", "abbr": "ODL", "col": "F5DC0F", "scope": "Oakland" }, "omal": { "text": "[[List of Omaha landmarks|Omaha Landmark]]", "abbr": "OMAL", "col": "EEE8AA", "scope": "Omaha" }, "obl": { "text": "[[Oyster Bay Landmark]]", "abbr": "OBL", "col": "D0F0C0", "col2": "D0F0C0", "scope": "Oyster Bay" }, "prhp": { "text": "[[Philadelphia Register of Historic Places]]", "abbr": "PRHP", "col": "A8BDEC", "col2": "A8BDEC", "scope": "Philadelphia" }, "phl": { "text": "[[List of Pittsburgh Landmarks|Pittsburgh Landmark]]", "abbr": "PHLF", "col": "FFD700", "col2": "FFD700", "scope": "Pittsburgh" }, "phlf": { "text": "[[List of Pittsburgh History and Landmarks Foundation Historic Landmarks|Pittsburgh Landmark – PHLF]]", "abbr": "PHLF", "col": "old", "col2": "FFD700", "scope": "Pittsburgh" }, "cphd": { "text": "[[List of City of Pittsburgh historic designations|Pittsburgh Historic Designation]]", "col": "FFF89F", "col2": "000000", "scope": "Pittsburgh" }, "rivl": { "text": "[[List of landmarks in Riverside, California|Riverside Landmark]]", "abbr": "RIVL", "col": "A8BDEC", "col2": "BBB2FF", "scope": "Riverside" }, "sdhl": { "text": "[[List of San Diego Historic Landmarks|San Diego Historic Landmark]]", "abbr": "SDHL", "col": "FFE978", "col2": "FFE978", "scope": "San Diego" }, "sfdl": { "text": "[[List of San Francisco Designated Landmarks|San Francisco Designated Landmark]]", "abbr": "SFDL", "col": "FFE978", "col2": "FFC94B", "scope": "San Francisco" }, "smhl": { "text": "[[List of City of Santa Monica Designated Historic Landmarks|Santa Monica Historic Landmark]]", "abbr": "SMHL", "col": "D8AFE2", "col2": "DDA0DD", "scope": "Santa Monica" }, "seatl": { "text": "[[List of Seattle landmarks|Seattle Landmark]]", "abbr": "SEATL", "col": "D8DBDF", "col2": "D8DBDF", "scope": "Seattle" }, "sll": { "text": "[[Landmarks of St. Louis, Missouri|St. Louis Landmark]]", "abbr": "SLL", "col": "BFFFBF", "col2": "AAAAAA", "scope": "St. Louis" }, "ycl": { "text": "[[Yangon City Heritage List|Yangon City Landmark]]", "abbr": "YCL", "col2": "2E8B57", "scope": "Yangon" }, "chp": { "text": "[[Cultural Heritage of Peru]]", "col": "FFE978", "col2": "CC3333", "scope": "Peru" } } qve4y2obbu44omvpuw14sene7eykwh8 Module:Designation/lookup 828 176088 746331 2026-05-05T03:51:48Z en>Paine Ellsworth 0 per edit request on talk page - bosnia and hertzegovina 746331 json application/json { "world heritage site": "whs", "iucn category ia": "iucnia", "iucn ia": "iucnia", "category ia": "iucnia", "nature reserve": "iucnia", "iucn category ib": "iucnib", "iucn ib": "iucnib", "category ib": "iucnib", "wilderness area": "iucnib", "iucn category ii": "iucnii", "iucn ii": "iucnii", "category ii": "iucnii", "national park": "iucnii", "iucn category iii": "iucniii", "iucn iii": "iucniii", "category iii": "iucniii", "natural monument": "iucniii", "iucn category iv": "iucniv", "iucn iv": "iucniv", "category iv": "iucniv", "habitat management": "iucniv", "species management": "iucniv", "iucn category v": "iucnv", "iucn v": "iucnv", "category v": "iucnv", "protected landscape": "iucnv", "protected seascape": "iucnv", "iucn category vi": "iucnvi", "iucn vi": "iucnvi", "category vi": "iucnvi", "managed resource protected area": "iucnvi", "ramsar wetland": "ramsar", "ramsar wetland of international importance": "ramsar", "historic civil engineering landmark": "hcel", "civil engineering landmark": "hcel", "asce": "hcel", "historic mechanical engineering landmark": "hmel", "mechanical engineering landmark": "hmel", "asme": "hmel", "cultural monument of albania": "cmoa", "albanian cultural monument": "cmoa", "albania": "cmoa", "monument kulture": "cmoa", "national cultural heritage of antigua and barbuda": "ncha", "antigua and barbuda": "ncha", "historical site of antigua and barbuda": "hsab", "historic site of antigua and barbuda": "hsab", "antigua and barbuda historical site": "hsab", "national historic monument of argentina": "nhma", "argentina historic monument": "nhma", "argentina": "nhma", "australian national heritage list": "anhl", "australia": "anhl", "commonwealth heritage list": "cwlthl", "australian commonwealth heritage list": "cwlthl", "commonwealth": "cwlthl", "register national estate": "rne", "register of the national estate": "rne", "australian register of the national estate": "rne", "national monument of bosnia and herzegovina": "kons", "nacionalni spomenik bosne i hercegovine": "kons", "bosnia and herzegovina": "kons", "national historic heritage of brazil": "nhhb", "brazilian historic heritage": "nhhb", "iphan": "nhhb", "brazil": "nhhb", "national historic site of canada": "nhsc", "canadian national historic site": "nhsc", "canada": "nhsc", "heritage railway station of canada": "hrsc", "canadian heritage railway station": "hrsc", "major historic and cultural site protected at the national level (china)": "mchs", "major historic and cultural site protected at the national level": "mchs", "major cultural heritage sites under national level protection": "mchs", "major cultural heritage sites under national-level protection": "mchs", "china historic and cultural": "mchs", "protected natural value of croatia": "pnvc", "croatian protected natural value": "pnvc", "protected area of croatia": "pnvc", "croatian protected area": "pnvc", "croatia natural": "pnvc", "spomenik prirode": "pnvc", "cultural good of croatia": "cgoc", "croatian cultural good": "cgoc", "croatia cultural": "cgoc", "spomenik kulture": "cgoc", "national cultural monument of the czech republic": "ncmcr", "czech national cultural monument": "ncmcr", "national register of historic parks and gardens": "nrhpg", "england historic garden": "nrhpg", "english historic park": "nrhpg", "english historic garden": "nrhpg", "england historic park": "nrhpg", "register of historic parks and gardens": "nrhpg", "historic parks and gardens": "nrhpg", "monument historique": "mh", "france": "mh", "french": "mh", "cultural heritage monument of georgia": "chmg", "immovable cultural monument of national significance of georgia": "icmns", "monuments of national importance": "mani", "monument of national importance (india)": "mani", "monuments of national importance (india)": "mani", "monument of national importance": "mani", "iran national heritage list": "inhl", "iran": "inhl", "iran national heritage": "inhl", "irish national monument": "inmon", "national monument of ireland": "inmon", "ireland": "inmon", "irish": "inmon", "ireland monument in state care": "inmon", "irish monument in state care": "inmon", "national treasure of japan": "ntoj", "japanese national treasure": "ntoj", "japan": "ntoj", "monumento nacional de chile": "chile", "national monument of chile": "chile", "cultural monument of lithuania": "cmll", "lithuania": "cmll", "rijksmonument": "rijks", "dutch national monument": "rijks", "netherlands national monument": "rijks", "national monument of the netherlands": "rijks", "netherlands": "rijks", "dutch": "rijks", "new zealand historic places trust category i": "hpti", "heritage new zealand category 1": "hpti", "nz category 1": "hpti", "heritage nz category i": "hpti", "new zealand category 1": "hpti", "heritage new zealand category i": "hpti", "nz category i": "hpti", "new zealand category i": "hpti", "nzhpt category i": "hpti", "heritage nz category 1": "hpti", "new zealand historic places trust category ii": "hptii", "nzhpt category ii": "hptii", "new zealand category 2": "hptii", "new zealand category ii": "hptii", "nz category ii": "hptii", "nz category 2": "hptii", "heritage new zealand category ii": "hptii", "heritage new zealand category 2": "hptii", "heritage nz category ii": "hptii", "heritage nz category 2": "hptii", "new zealand historic places trust wahi tapu": "nzwtapu", "new zealand wahi tapu": "nzwtapu", "heritage new zealand wahi tapu": "nzwtapu", "nz wahi tapu": "nzwtapu", "heritage nz wahi tapu": "nzwtapu", "new zealand wahi tapu area": "nzwtapua", "heritage new zealand wahi tapu area": "nzwtapua", "nz wahi tapu area": "nzwtapua", "new zealand historic places trust wahi tapu area": "nzwtapua", "heritage nz wahi tapu area": "nzwtapua", "new zealand historic places trust wahi tupuna": "nzwtupuna", "heritage new zealand wahi tupuna": "nzwtupuna", "new zealand wahi tupuna": "nzwtupuna", "nz wahi tupuna": "nzwtupuna", "heritage nz wahi tupuna": "nzwtupuna", "new zealand historic places trust historic area": "nzha", "heritage new zealand historic area": "nzha", "nz historic area": "nzha", "new zealand historic area": "nzha", "heritage nz historic area": "nzha", "register of parks gardens and demesnes of special historic interest": "nihg", "northern ireland historic park": "nihg", "northern ireland historic garden": "nihg", "register of parks, gardens and demesnes": "nihg", "parks, gardens and demesnes": "nihg", "old dhaka heritage sites": "dhaka", "old dhaka": "dhaka", "philippines cultural treasures": "pnct", "philippines treasures": "pnct", "philippines national historical landmarks": "pnhl", "philippines landmarks": "pnhl", "historic monument (poland)": "hmp", "historic monument of poland": "hmp", "historic monuments (poland)": "hmp", "historic monuments of poland": "hmp", "polish historic monument": "hmp", "polish historic monument s": "hmp", "pomnik historii": "hmp", "national monument of portugal": "ippar", "portuguese national monument": "ippar", "portugal": "ippar", "monumento nacional do portugal": "ippar", "igespar": "ippar", "dgpc": "ippar", "national register of historic monuments in romania": "romania", "monument istoric": "romania", "monument historic": "romania", "romanian": "romania", "serbian cultural property of great importance": "cpgi", "serbia": "cpgi", "serbian": "cpgi", "cultural property of great importances": "cpgi", "cultural heritage of serbia": "cpgi", "national monument of singapore": "nms", "singapore national monument": "nms", "singapore": "nms", "historic sites of south korea": "hssk", "historic sites of the republic of korea": "hssk", "national treasures of south korea": "ntsk", "national treasures of the republic of korea": "ntsk", "national folklore cultural heritage of south korea": "nfchsk", "national folklore cultural heritage of the republic of korea": "nfchsk", "scenic sites of the republic of korea": "sssk", "scenic sites of south korea": "sssk", "seoul future heritage": "sfh", "treasures of the republic of korea": "tsk", "treasures of south korea": "tsk", "inventory of gardens and designed landscapes in scotland": "gdls", "gardens and designed landscapes in scotland": "gdls", "inventory of gardens and designed landscapes": "gdls", "spanish property of cultural interest": "bdic", "spanish cultural heritage": "bdic", "spanish asset of cultural interest": "bdic", "bien de interes cultural": "bdic", "spanish": "bdic", "spain": "bdic", "special area of conservation": "sac", "special protection area": "spa", "special area of conservation special protection area": "sacspa", "special protection area special area of conservation": "sacspa", "sac spa": "sacspa", "spa sac": "sacspa", "swiss cultural property of national significance": "scpnc", "swiss": "scpnc", "switzerland": "scpnc", "swiss cultural property": "scpnc", "listed building": "listed", "united kingdom listed building": "listed", "uk listed building": "listed", "category a listed building": "sca", "category a": "sca", "scotland category a": "sca", "grade a listed building": "nia", "grade a": "nia", "northern ireland grade a": "nia", "grade i listed building": "ewi", "grade i": "ewi", "united kingdom grade i": "ewi", "uk grade i": "ewi", "category b listed building": "scb", "category b": "scb", "scotland category b": "scb", "grade b+ listed building": "nib+", "grade b+": "nib+", "northern ireland grade b+": "nib+", "grade ii listed building": "ewii", "grade ii": "ewii", "united kingdom grade ii": "ewii", "uk grade ii": "ewii", "category c listed building": "scc", "category c": "scc", "scotland category c": "scc", "national historic site of tanzania": "nhst", "tanzanian national monument": "nhst", "tanzanian cultural heritage": "nhst", "national historic sites of tanzania": "nhst", "tanzanian historic landmark": "nhst", "tanzania": "nhst", "grade b1 listed building": "nib1", "grade b1": "nib1", "northern ireland grade b1": "nib1", "grade ii* listed building": "ewii*", "grade ii*": "ewii*", "united kingdom grade ii*": "ewii*", "uk grade ii*": "ewii*", "grade b2 listed building": "nib2", "grade b2": "nib2", "northern ireland grade b2": "nib2", "uk scheduled historic monument": "sm", "monument in state care": "sm", "uk scheduled ancient monument": "sm", "uk scheduled monument": "sm", "uk ancient monument": "sm", "scheduled historic monument": "sm", "scheduled monument": "sm", "scheduled ancient monument": "sm", "ancient monument": "sm", "nhle battlefields": "nhleb", "uk registered battlefields": "nhleb", "england registered parks and gardens": "nrpg", "historic garden": "nrpg", "register of historic parks and garden": "nrpg", "uk protected wreck": "nhlew", "uk maritime military grave": "nhlew", "uk historic wreck": "nhlew", "nhle wreck": "nhlew", "england conservation area": "ukca", "english conservation area": "ukca", "uk locally listed": "llb", "local listed site uk": "llb", "locally listed building": "llb", "national heritage list for england": "nhle", "nhle list": "nhle", "nhle register": "nhle", "national register of historic places": "nrhp", "united states historic district": "hd", "u.s. historic district": "hd", "nrhp-hd": "hd", "us historic district": "hd", "historic district": "hd", "united states contributing property": "cp", "us contributing property": "cp", "contributing property": "cp", "nrhp-cp": "cp", "indcp": "cp", "u.s. contributing property": "cp", "us national historic landmark district contributing property": "nhldcp", "national historic landmark district contributing property": "nhldcp", "nrhp-nhldcp": "nhldcp", "united states national historic landmark district contributing property": "nhldcp", "u.s. national historic landmark district contributing property": "nhldcp", "u.s. national battlefield": "nb", "us national battlefield": "nb", "national battlefield": "nb", "nrhp-nb": "nb", "u.s. national battlefield park": "nbp", "us national battlefield park": "nbp", "national battlefield park": "nbp", "nrhp-nbp": "nbp", "u.s. national battlefield site": "nbs", "us national battlefield site": "nbs", "national battlefield site": "nbs", "nrhp-nbs": "nbs", "u.s. national historic landmark": "nhl", "us national historic landmark": "nhl", "national historic landmark": "nhl", "nrhp-nhl": "nhl", "us national historic landmark district": "nhld", "u.s. national historic landmark district": "nhld", "national historic landmark district": "nhld", "nrhp-nhld": "nhld", "u.s. national historical park": "nhp", "us national historical park": "nhp", "national historical park": "nhp", "nrhp-nhp": "nhp", "national heritage area (united states)": "usnha", "national heritage area (u.s.)": "usnha", "national heritage area": "usnha", "national heritage corridor": "usnha", "nha": "usnha", "u.s. national historic reserve": "nhr", "us national historic reserve": "nhr", "national historic reserve": "nhr", "nrhp-nhr": "nhr", "u.s. national historic site": "nhs", "us national historic site": "nhs", "national historic site": "nhs", "nrhp-nhs": "nhs", "u.s. national memorial": "nmem", "us national memorial": "nmem", "national memorial": "nmem", "nrhp-nmem": "nmem", "u.s. national monument": "nmon", "us national monument": "nmon", "national monument": "nmon", "nrhp-nmon": "nmon", "u.s. national military park": "nmp", "us national military park": "nmp", "national military park": "nmp", "nrhp-nmp": "nmp", "u.s. national natural landmark": "nnl", "us national natural landmark": "nnl", "national natural landmark": "nnl", "national wild and scenic rivers system": "nwsrs", "national wild and scenic river": "nwsr", "ihs": "his", "register of parks and gardens of special historic interest in wales": "whp", "wales historic park": "whp", "welsh historic park": "whp", "register of parks and gardens in wales": "whp", "wales historic garden": "whp", "national monument of zambia": "nmz", "zambian national monument": "nmz", "zambia": "nmz", "national monument of taiwan": "twn", "taiwan national": "twn", "taiwan": "twn", "immovable monument of national significance of ukraine": "imnsu", "ukraine national monument": "imnsu", "ukraine national": "imnsu", "immovable monument of local significance of ukraine": "imlsu", "ukraine local monument": "imlsu", "ukraine local": "imlsu", "archaeological protected monument of sri lanka": "apmsl", "alberta historic resources act": "ahra", "alberta": "ahra", "new brunswick": "nbhca", "new brunswick heritage conservation act": "nbhca", "nova scotia": "nshpa", "nova scotia heritage property act": "nshpa", "ontario heritage act": "oha", "ontario": "oha", "prince edward island": "pwihp", "pei": "pwihp", "heritage places protection act": "pwihp", "repertoire du patrimoine culturel du quebec": "rpcq", "quebec": "rpcq", "cultural heritage register of quebec": "rpcq", "saskatchewan": "shpa", "saskatchewan heritage property act": "shpa", "declared monument of hong kong": "hkdm", "hong kong declared monument": "hkdm", "hk declared monument": "hkdm", "hong kong graded building": "gbhk", "hk graded building": "gbhk", "graded building": "gbhk", "hong kong grade i historic building": "gbhki", "hong kong grade i": "gbhki", "hk grade i": "gbhki", "hong kong grade ii historic building": "gbhkii", "hong kong grade ii": "gbhkii", "hk grade ii": "gbhkii", "hk grade iii": "gbhkiii", "hong kong grade iii historic building": "gbhkiii", "hong kong grade iii": "gbhkiii", "basque cultural heritage": "bch", "basque country": "bch", "basque": "bch", "alabama register of landmarks and heritage": "arlh", "alabama register": "arlh", "alabama landmark": "arlh", "alabama": "arlh", "usal": "arlh", "alaska heritage resources survey": "ahrs", "california historical landmark": "chisl", "california": "chisl", "colorado state register of historic properties": "csrhp", "colorado": "csrhp", "usco": "csrhp", "district of columbia inventory of historic sites": "dcihs", "d.c. inventory of historic sites": "dcihs", "florida underwater archaeological preserve": "fuap", "hawaii register of historic places": "ushi", "hawaiʻi register of historic places": "ushi", "hawaiʻi": "ushi", "hawaii": "ushi", "indiana register of historic sites and structures": "irhss", "indiana": "irhss", "usin": "irhss", "michigan state historic site": "mshs", "michigan": "mshs", "mississippi landmark": "usms", "mississippi": "usms", "new hampshire state register of historic places": "nhsrhp", "new hampshire state register": "nhsrhp", "new hampshire": "nhsrhp", "nhsr": "nhsrhp", "usnh": "nhsrhp", "nh state register of historic places": "nhsrhp", "nh state register": "nhsrhp", "n.h. state register of historic places": "nhsrhp", "n.h. state register": "nhsrhp", "new jersey register of historic places": "njrhp", "new jersey": "njrhp", "usnj": "njrhp", "nm state register of cultural properties": "nmsr", "n.m. state register of cultural properties": "nmsr", "new mexico state register": "nmsr", "nm state register": "nmsr", "n.m. state register": "nmsr", "new mexico": "nmsr", "nmsrcp": "nmsr", "usnm": "nmsr", "new york state register of historic places": "usny", "new york": "usny", "new york state": "usny", "nysrhp": "usny", "nevada historical marker": "usnv", "nevada marker": "usnv", "nevada": "usnv", "pennsylvania historical marker": "phm", "pennsylvania": "phm", "pennsylvania marker": "phm", "pa marker": "phm", "puerto rico register of historic sites and zones": "prrhsz", "recorded texas historic landmark": "rthl", "texas": "rthl", "ustx": "rthl", "texas state antiquities landmark": "tsal", "texas state historic site": "tshs", "virginia landmarks register": "vlr", "virginia": "vlr", "usva": "vlr", "queensland heritage register": "qhr", "new south wales state heritage register": "nswhr", "nsw state heritage register": "nswhr", "new south wales heritage register": "nswhr", "nsw heritage register": "nswhr", "nsw": "nswhr", "nsw shr": "nswhr", "new south wales heritage database": "nswhd", "nsw heritage database": "nswhd", "nsw hd": "nswhd", "northern territory heritage register": "nthr", "south australian heritage register": "sahr", "sa heritage register": "sahr", "south australia": "sahr", "tasmanian heritage register": "thr", "tasmania": "thr", "tashr": "thr", "victorian heritage register": "vhr", "victoria (australia)": "vhr", "vichr": "vhr", "western australia state register of heritage places": "wasrhp", "wa state register of heritage places": "wasrhp", "state register of heritage places": "wasrhp", "western australia": "wasrhp", "srhp": "wasrhp", "albuquerque historic landmark": "albhl", "albuquerque": "albhl", "atlanta landmark building": "ahsd", "baltimore city landmark": "bcl", "baltimore": "bcl", "berkeley landmark": "berkl", "berkeley": "berkl", "brisbane heritage register": "bhr", "brisbane (australia)": "bhr", "chicago landmark": "chicl", "chicago": "chicl", "cincinnati local historic landmark": "clhl", "cincinnati landmark": "clhl", "cincinnati": "clhl", "columbus register of historic properties": "crhp", "columbus register": "crhp", "columbus": "crhp", "dallas landmark": "dlmk", "dallas": "dlmk", "davenport register of historic properties": "drhp", "davenport": "drhp", "denver landmarks": "denvl", "denver": "denvl", "long beach historic landmark": "lbhl", "long beach": "lbhl", "los angeles historic cultural monument": "lahcm", "los angeles historic-cultural monument": "lahcm", "los angeles": "lahcm", "minneapolis landmark": "mplsl", "minneapolis": "mplsl", "new york city landmark": "nycl", "nyc landmark": "nycl", "new york city": "nycl", "nyc": "nycl", "oakland": "odl", "oakland designated": "odl", "omaha landmark": "omal", "omaha": "omal", "oyster bay landmark": "obl", "oyster bay, new york": "obl", "oyster bay, ny": "obl", "oyster bay": "obl", "philadelphia register of historic places": "prhp", "philadelphia": "prhp", "pittsburgh historic landmark": "phl", "pittsburgh landmark": "phl", "pittsburgh": "phl", "pghl": "cphd", "city of pittsburgh": "cphd", "pittsburgh historic designation": "cphd", "riverside landmark": "rivl", "riverside": "rivl", "san diego historic landmark": "sdhl", "san diego": "sdhl", "san francisco landmark": "sfdl", "san francisco designated landmark": "sfdl", "san francisco": "sfdl", "santa monica historic landmark": "smhl", "santa monica": "smhl", "seattle landmark": "seatl", "seattle": "seatl", "st. louis landmark": "sll", "st louis landmark": "sll", "st. louis": "sll", "st louis": "sll", "yangon city heritage list": "ycl", "yangon landmark": "ycl", "yangon city landmark": "ycl", "yangon city": "ycl", "yangon": "ycl", "national cultural heritage of peru": "chp", "cultural heritage of peru": "chp", "pcn": "chp", "peru": "chp" } iyzfdjuznq5br1cxm3e7pqm98wl1ywx 746332 746331 2026-06-12T21:56:21Z Robertsky 51025 1 revision imported from [[:en:Module:Designation/lookup]] 746331 json application/json { "world heritage site": "whs", "iucn category ia": "iucnia", "iucn ia": "iucnia", "category ia": "iucnia", "nature reserve": "iucnia", "iucn category ib": "iucnib", "iucn ib": "iucnib", "category ib": "iucnib", "wilderness area": "iucnib", "iucn category ii": "iucnii", "iucn ii": "iucnii", "category ii": "iucnii", "national park": "iucnii", "iucn category iii": "iucniii", "iucn iii": "iucniii", "category iii": "iucniii", "natural monument": "iucniii", "iucn category iv": "iucniv", "iucn iv": "iucniv", "category iv": "iucniv", "habitat management": "iucniv", "species management": "iucniv", "iucn category v": "iucnv", "iucn v": "iucnv", "category v": "iucnv", "protected landscape": "iucnv", "protected seascape": "iucnv", "iucn category vi": "iucnvi", "iucn vi": "iucnvi", "category vi": "iucnvi", "managed resource protected area": "iucnvi", "ramsar wetland": "ramsar", "ramsar wetland of international importance": "ramsar", "historic civil engineering landmark": "hcel", "civil engineering landmark": "hcel", "asce": "hcel", "historic mechanical engineering landmark": "hmel", "mechanical engineering landmark": "hmel", "asme": "hmel", "cultural monument of albania": "cmoa", "albanian cultural monument": "cmoa", "albania": "cmoa", "monument kulture": "cmoa", "national cultural heritage of antigua and barbuda": "ncha", "antigua and barbuda": "ncha", "historical site of antigua and barbuda": "hsab", "historic site of antigua and barbuda": "hsab", "antigua and barbuda historical site": "hsab", "national historic monument of argentina": "nhma", "argentina historic monument": "nhma", "argentina": "nhma", "australian national heritage list": "anhl", "australia": "anhl", "commonwealth heritage list": "cwlthl", "australian commonwealth heritage list": "cwlthl", "commonwealth": "cwlthl", "register national estate": "rne", "register of the national estate": "rne", "australian register of the national estate": "rne", "national monument of bosnia and herzegovina": "kons", "nacionalni spomenik bosne i hercegovine": "kons", "bosnia and herzegovina": "kons", "national historic heritage of brazil": "nhhb", "brazilian historic heritage": "nhhb", "iphan": "nhhb", "brazil": "nhhb", "national historic site of canada": "nhsc", "canadian national historic site": "nhsc", "canada": "nhsc", "heritage railway station of canada": "hrsc", "canadian heritage railway station": "hrsc", "major historic and cultural site protected at the national level (china)": "mchs", "major historic and cultural site protected at the national level": "mchs", "major cultural heritage sites under national level protection": "mchs", "major cultural heritage sites under national-level protection": "mchs", "china historic and cultural": "mchs", "protected natural value of croatia": "pnvc", "croatian protected natural value": "pnvc", "protected area of croatia": "pnvc", "croatian protected area": "pnvc", "croatia natural": "pnvc", "spomenik prirode": "pnvc", "cultural good of croatia": "cgoc", "croatian cultural good": "cgoc", "croatia cultural": "cgoc", "spomenik kulture": "cgoc", "national cultural monument of the czech republic": "ncmcr", "czech national cultural monument": "ncmcr", "national register of historic parks and gardens": "nrhpg", "england historic garden": "nrhpg", "english historic park": "nrhpg", "english historic garden": "nrhpg", "england historic park": "nrhpg", "register of historic parks and gardens": "nrhpg", "historic parks and gardens": "nrhpg", "monument historique": "mh", "france": "mh", "french": "mh", "cultural heritage monument of georgia": "chmg", "immovable cultural monument of national significance of georgia": "icmns", "monuments of national importance": "mani", "monument of national importance (india)": "mani", "monuments of national importance (india)": "mani", "monument of national importance": "mani", "iran national heritage list": "inhl", "iran": "inhl", "iran national heritage": "inhl", "irish national monument": "inmon", "national monument of ireland": "inmon", "ireland": "inmon", "irish": "inmon", "ireland monument in state care": "inmon", "irish monument in state care": "inmon", "national treasure of japan": "ntoj", "japanese national treasure": "ntoj", "japan": "ntoj", "monumento nacional de chile": "chile", "national monument of chile": "chile", "cultural monument of lithuania": "cmll", "lithuania": "cmll", "rijksmonument": "rijks", "dutch national monument": "rijks", "netherlands national monument": "rijks", "national monument of the netherlands": "rijks", "netherlands": "rijks", "dutch": "rijks", "new zealand historic places trust category i": "hpti", "heritage new zealand category 1": "hpti", "nz category 1": "hpti", "heritage nz category i": "hpti", "new zealand category 1": "hpti", "heritage new zealand category i": "hpti", "nz category i": "hpti", "new zealand category i": "hpti", "nzhpt category i": "hpti", "heritage nz category 1": "hpti", "new zealand historic places trust category ii": "hptii", "nzhpt category ii": "hptii", "new zealand category 2": "hptii", "new zealand category ii": "hptii", "nz category ii": "hptii", "nz category 2": "hptii", "heritage new zealand category ii": "hptii", "heritage new zealand category 2": "hptii", "heritage nz category ii": "hptii", "heritage nz category 2": "hptii", "new zealand historic places trust wahi tapu": "nzwtapu", "new zealand wahi tapu": "nzwtapu", "heritage new zealand wahi tapu": "nzwtapu", "nz wahi tapu": "nzwtapu", "heritage nz wahi tapu": "nzwtapu", "new zealand wahi tapu area": "nzwtapua", "heritage new zealand wahi tapu area": "nzwtapua", "nz wahi tapu area": "nzwtapua", "new zealand historic places trust wahi tapu area": "nzwtapua", "heritage nz wahi tapu area": "nzwtapua", "new zealand historic places trust wahi tupuna": "nzwtupuna", "heritage new zealand wahi tupuna": "nzwtupuna", "new zealand wahi tupuna": "nzwtupuna", "nz wahi tupuna": "nzwtupuna", "heritage nz wahi tupuna": "nzwtupuna", "new zealand historic places trust historic area": "nzha", "heritage new zealand historic area": "nzha", "nz historic area": "nzha", "new zealand historic area": "nzha", "heritage nz historic area": "nzha", "register of parks gardens and demesnes of special historic interest": "nihg", "northern ireland historic park": "nihg", "northern ireland historic garden": "nihg", "register of parks, gardens and demesnes": "nihg", "parks, gardens and demesnes": "nihg", "old dhaka heritage sites": "dhaka", "old dhaka": "dhaka", "philippines cultural treasures": "pnct", "philippines treasures": "pnct", "philippines national historical landmarks": "pnhl", "philippines landmarks": "pnhl", "historic monument (poland)": "hmp", "historic monument of poland": "hmp", "historic monuments (poland)": "hmp", "historic monuments of poland": "hmp", "polish historic monument": "hmp", "polish historic monument s": "hmp", "pomnik historii": "hmp", "national monument of portugal": "ippar", "portuguese national monument": "ippar", "portugal": "ippar", "monumento nacional do portugal": "ippar", "igespar": "ippar", "dgpc": "ippar", "national register of historic monuments in romania": "romania", "monument istoric": "romania", "monument historic": "romania", "romanian": "romania", "serbian cultural property of great importance": "cpgi", "serbia": "cpgi", "serbian": "cpgi", "cultural property of great importances": "cpgi", "cultural heritage of serbia": "cpgi", "national monument of singapore": "nms", "singapore national monument": "nms", "singapore": "nms", "historic sites of south korea": "hssk", "historic sites of the republic of korea": "hssk", "national treasures of south korea": "ntsk", "national treasures of the republic of korea": "ntsk", "national folklore cultural heritage of south korea": "nfchsk", "national folklore cultural heritage of the republic of korea": "nfchsk", "scenic sites of the republic of korea": "sssk", "scenic sites of south korea": "sssk", "seoul future heritage": "sfh", "treasures of the republic of korea": "tsk", "treasures of south korea": "tsk", "inventory of gardens and designed landscapes in scotland": "gdls", "gardens and designed landscapes in scotland": "gdls", "inventory of gardens and designed landscapes": "gdls", "spanish property of cultural interest": "bdic", "spanish cultural heritage": "bdic", "spanish asset of cultural interest": "bdic", "bien de interes cultural": "bdic", "spanish": "bdic", "spain": "bdic", "special area of conservation": "sac", "special protection area": "spa", "special area of conservation special protection area": "sacspa", "special protection area special area of conservation": "sacspa", "sac spa": "sacspa", "spa sac": "sacspa", "swiss cultural property of national significance": "scpnc", "swiss": "scpnc", "switzerland": "scpnc", "swiss cultural property": "scpnc", "listed building": "listed", "united kingdom listed building": "listed", "uk listed building": "listed", "category a listed building": "sca", "category a": "sca", "scotland category a": "sca", "grade a listed building": "nia", "grade a": "nia", "northern ireland grade a": "nia", "grade i listed building": "ewi", "grade i": "ewi", "united kingdom grade i": "ewi", "uk grade i": "ewi", "category b listed building": "scb", "category b": "scb", "scotland category b": "scb", "grade b+ listed building": "nib+", "grade b+": "nib+", "northern ireland grade b+": "nib+", "grade ii listed building": "ewii", "grade ii": "ewii", "united kingdom grade ii": "ewii", "uk grade ii": "ewii", "category c listed building": "scc", "category c": "scc", "scotland category c": "scc", "national historic site of tanzania": "nhst", "tanzanian national monument": "nhst", "tanzanian cultural heritage": "nhst", "national historic sites of tanzania": "nhst", "tanzanian historic landmark": "nhst", "tanzania": "nhst", "grade b1 listed building": "nib1", "grade b1": "nib1", "northern ireland grade b1": "nib1", "grade ii* listed building": "ewii*", "grade ii*": "ewii*", "united kingdom grade ii*": "ewii*", "uk grade ii*": "ewii*", "grade b2 listed building": "nib2", "grade b2": "nib2", "northern ireland grade b2": "nib2", "uk scheduled historic monument": "sm", "monument in state care": "sm", "uk scheduled ancient monument": "sm", "uk scheduled monument": "sm", "uk ancient monument": "sm", "scheduled historic monument": "sm", "scheduled monument": "sm", "scheduled ancient monument": "sm", "ancient monument": "sm", "nhle battlefields": "nhleb", "uk registered battlefields": "nhleb", "england registered parks and gardens": "nrpg", "historic garden": "nrpg", "register of historic parks and garden": "nrpg", "uk protected wreck": "nhlew", "uk maritime military grave": "nhlew", "uk historic wreck": "nhlew", "nhle wreck": "nhlew", "england conservation area": "ukca", "english conservation area": "ukca", "uk locally listed": "llb", "local listed site uk": "llb", "locally listed building": "llb", "national heritage list for england": "nhle", "nhle list": "nhle", "nhle register": "nhle", "national register of historic places": "nrhp", "united states historic district": "hd", "u.s. historic district": "hd", "nrhp-hd": "hd", "us historic district": "hd", "historic district": "hd", "united states contributing property": "cp", "us contributing property": "cp", "contributing property": "cp", "nrhp-cp": "cp", "indcp": "cp", "u.s. contributing property": "cp", "us national historic landmark district contributing property": "nhldcp", "national historic landmark district contributing property": "nhldcp", "nrhp-nhldcp": "nhldcp", "united states national historic landmark district contributing property": "nhldcp", "u.s. national historic landmark district contributing property": "nhldcp", "u.s. national battlefield": "nb", "us national battlefield": "nb", "national battlefield": "nb", "nrhp-nb": "nb", "u.s. national battlefield park": "nbp", "us national battlefield park": "nbp", "national battlefield park": "nbp", "nrhp-nbp": "nbp", "u.s. national battlefield site": "nbs", "us national battlefield site": "nbs", "national battlefield site": "nbs", "nrhp-nbs": "nbs", "u.s. national historic landmark": "nhl", "us national historic landmark": "nhl", "national historic landmark": "nhl", "nrhp-nhl": "nhl", "us national historic landmark district": "nhld", "u.s. national historic landmark district": "nhld", "national historic landmark district": "nhld", "nrhp-nhld": "nhld", "u.s. national historical park": "nhp", "us national historical park": "nhp", "national historical park": "nhp", "nrhp-nhp": "nhp", "national heritage area (united states)": "usnha", "national heritage area (u.s.)": "usnha", "national heritage area": "usnha", "national heritage corridor": "usnha", "nha": "usnha", "u.s. national historic reserve": "nhr", "us national historic reserve": "nhr", "national historic reserve": "nhr", "nrhp-nhr": "nhr", "u.s. national historic site": "nhs", "us national historic site": "nhs", "national historic site": "nhs", "nrhp-nhs": "nhs", "u.s. national memorial": "nmem", "us national memorial": "nmem", "national memorial": "nmem", "nrhp-nmem": "nmem", "u.s. national monument": "nmon", "us national monument": "nmon", "national monument": "nmon", "nrhp-nmon": "nmon", "u.s. national military park": "nmp", "us national military park": "nmp", "national military park": "nmp", "nrhp-nmp": "nmp", "u.s. national natural landmark": "nnl", "us national natural landmark": "nnl", "national natural landmark": "nnl", "national wild and scenic rivers system": "nwsrs", "national wild and scenic river": "nwsr", "ihs": "his", "register of parks and gardens of special historic interest in wales": "whp", "wales historic park": "whp", "welsh historic park": "whp", "register of parks and gardens in wales": "whp", "wales historic garden": "whp", "national monument of zambia": "nmz", "zambian national monument": "nmz", "zambia": "nmz", "national monument of taiwan": "twn", "taiwan national": "twn", "taiwan": "twn", "immovable monument of national significance of ukraine": "imnsu", "ukraine national monument": "imnsu", "ukraine national": "imnsu", "immovable monument of local significance of ukraine": "imlsu", "ukraine local monument": "imlsu", "ukraine local": "imlsu", "archaeological protected monument of sri lanka": "apmsl", "alberta historic resources act": "ahra", "alberta": "ahra", "new brunswick": "nbhca", "new brunswick heritage conservation act": "nbhca", "nova scotia": "nshpa", "nova scotia heritage property act": "nshpa", "ontario heritage act": "oha", "ontario": "oha", "prince edward island": "pwihp", "pei": "pwihp", "heritage places protection act": "pwihp", "repertoire du patrimoine culturel du quebec": "rpcq", "quebec": "rpcq", "cultural heritage register of quebec": "rpcq", "saskatchewan": "shpa", "saskatchewan heritage property act": "shpa", "declared monument of hong kong": "hkdm", "hong kong declared monument": "hkdm", "hk declared monument": "hkdm", "hong kong graded building": "gbhk", "hk graded building": "gbhk", "graded building": "gbhk", "hong kong grade i historic building": "gbhki", "hong kong grade i": "gbhki", "hk grade i": "gbhki", "hong kong grade ii historic building": "gbhkii", "hong kong grade ii": "gbhkii", "hk grade ii": "gbhkii", "hk grade iii": "gbhkiii", "hong kong grade iii historic building": "gbhkiii", "hong kong grade iii": "gbhkiii", "basque cultural heritage": "bch", "basque country": "bch", "basque": "bch", "alabama register of landmarks and heritage": "arlh", "alabama register": "arlh", "alabama landmark": "arlh", "alabama": "arlh", "usal": "arlh", "alaska heritage resources survey": "ahrs", "california historical landmark": "chisl", "california": "chisl", "colorado state register of historic properties": "csrhp", "colorado": "csrhp", "usco": "csrhp", "district of columbia inventory of historic sites": "dcihs", "d.c. inventory of historic sites": "dcihs", "florida underwater archaeological preserve": "fuap", "hawaii register of historic places": "ushi", "hawaiʻi register of historic places": "ushi", "hawaiʻi": "ushi", "hawaii": "ushi", "indiana register of historic sites and structures": "irhss", "indiana": "irhss", "usin": "irhss", "michigan state historic site": "mshs", "michigan": "mshs", "mississippi landmark": "usms", "mississippi": "usms", "new hampshire state register of historic places": "nhsrhp", "new hampshire state register": "nhsrhp", "new hampshire": "nhsrhp", "nhsr": "nhsrhp", "usnh": "nhsrhp", "nh state register of historic places": "nhsrhp", "nh state register": "nhsrhp", "n.h. state register of historic places": "nhsrhp", "n.h. state register": "nhsrhp", "new jersey register of historic places": "njrhp", "new jersey": "njrhp", "usnj": "njrhp", "nm state register of cultural properties": "nmsr", "n.m. state register of cultural properties": "nmsr", "new mexico state register": "nmsr", "nm state register": "nmsr", "n.m. state register": "nmsr", "new mexico": "nmsr", "nmsrcp": "nmsr", "usnm": "nmsr", "new york state register of historic places": "usny", "new york": "usny", "new york state": "usny", "nysrhp": "usny", "nevada historical marker": "usnv", "nevada marker": "usnv", "nevada": "usnv", "pennsylvania historical marker": "phm", "pennsylvania": "phm", "pennsylvania marker": "phm", "pa marker": "phm", "puerto rico register of historic sites and zones": "prrhsz", "recorded texas historic landmark": "rthl", "texas": "rthl", "ustx": "rthl", "texas state antiquities landmark": "tsal", "texas state historic site": "tshs", "virginia landmarks register": "vlr", "virginia": "vlr", "usva": "vlr", "queensland heritage register": "qhr", "new south wales state heritage register": "nswhr", "nsw state heritage register": "nswhr", "new south wales heritage register": "nswhr", "nsw heritage register": "nswhr", "nsw": "nswhr", "nsw shr": "nswhr", "new south wales heritage database": "nswhd", "nsw heritage database": "nswhd", "nsw hd": "nswhd", "northern territory heritage register": "nthr", "south australian heritage register": "sahr", "sa heritage register": "sahr", "south australia": "sahr", "tasmanian heritage register": "thr", "tasmania": "thr", "tashr": "thr", "victorian heritage register": "vhr", "victoria (australia)": "vhr", "vichr": "vhr", "western australia state register of heritage places": "wasrhp", "wa state register of heritage places": "wasrhp", "state register of heritage places": "wasrhp", "western australia": "wasrhp", "srhp": "wasrhp", "albuquerque historic landmark": "albhl", "albuquerque": "albhl", "atlanta landmark building": "ahsd", "baltimore city landmark": "bcl", "baltimore": "bcl", "berkeley landmark": "berkl", "berkeley": "berkl", "brisbane heritage register": "bhr", "brisbane (australia)": "bhr", "chicago landmark": "chicl", "chicago": "chicl", "cincinnati local historic landmark": "clhl", "cincinnati landmark": "clhl", "cincinnati": "clhl", "columbus register of historic properties": "crhp", "columbus register": "crhp", "columbus": "crhp", "dallas landmark": "dlmk", "dallas": "dlmk", "davenport register of historic properties": "drhp", "davenport": "drhp", "denver landmarks": "denvl", "denver": "denvl", "long beach historic landmark": "lbhl", "long beach": "lbhl", "los angeles historic cultural monument": "lahcm", "los angeles historic-cultural monument": "lahcm", "los angeles": "lahcm", "minneapolis landmark": "mplsl", "minneapolis": "mplsl", "new york city landmark": "nycl", "nyc landmark": "nycl", "new york city": "nycl", "nyc": "nycl", "oakland": "odl", "oakland designated": "odl", "omaha landmark": "omal", "omaha": "omal", "oyster bay landmark": "obl", "oyster bay, new york": "obl", "oyster bay, ny": "obl", "oyster bay": "obl", "philadelphia register of historic places": "prhp", "philadelphia": "prhp", "pittsburgh historic landmark": "phl", "pittsburgh landmark": "phl", "pittsburgh": "phl", "pghl": "cphd", "city of pittsburgh": "cphd", "pittsburgh historic designation": "cphd", "riverside landmark": "rivl", "riverside": "rivl", "san diego historic landmark": "sdhl", "san diego": "sdhl", "san francisco landmark": "sfdl", "san francisco designated landmark": "sfdl", "san francisco": "sfdl", "santa monica historic landmark": "smhl", "santa monica": "smhl", "seattle landmark": "seatl", "seattle": "seatl", "st. louis landmark": "sll", "st louis landmark": "sll", "st. louis": "sll", "st louis": "sll", "yangon city heritage list": "ycl", "yangon landmark": "ycl", "yangon city landmark": "ycl", "yangon city": "ycl", "yangon": "ycl", "national cultural heritage of peru": "chp", "cultural heritage of peru": "chp", "pcn": "chp", "peru": "chp" } iyzfdjuznq5br1cxm3e7pqm98wl1ywx File:Testlytraa.jpeg 6 176089 746333 2026-06-12T22:29:41Z Cryptocurrency777 73698 746333 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 User:Cryptocurrency777/sandbox9 2 176090 746334 2026-06-12T22:34:56Z Cryptocurrency777 73698 Created page with "{{Infobox musical artist | image = [[File:testlytraa.jpeg|200x300px]] | name = Lytra | birth_place = Copenhagen, Denmark | genre = EDM | instrument = Vocals }} '''Lytra''' is an EDM and hyperpop singer-songwriter and producer from Copenhagen, Denmark.<ref>{{Citation | title=Lytra - Songs, Events and Music Stats - Viberate.com | url=https://www.viberate.com/artist/lytra/ | access-date=12 June 2026}}</ref> He rose to popul..." 746334 wikitext text/x-wiki {{Infobox musical artist | image = [[File:testlytraa.jpeg|200x300px]] | name = Lytra | birth_place = Copenhagen, Denmark | genre = EDM | instrument = Vocals }} '''Lytra''' is an EDM and hyperpop singer-songwriter and producer from Copenhagen, Denmark.<ref>{{Citation | title=Lytra - Songs, Events and Music Stats - Viberate.com | url=https://www.viberate.com/artist/lytra/ | access-date=12 June 2026}}</ref> He rose to popularity in the music scene in 2022 after releasing his first song "Br0kn" and his first EP "Melancholic Dreamland". He later collabrated with multiple artists in the hyperpop music scene, such as [[Asteria (singer)| Asteria]], [[Kets4eki]], [[Anti-Light]], and [[Xaduma]]. He released his most commercially successful single with Asteria in 2024 titled "[[HAHA (Lytra and Asteria song)|HAHA]]", which later had a remix with Kets4eki and [[Vyzer (singer)|Vyzer]]. He later released his album ''[[kiss me before you leave]]'' in October 2025.<ref>{{Citation | title=kiss me before you leave - Album by Lytra | url=https://music.apple.com/ug/album/kiss-me-before-you-leave/1843587434 | access-date=12 June 2026}}</ref> ==References== {{reflist}} j1arlladzu09xtcc3jr79sfdhyzwnb8 746336 746334 2026-06-12T22:37:06Z Cryptocurrency777 73698 746336 wikitext text/x-wiki {{Infobox musical artist | image = [[File:testlytraa.jpeg|200x300px]] | caption = Lytra in 2025 | name = Lytra | birth_place = Copenhagen, Denmark | genre = EDM | instrument = Vocals }} '''Lytra''' is an EDM and hyperpop singer-songwriter and producer from Copenhagen, Denmark.<ref>{{Citation | title=Lytra - Songs, Events and Music Stats - Viberate.com | url=https://www.viberate.com/artist/lytra/ | access-date=12 June 2026}}</ref> He rose to popularity in the music scene in 2022 after releasing his first song "Br0kn" and his first EP "Melancholic Dreamland". He later collabrated with multiple artists in the hyperpop music scene, such as [[Asteria (singer)| Asteria]], [[Kets4eki]], [[Anti-Light]], and [[Xaduma]]. He released his most commercially successful single with Asteria in 2024 titled "[[HAHA (Lytra and Asteria song)|HAHA]]", which later had a remix with Kets4eki and [[Vyzer (singer)|Vyzer]]. He later released his album ''[[kiss me before you leave]]'' in October 2025.<ref>{{Citation | title=kiss me before you leave - Album by Lytra | url=https://music.apple.com/ug/album/kiss-me-before-you-leave/1843587434 | access-date=12 June 2026}}</ref> ==References== {{reflist}} 32ble1pyefb2pgsm30c35h5v5nwslmb Lytra 0 176091 746335 2026-06-12T22:35:27Z Cryptocurrency777 73698 Redirected page to [[User:Cryptocurrency777/sandbox9]] 746335 wikitext text/x-wiki #redirect [[User:Cryptocurrency777/sandbox9]] lyyh3vsikb0qs9q130oltfvm8u7y3mz MediaWiki:Reportincident-dialog-unacceptable-behavior-community-managed 8 176092 746350 2026-06-13T04:17:02Z CaptainEek 47282 Try purposefully blank 746350 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 User:SSethi (WMF)/Starter kit/tryr 2 176093 746369 2026-06-13T08:05:24Z SSethi (WMF) 36407 Initialised by StarterKit tool — ready for translation 746369 wikitext text/x-wiki <div style="text-align: center; font-family: 'Linux Libertine', Georgia, Times, serif; margin: 1.5em 0;"> <span style="font-size: 2.3em; line-height: 1.2;">Welcome to {{#language:{{PAGELANGUAGE}}}} Wikipedia</span><br/> <span style="font-size: 1.1em; color: #54595d;">The free encyclopedia that anyone can edit</span><br/> <span style="font-size: 0.95em; color: #72777d; margin-top: 0.5em; display: inline-block;">{{NUMBEROFACTIVEUSERS}} active editors • '''{{NUMBEROFARTICLES}}''' articles in this {{SITENAME}}</span> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> 2gaz0l1265uxned195lmw3a6r0oocxa User:SSethi (WMF)/Starter kit/ytry 2 176094 746370 2026-06-13T08:05:26Z SSethi (WMF) 36407 Initialised by StarterKit tool — ready for translation 746370 wikitext text/x-wiki <div style="border:1px solid #CBD5E1;border-radius:4px;background:#ffffff;overflow:hidden;margin-bottom:16px;"> <div style="background:#F8FAFC;border-bottom:1px solid #CBD5E1;padding:8px 16px;font-weight:bold;">Wikipedia's sister projects</div> <div style="padding:16px;"> Wikipedia is written by volunteer editors and hosted by the [https://wikimediafoundation.org/ Wikimedia Foundation], a non-profit organization that also hosts a range of other volunteer [https://wikimediafoundation.org/our-work/wikimedia-projects/ projects]: <ul style="list-style:none;margin:8px 0 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;"> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Commons-logo.svg|31px|link=https://commons.wikimedia.org/|alt=Commons logo]]<span>[https://commons.wikimedia.org/ Commons]<br/><small style="color:#555;">Free media repository</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:MediaWiki-2020-icon.svg|35px|link=https://www.mediawiki.org/|alt=MediaWiki logo]]<span>[https://www.mediawiki.org/ MediaWiki]<br/><small style="color:#555;">Wiki software development</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikimedia Community Logo.svg|35px|link=https://meta.wikimedia.org/|alt=Meta-Wiki logo]]<span>[https://meta.wikimedia.org/ Meta-Wiki]<br/><small style="color:#555;">Wikimedia project coordination</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikibooks-logo.svg|35px|link=https://www.wikibooks.org/|alt=Wikibooks logo]]<span>[https://www.wikibooks.org/ Wikibooks]<br/><small style="color:#555;">Free textbooks and manuals</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikidata-logo.svg|47px|link=https://www.wikidata.org/|alt=Wikidata logo]]<span>[https://www.wikidata.org/ Wikidata]<br/><small style="color:#555;">Free knowledge base</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikinews-logo.svg|51px|link=https://www.wikinews.org/|alt=Wikinews logo]]<span>[https://www.wikinews.org/ Wikinews]<br/><small style="color:#555;">Free-content news</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikiquote-logo.svg|35px|link=https://www.wikiquote.org/|alt=Wikiquote logo]]<span>[https://www.wikiquote.org/ Wikiquote]<br/><small style="color:#555;">Collection of quotations</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikisource-logo.svg|35px|link=https://www.wikisource.org/|alt=Wikisource logo]]<span>[https://www.wikisource.org/ Wikisource]<br/><small style="color:#555;">Free-content library</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikispecies-logo.svg|35px|link=https://species.wikimedia.org/|alt=Wikispecies logo]]<span>[https://species.wikimedia.org/ Wikispecies]<br/><small style="color:#555;">Directory of species</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikiversity logo 2017.svg|41px|link=https://www.wikiversity.org/|alt=Wikiversity logo]]<span>[https://www.wikiversity.org/ Wikiversity]<br/><small style="color:#555;">Free learning tools</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikivoyage-Logo-v3-icon.svg|35px|link=https://www.wikivoyage.org/|alt=Wikivoyage logo]]<span>[https://www.wikivoyage.org/ Wikivoyage]<br/><small style="color:#555;">Free travel guide</small></span></li> <li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wiktionary-logo-v2.svg|35px|link=https://www.wiktionary.org/|alt=Wiktionary logo]]<span>[https://www.wiktionary.org/ Wiktionary]<br/><small style="color:#555;">Dictionary and thesaurus</small></span></li> </ul> </div> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> sqqnlmlgl2eejn6h1edrw231bhol386 User:SSethi (WMF)/Starter kit/Wikipedia's sister projects/styles.css 2 176095 746371 2026-06-13T08:05:27Z SSethi (WMF) 36407 Initialised by StarterKit tool (TemplateStyles) 746371 sanitized-css text/css /* disabled for now */ sgd63rr2jkn6wpyegndcxl2s0jbczyh User:SSethi (WMF)/Starter kit/tytry 2 176096 746372 2026-06-13T08:05:30Z SSethi (WMF) 36407 Initialised by StarterKit tool — ready for translation 746372 wikitext text/x-wiki <div style="border:1px solid #CBD5E1;border-radius:4px;background:#ffffff;overflow:hidden;"> <div style="background:#F8FAFC;border-bottom:1px solid #CBD5E1;padding:8px 16px;font-weight:bold;">Wikipedia languages</div> <div style="padding:16px;"> Many [https://meta.wikimedia.org/wiki/List_of_Wikipedias other Wikipedias are available]; some of the largest are listed below. <ul style="list-style:none;margin:8px 0 0 0;padding:0;"> <li style="margin-bottom:12px;"> <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;"> <div style="flex:1;height:1px;background:#CBD5E1;"></div> <div style="font-weight:bold;white-space:nowrap;">1,000,000+ articles</div> <div style="flex:1;height:1px;background:#CBD5E1;"></div> </div> <div style="line-height:2;"> [https://ar.wikipedia.org/wiki/ العربية] &nbsp;·&nbsp; [https://de.wikipedia.org/wiki/ Deutsch] &nbsp;·&nbsp; [https://es.wikipedia.org/wiki/ Español] &nbsp;·&nbsp; [https://fa.wikipedia.org/wiki/ فارسی]&lrm; · [https://fr.wikipedia.org/wiki/ Français] &nbsp;·&nbsp; [https://it.wikipedia.org/wiki/ Italiano] &nbsp;·&nbsp; [https://nl.wikipedia.org/wiki/ Nederlands] &nbsp;·&nbsp; [https://ja.wikipedia.org/wiki/ 日本語] &nbsp;·&nbsp; [https://pl.wikipedia.org/wiki/ Polski] &nbsp;·&nbsp; [https://pt.wikipedia.org/wiki/ Português] &nbsp;·&nbsp; [https://ru.wikipedia.org/wiki/ Русский] &nbsp;·&nbsp; [https://sv.wikipedia.org/wiki/ Svenska] &nbsp;·&nbsp; [https://uk.wikipedia.org/wiki/ Українська] &nbsp;·&nbsp; [https://vi.wikipedia.org/wiki/ Tiếng Việt] &nbsp;·&nbsp; [https://zh.wikipedia.org/wiki/ 中文] </div> </li> <li style="margin-bottom:12px;"> <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;"> <div style="flex:1;height:1px;background:#CBD5E1;"></div> <div style="font-weight:bold;white-space:nowrap;">250,000+ articles</div> <div style="flex:1;height:1px;background:#CBD5E1;"></div> </div> <div style="line-height:2;"> [https://id.wikipedia.org/wiki/ Bahasa Indonesia] &nbsp;·&nbsp; [https://ms.wikipedia.org/wiki/ Bahasa Melayu] &nbsp;·&nbsp; [https://nan.wikipedia.org/wiki/ 閩南語] &nbsp;·&nbsp; [https://bg.wikipedia.org/wiki/ Български] ·&nbsp; [https://ca.wikipedia.org/wiki/ Català] &nbsp;·&nbsp; [https://cs.wikipedia.org/wiki/ Čeština] &nbsp;·&nbsp; [https://da.wikipedia.org/wiki/ Dansk] &nbsp;·&nbsp; [https://et.wikipedia.org/wiki/ Eesti] &nbsp;·&nbsp; [https://el.wikipedia.org/wiki/ Ελληνικά] &nbsp;·&nbsp; [https://eo.wikipedia.org/wiki/ Esperanto] &nbsp;·&nbsp; [https://eu.wikipedia.org/wiki/ Euskara] &nbsp;·&nbsp; [https://he.wikipedia.org/wiki/ עברית] &nbsp;·&nbsp; [https://hy.wikipedia.org/wiki/ Հայերեն] &nbsp;·&nbsp; [https://ko.wikipedia.org/wiki/ 한국어] &nbsp;·&nbsp; [https://hu.wikipedia.org/wiki/ Magyar] &nbsp;·&nbsp; [https://no.wikipedia.org/wiki/ Norsk] &nbsp;·&nbsp; [https://ro.wikipedia.org/wiki/ Română] &nbsp;·&nbsp; [https://simple.wikipedia.org/wiki/ Simple English] &nbsp;·&nbsp; [https://sk.wikipedia.org/wiki/ Slovenčina] &nbsp;·&nbsp; [https://sr.wikipedia.org/wiki/ Српски] &nbsp;·&nbsp; [https://sh.wikipedia.org/wiki/ Srpskohrvatski] &nbsp;·&nbsp; [https://fi.wikipedia.org/wiki/ Suomi] &nbsp;·&nbsp; [https://tr.wikipedia.org/wiki/ Türkçe] &nbsp;·&nbsp; [https://uz.wikipedia.org/wiki/ Oʻzbek] </div> </li> <li style="margin-bottom:4px;"> <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;"> <div style="flex:1;height:1px;background:#CBD5E1;"></div> <div style="font-weight:bold;white-space:nowrap;">50,000+ articles</div> <div style="flex:1;height:1px;background:#CBD5E1;"></div> </div> <div style="line-height:2;"> [https://ast.wikipedia.org/wiki/ Asturianu] &nbsp;·&nbsp; [https://az.wikipedia.org/wiki/ Azərbaycanca] &nbsp;·&nbsp; [https://bn.wikipedia.org/wiki/ বাংলা] &nbsp;·&nbsp; [https://bs.wikipedia.org/wiki/ Bosanski] &nbsp;·&nbsp; [https://ckb.wikipedia.org/wiki/ کوردی] &nbsp;·&nbsp; [https://fy.wikipedia.org/wiki/ Frysk] &nbsp;·&nbsp; [https://ga.wikipedia.org/wiki/ Gaeilge] &nbsp;·&nbsp; [https://gl.wikipedia.org/wiki/ Galego] &nbsp;·&nbsp; [https://hr.wikipedia.org/wiki/ Hrvatski] &nbsp;·&nbsp; [https://ka.wikipedia.org/wiki/ ქართული] &nbsp;·&nbsp; [https://ku.wikipedia.org/wiki/ Kurdî] &nbsp;·&nbsp; [https://lv.wikipedia.org/wiki/ Latviešu] &nbsp;·&nbsp; [https://lt.wikipedia.org/wiki/ Lietuvių] &nbsp;·&nbsp; [https://ml.wikipedia.org/wiki/ മലയാളം] &nbsp;·&nbsp; [https://mk.wikipedia.org/wiki/ Македонски] &nbsp;·&nbsp; [https://my.wikipedia.org/wiki/ မြန်မာဘာသာ] &nbsp;·&nbsp; [https://nn.wikipedia.org/wiki/ Norsk nynorsk] &nbsp;·&nbsp; [https://pa.wikipedia.org/wiki/ ਪੰਜਾਬੀ] &nbsp;·&nbsp; [https://sq.wikipedia.org/wiki/ Shqip] &nbsp;·&nbsp; [https://sl.wikipedia.org/wiki/ Slovenščina] &nbsp;·&nbsp; [https://th.wikipedia.org/wiki/ ไทย] &nbsp;·&nbsp; [https://te.wikipedia.org/wiki/ తెలుగు] &nbsp;·&nbsp; [https://ur.wikipedia.org/wiki/ اردو] </div> </li> </ul> </div> </div> <noinclude>[[Category:Starter kit templates]]</noinclude> qfil1o4vm3tqidfgmg9xjryqel5ppoz User:SSethi (WMF)/Starter kit/Wikipedia languages/styles.css 2 176097 746373 2026-06-13T08:05:30Z SSethi (WMF) 36407 Initialised by StarterKit tool (TemplateStyles) 746373 sanitized-css text/css /* disabled for now */ sgd63rr2jkn6wpyegndcxl2s0jbczyh