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|}}}|#ddd|{{#invoke:Designation|color|nrhp}}}};">{{#if:{{{delisted|}}}|Formerly listed on the }}[[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|}}}|#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 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 reference {{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|}}}| (original)<br />{{#invoke:String|replace|{{if empty|{{{increase_refnum|}}}|{{{increase1_refnum}}}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (increase{{#if:{{{increase2_refnum|}}}| 1}}){{#if:{{{increase2_refnum|}}}|<br />{{#invoke:String|replace|{{{increase2_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (increase 2)}}{{#if:{{{increase3_refnum|}}}|<br />{{#invoke:String|replace|{{{increase3_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (increase 3)}}{{#if:{{{increase4_refnum|}}}|<br />{{#invoke:String|replace|{{{increase4_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (increase 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}} (decrease{{#if:{{{decrease2_refnum|}}}| 1}}){{#if:{{{decrease2_refnum|}}}|<br />{{#invoke:String|replace|{{{decrease2_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (decrease 2)}}{{#if:{{{decrease3_refnum|}}}|<br />{{#invoke:String|replace|{{{decrease3_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (decrease 3)}}{{#if:{{{decrease4_refnum|}}}|<br />{{#invoke:String|replace|{{{decrease4_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (decrease 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 increase{{#if:{{{increase2|}}}|s}}
|data35 = {{if empty|{{{increase|}}}|{{{increase1|}}}}}{{#if:{{{increase2|}}}|<br />{{{increase2}}}}}{{#if:{{{increase3|}}}|<br />{{{increase3}}}}}{{#if:{{{increase4|}}}|<br />{{{increase4}}}}}
|label36 = Boundary decrease{{#if:{{{decrease2|}}}|s}}
|data36 = {{if empty|{{{decrease|}}}|{{{decrease1|}}}}}{{#if:{{{decrease2|}}}|<br />{{{decrease2}}}}}{{#if:{{{decrease3|}}}|<br />{{{decrease3}}}}}{{#if:{{{decrease4|}}}|<br />{{{decrease4}}}}}
|label37 = Designated {{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type}}}}}}}
|data37 = {{{designated_nrhp_type|}}}
|label38 = Designated {{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type2}}}}}}}
|data38 = {{{designated_nrhp_type2|}}}
|label39 = Designated {{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type3}}}}}}}
|data39 = {{{designated_nrhp_type3|}}}
|label40 = Designated {{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 {{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type}}}}}}}
|data45 = {{{delisted_nrhp_type|}}}
|label46 = Delisted {{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type2}}}}}}}
|data46 = {{{delisted_nrhp_type2|}}}
|label47 = Delisted {{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type3}}}}}}}
|data47 = {{{delisted_nrhp_type3|}}}
|label48 = Delisted {{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|}}}|#ddd|{{#invoke:Designation|color|nrhp}}}};">{{#if:{{{delisted|}}}|Formerly listed on the }}[[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|}}}|#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 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 reference {{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|}}}| (original)<br />{{#invoke:String|replace|{{if empty|{{{increase_refnum|}}}|{{{increase1_refnum}}}}}|(%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (increase{{#if:{{{increase2_refnum|}}}| 1}}){{#if:{{{increase2_refnum|}}}|<br />{{#invoke:String|replace|{{{increase2_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (increase 2)}}{{#if:{{{increase3_refnum|}}}|<br />{{#invoke:String|replace|{{{increase3_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (increase 3)}}{{#if:{{{increase4_refnum|}}}|<br />{{#invoke:String|replace|{{{increase4_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (increase 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}} (decrease{{#if:{{{decrease2_refnum|}}}| 1}}){{#if:{{{decrease2_refnum|}}}|<br />{{#invoke:String|replace|{{{decrease2_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (decrease 2)}}{{#if:{{{decrease3_refnum|}}}|<br />{{#invoke:String|replace|{{{decrease3_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (decrease 3)}}{{#if:{{{decrease4_refnum|}}}|<br />{{#invoke:String|replace|{{{decrease4_refnum}}}|(%d%d+)|[{{NRHP Focus|%1|url=yes}} %1]|1|false}} (decrease 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 increase{{#if:{{{increase2|}}}|s}}
|data35 = {{if empty|{{{increase|}}}|{{{increase1|}}}}}{{#if:{{{increase2|}}}|<br />{{{increase2}}}}}{{#if:{{{increase3|}}}|<br />{{{increase3}}}}}{{#if:{{{increase4|}}}|<br />{{{increase4}}}}}
|label36 = Boundary decrease{{#if:{{{decrease2|}}}|s}}
|data36 = {{if empty|{{{decrease|}}}|{{{decrease1|}}}}}{{#if:{{{decrease2|}}}|<br />{{{decrease2}}}}}{{#if:{{{decrease3|}}}|<br />{{{decrease3}}}}}{{#if:{{{decrease4|}}}|<br />{{{decrease4}}}}}
|label37 = Designated {{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type}}}}}}}
|data37 = {{{designated_nrhp_type|}}}
|label38 = Designated {{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type2}}}}}}}
|data38 = {{{designated_nrhp_type2|}}}
|label39 = Designated {{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type3}}}}}}}
|data39 = {{{designated_nrhp_type3|}}}
|label40 = Designated {{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 {{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type}}}}}}}
|data45 = {{{delisted_nrhp_type|}}}
|label46 = Delisted {{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type2}}}}}}}
|data46 = {{{delisted_nrhp_type2|}}}
|label47 = Delisted {{Infobox NRHP/conv|abbr|{{lc:{{{nrhp_type3}}}}}}}
|data47 = {{{delisted_nrhp_type3|}}}
|label48 = Delisted {{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 ~~~~''}}. [[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 ~~~~''}}. [[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 [[WP:AE{{!}}arbitration enforcement noticeboard]] or [[WP:AN{{!}}administrators' noticeboard]]. ''Your reason here OR place the reason below this template.'' ~~~~}}</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. </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">— <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}} • {{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}} • {{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}} • {{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">— <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">— <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">— <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">— <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">— <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 ~~~~''}}. [[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 ~~~~''}}. [[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 [[WP:AE{{!}}arbitration enforcement noticeboard]] or [[WP:AN{{!}}administrators' noticeboard]]. ''Your reason here OR place the reason below this template.'' ~~~~}}</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. </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">— <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}} • {{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}} • {{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}} • {{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">— <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">— <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">— <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">— <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">— <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 = '{'
local rb = '}'
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 = '{'
local rb = '}'
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> <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> <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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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>]] [<span style="color:#9C59D1">they</span>/<span style="color:#FFC107">them</span>] • [[[User talk:enbi|talk]]]</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: {{$3}}: $4 ([[:Category:$5|$6]])</span>$7', -- { 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[^\']", '''); -- 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, '*'); -- 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, " </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, ' </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: {{$3}}: $4 ([[:Category:$5|$6]])</span>$7', -- { 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[^\']", '''); -- 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, '*'); -- 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, " </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, ' </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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''{{#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>}}'' ]</small>
[[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/~2025-44370|~2025-44370]] ([[User talk:~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/~2024-1652|~2024-1652]] ([[User talk:~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/~2025-44370|~2025-44370]] ([[User talk:~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/~2024-1652|~2024-1652]] ([[User talk:~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,"&").replace(/</g,"<").replace(/>/g,">")}function zs(i){return ze(i).replace(/"/g,""")}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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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"><</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">></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;"> [[User:Bfpage|Bfpage]] |[[User talk:Bfpage|leave a message]] </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/ العربية] ·
[https://de.wikipedia.org/wiki/ Deutsch] ·
[https://es.wikipedia.org/wiki/ Español] ·
[https://fa.wikipedia.org/wiki/ فارسی]‎ ·
[https://fr.wikipedia.org/wiki/ Français] ·
[https://it.wikipedia.org/wiki/ Italiano] ·
[https://nl.wikipedia.org/wiki/ Nederlands] ·
[https://ja.wikipedia.org/wiki/ 日本語] ·
[https://pl.wikipedia.org/wiki/ Polski] ·
[https://pt.wikipedia.org/wiki/ Português] ·
[https://ru.wikipedia.org/wiki/ Русский] ·
[https://sv.wikipedia.org/wiki/ Svenska] ·
[https://uk.wikipedia.org/wiki/ Українська] ·
[https://vi.wikipedia.org/wiki/ Tiếng Việt] ·
[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] ·
[https://ms.wikipedia.org/wiki/ Bahasa Melayu] ·
[https://nan.wikipedia.org/wiki/ 閩南語] ·
[https://bg.wikipedia.org/wiki/ Български] ·
[https://ca.wikipedia.org/wiki/ Català] ·
[https://cs.wikipedia.org/wiki/ Čeština] ·
[https://da.wikipedia.org/wiki/ Dansk] ·
[https://et.wikipedia.org/wiki/ Eesti] ·
[https://el.wikipedia.org/wiki/ Ελληνικά] ·
[https://eo.wikipedia.org/wiki/ Esperanto] ·
[https://eu.wikipedia.org/wiki/ Euskara] ·
[https://he.wikipedia.org/wiki/ עברית] ·
[https://hy.wikipedia.org/wiki/ Հայերեն] ·
[https://ko.wikipedia.org/wiki/ 한국어] ·
[https://hu.wikipedia.org/wiki/ Magyar] ·
[https://no.wikipedia.org/wiki/ Norsk] ·
[https://ro.wikipedia.org/wiki/ Română] ·
[https://simple.wikipedia.org/wiki/ Simple English] ·
[https://sk.wikipedia.org/wiki/ Slovenčina] ·
[https://sr.wikipedia.org/wiki/ Српски] ·
[https://sh.wikipedia.org/wiki/ Srpskohrvatski] ·
[https://fi.wikipedia.org/wiki/ Suomi] ·
[https://tr.wikipedia.org/wiki/ Türkçe] ·
[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] ·
[https://az.wikipedia.org/wiki/ Azərbaycanca] ·
[https://bn.wikipedia.org/wiki/ বাংলা] ·
[https://bs.wikipedia.org/wiki/ Bosanski] ·
[https://ckb.wikipedia.org/wiki/ کوردی] ·
[https://fy.wikipedia.org/wiki/ Frysk] ·
[https://ga.wikipedia.org/wiki/ Gaeilge] ·
[https://gl.wikipedia.org/wiki/ Galego] ·
[https://hr.wikipedia.org/wiki/ Hrvatski] ·
[https://ka.wikipedia.org/wiki/ ქართული] ·
[https://ku.wikipedia.org/wiki/ Kurdî] ·
[https://lv.wikipedia.org/wiki/ Latviešu] ·
[https://lt.wikipedia.org/wiki/ Lietuvių] ·
[https://ml.wikipedia.org/wiki/ മലയാളം] ·
[https://mk.wikipedia.org/wiki/ Македонски] ·
[https://my.wikipedia.org/wiki/ မြန်မာဘာသာ] ·
[https://nn.wikipedia.org/wiki/ Norsk nynorsk] ·
[https://pa.wikipedia.org/wiki/ ਪੰਜਾਬੀ] ·
[https://sq.wikipedia.org/wiki/ Shqip] ·
[https://sl.wikipedia.org/wiki/ Slovenščina] ·
[https://th.wikipedia.org/wiki/ ไทย] ·
[https://te.wikipedia.org/wiki/ తెలుగు] ·
[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/ العربية] ·
[https://de.wikipedia.org/wiki/ Deutsch] ·
[https://es.wikipedia.org/wiki/ Español] ·
[https://fa.wikipedia.org/wiki/ فارسی]‎ ·
[https://fr.wikipedia.org/wiki/ Français] ·
[https://it.wikipedia.org/wiki/ Italiano] ·
[https://nl.wikipedia.org/wiki/ Nederlands] ·
[https://ja.wikipedia.org/wiki/ 日本語] ·
[https://pl.wikipedia.org/wiki/ Polski] ·
[https://pt.wikipedia.org/wiki/ Português] ·
[https://ru.wikipedia.org/wiki/ Русский] ·
[https://sv.wikipedia.org/wiki/ Svenska] ·
[https://uk.wikipedia.org/wiki/ Українська] ·
[https://vi.wikipedia.org/wiki/ Tiếng Việt] ·
[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] ·
[https://ms.wikipedia.org/wiki/ Bahasa Melayu] ·
[https://nan.wikipedia.org/wiki/ 閩南語] ·
[https://bg.wikipedia.org/wiki/ Български] ·
[https://ca.wikipedia.org/wiki/ Català] ·
[https://cs.wikipedia.org/wiki/ Čeština] ·
[https://da.wikipedia.org/wiki/ Dansk] ·
[https://et.wikipedia.org/wiki/ Eesti] ·
[https://el.wikipedia.org/wiki/ Ελληνικά] ·
[https://eo.wikipedia.org/wiki/ Esperanto] ·
[https://eu.wikipedia.org/wiki/ Euskara] ·
[https://he.wikipedia.org/wiki/ עברית] ·
[https://hy.wikipedia.org/wiki/ Հայերեն] ·
[https://ko.wikipedia.org/wiki/ 한국어] ·
[https://hu.wikipedia.org/wiki/ Magyar] ·
[https://no.wikipedia.org/wiki/ Norsk] ·
[https://ro.wikipedia.org/wiki/ Română] ·
[https://simple.wikipedia.org/wiki/ Simple English] ·
[https://sk.wikipedia.org/wiki/ Slovenčina] ·
[https://sr.wikipedia.org/wiki/ Српски] ·
[https://sh.wikipedia.org/wiki/ Srpskohrvatski] ·
[https://fi.wikipedia.org/wiki/ Suomi] ·
[https://tr.wikipedia.org/wiki/ Türkçe] ·
[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] ·
[https://az.wikipedia.org/wiki/ Azərbaycanca] ·
[https://bn.wikipedia.org/wiki/ বাংলা] ·
[https://bs.wikipedia.org/wiki/ Bosanski] ·
[https://ckb.wikipedia.org/wiki/ کوردی] ·
[https://fy.wikipedia.org/wiki/ Frysk] ·
[https://ga.wikipedia.org/wiki/ Gaeilge] ·
[https://gl.wikipedia.org/wiki/ Galego] ·
[https://hr.wikipedia.org/wiki/ Hrvatski] ·
[https://ka.wikipedia.org/wiki/ ქართული] ·
[https://ku.wikipedia.org/wiki/ Kurdî] ·
[https://lv.wikipedia.org/wiki/ Latviešu] ·
[https://lt.wikipedia.org/wiki/ Lietuvių] ·
[https://ml.wikipedia.org/wiki/ മലയാളം] ·
[https://mk.wikipedia.org/wiki/ Македонски] ·
[https://my.wikipedia.org/wiki/ မြန်မာဘာသာ] ·
[https://nn.wikipedia.org/wiki/ Norsk nynorsk] ·
[https://pa.wikipedia.org/wiki/ ਪੰਜਾਬੀ] ·
[https://sq.wikipedia.org/wiki/ Shqip] ·
[https://sl.wikipedia.org/wiki/ Slovenščina] ·
[https://th.wikipedia.org/wiki/ ไทย] ·
[https://te.wikipedia.org/wiki/ తెలుగు] ·
[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/ العربية] ·
[https://de.wikipedia.org/wiki/ Deutsch] ·
[https://es.wikipedia.org/wiki/ Español] ·
[https://fa.wikipedia.org/wiki/ فارسی]‎ ·
[https://fr.wikipedia.org/wiki/ Français] ·
[https://it.wikipedia.org/wiki/ Italiano] ·
[https://nl.wikipedia.org/wiki/ Nederlands] ·
[https://ja.wikipedia.org/wiki/ 日本語] ·
[https://pl.wikipedia.org/wiki/ Polski] ·
[https://pt.wikipedia.org/wiki/ Português] ·
[https://ru.wikipedia.org/wiki/ Русский] ·
[https://sv.wikipedia.org/wiki/ Svenska] ·
[https://uk.wikipedia.org/wiki/ Українська] ·
[https://vi.wikipedia.org/wiki/ Tiếng Việt] ·
[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] ·
[https://ms.wikipedia.org/wiki/ Bahasa Melayu] ·
[https://nan.wikipedia.org/wiki/ 閩南語] ·
[https://bg.wikipedia.org/wiki/ Български] ·
[https://ca.wikipedia.org/wiki/ Català] ·
[https://cs.wikipedia.org/wiki/ Čeština] ·
[https://da.wikipedia.org/wiki/ Dansk] ·
[https://et.wikipedia.org/wiki/ Eesti] ·
[https://el.wikipedia.org/wiki/ Ελληνικά] ·
[https://eo.wikipedia.org/wiki/ Esperanto] ·
[https://eu.wikipedia.org/wiki/ Euskara] ·
[https://he.wikipedia.org/wiki/ עברית] ·
[https://hy.wikipedia.org/wiki/ Հայերեն] ·
[https://ko.wikipedia.org/wiki/ 한국어] ·
[https://hu.wikipedia.org/wiki/ Magyar] ·
[https://no.wikipedia.org/wiki/ Norsk] ·
[https://ro.wikipedia.org/wiki/ Română] ·
[https://simple.wikipedia.org/wiki/ Simple English] ·
[https://sk.wikipedia.org/wiki/ Slovenčina] ·
[https://sr.wikipedia.org/wiki/ Српски] ·
[https://sh.wikipedia.org/wiki/ Srpskohrvatski] ·
[https://fi.wikipedia.org/wiki/ Suomi] ·
[https://tr.wikipedia.org/wiki/ Türkçe] ·
[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] ·
[https://az.wikipedia.org/wiki/ Azərbaycanca] ·
[https://bn.wikipedia.org/wiki/ বাংলা] ·
[https://bs.wikipedia.org/wiki/ Bosanski] ·
[https://ckb.wikipedia.org/wiki/ کوردی] ·
[https://fy.wikipedia.org/wiki/ Frysk] ·
[https://ga.wikipedia.org/wiki/ Gaeilge] ·
[https://gl.wikipedia.org/wiki/ Galego] ·
[https://hr.wikipedia.org/wiki/ Hrvatski] ·
[https://ka.wikipedia.org/wiki/ ქართული] ·
[https://ku.wikipedia.org/wiki/ Kurdî] ·
[https://lv.wikipedia.org/wiki/ Latviešu] ·
[https://lt.wikipedia.org/wiki/ Lietuvių] ·
[https://ml.wikipedia.org/wiki/ മലയാളം] ·
[https://mk.wikipedia.org/wiki/ Македонски] ·
[https://my.wikipedia.org/wiki/ မြန်မာဘာသာ] ·
[https://nn.wikipedia.org/wiki/ Norsk nynorsk] ·
[https://pa.wikipedia.org/wiki/ ਪੰਜਾਬੀ] ·
[https://sq.wikipedia.org/wiki/ Shqip] ·
[https://sl.wikipedia.org/wiki/ Slovenščina] ·
[https://th.wikipedia.org/wiki/ ไทย] ·
[https://te.wikipedia.org/wiki/ తెలుగు] ·
[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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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> <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> <small class="plainlinks"><nowiki>[</nowiki> Closure: ''[{{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>'' ]</small>
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 million in 1970 and to 4 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 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 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 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 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 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 million in 1970 and to 4 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 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 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 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 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 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 = • Summer ([[Daylight saving time|DST]])
| data19 = {{#if: {{{summer|}}} {{{utcs|}}}| {{{summer}}} ({{{utcs}}}) }}
| label20 = Elevation [[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|}}}}}}|,|}} }} m| {{convert|{{{elevation-f|{{{elevation_f|}}}}}}|ft|m|0|disp=output only}} }} / {{#if: {{{elevation-f|{{{elevation_f|}}}}}} | {{formatnum: {{replace|{{{elevation-f|{{{elevation_f|}}}}}}|,|}} }} ft |{{convert|{{{elevation-m|{{{elevation_m|}}}}}}|m|ft|0|disp=output only}} }}
| {{#if:{{{elevation-f|{{{elevation_f|}}}}}}| {{formatnum: {{replace|{{{elevation-f|{{{elevation_f|}}}}}}|,|}} }} ft| {{convert|{{{elevation-m|{{{elevation_m|}}}}}}|m|ft|0|disp=output only}} }} / {{#if: {{{elevation-m|{{{elevation_m|}}}}}} | {{formatnum: {{replace|{{{elevation-m|{{{elevation_m|}}}}}}|,|}} }} 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 = • Summer ([[Daylight saving time|DST]])
| data19 = {{#if: {{{summer|}}} {{{utcs|}}}| {{{summer}}} ({{{utcs}}}) }}
| label20 = Elevation [[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|}}}}}}|,|}} }} m| {{convert|{{{elevation-f|{{{elevation_f|}}}}}}|ft|m|0|disp=output only}} }} / {{#if: {{{elevation-f|{{{elevation_f|}}}}}} | {{formatnum: {{replace|{{{elevation-f|{{{elevation_f|}}}}}}|,|}} }} ft |{{convert|{{{elevation-m|{{{elevation_m|}}}}}}|m|ft|0|disp=output only}} }}
| {{#if:{{{elevation-f|{{{elevation_f|}}}}}}| {{formatnum: {{replace|{{{elevation-f|{{{elevation_f|}}}}}}|,|}} }} ft| {{convert|{{{elevation-m|{{{elevation_m|}}}}}}|m|ft|0|disp=output only}} }} / {{#if: {{{elevation-m|{{{elevation_m|}}}}}} | {{formatnum: {{replace|{{{elevation-m|{{{elevation_m|}}}}}}|,|}} }} 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 == "{{{coordinates}}}" 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 == "{{{coordinates}}}" 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¶ms=1_2_N_3_4_W_ or
//tools.wmflabs.org/geohack/geohack.php?pagename=Example¶ms=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¶ms=1_2_N_3_4_W_ or
//tools.wmflabs.org/geohack/geohack.php?pagename=Example¶ms=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|}}}| – {{{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|}}}| – {{{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 → 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 – 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 – 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 → 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 – 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 – 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 = " "
local HTML_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 = " "
local HTML_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 m">{{Cite web |last=Toh |first=Ting Wei |date=18 October 2019 |title=Jewel Changi Airport sees 50 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 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 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 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 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 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 m">{{Cite web |last=Toh |first=Ting Wei |date=18 October 2019 |title=Jewel Changi Airport sees 50 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 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 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 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 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 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 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 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> ' .. 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> ' .. 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> ' .. 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> ' .. 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 ' .. 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 ' .. 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 = '<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= ([[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, ' ');
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 = '<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= ([[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, ' ');
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> → {{Infobox NRHP/locmapin2region|USA Oregon Portland}}
* <code><nowiki>{{Infobox NRHP/locmapin2region|United States San Francisco#USA California#USA}}</nowiki></code> → {{Infobox NRHP/locmapin2region|United States San Francisco#USA California#USA}}
* <code><nowiki>{{Infobox NRHP/locmapin2region|USA Minneapolis–Saint Paul#USA Minnesota#USA}}</nowiki></code> → {{Infobox NRHP/locmapin2region|USA Minneapolis–Saint Paul#USA Minnesota#USA}}
* <code><nowiki>{{Infobox NRHP/locmapin2region|United States Manhattan#New York}}</nowiki></code> → {{Infobox NRHP/locmapin2region|United States Manhattan#New York}}
* <code><nowiki>{{Infobox NRHP/locmapin2region|USA Alaska Juneau#USA Alaska}}</nowiki></code> → {{Infobox NRHP/locmapin2region|USA Alaska Juneau#USA Alaska}}
* <code><nowiki>{{Infobox NRHP/locmapin2region|United States Washington, D.C.#USA}}</nowiki></code> → {{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> → {{Infobox NRHP/locmapin2region|USA Oregon Portland}}
* <code><nowiki>{{Infobox NRHP/locmapin2region|United States San Francisco#USA California#USA}}</nowiki></code> → {{Infobox NRHP/locmapin2region|United States San Francisco#USA California#USA}}
* <code><nowiki>{{Infobox NRHP/locmapin2region|USA Minneapolis–Saint Paul#USA Minnesota#USA}}</nowiki></code> → {{Infobox NRHP/locmapin2region|USA Minneapolis–Saint Paul#USA Minnesota#USA}}
* <code><nowiki>{{Infobox NRHP/locmapin2region|United States Manhattan#New York}}</nowiki></code> → {{Infobox NRHP/locmapin2region|United States Manhattan#New York}}
* <code><nowiki>{{Infobox NRHP/locmapin2region|USA Alaska Juneau#USA Alaska}}</nowiki></code> → {{Infobox NRHP/locmapin2region|USA Alaska Juneau#USA Alaska}}
* <code><nowiki>{{Infobox NRHP/locmapin2region|United States Washington, D.C.#USA}}</nowiki></code> → {{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 notability criteria for its own non-redirectarticle in the English Wikipedia. Red-linked entries are acceptable if the award's notability is 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 indiscriminate list.",
"type": "string",
"required": false
},
"ren_awards": {
"label": "Ren_awards",
"description": "listed awards should meet the notability criteria for its own non-redirectarticle in the English Wikipedia. Red-linked entries are acceptable if the award's notability is 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 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 {{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 notability criteria for its own non-redirectarticle in the English Wikipedia. Red-linked entries are acceptable if the award's notability is 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 indiscriminate list.",
"type": "string",
"required": false
},
"ren_awards": {
"label": "Ren_awards",
"description": "listed awards should meet the notability criteria for its own non-redirectarticle in the English Wikipedia. Red-linked entries are acceptable if the award's notability is 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 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 {{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 = ' ' .. abbr .. ' ' .. 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 .. ' ' .. 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 = ' ' .. abbr .. ' ' .. 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 .. ' ' .. 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/ العربية] ·
[https://de.wikipedia.org/wiki/ Deutsch] ·
[https://es.wikipedia.org/wiki/ Español] ·
[https://fa.wikipedia.org/wiki/ فارسی]‎ ·
[https://fr.wikipedia.org/wiki/ Français] ·
[https://it.wikipedia.org/wiki/ Italiano] ·
[https://nl.wikipedia.org/wiki/ Nederlands] ·
[https://ja.wikipedia.org/wiki/ 日本語] ·
[https://pl.wikipedia.org/wiki/ Polski] ·
[https://pt.wikipedia.org/wiki/ Português] ·
[https://ru.wikipedia.org/wiki/ Русский] ·
[https://sv.wikipedia.org/wiki/ Svenska] ·
[https://uk.wikipedia.org/wiki/ Українська] ·
[https://vi.wikipedia.org/wiki/ Tiếng Việt] ·
[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] ·
[https://ms.wikipedia.org/wiki/ Bahasa Melayu] ·
[https://nan.wikipedia.org/wiki/ 閩南語] ·
[https://bg.wikipedia.org/wiki/ Български] ·
[https://ca.wikipedia.org/wiki/ Català] ·
[https://cs.wikipedia.org/wiki/ Čeština] ·
[https://da.wikipedia.org/wiki/ Dansk] ·
[https://et.wikipedia.org/wiki/ Eesti] ·
[https://el.wikipedia.org/wiki/ Ελληνικά] ·
[https://eo.wikipedia.org/wiki/ Esperanto] ·
[https://eu.wikipedia.org/wiki/ Euskara] ·
[https://he.wikipedia.org/wiki/ עברית] ·
[https://hy.wikipedia.org/wiki/ Հայերեն] ·
[https://ko.wikipedia.org/wiki/ 한국어] ·
[https://hu.wikipedia.org/wiki/ Magyar] ·
[https://no.wikipedia.org/wiki/ Norsk] ·
[https://ro.wikipedia.org/wiki/ Română] ·
[https://simple.wikipedia.org/wiki/ Simple English] ·
[https://sk.wikipedia.org/wiki/ Slovenčina] ·
[https://sr.wikipedia.org/wiki/ Српски] ·
[https://sh.wikipedia.org/wiki/ Srpskohrvatski] ·
[https://fi.wikipedia.org/wiki/ Suomi] ·
[https://tr.wikipedia.org/wiki/ Türkçe] ·
[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] ·
[https://az.wikipedia.org/wiki/ Azərbaycanca] ·
[https://bn.wikipedia.org/wiki/ বাংলা] ·
[https://bs.wikipedia.org/wiki/ Bosanski] ·
[https://ckb.wikipedia.org/wiki/ کوردی] ·
[https://fy.wikipedia.org/wiki/ Frysk] ·
[https://ga.wikipedia.org/wiki/ Gaeilge] ·
[https://gl.wikipedia.org/wiki/ Galego] ·
[https://hr.wikipedia.org/wiki/ Hrvatski] ·
[https://ka.wikipedia.org/wiki/ ქართული] ·
[https://ku.wikipedia.org/wiki/ Kurdî] ·
[https://lv.wikipedia.org/wiki/ Latviešu] ·
[https://lt.wikipedia.org/wiki/ Lietuvių] ·
[https://ml.wikipedia.org/wiki/ മലയാളം] ·
[https://mk.wikipedia.org/wiki/ Македонски] ·
[https://my.wikipedia.org/wiki/ မြန်မာဘာသာ] ·
[https://nn.wikipedia.org/wiki/ Norsk nynorsk] ·
[https://pa.wikipedia.org/wiki/ ਪੰਜਾਬੀ] ·
[https://sq.wikipedia.org/wiki/ Shqip] ·
[https://sl.wikipedia.org/wiki/ Slovenščina] ·
[https://th.wikipedia.org/wiki/ ไทย] ·
[https://te.wikipedia.org/wiki/ తెలుగు] ·
[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